packages feed

rzk 0.8.0 → 0.9.0

raw patch · 131 files changed

+10368/−7514 lines, 131 filesdep +doctest-paralleldep −doctestdep ~aesondep ~filepathdep ~lenssetup-changed

Dependencies added: doctest-parallel

Dependencies removed: doctest

Dependency ranges changed: aeson, filepath, lens, lsp, lsp-types, optparse-generic, stm, with-utf8

Files

ChangeLog.md view
@@ -6,6 +6,54 @@ and this project adheres to the [Haskell Package Versioning Policy](https://pvp.haskell.org/). +## v0.9.0 — 2026-06-24++Added:++- **Typed holes and a structured goal/context query.** Write `?` (or a named `?goal`) for an unfilled subterm. By default `rzk typecheck` reports any hole as an error, so finished work and CI never admit holes. With `rzk typecheck --allow-holes` it instead prints, for each hole, its expected type (the goal) and its local context. The local context lists the term variables, cube variables, and tope assumptions in scope; the global environment is excluded. The same data is available to library consumers (the playground/game and the LSP) through `typecheckModulesWithHoles`, which returns structured `HoleInfo` values. Holes are checked only where their type is known, that is, in checking position. A hole in inference position is reported rather than guessed. When a hole is the argument of a shape-restricted function, its goal is shown as the shape `(s : I | ψ s ∧ φ s)` (the membership tope), and extension-type goals show their boundary `A [φ ↦ a]` (see [#237](https://github.com/rzk-lang/rzk/pull/237), [#240](https://github.com/rzk-lang/rzk/pull/240)).++- **Hint inventory for a hole.** Alongside the goal and context, the query records the moves that fit. It offers three kinds of move. The first is type-directed *elimination candidates* over the hypotheses (a function applied to holes, a projection of a Σ, or path induction by `idJ`, see [#244](https://github.com/rzk-lang/rzk/pull/244)). The second is *introduction forms* that build the goal from its head (a λ, a pair, `refl`, or a tope constructor). The third, in a shape setting, is the context-driven `recBOT` (ex falso) and `recOR` case-splits (see [#245](https://github.com/rzk-lang/rzk/pull/245)). A caller may additionally allow-list named lemmas in scope, so they surface as candidates applied to holes (see [#256](https://github.com/rzk-lang/rzk/pull/256)). Pattern binders are restored throughout goals, errors, and candidates, so a goal reads `\ (t , s) → ?` rather than in terms of projections (see [#242](https://github.com/rzk-lang/rzk/pull/242), [#246](https://github.com/rzk-lang/rzk/pull/246)).++- **Structured diagnostics.** Type errors and holes are now available as structured data, not only as a formatted string. A diagnostic in `Rzk.Diagnostic` carries a severity, a stable code, a source location, and a message. `rzk typecheck --json` emits all diagnostics (both type errors and holes) as JSON on stdout, for editor-agnostic tooling and CI (see [#238](https://github.com/rzk-lang/rzk/pull/238), [#243](https://github.com/rzk-lang/rzk/pull/243)). The language server consumes the same structured diagnostics. It shows each hole's goal and context as a warning rather than a hard error, in the spirit of Agda's yellow "unsolved" highlight, and it now reports all diagnostics for a file together. Source spans remain line-level.++- **Goal-cell diagrams.** When a hole's goal is a shape (an arrow, triangle, or square), the query exposes an SVG of the cell the hole must inhabit, drawn from an abstract inhabitant of the goal. A new `render-hide-term` option draws the shape with the proof term hidden, keeping only the given boundary labels (see [#253](https://github.com/rzk-lang/rzk/pull/253)).++- Experimental **cubical interval** `#!rzk II` (`#!rzk 𝕀`), a lattice cube added on top of the modal type system. This is the intended sound home for an amazing right adjoint `#!rzk √`, as flagged in the v0.8.0 release notes (see [#228](https://github.com/rzk-lang/rzk/pull/228)).++Changed:++- Experimental **modal syntax** is less noisy. A modal type is now written `#!rzk m A` instead of `#!rzk <| m | A |>`, and a modal binding is `#!rzk (x :m A)` (see [#227](https://github.com/rzk-lang/rzk/pull/227)). Modal bindings on Π-, Σ-, and λ-types are now primitive rather than sugar for `#!rzk let mod`, and modal extraction is restricted to the right-adjoint modalities (`#!rzk ♯`, `#!rzk ᵒᵖ`, `#!rzk _id`) (see [#248](https://github.com/rzk-lang/rzk/pull/248)).++- Experimental: modalities are tracked through the tope layer, so the tope solver knows which topes are accessible under which modality (see [#230](https://github.com/rzk-lang/rzk/pull/230)).++- The `#!rzk uses`/unused-variable check now keys off the definition as written rather than its weak head normal form. Reduction can drop or expose a variable occurrence, so a genuine use could be reported as unused, or a transitive dependency on an assumption hidden. Both are now classified from the written term (see [#255](https://github.com/rzk-lang/rzk/pull/255)).++Other changes:++- In lenient (`--allow-holes`) mode, we tolerate diagnostics that only a finished term must satisfy, so an in-progress sketch still typechecks. These are an unused `#!rzk uses`-variable (see [#249](https://github.com/rzk-lang/rzk/pull/249)), a hole-introduction binder that would shadow a name in scope (see [#250](https://github.com/rzk-lang/rzk/pull/250)), and a term whose type fails only around a hole (see [#251](https://github.com/rzk-lang/rzk/pull/251)). We also show the boundary in a `#!rzk recOR` branch goal (see [#252](https://github.com/rzk-lang/rzk/pull/252)) and accept holes in more positions (see [#239](https://github.com/rzk-lang/rzk/pull/239)).++- Build `rzk` with `build-type: Simple` instead of `Custom`. Thus the package now builds under the **GHC WebAssembly backend** (a `Custom` `Setup.hs` cannot run there) and no longer requires BNFC, `alex`, or `happy` to install (e.g. from Hackage). The parser and lexer are still generated from `grammar/Syntax.cf`, but out of band: run `make -C rzk regen-parser` after editing the grammar. A new `Parser up-to-date` CI workflow regenerates from the grammar and fails on drift, and the WASM/GHCJS CI lanes no longer patch the package before building (see [#236](https://github.com/rzk-lang/rzk/pull/236)).++Fixes:++- A `#!rzk recOR` in the cube or tope layer is now a type error instead of a panic (see [#254](https://github.com/rzk-lang/rzk/pull/254)).+- Check each `#!rzk recOR` branch against the expected type (see [#247](https://github.com/rzk-lang/rzk/pull/247)).+- Warn about overhanging `#!rzk recOR` faces and reject disjoint (vacuous) ones, replacing two checks that were silently vacuous (see [#233](https://github.com/rzk-lang/rzk/pull/233)).+- Check a term even under an absurd (`#!rzk recBOT`) context, so an ill-formed body is no longer admitted under a false hypothesis (see [#234](https://github.com/rzk-lang/rzk/pull/234)).+- Experimental modal layer: several corrections (see [#258](https://github.com/rzk-lang/rzk/pull/258)). The coercion relation is completed with `#!rzk ♭ ⇒ ᵒᵖ` and `#!rzk ᵒᵖ ⇒ ♯`, so a flat variable is now accessible under `#!rzk ᵒᵖ`. The normal form of `#!rzk let mod` extracts only for the right-adjoint modalities, matching the typechecker. And `#!rzk unflipᵒᵖ` now expects an interval cube under `#!rzk ᵒᵖ` (i.e. `#!rzk ᵒᵖ 2` or `#!rzk ᵒᵖ 𝕀`) rather than a bare cube, mirroring `#!rzk flipᵒᵖ`.++Documentation:++- Remove a malicious `polyfill.io` dependency from the docs (see [#231](https://github.com/rzk-lang/rzk/pull/231)).++CI / infrastructure:++- Add a CI job that builds the `rzk` library with the GHC WebAssembly backend (see [#235](https://github.com/rzk-lang/rzk/pull/235)).+- Import `RzkConfig` qualified (see [#232](https://github.com/rzk-lang/rzk/pull/232)).+- Deploy the docs and the playground reliably on tag pushes, so a release publishes both (past releases sometimes skipped them).+- Move the MkDocs typecheck and deploy into the GHC workflow and reuse the `rzk` binary built in the same run, so the docs are checked with the version they document rather than with an older release.+- Build all four OS only on pull requests, tags, and `main`. A `develop` push, already validated by its pull request, builds Linux only. A per-ref concurrency group cancels a superseded pull-request run, but never a push or tag run that may be deploying.+ ## v0.8.0 — 2026-06-04  Major changes:
− Setup.hs
@@ -1,41 +0,0 @@-{-# LANGUAGE CPP #-}--- Source: https://github.com/haskell/cabal/issues/6726#issuecomment-918663262---- | Custom Setup that runs bnfc to generate the language sub-libraries--- for the parsers included in Ogma.-module Main (main) where--import           Distribution.Simple         (defaultMainWithHooks,-                                              hookedPrograms, postConf,-                                              preBuild, simpleUserHooks)-import           Distribution.Simple.Program (Program (..), findProgramVersion,-                                              simpleProgram)-import           System.Process              (system)---- | Run BNFC on the grammar before the actual build step.------ All options for bnfc are hard-coded here.-main :: IO ()-main = defaultMainWithHooks $ simpleUserHooks-  { hookedPrograms = [ bnfcProgram ]-  , postConf       = \args flags packageDesc localBuildInfo -> do-#ifndef mingw32_HOST_OS-      _ <- system "bnfc -d -p Language.Rzk --generic --functor --text-token -o src/ grammar/Syntax.cf"-      _ <- system "alex --ghc src/Language/Rzk/Syntax/Lex.x"-      _ <- system "happy --array --info --ghc --coerce src/Language/Rzk/Syntax/Par.y"-#endif-      postConf simpleUserHooks args flags packageDesc localBuildInfo-  , preBuild       = \args flags -> do-#ifndef mingw32_HOST_OS-      _ <- system "bnfc -d -p Language.Rzk --generic --functor --text-token -o src/ grammar/Syntax.cf"-      _ <- system "alex --ghc src/Language/Rzk/Syntax/Lex.x"-      _ <- system "happy --array --info --ghc --coerce src/Language/Rzk/Syntax/Par.y"-#endif-      preBuild simpleUserHooks args flags-  }---- | TODO: This should be in Cabal.Distribution.Simple.Program.Builtin.-bnfcProgram :: Program-bnfcProgram = (simpleProgram "bnfc")-  { programFindVersion = findProgramVersion "--version" id-  }
app/Main.hs view
@@ -22,10 +22,15 @@ import           Options.Generic import           System.Exit             (exitFailure, exitSuccess) +import           Data.Aeson              (encode)+import qualified Data.ByteString.Lazy.Char8 as BL8 import           Data.Functor            (void, (<&>)) import qualified Data.Text.IO            as T  import           Paths_rzk               (version)+import           Rzk.Diagnostic          (Diagnostic (..), Severity (..),+                                          diagnoseHole, diagnoseTypeError,+                                          ppHoleInfo) import           Rzk.Format              (formatFile, formatFileWrite,                                           isWellFormattedFile) import           Rzk.Main@@ -41,8 +46,18 @@     <$> parseFields (Just "Check if the files are correctly formatted") (Just "check") (Just 'c') Nothing     <*> parseFields (Just "Write formatted file to disk") (Just "write") (Just 'w') Nothing +data TypecheckOptions = TypecheckOptions+  { typecheckAllowHoles :: Bool+  , typecheckJson       :: Bool+  } deriving (Generic, Show, ParseRecord, Read, ParseField)++instance ParseFields TypecheckOptions where+  parseFields _ _ _ _ = TypecheckOptions+    <$> parseFields (Just "Allow unsolved holes: report each hole's goal and local context instead of failing") (Just "allow-holes") (Just 'H') Nothing+    <*> parseFields (Just "Output diagnostics (type errors and holes) as JSON on stdout") (Just "json") (Just 'j') Nothing+ data Command-  = Typecheck [FilePath]+  = Typecheck TypecheckOptions [FilePath]   | Lsp   | Format FormatOptions [FilePath]   | Version@@ -54,17 +69,36 @@   withUtf8 $ #endif     getRecord "rzk: an experimental proof assistant for synthetic ∞-categories" >>= \case-    Typecheck paths -> do+    Typecheck (TypecheckOptions {typecheckAllowHoles = allowHolesFlag, typecheckJson = jsonFlag}) paths -> do       modules <- parseRzkFilesOrStdin paths-      case defaultTypeCheck (typecheckModulesWithLocation modules) of-        Left err -> do-          putStrLn "An error occurred when typechecking!"-          putStrLn $ unlines-            [ "Type Error:"-            , ppTypeErrorInScopedContext' BottomUp err-            ]-          exitFailure-        Right _decls -> putStrLn "Everything is ok!"+      let reportError err = do+            putStrLn "An error occurred when typechecking!"+            putStrLn $ unlines+              [ "Type Error:"+              , ppTypeErrorInScopedContext' BottomUp err+              ]+      if jsonFlag+        -- Machine-readable mode: emit every diagnostic (type errors as errors,+        -- holes as hints) as a JSON array on stdout; progress goes to stderr.+        -- Exit non-zero iff there is an error-severity diagnostic.+        then do+          let diagnostics = case typecheckModulesWithHoles modules of+                Left err -> [diagnoseTypeError BottomUp err]+                Right (_decls, errors, holes) ->+                  map (diagnoseTypeError BottomUp) errors ++ map diagnoseHole holes+          BL8.putStrLn (encode diagnostics)+          when (any ((== SeverityError) . diagnosticSeverity) diagnostics) exitFailure+        else if allowHolesFlag+          then case typecheckModulesWithHoles modules of+            Left err -> reportError err >> exitFailure+            Right (_decls, errors, holes) -> do+              forM_ holes (putStr . ppHoleInfo)+              case errors of+                [] -> putStrLn ("Everything is ok! (" <> show (length holes) <> " hole(s))")+                _  -> do forM_ errors reportError; exitFailure+          else case defaultTypeCheck (typecheckModulesWithLocation modules) of+            Left err -> reportError err >> exitFailure+            Right _decls -> putStrLn "Everything is ok!"      Lsp -> #ifdef LSP_ENABLED
grammar/Syntax.cf view
@@ -5,7 +5,7 @@  token VarIdentToken ((char - ["-?!.\\;,#\"][)(}{><| \t\n\r"]) (char - ["\\;,#\"][)(}{><| \t\n\r"])*) ; -token HoleIdentToken '?' ;+token HoleIdentToken ('?' (char - ["\\;,#\"][)(}{><| \t\n\r"])*) ;  Module. Module ::= LanguageDecl [Command] ; @@ -70,7 +70,8 @@ ParamPatternType.      Param ::= "(" [Pattern] ":" Term ")" ; ParamPatternShape.     Param ::= "(" [Pattern] ":" Term "|" Term ")" ; ParamPatternShapeDeprecated. Param ::= "{" Pattern ":" Term "|" Term "}" ;-ParamPatternModalType. Param ::= "(" [Pattern] ":" Modality Term ")" ;+ParamPatternModalType. Param ::= "(" [Pattern] ModalColon Term ")" ;+ParamPatternModalShape. Param ::= "(" [Pattern] ModalColon Term "|" Term ")" ; separator nonempty Param "" ;  -- Name introduction for let bindings@@ -85,11 +86,12 @@ ParamVarShapeDeprecated. ParamDecl ::= "{" "(" Pattern ":" Term ")" "|" Term "}" ; paramVarShapeDeprecated. ParamDecl ::= "{" Pattern ":" Term "|" Term "}" ; define paramVarShapeDeprecated pat cube tope = ParamVarShapeDeprecated pat cube tope ;-ParamTermModalType.    ParamDecl ::= "(" Term ":" Modality Term ")" ;+ParamTermModalType.    ParamDecl ::= "(" Term ModalColon Term ")" ;+ParamTermModalShape.   ParamDecl ::= "(" Term ModalColon Term "|" Term ")" ;  -- Parameter declaration for Sigma types SigmaParam.      SigmaParam ::= Pattern ":" Term ;-SigmaParamModal. SigmaParam ::= Pattern ":" Modality Term ;+SigmaParamModal. SigmaParam ::= Pattern ModalColon Term ; separator nonempty SigmaParam "," ;  Restriction. Restriction ::= Term "↦" Term ;@@ -108,6 +110,15 @@ Single.  ModComp ::= Modality ; Comp.    ModComp ::= Modality "/" Modality ; +-- Modal colon (combined : with modality, no space between : and modality)+ModalColonFlat.        ModalColon ::= ":♭" ;+ModalColonSharp.       ModalColon ::= ":♯" ;+ModalColonOp.          ModalColon ::= ":ᵒᵖ" ;+ModalColonId.          ModalColon ::= ":_id" ;+ASCII_ModalColonFlat.  ModalColon ::= ":_b" ;+ASCII_ModalColonSharp. ModalColon ::= ":_#" ;+ASCII_ModalColonOp.    ModalColon ::= ":_op" ;+ -- Universes Universe.       Term7 ::= "U" ; UniverseCube.   Term7 ::= "CUBE" ;@@ -118,6 +129,9 @@ Cube2.          Term7 ::= "2" ; Cube2_0.        Term7 ::= "0₂" ; Cube2_1.        Term7 ::= "1₂" ;+CubeI.          Term7 ::= "𝕀" ;+CubeI_0.        Term7 ::= "0ᵢ" ;+CubeI_1.        Term7 ::= "1ᵢ" ; CubeProduct.    Term5 ::= Term5 "×" Term6 ; -- Topes TopeTop.        Term7 ::= "⊤" ;@@ -145,7 +159,7 @@ -- Types TypeFun.        Term1 ::= ParamDecl "→" Term1 ; TypeSigma.      Term1 ::= "Σ" "(" Pattern ":" Term ")" "," Term1 ;-TypeSigmaModal. Term1 ::= "Σ" "(" Pattern ":" Modality Term ")" "," Term1 ;+TypeSigmaModal.    Term1 ::= "Σ" "(" Pattern ModalColon Term ")" "," Term1 ; TypeSigmaTuple. Term1 ::= "Σ" "(" SigmaParam "," [SigmaParam] ")" "," Term1 ; TypeUnit.       Term7 ::= "Unit" ; TypeId.         Term1 ::= Term2 "=_{" Term "}" Term2 ;@@ -159,7 +173,7 @@ Pair.           Term7 ::= "(" Term "," Term ")" ; Tuple.          Term7 ::= "(" Term "," Term "," [Term] ")" ; ModApp.         Term7 ::= "mod" Modality Term7 ;-ModType.        Term7 ::= "<|" Modality "|" Term "|>" ;+ModType.        Term7 ::= Modality Term7 ; ModExtract.     Term6 ::= "$extract$" ModComp Term7 ; LetMod.         Term1 ::= "let" "mod" ModComp Bind ":=" Term "in" Term ; First.          Term6 ::= "π₁" Term7 ;@@ -186,6 +200,9 @@ ASCII_CubeUnitStar.   Term7 ::= "*_1" ; ASCII_Cube2_0.        Term7 ::= "0_2" ; ASCII_Cube2_1.        Term7 ::= "1_2" ;+ASCII_CubeI.          Term7 ::= "II" ;+ASCII_CubeI_0.        Term7 ::= "0_I" ;+ASCII_CubeI_1.        Term7 ::= "1_I" ;  ASCII_TopeTop.        Term7 ::= "TOP" ; ASCII_TopeBottom.     Term7 ::= "BOT" ;@@ -196,7 +213,8 @@  ASCII_TypeFun.        Term1 ::= ParamDecl "->" Term1 ; ASCII_TypeSigma.      Term1 ::= "Sigma" "(" Pattern ":" Term ")" "," Term1 ;-ASCII_TypeSigmaModal. Term1 ::= "Sigma" "(" Pattern ":" Modality Term ")" "," Term1 ;+ascii_TypeSigmaModal. Term1 ::= "Sigma" "(" Pattern ModalColon Term ")" "," Term1 ;+define ascii_TypeSigmaModal p mc t r = TypeSigmaModal p mc t r ; ASCII_TypeSigmaTuple. Term1 ::= "Sigma" "(" SigmaParam "," [SigmaParam] ")" "," Term1 ;  ASCII_Lambda.         Term1 ::= "\\" [Param] "->" Term1 ;
rzk.cabal view
@@ -1,11 +1,11 @@-cabal-version: 1.24+cabal-version: 2.0 --- This file has been generated from package.yaml by hpack version 0.39.1.+-- This file has been generated from package.yaml by hpack version 0.39.6. -- -- see: https://github.com/sol/hpack  name:           rzk-version:        0.8.0+version:        0.9.0 synopsis:       An experimental proof assistant for synthetic ∞-categories description:    Please see the README on GitHub at <https://github.com/rzk-lang/rzk#readme> category:       Dependent Types@@ -16,15 +16,27 @@ copyright:      2023-2025 Nikolai Kudasov license:        BSD3 license-file:   LICENSE-build-type:     Custom+build-type:     Simple extra-source-files:     grammar/Syntax.cf     test/typecheck/SCHEMA.md     test/typecheck/cases/happy-check.rzk+    test/typecheck/cases/happy-flip-unflip.rzk+    test/typecheck/cases/happy-interval-basics.rzk+    test/typecheck/cases/happy-interval-subtyping.rzk     test/typecheck/cases/happy-issue-9-relfunext2-id.rzk     test/typecheck/cases/happy-modal-basics.rzk+    test/typecheck/cases/happy-modal-flat-recOR-under-op.rzk+    test/typecheck/cases/happy-modal-flat-under-op.rzk     test/typecheck/cases/happy-modal-inv.rzk+    test/typecheck/cases/happy-modal-tope-unwrap.rzk+    test/typecheck/cases/happy-modal-topes.rzk+    test/typecheck/cases/happy-op-hom-to-hom.rzk+    test/typecheck/cases/happy-recbot-term-wellformed.rzk+    test/typecheck/cases/happy-recor-guard-exceeds-context.rzk+    test/typecheck/cases/happy-recor-split-simplex-overhang.rzk     test/typecheck/cases/happy-refl-path.rzk+    test/typecheck/cases/happy-restrict-face-not-contained.rzk     test/typecheck/cases/happy-shott-simplicial-subcomplexes.rzk     test/typecheck/cases/happy-tope-high-dim-cubes.rzk     test/typecheck/cases/happy-tope-nested-rec-or-d4.rzk@@ -36,21 +48,43 @@     test/typecheck/cases/ill-bare-lambda-compute.rzk     test/typecheck/cases/ill-bare-refl-compute.rzk     test/typecheck/cases/ill-duplicate.rzk+    test/typecheck/cases/ill-hole-infer.rzk+    test/typecheck/cases/ill-hole-pattern-binder-names.rzk+    test/typecheck/cases/ill-hole-recor-branch.rzk+    test/typecheck/cases/ill-hole-unsolved.rzk     test/typecheck/cases/ill-implicit.rzk+    test/typecheck/cases/ill-interval-no-totality.rzk+    test/typecheck/cases/ill-interval-subtyping.rzk     test/typecheck/cases/ill-invalid-arg-type-bot.rzk     test/typecheck/cases/ill-issue-13-flip-flip-wrong.rzk     test/typecheck/cases/ill-issue-206-families-of-extension.rzk     test/typecheck/cases/ill-issue-33-restriction-coherence.rzk     test/typecheck/cases/ill-modal-b-no-dist.rzk+    test/typecheck/cases/ill-modal-flat-no-commute.rzk     test/typecheck/cases/ill-modal-not-modal.rzk-    test/typecheck/cases/ill-modal-op-unaccessible.rzk-    test/typecheck/cases/ill-modal-unaccessible.rzk+    test/typecheck/cases/ill-modal-op-at-plain.rzk+    test/typecheck/cases/ill-modal-op-under-flat.rzk+    test/typecheck/cases/ill-modal-plain-under-flat.rzk+    test/typecheck/cases/ill-modal-plain-under-op.rzk+    test/typecheck/cases/ill-modal-recBOT-under-op-no-contradiction.rzk+    test/typecheck/cases/ill-modal-sharp-at-plain.rzk+    test/typecheck/cases/ill-modal-sharp-bot-not-bot.rzk+    test/typecheck/cases/ill-modal-sharp-recOR-plain-var.rzk+    test/typecheck/cases/ill-modal-sharp-under-flat.rzk+    test/typecheck/cases/ill-modal-sharp-under-op.rzk+    test/typecheck/cases/ill-modal-tope-cross-modality.rzk     test/typecheck/cases/ill-not-function.rzk     test/typecheck/cases/ill-not-pair-first-unit.rzk     test/typecheck/cases/ill-not-pair-second-unit.rzk     test/typecheck/cases/ill-param-untyped-pattern.rzk     test/typecheck/cases/ill-rec-or-overlap-incoherent.rzk+    test/typecheck/cases/ill-recbot-term-not-function.rzk+    test/typecheck/cases/ill-recbot-term-undefined.rzk+    test/typecheck/cases/ill-recor-as-tope.rzk+    test/typecheck/cases/ill-recor-coverage-required.rzk+    test/typecheck/cases/ill-recor-guard-disjoint.rzk     test/typecheck/cases/ill-render-latex-define.rzk+    test/typecheck/cases/ill-restrict-face-disjoint.rzk     test/typecheck/cases/ill-section-end-mismatch.rzk     test/typecheck/cases/ill-section-not-closed.rzk     test/typecheck/cases/ill-section-unexpected-end.rzk@@ -68,6 +102,8 @@     test/typecheck/cases/ill-tope-not-satisfied-tope-family-subtyping.rzk     test/typecheck/cases/ill-tope-param-lambda.rzk     test/typecheck/cases/ill-tope-param-typefun.rzk+    test/typecheck/cases/ill-tope-pattern-binder-bare.rzk+    test/typecheck/cases/ill-tope-recOR-non-discrete.rzk     test/typecheck/cases/ill-tope-subtle-app-shape-5d.rzk     test/typecheck/cases/ill-tope-subtle-rec-or-5d-boundary.rzk     test/typecheck/cases/ill-tope-subtle-tope-family-4d.rzk@@ -84,11 +120,25 @@     test/typecheck/cases/multimodule-first-error/lib.rzk     test/typecheck/cases/multimodule-two-ok/lib.rzk     test/typecheck/cases/multimodule-two-ok/user.rzk+    test/typecheck/cases/uses-whnf-discarded.rzk+    test/typecheck/cases/uses-whnf-masked-transitive.rzk     test/typecheck/cases/happy-check.expect.yaml+    test/typecheck/cases/happy-flip-unflip.expect.yaml+    test/typecheck/cases/happy-interval-basics.expect.yaml+    test/typecheck/cases/happy-interval-subtyping.expect.yaml     test/typecheck/cases/happy-issue-9-relfunext2-id.expect.yaml     test/typecheck/cases/happy-modal-basics.expect.yaml+    test/typecheck/cases/happy-modal-flat-recOR-under-op.expect.yaml+    test/typecheck/cases/happy-modal-flat-under-op.expect.yaml     test/typecheck/cases/happy-modal-inv.expect.yaml+    test/typecheck/cases/happy-modal-tope-unwrap.expect.yaml+    test/typecheck/cases/happy-modal-topes.expect.yaml+    test/typecheck/cases/happy-op-hom-to-hom.expect.yaml+    test/typecheck/cases/happy-recbot-term-wellformed.expect.yaml+    test/typecheck/cases/happy-recor-guard-exceeds-context.expect.yaml+    test/typecheck/cases/happy-recor-split-simplex-overhang.expect.yaml     test/typecheck/cases/happy-refl-path.expect.yaml+    test/typecheck/cases/happy-restrict-face-not-contained.expect.yaml     test/typecheck/cases/happy-shott-simplicial-subcomplexes.expect.yaml     test/typecheck/cases/happy-tope-high-dim-cubes.expect.yaml     test/typecheck/cases/happy-tope-nested-rec-or-d4.expect.yaml@@ -100,21 +150,43 @@     test/typecheck/cases/ill-bare-lambda-compute.expect.yaml     test/typecheck/cases/ill-bare-refl-compute.expect.yaml     test/typecheck/cases/ill-duplicate.expect.yaml+    test/typecheck/cases/ill-hole-infer.expect.yaml+    test/typecheck/cases/ill-hole-pattern-binder-names.expect.yaml+    test/typecheck/cases/ill-hole-recor-branch.expect.yaml+    test/typecheck/cases/ill-hole-unsolved.expect.yaml     test/typecheck/cases/ill-implicit.expect.yaml+    test/typecheck/cases/ill-interval-no-totality.expect.yaml+    test/typecheck/cases/ill-interval-subtyping.expect.yaml     test/typecheck/cases/ill-invalid-arg-type-bot.expect.yaml     test/typecheck/cases/ill-issue-13-flip-flip-wrong.expect.yaml     test/typecheck/cases/ill-issue-206-families-of-extension.expect.yaml     test/typecheck/cases/ill-issue-33-restriction-coherence.expect.yaml     test/typecheck/cases/ill-modal-b-no-dist.expect.yaml+    test/typecheck/cases/ill-modal-flat-no-commute.expect.yaml     test/typecheck/cases/ill-modal-not-modal.expect.yaml-    test/typecheck/cases/ill-modal-op-unaccessible.expect.yaml-    test/typecheck/cases/ill-modal-unaccessible.expect.yaml+    test/typecheck/cases/ill-modal-op-at-plain.expect.yaml+    test/typecheck/cases/ill-modal-op-under-flat.expect.yaml+    test/typecheck/cases/ill-modal-plain-under-flat.expect.yaml+    test/typecheck/cases/ill-modal-plain-under-op.expect.yaml+    test/typecheck/cases/ill-modal-recBOT-under-op-no-contradiction.expect.yaml+    test/typecheck/cases/ill-modal-sharp-at-plain.expect.yaml+    test/typecheck/cases/ill-modal-sharp-bot-not-bot.expect.yaml+    test/typecheck/cases/ill-modal-sharp-recOR-plain-var.expect.yaml+    test/typecheck/cases/ill-modal-sharp-under-flat.expect.yaml+    test/typecheck/cases/ill-modal-sharp-under-op.expect.yaml+    test/typecheck/cases/ill-modal-tope-cross-modality.expect.yaml     test/typecheck/cases/ill-not-function.expect.yaml     test/typecheck/cases/ill-not-pair-first-unit.expect.yaml     test/typecheck/cases/ill-not-pair-second-unit.expect.yaml     test/typecheck/cases/ill-param-untyped-pattern.expect.yaml     test/typecheck/cases/ill-rec-or-overlap-incoherent.expect.yaml+    test/typecheck/cases/ill-recbot-term-not-function.expect.yaml+    test/typecheck/cases/ill-recbot-term-undefined.expect.yaml+    test/typecheck/cases/ill-recor-as-tope.expect.yaml+    test/typecheck/cases/ill-recor-coverage-required.expect.yaml+    test/typecheck/cases/ill-recor-guard-disjoint.expect.yaml     test/typecheck/cases/ill-render-latex-define.expect.yaml+    test/typecheck/cases/ill-restrict-face-disjoint.expect.yaml     test/typecheck/cases/ill-section-end-mismatch.expect.yaml     test/typecheck/cases/ill-section-not-closed.expect.yaml     test/typecheck/cases/ill-section-unexpected-end.expect.yaml@@ -132,6 +204,8 @@     test/typecheck/cases/ill-tope-not-satisfied-tope-family-subtyping.expect.yaml     test/typecheck/cases/ill-tope-param-lambda.expect.yaml     test/typecheck/cases/ill-tope-param-typefun.expect.yaml+    test/typecheck/cases/ill-tope-pattern-binder-bare.expect.yaml+    test/typecheck/cases/ill-tope-recOR-non-discrete.expect.yaml     test/typecheck/cases/ill-tope-subtle-app-shape-5d.expect.yaml     test/typecheck/cases/ill-tope-subtle-rec-or-5d-boundary.expect.yaml     test/typecheck/cases/ill-tope-subtle-tope-family-4d.expect.yaml@@ -144,6 +218,8 @@     test/typecheck/cases/ill-unify.expect.yaml     test/typecheck/cases/ill-unset-option-unknown.expect.yaml     test/typecheck/cases/ill-unused-assumption.expect.yaml+    test/typecheck/cases/uses-whnf-discarded.expect.yaml+    test/typecheck/cases/uses-whnf-masked-transitive.expect.yaml     test/typecheck/cases/literate-fence/expect.yaml     test/typecheck/cases/multimodule-first-error/expect.yaml     test/typecheck/cases/multimodule-two-ok/expect.yaml@@ -156,12 +232,6 @@   type: git   location: https://github.com/rzk-lang/rzk -custom-setup-  setup-depends:-      Cabal >=2.4.0.1 && <4.0-    , base >=4.11.0.0 && <5.0-    , process >=1.6.3.0- flag lsp   description: Build with LSP support (only available with GHC, not GHCJS).   manual: True@@ -179,24 +249,23 @@       Language.Rzk.Syntax.Par       Language.Rzk.Syntax.Print       Rzk+      Rzk.Diagnostic       Rzk.Format       Rzk.Main       Rzk.Project.Config       Rzk.TypeCheck   other-modules:       Paths_rzk+  autogen-modules:+      Paths_rzk   hs-source-dirs:       src   default-extensions:       DeriveDataTypeable   ghc-options: -Wall -Wcompat -Widentities -Werror=missing-fields -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -optP-Wno-nonportable-include-path-  build-tools:-      alex >=3.2.4-    , happy >=1.19.9-  build-tool-depends:-      BNFC:bnfc >=2.9.6.2   build-depends:       Glob >=0.9.3+    , aeson >=1.4     , array >=0.5.3.0     , base >=4.7 && <5     , bifunctors >=5.5.3@@ -218,31 +287,30 @@         Language.Rzk.VSCode.Lsp         Language.Rzk.VSCode.Tokenize     build-depends:-        aeson >=1.4.2.0+        aeson >=2.0.0.0       , co-log-core >=0.3.2.0       , data-default-class >=0.1.2.0-      , filepath >=1.4.2.1-      , lens >=4.17-      , lsp >=2.2.0.0-      , lsp-types >=2.0.2.0-      , stm >=2.5.0.0+      , filepath >=1.4.100.0+      , lens >=5.0.1+      , lsp >=2.4.0.0+      , lsp-types >=2.1.1.0+      , mtl >=2.3.1+      , stm >=2.5.1.0  executable rzk   main-is: Main.hs   other-modules:       Paths_rzk+  autogen-modules:+      Paths_rzk   hs-source-dirs:       app   default-extensions:       DeriveDataTypeable   ghc-options: -Wall -Wcompat -Widentities -Werror=missing-fields -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -optP-Wno-nonportable-include-path -threaded -rtsopts -with-rtsopts=-N-  build-tools:-      alex >=3.2.4-    , happy >=1.19.9-  build-tool-depends:-      BNFC:bnfc >=2.9.6.2   build-depends:       Glob >=0.9.3+    , aeson >=1.4     , array >=0.5.3.0     , base >=4.7 && <5     , bifunctors >=5.5.3@@ -258,8 +326,8 @@     cpp-options: -DLSP_ENABLED   if !impl(ghcjs)     build-depends:-        optparse-generic >=1.4.0-      , with-utf8 >=1.0.2.4+        optparse-generic >=1.4.7+      , with-utf8 >=1.0.3.0  test-suite doctests   type: exitcode-stdio-1.0@@ -269,21 +337,18 @@   default-extensions:       DeriveDataTypeable   ghc-options: -Wall -Wcompat -Widentities -Werror=missing-fields -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -optP-Wno-nonportable-include-path-  build-tools:-      alex >=3.2.4-    , happy >=1.19.9-  build-tool-depends:-      BNFC:bnfc >=2.9.6.2   build-depends:       Glob >=0.9.3     , QuickCheck >=2.14+    , aeson >=1.4     , array >=0.5.3.0     , base >=4.11.0.0 && <5.0     , bifunctors >=5.5.3     , bytestring >=0.10.8.2     , directory >=1.2.7.0-    , doctest >=0.21.0+    , doctest-parallel >=0.3     , mtl >=2.3.1+    , rzk     , template-haskell >=2.14.0.0     , text >=1.2.3.1     , yaml >=0.11.0.0@@ -295,19 +360,20 @@   type: exitcode-stdio-1.0   main-is: Spec.hs   other-modules:+      Rzk.DiagnosticSpec       Rzk.FormatSpec+      Rzk.HolesSpec       Rzk.TypeCheckSpec       Paths_rzk+  autogen-modules:+      Paths_rzk   hs-source-dirs:       test   default-extensions:       DeriveDataTypeable   ghc-options: -Wall -Wcompat -Widentities -Werror=missing-fields -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -optP-Wno-nonportable-include-path -threaded -rtsopts -with-rtsopts=-N-  build-tools:-      alex >=3.2.4-    , happy >=1.19.9   build-tool-depends:-      BNFC:bnfc >=2.9.6.2+      hspec-discover:hspec-discover   build-depends:       Glob >=0.9.3     , aeson
src/Language/Rzk/Free/Syntax.hs view
@@ -11,6 +11,7 @@ {-# LANGUAGE TypeSynonymInstances #-} module Language.Rzk.Free.Syntax where +import           Data.Bifunctor      (bimap) import           Data.Bifunctor.TH import           Data.Char           (chr, ord) import           Data.Coerce@@ -63,6 +64,41 @@ fromVarIdent :: VarIdent -> Rzk.VarIdent fromVarIdent (VarIdent (Rzk.VarIdent (RzkPosition _file pos) ident)) = Rzk.VarIdent pos ident +-- | The display name of a hole from its surface token text. The token includes+-- the leading @?@; an anonymous hole (bare @?@) has no name.+holeName :: T.Text -> Maybe VarIdent+holeName tok =+  case T.drop 1 tok of+    name | T.null name -> Nothing+         | otherwise   -> Just (fromString (T.unpack name))++-- | The surface token text (including the leading @?@) for a hole name.+holeIdentToken :: Maybe VarIdent -> T.Text+holeIdentToken Nothing  = "?"+holeIdentToken (Just x) = "?" <> T.pack (show x)++-- | The name(s) a binder introduces. A binder may name a single (possibly+-- anonymous) variable, or destructure a pair\/tuple via a pattern. The pattern+-- structure is kept around purely so that goals, holes and error messages can+-- show the user's original names (e.g. @t@ and @s@ for @\\ (t , s) -> …@)+-- instead of projections of a fresh variable (e.g. @π₁ x₄@ and @π₂ x₄@).+--+-- Operationally a pair pattern still binds a /single/ variable; the components+-- are projections of it (see 'toScopePattern'). 'Binder' only records the names+-- so they can be restored when rendering.+data Binder+  = BinderVar (Maybe VarIdent)   -- ^ a single variable (@Nothing@ for @_@)+  | BinderPair Binder Binder     -- ^ a pair pattern @(l , r)@+  | BinderUnit                   -- ^ the unit pattern @unit@+  deriving (Eq)++-- | The single name of a binder, if it binds exactly one named variable.+-- A pair\/unit pattern has no single name, so this is 'Nothing' for them.+-- Used wherever the old @Maybe VarIdent@ binder name is still sufficient.+binderName :: Binder -> Maybe VarIdent+binderName (BinderVar mname) = mname+binderName _                 = Nothing+ data TModality = Sharp | Flat | Op | Id deriving (Eq, Show)  toModality :: Rzk.Modality -> TModality@@ -97,6 +133,9 @@     | Cube2F     | Cube2_0F     | Cube2_1F+    | CubeIF +    | CubeI_0F +    | CubeI_1F     | CubeProductF term term     | CubeFlipF term     | CubeUnflipF term@@ -110,12 +149,12 @@     | TopeUninvF term     | RecBottomF     | RecOrF [(term, term)]-    | TypeFunF (Maybe VarIdent) term (Maybe scope) scope-    | TypeSigmaF (Maybe VarIdent) term scope+    | TypeFunF Binder TModality term (Maybe scope) scope+    | TypeSigmaF Binder TModality term scope     | TypeIdF term (Maybe term) term     | AppF term term-    | LetF (Maybe VarIdent) (Maybe term) term scope-    | LambdaF (Maybe VarIdent) (Maybe (term, Maybe scope)) scope+    | LetF Binder (Maybe term) term scope+    | LambdaF Binder (Maybe (TModality, term, Maybe scope)) scope     | PairF term term     | FirstF term     | SecondF term@@ -128,7 +167,8 @@     | TypeModalF TModality term     | ModAppF TModality term     | ModExtractF TModality TModality term-    | LetModF (Maybe VarIdent) TModality TModality (Maybe term) term scope+    | LetModF Binder TModality TModality (Maybe term) term scope+    | HoleF (Maybe VarIdent)     deriving (Eq, Functor, Foldable, Traversable) deriveBifunctor ''TermF deriveBifoldable ''TermF@@ -263,7 +303,6 @@        Rzk.ASCII_TypeFun loc param ret -> go (Rzk.TypeFun loc param ret)       Rzk.ASCII_TypeSigma loc pat ty ret -> go (Rzk.TypeSigma loc pat ty ret)-      Rzk.ASCII_TypeSigmaModal _loc pat md ty body -> go (Rzk.TypeSigmaModal _loc pat md ty body)       Rzk.ASCII_TypeSigmaTuple loc p ps tN -> go (Rzk.TypeSigmaTuple loc p ps tN)       Rzk.ASCII_Lambda loc pat ret -> go (Rzk.Lambda loc pat ret)       Rzk.ASCII_TypeExtensionDeprecated loc shape type_ -> go (Rzk.TypeExtensionDeprecated loc shape type_)@@ -281,6 +320,12 @@       Rzk.Cube2 _loc -> Cube2       Rzk.Cube2_0 _loc -> Cube2_0       Rzk.Cube2_1 _loc -> Cube2_1+      Rzk.CubeI _loc -> CubeI+      Rzk.CubeI_0 _loc -> CubeI_0+      Rzk.CubeI_1 _loc -> CubeI_1+      Rzk.ASCII_CubeI _loc -> CubeI+      Rzk.ASCII_CubeI_0 _loc -> CubeI_0+      Rzk.ASCII_CubeI_1 _loc -> CubeI_1       Rzk.CubeProduct _loc l r -> CubeProduct (go l) (go r)       Rzk.TopeTop _loc -> TopeTop       Rzk.TopeBottom _loc -> TopeBottom@@ -311,41 +356,41 @@       Rzk.ReflTermType _loc x tA -> Refl (Just (go x, Just (go tA)))       Rzk.IdJ _loc a b c d e f -> IdJ (go a) (go b) (go c) (go d) (go e) (go f)       Rzk.TypeAsc _loc x t -> TypeAsc (go x) (go t)-      Rzk.TypeFun _loc (Rzk.ParamTermModalType loc' patTerm md ty) ret ->-        let pat    = unsafeTermToPattern patTerm-            letRet = Rzk.LetMod loc' (Rzk.Single loc' md)-                       (Rzk.BindPattern loc' pat) (patternToTerm pat) ret-        in go (Rzk.TypeFun _loc (Rzk.ParamTermType loc' patTerm (Rzk.ModType loc' md ty)) letRet)+      Rzk.TypeFun _loc (Rzk.ParamTermModalType _loc' patTerm mc ty) ret ->+        let pat = unsafeTermToPattern patTerm+            md  = modalColonToTModality mc+        in TypeFun (toBinder pat) md (go ty) Nothing (toScopePattern pat bvars ret)+      Rzk.TypeFun _loc (Rzk.ParamTermModalShape _loc' patTerm mc cube tope) ret ->+        let pat = unsafeTermToPattern patTerm+            md  = modalColonToTModality mc+        in TypeFun (toBinder pat) md (go cube) (Just (toScopePattern pat bvars tope)) (toScopePattern pat bvars ret)       Rzk.TypeFun _loc (Rzk.ParamTermType _ patTerm arg) ret ->         let pat = unsafeTermToPattern patTerm-        in TypeFun (patternVar pat) (go arg) Nothing (toScopePattern pat bvars ret)+        in TypeFun (toBinder pat) Id (go arg) Nothing (toScopePattern pat bvars ret)       t@(Rzk.TypeFun loc (Rzk.ParamTermShape loc' patTerm cube tope) ret) ->         let lint' = case tope of               Rzk.App _loc fun arg | void arg == void patTerm ->                 lint t (Rzk.TypeFun loc (Rzk.ParamTermType loc' patTerm fun) ret)               _ -> id             pat = unsafeTermToPattern patTerm-        in lint' $ TypeFun (patternVar pat) (go cube) (Just (toScopePattern pat bvars tope)) (toScopePattern pat bvars ret)+        in lint' $ TypeFun (toBinder pat) Id (go cube) (Just (toScopePattern pat bvars tope)) (toScopePattern pat bvars ret)       Rzk.TypeFun _loc (Rzk.ParamType _ arg) ret ->-        TypeFun Nothing (go arg) Nothing (toTerm (fmap S <$> bvars) ret)+        TypeFun (BinderVar Nothing) Id (go arg) Nothing (toTerm (fmap S <$> bvars) ret)        Rzk.TypeSigma _loc pat tA tB ->-        TypeSigma (patternVar pat) (go tA) (toScopePattern pat bvars tB)--      Rzk.TypeSigmaModal _loc pat md ty body ->-        let letBody = Rzk.LetMod _loc (Rzk.Single _loc md)-                        (Rzk.BindPattern _loc pat) (patternToTerm pat) body-        in go (Rzk.TypeSigma _loc pat (Rzk.ModType _loc md ty) letBody)+        TypeSigma (toBinder pat) Id (go tA) (toScopePattern pat bvars tB) +      Rzk.TypeSigmaModal _loc pat mc ty body ->+        let md = modalColonToTModality mc+        in TypeSigma (toBinder pat) md (go ty) (toScopePattern pat bvars body) -      Rzk.TypeSigmaTuple _loc (Rzk.SigmaParamModal loc' pat md ty) rest body ->-        let tailSigma = case rest of+      Rzk.TypeSigmaTuple _loc (Rzk.SigmaParamModal _loc' pat mc ty) rest body ->+        let md = modalColonToTModality mc+            tailSigma = case rest of               []       -> body               [sp]     -> sigmaParamToTypeSigma _loc sp body               (sp:sps) -> Rzk.TypeSigmaTuple _loc sp sps body-            letTail   = Rzk.LetMod loc' (Rzk.Single loc' md)-                          (Rzk.BindPattern loc' pat) (patternToTerm pat) tailSigma-        in go (Rzk.TypeSigma _loc pat (Rzk.ModType loc' md ty) letTail)+        in TypeSigma (toBinder pat) md (go ty) (toScopePattern pat bvars tailSigma)       Rzk.TypeSigmaTuple _loc (Rzk.SigmaParam _ patA tA) (mp@(Rzk.SigmaParamModal{}) : rest) body ->         go (Rzk.TypeSigma _loc patA tA (case rest of               []  -> sigmaParamToTypeSigma _loc mp body@@ -356,23 +401,25 @@           patX = Rzk.PatternPair _loc patA patB           tX = Rzk.TypeSigma _loc patA tA tB       Rzk.TypeSigmaTuple _loc (Rzk.SigmaParam _ pat tA) [] tB -> go (Rzk.TypeSigma _loc pat tA tB)-      Rzk.Lambda _loc (Rzk.ParamPatternModalType _ [] _md _ty : params) body ->+      Rzk.Lambda _loc (Rzk.ParamPatternModalType _ [] _mc _ty : params) body ->         go (Rzk.Lambda _loc params body)-      Rzk.Lambda _loc (Rzk.ParamPatternModalType loc' (pat:pats) md ty : params) body ->-        let inner   = Rzk.Lambda _loc-                        (if null pats then params-                         else Rzk.ParamPatternModalType loc' pats md ty : params)-                        body-            letBody = Rzk.LetMod loc' (Rzk.Single loc' md)-                        (Rzk.BindPattern loc' pat) (patternToTerm pat) inner-        in go (Rzk.Lambda _loc [Rzk.ParamPatternType loc' [pat] (Rzk.ModType loc' md ty)] letBody)+      Rzk.Lambda _loc (Rzk.ParamPatternModalType loc' (pat:pats) mc ty : params) body ->+        let md = modalColonToTModality mc+        in Lambda (toBinder pat) (Just (md, go ty, Nothing))+             (toScopePattern pat bvars (Rzk.Lambda _loc (if null pats then params else Rzk.ParamPatternModalType loc' pats mc ty : params) body))+      Rzk.Lambda _loc (Rzk.ParamPatternModalShape _ [] _mc _cube _tope : params) body ->+        go (Rzk.Lambda _loc params body)+      Rzk.Lambda _loc (Rzk.ParamPatternModalShape loc' (pat:pats) mc cube tope : params) body ->+        let md = modalColonToTModality mc+        in Lambda (toBinder pat) (Just (md, go cube, Just (toScopePattern pat bvars tope)))+             (toScopePattern pat bvars (Rzk.Lambda _loc (if null pats then params else Rzk.ParamPatternModalShape loc' pats mc cube tope : params) body))       Rzk.Lambda _loc [] body -> go body       Rzk.Lambda _loc (Rzk.ParamPattern _ pat : params) body ->-        Lambda (patternVar pat) Nothing (toScopePattern pat bvars (Rzk.Lambda _loc params body))+        Lambda (toBinder pat) Nothing (toScopePattern pat bvars (Rzk.Lambda _loc params body))       Rzk.Lambda _loc (Rzk.ParamPatternType _ [] _ty : params) body ->         go (Rzk.Lambda _loc params body)       Rzk.Lambda _loc (Rzk.ParamPatternType _ (pat:pats) ty : params) body ->-        Lambda (patternVar pat) (Just (go ty, Nothing))+        Lambda (toBinder pat) (Just (Id, go ty, Nothing))           (toScopePattern pat bvars (Rzk.Lambda _loc (Rzk.ParamPatternType _loc pats ty : params) body))       Rzk.Lambda _loc (Rzk.ParamPatternShape _ [] _cube _tope : params) body ->         go (Rzk.Lambda _loc params body)@@ -382,31 +429,36 @@                 | null pats && void arg == void (patternToTerm pat) ->                     lint t (Rzk.Lambda _loc (Rzk.ParamPatternType _loc' [pat] fun : params) body)               _ -> id-         in lint' $ Lambda (patternVar pat) (Just (go cube, Just (toScopePattern pat bvars tope)))+         in lint' $ Lambda (toBinder pat) (Just (Id, go cube, Just (toScopePattern pat bvars tope)))               (toScopePattern pat bvars (Rzk.Lambda _loc (Rzk.ParamPatternShape _loc' pats cube tope : params) body))       Rzk.Let _loc (Rzk.BindPattern _ pat) val expr ->-        Let (patternVar pat) Nothing (go val) (toScopePattern pat bvars expr)+        Let (toBinder pat) Nothing (go val) (toScopePattern pat bvars expr)       Rzk.Let _loc (Rzk.BindPatternType _ pat ty) val expr -> -        Let (patternVar pat) (Just (go ty)) (go val) (toScopePattern pat bvars expr)+        Let (toBinder pat) (Just (go ty)) (go val) (toScopePattern pat bvars expr)       Rzk.TypeRestricted _loc ty rs ->         TypeRestricted (go ty) $ flip map rs $ \case           Rzk.Restriction _loc tope term       -> (go tope, go term)           Rzk.ASCII_Restriction _loc tope term -> (go tope, go term) -      Rzk.Hole _loc _ident -> error "holes are not supported"+      Rzk.Hole _loc (Rzk.HoleIdent _ (Rzk.HoleIdentToken tok)) ->+        Hole (holeName tok)       Rzk.ModApp _loc md body -> ModApp (toModality md) (go body)       Rzk.ModType _loc md ty -> TypeModal (toModality md) (go ty)       Rzk.ModExtract{} -> error "$extract$ is an internal term and cannot appear in source"       Rzk.LetMod _loc comp (Rzk.BindPattern _ pat) val body ->         let (ext, inn) = modCompToMods comp-        in LetMod (patternVar pat) ext inn Nothing (go val) (toScopePattern pat bvars body)+        in LetMod (toBinder pat) ext inn Nothing (go val) (toScopePattern pat bvars body)       Rzk.LetMod _loc comp (Rzk.BindPatternType _ pat ty) val body ->         let (ext, inn) = modCompToMods comp-        in LetMod (patternVar pat) ext inn (Just (go ty)) (go val) (toScopePattern pat bvars body)+        in LetMod (toBinder pat) ext inn (Just (go ty)) (go val) (toScopePattern pat bvars body) -    patternVar (Rzk.PatternVar _loc (Rzk.VarIdent _ "_")) = Nothing-    patternVar (Rzk.PatternVar _loc x)                    = Just (varIdent x)-    patternVar _                                          = Nothing+    -- Translate a surface pattern into a 'Binder', keeping the pair\/tuple+    -- structure so the component names can be restored when rendering.+    toBinder (Rzk.PatternVar _loc (Rzk.VarIdent _ "_")) = BinderVar Nothing+    toBinder (Rzk.PatternVar _loc x)                    = BinderVar (Just (varIdent x))+    toBinder (Rzk.PatternUnit _loc)                     = BinderUnit+    toBinder (Rzk.PatternPair _loc l r)                 = BinderPair (toBinder l) (toBinder r)+    toBinder (Rzk.PatternTuple loc p1 p2 ps)            = toBinder (desugarTuple loc (reverse ps) p2 p1)  patternToTerm :: Rzk.Pattern -> Rzk.Term patternToTerm = ptt@@ -418,6 +470,26 @@       Rzk.PatternTuple loc p1 p2 ps -> patternToTerm (desugarTuple loc (reverse ps) p2 p1)  +modalColonModality :: Rzk.ModalColon -> Rzk.Modality+modalColonModality = \case+  Rzk.ModalColonFlat loc        -> Rzk.Flat loc+  Rzk.ModalColonSharp loc       -> Rzk.Sharp loc+  Rzk.ModalColonOp loc          -> Rzk.Op loc+  Rzk.ModalColonId loc          -> Rzk.Id loc+  Rzk.ASCII_ModalColonFlat loc  -> Rzk.Flat loc+  Rzk.ASCII_ModalColonSharp loc -> Rzk.Sharp loc+  Rzk.ASCII_ModalColonOp loc    -> Rzk.Op loc++modalColonToTModality :: Rzk.ModalColon -> TModality+modalColonToTModality = toModality . modalColonModality++fromTModalityToModalColon :: TModality -> Rzk.ModalColon+fromTModalityToModalColon = \case+  Sharp -> Rzk.ModalColonSharp Nothing+  Flat  -> Rzk.ModalColonFlat Nothing+  Op    -> Rzk.ModalColonOp Nothing+  Id    -> Rzk.ModalColonId Nothing+ unsafeTermToPattern :: Rzk.Term -> Rzk.Pattern unsafeTermToPattern = ttp   where@@ -431,8 +503,138 @@ sigmaParamToTypeSigma :: Rzk.BNFC'Position -> Rzk.SigmaParam -> Rzk.Term -> Rzk.Term sigmaParamToTypeSigma loc sp body = case sp of   Rzk.SigmaParam      _ pat ty      -> Rzk.TypeSigma      loc pat ty body-  Rzk.SigmaParamModal _ pat md ty  -> Rzk.TypeSigmaModal loc pat md ty body+  Rzk.SigmaParamModal _ pat mc ty  -> Rzk.TypeSigmaModal loc pat mc ty body +-- | A projection step: first (@π₁@) or second (@π₂@) component.+data Proj = PFst | PSnd+  deriving (Eq)++-- | Render a 'Binder' as a surface pattern (used to display the binder itself,+-- e.g. @(t , s)@). Anonymous variables become @_@.+binderToPattern :: Binder -> Rzk.Pattern+binderToPattern (BinderVar Nothing)  = Rzk.PatternVar Nothing (fromVarIdent "_")+binderToPattern (BinderVar (Just x)) = Rzk.PatternVar Nothing (fromVarIdent x)+binderToPattern (BinderPair l r)     = Rzk.PatternPair Nothing (binderToPattern l) (binderToPattern r)+binderToPattern BinderUnit           = Rzk.PatternUnit Nothing++-- | A term that prints as the binder's surface pattern, e.g. the point+-- @(t , s)@. Used to render a /bare/ occurrence of a pattern binder's variable+-- (one not under a projection, e.g. the point in a shape tope @Δ² (t , s)@) as+-- the pattern itself rather than the underlying single variable. A+-- single-variable binder yields that variable.+binderToTerm :: Binder -> Term VarIdent+binderToTerm (BinderVar Nothing)  = Pure (fromString "_")+binderToTerm (BinderVar (Just x)) = Pure x+binderToTerm (BinderPair l r)     = Pair (binderToTerm l) (binderToTerm r)+binderToTerm BinderUnit           = Unit++-- | A 'VarIdent' that prints as the binder's surface pattern, e.g. @(t , s)@.+-- Used to display a pattern binder in a hole's local context as the pattern+-- itself rather than as the underlying single variable.+binderDisplayName :: Binder -> VarIdent+binderDisplayName = fromString . Rzk.printTree . binderToPattern++-- | The named leaves of a binder, each paired with the projection path that+-- reaches it from the bound variable. For example @(t , (a , b))@ yields+-- @[([PFst], t), ([PSnd, PFst], a), ([PSnd, PSnd], b)]@.+binderPaths :: Binder -> [([Proj], VarIdent)]+binderPaths (BinderVar (Just x)) = [([], x)]+binderPaths (BinderVar Nothing)  = []+binderPaths BinderUnit           = []+binderPaths (BinderPair l r)     =+  [ (PFst : p, n) | (p, n) <- binderPaths l ] +++  [ (PSnd : p, n) | (p, n) <- binderPaths r ]++-- | The names appearing in a binder.+binderLeaves :: Binder -> [VarIdent]+binderLeaves = map snd . binderPaths++-- | Does this binder destructure a pair\/tuple (as opposed to naming a single+-- variable or @_@)?+binderIsCompound :: Binder -> Bool+binderIsCompound BinderVar{} = False+binderIsCompound _           = True++-- | Refresh the named leaves of a binder so they avoid the given names (and one+-- another). Anonymous leaves and the unit pattern are left unchanged.+freshenBinderLeaves :: [VarIdent] -> Binder -> Binder+freshenBinderLeaves used = snd . go used+  where+    go u (BinderVar (Just x)) = let x' = refreshVar u x in (x' : u, BinderVar (Just x'))+    go u b@(BinderVar Nothing) = (u, b)+    go u BinderUnit            = (u, BinderUnit)+    go u (BinderPair l r)      =+      let (u1, l') = go u l+          (u2, r') = go u1 r+      in (u2, BinderPair l' r')++-- | Decompose a chain of projections applied to a variable into the projection+-- path /from the variable outwards/, matching 'binderPaths'. The outermost+-- projection is applied last, so it goes at the /end/ of the path: e.g.+-- @π₂ (π₁ x)@ (select @π₁@ first, then @π₂@) becomes @Just ([PFst, PSnd], x)@.+projChain :: Term a -> Maybe ([Proj], a)+projChain (First t)  = (\(ps, r) -> (ps ++ [PFst], r)) <$> projChain t+projChain (Second t) = (\(ps, r) -> (ps ++ [PSnd], r)) <$> projChain t+projChain (Pure x)   = Just ([], x)+projChain _          = Nothing++-- | Replace projection chains rooted at a pattern binder with the binder's+-- component name. Given a map from a (bound) variable to the named leaves of+-- its binder, every @π₁/π₂@ chain that reaches a named leaf is rewritten to+-- that name. Ordinary projections (of variables not bound by a pattern, or+-- chains that do not reach a named leaf) are left untouched.+foldBinderProjections :: Eq a => [(a, [([Proj], a)])] -> Term a -> Term a+foldBinderProjections m = go+  where+    go t+      | Just (ps, root) <- projChain t+      , not (null ps)+      , Just leaves <- lookup root m+      , Just nm <- lookup ps leaves+      = Pure nm+    go (Free f) = Free (bimap goScope go f)+    go (Pure x) = Pure x+    goScope = foldBinderProjections (map liftEntry m)+    liftEntry (k, leaves) = (S k, map (fmap S) leaves)++-- | Replace bare uses of a pattern binder's variable with the pattern term+-- (e.g. a whole point @(t , s)@ rather than the underlying single variable, in+-- a tope @Δ² (t , s)@). Given a map from each (already display-named) variable+-- to its binder, every free occurrence of a /compound/ binder's variable is+-- expanded to its pattern. Complements 'foldBinderProjections', which folds+-- /projections/ of such a variable; run this /after/ folding, so projections+-- have already become component names and only bare uses remain.+restorePatternVars :: [(VarIdent, Binder)] -> Term VarIdent -> Term VarIdent+restorePatternVars binders = (>>= expand)+  where+    expand v = case lookup v binders of+      Just b | binderIsCompound b -> binderToTerm b+      _                           -> Pure v++-- | Like 'projChain', but for type-annotated terms.+projChainT :: TermT a -> Maybe ([Proj], a)+projChainT (FirstT _ t)  = (\(ps, r) -> (ps ++ [PFst], r)) <$> projChainT t+projChainT (SecondT _ t) = (\(ps, r) -> (ps ++ [PSnd], r)) <$> projChainT t+projChainT (Pure x)      = Just ([], x)+projChainT _             = Nothing++-- | Like 'foldBinderProjections', but for type-annotated terms (e.g. those+-- embedded in type errors). The annotation of a folded leaf is dropped, which+-- is harmless: the result is only rendered, and a bare variable needs none.+foldBinderProjectionsT :: Eq a => [(a, [([Proj], a)])] -> TermT a -> TermT a+foldBinderProjectionsT m = go+  where+    go t+      | Just (ps, root) <- projChainT t+      , not (null ps)+      , Just leaves <- lookup root m+      , Just nm <- lookup ps leaves+      = Pure nm+    go (Free (AnnF info f)) = Free (AnnF (fmap go info) (bimap goScope go f))+    go (Pure x) = Pure x+    goScope = foldBinderProjectionsT (map liftEntry m)+    liftEntry (k, leaves) = (S k, map (fmap S) leaves)+ fromTerm' :: Term' -> Rzk.Term fromTerm' t = fromTermWith' vars (defaultVarIdents \\ vars) t   where vars = freeVars t@@ -443,16 +645,53 @@     f Z     = Pure x     f (S z) = Pure z +-- | Like 'fromScope'', but additionally restores pattern-binder component names+-- inside the scope: projections of the bound variable @x@ are folded back to+-- the names recorded in @binder@ (e.g. @π₁ x@ becomes @t@). For a binder that+-- names a single variable this is exactly 'fromScope''.+fromScopeBinder' :: Binder -> VarIdent -> [VarIdent] -> [VarIdent] -> Scope Term VarIdent -> Rzk.Term+fromScopeBinder' binder x used xs scope =+  fromTermWith' (x : used) xs+    (restorePattern (foldBinderProjections [(x, binderPaths binder)] (scope >>= f)))+  where+    f Z     = Pure x+    f (S z) = Pure z+    -- After projection chains have been folded to their component names, a bare+    -- use of a pattern binder's variable (the whole point, e.g. in a shape tope+    -- @Δ² (t , s)@) still reads as the placeholder; show it as the pattern.+    restorePattern+      | binderIsCompound binder = (>>= \v -> if v == x then binderToTerm binder else Pure v)+      | otherwise               = id+ fromTermWith' :: [VarIdent] -> [VarIdent] -> Term' -> Rzk.Term fromTermWith' used vars = go   where-    withFresh Nothing f =-      case vars of-        x:xs -> f (x, xs)+    -- Refresh a binder's named leaves against the names already in use and draw+    -- fresh names for anonymous leaves from the remaining supply.+    freshenBinder _    stream (BinderVar Nothing) =+      case stream of+        x:xs -> (BinderVar (Just x), xs)         _    -> error "not enough fresh variables!"-    withFresh (Just z) f = f (z', filter (/= z') vars)    -- FIXME: very inefficient filter+    freshenBinder used' stream (BinderVar (Just z)) =+      (BinderVar (Just z'), filter (/= z') stream)+      where z' = refreshVar used' z+    freshenBinder _    stream BinderUnit = (BinderUnit, stream)+    freshenBinder used' stream (BinderPair l r) =+      let (l', s1) = freshenBinder used' stream l+          (r', s2) = freshenBinder (used' ++ binderLeaves l') s1 r+      in (BinderPair l' r', s2)++    -- Pick fresh names for a binder. Yields the bound variable's display name+    -- (used as the De Bruijn placeholder), the freshened binder (for the+    -- displayed pattern and for projection folding), and the remaining supply.+    withFreshBinder z f =+      case binder' of+        BinderVar (Just x) -> f (x, binder', stream)+        _ -> case stream of+               x:xs -> f (x, binder', xs)+               _    -> error "not enough fresh variables!"       where-        z' = refreshVar used z+        (binder', stream) = freshenBinder used vars z      loc = Nothing @@ -475,6 +714,9 @@       Cube2 -> Rzk.Cube2 loc       Cube2_0 -> Rzk.Cube2_0 loc       Cube2_1 -> Rzk.Cube2_1 loc+      CubeI -> Rzk.CubeI loc+      CubeI_0 -> Rzk.CubeI_0 loc+      CubeI_1 -> Rzk.CubeI_1 loc       CubeProduct l r -> Rzk.CubeProduct loc (go l) (go r)       TopeTop -> Rzk.TopeTop loc       TopeBottom -> Rzk.TopeBottom loc@@ -489,28 +731,40 @@       RecBottom -> Rzk.RecBottom loc       RecOr rs -> Rzk.RecOr loc [ Rzk.Restriction loc (go tope) (go term) | (tope, term) <- rs ] -      TypeFun z arg Nothing ret -> withFresh z $ \(x, xs) ->-        Rzk.TypeFun loc (Rzk.ParamTermType loc (Rzk.Var loc (fromVarIdent x)) (go arg)) (fromScope' x used xs ret)-      TypeFun z arg (Just tope) ret -> withFresh z $ \(x, xs) ->-        Rzk.TypeFun loc (Rzk.ParamTermShape loc (Rzk.Var loc (fromVarIdent x)) (go arg) (fromScope' x used xs tope)) (fromScope' x used xs ret)+      Hole mname -> Rzk.Hole loc (Rzk.HoleIdent loc (Rzk.HoleIdentToken (holeIdentToken mname))) -      TypeSigma z a b -> withFresh z $ \(x, xs) ->-        Rzk.TypeSigma loc (Rzk.PatternVar loc (fromVarIdent x)) (go a) (fromScope' x used xs b)+      TypeFun z Id arg Nothing ret -> withFreshBinder z $ \(x, z', xs) ->+        Rzk.TypeFun loc (Rzk.ParamTermType loc (patternToTerm (binderToPattern z')) (go arg)) (fromScopeBinder' z' x used xs ret)+      TypeFun z Id arg (Just tope) ret -> withFreshBinder z $ \(x, z', xs) ->+        Rzk.TypeFun loc (Rzk.ParamTermShape loc (patternToTerm (binderToPattern z')) (go arg) (fromScopeBinder' z' x used xs tope)) (fromScopeBinder' z' x used xs ret)+      TypeFun z md arg Nothing ret -> withFreshBinder z $ \(x, z', xs) ->+        Rzk.TypeFun loc (Rzk.ParamTermModalType loc (patternToTerm (binderToPattern z')) (fromTModalityToModalColon md) (go arg)) (fromScopeBinder' z' x used xs ret)+      TypeFun z md arg (Just tope) ret -> withFreshBinder z $ \(x, z', xs) ->+        Rzk.TypeFun loc (Rzk.ParamTermModalShape loc (patternToTerm (binderToPattern z')) (fromTModalityToModalColon md) (go arg) (fromScopeBinder' z' x used xs tope)) (fromScopeBinder' z' x used xs ret)++      TypeSigma z Id a b -> withFreshBinder z $ \(x, z', xs) ->+        Rzk.TypeSigma loc (binderToPattern z') (go a) (fromScopeBinder' z' x used xs b)+      TypeSigma z md a b -> withFreshBinder z $ \(x, z', xs) ->+        Rzk.TypeSigmaModal loc (binderToPattern z') (fromTModalityToModalColon md) (go a) (fromScopeBinder' z' x used xs b)       TypeId l (Just tA) r -> Rzk.TypeId loc (go l) (go tA) (go r)       TypeId l Nothing r -> Rzk.TypeIdSimple loc (go l) (go r)       App l r -> Rzk.App loc (go l) (go r) -      Lambda z Nothing scope -> withFresh z $ \(x, xs) ->-        Rzk.Lambda loc [Rzk.ParamPattern loc (Rzk.PatternVar loc (fromVarIdent x))] (fromScope' x used xs scope)-      Lambda z (Just (ty, Nothing)) scope -> withFresh z $ \(x, xs) ->-        Rzk.Lambda loc [Rzk.ParamPatternType loc [Rzk.PatternVar loc (fromVarIdent x)] (go ty)] (fromScope' x used xs scope)-      Lambda z (Just (cube, Just tope)) scope -> withFresh z $ \(x, xs) ->-        Rzk.Lambda loc [Rzk.ParamPatternShape loc [Rzk.PatternVar loc (fromVarIdent x)] (go cube) (fromScope' x used xs tope)] (fromScope' x used xs scope)+      Lambda z Nothing scope -> withFreshBinder z $ \(x, z', xs) ->+        Rzk.Lambda loc [Rzk.ParamPattern loc (binderToPattern z')] (fromScopeBinder' z' x used xs scope)+      Lambda z (Just (Id, ty, Nothing)) scope -> withFreshBinder z $ \(x, z', xs) ->+        Rzk.Lambda loc [Rzk.ParamPatternType loc [binderToPattern z'] (go ty)] (fromScopeBinder' z' x used xs scope)+      Lambda z (Just (Id, cube, Just tope)) scope -> withFreshBinder z $ \(x, z', xs) ->+        Rzk.Lambda loc [Rzk.ParamPatternShape loc [binderToPattern z'] (go cube) (fromScopeBinder' z' x used xs tope)] (fromScopeBinder' z' x used xs scope)+      Lambda z (Just (md, ty, Nothing)) scope -> withFreshBinder z $ \(x, z', xs) ->+        Rzk.Lambda loc [Rzk.ParamPatternModalType loc [binderToPattern z'] (fromTModalityToModalColon md) (go ty)] (fromScopeBinder' z' x used xs scope)+      Lambda z (Just (md, cube, Just tope)) scope -> withFreshBinder z $ \(x, z', xs) ->+        Rzk.Lambda loc [Rzk.ParamPatternModalShape loc [binderToPattern z'] (fromTModalityToModalColon md) (go cube) (fromScopeBinder' z' x used xs tope)] (fromScopeBinder' z' x used xs scope)       -- Lambda (Maybe (term, Maybe scope)) scope -> Rzk.Lambda loc (Maybe (term, Maybe scope)) scope-      Let z Nothing val scope -> withFresh z $ \(x, xs) -> -        Rzk.Let loc (Rzk.BindPattern loc (Rzk.PatternVar loc (fromVarIdent  x))) (go val) (fromScope' x used xs scope)-      Let z (Just ty) val scope -> withFresh z $ \(x, xs) -> -        Rzk.Let loc (Rzk.BindPatternType loc (Rzk.PatternVar loc (fromVarIdent  x)) (go ty)) (go val) (fromScope' x used xs scope)+      Let z Nothing val scope -> withFreshBinder z $ \(x, z', xs) ->+        Rzk.Let loc (Rzk.BindPattern loc (binderToPattern z')) (go val) (fromScopeBinder' z' x used xs scope)+      Let z (Just ty) val scope -> withFreshBinder z $ \(x, z', xs) ->+        Rzk.Let loc (Rzk.BindPatternType loc (binderToPattern z') (go ty)) (go val) (fromScopeBinder' z' x used xs scope)       Pair l r -> Rzk.Pair loc (go l) (go r)       First term -> Rzk.First loc (go term)       Second term -> Rzk.Second loc (go term)@@ -526,14 +780,14 @@       TypeModal m ty -> Rzk.ModType loc (goMod m) (go ty)       ModApp m ty -> Rzk.ModApp loc (goMod m) (go ty)       ModExtract ma mb t -> Rzk.ModExtract loc (Rzk.Comp loc (goMod ma) (goMod mb)) (go t)-      LetMod z ext inn Nothing val scope -> withFresh z $ \(x, xs) ->+      LetMod z ext inn Nothing val scope -> withFreshBinder z $ \(x, z', xs) ->         Rzk.LetMod loc (modsToModComp ext inn)-          (Rzk.BindPattern loc (Rzk.PatternVar loc (fromVarIdent x)))-          (go val) (fromScope' x used xs scope)-      LetMod z ext inn (Just ty) val scope -> withFresh z $ \(x, xs) ->+          (Rzk.BindPattern loc (binderToPattern z'))+          (go val) (fromScopeBinder' z' x used xs scope)+      LetMod z ext inn (Just ty) val scope -> withFreshBinder z $ \(x, z', xs) ->         Rzk.LetMod loc (modsToModComp ext inn)-          (Rzk.BindPatternType loc (Rzk.PatternVar loc (fromVarIdent x)) (go ty))-          (go val) (fromScope' x used xs scope)+          (Rzk.BindPatternType loc (binderToPattern z') (go ty))+          (go val) (fromScopeBinder' z' x used xs scope)   defaultVarIdents :: [VarIdent]@@ -543,6 +797,10 @@   , let name = "x" <> map digitToSub (show n) ]   where     digitToSub c = chr ((ord c - ord '0') + ord '₀')++-- $setup+-- >>> :set -XOverloadedStrings+-- >>> import qualified Data.Text as T  -- | Given a list of used variable names in the current context, -- generate a unique fresh name based on a given one.
src/Language/Rzk/Syntax.hs view
@@ -65,6 +65,10 @@  data LineType = NonCode | CodeOf T.Text +-- $setup+-- >>> :set -XOverloadedStrings+-- >>> import qualified Data.Text as T+ -- | Extract code for a given alias (e.g. "rzk" or "haskell") from a Markdown file -- by replacing any lines that do not belong to the code in that language with blank lines. -- This way the line numbers are preserved correctly from the original file.
src/Language/Rzk/Syntax/Abs.hs view
@@ -1,4 +1,4 @@--- File generated by the BNF Converter (bnfc 2.9.6.2).+-- File generated by the BNF Converter (bnfc 2.9.6.3).  {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-}@@ -83,7 +83,8 @@     | ParamPatternType a [Pattern' a] (Term' a)     | ParamPatternShape a [Pattern' a] (Term' a) (Term' a)     | ParamPatternShapeDeprecated a (Pattern' a) (Term' a) (Term' a)-    | ParamPatternModalType a [Pattern' a] (Modality' a) (Term' a)+    | ParamPatternModalType a [Pattern' a] (ModalColon' a) (Term' a)+    | ParamPatternModalShape a [Pattern' a] (ModalColon' a) (Term' a) (Term' a)   deriving (C.Eq, C.Ord, C.Show, C.Read, C.Functor, C.Foldable, C.Traversable, C.Data, C.Generic)  type Bind = Bind' BNFC'Position@@ -99,13 +100,14 @@     | ParamTermShape a (Term' a) (Term' a) (Term' a)     | ParamTermTypeDeprecated a (Pattern' a) (Term' a)     | ParamVarShapeDeprecated a (Pattern' a) (Term' a) (Term' a)-    | ParamTermModalType a (Term' a) (Modality' a) (Term' a)+    | ParamTermModalType a (Term' a) (ModalColon' a) (Term' a)+    | ParamTermModalShape a (Term' a) (ModalColon' a) (Term' a) (Term' a)   deriving (C.Eq, C.Ord, C.Show, C.Read, C.Functor, C.Foldable, C.Traversable, C.Data, C.Generic)  type SigmaParam = SigmaParam' BNFC'Position data SigmaParam' a     = SigmaParam a (Pattern' a) (Term' a)-    | SigmaParamModal a (Pattern' a) (Modality' a) (Term' a)+    | SigmaParamModal a (Pattern' a) (ModalColon' a) (Term' a)   deriving (C.Eq, C.Ord, C.Show, C.Read, C.Functor, C.Foldable, C.Traversable, C.Data, C.Generic)  type Restriction = Restriction' BNFC'Position@@ -130,6 +132,17 @@     = Single a (Modality' a) | Comp a (Modality' a) (Modality' a)   deriving (C.Eq, C.Ord, C.Show, C.Read, C.Functor, C.Foldable, C.Traversable, C.Data, C.Generic) +type ModalColon = ModalColon' BNFC'Position+data ModalColon' a+    = ModalColonFlat a+    | ModalColonSharp a+    | ModalColonOp a+    | ModalColonId a+    | ASCII_ModalColonFlat a+    | ASCII_ModalColonSharp a+    | ASCII_ModalColonOp a+  deriving (C.Eq, C.Ord, C.Show, C.Read, C.Functor, C.Foldable, C.Traversable, C.Data, C.Generic)+ type Term = Term' BNFC'Position data Term' a     = Universe a@@ -140,6 +153,9 @@     | Cube2 a     | Cube2_0 a     | Cube2_1 a+    | CubeI a+    | CubeI_0 a+    | CubeI_1 a     | CubeProduct a (Term' a) (Term' a)     | TopeTop a     | TopeBottom a@@ -156,7 +172,7 @@     | RecOrDeprecated a (Term' a) (Term' a) (Term' a) (Term' a)     | TypeFun a (ParamDecl' a) (Term' a)     | TypeSigma a (Pattern' a) (Term' a) (Term' a)-    | TypeSigmaModal a (Pattern' a) (Modality' a) (Term' a) (Term' a)+    | TypeSigmaModal a (Pattern' a) (ModalColon' a) (Term' a) (Term' a)     | TypeSigmaTuple a (SigmaParam' a) [SigmaParam' a] (Term' a)     | TypeUnit a     | TypeId a (Term' a) (Term' a) (Term' a)@@ -185,6 +201,9 @@     | ASCII_CubeUnitStar a     | ASCII_Cube2_0 a     | ASCII_Cube2_1 a+    | ASCII_CubeI a+    | ASCII_CubeI_0 a+    | ASCII_CubeI_1 a     | ASCII_TopeTop a     | ASCII_TopeBottom a     | ASCII_TopeEQ a (Term' a) (Term' a)@@ -193,7 +212,6 @@     | ASCII_TopeOr a (Term' a) (Term' a)     | ASCII_TypeFun a (ParamDecl' a) (Term' a)     | ASCII_TypeSigma a (Pattern' a) (Term' a) (Term' a)-    | ASCII_TypeSigmaModal a (Pattern' a) (Modality' a) (Term' a) (Term' a)     | ASCII_TypeSigmaTuple a (SigmaParam' a) [SigmaParam' a] (Term' a)     | ASCII_Lambda a [Param' a] (Term' a)     | ASCII_TypeExtensionDeprecated a (ParamDecl' a) (Term' a)@@ -240,6 +258,9 @@ ascii_CubeProduct :: a -> Term' a -> Term' a -> Term' a ascii_CubeProduct = \ _a l r -> CubeProduct _a l r +ascii_TypeSigmaModal :: a -> Pattern' a -> ModalColon' a -> Term' a -> Term' a -> Term' a+ascii_TypeSigmaModal = \ _a p mc t r -> TypeSigmaModal _a p mc t r+ unicode_TypeSigmaAlt :: a -> Pattern' a -> Term' a -> Term' a -> Term' a unicode_TypeSigmaAlt = \ _a pat fst snd -> TypeSigma _a pat fst snd @@ -324,6 +345,7 @@     ParamPatternShape p _ _ _ -> p     ParamPatternShapeDeprecated p _ _ _ -> p     ParamPatternModalType p _ _ _ -> p+    ParamPatternModalShape p _ _ _ _ -> p  instance HasPosition Bind where   hasPosition = \case@@ -338,6 +360,7 @@     ParamTermTypeDeprecated p _ _ -> p     ParamVarShapeDeprecated p _ _ _ -> p     ParamTermModalType p _ _ _ -> p+    ParamTermModalShape p _ _ _ _ -> p  instance HasPosition SigmaParam where   hasPosition = \case@@ -364,6 +387,16 @@     Single p _ -> p     Comp p _ _ -> p +instance HasPosition ModalColon where+  hasPosition = \case+    ModalColonFlat p -> p+    ModalColonSharp p -> p+    ModalColonOp p -> p+    ModalColonId p -> p+    ASCII_ModalColonFlat p -> p+    ASCII_ModalColonSharp p -> p+    ASCII_ModalColonOp p -> p+ instance HasPosition Term where   hasPosition = \case     Universe p -> p@@ -374,6 +407,9 @@     Cube2 p -> p     Cube2_0 p -> p     Cube2_1 p -> p+    CubeI p -> p+    CubeI_0 p -> p+    CubeI_1 p -> p     CubeProduct p _ _ -> p     TopeTop p -> p     TopeBottom p -> p@@ -419,6 +455,9 @@     ASCII_CubeUnitStar p -> p     ASCII_Cube2_0 p -> p     ASCII_Cube2_1 p -> p+    ASCII_CubeI p -> p+    ASCII_CubeI_0 p -> p+    ASCII_CubeI_1 p -> p     ASCII_TopeTop p -> p     ASCII_TopeBottom p -> p     ASCII_TopeEQ p _ _ -> p@@ -427,7 +466,6 @@     ASCII_TopeOr p _ _ -> p     ASCII_TypeFun p _ _ -> p     ASCII_TypeSigma p _ _ _ -> p-    ASCII_TypeSigmaModal p _ _ _ _ -> p     ASCII_TypeSigmaTuple p _ _ _ -> p     ASCII_Lambda p _ _ -> p     ASCII_TypeExtensionDeprecated p _ _ -> p
src/Language/Rzk/Syntax/Layout.hs view
@@ -1,4 +1,4 @@--- File generated by the BNF Converter (bnfc 2.9.6.2).+-- File generated by the BNF Converter (bnfc 2.9.6.3).  {-# OPTIONS_GHC -Wno-incomplete-patterns #-} @@ -37,16 +37,16 @@ layoutOpen, layoutClose, layoutSep :: [TokSymbol] layoutOpen  = List.nub $ mapMaybe (delimOpen  . snd) layoutWords layoutClose = List.nub $ mapMaybe (delimClose . snd) layoutWords-layoutSep   = List.nub $ TokSymbol ";" 34 : map (delimSep . snd) layoutWords+layoutSep   = List.nub $ TokSymbol ";" 45 : map (delimSep . snd) layoutWords  parenOpen, parenClose :: [TokSymbol] parenOpen  =   [ TokSymbol "(" 17-  , TokSymbol "[" 49+  , TokSymbol "[" 60   ] parenClose =   [ TokSymbol ")" 18-  , TokSymbol "]" 52+  , TokSymbol "]" 63   ]  -- | Report an error during layout resolution.@@ -74,7 +74,7 @@   res Nothing [if topLayout then Implicit topDelim Definitive 1 else Explicit]   where   topDelim :: LayoutDelimiters-  topDelim = LayoutDelimiters (TokSymbol ";" 34) Nothing Nothing+  topDelim = LayoutDelimiters (TokSymbol ";" 45) Nothing Nothing    res :: Maybe Token -- ^ The previous token, if any.       -> [Block]     -- ^ A stack of layout blocks.
src/Language/Rzk/Syntax/Lex.hs view
@@ -29,21 +29,21 @@ alex_tab_size = 8 alex_base :: AlexAddr alex_base = AlexA#-  "\xf8\xff\xff\xff\x98\xff\xff\xff\xa0\xff\xff\xff\x9a\xff\xff\xff\xf8\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\xff\xff\xff\xa5\xff\xff\xff\xa6\xff\xff\xff\xa2\xff\xff\xff\x9d\xff\xff\xff\xa8\xff\xff\xff\xa1\xff\xff\xff\xac\xff\xff\xff\xe5\xff\xff\xff\xd3\xff\xff\xff\xb8\x01\x00\x00\x91\xff\xff\xff\x85\xff\xff\xff\x7e\xff\xff\xff\x2f\x02\x00\x00\x26\x03\x00\x00\x1d\x04\x00\x00\x14\x05\x00\x00\x71\xff\xff\xff\x54\x05\x00\x00\x9e\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x05\x00\x00\x06\x06\x00\x00\x9b\xff\xff\xff\x00\x00\x00\x00\x7f\xff\xff\xff\x7c\xff\xff\xff\x8c\xff\xff\xff\xa3\xff\xff\xff\xb3\xff\xff\xff\xa7\xff\xff\xff\xfd\x06\x00\x00\xad\xff\xff\xff\xbd\xff\xff\xff\xaf\xff\xff\xff\xfd\x01\x00\x00\xf4\x07\x00\x00\xeb\x08\x00\x00\xe2\x09\x00\x00\xd9\x0a\x00\x00\xbf\xff\xff\xff\xcc\xff\xff\xff\xcf\xff\xff\xff\xce\xff\xff\xff\xd1\xff\xff\xff\xd2\xff\xff\xff\xd4\xff\xff\xff\xd7\xff\xff\xff\xdb\xff\xff\xff\xe0\xff\xff\xff\xe1\xff\xff\xff\xe6\xff\xff\xff\xe8\xff\xff\xff\xeb\xff\xff\xff\xee\xff\xff\xff\xef\xff\xff\xff\xf5\xff\xff\xff\xe0\x01\x00\x00\xd0\x0b\x00\x00\xc7\x0c\x00\x00\xbe\x0d\x00\x00\xb5\x0e\x00\x00\xac\x0f\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\x0f\x00\x00\xe2\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x11\x00\x00\x94\x11\x00\x00\xd4\x11\x00\x00\xa7\x12\x00\x00\x18\x13\x00\x00\x16\x12\x00\x00\x00\x00\x00\x00\x59\x13\x00\x00\xca\x13\x00\x00\x9d\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x15\x00\x00\x8b\x16\x00\x00\x82\x17\x00\x00\x79\x18\x00\x00\x70\x19\x00\x00\x67\x1a\x00\x00\x5e\x1b\x00\x00\x55\x1c\x00\x00\x4c\x1d\x00\x00\x43\x1e\x00\x00\x3a\x1f\x00\x00\x31\x20\x00\x00\x28\x21\x00\x00\x1f\x22\x00\x00\x16\x23\x00\x00\x0d\x24\x00\x00\xea\xff\xff\xff\x04\x25\x00\x00\xfb\x25\x00\x00\xf2\x26\x00\x00\x00\x00\x00\x00\xe7\xff\xff\xff\xe9\x27\x00\x00\x2c\x00\x00\x00\xf3\xff\xff\xff\x30\x00\x00\x00\x32\x00\x00\x00\x33\x00\x00\x00\xe0\x28\x00\x00\x3d\x02\x00\x00\x00\x00\x00\x00\xd6\x29\x00\x00\x1b\x02\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\xfd\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff\xfc\xff\xff\xff\xf4\xff\xff\xff\xb6\xff\xff\xff\xcd\x2a\x00\x00\xda\xff\xff\xff\xba\xff\xff\xff\xc4\x2b\x00\x00\xbb\x2c\x00\x00\xb2\x2d\x00\x00\xa9\x2e\x00\x00\x04\x00\x00\x00\x08\x00\x00\x00\x10\x00\x00\x00\xdd\x01\x00\x00\x07\x00\x00\x00\xce\x01\x00\x00\xcf\x01\x00\x00\xd1\x01\x00\x00\xcc\x01\x00\x00\xec\x01\x00\x00\xda\x01\x00\x00\xf4\x01\x00\x00\xe6\x01\x00\x00\xe8\x01\x00\x00\xea\x01\x00\x00\xa9\x2f\x00\x00\x29\x30\x00\x00\x2a\x30\x00\x00\xaa\x30\x00\x00\x2a\x31\x00\x00\xaa\x31\x00\x00\x2a\x32\x00\x00\xaa\x32\x00\x00\x2a\x33\x00\x00\xaa\x33\x00\x00\xfa\x01\x00\x00\xfb\x01\x00\x00"#+  "\xf8\xff\xff\xff\x9f\xff\xff\xff\xa2\xff\xff\xff\x94\xff\xff\xff\xa4\xff\xff\xff\x78\x00\x00\x00\xf8\x00\x00\x00\x78\x01\x00\x00\xf8\x01\x00\x00\x78\x02\x00\x00\xf8\x02\x00\x00\x78\x03\x00\x00\xf8\x03\x00\x00\x78\x04\x00\x00\xf8\x04\x00\x00\x78\x05\x00\x00\x78\x06\x00\x00\xf8\x06\x00\x00\x96\xff\xff\xff\x97\xff\xff\xff\x98\xff\xff\xff\xa8\xff\xff\xff\x9a\xff\xff\xff\xae\xff\xff\xff\x9e\xff\xff\xff\xa3\xff\xff\xff\xa1\xff\xff\xff\x7e\xff\xff\xff\x6f\x07\x00\x00\x66\x08\x00\x00\x5d\x09\x00\x00\x54\x0a\x00\x00\x5f\xff\xff\xff\x83\xff\xff\xff\x4b\x0b\x00\x00\x61\xff\xff\xff\xaa\xff\xff\xff\xad\xff\xff\xff\xf1\xff\xff\xff\xb5\xff\xff\xff\xbe\xff\xff\xff\xbd\xff\xff\xff\xbf\xff\xff\xff\xb9\xff\xff\xff\xc3\xff\xff\xff\xc4\xff\xff\xff\xc9\xff\xff\xff\xd1\xff\xff\xff\xd9\xff\xff\xff\xda\xff\xff\xff\x5b\x07\x00\x00\x41\x0c\x00\x00\x00\x00\x00\x00\x36\x00\x00\x00\x38\x0d\x00\x00\x0e\x00\x00\x00\x10\x00\x00\x00\xd5\xff\xff\xff\x15\x00\x00\x00\x2f\x0e\x00\x00\xd2\xff\xff\xff\x00\x00\x00\x00\x26\x0f\x00\x00\xd7\xff\xff\xff\x1d\x10\x00\x00\x14\x11\x00\x00\x0b\x12\x00\x00\x02\x13\x00\x00\xf9\x13\x00\x00\xf0\x14\x00\x00\xe7\x15\x00\x00\xde\x16\x00\x00\xd5\x17\x00\x00\xcc\x18\x00\x00\xc3\x19\x00\x00\xba\x1a\x00\x00\xb1\x1b\x00\x00\xa8\x1c\x00\x00\x9f\x1d\x00\x00\x96\x1e\x00\x00\x8d\x1f\x00\x00\x84\x20\x00\x00\x7b\x21\x00\x00\x00\x00\x00\x00\x4e\x22\x00\x00\xbd\x0b\x00\x00\xbd\x21\x00\x00\x00\x00\x00\x00\x8f\x22\x00\x00\x00\x23\x00\x00\xd3\x23\x00\x00\x41\x23\x00\x00\x14\x24\x00\x00\x85\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x25\x00\x00\xbb\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x26\x00\x00\xa9\x27\x00\x00\xa0\x28\x00\x00\x97\x29\x00\x00\x8e\x2a\x00\x00\x1a\x00\x00\x00\xed\xff\xff\xff\xe7\xff\xff\xff\xe6\xff\xff\xff\xe8\xff\xff\xff\xe5\xff\xff\xff\xea\xff\xff\xff\xf3\xff\xff\xff\xe3\xff\xff\xff\xe4\xff\xff\xff\xee\xff\xff\xff\xeb\xff\xff\xff\xec\xff\xff\xff\xf2\xff\xff\xff\xf4\xff\xff\xff\xef\xff\xff\xff\x85\x2b\x00\x00\x7c\x2c\x00\x00\x73\x2d\x00\x00\x6a\x2e\x00\x00\x29\x00\x00\x00\xf5\xff\xff\xff\xf6\xff\xff\xff\x00\x00\x00\x00\xab\x2e\x00\x00\x1c\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x2f\x00\x00\x5c\x30\x00\x00\xf0\xff\xff\xff\xf9\x06\x00\x00\xfd\x06\x00\x00\xfe\x06\x00\x00\xd3\x30\x00\x00\xf2\x06\x00\x00\x03\x07\x00\x00\xd8\xff\xff\xff\xc8\xff\xff\xff\xcb\xff\xff\xff\xd7\x06\x00\x00\xdd\xff\xff\xff\x00\x00\x00\x00\xff\x06\x00\x00\x14\x31\x00\x00\x85\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\xff\xff\xff\xc5\x31\x00\x00\xe3\x06\x00\x00\xbc\x32\x00\x00\xb3\x33\x00\x00\xaa\x34\x00\x00\xa1\x35\x00\x00\xce\xff\xff\xff\xc5\x06\x00\x00\xdc\xff\xff\xff\xfc\x06\x00\x00\x08\x07\x00\x00\x05\x07\x00\x00\xa1\x36\x00\x00\x52\x07\x00\x00\x66\x07\x00\x00\x30\x07\x00\x00\x27\x07\x00\x00\x37\x07\x00\x00\x28\x07\x00\x00\x33\x07\x00\x00\x39\x07\x00\x00\x32\x07\x00\x00\x3c\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x36\x00\x00\x61\x37\x00\x00\x35\x07\x00\x00"#  alex_table :: AlexAddr alex_table = AlexA#-  "\x00\x00\x7b\x00\x7b\x00\x7a\x00\x7a\x00\x7b\x00\x02\x00\x72\x00\x72\x00\x09\x00\x77\x00\x0d\x00\x76\x00\x72\x00\x72\x00\x0f\x00\x72\x00\x72\x00\x7d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x7b\x00\xff\xff\x4e\x00\x43\x00\x6b\x00\x13\x00\x29\x00\x6d\x00\x72\x00\x72\x00\x70\x00\x72\x00\x72\x00\x10\x00\xff\xff\x74\x00\x63\x00\x6f\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x2b\x00\x6d\x00\x32\x00\x71\x00\x72\x00\x2d\x00\x6c\x00\x72\x00\x5d\x00\x6d\x00\x14\x00\x6d\x00\x28\x00\x25\x00\x1a\x00\x6d\x00\x6d\x00\x6d\x00\x08\x00\x35\x00\x3a\x00\x34\x00\x9c\x00\x03\x00\x99\x00\xa7\x00\x80\x00\x39\x00\x41\x00\x23\x00\x40\x00\x6d\x00\x6d\x00\x0a\x00\x9a\x00\x0b\x00\x72\x00\x75\x00\x72\x00\x9b\x00\x61\x00\x95\x00\x37\x00\x72\x00\x72\x00\x8f\x00\x91\x00\x8d\x00\x11\x00\x55\x00\x18\x00\x49\x00\x83\x00\x7f\x00\x0c\x00\xa8\x00\x3d\x00\x42\x00\x84\x00\x44\x00\x15\x00\x87\x00\x16\x00\x93\x00\x88\x00\x72\x00\x01\x00\x38\x00\x79\x00\x78\x00\x72\x00\xa7\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x26\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x24\x00\x1c\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x89\x00\x27\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x92\x00\xff\xff\x4e\x00\x3b\x00\x9a\x00\x94\x00\x36\x00\x4e\x00\x82\x00\x3f\x00\x0e\x00\x7b\x00\x7b\x00\x7b\x00\x7b\x00\x7b\x00\x0d\x00\x90\x00\x96\x00\x49\x00\xff\xff\x6e\x00\xff\xff\xff\xff\x3e\x00\x81\x00\x8e\x00\x97\x00\xff\xff\xff\xff\x98\x00\x3c\x00\xff\xff\xa7\x00\x7b\x00\x85\x00\x72\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\x00\x00\x72\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\x4e\x00\xff\xff\xff\xff\xff\xff\x4e\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\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x2a\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\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\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\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\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x6d\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9e\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4d\x00\xa4\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x53\x00\xa3\x00\x4a\x00\x4a\x00\x4a\x00\x52\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9d\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x54\x00\xa6\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x59\x00\xa5\x00\x4f\x00\x4f\x00\x4f\x00\x56\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9d\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x54\x00\xa6\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x59\x00\xa5\x00\x4f\x00\x4f\x00\x4f\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x6d\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\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\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\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x21\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x6d\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x48\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x21\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x2c\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x6d\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\x72\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7b\x00\x7a\x00\x7a\x00\x7b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x05\x00\x9f\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x20\x00\xa0\x00\x1d\x00\x1d\x00\x1d\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x86\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x89\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x1b\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x57\x00\xa2\x00\x06\x00\x06\x00\x06\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x04\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x9f\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x12\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\xa1\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\x58\x00\xa4\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x9e\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\xa6\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x9d\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00"#+  "\x00\x00\x35\x00\x35\x00\x36\x00\x36\x00\x35\x00\x3d\x00\x3c\x00\x04\x00\x3d\x00\x2b\x00\xb2\x00\x73\x00\x16\x00\x6b\x00\x18\x00\x74\x00\x14\x00\x1a\x00\xa7\x00\x21\x00\x22\x00\xa4\x00\x25\x00\x35\x00\xff\xff\x61\x00\x6c\x00\x44\x00\x81\x00\x27\x00\x29\x00\x3d\x00\x3d\x00\x40\x00\xad\x00\x3d\x00\xaa\x00\xff\xff\x3b\x00\x4c\x00\x41\x00\x42\x00\x01\x00\x2f\x00\x77\x00\x2c\x00\x6d\x00\x02\x00\x72\x00\x3e\x00\x3d\x00\x7f\x00\x43\x00\x3d\x00\x52\x00\x24\x00\xae\x00\x31\x00\x5a\x00\x2d\x00\xa9\x00\xb1\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x3d\x00\x3d\x00\x78\x00\x19\x00\x03\x00\xaf\x00\xb0\x00\x14\x00\x76\x00\x30\x00\x79\x00\x6f\x00\x2e\x00\x70\x00\xac\x00\x3d\x00\x3a\x00\x3d\x00\x35\x00\x4e\x00\x6e\x00\x28\x00\xb7\x00\x04\x00\x6b\x00\x3f\x00\x1c\x00\x15\x00\x71\x00\x9f\x00\x2a\x00\x17\x00\x75\x00\x12\x00\x3d\x00\x80\x00\x7a\x00\x42\x00\x6a\x00\x13\x00\x42\x00\xa1\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x37\x00\x38\x00\x3d\x00\x93\x00\x8d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x90\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x92\x00\x9b\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x20\x00\x8f\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0e\x00\xb4\x00\xb4\x00\xb4\x00\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x11\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x05\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x10\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x07\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x88\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x09\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x0f\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x1b\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\xb6\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa2\x00\x89\x00\xff\xff\x61\x00\x42\x00\x42\x00\x8b\x00\xa6\x00\x61\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\xa5\x00\x42\x00\x8e\x00\x91\x00\x9d\x00\x42\x00\xff\xff\x3d\x00\xff\xff\xff\xff\x33\x00\x3d\x00\xab\x00\xad\x00\xff\xff\xff\xff\x42\x00\x42\x00\xff\xff\x93\x00\x3d\x00\x3d\x00\x39\x00\x04\x00\x26\x00\x42\x00\x3d\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\xff\xff\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\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\xff\xff\xff\xff\xff\xff\x61\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\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x20\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x23\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb6\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb3\x00\xb5\x00\x0f\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x97\x00\x0d\x00\x9a\x00\x9a\x00\x9a\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x35\x00\x36\x00\x36\x00\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\x3d\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x42\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x20\x00\x94\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x8a\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\xa3\x00\x96\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x66\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x7b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x42\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\xa3\x00\x96\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\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\xff\xff\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\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x42\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\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x88\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x87\x00\x09\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x85\x00\x83\x00\x0a\x00\x86\x00\x86\x00\x86\x00\x84\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x11\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5b\x00\x05\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x56\x00\x06\x00\x60\x00\x60\x00\x60\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\x9c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x11\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5b\x00\x05\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x5f\x00\x56\x00\x06\x00\x60\x00\x60\x00\x60\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\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x63\x00\x62\x00\x07\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x64\x00\x5c\x00\x08\x00\x65\x00\x65\x00\x65\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x42\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\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\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\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\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\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\x69\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x7b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x8c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb5\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x97\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa8\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x95\x00\x9c\x00\x0c\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x58\x00\x0b\x00\xb4\x00\xb4\x00\xb4\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#  alex_check :: AlexAddr alex_check = AlexA#-  "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x6e\x00\x67\x00\x6e\x00\x74\x00\x65\x00\x6e\x00\x66\x00\x6b\x00\x66\x00\x6e\x00\x64\x00\x3e\x00\x2d\x00\x82\x00\x96\x00\xa4\x00\xa5\x00\x92\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x82\x00\x80\x00\xa3\x00\x28\x00\x29\x00\x2a\x00\x3e\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xa6\x00\xad\x00\xa1\x00\xaf\x00\x82\x00\xa4\x00\x82\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x91\x00\x86\x00\x97\x00\x88\x00\x89\x00\x8a\x00\x81\x00\x82\x00\x81\x00\x75\x00\x73\x00\x75\x00\x73\x00\x73\x00\x6f\x00\x73\x00\x6d\x00\x69\x00\x69\x00\x65\x00\x99\x00\x65\x00\xa7\x00\xa8\x00\x65\x00\x63\x00\x63\x00\x5b\x00\x5c\x00\x5d\x00\x61\x00\x5f\x00\x2d\x00\x6f\x00\x73\x00\x2f\x00\x69\x00\x2d\x00\x66\x00\x2d\x00\x2d\x00\x69\x00\x74\x00\x62\x00\x61\x00\x68\x00\x6c\x00\x68\x00\x6c\x00\x75\x00\x72\x00\xb5\x00\x92\x00\x75\x00\x6f\x00\xb5\x00\x3e\x00\x61\x00\x6e\x00\x7b\x00\x7c\x00\x7d\x00\x6e\x00\x70\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\x09\x00\x0a\x00\x3d\x00\x6d\x00\x0d\x00\x22\x00\x72\x00\x70\x00\x6f\x00\x61\x00\x27\x00\x63\x00\x64\x00\x65\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x6e\x00\x6c\x00\x61\x00\x74\x00\x20\x00\x70\x00\x22\x00\x23\x00\x73\x00\x77\x00\x75\x00\x76\x00\x28\x00\x29\x00\x65\x00\x74\x00\x2c\x00\x74\x00\x20\x00\x74\x00\x65\x00\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x7c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x5b\x00\x5c\x00\x5d\x00\x72\x00\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x76\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6b\x00\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\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\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2d\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x64\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x24\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x78\x00\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\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\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\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00"#+  "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x67\x00\x65\x00\x74\x00\x65\x00\x74\x00\x74\x00\x74\x00\x65\x00\x74\x00\x61\x00\x72\x00\x70\x00\x6f\x00\x95\x00\xb5\x00\x92\x00\xb5\x00\x6d\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x70\x00\x2d\x00\x61\x00\x28\x00\x29\x00\x2a\x00\x6e\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x6e\x00\x77\x00\x6e\x00\x75\x00\x6c\x00\x6c\x00\x68\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x6f\x00\x68\x00\x61\x00\x2d\x00\x62\x00\x2d\x00\x69\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2f\x00\x73\x00\x6f\x00\x2d\x00\x61\x00\x63\x00\x65\x00\x63\x00\x69\x00\x69\x00\x61\x00\x65\x00\x63\x00\x64\x00\x65\x00\x5b\x00\x5c\x00\x5d\x00\x20\x00\x5f\x00\x65\x00\x6c\x00\x6f\x00\x6d\x00\x74\x00\x70\x00\x66\x00\x73\x00\x73\x00\x69\x00\x75\x00\x76\x00\x75\x00\x73\x00\x3d\x00\x73\x00\x73\x00\xa1\x00\x72\x00\x75\x00\xa4\x00\x75\x00\xa3\x00\x97\x00\xa2\x00\x81\x00\x96\x00\x7b\x00\x7c\x00\x7d\x00\x99\x00\x80\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\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\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\x09\x00\x0a\x00\xb5\x00\x82\x00\x0d\x00\x22\x00\x81\x00\x82\x00\x82\x00\x82\x00\x27\x00\x91\x00\xad\x00\x80\x00\xaf\x00\xa4\x00\xa5\x00\x86\x00\x82\x00\x88\x00\x89\x00\x8a\x00\x92\x00\x20\x00\x3e\x00\x22\x00\x23\x00\x2d\x00\x64\x00\x6e\x00\x6e\x00\x28\x00\x29\x00\xa7\x00\xa8\x00\x2c\x00\x99\x00\x66\x00\x6b\x00\x66\x00\x6e\x00\x65\x00\xa6\x00\x6e\x00\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x5b\x00\x5c\x00\x5d\x00\x72\x00\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x78\x00\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x24\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\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\x5b\x00\x5c\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x64\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2d\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\x2d\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\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\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6b\x00\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x76\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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#-  "\x5e\x00\xff\xff\xff\xff\xff\xff\x7d\x00\x7d\x00\x58\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x1e\x00\x07\x00\x1e\x00\x07\x00\x22\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x22\x00\x5e\x00\x5e\x00\x22\x00\x5e\x00\x22\x00\xff\xff\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\xff\xff\x4b\x00\x4c\x00\x4e\x00\x4e\x00\x4e\x00\x50\x00\x51\x00\x55\x00\x4b\x00\x4c\x00\x55\x00\x55\x00\x50\x00\x22\x00\x22\x00\x51\x00\x58\x00\x55\x00\xff\xff\xff\xff\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\xff\xff\x5e\x00\x5e\x00\x5e\x00\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x5e\x00\x5e\x00\x22\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\xff\xff\xff\xff\xff\xff\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\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#+  "\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x95\x00\x51\x00\x51\x00\x51\x00\x51\x00\x95\x00\x51\x00\x51\x00\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\x51\x00\xff\xff\xff\xff\x51\x00\xff\xff\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x52\x00\xff\xff\x5a\x00\x5f\x00\x5e\x00\x95\x00\x95\x00\x57\x00\x5a\x00\x5a\x00\x63\x00\x64\x00\x5a\x00\x5e\x00\x5f\x00\x61\x00\x61\x00\x61\x00\x63\x00\x64\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x51\x00\x51\x00\x51\x00\x51\x00\xff\xff\xff\xff\xff\xff\x52\x00\x82\x00\x85\x00\x82\x00\x85\x00\x52\x00\x52\x00\x51\x00\x95\x00\x51\x00\x95\x00\x51\x00\x51\x00\x95\x00\x51\x00\x51\x00\x51\x00\x51\x00\x95\x00\x51\x00\x95\x00\xb3\x00\x99\x00\xb3\x00\x99\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x95\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x57\x00\x33\x00\x33\x00\xff\xff"# -alex_accept = Data.Array.listArray (0 :: Int, 168)+alex_accept = Data.Array.listArray (0 :: Int, 183)   [ AlexAccNone   , AlexAccNone   , AlexAccNone@@ -66,15 +66,23 @@   , AlexAccNone   , AlexAccNone   , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone   , AlexAcc 48   , AlexAcc 47   , AlexAcc 46   , AlexAcc 45   , AlexAccNone   , AlexAccNone+  , AlexAcc 44   , AlexAccNone   , AlexAccNone   , AlexAccNone+  , AlexAcc 43   , AlexAccNone   , AlexAccNone   , AlexAccNone@@ -85,16 +93,41 @@   , AlexAccNone   , AlexAccNone   , AlexAccNone-  , AlexAcc 44   , AlexAccNone   , AlexAccNone-  , AlexAccNone-  , AlexAcc 43+  , AlexAccSkip+  , AlexAccSkip+  , AlexAccSkip+  , AlexAccSkip   , AlexAcc 42   , AlexAcc 41   , AlexAcc 40   , AlexAcc 39+  , AlexAcc 38+  , AlexAcc 37+  , AlexAcc 36+  , AlexAcc 35   , AlexAccNone+  , 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   , AlexAccNone   , AlexAccNone   , AlexAccNone@@ -112,14 +145,12 @@   , AlexAccNone   , AlexAccNone   , AlexAccNone-  , AlexAcc 38-  , AlexAcc 37-  , AlexAcc 36-  , AlexAcc 35-  , AlexAcc 34   , AlexAccNone-  , AlexAccNone-  , AlexAccNone+  , AlexAcc 14+  , AlexAcc 13+  , AlexAcc 12+  , AlexAcc 11+  , AlexAcc 10   , AlexAccNone   , AlexAccNone   , AlexAccNone@@ -136,40 +167,11 @@   , AlexAccNone   , AlexAccNone   , AlexAccNone-  , 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-  , AlexAccNone-  , AlexAcc 15-  , AlexAcc 14-  , AlexAcc 13-  , AlexAcc 12-  , AlexAcc 11-  , AlexAcc 10   , AlexAcc 9   , AlexAcc 8   , AlexAcc 7   , AlexAcc 6   , AlexAcc 5-  , AlexAccSkip-  , AlexAccSkip-  , AlexAccSkip-  , AlexAccSkip   , AlexAccNone   , AlexAccNone   , AlexAccNone@@ -179,13 +181,13 @@   , AlexAccNone   , AlexAccNone   , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone   , AlexAcc 4   , AlexAccNone   , AlexAccNone-  , AlexAcc 3-  , AlexAcc 2-  , AlexAcc 1-  , AlexAcc 0   , AlexAccNone   , AlexAccNone   , AlexAccNone@@ -200,6 +202,10 @@   , AlexAccNone   , AlexAccNone   , AlexAccNone+  , AlexAcc 3+  , AlexAcc 2+  , AlexAcc 1+  , AlexAcc 0   , AlexAccNone   , AlexAccNone   , AlexAccNone@@ -213,6 +219,15 @@   , AlexAccNone   , AlexAccNone   , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone   ]  alex_actions = Data.Array.array (0 :: Int, 49)@@ -222,18 +237,18 @@   , (45,alex_action_4)   , (44,alex_action_4)   , (43,alex_action_3)-  , (42,alex_action_4)-  , (41,alex_action_4)-  , (40,alex_action_4)-  , (39,alex_action_4)-  , (38,alex_action_4)-  , (37,alex_action_4)-  , (36,alex_action_4)-  , (35,alex_action_4)-  , (34,alex_action_4)-  , (33,alex_action_7)-  , (32,alex_action_5)-  , (31,alex_action_4)+  , (42,alex_action_3)+  , (41,alex_action_3)+  , (40,alex_action_3)+  , (39,alex_action_3)+  , (38,alex_action_3)+  , (37,alex_action_3)+  , (36,alex_action_3)+  , (35,alex_action_3)+  , (34,alex_action_3)+  , (33,alex_action_3)+  , (32,alex_action_3)+  , (31,alex_action_3)   , (30,alex_action_4)   , (29,alex_action_4)   , (28,alex_action_4)@@ -247,18 +262,18 @@   , (20,alex_action_4)   , (19,alex_action_4)   , (18,alex_action_4)-  , (17,alex_action_3)-  , (16,alex_action_3)-  , (15,alex_action_3)-  , (14,alex_action_3)-  , (13,alex_action_3)-  , (12,alex_action_3)-  , (11,alex_action_3)-  , (10,alex_action_3)-  , (9,alex_action_3)-  , (8,alex_action_3)-  , (7,alex_action_3)-  , (6,alex_action_3)+  , (17,alex_action_4)+  , (16,alex_action_5)+  , (15,alex_action_7)+  , (14,alex_action_4)+  , (13,alex_action_4)+  , (12,alex_action_4)+  , (11,alex_action_4)+  , (10,alex_action_4)+  , (9,alex_action_4)+  , (8,alex_action_4)+  , (7,alex_action_4)+  , (6,alex_action_4)   , (5,alex_action_3)   , (4,alex_action_4)   , (3,alex_action_4)@@ -610,65 +625,70 @@ -- | The keywords and symbols of the language organized as binary search tree. resWords :: BTree resWords =-  b "\\" 50-    (b "/\\" 25-       (b "#unset-option" 13+  b "TOP" 56+    (b "0\7522" 28+       (b "#variable" 14           (b "#define" 7              (b "#compute-nf" 4                 (b "#check" 2 (b "#assume" 1 N N) (b "#compute" 3 N N))                 (b "#def" 6 (b "#compute-whnf" 5 N N) N))-             (b "#postulate" 10-                (b "#lang" 9 (b "#end" 8 N N) N)-                (b "#set-option" 12 (b "#section" 11 N N) N)))-          (b "*" 19-             (b "$extract$" 16-                (b "#variables" 15 (b "#variable" 14 N N) N)-                (b ")" 18 (b "(" 17 N N) N))-             (b "," 22-                (b "*\8321" 21 (b "*_1" 20 N N) N) (b "/" 24 (b "->" 23 N N) N))))-       (b "=" 38-          (b ":" 32-             (b "1_2" 29-                (b "0\8322" 27 (b "0_2" 26 N N) (b "1" 28 N N))-                (b "2" 31 (b "1\8322" 30 N N) N))-             (b "<" 35-                (b ";" 34 (b ":=" 33 N N) N) (b "<|" 37 (b "<=" 36 N N) N)))-          (b "Sigma" 44-             (b ">" 41-                (b "=_{" 40 (b "===" 39 N N) N) (b "CUBE" 43 (b "BOT" 42 N N) N))-             (b "U" 47-                (b "TOPE" 46 (b "TOP" 45 N N) N) (b "[" 49 (b "Unit" 48 N N) N)))))-    (b "uninv_op" 75-       (b "inv_op" 63-          (b "as" 57-             (b "_b" 54-                (b "]" 52 (b "\\/" 51 N N) (b "_#" 53 N N))-                (b "_op" 56 (b "_id" 55 N N) N))-             (b "flip\7506\7510" 60-                (b "flip_op" 59 (b "first" 58 N N) N)-                (b "in" 62 (b "idJ" 61 N N) N)))-          (b "refl" 69-             (b "mod" 66-                (b "let" 65 (b "inv\7506\7510" 64 N N) N)-                (b "recOR" 68 (b "recBOT" 67 N N) N))-             (b "second" 72-                (b "rzk-1" 71 (b "refl_{" 70 N N) N)-                (b "unflip\7506\7510" 74 (b "unflip_op" 73 N N) N))))-       (b "\7506\7510" 88-          (b "|>" 82-             (b "{" 79-                (b "unit" 77 (b "uninv\7506\7510" 76 N N) (b "uses" 78 N N))-                (b "|->" 81 (b "|" 80 N N) N))-             (b "\931" 85-                (b "\215" 84 (b "}" 83 N N) N)-                (b "\960\8322" 87 (b "\960\8321" 86 N N) N)))-          (b "\8801" 94-             (b "\8721" 91-                (b "\8614" 90 (b "\8594" 89 N N) N)-                (b "\8744" 93 (b "\8743" 92 N N) N))-             (b "\8869" 97-                (b "\8868" 96 (b "\8804" 95 N N) N)-                (b "\9839" 99 (b "\9837" 98 N N) N)))))+             (b "#section" 11+                (b "#lang" 9 (b "#end" 8 N N) (b "#postulate" 10 N N))+                (b "#unset-option" 13 (b "#set-option" 12 N N) N)))+          (b "*\8321" 21+             (b ")" 18+                (b "$extract$" 16 (b "#variables" 15 N N) (b "(" 17 N N))+                (b "*_1" 20 (b "*" 19 N N) N))+             (b "/\\" 25+                (b "->" 23 (b "," 22 N N) (b "/" 24 N N))+                (b "0_I" 27 (b "0_2" 26 N N) N))))+       (b ":\7506\7510" 42+          (b "2" 35+             (b "1_I" 32+                (b "1" 30 (b "0\8322" 29 N N) (b "1_2" 31 N N))+                (b "1\8322" 34 (b "1\7522" 33 N N) N))+             (b ":_b" 39+                (b ":=" 37 (b ":" 36 N N) (b ":_#" 38 N N))+                (b ":_op" 41 (b ":_id" 40 N N) N)))+          (b "===" 49+             (b "<" 46+                (b ":\9839" 44 (b ":\9837" 43 N N) (b ";" 45 N N))+                (b "=" 48 (b "<=" 47 N N) N))+             (b "CUBE" 53+                (b ">" 51 (b "=_{" 50 N N) (b "BOT" 52 N N))+                (b "Sigma" 55 (b "II" 54 N N) N)))))+    (b "unflip_op" 84+       (b "flip_op" 70+          (b "]" 63+             (b "[" 60+                (b "U" 58 (b "TOPE" 57 N N) (b "Unit" 59 N N))+                (b "\\/" 62 (b "\\" 61 N N) N))+             (b "_op" 67+                (b "_b" 65 (b "_#" 64 N N) (b "_id" 66 N N))+                (b "first" 69 (b "as" 68 N N) N)))+          (b "mod" 77+             (b "inv_op" 74+                (b "idJ" 72 (b "flip\7506\7510" 71 N N) (b "in" 73 N N))+                (b "let" 76 (b "inv\7506\7510" 75 N N) N))+             (b "refl_{" 81+                (b "recOR" 79 (b "recBOT" 78 N N) (b "refl" 80 N N))+                (b "second" 83 (b "rzk-1" 82 N N) N))))+       (b "\7506\7510" 98+          (b "|" 91+             (b "unit" 88+                (b "uninv_op" 86+                   (b "unflip\7506\7510" 85 N N) (b "uninv\7506\7510" 87 N N))+                (b "{" 90 (b "uses" 89 N N) N))+             (b "\931" 95+                (b "}" 93 (b "|->" 92 N N) (b "\215" 94 N N))+                (b "\960\8322" 97 (b "\960\8321" 96 N N) N)))+          (b "\8804" 105+             (b "\8743" 102+                (b "\8614" 100 (b "\8594" 99 N N) (b "\8721" 101 N N))+                (b "\8801" 104 (b "\8744" 103 N N) N))+             (b "\9837" 108+                (b "\8869" 107 (b "\8868" 106 N N) N)+                (b "\120128" 110 (b "\9839" 109 N N) N)))))   where   b s n = B bs (TS bs n)     where
− src/Language/Rzk/Syntax/Lex.x
@@ -1,315 +0,0 @@--- -*- haskell -*- File generated by the BNF Converter (bnfc 2.9.6.2).---- Lexer definition for use with Alex 3-{-{-# OPTIONS -Wno-incomplete-patterns #-}-{-# OPTIONS_GHC -w #-}--{-# LANGUAGE PatternSynonyms #-}--module Language.Rzk.Syntax.Lex where--import Prelude--import qualified Data.Text-import qualified Data.Bits-import Data.Char     (ord)-import Data.Function (on)-import Data.Word     (Word8)-}---- Predefined character classes--$c = [A-Z\192-\222] # [\215]  -- capital isolatin1 letter (215 = \times)-$s = [a-z\223-\255] # [\247]  -- small   isolatin1 letter (247 = \div  )-$l = [$c $s]         -- letter-$d = [0-9]           -- digit-$i = [$l $d _ ']     -- identifier character-$u = [. \n]          -- universal: any character---- Symbols and non-identifier-like reserved words--@rsyms = \ᵒ \ᵖ | "inv" \ᵒ \ᵖ | "uninv" \ᵒ \ᵖ | "flip" \ᵒ \ᵖ | "unflip" \ᵒ \ᵖ | \Σ | \π \₁ | \π \₂ | \# "lang" | \; | "rzk" \- "1" | \# "set" \- "option" | \= | \# "unset" \- "option" | \# "check" | \: | \# "compute" | \# "compute" \- "whnf" | \# "compute" \- "nf" | \# "postulate" | \# "assume" | \# "variable" | \# "variables" | \# "section" | \# "end" | \# "define" | \: \= | \# "def" | \( | \) | \, | \| | \{ | \} | \↦ | \♭ | \_ "b" | \♯ | \_ \# | \_ "op" | \_ "id" | \/ | "1" | \* \₁ | "2" | "0" \₂ | "1" \₂ | \× | \⊤ | \⊥ | \≡ | \≤ | \∧ | \∨ | \→ | \= \_ \{ | \[ | \] | \< | \> | \\ | \< \| | \| \> | \$ "extract" \$ | "refl" \_ \{ | \* | \* \_ "1" | "0" \_ "2" | "1" \_ "2" | \= \= \= | \< \= | \/ \\ | \\ \/ | \- \> | \| \- \> | \∑--:----- Line comment "--"-"--" [.]* ;---- Block comment "{-" "-}"-\{ \- [$u # \-]* \- ([$u # [\- \}]] [$u # \-]* \- | \-)* \} ;---- Whitespace (skipped)-$white+ ;---- Symbols-@rsyms-    { tok (eitherResIdent TV) }---- token VarIdentToken-[$u # [\t \n \r \  \! \" \# \( \) \, \- \. \; \< \> \? \[ \\ \] \{ \| \}]] [$u # [\t \n \r \  \" \# \( \) \, \; \< \> \[ \\ \] \{ \| \}]] *-    { tok (eitherResIdent T_VarIdentToken) }---- token HoleIdentToken-\?-    { tok (eitherResIdent T_HoleIdentToken) }---- Keywords and Ident-$l $i*-    { tok (eitherResIdent TV) }---- String-\" ([$u # [\" \\ \n]] | (\\ (\" | \\ | \' | n | t | r | f)))* \"-    { tok (TL . unescapeInitTail) }--{--- | Create a token with position.-tok :: (Data.Text.Text -> Tok) -> (Posn -> Data.Text.Text -> Token)-tok f p = PT p . f---- | Token without position.-data Tok-  = TK {-# UNPACK #-} !TokSymbol  -- ^ Reserved word or symbol.-  | TL !Data.Text.Text            -- ^ String literal.-  | TI !Data.Text.Text            -- ^ Integer literal.-  | TV !Data.Text.Text            -- ^ Identifier.-  | TD !Data.Text.Text            -- ^ Float literal.-  | TC !Data.Text.Text            -- ^ Character literal.-  | T_VarIdentToken !Data.Text.Text-  | T_HoleIdentToken !Data.Text.Text-  deriving (Eq, Show, Ord)---- | Smart constructor for 'Tok' for the sake of backwards compatibility.-pattern TS :: Data.Text.Text -> Int -> Tok-pattern TS t i = TK (TokSymbol t i)---- | Keyword or symbol tokens have a unique ID.-data TokSymbol = TokSymbol-  { tsText :: Data.Text.Text-      -- ^ Keyword or symbol text.-  , tsID   :: !Int-      -- ^ Unique ID.-  } deriving (Show)---- | Keyword/symbol equality is determined by the unique ID.-instance Eq  TokSymbol where (==)    = (==)    `on` tsID---- | Keyword/symbol ordering is determined by the unique ID.-instance Ord TokSymbol where compare = compare `on` tsID---- | Token with position.-data Token-  = PT  Posn Tok-  | Err Posn-  deriving (Eq, Show, Ord)---- | Pretty print a position.-printPosn :: Posn -> String-printPosn (Pn _ l c) = "line " ++ show l ++ ", column " ++ show c---- | Pretty print the position of the first token in the list.-tokenPos :: [Token] -> String-tokenPos (t:_) = printPosn (tokenPosn t)-tokenPos []    = "end of file"---- | Get the position of a token.-tokenPosn :: Token -> Posn-tokenPosn (PT p _) = p-tokenPosn (Err p)  = p---- | Get line and column of a token.-tokenLineCol :: Token -> (Int, Int)-tokenLineCol = posLineCol . tokenPosn---- | Get line and column of a position.-posLineCol :: Posn -> (Int, Int)-posLineCol (Pn _ l c) = (l,c)---- | Convert a token into "position token" form.-mkPosToken :: Token -> ((Int, Int), Data.Text.Text)-mkPosToken t = (tokenLineCol t, tokenText t)---- | Convert a token to its text.-tokenText :: Token -> Data.Text.Text-tokenText t = case t of-  PT _ (TS s _) -> s-  PT _ (TL s)   -> Data.Text.pack (show s)-  PT _ (TI s)   -> s-  PT _ (TV s)   -> s-  PT _ (TD s)   -> s-  PT _ (TC s)   -> s-  Err _         -> Data.Text.pack "#error"-  PT _ (T_VarIdentToken s) -> s-  PT _ (T_HoleIdentToken s) -> s---- | Convert a token to a string.-prToken :: Token -> String-prToken t = Data.Text.unpack (tokenText t)---- | Finite map from text to token organized as binary search tree.-data BTree-  = N -- ^ Nil (leaf).-  | B Data.Text.Text Tok BTree BTree-      -- ^ Binary node.-  deriving (Show)---- | Convert potential keyword into token or use fallback conversion.-eitherResIdent :: (Data.Text.Text -> Tok) -> Data.Text.Text -> Tok-eitherResIdent tv s = treeFind resWords-  where-  treeFind N = tv s-  treeFind (B a t left right) =-    case compare s a of-      LT -> treeFind left-      GT -> treeFind right-      EQ -> t---- | The keywords and symbols of the language organized as binary search tree.-resWords :: BTree-resWords =-  b "\\" 50-    (b "/\\" 25-       (b "#unset-option" 13-          (b "#define" 7-             (b "#compute-nf" 4-                (b "#check" 2 (b "#assume" 1 N N) (b "#compute" 3 N N))-                (b "#def" 6 (b "#compute-whnf" 5 N N) N))-             (b "#postulate" 10-                (b "#lang" 9 (b "#end" 8 N N) N)-                (b "#set-option" 12 (b "#section" 11 N N) N)))-          (b "*" 19-             (b "$extract$" 16-                (b "#variables" 15 (b "#variable" 14 N N) N)-                (b ")" 18 (b "(" 17 N N) N))-             (b "," 22-                (b "*\8321" 21 (b "*_1" 20 N N) N) (b "/" 24 (b "->" 23 N N) N))))-       (b "=" 38-          (b ":" 32-             (b "1_2" 29-                (b "0\8322" 27 (b "0_2" 26 N N) (b "1" 28 N N))-                (b "2" 31 (b "1\8322" 30 N N) N))-             (b "<" 35-                (b ";" 34 (b ":=" 33 N N) N) (b "<|" 37 (b "<=" 36 N N) N)))-          (b "Sigma" 44-             (b ">" 41-                (b "=_{" 40 (b "===" 39 N N) N) (b "CUBE" 43 (b "BOT" 42 N N) N))-             (b "U" 47-                (b "TOPE" 46 (b "TOP" 45 N N) N) (b "[" 49 (b "Unit" 48 N N) N)))))-    (b "uninv_op" 75-       (b "inv_op" 63-          (b "as" 57-             (b "_b" 54-                (b "]" 52 (b "\\/" 51 N N) (b "_#" 53 N N))-                (b "_op" 56 (b "_id" 55 N N) N))-             (b "flip\7506\7510" 60-                (b "flip_op" 59 (b "first" 58 N N) N)-                (b "in" 62 (b "idJ" 61 N N) N)))-          (b "refl" 69-             (b "mod" 66-                (b "let" 65 (b "inv\7506\7510" 64 N N) N)-                (b "recOR" 68 (b "recBOT" 67 N N) N))-             (b "second" 72-                (b "rzk-1" 71 (b "refl_{" 70 N N) N)-                (b "unflip\7506\7510" 74 (b "unflip_op" 73 N N) N))))-       (b "\7506\7510" 88-          (b "|>" 82-             (b "{" 79-                (b "unit" 77 (b "uninv\7506\7510" 76 N N) (b "uses" 78 N N))-                (b "|->" 81 (b "|" 80 N N) N))-             (b "\931" 85-                (b "\215" 84 (b "}" 83 N N) N)-                (b "\960\8322" 87 (b "\960\8321" 86 N N) N)))-          (b "\8801" 94-             (b "\8721" 91-                (b "\8614" 90 (b "\8594" 89 N N) N)-                (b "\8744" 93 (b "\8743" 92 N N) N))-             (b "\8869" 97-                (b "\8868" 96 (b "\8804" 95 N N) N)-                (b "\9839" 99 (b "\9837" 98 N N) N)))))-  where-  b s n = B bs (TS bs n)-    where-    bs = Data.Text.pack s---- | Unquote string literal.-unescapeInitTail :: Data.Text.Text -> Data.Text.Text-unescapeInitTail = Data.Text.pack . unesc . tail . Data.Text.unpack-  where-  unesc s = case s of-    '\\':c:cs | elem c ['\"', '\\', '\''] -> c : unesc cs-    '\\':'n':cs  -> '\n' : unesc cs-    '\\':'t':cs  -> '\t' : unesc cs-    '\\':'r':cs  -> '\r' : unesc cs-    '\\':'f':cs  -> '\f' : unesc cs-    '"':[]       -> []-    c:cs         -> c : unesc cs-    _            -> []------------------------------------------------------------------------ Alex wrapper code.--- A modified "posn" wrapper.----------------------------------------------------------------------data Posn = Pn !Int !Int !Int-  deriving (Eq, Show, Ord)--alexStartPos :: Posn-alexStartPos = Pn 0 1 1--alexMove :: Posn -> Char -> Posn-alexMove (Pn a l c) '\t' = Pn (a+1)  l     (((c+7) `div` 8)*8+1)-alexMove (Pn a l c) '\n' = Pn (a+1) (l+1)   1-alexMove (Pn a l c) _    = Pn (a+1)  l     (c+1)--type Byte = Word8--type AlexInput = (Posn,     -- current position,-                  Char,     -- previous char-                  [Byte],   -- pending bytes on the current char-                  Data.Text.Text)   -- current input string--tokens :: Data.Text.Text -> [Token]-tokens str = go (alexStartPos, '\n', [], str)-    where-      go :: AlexInput -> [Token]-      go inp@(pos, _, _, str) =-               case alexScan inp 0 of-                AlexEOF                   -> []-                AlexError (pos, _, _, _)  -> [Err pos]-                AlexSkip  inp' len        -> go inp'-                AlexToken inp' len act    -> act pos (Data.Text.take len str) : (go inp')--alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)-alexGetByte (p, c, (b:bs), s) = Just (b, (p, c, bs, s))-alexGetByte (p, _, [], s) =-  case Data.Text.uncons s of-    Nothing  -> Nothing-    Just (c,s) ->-             let p'     = alexMove p c-                 (b:bs) = utf8Encode c-              in p' `seq` Just (b, (p', c, bs, s))--alexInputPrevChar :: AlexInput -> Char-alexInputPrevChar (p, c, bs, s) = c---- | Encode a Haskell String to a list of Word8 values, in UTF8 format.-utf8Encode :: Char -> [Word8]-utf8Encode = map fromIntegral . go . ord-  where-  go oc-   | oc <= 0x7f       = [oc]--   | oc <= 0x7ff      = [ 0xc0 + (oc `Data.Bits.shiftR` 6)-                        , 0x80 + oc Data.Bits..&. 0x3f-                        ]--   | oc <= 0xffff     = [ 0xe0 + (oc `Data.Bits.shiftR` 12)-                        , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)-                        , 0x80 + oc Data.Bits..&. 0x3f-                        ]-   | otherwise        = [ 0xf0 + (oc `Data.Bits.shiftR` 18)-                        , 0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f)-                        , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)-                        , 0x80 + oc Data.Bits..&. 0x3f-                        ]-}
src/Language/Rzk/Syntax/Par.hs view
@@ -38,2495 +38,2651 @@   , pListRestriction   , pModality   , pModComp-  , pTerm7-  , pTerm5-  , pTerm4-  , pTerm3-  , pTerm2-  , pTerm6-  , pTerm1-  , pTerm-  , pListTerm-  ) where--import Prelude--import qualified Language.Rzk.Syntax.Abs-import Language.Rzk.Syntax.Lex-import qualified Data.Text-import qualified Control.Monad as Happy_Prelude-import qualified Data.Bool as Happy_Prelude-import qualified Data.Function as Happy_Prelude-import qualified Data.Int as Happy_Prelude-import qualified Data.List as Happy_Prelude-import qualified Data.Maybe as Happy_Prelude-import qualified Data.String as Happy_Prelude-import qualified Data.Tuple as Happy_Prelude-import qualified GHC.Err as Happy_Prelude-import qualified GHC.Num as Happy_Prelude-import qualified Text.Show as Happy_Prelude-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 2.1.7--newtype HappyAbsSyn  = HappyAbsSyn HappyAny-#if __GLASGOW_HASKELL__ >= 607-type HappyAny = Happy_GHC_Exts.Any-#else-type HappyAny = forall a . a-#endif-newtype HappyWrap37 = HappyWrap37 ((Language.Rzk.Syntax.Abs.BNFC'Position, String))-happyIn37 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, String)) -> (HappyAbsSyn )-happyIn37 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap37 x)-{-# INLINE happyIn37 #-}-happyOut37 :: (HappyAbsSyn ) -> HappyWrap37-happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut37 #-}-newtype HappyWrap38 = HappyWrap38 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdentToken))-happyIn38 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdentToken)) -> (HappyAbsSyn )-happyIn38 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap38 x)-{-# INLINE happyIn38 #-}-happyOut38 :: (HappyAbsSyn ) -> HappyWrap38-happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut38 #-}-newtype HappyWrap39 = HappyWrap39 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdentToken))-happyIn39 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdentToken)) -> (HappyAbsSyn )-happyIn39 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap39 x)-{-# INLINE happyIn39 #-}-happyOut39 :: (HappyAbsSyn ) -> HappyWrap39-happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut39 #-}-newtype HappyWrap40 = HappyWrap40 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Module))-happyIn40 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Module)) -> (HappyAbsSyn )-happyIn40 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap40 x)-{-# INLINE happyIn40 #-}-happyOut40 :: (HappyAbsSyn ) -> HappyWrap40-happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut40 #-}-newtype HappyWrap41 = HappyWrap41 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdent))-happyIn41 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdent)) -> (HappyAbsSyn )-happyIn41 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap41 x)-{-# INLINE happyIn41 #-}-happyOut41 :: (HappyAbsSyn ) -> HappyWrap41-happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut41 #-}-newtype HappyWrap42 = HappyWrap42 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdent))-happyIn42 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdent)) -> (HappyAbsSyn )-happyIn42 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap42 x)-{-# INLINE happyIn42 #-}-happyOut42 :: (HappyAbsSyn ) -> HappyWrap42-happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut42 #-}-newtype HappyWrap43 = HappyWrap43 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.VarIdent]))-happyIn43 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.VarIdent])) -> (HappyAbsSyn )-happyIn43 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap43 x)-{-# INLINE happyIn43 #-}-happyOut43 :: (HappyAbsSyn ) -> HappyWrap43-happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut43 #-}-newtype HappyWrap44 = HappyWrap44 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.LanguageDecl))-happyIn44 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.LanguageDecl)) -> (HappyAbsSyn )-happyIn44 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap44 x)-{-# INLINE happyIn44 #-}-happyOut44 :: (HappyAbsSyn ) -> HappyWrap44-happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut44 #-}-newtype HappyWrap45 = HappyWrap45 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Language))-happyIn45 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Language)) -> (HappyAbsSyn )-happyIn45 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap45 x)-{-# INLINE happyIn45 #-}-happyOut45 :: (HappyAbsSyn ) -> HappyWrap45-happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut45 #-}-newtype HappyWrap46 = HappyWrap46 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Command))-happyIn46 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Command)) -> (HappyAbsSyn )-happyIn46 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap46 x)-{-# INLINE happyIn46 #-}-happyOut46 :: (HappyAbsSyn ) -> HappyWrap46-happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut46 #-}-newtype HappyWrap47 = HappyWrap47 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Command]))-happyIn47 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Command])) -> (HappyAbsSyn )-happyIn47 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap47 x)-{-# INLINE happyIn47 #-}-happyOut47 :: (HappyAbsSyn ) -> HappyWrap47-happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut47 #-}-newtype HappyWrap48 = HappyWrap48 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.DeclUsedVars))-happyIn48 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.DeclUsedVars)) -> (HappyAbsSyn )-happyIn48 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap48 x)-{-# INLINE happyIn48 #-}-happyOut48 :: (HappyAbsSyn ) -> HappyWrap48-happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut48 #-}-newtype HappyWrap49 = HappyWrap49 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SectionName))-happyIn49 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SectionName)) -> (HappyAbsSyn )-happyIn49 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap49 x)-{-# INLINE happyIn49 #-}-happyOut49 :: (HappyAbsSyn ) -> HappyWrap49-happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut49 #-}-newtype HappyWrap50 = HappyWrap50 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern))-happyIn50 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern)) -> (HappyAbsSyn )-happyIn50 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap50 x)-{-# INLINE happyIn50 #-}-happyOut50 :: (HappyAbsSyn ) -> HappyWrap50-happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut50 #-}-newtype HappyWrap51 = HappyWrap51 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern]))-happyIn51 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern])) -> (HappyAbsSyn )-happyIn51 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap51 x)-{-# INLINE happyIn51 #-}-happyOut51 :: (HappyAbsSyn ) -> HappyWrap51-happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut51 #-}-newtype HappyWrap52 = HappyWrap52 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern))-happyIn52 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern)) -> (HappyAbsSyn )-happyIn52 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap52 x)-{-# INLINE happyIn52 #-}-happyOut52 :: (HappyAbsSyn ) -> HappyWrap52-happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut52 #-}-newtype HappyWrap53 = HappyWrap53 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern]))-happyIn53 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern])) -> (HappyAbsSyn )-happyIn53 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap53 x)-{-# INLINE happyIn53 #-}-happyOut53 :: (HappyAbsSyn ) -> HappyWrap53-happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut53 #-}-newtype HappyWrap54 = HappyWrap54 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Param))-happyIn54 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Param)) -> (HappyAbsSyn )-happyIn54 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap54 x)-{-# INLINE happyIn54 #-}-happyOut54 :: (HappyAbsSyn ) -> HappyWrap54-happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut54 #-}-newtype HappyWrap55 = HappyWrap55 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Param]))-happyIn55 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Param])) -> (HappyAbsSyn )-happyIn55 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap55 x)-{-# INLINE happyIn55 #-}-happyOut55 :: (HappyAbsSyn ) -> HappyWrap55-happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut55 #-}-newtype HappyWrap56 = HappyWrap56 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Bind))-happyIn56 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Bind)) -> (HappyAbsSyn )-happyIn56 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap56 x)-{-# INLINE happyIn56 #-}-happyOut56 :: (HappyAbsSyn ) -> HappyWrap56-happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut56 #-}-newtype HappyWrap57 = HappyWrap57 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ParamDecl))-happyIn57 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ParamDecl)) -> (HappyAbsSyn )-happyIn57 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap57 x)-{-# INLINE happyIn57 #-}-happyOut57 :: (HappyAbsSyn ) -> HappyWrap57-happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut57 #-}-newtype HappyWrap58 = HappyWrap58 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SigmaParam))-happyIn58 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SigmaParam)) -> (HappyAbsSyn )-happyIn58 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap58 x)-{-# INLINE happyIn58 #-}-happyOut58 :: (HappyAbsSyn ) -> HappyWrap58-happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut58 #-}-newtype HappyWrap59 = HappyWrap59 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.SigmaParam]))-happyIn59 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.SigmaParam])) -> (HappyAbsSyn )-happyIn59 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap59 x)-{-# INLINE happyIn59 #-}-happyOut59 :: (HappyAbsSyn ) -> HappyWrap59-happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut59 #-}-newtype HappyWrap60 = HappyWrap60 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Restriction))-happyIn60 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Restriction)) -> (HappyAbsSyn )-happyIn60 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap60 x)-{-# INLINE happyIn60 #-}-happyOut60 :: (HappyAbsSyn ) -> HappyWrap60-happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut60 #-}-newtype HappyWrap61 = HappyWrap61 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Restriction]))-happyIn61 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Restriction])) -> (HappyAbsSyn )-happyIn61 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap61 x)-{-# INLINE happyIn61 #-}-happyOut61 :: (HappyAbsSyn ) -> HappyWrap61-happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut61 #-}-newtype HappyWrap62 = HappyWrap62 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Modality))-happyIn62 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Modality)) -> (HappyAbsSyn )-happyIn62 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap62 x)-{-# INLINE happyIn62 #-}-happyOut62 :: (HappyAbsSyn ) -> HappyWrap62-happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut62 #-}-newtype HappyWrap63 = HappyWrap63 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ModComp))-happyIn63 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ModComp)) -> (HappyAbsSyn )-happyIn63 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap63 x)-{-# INLINE happyIn63 #-}-happyOut63 :: (HappyAbsSyn ) -> HappyWrap63-happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut63 #-}-newtype HappyWrap64 = HappyWrap64 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))-happyIn64 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )-happyIn64 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap64 x)-{-# INLINE happyIn64 #-}-happyOut64 :: (HappyAbsSyn ) -> HappyWrap64-happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut64 #-}-newtype HappyWrap65 = HappyWrap65 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))-happyIn65 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )-happyIn65 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap65 x)-{-# INLINE happyIn65 #-}-happyOut65 :: (HappyAbsSyn ) -> HappyWrap65-happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut65 #-}-newtype HappyWrap66 = HappyWrap66 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))-happyIn66 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )-happyIn66 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap66 x)-{-# INLINE happyIn66 #-}-happyOut66 :: (HappyAbsSyn ) -> HappyWrap66-happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut66 #-}-newtype HappyWrap67 = HappyWrap67 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))-happyIn67 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )-happyIn67 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap67 x)-{-# INLINE happyIn67 #-}-happyOut67 :: (HappyAbsSyn ) -> HappyWrap67-happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut67 #-}-newtype HappyWrap68 = HappyWrap68 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))-happyIn68 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )-happyIn68 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap68 x)-{-# INLINE happyIn68 #-}-happyOut68 :: (HappyAbsSyn ) -> HappyWrap68-happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut68 #-}-newtype HappyWrap69 = HappyWrap69 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))-happyIn69 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )-happyIn69 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap69 x)-{-# INLINE happyIn69 #-}-happyOut69 :: (HappyAbsSyn ) -> HappyWrap69-happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut69 #-}-newtype HappyWrap70 = HappyWrap70 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))-happyIn70 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )-happyIn70 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap70 x)-{-# INLINE happyIn70 #-}-happyOut70 :: (HappyAbsSyn ) -> HappyWrap70-happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut70 #-}-newtype HappyWrap71 = HappyWrap71 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))-happyIn71 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )-happyIn71 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap71 x)-{-# INLINE happyIn71 #-}-happyOut71 :: (HappyAbsSyn ) -> HappyWrap71-happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut71 #-}-newtype HappyWrap72 = HappyWrap72 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Term]))-happyIn72 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Term])) -> (HappyAbsSyn )-happyIn72 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap72 x)-{-# INLINE happyIn72 #-}-happyOut72 :: (HappyAbsSyn ) -> HappyWrap72-happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut72 #-}-happyInTok :: (Token) -> (HappyAbsSyn )-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyInTok #-}-happyOutTok :: (HappyAbsSyn ) -> (Token)-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOutTok #-}---{-# NOINLINE happyTokenStrings #-}-happyTokenStrings = ["'#assume'","'#check'","'#compute'","'#compute-nf'","'#compute-whnf'","'#def'","'#define'","'#end'","'#lang'","'#postulate'","'#section'","'#set-option'","'#unset-option'","'#variable'","'#variables'","'$extract$'","'('","')'","'*'","'*_1'","'*\8321'","','","'->'","'/'","'/\\\\'","'0_2'","'0\8322'","'1'","'1_2'","'1\8322'","'2'","':'","':='","';'","'<'","'<='","'<|'","'='","'==='","'=_{'","'>'","'BOT'","'CUBE'","'Sigma'","'TOP'","'TOPE'","'U'","'Unit'","'['","'\\\\'","'\\\\/'","']'","'_#'","'_b'","'_id'","'_op'","'as'","'first'","'flip_op'","'flip\7506\7510'","'idJ'","'in'","'inv_op'","'inv\7506\7510'","'let'","'mod'","'recBOT'","'recOR'","'refl'","'refl_{'","'rzk-1'","'second'","'unflip_op'","'unflip\7506\7510'","'uninv_op'","'uninv\7506\7510'","'unit'","'uses'","'{'","'|'","'|->'","'|>'","'}'","'\215'","'\931'","'\960\8321'","'\960\8322'","'\7506\7510'","'\8594'","'\8614'","'\8721'","'\8743'","'\8744'","'\8801'","'\8804'","'\8868'","'\8869'","'\9837'","'\9839'","L_quoted","L_VarIdentToken","L_HoleIdentToken","%eof"]--happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\xf9\xff\xff\xff\xac\xff\xff\xff\xb2\xff\xff\xff\xb2\xff\xff\xff\x2e\x00\x00\x00\x34\x00\x00\x00\x65\x09\x00\x00\x65\x09\x00\x00\x37\x00\x00\x00\x33\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\xf5\xff\xff\xff\xf5\xff\xff\xff\x30\x00\x00\x00\x95\x00\x00\x00\x30\x00\x00\x00\x30\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\xb2\x00\x00\x00\xb2\x00\x00\x00\xee\x01\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x36\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x4d\x01\x00\x00\xf8\xff\xff\xff\xe3\xff\xff\xff\x45\x00\x00\x00\x61\x01\x00\x00\x00\x00\x00\x00\x8b\x00\x00\x00\x3c\x00\x00\x00\xb2\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\x95\x00\x00\x00\xb2\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\xf5\xff\xff\xff\xee\x01\x00\x00\xee\x01\x00\x00\xee\x01\x00\x00\xad\x00\x00\x00\xee\x01\x00\x00\xee\x01\x00\x00\x57\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x00\x00\xd2\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\xee\x01\x00\x00\xee\x01\x00\x00\xee\x01\x00\x00\xee\x01\x00\x00\xee\x01\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\xde\x00\x00\x00\xee\x01\x00\x00\xee\x01\x00\x00\xe1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x41\x00\x00\x00\x5f\x00\x00\x00\x22\x01\x00\x00\x47\x00\x00\x00\x5f\x00\x00\x00\xaf\x01\x00\x00\x5f\x00\x00\x00\x5f\x00\x00\x00\xf6\xff\xff\xff\x5f\x00\x00\x00\xe4\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\x92\x00\x00\x00\xf9\x00\x00\x00\xb0\x00\x00\x00\x46\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x00\x0a\x01\x00\x00\x03\x01\x00\x00\xd1\x00\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\xd1\x00\x00\x00\xd1\x00\x00\x00\xaf\x01\x00\x00\x1b\x01\x00\x00\xee\x00\x00\x00\x00\x00\x00\x00\x07\x01\x00\x00\xee\x00\x00\x00\xb7\x00\x00\x00\xb7\x00\x00\x00\xee\x00\x00\x00\x00\x00\x00\x00\x34\x01\x00\x00\xf1\x00\x00\x00\xf1\x00\x00\x00\xb7\x00\x00\x00\xf1\x00\x00\x00\xf1\x00\x00\x00\x00\x00\x00\x00\xf1\x00\x00\x00\xf1\x00\x00\x00\x50\x01\x00\x00\x55\x01\x00\x00\x23\x01\x00\x00\x2f\x01\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x2f\x01\x00\x00\x2f\x01\x00\x00\x2f\x01\x00\x00\x2f\x01\x00\x00\x2f\x01\x00\x00\x36\x01\x00\x00\x36\x01\x00\x00\x38\x01\x00\x00\x38\x01\x00\x00\x43\x01\x00\x00\x43\x01\x00\x00\x00\x00\x00\x00\x43\x01\x00\x00\x58\x01\x00\x00\x53\x01\x00\x00\x86\x01\x00\x00\x86\x01\x00\x00\x86\x01\x00\x00\x86\x01\x00\x00\x65\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x01\x00\x00\xb8\x01\x00\x00\xce\x01\x00\x00\x00\x00\x00\x00\xc2\x01\x00\x00\x00\x00\x00\x00\xa2\x01\x00\x00\x00\x00\x00\x00\xa2\x01\x00\x00\xa2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd6\x01\x00\x00\xd8\x01\x00\x00\x65\x09\x00\x00\x9c\x01\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\xe4\x01\x00\x00\x13\x00\x00\x00\xe7\x01\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\xfc\x01\x00\x00\xb7\x00\x00\x00\xf0\xff\xff\xff\x47\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\xb2\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xf1\xff\xff\xff\xe3\x00\x00\x00\x47\x00\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\xf7\x01\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x47\x00\x00\x00\xee\x01\x00\x00\xfe\x01\x00\x00\xb2\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\x27\x00\x00\x00\xb7\x00\x00\x00\xd7\x01\x00\x00\x42\x00\x00\x00\x04\x01\x00\x00\xee\x01\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\xe3\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x4b\x00\x00\x00\x4b\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\x47\x00\x00\x00\xf0\xff\xff\xff\x47\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x08\x02\x00\x00\x14\x02\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x34\x02\x00\x00\xb7\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x26\x02\x00\x00\xf2\xff\xff\xff\x47\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x47\x00\x00\x00\x2d\x02\x00\x00\x46\x02\x00\x00\x3b\x02\x00\x00\x48\x02\x00\x00\x0a\x02\x00\x00\x00\x00\x00\x00\xaf\x01\x00\x00\xaf\x01\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\xb7\x00\x00\x00\x37\x02\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x47\x00\x00\x00\x00\x00\x00\x00\x6e\x02\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x6e\x00\x00\x00\xb6\x00\x00\x00\xbc\x00\x00\x00\x04\x02\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\x02\x00\x00\x47\x00\x00\x00\x67\x02\x00\x00\x47\x00\x00\x00\x70\x02\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x02\x00\x00\x47\x00\x00\x00\xfe\xff\xff\xff\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xe3\x00\x00\x00\xb7\x00\x00\x00\xf0\xff\xff\xff\xb7\x00\x00\x00\xf0\xff\xff\xff\x5b\x00\x00\x00\x47\x00\x00\x00\x4e\x02\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x64\x02\x00\x00\x91\x02\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\xf0\xff\xff\xff\x61\x02\x00\x00\x99\x02\x00\x00\x9b\x02\x00\x00\x47\x00\x00\x00\x0f\x00\x00\x00\x8a\x01\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\xb1\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\xc0\x02\x00\x00\xc1\x02\x00\x00\xbf\x02\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\xce\x02\x00\x00\x00\x00\x00\x00\xd1\x02\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\xd4\x02\x00\x00\xe2\x02\x00\x00\xe3\x02\x00\x00\xe5\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\xf3\x02\x00\x00\x47\x00\x00\x00\xe7\x02\x00\x00\x47\x00\x00\x00\xf5\x02\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\xf6\x02\x00\x00\x47\x00\x00\x00\xf8\x02\x00\x00\x47\x00\x00\x00\xb3\x02\x00\x00\x00\x00\x00\x00\x15\x03\x00\x00\x16\x03\x00\x00\x14\x03\x00\x00\x23\x03\x00\x00\x24\x03\x00\x00\x25\x03\x00\x00\x26\x03\x00\x00\xf7\x02\x00\x00\xf9\x02\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x0d\x03\x00\x00\x47\x00\x00\x00\x36\x03\x00\x00\x45\x03\x00\x00\x48\x03\x00\x00\x00\x00\x00\x00\x4a\x03\x00\x00\x4b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x03\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x57\x03\x00\x00\x47\x00\x00\x00\x58\x03\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x67\x03\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x47\x00\x00\x00\x47\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\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\x47\x00\x00\x00\x18\x03\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x68\x03\x00\x00\x6a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x69\x03\x00\x00\x47\x00\x00\x00\x7b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\xa7\x01\x00\x00\x4c\x00\x00\x00\x29\x02\x00\x00\x69\x01\x00\x00\x89\x03\x00\x00\x87\x03\x00\x00\x96\x03\x00\x00\x66\x00\x00\x00\x86\x03\x00\x00\x97\x01\x00\x00\x42\x01\x00\x00\x75\x09\x00\x00\x7a\x02\x00\x00\x20\x02\x00\x00\x4c\x09\x00\x00\x1d\x09\x00\x00\x5e\x01\x00\x00\xe6\x01\x00\x00\x57\x01\x00\x00\xb5\x00\x00\x00\xab\x02\x00\x00\x56\x02\x00\x00\x97\x03\x00\x00\xb3\x00\x00\x00\x31\x01\x00\x00\x59\x08\x00\x00\x36\x02\x00\x00\x29\x08\x00\x00\xd9\x07\x00\x00\xed\x00\x00\x00\xeb\x06\x00\x00\x22\x03\x00\x00\x95\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\x59\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x00\x00\x00\x33\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x08\x00\x00\x98\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x09\x00\x00\xbb\x01\x00\x00\xe1\x01\x00\x00\xaf\x08\x00\x00\x00\x00\x00\x00\xb7\x08\x00\x00\xca\x08\x00\x00\x81\x01\x00\x00\x9a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x03\x00\x00\xcf\x08\x00\x00\xd4\x08\x00\x00\xd9\x08\x00\x00\xde\x08\x00\x00\xe7\x08\x00\x00\x00\x00\x00\x00\xb9\x01\x00\x00\x00\x00\x00\x00\xec\x08\x00\x00\xf1\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\xf6\x08\x00\x00\x55\x03\x00\x00\x00\x00\x00\x00\xf6\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\xc0\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x09\x00\x00\x00\x00\x00\x00\x77\x09\x00\x00\x57\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x02\x00\x00\x66\x03\x00\x00\x77\x03\x00\x00\x88\x03\x00\x00\x99\x03\x00\x00\xeb\x07\x00\x00\xee\x07\x00\x00\x16\x02\x00\x00\xfb\x07\x00\x00\x8b\x08\x00\x00\xa0\x03\x00\x00\xa1\x03\x00\x00\xfe\x07\x00\x00\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x03\x00\x00\x7d\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\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\xa7\x03\x00\x00\x00\x00\x00\x00\xb7\x03\x00\x00\xb8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x01\x00\x00\x7f\x02\x00\x00\x00\x00\x00\x00\x51\x09\x00\x00\x00\x00\x00\x00\x7a\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x03\x00\x00\x00\x00\x00\x00\x78\x02\x00\x00\x00\x00\x00\x00\x3b\x08\x00\x00\xbc\x02\x00\x00\xbb\x03\x00\x00\xcc\x03\x00\x00\x89\x02\x00\x00\xab\x03\x00\x00\xa3\x08\x00\x00\xa9\x08\x00\x00\x00\x00\x00\x00\xe9\x07\x00\x00\xdd\x03\x00\x00\xcf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x01\x00\x00\x00\x00\x00\x00\x7c\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x02\x00\x00\xfb\x08\x00\x00\x00\x00\x00\x00\xbe\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x09\x00\x00\x22\x02\x00\x00\xfc\x06\x00\x00\xf9\x07\x00\x00\x09\x08\x00\x00\x39\x08\x00\x00\x49\x08\x00\x00\x76\x08\x00\x00\x7d\x08\x00\x00\x86\x08\x00\x00\x9a\x08\x00\x00\x0d\x07\x00\x00\x1e\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\xff\x03\x00\x00\xcd\x02\x00\x00\x10\x04\x00\x00\x21\x04\x00\x00\x32\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x07\x00\x00\x40\x07\x00\x00\x00\x00\x00\x00\xeb\x01\x00\x00\x43\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\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\x09\x09\x00\x00\x09\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x02\x00\x00\x87\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x04\x00\x00\xa9\x04\x00\x00\x38\x09\x00\x00\x3a\x09\x00\x00\x43\x09\x00\x00\xa2\x03\x00\x00\xba\x04\x00\x00\xcb\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x04\x00\x00\x00\x00\x00\x00\xed\x04\x00\x00\x00\x00\x00\x00\xfe\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x08\x00\x00\x5b\x08\x00\x00\xef\x02\x00\x00\x13\x09\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x20\x05\x00\x00\x00\x00\x00\x00\x31\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x09\x00\x00\x11\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x02\x00\x00\x00\x00\x00\x00\x64\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x05\x00\x00\x97\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x05\x00\x00\x00\x00\x00\x00\xb9\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\x56\x09\x00\x00\x00\x00\x00\x00\xca\x05\x00\x00\x00\x00\x00\x00\xdb\x05\x00\x00\x00\x00\x00\x00\xec\x05\x00\x00\x00\x00\x00\x00\xfd\x05\x00\x00\x00\x00\x00\x00\x0e\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x06\x00\x00\x00\x00\x00\x00\x30\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x07\x00\x00\x62\x07\x00\x00\x00\x00\x00\x00\x63\x06\x00\x00\x00\x00\x00\x00\x74\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x07\x00\x00\x84\x07\x00\x00\x95\x07\x00\x00\xa6\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x06\x00\x00\x00\x00\x00\x00\x96\x06\x00\x00\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\x07\x00\x00\x00\x00\x00\x00\xa7\x06\x00\x00\x00\x00\x00\x00\xb8\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\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\xc9\x06\x00\x00\x00\x00\x00\x00\xda\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyDefActions :: HappyAddr-happyDefActions = 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\xc3\xff\xff\xff\xc0\xff\xff\xff\xbf\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xd9\xff\xff\xff\xda\xff\xff\xff\x7b\xff\xff\xff\x7a\xff\xff\xff\x00\x00\x00\x00\x57\xff\xff\xff\x6d\xff\xff\xff\x69\xff\xff\xff\x66\xff\xff\xff\x4b\xff\xff\xff\x71\xff\xff\xff\x42\xff\xff\xff\x41\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\xff\xff\xff\x8f\xff\xff\xff\x77\xff\xff\xff\x8d\xff\xff\xff\x90\xff\xff\xff\x76\xff\xff\xff\x8c\xff\xff\xff\x8e\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x74\xff\xff\xff\x92\xff\xff\xff\x00\x00\x00\x00\x75\xff\xff\xff\x91\xff\xff\xff\x93\xff\xff\xff\x86\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\x00\x00\x00\x00\x7f\xff\xff\xff\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\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\xff\xff\xff\x8a\xff\xff\xff\xdd\xff\xff\xff\xdc\xff\xff\xff\x00\x00\x00\x00\x4b\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\xff\xff\xff\x00\x00\x00\x00\x99\xff\xff\xff\x9b\xff\xff\xff\x96\xff\xff\xff\x97\xff\xff\xff\x98\xff\xff\xff\x9c\xff\xff\xff\x9a\xff\xff\xff\x00\x00\x00\x00\x9e\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\xff\xff\xff\x00\x00\x00\x00\xa2\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xab\xff\xff\xff\xad\xff\xff\xff\x00\x00\x00\x00\xb4\xff\xff\xff\xaf\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\xff\xff\xff\xb6\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb9\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbe\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\x00\x00\x00\x00\xbf\xff\xff\xff\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\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xff\xff\xff\xdb\xff\xff\xff\xd7\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd3\xff\xff\xff\x00\x00\x00\x00\xc9\xff\xff\xff\xc0\xff\xff\xff\xc8\xff\xff\xff\xc0\xff\xff\xff\xc0\xff\xff\xff\xd0\xff\xff\xff\xcf\xff\xff\xff\xd1\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xff\xff\xff\x00\x00\x00\x00\xb8\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb9\xff\xff\xff\x00\x00\x00\x00\xae\xff\xff\xff\x00\x00\x00\x00\x5b\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\x59\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\xff\xff\xff\x61\xff\xff\xff\x5e\xff\xff\xff\x5d\xff\xff\xff\x55\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xff\xff\xff\x63\xff\xff\xff\x00\x00\x00\x00\x60\xff\xff\xff\x5f\xff\xff\xff\x56\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\x4a\xff\xff\xff\x6e\xff\xff\xff\x6f\xff\xff\xff\x6c\xff\xff\xff\x6b\xff\xff\xff\x6a\xff\xff\xff\x68\xff\xff\xff\x67\xff\xff\xff\x65\xff\xff\xff\x43\xff\xff\xff\x40\xff\xff\xff\x5a\xff\xff\xff\x79\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\xff\xff\xff\x00\x00\x00\x00\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\xff\xff\xff\x72\xff\xff\xff\x70\xff\xff\xff\x94\xff\xff\xff\x9d\xff\xff\xff\xa0\xff\xff\xff\x9f\xff\xff\xff\x00\x00\x00\x00\xa4\xff\xff\xff\xa1\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xac\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb5\xff\xff\xff\x00\x00\x00\x00\xc2\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd6\xff\xff\xff\xca\xff\xff\xff\xcb\xff\xff\xff\xd4\xff\xff\xff\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\xff\xff\xff\xcc\xff\xff\xff\xc1\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\xff\xff\xff\x00\x00\x00\x00\xa3\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\xff\xff\xff\x46\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\x00\x00\x00\x00\xaa\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x73\xff\xff\xff\x85\xff\xff\xff\x81\xff\xff\xff\x00\x00\x00\x00\xa4\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa8\xff\xff\xff\x00\x00\x00\x00\xa4\xff\xff\xff\x00\x00\x00\x00\xa4\xff\xff\xff\x00\x00\x00\x00\x50\xff\xff\xff\xbb\xff\xff\xff\x00\x00\x00\x00\xb3\xff\xff\xff\x00\x00\x00\x00\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\xff\xff\xff\x00\x00\x00\x00\xce\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xff\xff\xff\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\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\xff\xff\xff\xa5\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x83\xff\xff\xff\xa9\xff\xff\xff\x00\x00\x00\x00\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\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\xff\xff\xff\xb2\xff\xff\xff\xb1\xff\xff\xff\xc4\xff\xff\xff\x00\x00\x00\x00\xc6\xff\xff\xff\x00\x00\x00\x00\xc7\xff\xff\xff\xc5\xff\xff\xff\x44\xff\xff\xff\x45\xff\xff\xff\x51\xff\xff\xff\x53\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\xff\xff\xff\x00\x00\x00\x00\x47\xff\xff\xff\x49\xff\xff\xff\x00\x00\x00\x00\x48\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa7\xff\xff\xff\x52\xff\xff\xff\x87\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\xff\xff\xff"#--happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\xff\xff\x11\x00\x00\x00\x12\x00\x00\x00\x0a\x00\x00\x00\x13\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x12\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x14\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x13\x00\x00\x00\x1a\x00\x00\x00\x67\x00\x00\x00\x24\x00\x00\x00\x13\x00\x00\x00\x26\x00\x00\x00\x34\x00\x00\x00\x66\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x13\x00\x00\x00\x33\x00\x00\x00\x21\x00\x00\x00\x12\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x17\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x18\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x0a\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x18\x00\x00\x00\x50\x00\x00\x00\x5e\x00\x00\x00\x12\x00\x00\x00\x4e\x00\x00\x00\x52\x00\x00\x00\x50\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x21\x00\x00\x00\x55\x00\x00\x00\x5c\x00\x00\x00\x5b\x00\x00\x00\x02\x00\x00\x00\x51\x00\x00\x00\x04\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x00\x00\x64\x00\x00\x00\x5d\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x18\x00\x00\x00\x66\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x68\x00\x00\x00\x14\x00\x00\x00\x51\x00\x00\x00\x4e\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x27\x00\x00\x00\x12\x00\x00\x00\x29\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x26\x00\x00\x00\x29\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x5a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x66\x00\x00\x00\x33\x00\x00\x00\x12\x00\x00\x00\x48\x00\x00\x00\x54\x00\x00\x00\x4e\x00\x00\x00\x3a\x00\x00\x00\x12\x00\x00\x00\x5a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x4f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x21\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x66\x00\x00\x00\x50\x00\x00\x00\x52\x00\x00\x00\x66\x00\x00\x00\x43\x00\x00\x00\x65\x00\x00\x00\x5a\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x55\x00\x00\x00\x5b\x00\x00\x00\x17\x00\x00\x00\x5c\x00\x00\x00\x68\x00\x00\x00\x4e\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x51\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x54\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x4e\x00\x00\x00\x12\x00\x00\x00\x24\x00\x00\x00\x05\x00\x00\x00\x26\x00\x00\x00\x4e\x00\x00\x00\x66\x00\x00\x00\x50\x00\x00\x00\x12\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x0d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x68\x00\x00\x00\x12\x00\x00\x00\x12\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x12\x00\x00\x00\x66\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x66\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x21\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x21\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x12\x00\x00\x00\x50\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x12\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x12\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x68\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x19\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x4e\x00\x00\x00\x4e\x00\x00\x00\x50\x00\x00\x00\x24\x00\x00\x00\x1b\x00\x00\x00\x26\x00\x00\x00\x4e\x00\x00\x00\x59\x00\x00\x00\x50\x00\x00\x00\x20\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x17\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x63\x00\x00\x00\x64\x00\x00\x00\x13\x00\x00\x00\x68\x00\x00\x00\x12\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x66\x00\x00\x00\x66\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x66\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x21\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x21\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x12\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x68\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x21\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x24\x00\x00\x00\x05\x00\x00\x00\x26\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x17\x00\x00\x00\x1b\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x0d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x4e\x00\x00\x00\x68\x00\x00\x00\x50\x00\x00\x00\x01\x00\x00\x00\x68\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x3e\x00\x00\x00\x14\x00\x00\x00\x12\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\x15\x00\x00\x00\x66\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x4e\x00\x00\x00\x13\x00\x00\x00\x25\x00\x00\x00\x12\x00\x00\x00\x1b\x00\x00\x00\x28\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x23\x00\x00\x00\x18\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x24\x00\x00\x00\x05\x00\x00\x00\x26\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x68\x00\x00\x00\x68\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x0d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x13\x00\x00\x00\x66\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x65\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x66\x00\x00\x00\x3e\x00\x00\x00\x48\x00\x00\x00\x17\x00\x00\x00\x55\x00\x00\x00\x0c\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x14\x00\x00\x00\x03\x00\x00\x00\x68\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x07\x00\x00\x00\x4e\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x66\x00\x00\x00\x01\x00\x00\x00\x5a\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x12\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x0d\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x23\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x24\x00\x00\x00\x05\x00\x00\x00\x26\x00\x00\x00\x1b\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x21\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x0d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x15\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x27\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x3e\x00\x00\x00\x68\x00\x00\x00\x21\x00\x00\x00\x05\x00\x00\x00\x4f\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x21\x00\x00\x00\x0d\x00\x00\x00\x21\x00\x00\x00\x14\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x4e\x00\x00\x00\x13\x00\x00\x00\x05\x00\x00\x00\x12\x00\x00\x00\x1b\x00\x00\x00\x66\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x21\x00\x00\x00\x20\x00\x00\x00\x0d\x00\x00\x00\x21\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x15\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x24\x00\x00\x00\x17\x00\x00\x00\x26\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x01\x00\x00\x00\x21\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x05\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x51\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x17\x00\x00\x00\x3e\x00\x00\x00\x0d\x00\x00\x00\x05\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x14\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x13\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x4e\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x21\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x21\x00\x00\x00\x17\x00\x00\x00\x54\x00\x00\x00\x17\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x65\x00\x00\x00\x14\x00\x00\x00\x01\x00\x00\x00\x35\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x13\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x21\x00\x00\x00\x0d\x00\x00\x00\x21\x00\x00\x00\x0f\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x21\x00\x00\x00\x51\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x54\x00\x00\x00\x3f\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x22\x00\x00\x00\x53\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x2a\x00\x00\x00\x13\x00\x00\x00\x2a\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x19\x00\x00\x00\x17\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x17\x00\x00\x00\x19\x00\x00\x00\x13\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x19\x00\x00\x00\x13\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x54\x00\x00\x00\x19\x00\x00\x00\x22\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x22\x00\x00\x00\x22\x00\x00\x00\x19\x00\x00\x00\x22\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x19\x00\x00\x00\x17\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x51\x00\x00\x00\x54\x00\x00\x00\x3f\x00\x00\x00\x17\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x17\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x54\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x08\x00\x00\x00\x07\x00\x00\x00\x0b\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x19\x00\x00\x00\x19\x00\x00\x00\x0b\x00\x00\x00\x19\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x08\x00\x00\x00\x0b\x00\x00\x00\x0b\x00\x00\x00\x19\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x0d\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x15\x00\x00\x00\x16\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\xff\xff\xff\xff\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x0d\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x15\x00\x00\x00\x16\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x1b\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x00\x00\x0c\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x1b\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x1b\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\xff\xff\xff\xff\x20\x00\x00\x00\x1b\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x0d\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x1b\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x1b\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\xff\xff\xff\xff\x1b\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x0d\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x0d\x00\x00\x00\x1b\x00\x00\x00\x0d\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x15\x00\x00\x00\x16\x00\x00\x00\x0d\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x15\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x0d\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x05\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\xff\xff\xff\xff\x0d\x00\x00\x00\x05\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\x11\x00\x00\x00\x12\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x05\x00\x00\x00\x11\x00\x00\x00\x0d\x00\x00\x00\xff\xff\xff\xff\x0f\x00\x00\x00\x10\x00\x00\x00\xff\xff\xff\xff\x0d\x00\x00\x00\x0d\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\xff\xff\xff\xff\x0b\x00\x00\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x0d\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x00\x00\x32\x00\x00\x00\x33\x00\x00\x00\xaa\x00\x00\x00\x0e\x01\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\x88\x00\x00\x00\x0f\x01\x00\x00\x5c\x01\x00\x00\xd4\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x86\x01\x00\x00\xf9\x00\x00\x00\x60\x00\x00\x00\x3c\x00\x00\x00\x84\x01\x00\x00\x3d\x00\x00\x00\xf7\x00\x00\x00\x5f\x00\x00\x00\x85\x01\x00\x00\x31\x01\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x6d\x01\x00\x00\x45\x00\x00\x00\x5a\x01\x00\x00\x7e\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x70\x00\x00\x00\x71\x00\x00\x00\x31\x01\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\xff\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\xaa\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x16\x01\x00\x00\x58\x00\x00\x00\xf8\x00\x00\x00\x7e\x00\x00\x00\x7f\x00\x00\x00\xd0\x00\x00\x00\x89\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\x72\x00\x00\x00\x1e\x01\x00\x00\xd5\x00\x00\x00\x5c\x00\x00\x00\xd1\x00\x00\x00\x24\x00\x00\x00\x87\x01\x00\x00\xad\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x73\x00\x00\x00\x74\x00\x00\x00\xfa\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x32\x00\x00\x00\x33\x00\x00\x00\x11\x01\x00\x00\x5f\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\xff\xff\xff\xff\xd4\x00\x00\x00\x6e\x01\x00\x00\x7f\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\xd7\x00\x00\x00\x7e\x00\x00\x00\xd8\x00\x00\x00\x3c\x00\x00\x00\xd7\x00\x00\x00\x3d\x00\x00\x00\xd8\x00\x00\x00\x95\x00\x00\x00\x96\x00\x00\x00\x00\x01\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x5f\x00\x00\x00\x45\x00\x00\x00\xde\x00\x00\x00\xa8\x00\x00\x00\x1f\x01\x00\x00\x7f\x00\x00\x00\xf6\x00\x00\x00\x88\x00\x00\x00\x17\x01\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x95\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x4a\x01\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x5f\x00\x00\x00\x58\x00\x00\x00\xd0\x00\x00\x00\x5f\x00\x00\x00\xe8\x00\x00\x00\x23\x00\x00\x00\x12\x01\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\xd5\x00\x00\x00\xd1\x00\x00\x00\xf5\x00\x00\x00\x5c\x00\x00\x00\xff\xff\xff\xff\x7f\x00\x00\x00\x32\x00\x00\x00\x33\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\x7c\x01\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x7d\x01\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x23\x00\x00\x00\x7f\x00\x00\x00\xf0\x00\x00\x00\x3c\x00\x00\x00\x79\x00\x00\x00\x3d\x00\x00\x00\x7f\x00\x00\x00\x5f\x00\x00\x00\x89\x00\x00\x00\xeb\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x7a\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\xff\xff\xff\xff\x88\x00\x00\x00\x7e\x00\x00\x00\x7b\x00\x00\x00\x7c\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x88\x00\x00\x00\x5f\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x5f\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x48\x01\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x46\x01\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\xe5\x00\x00\x00\x58\x00\x00\x00\x6b\x00\x00\x00\xf3\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x70\x00\x00\x00\x71\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xdc\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xd9\x00\x00\x00\x32\x00\x00\x00\x65\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\xff\xff\xff\xff\x5f\x00\x00\x00\x60\x00\x00\x00\xd3\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x7f\x00\x00\x00\x7f\x00\x00\x00\x89\x00\x00\x00\x3c\x00\x00\x00\x28\x00\x00\x00\x3d\x00\x00\x00\x7f\x00\x00\x00\x72\x00\x00\x00\x89\x00\x00\x00\x63\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\xd2\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x73\x00\x00\x00\x74\x00\x00\x00\x0e\x01\x00\x00\xff\xff\xff\xff\x88\x00\x00\x00\xce\x00\x00\x00\x0f\x01\x00\x00\x5f\x00\x00\x00\x5f\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x5f\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x10\x01\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\xcf\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x65\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\xff\xff\xff\xff\x5a\x00\x00\x00\x5b\x00\x00\x00\xca\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x23\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x3c\x00\x00\x00\x79\x00\x00\x00\x3d\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\xc5\x00\x00\x00\x6a\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x90\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\xcc\x00\x00\x00\x7f\x00\x00\x00\xff\xff\xff\xff\x89\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x23\x00\x00\x00\x24\x00\x00\x00\x79\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x49\x00\x00\x00\xd4\x00\x00\x00\xc3\x00\x00\x00\x79\x00\x00\x00\x7a\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x23\x00\x00\x00\x82\x00\x00\x00\x7f\x00\x00\x00\x5f\x00\x00\x00\xaa\x00\x00\x00\xab\x00\x00\x00\x57\x00\x00\x00\x83\x00\x00\x00\xfb\x00\x00\x00\x65\x00\x00\x00\xca\x00\x00\x00\xfc\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\xc2\x00\x00\x00\xab\xff\xff\xff\x95\x00\x00\x00\xb0\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x23\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x3c\x00\x00\x00\x79\x00\x00\x00\x3d\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\x00\x00\x3f\x00\x00\x00\x82\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\xcc\x00\x00\x00\xe6\x00\x00\x00\x5f\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x23\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x91\x00\x00\x00\x6b\x01\x00\x00\x5f\x00\x00\x00\x49\x00\x00\x00\xa8\x00\x00\x00\x6c\x01\x00\x00\xd5\x00\x00\x00\x92\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x27\x00\x00\x00\xae\x00\x00\x00\xff\xff\xff\xff\xfd\x00\x00\x00\xfe\x00\x00\x00\xaf\x00\x00\x00\x57\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x5f\x00\x00\x00\x23\x00\x00\x00\xab\xff\xff\xff\x23\x00\x00\x00\x24\x00\x00\x00\x79\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x65\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\xdc\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x41\x01\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x23\x00\x00\x00\x95\x00\x00\x00\x37\x01\x00\x00\x3c\x00\x00\x00\x79\x00\x00\x00\x3d\x00\x00\x00\xed\x00\x00\x00\x6b\x00\x00\x00\x18\x01\x00\x00\x40\x01\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x23\x01\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\xcc\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x24\x01\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x3e\x01\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x49\x00\x00\x00\xff\xff\xff\xff\x3f\x01\x00\x00\x79\x00\x00\x00\x95\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x3a\x01\x00\x00\x82\x00\x00\x00\x39\x01\x00\x00\x80\x00\x00\x00\x23\x00\x00\x00\xec\x00\x00\x00\x57\x00\x00\x00\x5e\x01\x00\x00\x79\x00\x00\x00\x65\x00\x00\x00\x28\x00\x00\x00\x5f\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\x35\x01\x00\x00\x81\x00\x00\x00\x21\x01\x00\x00\x34\x01\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x22\x01\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x3c\x00\x00\x00\x31\x01\x00\x00\x3d\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x23\x00\x00\x00\x21\x01\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x91\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x1a\x01\x00\x00\x23\x00\x00\x00\xb9\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x79\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x13\x01\x00\x00\x64\x01\x00\x00\x23\x00\x00\x00\x63\x01\x00\x00\x49\x00\x00\x00\x8a\x00\x00\x00\xac\x00\x00\x00\x8b\x00\x00\x00\x8c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x27\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x5d\x01\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x57\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x0b\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x23\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x60\x01\x00\x00\xaa\x00\x00\x00\xc0\x00\x00\x00\x58\x01\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x68\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x56\x01\x00\x00\x57\x01\x00\x00\x54\x01\x00\x00\x55\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\xa8\x01\x00\x00\x23\x00\x00\x00\x27\x00\x00\x00\x23\x00\x00\x00\x51\x01\x00\x00\x75\x00\x00\x00\x76\x00\x00\x00\xaa\x00\x00\x00\xb3\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x77\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x23\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x79\x00\x00\x00\x23\x00\x00\x00\x4d\x01\x00\x00\xaa\x00\x00\x00\xb1\x00\x00\x00\xaa\x00\x00\x00\x36\x01\x00\x00\x8f\x01\x00\x00\x8a\x00\x00\x00\x8d\x01\x00\x00\x8d\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x75\x00\x00\x00\x31\x01\x00\x00\x8b\x01\x00\x00\x89\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x77\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x75\x00\x00\x00\x2a\x01\x00\x00\x7a\x01\x00\x00\x78\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x77\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x75\x00\x00\x00\x1b\x01\x00\x00\x77\x01\x00\x00\x72\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x1c\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x78\x00\x00\x00\x71\x01\x00\x00\xa7\x01\x00\x00\x70\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x77\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xa5\x01\x00\x00\xa4\x01\x00\x00\x2d\x01\x00\x00\xa3\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2e\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x9f\x01\x00\x00\xa0\x01\x00\x00\x67\x01\x00\x00\x9c\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x68\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x9b\x01\x00\x00\x9a\x01\x00\x00\x4e\x01\x00\x00\x99\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x4f\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x96\x01\x00\x00\xbb\x01\x00\x00\x2d\x01\x00\x00\x94\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x80\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x92\x01\x00\x00\xbf\x01\x00\x00\x7d\x01\x00\x00\xbd\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x7e\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xba\x01\x00\x00\xb9\x01\x00\x00\x72\x01\x00\x00\xb8\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x73\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xb4\x01\x00\x00\xb7\x01\x00\x00\xb6\x01\x00\x00\xb5\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x60\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xb2\x01\x00\x00\xb3\x01\x00\x00\xb0\x01\x00\x00\xae\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xf2\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xac\x01\x00\x00\xad\x01\x00\x00\xab\x01\x00\x00\xaa\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xe3\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xd1\x01\x00\x00\xcd\x01\x00\x00\xca\x01\x00\x00\xc8\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xd5\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xd3\x01\x00\x00\xc6\x01\x00\x00\xd4\x01\x00\x00\xd6\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xbf\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xd8\x01\x00\x00\xa6\x00\x00\x00\xa8\x00\x00\x00\x93\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xbe\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xa5\x00\x00\x00\xb6\x00\x00\x00\xb5\x00\x00\x00\x43\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xbd\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x74\x00\x00\x00\xf0\x00\x00\x00\x3c\x01\x00\x00\xe5\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xbc\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\xb2\x00\x00\x00\x3b\x01\x00\x00\x3a\x01\x00\x00\x29\x01\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x32\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2c\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2b\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x25\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x17\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x69\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x66\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x65\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x64\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x5d\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x5a\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x58\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x52\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x4d\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x4b\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x4a\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x42\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x41\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x8d\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x8b\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x89\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x87\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x7a\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x78\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x75\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x6e\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xa7\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xa5\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xa1\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xa0\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x9d\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x9c\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x96\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x94\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x92\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x90\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x8f\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xbd\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xbb\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xb0\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xae\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xc8\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xc6\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xc0\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xbf\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xcf\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xce\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xd4\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\xd6\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\x0a\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\x61\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\x60\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\xcb\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\xca\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\xc4\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\xc3\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\xc2\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\xc1\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\xd1\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x27\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x61\x00\x00\x00\x2d\x00\x00\x00\xcd\x01\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x23\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x65\x00\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x23\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x26\x01\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\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\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x09\x01\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\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\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x08\x01\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\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\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x82\x01\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x23\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x67\x00\x00\x00\x7a\x00\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x2f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x07\x01\x00\x00\x00\x00\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x23\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x06\x01\x00\x00\x7a\x00\x00\x00\x66\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x81\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x66\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\xf1\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x81\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x28\x00\x00\x00\x05\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x00\x00\x00\xb7\x00\x00\x00\x28\x00\x00\x00\x04\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x66\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x03\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x66\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x28\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x66\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x28\x01\x00\x00\x28\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\xeb\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xcc\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xe9\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\xe8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xe2\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xe1\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xe0\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xdf\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\xde\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xda\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\xd9\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x1a\x01\x00\x00\x23\x00\x00\x00\x79\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x23\x00\x00\x00\x0c\x01\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x7a\x00\x00\x00\xca\x00\x00\x00\x13\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x7f\x01\x00\x00\x84\x00\x00\x00\x7b\x00\x00\x00\x74\x01\x00\x00\x14\x01\x00\x00\x85\x00\x00\x00\x86\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x84\x00\x00\x00\x79\x00\x00\x00\x84\x00\x00\x00\x79\x00\x00\x00\x85\x00\x00\x00\xee\x00\x00\x00\x85\x00\x00\x00\xc8\x00\x00\x00\x23\x00\x00\x00\x84\x00\x00\x00\x00\x00\x00\x00\x84\x00\x00\x00\x79\x00\x00\x00\x85\x00\x00\x00\x48\x01\x00\x00\x85\x00\x00\x00\x46\x01\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x00\x00\x00\x79\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x85\x00\x00\x00\x44\x01\x00\x00\x79\x00\x00\x00\x23\x00\x00\x00\x23\x00\x00\x00\x84\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x79\x00\x00\x00\x89\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x00\x00\x35\x01\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\xc5\x00\x00\x00\x8b\x00\x00\x00\x97\x01\x00\x00\x98\x00\x00\x00\x99\x00\x00\x00\x9a\x00\x00\x00\x9b\x00\x00\x00\x9c\x00\x00\x00\x9d\x00\x00\x00\x9e\x00\x00\x00\x9f\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x00\x00\xa1\x00\x00\x00\xa2\x00\x00\x00\xa3\x00\x00\x00\xa4\x00\x00\x00\xa5\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x23\x00\x00\x00\x79\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x8e\x00\x00\x00\x8f\x00\x00\x00\xc6\x00\x00\x00\xc7\x00\x00\x00\x23\x00\x00\x00\x8e\x00\x00\x00\xc3\x00\x00\x00\x1f\x01\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\x51\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyReduceArr = Happy_Data_Array.array (33, 191) [-        (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)-        ]--happyRuleArr :: HappyAddr-happyRuleArr = HappyA# "\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00\x08\x00\x00\x00\x01\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x06\x00\x00\x00\x09\x00\x00\x00\x05\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x07\x00\x00\x00\x09\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x07\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x03\x00\x00\x00\x0b\x00\x00\x00\x04\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x07\x00\x00\x00\x0e\x00\x00\x00\x01\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0f\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x03\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x11\x00\x00\x00\x05\x00\x00\x00\x11\x00\x00\x00\x07\x00\x00\x00\x11\x00\x00\x00\x07\x00\x00\x00\x11\x00\x00\x00\x06\x00\x00\x00\x12\x00\x00\x00\x01\x00\x00\x00\x12\x00\x00\x00\x02\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x14\x00\x00\x00\x01\x00\x00\x00\x14\x00\x00\x00\x05\x00\x00\x00\x14\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00\x05\x00\x00\x00\x14\x00\x00\x00\x09\x00\x00\x00\x14\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00\x06\x00\x00\x00\x15\x00\x00\x00\x03\x00\x00\x00\x15\x00\x00\x00\x04\x00\x00\x00\x16\x00\x00\x00\x01\x00\x00\x00\x16\x00\x00\x00\x03\x00\x00\x00\x17\x00\x00\x00\x03\x00\x00\x00\x17\x00\x00\x00\x03\x00\x00\x00\x18\x00\x00\x00\x01\x00\x00\x00\x18\x00\x00\x00\x03\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x1a\x00\x00\x00\x01\x00\x00\x00\x1a\x00\x00\x00\x03\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x1b\x00\x00\x00\x0a\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x05\x00\x00\x00\x1b\x00\x00\x00\x05\x00\x00\x00\x1b\x00\x00\x00\x07\x00\x00\x00\x1b\x00\x00\x00\x03\x00\x00\x00\x1b\x00\x00\x00\x05\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x03\x00\x00\x00\x1b\x00\x00\x00\x05\x00\x00\x00\x1b\x00\x00\x00\x0e\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x03\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x03\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x03\x00\x00\x00\x1d\x00\x00\x00\x03\x00\x00\x00\x1d\x00\x00\x00\x03\x00\x00\x00\x1d\x00\x00\x00\x01\x00\x00\x00\x1d\x00\x00\x00\x03\x00\x00\x00\x1d\x00\x00\x00\x03\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x1e\x00\x00\x00\x01\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x1f\x00\x00\x00\x03\x00\x00\x00\x1f\x00\x00\x00\x01\x00\x00\x00\x1f\x00\x00\x00\x03\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x04\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x03\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x03\x00\x00\x00\x21\x00\x00\x00\x08\x00\x00\x00\x21\x00\x00\x00\x09\x00\x00\x00\x21\x00\x00\x00\x08\x00\x00\x00\x21\x00\x00\x00\x05\x00\x00\x00\x21\x00\x00\x00\x03\x00\x00\x00\x21\x00\x00\x00\x06\x00\x00\x00\x21\x00\x00\x00\x04\x00\x00\x00\x21\x00\x00\x00\x08\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x21\x00\x00\x00\x03\x00\x00\x00\x21\x00\x00\x00\x08\x00\x00\x00\x21\x00\x00\x00\x09\x00\x00\x00\x21\x00\x00\x00\x08\x00\x00\x00\x21\x00\x00\x00\x04\x00\x00\x00\x21\x00\x00\x00\x08\x00\x00\x00\x21\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x03\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x23\x00\x00\x00\x01\x00\x00\x00\x23\x00\x00\x00\x03\x00\x00\x00"#--happyCatchStates :: [Happy_Prelude.Int]-happyCatchStates = []--happy_n_terms = 105 :: Happy_Prelude.Int-happy_n_nonterms = 36 :: Happy_Prelude.Int--happy_n_starts = 33 :: Happy_Prelude.Int--happyReduce_33 = happySpecReduce_1  0# happyReduction_33-happyReduction_33 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn37-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), (Data.Text.unpack ((\(PT _ (TL s)) -> s) happy_var_1)))-        )}--happyReduce_34 = happySpecReduce_1  1# happyReduction_34-happyReduction_34 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn38-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.VarIdentToken (tokenText happy_var_1))-        )}--happyReduce_35 = happySpecReduce_1  2# happyReduction_35-happyReduction_35 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn39-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.HoleIdentToken (tokenText happy_var_1))-        )}--happyReduce_36 = happySpecReduce_2  3# happyReduction_36-happyReduction_36 happy_x_2-        happy_x_1-         =  case happyOut44 happy_x_1 of { (HappyWrap44 happy_var_1) -> -        case happyOut47 happy_x_2 of { (HappyWrap47 happy_var_2) -> -        happyIn40-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.Module (fst happy_var_1) (snd happy_var_1) (snd happy_var_2))-        )}}--happyReduce_37 = happySpecReduce_1  4# happyReduction_37-happyReduction_37 happy_x_1-         =  case happyOut39 happy_x_1 of { (HappyWrap39 happy_var_1) -> -        happyIn41-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.HoleIdent (fst happy_var_1) (snd happy_var_1))-        )}--happyReduce_38 = happySpecReduce_1  5# happyReduction_38-happyReduction_38 happy_x_1-         =  case happyOut38 happy_x_1 of { (HappyWrap38 happy_var_1) -> -        happyIn42-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.VarIdent (fst happy_var_1) (snd happy_var_1))-        )}--happyReduce_39 = happySpecReduce_1  6# happyReduction_39-happyReduction_39 happy_x_1-         =  case happyOut42 happy_x_1 of { (HappyWrap42 happy_var_1) -> -        happyIn43-                 ((fst happy_var_1, (:[]) (snd happy_var_1))-        )}--happyReduce_40 = happySpecReduce_2  6# happyReduction_40-happyReduction_40 happy_x_2-        happy_x_1-         =  case happyOut42 happy_x_1 of { (HappyWrap42 happy_var_1) -> -        case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> -        happyIn43-                 ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_2))-        )}}--happyReduce_41 = happySpecReduce_3  7# happyReduction_41-happyReduction_41 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut45 happy_x_2 of { (HappyWrap45 happy_var_2) -> -        happyIn44-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.LanguageDecl (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_42 = happySpecReduce_1  8# happyReduction_42-happyReduction_42 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn45-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Rzk1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_43 = happyReduce 4# 9# happyReduction_43-happyReduction_43 (happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut37 happy_x_2 of { (HappyWrap37 happy_var_2) -> -        case happyOut37 happy_x_4 of { (HappyWrap37 happy_var_4) -> -        happyIn46-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandSetOption (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))-        ) `HappyStk` happyRest}}}--happyReduce_44 = happySpecReduce_2  9# happyReduction_44-happyReduction_44 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut37 happy_x_2 of { (HappyWrap37 happy_var_2) -> -        happyIn46-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandUnsetOption (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_45 = happyReduce 4# 9# happyReduction_45-happyReduction_45 (happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        happyIn46-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandCheck (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))-        ) `HappyStk` happyRest}}}--happyReduce_46 = happySpecReduce_2  9# happyReduction_46-happyReduction_46 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> -        happyIn46-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandCompute (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_47 = happySpecReduce_2  9# happyReduction_47-happyReduction_47 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> -        happyIn46-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandComputeWHNF (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_48 = happySpecReduce_2  9# happyReduction_48-happyReduction_48 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> -        happyIn46-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandComputeNF (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_49 = happyReduce 6# 9# happyReduction_49-happyReduction_49 (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 { happy_var_1 -> -        case happyOut42 happy_x_2 of { (HappyWrap42 happy_var_2) -> -        case happyOut48 happy_x_3 of { (HappyWrap48 happy_var_3) -> -        case happyOut55 happy_x_4 of { (HappyWrap55 happy_var_4) -> -        case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> -        happyIn46-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandPostulate (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6))-        ) `HappyStk` happyRest}}}}}--happyReduce_50 = happyReduce 5# 9# happyReduction_50-happyReduction_50 (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 { happy_var_1 -> -        case happyOut42 happy_x_2 of { (HappyWrap42 happy_var_2) -> -        case happyOut48 happy_x_3 of { (HappyWrap48 happy_var_3) -> -        case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> -        happyIn46-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandPostulateNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_5))-        ) `HappyStk` happyRest}}}}--happyReduce_51 = happyReduce 4# 9# happyReduction_51-happyReduction_51 (happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        happyIn46-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandAssume (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))-        ) `HappyStk` happyRest}}}--happyReduce_52 = happyReduce 4# 9# happyReduction_52-happyReduction_52 (happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut42 happy_x_2 of { (HappyWrap42 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        happyIn46-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandVariable (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))-        ) `HappyStk` happyRest}}}--happyReduce_53 = happyReduce 4# 9# happyReduction_53-happyReduction_53 (happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        happyIn46-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandVariables (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))-        ) `HappyStk` happyRest}}}--happyReduce_54 = happySpecReduce_2  9# happyReduction_54-happyReduction_54 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut49 happy_x_2 of { (HappyWrap49 happy_var_2) -> -        happyIn46-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandSection (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_55 = happySpecReduce_2  9# happyReduction_55-happyReduction_55 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut49 happy_x_2 of { (HappyWrap49 happy_var_2) -> -        happyIn46-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandSectionEnd (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_56 = happyReduce 8# 9# happyReduction_56-happyReduction_56 (happy_x_8 `HappyStk`-        happy_x_7 `HappyStk`-        happy_x_6 `HappyStk`-        happy_x_5 `HappyStk`-        happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut42 happy_x_2 of { (HappyWrap42 happy_var_2) -> -        case happyOut48 happy_x_3 of { (HappyWrap48 happy_var_3) -> -        case happyOut55 happy_x_4 of { (HappyWrap55 happy_var_4) -> -        case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> -        case happyOut71 happy_x_8 of { (HappyWrap71 happy_var_8) -> -        happyIn46-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandDefine (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6) (snd happy_var_8))-        ) `HappyStk` happyRest}}}}}}--happyReduce_57 = happyReduce 7# 9# happyReduction_57-happyReduction_57 (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 { happy_var_1 -> -        case happyOut42 happy_x_2 of { (HappyWrap42 happy_var_2) -> -        case happyOut48 happy_x_3 of { (HappyWrap48 happy_var_3) -> -        case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> -        case happyOut71 happy_x_7 of { (HappyWrap71 happy_var_7) -> -        happyIn46-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandDefineNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7))-        ) `HappyStk` happyRest}}}}}--happyReduce_58 = happyReduce 8# 9# happyReduction_58-happyReduction_58 (happy_x_8 `HappyStk`-        happy_x_7 `HappyStk`-        happy_x_6 `HappyStk`-        happy_x_5 `HappyStk`-        happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut42 happy_x_2 of { (HappyWrap42 happy_var_2) -> -        case happyOut48 happy_x_3 of { (HappyWrap48 happy_var_3) -> -        case happyOut55 happy_x_4 of { (HappyWrap55 happy_var_4) -> -        case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> -        case happyOut71 happy_x_8 of { (HappyWrap71 happy_var_8) -> -        happyIn46-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandDef (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6) (snd happy_var_8))-        ) `HappyStk` happyRest}}}}}}--happyReduce_59 = happyReduce 7# 9# happyReduction_59-happyReduction_59 (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 { happy_var_1 -> -        case happyOut42 happy_x_2 of { (HappyWrap42 happy_var_2) -> -        case happyOut48 happy_x_3 of { (HappyWrap48 happy_var_3) -> -        case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> -        case happyOut71 happy_x_7 of { (HappyWrap71 happy_var_7) -> -        happyIn46-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandDefNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7))-        ) `HappyStk` happyRest}}}}}--happyReduce_60 = happySpecReduce_0  10# happyReduction_60-happyReduction_60  =  happyIn47-                 ((Language.Rzk.Syntax.Abs.BNFC'NoPosition, [])-        )--happyReduce_61 = happySpecReduce_3  10# happyReduction_61-happyReduction_61 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut46 happy_x_1 of { (HappyWrap46 happy_var_1) -> -        case happyOut47 happy_x_3 of { (HappyWrap47 happy_var_3) -> -        happyIn47-                 ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_62 = happyReduce 4# 11# happyReduction_62-happyReduction_62 (happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut43 happy_x_3 of { (HappyWrap43 happy_var_3) -> -        happyIn48-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.DeclUsedVars (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3))-        ) `HappyStk` happyRest}}--happyReduce_63 = happySpecReduce_0  11# happyReduction_63-happyReduction_63  =  happyIn48-                 ((Language.Rzk.Syntax.Abs.BNFC'NoPosition, Language.Rzk.Syntax.Abs.noDeclUsedVars Language.Rzk.Syntax.Abs.BNFC'NoPosition)-        )--happyReduce_64 = happySpecReduce_0  12# happyReduction_64-happyReduction_64  =  happyIn49-                 ((Language.Rzk.Syntax.Abs.BNFC'NoPosition, Language.Rzk.Syntax.Abs.NoSectionName Language.Rzk.Syntax.Abs.BNFC'NoPosition)-        )--happyReduce_65 = happySpecReduce_1  12# happyReduction_65-happyReduction_65 happy_x_1-         =  case happyOut42 happy_x_1 of { (HappyWrap42 happy_var_1) -> -        happyIn49-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.SomeSectionName (fst happy_var_1) (snd happy_var_1))-        )}--happyReduce_66 = happySpecReduce_1  13# happyReduction_66-happyReduction_66 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn50-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.PatternUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_67 = happySpecReduce_1  13# happyReduction_67-happyReduction_67 happy_x_1-         =  case happyOut42 happy_x_1 of { (HappyWrap42 happy_var_1) -> -        happyIn50-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.PatternVar (fst happy_var_1) (snd happy_var_1))-        )}--happyReduce_68 = happyReduce 5# 13# happyReduction_68-happyReduction_68 (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 { happy_var_1 -> -        case happyOut50 happy_x_2 of { (HappyWrap50 happy_var_2) -> -        case happyOut50 happy_x_4 of { (HappyWrap50 happy_var_4) -> -        happyIn50-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.PatternPair (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))-        ) `HappyStk` happyRest}}}--happyReduce_69 = happyReduce 7# 13# happyReduction_69-happyReduction_69 (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 { happy_var_1 -> -        case happyOut50 happy_x_2 of { (HappyWrap50 happy_var_2) -> -        case happyOut50 happy_x_4 of { (HappyWrap50 happy_var_4) -> -        case happyOut53 happy_x_6 of { (HappyWrap53 happy_var_6) -> -        happyIn50-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.PatternTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))-        ) `HappyStk` happyRest}}}}--happyReduce_70 = happySpecReduce_1  14# happyReduction_70-happyReduction_70 happy_x_1-         =  case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> -        happyIn51-                 ((fst happy_var_1, (:[]) (snd happy_var_1))-        )}--happyReduce_71 = happySpecReduce_2  14# happyReduction_71-happyReduction_71 happy_x_2-        happy_x_1-         =  case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> -        case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> -        happyIn51-                 ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_2))-        )}}--happyReduce_72 = happySpecReduce_1  15# happyReduction_72-happyReduction_72 happy_x_1-         =  case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> -        happyIn52-                 ((fst happy_var_1, (snd happy_var_1))-        )}--happyReduce_73 = happySpecReduce_1  16# happyReduction_73-happyReduction_73 happy_x_1-         =  case happyOut52 happy_x_1 of { (HappyWrap52 happy_var_1) -> -        happyIn53-                 ((fst happy_var_1, (:[]) (snd happy_var_1))-        )}--happyReduce_74 = happySpecReduce_3  16# happyReduction_74-happyReduction_74 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut52 happy_x_1 of { (HappyWrap52 happy_var_1) -> -        case happyOut53 happy_x_3 of { (HappyWrap53 happy_var_3) -> -        happyIn53-                 ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_75 = happySpecReduce_1  17# happyReduction_75-happyReduction_75 happy_x_1-         =  case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> -        happyIn54-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ParamPattern (fst happy_var_1) (snd happy_var_1))-        )}--happyReduce_76 = happyReduce 5# 17# happyReduction_76-happyReduction_76 (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 { happy_var_1 -> -        case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        happyIn54-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))-        ) `HappyStk` happyRest}}}--happyReduce_77 = happyReduce 7# 17# happyReduction_77-happyReduction_77 (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 { happy_var_1 -> -        case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> -        happyIn54-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))-        ) `HappyStk` happyRest}}}}--happyReduce_78 = happyReduce 7# 17# happyReduction_78-happyReduction_78 (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 { happy_var_1 -> -        case happyOut50 happy_x_2 of { (HappyWrap50 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> -        happyIn54-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))-        ) `HappyStk` happyRest}}}}--happyReduce_79 = happyReduce 6# 17# happyReduction_79-happyReduction_79 (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 { happy_var_1 -> -        case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> -        case happyOut62 happy_x_4 of { (HappyWrap62 happy_var_4) -> -        case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> -        happyIn54-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternModalType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_5))-        ) `HappyStk` happyRest}}}}--happyReduce_80 = happySpecReduce_1  18# happyReduction_80-happyReduction_80 happy_x_1-         =  case happyOut54 happy_x_1 of { (HappyWrap54 happy_var_1) -> -        happyIn55-                 ((fst happy_var_1, (:[]) (snd happy_var_1))-        )}--happyReduce_81 = happySpecReduce_2  18# happyReduction_81-happyReduction_81 happy_x_2-        happy_x_1-         =  case happyOut54 happy_x_1 of { (HappyWrap54 happy_var_1) -> -        case happyOut55 happy_x_2 of { (HappyWrap55 happy_var_2) -> -        happyIn55-                 ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_2))-        )}}--happyReduce_82 = happySpecReduce_1  19# happyReduction_82-happyReduction_82 happy_x_1-         =  case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> -        happyIn56-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.BindPattern (fst happy_var_1) (snd happy_var_1))-        )}--happyReduce_83 = happySpecReduce_3  19# happyReduction_83-happyReduction_83 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> -        case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> -        happyIn56-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.BindPatternType (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_84 = happySpecReduce_1  20# happyReduction_84-happyReduction_84 happy_x_1-         =  case happyOut69 happy_x_1 of { (HappyWrap69 happy_var_1) -> -        happyIn57-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ParamType (fst happy_var_1) (snd happy_var_1))-        )}--happyReduce_85 = happyReduce 5# 20# happyReduction_85-happyReduction_85 (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 { happy_var_1 -> -        case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        happyIn57-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))-        ) `HappyStk` happyRest}}}--happyReduce_86 = happyReduce 7# 20# happyReduction_86-happyReduction_86 (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 { happy_var_1 -> -        case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> -        happyIn57-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))-        ) `HappyStk` happyRest}}}}--happyReduce_87 = happyReduce 5# 20# happyReduction_87-happyReduction_87 (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 { happy_var_1 -> -        case happyOut50 happy_x_2 of { (HappyWrap50 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        happyIn57-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermTypeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))-        ) `HappyStk` happyRest}}}--happyReduce_88 = happyReduce 9# 20# happyReduction_88-happyReduction_88 (happy_x_9 `HappyStk`-        happy_x_8 `HappyStk`-        happy_x_7 `HappyStk`-        happy_x_6 `HappyStk`-        happy_x_5 `HappyStk`-        happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut50 happy_x_3 of { (HappyWrap50 happy_var_3) -> -        case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> -        case happyOut71 happy_x_8 of { (HappyWrap71 happy_var_8) -> -        happyIn57-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamVarShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))-        ) `HappyStk` happyRest}}}}--happyReduce_89 = happyReduce 7# 20# happyReduction_89-happyReduction_89 (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 { happy_var_1 -> -        case happyOut50 happy_x_2 of { (HappyWrap50 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> -        happyIn57-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.paramVarShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))-        ) `HappyStk` happyRest}}}}--happyReduce_90 = happyReduce 6# 20# happyReduction_90-happyReduction_90 (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 { happy_var_1 -> -        case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> -        case happyOut62 happy_x_4 of { (HappyWrap62 happy_var_4) -> -        case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> -        happyIn57-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermModalType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_5))-        ) `HappyStk` happyRest}}}}--happyReduce_91 = happySpecReduce_3  21# happyReduction_91-happyReduction_91 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> -        case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> -        happyIn58-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.SigmaParam (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_92 = happyReduce 4# 21# happyReduction_92-happyReduction_92 (happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> -        case happyOut62 happy_x_3 of { (HappyWrap62 happy_var_3) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        happyIn58-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.SigmaParamModal (fst happy_var_1) (snd happy_var_1) (snd happy_var_3) (snd happy_var_4))-        ) `HappyStk` happyRest}}}--happyReduce_93 = happySpecReduce_1  22# happyReduction_93-happyReduction_93 happy_x_1-         =  case happyOut58 happy_x_1 of { (HappyWrap58 happy_var_1) -> -        happyIn59-                 ((fst happy_var_1, (:[]) (snd happy_var_1))-        )}--happyReduce_94 = happySpecReduce_3  22# happyReduction_94-happyReduction_94 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut58 happy_x_1 of { (HappyWrap58 happy_var_1) -> -        case happyOut59 happy_x_3 of { (HappyWrap59 happy_var_3) -> -        happyIn59-                 ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_95 = happySpecReduce_3  23# happyReduction_95-happyReduction_95 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut71 happy_x_1 of { (HappyWrap71 happy_var_1) -> -        case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> -        happyIn60-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.Restriction (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_96 = happySpecReduce_3  23# happyReduction_96-happyReduction_96 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut71 happy_x_1 of { (HappyWrap71 happy_var_1) -> -        case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> -        happyIn60-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_Restriction (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_97 = happySpecReduce_1  24# happyReduction_97-happyReduction_97 happy_x_1-         =  case happyOut60 happy_x_1 of { (HappyWrap60 happy_var_1) -> -        happyIn61-                 ((fst happy_var_1, (:[]) (snd happy_var_1))-        )}--happyReduce_98 = happySpecReduce_3  24# happyReduction_98-happyReduction_98 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut60 happy_x_1 of { (HappyWrap60 happy_var_1) -> -        case happyOut61 happy_x_3 of { (HappyWrap61 happy_var_3) -> -        happyIn61-                 ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_99 = happySpecReduce_1  25# happyReduction_99-happyReduction_99 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn62-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Flat (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_100 = happySpecReduce_1  25# happyReduction_100-happyReduction_100 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn62-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Flat (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_101 = happySpecReduce_1  25# happyReduction_101-happyReduction_101 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn62-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Sharp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_102 = happySpecReduce_1  25# happyReduction_102-happyReduction_102 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn62-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Sharp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_103 = happySpecReduce_1  25# happyReduction_103-happyReduction_103 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn62-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Op (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_104 = happySpecReduce_1  25# happyReduction_104-happyReduction_104 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn62-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Op (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_105 = happySpecReduce_1  25# happyReduction_105-happyReduction_105 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn62-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Id (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_106 = happySpecReduce_1  26# happyReduction_106-happyReduction_106 happy_x_1-         =  case happyOut62 happy_x_1 of { (HappyWrap62 happy_var_1) -> -        happyIn63-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.Single (fst happy_var_1) (snd happy_var_1))-        )}--happyReduce_107 = happySpecReduce_3  26# happyReduction_107-happyReduction_107 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut62 happy_x_1 of { (HappyWrap62 happy_var_1) -> -        case happyOut62 happy_x_3 of { (HappyWrap62 happy_var_3) -> -        happyIn63-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.Comp (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_108 = happySpecReduce_1  27# happyReduction_108-happyReduction_108 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Universe (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_109 = happySpecReduce_1  27# happyReduction_109-happyReduction_109 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.UniverseCube (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_110 = happySpecReduce_1  27# happyReduction_110-happyReduction_110 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.UniverseTope (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_111 = happySpecReduce_1  27# happyReduction_111-happyReduction_111 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_112 = happySpecReduce_1  27# happyReduction_112-happyReduction_112 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeUnitStar (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_113 = happySpecReduce_1  27# happyReduction_113-happyReduction_113 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_114 = happySpecReduce_1  27# happyReduction_114-happyReduction_114 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_115 = happySpecReduce_1  27# happyReduction_115-happyReduction_115 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_116 = happySpecReduce_1  27# happyReduction_116-happyReduction_116 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeTop (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_117 = happySpecReduce_1  27# happyReduction_117-happyReduction_117 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_118 = happySpecReduce_1  27# happyReduction_118-happyReduction_118 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.RecBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_119 = happyReduce 4# 27# happyReduction_119-happyReduction_119 (happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut61 happy_x_3 of { (HappyWrap61 happy_var_3) -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.RecOr (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3))-        ) `HappyStk` happyRest}}--happyReduce_120 = happyReduce 10# 27# happyReduction_120-happyReduction_120 (happy_x_10 `HappyStk`-        happy_x_9 `HappyStk`-        happy_x_8 `HappyStk`-        happy_x_7 `HappyStk`-        happy_x_6 `HappyStk`-        happy_x_5 `HappyStk`-        happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> -        case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> -        case happyOut71 happy_x_7 of { (HappyWrap71 happy_var_7) -> -        case happyOut71 happy_x_9 of { (HappyWrap71 happy_var_9) -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.RecOrDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7) (snd happy_var_9))-        ) `HappyStk` happyRest}}}}}--happyReduce_121 = happySpecReduce_1  27# happyReduction_121-happyReduction_121 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_122 = happyReduce 5# 27# happyReduction_122-happyReduction_122 (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 { happy_var_1 -> -        case happyOut57 happy_x_2 of { (HappyWrap57 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeExtensionDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))-        ) `HappyStk` happyRest}}}--happyReduce_123 = happyReduce 5# 27# happyReduction_123-happyReduction_123 (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 { happy_var_1 -> -        case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Pair (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))-        ) `HappyStk` happyRest}}}--happyReduce_124 = happyReduce 7# 27# happyReduction_124-happyReduction_124 (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 { happy_var_1 -> -        case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        case happyOut72 happy_x_6 of { (HappyWrap72 happy_var_6) -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Tuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))-        ) `HappyStk` happyRest}}}}--happyReduce_125 = happySpecReduce_3  27# happyReduction_125-happyReduction_125 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut62 happy_x_2 of { (HappyWrap62 happy_var_2) -> -        case happyOut64 happy_x_3 of { (HappyWrap64 happy_var_3) -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModApp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3))-        )}}}--happyReduce_126 = happyReduce 5# 27# happyReduction_126-happyReduction_126 (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 { happy_var_1 -> -        case happyOut62 happy_x_2 of { (HappyWrap62 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))-        ) `HappyStk` happyRest}}}--happyReduce_127 = happySpecReduce_1  27# happyReduction_127-happyReduction_127 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Unit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_128 = happySpecReduce_1  27# happyReduction_128-happyReduction_128 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Refl (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_129 = happySpecReduce_3  27# happyReduction_129-happyReduction_129 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ReflTerm (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_130 = happyReduce 5# 27# happyReduction_130-happyReduction_130 (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 { happy_var_1 -> -        case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ReflTermType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))-        ) `HappyStk` happyRest}}}--happyReduce_131 = happyReduce 14# 27# happyReduction_131-happyReduction_131 (happy_x_14 `HappyStk`-        happy_x_13 `HappyStk`-        happy_x_12 `HappyStk`-        happy_x_11 `HappyStk`-        happy_x_10 `HappyStk`-        happy_x_9 `HappyStk`-        happy_x_8 `HappyStk`-        happy_x_7 `HappyStk`-        happy_x_6 `HappyStk`-        happy_x_5 `HappyStk`-        happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> -        case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> -        case happyOut71 happy_x_7 of { (HappyWrap71 happy_var_7) -> -        case happyOut71 happy_x_9 of { (HappyWrap71 happy_var_9) -> -        case happyOut71 happy_x_11 of { (HappyWrap71 happy_var_11) -> -        case happyOut71 happy_x_13 of { (HappyWrap71 happy_var_13) -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.IdJ (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7) (snd happy_var_9) (snd happy_var_11) (snd happy_var_13))-        ) `HappyStk` happyRest}}}}}}}--happyReduce_132 = happySpecReduce_1  27# happyReduction_132-happyReduction_132 happy_x_1-         =  case happyOut41 happy_x_1 of { (HappyWrap41 happy_var_1) -> -        happyIn64-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.Hole (fst happy_var_1) (snd happy_var_1))-        )}--happyReduce_133 = happySpecReduce_1  27# happyReduction_133-happyReduction_133 happy_x_1-         =  case happyOut42 happy_x_1 of { (HappyWrap42 happy_var_1) -> -        happyIn64-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.Var (fst happy_var_1) (snd happy_var_1))-        )}--happyReduce_134 = happySpecReduce_3  27# happyReduction_134-happyReduction_134 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut71 happy_x_2 of { (HappyWrap71 happy_var_2) -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), (snd happy_var_2))-        )}}--happyReduce_135 = happySpecReduce_1  27# happyReduction_135-happyReduction_135 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_CubeUnitStar (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_136 = happySpecReduce_1  27# happyReduction_136-happyReduction_136 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Cube2_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_137 = happySpecReduce_1  27# happyReduction_137-happyReduction_137 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Cube2_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_138 = happySpecReduce_1  27# happyReduction_138-happyReduction_138 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TopeTop (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_139 = happySpecReduce_1  27# happyReduction_139-happyReduction_139 happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TopeBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))-        )}--happyReduce_140 = happyReduce 5# 27# happyReduction_140-happyReduction_140 (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 { happy_var_1 -> -        case happyOut57 happy_x_2 of { (HappyWrap57 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        happyIn64-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TypeExtensionDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))-        ) `HappyStk` happyRest}}}--happyReduce_141 = happySpecReduce_3  28# happyReduction_141-happyReduction_141 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut65 happy_x_1 of { (HappyWrap65 happy_var_1) -> -        case happyOut69 happy_x_3 of { (HappyWrap69 happy_var_3) -> -        happyIn65-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.CubeProduct (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_142 = happySpecReduce_1  28# happyReduction_142-happyReduction_142 happy_x_1-         =  case happyOut69 happy_x_1 of { (HappyWrap69 happy_var_1) -> -        happyIn65-                 ((fst happy_var_1, (snd happy_var_1))-        )}--happyReduce_143 = happySpecReduce_3  28# happyReduction_143-happyReduction_143 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut65 happy_x_1 of { (HappyWrap65 happy_var_1) -> -        case happyOut69 happy_x_3 of { (HappyWrap69 happy_var_3) -> -        happyIn65-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ascii_CubeProduct (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_144 = happySpecReduce_3  29# happyReduction_144-happyReduction_144 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut65 happy_x_1 of { (HappyWrap65 happy_var_1) -> -        case happyOut65 happy_x_3 of { (HappyWrap65 happy_var_3) -> -        happyIn66-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_145 = happySpecReduce_3  29# happyReduction_145-happyReduction_145 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut65 happy_x_1 of { (HappyWrap65 happy_var_1) -> -        case happyOut65 happy_x_3 of { (HappyWrap65 happy_var_3) -> -        happyIn66-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeLEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_146 = happySpecReduce_1  29# happyReduction_146-happyReduction_146 happy_x_1-         =  case happyOut65 happy_x_1 of { (HappyWrap65 happy_var_1) -> -        happyIn66-                 ((fst happy_var_1, (snd happy_var_1))-        )}--happyReduce_147 = happySpecReduce_3  29# happyReduction_147-happyReduction_147 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut65 happy_x_1 of { (HappyWrap65 happy_var_1) -> -        case happyOut65 happy_x_3 of { (HappyWrap65 happy_var_3) -> -        happyIn66-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_148 = happySpecReduce_3  29# happyReduction_148-happyReduction_148 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut65 happy_x_1 of { (HappyWrap65 happy_var_1) -> -        case happyOut65 happy_x_3 of { (HappyWrap65 happy_var_3) -> -        happyIn66-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeLEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_149 = happySpecReduce_3  30# happyReduction_149-happyReduction_149 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut66 happy_x_1 of { (HappyWrap66 happy_var_1) -> -        case happyOut67 happy_x_3 of { (HappyWrap67 happy_var_3) -> -        happyIn67-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeAnd (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_150 = happySpecReduce_1  30# happyReduction_150-happyReduction_150 happy_x_1-         =  case happyOut66 happy_x_1 of { (HappyWrap66 happy_var_1) -> -        happyIn67-                 ((fst happy_var_1, (snd happy_var_1))-        )}--happyReduce_151 = happySpecReduce_3  30# happyReduction_151-happyReduction_151 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut66 happy_x_1 of { (HappyWrap66 happy_var_1) -> -        case happyOut67 happy_x_3 of { (HappyWrap67 happy_var_3) -> -        happyIn67-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeAnd (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_152 = happySpecReduce_3  31# happyReduction_152-happyReduction_152 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> -        case happyOut68 happy_x_3 of { (HappyWrap68 happy_var_3) -> -        happyIn68-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeOr (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_153 = happySpecReduce_1  31# happyReduction_153-happyReduction_153 happy_x_1-         =  case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> -        happyIn68-                 ((fst happy_var_1, (snd happy_var_1))-        )}--happyReduce_154 = happySpecReduce_3  31# happyReduction_154-happyReduction_154 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> -        case happyOut68 happy_x_3 of { (HappyWrap68 happy_var_3) -> -        happyIn68-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeOr (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_155 = happySpecReduce_2  32# happyReduction_155-happyReduction_155 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> -        happyIn69-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeInv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_156 = happySpecReduce_2  32# happyReduction_156-happyReduction_156 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> -        happyIn69-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_TopeInv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_157 = happySpecReduce_2  32# happyReduction_157-happyReduction_157 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> -        happyIn69-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeUninv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_158 = happySpecReduce_2  32# happyReduction_158-happyReduction_158 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> -        happyIn69-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_TopeUninv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_159 = happySpecReduce_2  32# happyReduction_159-happyReduction_159 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> -        happyIn69-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeFlip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_160 = happySpecReduce_2  32# happyReduction_160-happyReduction_160 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> -        happyIn69-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_CubeFlip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_161 = happySpecReduce_2  32# happyReduction_161-happyReduction_161 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> -        happyIn69-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeUnflip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_162 = happySpecReduce_2  32# happyReduction_162-happyReduction_162 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> -        happyIn69-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_CubeUnflip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_163 = happyReduce 4# 32# happyReduction_163-happyReduction_163 (happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOut69 happy_x_1 of { (HappyWrap69 happy_var_1) -> -        case happyOut61 happy_x_3 of { (HappyWrap61 happy_var_3) -> -        happyIn69-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeRestricted (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        ) `HappyStk` happyRest}}--happyReduce_164 = happySpecReduce_2  32# happyReduction_164-happyReduction_164 happy_x_2-        happy_x_1-         =  case happyOut69 happy_x_1 of { (HappyWrap69 happy_var_1) -> -        case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> -        happyIn69-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.App (fst happy_var_1) (snd happy_var_1) (snd happy_var_2))-        )}}--happyReduce_165 = happySpecReduce_3  32# happyReduction_165-happyReduction_165 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut63 happy_x_2 of { (HappyWrap63 happy_var_2) -> -        case happyOut64 happy_x_3 of { (HappyWrap64 happy_var_3) -> -        happyIn69-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModExtract (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3))-        )}}}--happyReduce_166 = happySpecReduce_2  32# happyReduction_166-happyReduction_166 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> -        happyIn69-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.First (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_167 = happySpecReduce_2  32# happyReduction_167-happyReduction_167 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> -        happyIn69-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Second (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_168 = happySpecReduce_1  32# happyReduction_168-happyReduction_168 happy_x_1-         =  case happyOut64 happy_x_1 of { (HappyWrap64 happy_var_1) -> -        happyIn69-                 ((fst happy_var_1, (snd happy_var_1))-        )}--happyReduce_169 = happySpecReduce_2  32# happyReduction_169-happyReduction_169 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> -        happyIn69-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_First (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_170 = happySpecReduce_2  32# happyReduction_170-happyReduction_170 happy_x_2-        happy_x_1-         =  case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> -        happyIn69-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Second (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))-        )}}--happyReduce_171 = happySpecReduce_3  33# happyReduction_171-happyReduction_171 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut57 happy_x_1 of { (HappyWrap57 happy_var_1) -> -        case happyOut70 happy_x_3 of { (HappyWrap70 happy_var_3) -> -        happyIn70-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeFun (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_172 = happyReduce 8# 33# happyReduction_172-happyReduction_172 (happy_x_8 `HappyStk`-        happy_x_7 `HappyStk`-        happy_x_6 `HappyStk`-        happy_x_5 `HappyStk`-        happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut50 happy_x_3 of { (HappyWrap50 happy_var_3) -> -        case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> -        case happyOut70 happy_x_8 of { (HappyWrap70 happy_var_8) -> -        happyIn70-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeSigma (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))-        ) `HappyStk` happyRest}}}}--happyReduce_173 = happyReduce 9# 33# happyReduction_173-happyReduction_173 (happy_x_9 `HappyStk`-        happy_x_8 `HappyStk`-        happy_x_7 `HappyStk`-        happy_x_6 `HappyStk`-        happy_x_5 `HappyStk`-        happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut50 happy_x_3 of { (HappyWrap50 happy_var_3) -> -        case happyOut62 happy_x_5 of { (HappyWrap62 happy_var_5) -> -        case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> -        case happyOut70 happy_x_9 of { (HappyWrap70 happy_var_9) -> -        happyIn70-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeSigmaModal (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_6) (snd happy_var_9))-        ) `HappyStk` happyRest}}}}}--happyReduce_174 = happyReduce 8# 33# happyReduction_174-happyReduction_174 (happy_x_8 `HappyStk`-        happy_x_7 `HappyStk`-        happy_x_6 `HappyStk`-        happy_x_5 `HappyStk`-        happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut58 happy_x_3 of { (HappyWrap58 happy_var_3) -> -        case happyOut59 happy_x_5 of { (HappyWrap59 happy_var_5) -> -        case happyOut70 happy_x_8 of { (HappyWrap70 happy_var_8) -> -        happyIn70-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeSigmaTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))-        ) `HappyStk` happyRest}}}}--happyReduce_175 = happyReduce 5# 33# happyReduction_175-happyReduction_175 (happy_x_5 `HappyStk`-        happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOut68 happy_x_1 of { (HappyWrap68 happy_var_1) -> -        case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> -        case happyOut68 happy_x_5 of { (HappyWrap68 happy_var_5) -> -        happyIn70-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeId (fst happy_var_1) (snd happy_var_1) (snd happy_var_3) (snd happy_var_5))-        ) `HappyStk` happyRest}}}--happyReduce_176 = happySpecReduce_3  33# happyReduction_176-happyReduction_176 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut68 happy_x_1 of { (HappyWrap68 happy_var_1) -> -        case happyOut68 happy_x_3 of { (HappyWrap68 happy_var_3) -> -        happyIn70-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeIdSimple (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_177 = happyReduce 6# 33# happyReduction_177-happyReduction_177 (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 { happy_var_1 -> -        case happyOut56 happy_x_2 of { (HappyWrap56 happy_var_2) -> -        case happyOut71 happy_x_4 of { (HappyWrap71 happy_var_4) -> -        case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> -        happyIn70-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Let (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))-        ) `HappyStk` happyRest}}}}--happyReduce_178 = happyReduce 4# 33# happyReduction_178-happyReduction_178 (happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut55 happy_x_2 of { (HappyWrap55 happy_var_2) -> -        case happyOut70 happy_x_4 of { (HappyWrap70 happy_var_4) -> -        happyIn70-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Lambda (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))-        ) `HappyStk` happyRest}}}--happyReduce_179 = happyReduce 8# 33# happyReduction_179-happyReduction_179 (happy_x_8 `HappyStk`-        happy_x_7 `HappyStk`-        happy_x_6 `HappyStk`-        happy_x_5 `HappyStk`-        happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut63 happy_x_3 of { (HappyWrap63 happy_var_3) -> -        case happyOut56 happy_x_4 of { (HappyWrap56 happy_var_4) -> -        case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> -        case happyOut71 happy_x_8 of { (HappyWrap71 happy_var_8) -> -        happyIn70-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.LetMod (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6) (snd happy_var_8))-        ) `HappyStk` happyRest}}}}}--happyReduce_180 = happySpecReduce_1  33# happyReduction_180-happyReduction_180 happy_x_1-         =  case happyOut68 happy_x_1 of { (HappyWrap68 happy_var_1) -> -        happyIn70-                 ((fst happy_var_1, (snd happy_var_1))-        )}--happyReduce_181 = happySpecReduce_3  33# happyReduction_181-happyReduction_181 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut57 happy_x_1 of { (HappyWrap57 happy_var_1) -> -        case happyOut70 happy_x_3 of { (HappyWrap70 happy_var_3) -> -        happyIn70-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TypeFun (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_182 = happyReduce 8# 33# happyReduction_182-happyReduction_182 (happy_x_8 `HappyStk`-        happy_x_7 `HappyStk`-        happy_x_6 `HappyStk`-        happy_x_5 `HappyStk`-        happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut50 happy_x_3 of { (HappyWrap50 happy_var_3) -> -        case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> -        case happyOut70 happy_x_8 of { (HappyWrap70 happy_var_8) -> -        happyIn70-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TypeSigma (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))-        ) `HappyStk` happyRest}}}}--happyReduce_183 = happyReduce 9# 33# happyReduction_183-happyReduction_183 (happy_x_9 `HappyStk`-        happy_x_8 `HappyStk`-        happy_x_7 `HappyStk`-        happy_x_6 `HappyStk`-        happy_x_5 `HappyStk`-        happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut50 happy_x_3 of { (HappyWrap50 happy_var_3) -> -        case happyOut62 happy_x_5 of { (HappyWrap62 happy_var_5) -> -        case happyOut71 happy_x_6 of { (HappyWrap71 happy_var_6) -> -        case happyOut70 happy_x_9 of { (HappyWrap70 happy_var_9) -> -        happyIn70-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TypeSigmaModal (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_6) (snd happy_var_9))-        ) `HappyStk` happyRest}}}}}--happyReduce_184 = happyReduce 8# 33# happyReduction_184-happyReduction_184 (happy_x_8 `HappyStk`-        happy_x_7 `HappyStk`-        happy_x_6 `HappyStk`-        happy_x_5 `HappyStk`-        happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut58 happy_x_3 of { (HappyWrap58 happy_var_3) -> -        case happyOut59 happy_x_5 of { (HappyWrap59 happy_var_5) -> -        case happyOut70 happy_x_8 of { (HappyWrap70 happy_var_8) -> -        happyIn70-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TypeSigmaTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))-        ) `HappyStk` happyRest}}}}--happyReduce_185 = happyReduce 4# 33# happyReduction_185-happyReduction_185 (happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut55 happy_x_2 of { (HappyWrap55 happy_var_2) -> -        case happyOut70 happy_x_4 of { (HappyWrap70 happy_var_4) -> -        happyIn70-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Lambda (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))-        ) `HappyStk` happyRest}}}--happyReduce_186 = happyReduce 8# 33# happyReduction_186-happyReduction_186 (happy_x_8 `HappyStk`-        happy_x_7 `HappyStk`-        happy_x_6 `HappyStk`-        happy_x_5 `HappyStk`-        happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut50 happy_x_3 of { (HappyWrap50 happy_var_3) -> -        case happyOut71 happy_x_5 of { (HappyWrap71 happy_var_5) -> -        case happyOut70 happy_x_8 of { (HappyWrap70 happy_var_8) -> -        happyIn70-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.unicode_TypeSigmaAlt (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))-        ) `HappyStk` happyRest}}}}--happyReduce_187 = happyReduce 8# 33# happyReduction_187-happyReduction_187 (happy_x_8 `HappyStk`-        happy_x_7 `HappyStk`-        happy_x_6 `HappyStk`-        happy_x_5 `HappyStk`-        happy_x_4 `HappyStk`-        happy_x_3 `HappyStk`-        happy_x_2 `HappyStk`-        happy_x_1 `HappyStk`-        happyRest)-         = case happyOutTok happy_x_1 of { happy_var_1 -> -        case happyOut58 happy_x_3 of { (HappyWrap58 happy_var_3) -> -        case happyOut59 happy_x_5 of { (HappyWrap59 happy_var_5) -> -        case happyOut70 happy_x_8 of { (HappyWrap70 happy_var_8) -> -        happyIn70-                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.unicode_TypeSigmaTupleAlt (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))-        ) `HappyStk` happyRest}}}}--happyReduce_188 = happySpecReduce_3  34# happyReduction_188-happyReduction_188 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut68 happy_x_1 of { (HappyWrap68 happy_var_1) -> -        case happyOut70 happy_x_3 of { (HappyWrap70 happy_var_3) -> -        happyIn71-                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeAsc (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))-        )}}--happyReduce_189 = happySpecReduce_1  34# happyReduction_189-happyReduction_189 happy_x_1-         =  case happyOut70 happy_x_1 of { (HappyWrap70 happy_var_1) -> -        happyIn71-                 ((fst happy_var_1, (snd happy_var_1))-        )}--happyReduce_190 = happySpecReduce_1  35# happyReduction_190-happyReduction_190 happy_x_1-         =  case happyOut71 happy_x_1 of { (HappyWrap71 happy_var_1) -> -        happyIn72-                 ((fst happy_var_1, (:[]) (snd happy_var_1))-        )}--happyReduce_191 = happySpecReduce_3  35# happyReduction_191-happyReduction_191 happy_x_3-        happy_x_2-        happy_x_1-         =  case happyOut71 happy_x_1 of { (HappyWrap71 happy_var_1) -> -        case happyOut72 happy_x_3 of { (HappyWrap72 happy_var_3) -> -        happyIn72-                 ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))-        )}}--happyTerminalToTok term = case term of {-        PT _ (TS _ 1) -> 2#;-        PT _ (TS _ 2) -> 3#;-        PT _ (TS _ 3) -> 4#;-        PT _ (TS _ 4) -> 5#;-        PT _ (TS _ 5) -> 6#;-        PT _ (TS _ 6) -> 7#;-        PT _ (TS _ 7) -> 8#;-        PT _ (TS _ 8) -> 9#;-        PT _ (TS _ 9) -> 10#;-        PT _ (TS _ 10) -> 11#;-        PT _ (TS _ 11) -> 12#;-        PT _ (TS _ 12) -> 13#;-        PT _ (TS _ 13) -> 14#;-        PT _ (TS _ 14) -> 15#;-        PT _ (TS _ 15) -> 16#;-        PT _ (TS _ 16) -> 17#;-        PT _ (TS _ 17) -> 18#;-        PT _ (TS _ 18) -> 19#;-        PT _ (TS _ 19) -> 20#;-        PT _ (TS _ 20) -> 21#;-        PT _ (TS _ 21) -> 22#;-        PT _ (TS _ 22) -> 23#;-        PT _ (TS _ 23) -> 24#;-        PT _ (TS _ 24) -> 25#;-        PT _ (TS _ 25) -> 26#;-        PT _ (TS _ 26) -> 27#;-        PT _ (TS _ 27) -> 28#;-        PT _ (TS _ 28) -> 29#;-        PT _ (TS _ 29) -> 30#;-        PT _ (TS _ 30) -> 31#;-        PT _ (TS _ 31) -> 32#;-        PT _ (TS _ 32) -> 33#;-        PT _ (TS _ 33) -> 34#;-        PT _ (TS _ 34) -> 35#;-        PT _ (TS _ 35) -> 36#;-        PT _ (TS _ 36) -> 37#;-        PT _ (TS _ 37) -> 38#;-        PT _ (TS _ 38) -> 39#;-        PT _ (TS _ 39) -> 40#;-        PT _ (TS _ 40) -> 41#;-        PT _ (TS _ 41) -> 42#;-        PT _ (TS _ 42) -> 43#;-        PT _ (TS _ 43) -> 44#;-        PT _ (TS _ 44) -> 45#;-        PT _ (TS _ 45) -> 46#;-        PT _ (TS _ 46) -> 47#;-        PT _ (TS _ 47) -> 48#;-        PT _ (TS _ 48) -> 49#;-        PT _ (TS _ 49) -> 50#;-        PT _ (TS _ 50) -> 51#;-        PT _ (TS _ 51) -> 52#;-        PT _ (TS _ 52) -> 53#;-        PT _ (TS _ 53) -> 54#;-        PT _ (TS _ 54) -> 55#;-        PT _ (TS _ 55) -> 56#;-        PT _ (TS _ 56) -> 57#;-        PT _ (TS _ 57) -> 58#;-        PT _ (TS _ 58) -> 59#;-        PT _ (TS _ 59) -> 60#;-        PT _ (TS _ 60) -> 61#;-        PT _ (TS _ 61) -> 62#;-        PT _ (TS _ 62) -> 63#;-        PT _ (TS _ 63) -> 64#;-        PT _ (TS _ 64) -> 65#;-        PT _ (TS _ 65) -> 66#;-        PT _ (TS _ 66) -> 67#;-        PT _ (TS _ 67) -> 68#;-        PT _ (TS _ 68) -> 69#;-        PT _ (TS _ 69) -> 70#;-        PT _ (TS _ 70) -> 71#;-        PT _ (TS _ 71) -> 72#;-        PT _ (TS _ 72) -> 73#;-        PT _ (TS _ 73) -> 74#;-        PT _ (TS _ 74) -> 75#;-        PT _ (TS _ 75) -> 76#;-        PT _ (TS _ 76) -> 77#;-        PT _ (TS _ 77) -> 78#;-        PT _ (TS _ 78) -> 79#;-        PT _ (TS _ 79) -> 80#;-        PT _ (TS _ 80) -> 81#;-        PT _ (TS _ 81) -> 82#;-        PT _ (TS _ 82) -> 83#;-        PT _ (TS _ 83) -> 84#;-        PT _ (TS _ 84) -> 85#;-        PT _ (TS _ 85) -> 86#;-        PT _ (TS _ 86) -> 87#;-        PT _ (TS _ 87) -> 88#;-        PT _ (TS _ 88) -> 89#;-        PT _ (TS _ 89) -> 90#;-        PT _ (TS _ 90) -> 91#;-        PT _ (TS _ 91) -> 92#;-        PT _ (TS _ 92) -> 93#;-        PT _ (TS _ 93) -> 94#;-        PT _ (TS _ 94) -> 95#;-        PT _ (TS _ 95) -> 96#;-        PT _ (TS _ 96) -> 97#;-        PT _ (TS _ 97) -> 98#;-        PT _ (TS _ 98) -> 99#;-        PT _ (TS _ 99) -> 100#;-        PT _ (TL _) -> 101#;-        PT _ (T_VarIdentToken _) -> 102#;-        PT _ (T_HoleIdentToken _) -> 103#;-        _ -> -1#;-        }-{-# NOINLINE happyTerminalToTok #-}--happyLex kend  _kmore []       = kend notHappyAtAll []-happyLex _kend kmore  (tk:tks) = kmore (happyTerminalToTok tk) tk tks-{-# INLINE happyLex #-}--happyNewToken action sts stk = happyLex (\tk -> happyDoAction 104# notHappyAtAll action sts stk) (\i tk -> happyDoAction i tk action sts stk)--happyReport 104# tk explist resume tks = happyReport' tks explist resume-happyReport _ tk explist resume tks = happyReport' (tk:tks) explist (\tks -> resume (Happy_Prelude.tail tks))---happyThen :: () => (Err a) -> (a -> (Err b)) -> (Err b)-happyThen = ((>>=))-happyReturn :: () => a -> (Err a)-happyReturn = (return)-happyThen1 m k tks = ((>>=)) m (\a -> k a tks)-happyFmap1 f m tks = happyThen (m tks) (\a -> happyReturn (f a))-happyReturn1 :: () => a -> b -> (Err a)-happyReturn1 = \a tks -> (return) a-happyReport' :: () => [(Token)] -> [Happy_Prelude.String] -> ([(Token)] -> (Err a)) -> (Err a)-happyReport' = (\tokens expected resume -> happyError tokens)--happyAbort :: () => [(Token)] -> (Err a)-happyAbort = Happy_Prelude.error "Called abort handler in non-resumptive parser"--pModule_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 0# tks) (\x -> happyReturn (let {(HappyWrap40 x') = happyOut40 x} in x'))--pHoleIdent_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 1# tks) (\x -> happyReturn (let {(HappyWrap41 x') = happyOut41 x} in x'))--pVarIdent_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 2# tks) (\x -> happyReturn (let {(HappyWrap42 x') = happyOut42 x} in x'))--pListVarIdent_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 3# tks) (\x -> happyReturn (let {(HappyWrap43 x') = happyOut43 x} in x'))--pLanguageDecl_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 4# tks) (\x -> happyReturn (let {(HappyWrap44 x') = happyOut44 x} in x'))--pLanguage_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 5# tks) (\x -> happyReturn (let {(HappyWrap45 x') = happyOut45 x} in x'))--pCommand_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 6# tks) (\x -> happyReturn (let {(HappyWrap46 x') = happyOut46 x} in x'))--pListCommand_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 7# tks) (\x -> happyReturn (let {(HappyWrap47 x') = happyOut47 x} in x'))--pDeclUsedVars_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 8# tks) (\x -> happyReturn (let {(HappyWrap48 x') = happyOut48 x} in x'))--pSectionName_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 9# tks) (\x -> happyReturn (let {(HappyWrap49 x') = happyOut49 x} in x'))--pPattern_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 10# tks) (\x -> happyReturn (let {(HappyWrap50 x') = happyOut50 x} in x'))--pListPattern_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 11# tks) (\x -> happyReturn (let {(HappyWrap51 x') = happyOut51 x} in x'))--pPattern1_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 12# tks) (\x -> happyReturn (let {(HappyWrap52 x') = happyOut52 x} in x'))--pListPattern1_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 13# tks) (\x -> happyReturn (let {(HappyWrap53 x') = happyOut53 x} in x'))--pParam_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 14# tks) (\x -> happyReturn (let {(HappyWrap54 x') = happyOut54 x} in x'))--pListParam_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 15# tks) (\x -> happyReturn (let {(HappyWrap55 x') = happyOut55 x} in x'))--pBind_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 16# tks) (\x -> happyReturn (let {(HappyWrap56 x') = happyOut56 x} in x'))--pParamDecl_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 17# tks) (\x -> happyReturn (let {(HappyWrap57 x') = happyOut57 x} in x'))--pSigmaParam_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 18# tks) (\x -> happyReturn (let {(HappyWrap58 x') = happyOut58 x} in x'))--pListSigmaParam_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 19# tks) (\x -> happyReturn (let {(HappyWrap59 x') = happyOut59 x} in x'))--pRestriction_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 20# tks) (\x -> happyReturn (let {(HappyWrap60 x') = happyOut60 x} in x'))--pListRestriction_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 21# tks) (\x -> happyReturn (let {(HappyWrap61 x') = happyOut61 x} in x'))--pModality_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 22# tks) (\x -> happyReturn (let {(HappyWrap62 x') = happyOut62 x} in x'))--pModComp_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 23# tks) (\x -> happyReturn (let {(HappyWrap63 x') = happyOut63 x} in x'))--pTerm7_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 24# tks) (\x -> happyReturn (let {(HappyWrap64 x') = happyOut64 x} in x'))--pTerm5_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 25# tks) (\x -> happyReturn (let {(HappyWrap65 x') = happyOut65 x} in x'))--pTerm4_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 26# tks) (\x -> happyReturn (let {(HappyWrap66 x') = happyOut66 x} in x'))--pTerm3_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 27# tks) (\x -> happyReturn (let {(HappyWrap67 x') = happyOut67 x} in x'))--pTerm2_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 28# tks) (\x -> happyReturn (let {(HappyWrap68 x') = happyOut68 x} in x'))--pTerm6_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 29# tks) (\x -> happyReturn (let {(HappyWrap69 x') = happyOut69 x} in x'))--pTerm1_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 30# tks) (\x -> happyReturn (let {(HappyWrap70 x') = happyOut70 x} in x'))--pTerm_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 31# tks) (\x -> happyReturn (let {(HappyWrap71 x') = happyOut71 x} in x'))--pListTerm_internal tks = happySomeParser where- happySomeParser = happyThen (happyDoParse 32# tks) (\x -> happyReturn (let {(HappyWrap72 x') = happyOut72 x} in x'))--happySeq = happyDontSeq---type Err = Either String--happyError :: [Token] -> Err a-happyError ts = Left $-  "syntax error at " ++ tokenPos ts ++-  case ts of-    []      -> []-    [Err _] -> " due to lexer error"-    t:_     -> " before `" ++ (prToken t) ++ "'"--myLexer :: Data.Text.Text -> [Token]-myLexer = tokens---- Entrypoints--pModule :: [Token] -> Err Language.Rzk.Syntax.Abs.Module-pModule = fmap snd . pModule_internal--pHoleIdent :: [Token] -> Err Language.Rzk.Syntax.Abs.HoleIdent-pHoleIdent = fmap snd . pHoleIdent_internal--pVarIdent :: [Token] -> Err Language.Rzk.Syntax.Abs.VarIdent-pVarIdent = fmap snd . pVarIdent_internal--pListVarIdent :: [Token] -> Err [Language.Rzk.Syntax.Abs.VarIdent]-pListVarIdent = fmap snd . pListVarIdent_internal--pLanguageDecl :: [Token] -> Err Language.Rzk.Syntax.Abs.LanguageDecl-pLanguageDecl = fmap snd . pLanguageDecl_internal--pLanguage :: [Token] -> Err Language.Rzk.Syntax.Abs.Language-pLanguage = fmap snd . pLanguage_internal--pCommand :: [Token] -> Err Language.Rzk.Syntax.Abs.Command-pCommand = fmap snd . pCommand_internal--pListCommand :: [Token] -> Err [Language.Rzk.Syntax.Abs.Command]-pListCommand = fmap snd . pListCommand_internal--pDeclUsedVars :: [Token] -> Err Language.Rzk.Syntax.Abs.DeclUsedVars-pDeclUsedVars = fmap snd . pDeclUsedVars_internal--pSectionName :: [Token] -> Err Language.Rzk.Syntax.Abs.SectionName-pSectionName = fmap snd . pSectionName_internal--pPattern :: [Token] -> Err Language.Rzk.Syntax.Abs.Pattern-pPattern = fmap snd . pPattern_internal--pListPattern :: [Token] -> Err [Language.Rzk.Syntax.Abs.Pattern]-pListPattern = fmap snd . pListPattern_internal--pPattern1 :: [Token] -> Err Language.Rzk.Syntax.Abs.Pattern-pPattern1 = fmap snd . pPattern1_internal--pListPattern1 :: [Token] -> Err [Language.Rzk.Syntax.Abs.Pattern]-pListPattern1 = fmap snd . pListPattern1_internal--pParam :: [Token] -> Err Language.Rzk.Syntax.Abs.Param-pParam = fmap snd . pParam_internal--pListParam :: [Token] -> Err [Language.Rzk.Syntax.Abs.Param]-pListParam = fmap snd . pListParam_internal--pBind :: [Token] -> Err Language.Rzk.Syntax.Abs.Bind-pBind = fmap snd . pBind_internal--pParamDecl :: [Token] -> Err Language.Rzk.Syntax.Abs.ParamDecl-pParamDecl = fmap snd . pParamDecl_internal--pSigmaParam :: [Token] -> Err Language.Rzk.Syntax.Abs.SigmaParam-pSigmaParam = fmap snd . pSigmaParam_internal--pListSigmaParam :: [Token] -> Err [Language.Rzk.Syntax.Abs.SigmaParam]-pListSigmaParam = fmap snd . pListSigmaParam_internal--pRestriction :: [Token] -> Err Language.Rzk.Syntax.Abs.Restriction-pRestriction = fmap snd . pRestriction_internal--pListRestriction :: [Token] -> Err [Language.Rzk.Syntax.Abs.Restriction]-pListRestriction = fmap snd . pListRestriction_internal--pModality :: [Token] -> Err Language.Rzk.Syntax.Abs.Modality-pModality = fmap snd . pModality_internal--pModComp :: [Token] -> Err Language.Rzk.Syntax.Abs.ModComp-pModComp = fmap snd . pModComp_internal+  , pModalColon+  , pTerm7+  , pTerm5+  , pTerm4+  , pTerm3+  , pTerm2+  , pTerm6+  , pTerm1+  , pTerm+  , pListTerm+  ) where++import Prelude++import qualified Language.Rzk.Syntax.Abs+import Language.Rzk.Syntax.Lex+import qualified Data.Text+import qualified Control.Monad as Happy_Prelude+import qualified Data.Bool as Happy_Prelude+import qualified Data.Function as Happy_Prelude+import qualified Data.Int as Happy_Prelude+import qualified Data.List as Happy_Prelude+import qualified Data.Maybe as Happy_Prelude+import qualified Data.String as Happy_Prelude+import qualified Data.Tuple as Happy_Prelude+import qualified GHC.Err as Happy_Prelude+import qualified GHC.Num as Happy_Prelude+import qualified Text.Show as Happy_Prelude+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 2.2++newtype HappyAbsSyn  = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = Happy_GHC_Exts.Any+#else+type HappyAny = forall a . a+#endif+newtype HappyWrap38 = HappyWrap38 ((Language.Rzk.Syntax.Abs.BNFC'Position, String))+happyIn38 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, String)) -> (HappyAbsSyn )+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap38 x)+{-# INLINE happyIn38 #-}+happyOut38 :: (HappyAbsSyn ) -> HappyWrap38+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut38 #-}+newtype HappyWrap39 = HappyWrap39 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdentToken))+happyIn39 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdentToken)) -> (HappyAbsSyn )+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap39 x)+{-# INLINE happyIn39 #-}+happyOut39 :: (HappyAbsSyn ) -> HappyWrap39+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut39 #-}+newtype HappyWrap40 = HappyWrap40 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdentToken))+happyIn40 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdentToken)) -> (HappyAbsSyn )+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap40 x)+{-# INLINE happyIn40 #-}+happyOut40 :: (HappyAbsSyn ) -> HappyWrap40+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut40 #-}+newtype HappyWrap41 = HappyWrap41 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Module))+happyIn41 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Module)) -> (HappyAbsSyn )+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap41 x)+{-# INLINE happyIn41 #-}+happyOut41 :: (HappyAbsSyn ) -> HappyWrap41+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut41 #-}+newtype HappyWrap42 = HappyWrap42 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdent))+happyIn42 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdent)) -> (HappyAbsSyn )+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap42 x)+{-# INLINE happyIn42 #-}+happyOut42 :: (HappyAbsSyn ) -> HappyWrap42+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut42 #-}+newtype HappyWrap43 = HappyWrap43 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdent))+happyIn43 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdent)) -> (HappyAbsSyn )+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap43 x)+{-# INLINE happyIn43 #-}+happyOut43 :: (HappyAbsSyn ) -> HappyWrap43+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut43 #-}+newtype HappyWrap44 = HappyWrap44 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.VarIdent]))+happyIn44 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.VarIdent])) -> (HappyAbsSyn )+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap44 x)+{-# INLINE happyIn44 #-}+happyOut44 :: (HappyAbsSyn ) -> HappyWrap44+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut44 #-}+newtype HappyWrap45 = HappyWrap45 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.LanguageDecl))+happyIn45 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.LanguageDecl)) -> (HappyAbsSyn )+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap45 x)+{-# INLINE happyIn45 #-}+happyOut45 :: (HappyAbsSyn ) -> HappyWrap45+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut45 #-}+newtype HappyWrap46 = HappyWrap46 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Language))+happyIn46 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Language)) -> (HappyAbsSyn )+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap46 x)+{-# INLINE happyIn46 #-}+happyOut46 :: (HappyAbsSyn ) -> HappyWrap46+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut46 #-}+newtype HappyWrap47 = HappyWrap47 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Command))+happyIn47 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Command)) -> (HappyAbsSyn )+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap47 x)+{-# INLINE happyIn47 #-}+happyOut47 :: (HappyAbsSyn ) -> HappyWrap47+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut47 #-}+newtype HappyWrap48 = HappyWrap48 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Command]))+happyIn48 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Command])) -> (HappyAbsSyn )+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap48 x)+{-# INLINE happyIn48 #-}+happyOut48 :: (HappyAbsSyn ) -> HappyWrap48+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut48 #-}+newtype HappyWrap49 = HappyWrap49 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.DeclUsedVars))+happyIn49 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.DeclUsedVars)) -> (HappyAbsSyn )+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap49 x)+{-# INLINE happyIn49 #-}+happyOut49 :: (HappyAbsSyn ) -> HappyWrap49+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut49 #-}+newtype HappyWrap50 = HappyWrap50 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SectionName))+happyIn50 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SectionName)) -> (HappyAbsSyn )+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap50 x)+{-# INLINE happyIn50 #-}+happyOut50 :: (HappyAbsSyn ) -> HappyWrap50+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut50 #-}+newtype HappyWrap51 = HappyWrap51 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern))+happyIn51 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern)) -> (HappyAbsSyn )+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap51 x)+{-# INLINE happyIn51 #-}+happyOut51 :: (HappyAbsSyn ) -> HappyWrap51+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut51 #-}+newtype HappyWrap52 = HappyWrap52 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern]))+happyIn52 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern])) -> (HappyAbsSyn )+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap52 x)+{-# INLINE happyIn52 #-}+happyOut52 :: (HappyAbsSyn ) -> HappyWrap52+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut52 #-}+newtype HappyWrap53 = HappyWrap53 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern))+happyIn53 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern)) -> (HappyAbsSyn )+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap53 x)+{-# INLINE happyIn53 #-}+happyOut53 :: (HappyAbsSyn ) -> HappyWrap53+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut53 #-}+newtype HappyWrap54 = HappyWrap54 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern]))+happyIn54 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern])) -> (HappyAbsSyn )+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap54 x)+{-# INLINE happyIn54 #-}+happyOut54 :: (HappyAbsSyn ) -> HappyWrap54+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut54 #-}+newtype HappyWrap55 = HappyWrap55 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Param))+happyIn55 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Param)) -> (HappyAbsSyn )+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap55 x)+{-# INLINE happyIn55 #-}+happyOut55 :: (HappyAbsSyn ) -> HappyWrap55+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut55 #-}+newtype HappyWrap56 = HappyWrap56 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Param]))+happyIn56 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Param])) -> (HappyAbsSyn )+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap56 x)+{-# INLINE happyIn56 #-}+happyOut56 :: (HappyAbsSyn ) -> HappyWrap56+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut56 #-}+newtype HappyWrap57 = HappyWrap57 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Bind))+happyIn57 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Bind)) -> (HappyAbsSyn )+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap57 x)+{-# INLINE happyIn57 #-}+happyOut57 :: (HappyAbsSyn ) -> HappyWrap57+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut57 #-}+newtype HappyWrap58 = HappyWrap58 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ParamDecl))+happyIn58 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ParamDecl)) -> (HappyAbsSyn )+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap58 x)+{-# INLINE happyIn58 #-}+happyOut58 :: (HappyAbsSyn ) -> HappyWrap58+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut58 #-}+newtype HappyWrap59 = HappyWrap59 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SigmaParam))+happyIn59 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SigmaParam)) -> (HappyAbsSyn )+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap59 x)+{-# INLINE happyIn59 #-}+happyOut59 :: (HappyAbsSyn ) -> HappyWrap59+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut59 #-}+newtype HappyWrap60 = HappyWrap60 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.SigmaParam]))+happyIn60 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.SigmaParam])) -> (HappyAbsSyn )+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap60 x)+{-# INLINE happyIn60 #-}+happyOut60 :: (HappyAbsSyn ) -> HappyWrap60+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut60 #-}+newtype HappyWrap61 = HappyWrap61 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Restriction))+happyIn61 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Restriction)) -> (HappyAbsSyn )+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap61 x)+{-# INLINE happyIn61 #-}+happyOut61 :: (HappyAbsSyn ) -> HappyWrap61+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut61 #-}+newtype HappyWrap62 = HappyWrap62 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Restriction]))+happyIn62 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Restriction])) -> (HappyAbsSyn )+happyIn62 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap62 x)+{-# INLINE happyIn62 #-}+happyOut62 :: (HappyAbsSyn ) -> HappyWrap62+happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut62 #-}+newtype HappyWrap63 = HappyWrap63 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Modality))+happyIn63 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Modality)) -> (HappyAbsSyn )+happyIn63 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap63 x)+{-# INLINE happyIn63 #-}+happyOut63 :: (HappyAbsSyn ) -> HappyWrap63+happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut63 #-}+newtype HappyWrap64 = HappyWrap64 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ModComp))+happyIn64 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ModComp)) -> (HappyAbsSyn )+happyIn64 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap64 x)+{-# INLINE happyIn64 #-}+happyOut64 :: (HappyAbsSyn ) -> HappyWrap64+happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut64 #-}+newtype HappyWrap65 = HappyWrap65 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ModalColon))+happyIn65 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ModalColon)) -> (HappyAbsSyn )+happyIn65 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap65 x)+{-# INLINE happyIn65 #-}+happyOut65 :: (HappyAbsSyn ) -> HappyWrap65+happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut65 #-}+newtype HappyWrap66 = HappyWrap66 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))+happyIn66 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )+happyIn66 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap66 x)+{-# INLINE happyIn66 #-}+happyOut66 :: (HappyAbsSyn ) -> HappyWrap66+happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut66 #-}+newtype HappyWrap67 = HappyWrap67 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))+happyIn67 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )+happyIn67 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap67 x)+{-# INLINE happyIn67 #-}+happyOut67 :: (HappyAbsSyn ) -> HappyWrap67+happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut67 #-}+newtype HappyWrap68 = HappyWrap68 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))+happyIn68 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )+happyIn68 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap68 x)+{-# INLINE happyIn68 #-}+happyOut68 :: (HappyAbsSyn ) -> HappyWrap68+happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut68 #-}+newtype HappyWrap69 = HappyWrap69 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))+happyIn69 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )+happyIn69 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap69 x)+{-# INLINE happyIn69 #-}+happyOut69 :: (HappyAbsSyn ) -> HappyWrap69+happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut69 #-}+newtype HappyWrap70 = HappyWrap70 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))+happyIn70 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )+happyIn70 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap70 x)+{-# INLINE happyIn70 #-}+happyOut70 :: (HappyAbsSyn ) -> HappyWrap70+happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut70 #-}+newtype HappyWrap71 = HappyWrap71 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))+happyIn71 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )+happyIn71 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap71 x)+{-# INLINE happyIn71 #-}+happyOut71 :: (HappyAbsSyn ) -> HappyWrap71+happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut71 #-}+newtype HappyWrap72 = HappyWrap72 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))+happyIn72 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )+happyIn72 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap72 x)+{-# INLINE happyIn72 #-}+happyOut72 :: (HappyAbsSyn ) -> HappyWrap72+happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut72 #-}+newtype HappyWrap73 = HappyWrap73 ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term))+happyIn73 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term)) -> (HappyAbsSyn )+happyIn73 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap73 x)+{-# INLINE happyIn73 #-}+happyOut73 :: (HappyAbsSyn ) -> HappyWrap73+happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut73 #-}+newtype HappyWrap74 = HappyWrap74 ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Term]))+happyIn74 :: ((Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Term])) -> (HappyAbsSyn )+happyIn74 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap74 x)+{-# INLINE happyIn74 #-}+happyOut74 :: (HappyAbsSyn ) -> HappyWrap74+happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut74 #-}+happyInTok :: (Token) -> (HappyAbsSyn )+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn ) -> (Token)+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOutTok #-}+++{-# NOINLINE happyTokenStrings #-}+happyTokenStrings = ["'#assume'","'#check'","'#compute'","'#compute-nf'","'#compute-whnf'","'#def'","'#define'","'#end'","'#lang'","'#postulate'","'#section'","'#set-option'","'#unset-option'","'#variable'","'#variables'","'$extract$'","'('","')'","'*'","'*_1'","'*\8321'","','","'->'","'/'","'/\\\\'","'0_2'","'0_I'","'0\7522'","'0\8322'","'1'","'1_2'","'1_I'","'1\7522'","'1\8322'","'2'","':'","':='","':_#'","':_b'","':_id'","':_op'","':\7506\7510'","':\9837'","':\9839'","';'","'<'","'<='","'='","'==='","'=_{'","'>'","'BOT'","'CUBE'","'II'","'Sigma'","'TOP'","'TOPE'","'U'","'Unit'","'['","'\\\\'","'\\\\/'","']'","'_#'","'_b'","'_id'","'_op'","'as'","'first'","'flip_op'","'flip\7506\7510'","'idJ'","'in'","'inv_op'","'inv\7506\7510'","'let'","'mod'","'recBOT'","'recOR'","'refl'","'refl_{'","'rzk-1'","'second'","'unflip_op'","'unflip\7506\7510'","'uninv_op'","'uninv\7506\7510'","'unit'","'uses'","'{'","'|'","'|->'","'}'","'\215'","'\931'","'\960\8321'","'\960\8322'","'\7506\7510'","'\8594'","'\8614'","'\8721'","'\8743'","'\8744'","'\8801'","'\8804'","'\8868'","'\8869'","'\9837'","'\9839'","'\120128'","L_quoted","L_VarIdentToken","L_HoleIdentToken","%eof"]++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\xf9\xff\xff\xff\xae\xff\xff\xff\xbe\xff\xff\xff\xbe\xff\xff\xff\x2b\x00\x00\x00\x06\x00\x00\x00\xaa\x0a\x00\x00\xaa\x0a\x00\x00\x30\x00\x00\x00\x48\x00\x00\x00\xf5\xff\xff\xff\xf5\xff\xff\xff\xf5\xff\xff\xff\xf5\xff\xff\xff\x11\x00\x00\x00\x11\x00\x00\x00\xf5\xff\xff\xff\x52\x00\x00\x00\xf5\xff\xff\xff\xf5\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xfb\x00\x00\x00\xfb\x00\x00\x00\xc5\x0a\x00\x00\x30\x02\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\x70\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\x30\x02\x00\x00\x00\x00\x00\x00\x08\x01\x00\x00\x13\x00\x00\x00\xe2\xff\xff\xff\xd7\xff\xff\xff\x74\x01\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x8b\x00\x00\x00\xfb\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xef\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x02\x00\x00\x30\x02\x00\x00\x30\x02\x00\x00\x17\x01\x00\x00\x30\x02\x00\x00\x30\x02\x00\x00\x07\x00\x00\x00\xfb\x00\x00\x00\x00\x00\x00\x00\x18\x01\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x30\x02\x00\x00\x30\x02\x00\x00\x30\x02\x00\x00\x30\x02\x00\x00\x30\x02\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x19\x01\x00\x00\x30\x02\x00\x00\x30\x02\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\xa5\x00\x00\x00\x27\x00\x00\x00\xa5\x00\x00\x00\x12\x01\x00\x00\xf0\xff\xff\xff\xa5\x00\x00\x00\xd2\x01\x00\x00\xa5\x00\x00\x00\xa5\x00\x00\x00\xa8\x00\x00\x00\xa5\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\x20\x01\x00\x00\xd7\x00\x00\x00\xd7\x00\x00\x00\x39\x01\x00\x00\xde\x00\x00\x00\xb8\xff\xff\xff\xde\x00\x00\x00\x00\x00\x00\x00\x99\x0a\x00\x00\x3b\x01\x00\x00\xe4\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\xe4\x00\x00\x00\xe4\x00\x00\x00\xd2\x01\x00\x00\x34\x01\x00\x00\xec\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\xec\x00\x00\x00\x12\x00\x00\x00\x12\x00\x00\x00\xec\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\xf3\x00\x00\x00\xf3\x00\x00\x00\x12\x00\x00\x00\xf3\x00\x00\x00\xf3\x00\x00\x00\x00\x00\x00\x00\xf3\x00\x00\x00\xf3\x00\x00\x00\x5b\x01\x00\x00\x4b\x01\x00\x00\x09\x01\x00\x00\x11\x01\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\x11\x01\x00\x00\x11\x01\x00\x00\x11\x01\x00\x00\x11\x01\x00\x00\x11\x01\x00\x00\x1d\x01\x00\x00\x1d\x01\x00\x00\x16\x01\x00\x00\x16\x01\x00\x00\x15\x01\x00\x00\x15\x01\x00\x00\x00\x00\x00\x00\x15\x01\x00\x00\x5f\x01\x00\x00\x42\x01\x00\x00\x4d\x01\x00\x00\x4d\x01\x00\x00\x4d\x01\x00\x00\x4d\x01\x00\x00\xaa\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x01\x00\x00\xa4\x01\x00\x00\xb5\x01\x00\x00\x00\x00\x00\x00\xaa\x01\x00\x00\x00\x00\x00\x00\x82\x01\x00\x00\x00\x00\x00\x00\x82\x01\x00\x00\x82\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x01\x00\x00\xc6\x01\x00\x00\xaa\x0a\x00\x00\x89\x01\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\xd9\x01\x00\x00\x69\x00\x00\x00\xa3\x0a\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\xff\xff\xf9\x01\x00\x00\x12\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xfb\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\x06\x01\x00\x00\xb4\x00\x00\x00\xf0\xff\xff\xff\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\xec\x01\x00\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\xf6\xff\xff\xff\xf0\xff\xff\xff\x30\x02\x00\x00\xf2\x01\x00\x00\xfb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x12\x00\x00\x00\x78\x00\x00\x00\x32\x0a\x00\x00\x30\x02\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\xb4\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x38\x00\x00\x00\x38\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xac\x0a\x00\x00\x05\x02\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\x07\x02\x00\x00\x12\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x14\x02\x00\x00\xf2\xff\xff\xff\xf0\xff\xff\xff\x00\x00\x00\x00\x7a\x00\x00\x00\xf0\xff\xff\xff\xb5\x0a\x00\x00\x12\x02\x00\x00\xbe\x0a\x00\x00\x20\x02\x00\x00\xda\x01\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00\xd2\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\x12\x00\x00\x00\x08\x02\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\x00\x00\x00\x00\x26\x02\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\x1e\x00\x00\x00\x57\x00\x00\x00\x80\x00\x00\x00\xea\x01\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x02\x00\x00\xf0\xff\xff\xff\x38\x02\x00\x00\xf0\xff\xff\xff\x39\x02\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x02\x00\x00\xf1\xff\xff\xff\x6b\x00\x00\x00\x00\x00\x00\x00\x24\x01\x00\x00\xb4\x00\x00\x00\x12\x00\x00\x00\xf0\xff\xff\xff\x12\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\x50\x00\x00\x00\xf0\xff\xff\xff\x03\x02\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x2c\x02\x00\x00\x49\x02\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\x48\x02\x00\x00\x4f\x02\x00\x00\x71\x00\x00\x00\x2d\x01\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x02\x00\x00\x71\x02\x00\x00\x72\x02\x00\x00\x6f\x02\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\x70\x02\x00\x00\x00\x00\x00\x00\x77\x02\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x78\x02\x00\x00\x82\x02\x00\x00\x83\x02\x00\x00\x9e\x02\x00\x00\x9f\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\x74\x02\x00\x00\xf0\xff\xff\xff\x8d\x02\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x93\x02\x00\x00\xf0\xff\xff\xff\x94\x02\x00\x00\xf0\xff\xff\xff\x5e\x02\x00\x00\xaa\x02\x00\x00\xb5\x02\x00\x00\xb6\x02\x00\x00\xc1\x02\x00\x00\xc2\x02\x00\x00\xc3\x02\x00\x00\xcc\x02\x00\x00\xcd\x02\x00\x00\x8f\x02\x00\x00\x98\x02\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xa5\x02\x00\x00\xf0\xff\xff\xff\xd9\x02\x00\x00\xde\x02\x00\x00\xec\x02\x00\x00\xf2\x02\x00\x00\xf3\x02\x00\x00\xf4\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xf1\x02\x00\x00\xf0\xff\xff\xff\xf7\x02\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x02\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x00\x10\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x11\x03\x00\x00\xf0\xff\xff\xff\x21\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x55\x01\x00\x00\xad\x00\x00\x00\x98\x01\x00\x00\xb5\x00\x00\x00\x30\x03\x00\x00\x32\x03\x00\x00\x2f\x03\x00\x00\x0e\x00\x00\x00\x2e\x03\x00\x00\xc7\x01\x00\x00\x15\x00\x00\x00\x9a\x01\x00\x00\xba\x0a\x00\x00\x6b\x01\x00\x00\x0d\x01\x00\x00\x87\x02\x00\x00\x99\x01\x00\x00\xa0\x01\x00\x00\xc9\x01\x00\x00\xba\x01\x00\x00\x31\x03\x00\x00\xc9\x02\x00\x00\x22\x03\x00\x00\x9e\x00\x00\x00\x24\x03\x00\x00\x41\x01\x00\x00\x9f\x09\x00\x00\x99\x09\x00\x00\x68\x09\x00\x00\x15\x09\x00\x00\x54\x02\x00\x00\x22\x08\x00\x00\x42\x03\x00\x00\x8c\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\x72\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x00\x00\x58\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\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\x79\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x02\x00\x00\x3c\x03\x00\x00\xdb\x09\x00\x00\x00\x00\x00\x00\xec\x09\x00\x00\xf1\x09\x00\x00\xf7\x01\x00\x00\x23\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x03\x00\x00\xf7\x09\x00\x00\xfc\x09\x00\x00\x02\x0a\x00\x00\x0a\x0a\x00\x00\x15\x0a\x00\x00\x00\x00\x00\x00\xe7\x00\x00\x00\x00\x00\x00\x00\x1b\x0a\x00\x00\x20\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x0a\x00\x00\x7f\x03\x00\x00\x00\x00\x00\x00\x26\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x0a\x00\x00\x00\x00\x00\x00\xf8\x01\x00\x00\xac\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\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\xdc\x00\x00\x00\x90\x03\x00\x00\xa6\x03\x00\x00\xb7\x03\x00\x00\xcd\x03\x00\x00\x9b\x01\x00\x00\xb9\x01\x00\x00\x25\x02\x00\x00\xd8\x01\x00\x00\xff\x02\x00\x00\x49\x03\x00\x00\x4b\x03\x00\x00\xf6\x01\x00\x00\x0e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x03\x00\x00\x69\x01\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\x4c\x03\x00\x00\x00\x00\x00\x00\x5b\x03\x00\x00\x5c\x03\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\x35\x02\x00\x00\x00\x00\x00\x00\x96\x0a\x00\x00\x00\x00\x00\x00\x56\x02\x00\x00\x4d\x03\x00\x00\x00\x00\x00\x00\xde\x03\x00\x00\x00\x00\x00\x00\xda\x02\x00\x00\x00\x00\x00\x00\x18\x02\x00\x00\xf4\x03\x00\x00\x05\x04\x00\x00\x1b\x04\x00\x00\x2c\x04\x00\x00\xfd\x02\x00\x00\x50\x03\x00\x00\x76\x02\x00\x00\x08\x03\x00\x00\x00\x00\x00\x00\x26\x09\x00\x00\x42\x04\x00\x00\x27\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x0a\x00\x00\x00\x00\x00\x00\xd6\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x03\x00\x00\x2b\x0a\x00\x00\x00\x00\x00\x00\xf7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x0a\x00\x00\x00\x00\x00\x00\x54\x03\x00\x00\x31\x0a\x00\x00\xa2\x02\x00\x00\x38\x08\x00\x00\x36\x09\x00\x00\x47\x09\x00\x00\x78\x09\x00\x00\x89\x09\x00\x00\xaa\x09\x00\x00\xbd\x09\x00\x00\xc8\x09\x00\x00\xce\x09\x00\x00\x00\x00\x00\x00\x49\x08\x00\x00\x5a\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\x69\x04\x00\x00\x00\x00\x00\x00\x7a\x04\x00\x00\x90\x04\x00\x00\xa1\x04\x00\x00\xb7\x04\x00\x00\x55\x03\x00\x00\x00\x00\x00\x00\x6b\x08\x00\x00\x7c\x08\x00\x00\x00\x00\x00\x00\x5b\x02\x00\x00\xc8\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\x04\x00\x00\x57\x03\x00\x00\x00\x00\x00\x00\x61\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x0a\x00\x00\x39\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x05\x00\x00\x16\x05\x00\x00\x2c\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x05\x00\x00\x53\x05\x00\x00\x82\x0a\x00\x00\x84\x0a\x00\x00\x8d\x0a\x00\x00\x73\x03\x00\x00\x64\x05\x00\x00\x7a\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x05\x00\x00\x00\x00\x00\x00\xa1\x05\x00\x00\x00\x00\x00\x00\xb2\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\x57\x09\x00\x00\x4b\x0a\x00\x00\xc8\x05\x00\x00\x61\x0a\x00\x00\xd9\x05\x00\x00\xef\x05\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x16\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x0a\x00\x00\x3d\x06\x00\x00\x4e\x06\x00\x00\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\x06\x00\x00\x00\x00\x00\x00\xb3\x02\x00\x00\x00\x00\x00\x00\x75\x06\x00\x00\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\x06\x00\x00\x9c\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x0a\x00\x00\x00\x00\x00\x00\xc3\x06\x00\x00\x00\x00\x00\x00\xd9\x06\x00\x00\xea\x06\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x11\x07\x00\x00\x00\x00\x00\x00\x27\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x07\x00\x00\x00\x00\x00\x00\x4e\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\x5f\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\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\x8d\x08\x00\x00\x9e\x08\x00\x00\xaf\x08\x00\x00\x00\x00\x00\x00\x86\x07\x00\x00\x00\x00\x00\x00\x9c\x07\x00\x00\x00\x00\x00\x00\xc0\x08\x00\x00\xd1\x08\x00\x00\xe2\x08\x00\x00\xf3\x08\x00\x00\x04\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x07\x00\x00\x00\x00\x00\x00\xc3\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\xd4\x07\x00\x00\x00\x00\x00\x00\xea\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\xfb\x07\x00\x00\x00\x00\x00\x00\x11\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = 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\xc2\xff\xff\xff\xbf\xff\xff\xff\xbe\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xd8\xff\xff\xff\xd9\xff\xff\xff\x6e\xff\xff\xff\x6d\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x47\xff\xff\xff\x5d\xff\xff\xff\x59\xff\xff\xff\x56\xff\xff\xff\x3b\xff\xff\xff\x61\xff\xff\xff\x32\xff\xff\xff\x31\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\xff\xff\xff\x85\xff\xff\xff\x6a\xff\xff\xff\x67\xff\xff\xff\x80\xff\xff\xff\x83\xff\xff\xff\x86\xff\xff\xff\x69\xff\xff\xff\x66\xff\xff\xff\x7f\xff\xff\xff\x82\xff\xff\xff\x84\xff\xff\xff\x00\x00\x00\x00\x64\xff\xff\xff\x88\xff\xff\xff\x68\xff\xff\xff\x00\x00\x00\x00\x65\xff\xff\xff\x87\xff\xff\xff\x89\xff\xff\xff\x79\xff\xff\xff\x00\x00\x00\x00\x96\xff\xff\xff\x98\xff\xff\xff\x93\xff\xff\xff\x94\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\xff\xff\xff\x00\x00\x00\x00\x72\xff\xff\xff\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\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\xff\xff\xff\x00\x00\x00\x00\x7e\xff\xff\xff\x7d\xff\xff\xff\x99\xff\xff\xff\x97\xff\xff\xff\x81\xff\xff\xff\xdc\xff\xff\xff\xdb\xff\xff\xff\x00\x00\x00\x00\x3b\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\xff\xff\xff\x8c\xff\xff\xff\x8d\xff\xff\xff\x8a\xff\xff\xff\x8e\xff\xff\xff\x90\xff\xff\xff\x8f\xff\xff\xff\x92\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9b\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\xff\xff\xff\x00\x00\x00\x00\x9f\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbc\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa9\xff\xff\xff\xab\xff\xff\xff\x00\x00\x00\x00\xb3\xff\xff\xff\xad\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\xff\xff\xff\xb5\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb8\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\xff\xff\xff\x00\x00\x00\x00\xbe\xff\xff\xff\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\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd7\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xff\xff\xff\xda\xff\xff\xff\xd6\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\xff\xff\xff\x00\x00\x00\x00\xc8\xff\xff\xff\xbf\xff\xff\xff\xc7\xff\xff\xff\xbf\xff\xff\xff\xbf\xff\xff\xff\xcf\xff\xff\xff\xce\xff\xff\xff\xd0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xff\xff\xff\x00\x00\x00\x00\xb7\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb8\xff\xff\xff\x00\x00\x00\x00\xac\xff\xff\xff\x00\x00\x00\x00\x4b\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\x49\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\xff\xff\xff\x51\xff\xff\xff\x4e\xff\xff\xff\x4d\xff\xff\xff\x45\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\xff\xff\xff\x53\xff\xff\xff\x00\x00\x00\x00\x50\xff\xff\xff\x4f\xff\xff\xff\x46\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x44\xff\xff\xff\x3a\xff\xff\xff\x5e\xff\xff\xff\x5f\xff\xff\xff\x5c\xff\xff\xff\x5b\xff\xff\xff\x5a\xff\xff\xff\x58\xff\xff\xff\x57\xff\xff\xff\x55\xff\xff\xff\x33\xff\xff\xff\x30\xff\xff\xff\x4a\xff\xff\xff\x00\x00\x00\x00\x6c\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\xff\xff\xff\x62\xff\xff\xff\x60\xff\xff\xff\x91\xff\xff\xff\x9a\xff\xff\xff\x9d\xff\xff\xff\x9c\xff\xff\xff\xa1\xff\xff\xff\xa0\xff\xff\xff\x9e\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xaa\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\xff\xff\xff\x00\x00\x00\x00\xc1\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xc9\xff\xff\xff\xca\xff\xff\xff\xd3\xff\xff\xff\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\xff\xff\xff\xcb\xff\xff\xff\xc0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\xff\xff\xff\x36\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\x00\x00\x00\x00\x77\xff\xff\xff\x00\x00\x00\x00\xa8\xff\xff\xff\x00\x00\x00\x00\x63\xff\xff\xff\x78\xff\xff\xff\xa1\xff\xff\xff\xa0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa6\xff\xff\xff\xa1\xff\xff\xff\xa0\xff\xff\xff\x00\x00\x00\x00\xa1\xff\xff\xff\x00\x00\x00\x00\x40\xff\xff\xff\xba\xff\xff\xff\x00\x00\x00\x00\xaf\xff\xff\xff\x00\x00\x00\x00\xb2\xff\xff\xff\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\xff\xff\xff\x00\x00\x00\x00\xcd\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\x76\xff\xff\xff\xa7\xff\xff\xff\x00\x00\x00\x00\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\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\xff\xff\xff\xae\xff\xff\xff\xb1\xff\xff\xff\xb0\xff\xff\xff\xc3\xff\xff\xff\x00\x00\x00\x00\xc5\xff\xff\xff\x00\x00\x00\x00\xc6\xff\xff\xff\xc4\xff\xff\xff\x34\xff\xff\xff\x35\xff\xff\xff\x41\xff\xff\xff\x42\xff\xff\xff\x43\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x3c\xff\xff\xff\x00\x00\x00\x00\x37\xff\xff\xff\x38\xff\xff\xff\x39\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa5\xff\xff\xff\x7a\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xff\xff\xff"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\xff\xff\x11\x00\x00\x00\x12\x00\x00\x00\x0a\x00\x00\x00\x13\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x12\x00\x00\x00\x31\x00\x00\x00\x17\x00\x00\x00\x33\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x5d\x00\x00\x00\x01\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x12\x00\x00\x00\x05\x00\x00\x00\x25\x00\x00\x00\x45\x00\x00\x00\x65\x00\x00\x00\x12\x00\x00\x00\x2f\x00\x00\x00\x72\x00\x00\x00\x3f\x00\x00\x00\x0d\x00\x00\x00\x12\x00\x00\x00\x12\x00\x00\x00\x35\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x1a\x00\x00\x00\x3e\x00\x00\x00\x71\x00\x00\x00\x12\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x0a\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x18\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x25\x00\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x68\x00\x00\x00\x5b\x00\x00\x00\x14\x00\x00\x00\x5c\x00\x00\x00\x59\x00\x00\x00\x5d\x00\x00\x00\x60\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x00\x00\x5e\x00\x00\x00\x4e\x00\x00\x00\x66\x00\x00\x00\x65\x00\x00\x00\x31\x00\x00\x00\x53\x00\x00\x00\x33\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x59\x00\x00\x00\x71\x00\x00\x00\x72\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x59\x00\x00\x00\x71\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x12\x00\x00\x00\x59\x00\x00\x00\x59\x00\x00\x00\x5b\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x59\x00\x00\x00\x71\x00\x00\x00\x5b\x00\x00\x00\x67\x00\x00\x00\x12\x00\x00\x00\x25\x00\x00\x00\x71\x00\x00\x00\x13\x00\x00\x00\x18\x00\x00\x00\x17\x00\x00\x00\x2f\x00\x00\x00\x71\x00\x00\x00\x71\x00\x00\x00\x13\x00\x00\x00\x12\x00\x00\x00\x64\x00\x00\x00\x35\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x5a\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x71\x00\x00\x00\x18\x00\x00\x00\x17\x00\x00\x00\x12\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x5f\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x13\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x25\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x25\x00\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5c\x00\x00\x00\x5b\x00\x00\x00\x5e\x00\x00\x00\x02\x00\x00\x00\x59\x00\x00\x00\x04\x00\x00\x00\x5b\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x71\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x14\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x59\x00\x00\x00\x71\x00\x00\x00\x72\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x5c\x00\x00\x00\x71\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x64\x00\x00\x00\x59\x00\x00\x00\x5c\x00\x00\x00\x5b\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x59\x00\x00\x00\x71\x00\x00\x00\x5b\x00\x00\x00\x64\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x70\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x2f\x00\x00\x00\x71\x00\x00\x00\x5c\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x01\x00\x00\x00\x35\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x05\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x71\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0d\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x17\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x73\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x12\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x5f\x00\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x1a\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x00\x00\x73\x00\x00\x00\x13\x00\x00\x00\x0d\x00\x00\x00\x73\x00\x00\x00\x14\x00\x00\x00\x17\x00\x00\x00\x11\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x12\x00\x00\x00\x71\x00\x00\x00\x72\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x12\x00\x00\x00\x12\x00\x00\x00\x12\x00\x00\x00\x12\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x13\x00\x00\x00\x30\x00\x00\x00\x19\x00\x00\x00\x32\x00\x00\x00\x17\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x13\x00\x00\x00\x2f\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x17\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x35\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x73\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x17\x00\x00\x00\x73\x00\x00\x00\x17\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x73\x00\x00\x00\x03\x00\x00\x00\x25\x00\x00\x00\x19\x00\x00\x00\x49\x00\x00\x00\x07\x00\x00\x00\x1c\x00\x00\x00\x63\x00\x00\x00\x73\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x17\x00\x00\x00\x73\x00\x00\x00\x5f\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x01\x00\x00\x00\x59\x00\x00\x00\x01\x00\x00\x00\x12\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x05\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x63\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x2e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x73\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x71\x00\x00\x00\x71\x00\x00\x00\x72\x00\x00\x00\x73\x00\x00\x00\x12\x00\x00\x00\x71\x00\x00\x00\x73\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x19\x00\x00\x00\x18\x00\x00\x00\x70\x00\x00\x00\x1c\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x2f\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x35\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x13\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x53\x00\x00\x00\x71\x00\x00\x00\x14\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x49\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\x73\x00\x00\x00\x21\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x0d\x00\x00\x00\x01\x00\x00\x00\x25\x00\x00\x00\x01\x00\x00\x00\x2e\x00\x00\x00\x05\x00\x00\x00\x59\x00\x00\x00\x05\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x63\x00\x00\x00\x64\x00\x00\x00\x01\x00\x00\x00\x25\x00\x00\x00\x31\x00\x00\x00\x5a\x00\x00\x00\x05\x00\x00\x00\x15\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x12\x00\x00\x00\x71\x00\x00\x00\x72\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x19\x00\x00\x00\x25\x00\x00\x00\x25\x00\x00\x00\x1c\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x71\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\x25\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x2f\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x35\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x13\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x17\x00\x00\x00\x25\x00\x00\x00\x14\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x19\x00\x00\x00\x26\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x49\x00\x00\x00\x17\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x21\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x0d\x00\x00\x00\x01\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x17\x00\x00\x00\x05\x00\x00\x00\x59\x00\x00\x00\x05\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x63\x00\x00\x00\x01\x00\x00\x00\x17\x00\x00\x00\x5e\x00\x00\x00\x13\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x15\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x12\x00\x00\x00\x71\x00\x00\x00\x72\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x19\x00\x00\x00\x40\x00\x00\x00\x25\x00\x00\x00\x1c\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x70\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x25\x00\x00\x00\x25\x00\x00\x00\x2f\x00\x00\x00\x05\x00\x00\x00\x5e\x00\x00\x00\x5c\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x35\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x0d\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x19\x00\x00\x00\x13\x00\x00\x00\x26\x00\x00\x00\x1c\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x21\x00\x00\x00\x4a\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x49\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x34\x00\x00\x00\x13\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x34\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x01\x00\x00\x00\x59\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x63\x00\x00\x00\x0d\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x21\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x26\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x14\x00\x00\x00\x71\x00\x00\x00\x72\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x26\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x26\x00\x00\x00\x26\x00\x00\x00\x19\x00\x00\x00\x5e\x00\x00\x00\x13\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x14\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x19\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x5e\x00\x00\x00\x14\x00\x00\x00\x4a\x00\x00\x00\x17\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x19\x00\x00\x00\x5c\x00\x00\x00\x17\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x05\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x17\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x19\x00\x00\x00\x5e\x00\x00\x00\x17\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x19\x00\x00\x00\x14\x00\x00\x00\x13\x00\x00\x00\x1c\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x19\x00\x00\x00\x17\x00\x00\x00\x21\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x13\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x07\x00\x00\x00\x09\x00\x00\x00\x0b\x00\x00\x00\x08\x00\x00\x00\x19\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x19\x00\x00\x00\x14\x00\x00\x00\x0b\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x0b\x00\x00\x00\x0b\x00\x00\x00\x1b\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1b\x00\x00\x00\x1b\x00\x00\x00\x19\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x1b\x00\x00\x00\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\xff\xff\xff\xff\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\xff\xff\xff\xff\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x0d\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\xff\xff\xff\xff\x21\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x1e\x00\x00\x00\x19\x00\x00\x00\x0d\x00\x00\x00\x21\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\x1c\x00\x00\x00\x1d\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x19\x00\x00\x00\xff\xff\xff\xff\x0d\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\x21\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\x19\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\xff\xff\xff\xff\x19\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x04\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\x19\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\xff\xff\xff\xff\x19\x00\x00\x00\x13\x00\x00\x00\xff\xff\xff\xff\x1c\x00\x00\x00\xff\xff\xff\xff\x17\x00\x00\x00\x19\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x00\x00\xff\xff\xff\xff\x25\x00\x00\x00\x0d\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\x0d\x00\x00\x00\xff\xff\xff\xff\x0d\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x00\x00\xff\xff\xff\xff\x0d\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x01\x00\x00\x00\x15\x00\x00\x00\x01\x00\x00\x00\x15\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x0d\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x05\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\xff\xff\xff\xff\x0d\x00\x00\x00\x05\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\x0d\x00\x00\x00\xff\xff\xff\xff\x0f\x00\x00\x00\x10\x00\x00\x00\xff\xff\xff\xff\x0d\x00\x00\x00\x0d\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\xff\xff\xff\xff\x0b\x00\x00\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x00\x00\x05\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x0d\x00\x00\x00\x25\x00\x00\x00\x0f\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x25\x00\x00\x00\xff\xff\xff\xff\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x25\x00\x00\x00\xff\xff\xff\xff\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x25\x00\x00\x00\xff\xff\xff\xff\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\xb9\x00\x00\x00\x99\x01\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x8d\x00\x00\x00\xe7\x00\x00\x00\x6d\x01\x00\x00\xe8\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\xe0\x00\x00\x00\x24\x00\x00\x00\xa4\x00\x00\x00\xa5\x00\x00\x00\x8d\x00\x00\x00\x88\x00\x00\x00\x2e\x01\x00\x00\x05\x01\x00\x00\xe1\x00\x00\x00\xee\x00\x00\x00\x42\x00\x00\x00\x6e\x00\x00\x00\x06\x01\x00\x00\x9f\x00\x00\x00\x97\x00\x00\x00\x8d\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x08\x01\x00\x00\x4b\x00\x00\x00\x6d\x00\x00\x00\x97\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\xb9\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x0f\x01\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\x5b\x01\x00\x00\x5c\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x61\x00\x00\x00\x07\x01\x00\x00\x62\x00\x00\x00\xe4\x00\x00\x00\x9a\x01\x00\x00\x8e\x00\x00\x00\xe0\x00\x00\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x66\x00\x00\x00\x2f\x01\x00\x00\xf8\x00\x00\x00\x67\x00\x00\x00\xe1\x00\x00\x00\xe7\x00\x00\x00\xb7\x00\x00\x00\xe8\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x8e\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\x8e\x00\x00\x00\x6d\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x97\x00\x00\x00\x8e\x00\x00\x00\x8e\x00\x00\x00\x98\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x8e\x00\x00\x00\x6d\x00\x00\x00\x98\x00\x00\x00\x09\x01\x00\x00\x8d\x00\x00\x00\x59\x01\x00\x00\x6d\x00\x00\x00\x97\x01\x00\x00\x26\x01\x00\x00\x41\x01\x00\x00\x42\x00\x00\x00\x6d\x00\x00\x00\x6d\x00\x00\x00\x80\x01\x00\x00\x97\x00\x00\x00\x10\x01\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\xa4\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x6d\x00\x00\x00\x22\x01\x00\x00\x41\x01\x00\x00\x97\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\xe5\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x7c\x01\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x6b\x01\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\x57\x01\x00\x00\x5c\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x61\x00\x00\x00\x8d\x01\x00\x00\x62\x00\x00\x00\x8e\x01\x00\x00\x25\x00\x00\x00\x8e\x00\x00\x00\xbc\x00\x00\x00\x98\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x66\x00\x00\x00\x24\x00\x00\x00\x81\x00\x00\x00\x82\x00\x00\x00\x6d\x00\x00\x00\xb9\x00\x00\x00\xba\x00\x00\x00\xe4\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x8e\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x34\x00\x00\x00\x73\x00\x00\x00\x98\x01\x00\x00\x6d\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x27\x01\x00\x00\x8e\x00\x00\x00\x81\x01\x00\x00\x98\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x8e\x00\x00\x00\x6d\x00\x00\x00\x98\x00\x00\x00\x23\x01\x00\x00\x24\x00\x00\x00\x81\x00\x00\x00\x02\x01\x00\x00\x24\x00\x00\x00\xb9\x00\x00\x00\xcf\x00\x00\x00\x42\x00\x00\x00\x6d\x00\x00\x00\x7d\x01\x00\x00\xa4\x00\x00\x00\xbf\x00\x00\x00\x24\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x88\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x6d\x00\x00\x00\xa4\x00\x00\x00\x48\x01\x00\x00\xec\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x04\x01\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\xff\xff\xff\xff\x54\x00\x00\x00\x55\x00\x00\x00\x00\x01\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\xe5\x00\x00\x00\x5c\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x61\x00\x00\x00\x24\x00\x00\x00\x24\x00\x00\x00\x81\x00\x00\x00\x28\x01\x00\x00\x88\x00\x00\x00\xb9\x00\x00\x00\xc2\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x66\x00\x00\x00\xff\xff\xff\xff\x1f\x01\x00\x00\x93\x00\x00\x00\xff\xff\xff\xff\xe4\x00\x00\x00\x20\x01\x00\x00\x98\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x73\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\xfb\x00\x00\x00\xf5\x00\x00\x00\xec\x00\x00\x00\xe9\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x95\x01\x00\x00\x0a\x01\x00\x00\xe3\x00\x00\x00\x0b\x01\x00\x00\x96\x01\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x7e\x01\x00\x00\x42\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x7f\x01\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\xff\xff\xff\xff\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\xdb\x00\x00\x00\xe2\x00\x00\x00\xff\xff\xff\xff\xdd\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\xff\xff\xff\xff\xbd\x00\x00\x00\xd9\x00\x00\x00\x29\x00\x00\x00\x53\x00\x00\x00\xbe\x00\x00\x00\x78\x00\x00\x00\x66\x00\x00\x00\xff\xff\xff\xff\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\xd4\x00\x00\x00\xff\xff\xff\xff\xe5\x00\x00\x00\x6a\x00\x00\x00\x6b\x00\x00\x00\x24\x00\x00\x00\x61\x00\x00\x00\x24\x00\x00\x00\xd2\x00\x00\x00\xb9\x00\x00\x00\xc0\x00\x00\x00\x88\x00\x00\x00\x0c\x01\x00\x00\x0d\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x66\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x99\x00\x00\x00\xd1\x00\x00\x00\x9a\x00\x00\x00\x9b\x00\x00\x00\xff\xff\xff\xff\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\xff\xff\xff\xff\x73\x00\x00\x00\x6d\x00\x00\x00\xff\xff\xff\xff\x36\x00\x00\x00\x37\x00\x00\x00\x29\x00\x00\x00\xa9\xff\xff\xff\x24\x00\x00\x00\x0d\x01\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x24\x00\x00\x00\x24\x00\x00\x00\x24\x00\x00\x00\x24\x00\x00\x00\xbb\x00\x00\x00\x88\x00\x00\x00\x88\x00\x00\x00\xca\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x42\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x91\x00\x00\x00\x9d\x00\x00\x00\x9e\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x92\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\xdb\x00\x00\x00\xb7\x00\x00\x00\x6d\x00\x00\x00\x8f\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x29\x00\x00\x00\x24\x00\x00\x00\x24\x00\x00\x00\x2a\x00\x00\x00\x53\x00\x00\x00\xc9\x00\x00\x00\x88\x00\x00\x00\xff\xff\xff\xff\x90\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\x89\x00\x00\x00\x24\x00\x00\x00\x51\x01\x00\x00\x24\x00\x00\x00\x52\x01\x00\x00\xa0\x00\x00\x00\x61\x00\x00\x00\x88\x00\x00\x00\x8a\x00\x00\x00\x8b\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\xa1\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x89\x00\x00\x00\x66\x00\x00\x00\xa9\xff\xff\xff\x24\x00\x00\x00\x50\x01\x00\x00\x4f\x01\x00\x00\xa4\x00\x00\x00\xc7\x00\x00\x00\x8e\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x73\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x29\x00\x00\x00\x4b\x01\x00\x00\x4a\x01\x00\x00\xd9\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x24\x00\x00\x00\x24\x00\x00\x00\x24\x00\x00\x00\x6d\x00\x00\x00\xc3\x00\x00\x00\x88\x00\x00\x00\x88\x00\x00\x00\x46\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x42\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x91\x00\x00\x00\xd5\x00\x00\x00\xd6\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\xf6\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\xdb\x00\x00\x00\x41\x01\x00\x00\x31\x01\x00\x00\x00\x01\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x29\x00\x00\x00\x2a\x01\x00\x00\x24\x00\x00\x00\x2a\x00\x00\x00\x53\x00\x00\x00\x74\x01\x00\x00\x88\x00\x00\x00\x71\x01\x00\x00\x90\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\x89\x00\x00\x00\x24\x00\x00\x00\x6e\x01\x00\x00\x24\x00\x00\x00\x67\x01\x00\x00\xa0\x00\x00\x00\x61\x00\x00\x00\x88\x00\x00\x00\x8a\x00\x00\x00\x3f\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\xc8\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x33\x01\x00\x00\x66\x00\x00\x00\x24\x00\x00\x00\x65\x01\x00\x00\x64\x01\x00\x00\x5e\x01\x00\x00\xb9\x00\x00\x00\x47\x01\x00\x00\x34\x01\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x73\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x29\x00\x00\x00\x62\x01\x00\x00\xa1\x01\x00\x00\xfd\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x24\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x24\x00\x00\x00\x88\x00\x00\x00\x24\x00\x00\x00\x9f\x01\x00\x00\x9d\x01\x00\x00\x42\x00\x00\x00\x88\x00\x00\x00\x8b\x01\x00\x00\x9b\x01\x00\x00\x9d\x00\x00\x00\xd2\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x91\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x29\x00\x00\x00\x6f\x01\x00\x00\x88\x01\x00\x00\x2a\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x71\x00\x00\x00\x89\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x53\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x83\x01\x00\x00\xb8\x01\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\x82\x01\x00\x00\xb7\x01\x00\x00\xb6\x01\x00\x00\xb5\x01\x00\x00\xb2\x01\x00\x00\x24\x00\x00\x00\x61\x00\x00\x00\xb1\x01\x00\x00\xaf\x01\x00\x00\x88\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x66\x00\x00\x00\x93\x00\x00\x00\xae\x01\x00\x00\xad\x01\x00\x00\x38\x01\x00\x00\x94\x00\x00\x00\x95\x00\x00\x00\xa6\x01\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x28\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\xac\x01\x00\x00\xab\x01\x00\x00\xa4\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xd3\x01\x00\x00\xd1\x01\x00\x00\x29\x00\x00\x00\xcf\x01\x00\x00\xce\x01\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x1b\x01\x00\x00\x28\x00\x00\x00\xcd\x01\x00\x00\xcc\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\xb9\x01\x00\x00\xcb\x01\x00\x00\xca\x01\x00\x00\xc9\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x84\x00\x00\x00\x85\x00\x00\x00\x29\x00\x00\x00\xc8\x01\x00\x00\xc7\x01\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x86\x00\x00\x00\xc6\x01\x00\x00\x28\x00\x00\x00\xc3\x01\x00\x00\xc1\x01\x00\x00\x84\x00\x00\x00\x41\x01\x00\x00\x29\x00\x00\x00\xc5\x01\x00\x00\xc0\x01\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x86\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x24\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xbf\x01\x00\x00\xa0\x00\x00\x00\xbe\x01\x00\x00\xbd\x01\x00\x00\xbc\x01\x00\x00\xde\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\xc6\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xdc\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x84\x00\x00\x00\x3a\x01\x00\x00\x29\x00\x00\x00\xe4\x01\x00\x00\xe6\x01\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x86\x00\x00\x00\x29\x00\x00\x00\x28\x00\x00\x00\xe5\x01\x00\x00\x2a\x00\x00\x00\x84\x00\x00\x00\x2b\x01\x00\x00\x29\x00\x00\x00\xe8\x01\x00\x00\x37\x01\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x2c\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\xea\x01\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xb7\x00\x00\x00\xb4\x00\x00\x00\xa2\x00\x00\x00\xb5\x00\x00\x00\x83\x00\x00\x00\xf5\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x79\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xdd\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x87\x00\x00\x00\xc5\x00\x00\x00\x29\x00\x00\x00\xc4\x00\x00\x00\xc1\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x86\x00\x00\x00\x29\x00\x00\x00\x28\x00\x00\x00\x4d\x01\x00\x00\xfc\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x6e\x00\x00\x00\x4c\x01\x00\x00\x4b\x01\x00\x00\x43\x01\x00\x00\x39\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x1d\x01\x00\x00\x74\x01\x00\x00\x29\x00\x00\x00\x67\x01\x00\x00\x54\x01\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x01\x01\x00\x00\xdd\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xce\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xcd\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xcb\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x42\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x3e\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x3d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x3c\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x3b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x35\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x7a\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x79\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x78\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x77\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x76\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x6e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x6b\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x69\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x60\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x5f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x5e\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x5c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x5b\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x53\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x52\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x9f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x9d\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x91\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x8f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x8e\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x8b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x89\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x86\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x84\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x83\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xba\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xb8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xb3\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xb2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xaf\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xa8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xa7\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xa6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xa4\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xa2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xa1\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xd1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xcf\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xc3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xc1\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xdc\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xda\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xd4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xd3\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xe2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xe1\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xe6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\xe8\x01\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\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\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\x1a\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\x11\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\x10\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\x72\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\x71\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\xe0\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\xdf\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\xde\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\xd9\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\xd8\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\xd7\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\xd6\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x28\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x6f\x00\x00\x00\x2f\x00\x00\x00\xd5\x01\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x73\x00\x00\x00\x74\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x36\x01\x00\x00\x74\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x19\x01\x00\x00\x74\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x18\x01\x00\x00\x74\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\x93\x01\x00\x00\x74\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x74\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x24\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x17\x01\x00\x00\xdb\x00\x00\x00\x74\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x16\x01\x00\x00\x00\x00\x00\x00\x74\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x24\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x76\x00\x00\x00\x29\x00\x00\x00\xd4\x00\x00\x00\x74\x00\x00\x00\x2a\x00\x00\x00\x77\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x74\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x15\x01\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x74\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x14\x01\x00\x00\x88\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x74\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x2f\x01\x00\x00\x2a\x00\x00\x00\x13\x01\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x74\x00\x00\x00\x2a\x00\x00\x00\x12\x01\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x74\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xfb\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xf9\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\xf8\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\xf1\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x29\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\xf0\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xef\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xee\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x29\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\xea\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\xe9\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x1f\x01\x00\x00\x00\x00\x00\x00\x2a\x01\x00\x00\x00\x00\x00\x00\x20\x01\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x1c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x21\x01\x00\x00\x89\x00\x00\x00\x7b\x00\x00\x00\x7c\x00\x00\x00\x7d\x00\x00\x00\x7e\x00\x00\x00\x7f\x00\x00\x00\x80\x00\x00\x00\x81\x00\x00\x00\x8a\x00\x00\x00\x92\x01\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x24\x00\x00\x00\x88\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x01\x00\x00\x00\x00\x00\x00\x23\x01\x00\x00\x8a\x00\x00\x00\x90\x01\x00\x00\x8a\x00\x00\x00\x85\x01\x00\x00\x24\x00\x00\x00\x32\x01\x00\x00\x24\x00\x00\x00\x24\x01\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x93\x00\x00\x00\x88\x00\x00\x00\x93\x00\x00\x00\x88\x00\x00\x00\x94\x00\x00\x00\xfe\x00\x00\x00\x94\x00\x00\x00\xd7\x00\x00\x00\x24\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x88\x00\x00\x00\x94\x00\x00\x00\x59\x01\x00\x00\x94\x00\x00\x00\x57\x01\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x88\x00\x00\x00\x24\x00\x00\x00\x24\x00\x00\x00\x94\x00\x00\x00\x55\x01\x00\x00\x88\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x9a\x00\x00\x00\x46\x01\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x62\x01\x00\x00\x9a\x00\x00\x00\xa9\x01\x00\x00\xa7\x00\x00\x00\xa8\x00\x00\x00\xa9\x00\x00\x00\xaa\x00\x00\x00\xab\x00\x00\x00\xac\x00\x00\x00\xad\x00\x00\x00\xae\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\xb0\x00\x00\x00\xb1\x00\x00\x00\xb2\x00\x00\x00\xb3\x00\x00\x00\xb4\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf\x00\x00\x00\x88\x00\x00\x00\x7b\x00\x00\x00\x7c\x00\x00\x00\x7d\x00\x00\x00\x7e\x00\x00\x00\x7f\x00\x00\x00\x80\x00\x00\x00\x81\x00\x00\x00\x99\x00\x00\x00\x45\x01\x00\x00\x9c\x00\x00\x00\x7b\x00\x00\x00\x7c\x00\x00\x00\x7d\x00\x00\x00\x7e\x00\x00\x00\x7f\x00\x00\x00\x80\x00\x00\x00\x81\x00\x00\x00\x76\x01\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x7c\x00\x00\x00\x7d\x00\x00\x00\x7e\x00\x00\x00\x7f\x00\x00\x00\x80\x00\x00\x00\x81\x00\x00\x00\x69\x01\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x7c\x00\x00\x00\x7d\x00\x00\x00\x7e\x00\x00\x00\x7f\x00\x00\x00\x80\x00\x00\x00\x81\x00\x00\x00\x66\x01\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x7c\x00\x00\x00\x7d\x00\x00\x00\x7e\x00\x00\x00\x7f\x00\x00\x00\x80\x00\x00\x00\x81\x00\x00\x00\x7b\x00\x00\x00\x7c\x00\x00\x00\x7d\x00\x00\x00\x7e\x00\x00\x00\x7f\x00\x00\x00\x80\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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 (34, 207) [+        (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)+        ]++happyRuleArr :: HappyAddr+happyRuleArr = HappyA# "\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00\x08\x00\x00\x00\x01\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x06\x00\x00\x00\x09\x00\x00\x00\x05\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x04\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x07\x00\x00\x00\x09\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x07\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x03\x00\x00\x00\x0b\x00\x00\x00\x04\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\x01\x00\x00\x00\x0d\x00\x00\x00\x05\x00\x00\x00\x0d\x00\x00\x00\x07\x00\x00\x00\x0e\x00\x00\x00\x01\x00\x00\x00\x0e\x00\x00\x00\x02\x00\x00\x00\x0f\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x03\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x11\x00\x00\x00\x05\x00\x00\x00\x11\x00\x00\x00\x07\x00\x00\x00\x11\x00\x00\x00\x07\x00\x00\x00\x11\x00\x00\x00\x05\x00\x00\x00\x11\x00\x00\x00\x07\x00\x00\x00\x12\x00\x00\x00\x01\x00\x00\x00\x12\x00\x00\x00\x02\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x14\x00\x00\x00\x01\x00\x00\x00\x14\x00\x00\x00\x05\x00\x00\x00\x14\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00\x05\x00\x00\x00\x14\x00\x00\x00\x09\x00\x00\x00\x14\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00\x05\x00\x00\x00\x14\x00\x00\x00\x07\x00\x00\x00\x15\x00\x00\x00\x03\x00\x00\x00\x15\x00\x00\x00\x03\x00\x00\x00\x16\x00\x00\x00\x01\x00\x00\x00\x16\x00\x00\x00\x03\x00\x00\x00\x17\x00\x00\x00\x03\x00\x00\x00\x17\x00\x00\x00\x03\x00\x00\x00\x18\x00\x00\x00\x01\x00\x00\x00\x18\x00\x00\x00\x03\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x01\x00\x00\x00\x1a\x00\x00\x00\x01\x00\x00\x00\x1a\x00\x00\x00\x03\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1b\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x04\x00\x00\x00\x1c\x00\x00\x00\x0a\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x07\x00\x00\x00\x1c\x00\x00\x00\x03\x00\x00\x00\x1c\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x03\x00\x00\x00\x1c\x00\x00\x00\x05\x00\x00\x00\x1c\x00\x00\x00\x0e\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x03\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00\x05\x00\x00\x00\x1d\x00\x00\x00\x03\x00\x00\x00\x1d\x00\x00\x00\x01\x00\x00\x00\x1d\x00\x00\x00\x03\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x1e\x00\x00\x00\x01\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x1f\x00\x00\x00\x03\x00\x00\x00\x1f\x00\x00\x00\x01\x00\x00\x00\x1f\x00\x00\x00\x03\x00\x00\x00\x20\x00\x00\x00\x03\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x20\x00\x00\x00\x03\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x04\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x03\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00\x22\x00\x00\x00\x03\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x05\x00\x00\x00\x22\x00\x00\x00\x03\x00\x00\x00\x22\x00\x00\x00\x06\x00\x00\x00\x22\x00\x00\x00\x04\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x01\x00\x00\x00\x22\x00\x00\x00\x03\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x04\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x22\x00\x00\x00\x08\x00\x00\x00\x23\x00\x00\x00\x03\x00\x00\x00\x23\x00\x00\x00\x01\x00\x00\x00\x24\x00\x00\x00\x01\x00\x00\x00\x24\x00\x00\x00\x03\x00\x00\x00"#++happyCatchStates :: [Happy_Prelude.Int]+happyCatchStates = []++happy_n_terms = 116 :: Happy_Prelude.Int+happy_n_nonterms = 37 :: Happy_Prelude.Int++happy_n_starts = 34 :: Happy_Prelude.Int++happyReduce_34 = happySpecReduce_1  0# happyReduction_34+happyReduction_34 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn38+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), (Data.Text.unpack ((\(PT _ (TL s)) -> s) happy_var_1)))+        )}++happyReduce_35 = happySpecReduce_1  1# happyReduction_35+happyReduction_35 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn39+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.VarIdentToken (tokenText happy_var_1))+        )}++happyReduce_36 = happySpecReduce_1  2# happyReduction_36+happyReduction_36 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn40+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.HoleIdentToken (tokenText happy_var_1))+        )}++happyReduce_37 = happySpecReduce_2  3# happyReduction_37+happyReduction_37 happy_x_2+        happy_x_1+         =  case happyOut45 happy_x_1 of { (HappyWrap45 happy_var_1) -> +        case happyOut48 happy_x_2 of { (HappyWrap48 happy_var_2) -> +        happyIn41+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.Module (fst happy_var_1) (snd happy_var_1) (snd happy_var_2))+        )}}++happyReduce_38 = happySpecReduce_1  4# happyReduction_38+happyReduction_38 happy_x_1+         =  case happyOut40 happy_x_1 of { (HappyWrap40 happy_var_1) -> +        happyIn42+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.HoleIdent (fst happy_var_1) (snd happy_var_1))+        )}++happyReduce_39 = happySpecReduce_1  5# happyReduction_39+happyReduction_39 happy_x_1+         =  case happyOut39 happy_x_1 of { (HappyWrap39 happy_var_1) -> +        happyIn43+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.VarIdent (fst happy_var_1) (snd happy_var_1))+        )}++happyReduce_40 = happySpecReduce_1  6# happyReduction_40+happyReduction_40 happy_x_1+         =  case happyOut43 happy_x_1 of { (HappyWrap43 happy_var_1) -> +        happyIn44+                 ((fst happy_var_1, (:[]) (snd happy_var_1))+        )}++happyReduce_41 = happySpecReduce_2  6# happyReduction_41+happyReduction_41 happy_x_2+        happy_x_1+         =  case happyOut43 happy_x_1 of { (HappyWrap43 happy_var_1) -> +        case happyOut44 happy_x_2 of { (HappyWrap44 happy_var_2) -> +        happyIn44+                 ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_2))+        )}}++happyReduce_42 = happySpecReduce_3  7# happyReduction_42+happyReduction_42 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut46 happy_x_2 of { (HappyWrap46 happy_var_2) -> +        happyIn45+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.LanguageDecl (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_43 = happySpecReduce_1  8# happyReduction_43+happyReduction_43 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn46+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Rzk1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_44 = happyReduce 4# 9# happyReduction_44+happyReduction_44 (happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut38 happy_x_2 of { (HappyWrap38 happy_var_2) -> +        case happyOut38 happy_x_4 of { (HappyWrap38 happy_var_4) -> +        happyIn47+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandSetOption (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+        ) `HappyStk` happyRest}}}++happyReduce_45 = happySpecReduce_2  9# happyReduction_45+happyReduction_45 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut38 happy_x_2 of { (HappyWrap38 happy_var_2) -> +        happyIn47+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandUnsetOption (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_46 = happyReduce 4# 9# happyReduction_46+happyReduction_46 (happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        happyIn47+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandCheck (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+        ) `HappyStk` happyRest}}}++happyReduce_47 = happySpecReduce_2  9# happyReduction_47+happyReduction_47 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> +        happyIn47+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandCompute (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_48 = happySpecReduce_2  9# happyReduction_48+happyReduction_48 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> +        happyIn47+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandComputeWHNF (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_49 = happySpecReduce_2  9# happyReduction_49+happyReduction_49 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> +        happyIn47+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandComputeNF (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_50 = happyReduce 6# 9# happyReduction_50+happyReduction_50 (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 { happy_var_1 -> +        case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> +        case happyOut49 happy_x_3 of { (HappyWrap49 happy_var_3) -> +        case happyOut56 happy_x_4 of { (HappyWrap56 happy_var_4) -> +        case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> +        happyIn47+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandPostulate (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6))+        ) `HappyStk` happyRest}}}}}++happyReduce_51 = happyReduce 5# 9# happyReduction_51+happyReduction_51 (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 { happy_var_1 -> +        case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> +        case happyOut49 happy_x_3 of { (HappyWrap49 happy_var_3) -> +        case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> +        happyIn47+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandPostulateNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_5))+        ) `HappyStk` happyRest}}}}++happyReduce_52 = happyReduce 4# 9# happyReduction_52+happyReduction_52 (happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut44 happy_x_2 of { (HappyWrap44 happy_var_2) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        happyIn47+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandAssume (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+        ) `HappyStk` happyRest}}}++happyReduce_53 = happyReduce 4# 9# happyReduction_53+happyReduction_53 (happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        happyIn47+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandVariable (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+        ) `HappyStk` happyRest}}}++happyReduce_54 = happyReduce 4# 9# happyReduction_54+happyReduction_54 (happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut44 happy_x_2 of { (HappyWrap44 happy_var_2) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        happyIn47+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandVariables (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+        ) `HappyStk` happyRest}}}++happyReduce_55 = happySpecReduce_2  9# happyReduction_55+happyReduction_55 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut50 happy_x_2 of { (HappyWrap50 happy_var_2) -> +        happyIn47+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandSection (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_56 = happySpecReduce_2  9# happyReduction_56+happyReduction_56 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut50 happy_x_2 of { (HappyWrap50 happy_var_2) -> +        happyIn47+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandSectionEnd (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_57 = happyReduce 8# 9# happyReduction_57+happyReduction_57 (happy_x_8 `HappyStk`+        happy_x_7 `HappyStk`+        happy_x_6 `HappyStk`+        happy_x_5 `HappyStk`+        happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> +        case happyOut49 happy_x_3 of { (HappyWrap49 happy_var_3) -> +        case happyOut56 happy_x_4 of { (HappyWrap56 happy_var_4) -> +        case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> +        case happyOut73 happy_x_8 of { (HappyWrap73 happy_var_8) -> +        happyIn47+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandDefine (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6) (snd happy_var_8))+        ) `HappyStk` happyRest}}}}}}++happyReduce_58 = happyReduce 7# 9# happyReduction_58+happyReduction_58 (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 { happy_var_1 -> +        case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> +        case happyOut49 happy_x_3 of { (HappyWrap49 happy_var_3) -> +        case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> +        case happyOut73 happy_x_7 of { (HappyWrap73 happy_var_7) -> +        happyIn47+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandDefineNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7))+        ) `HappyStk` happyRest}}}}}++happyReduce_59 = happyReduce 8# 9# happyReduction_59+happyReduction_59 (happy_x_8 `HappyStk`+        happy_x_7 `HappyStk`+        happy_x_6 `HappyStk`+        happy_x_5 `HappyStk`+        happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> +        case happyOut49 happy_x_3 of { (HappyWrap49 happy_var_3) -> +        case happyOut56 happy_x_4 of { (HappyWrap56 happy_var_4) -> +        case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> +        case happyOut73 happy_x_8 of { (HappyWrap73 happy_var_8) -> +        happyIn47+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandDef (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6) (snd happy_var_8))+        ) `HappyStk` happyRest}}}}}}++happyReduce_60 = happyReduce 7# 9# happyReduction_60+happyReduction_60 (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 { happy_var_1 -> +        case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> +        case happyOut49 happy_x_3 of { (HappyWrap49 happy_var_3) -> +        case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> +        case happyOut73 happy_x_7 of { (HappyWrap73 happy_var_7) -> +        happyIn47+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandDefNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7))+        ) `HappyStk` happyRest}}}}}++happyReduce_61 = happySpecReduce_0  10# happyReduction_61+happyReduction_61  =  happyIn48+                 ((Language.Rzk.Syntax.Abs.BNFC'NoPosition, [])+        )++happyReduce_62 = happySpecReduce_3  10# happyReduction_62+happyReduction_62 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut47 happy_x_1 of { (HappyWrap47 happy_var_1) -> +        case happyOut48 happy_x_3 of { (HappyWrap48 happy_var_3) -> +        happyIn48+                 ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_63 = happyReduce 4# 11# happyReduction_63+happyReduction_63 (happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut44 happy_x_3 of { (HappyWrap44 happy_var_3) -> +        happyIn49+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.DeclUsedVars (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3))+        ) `HappyStk` happyRest}}++happyReduce_64 = happySpecReduce_0  11# happyReduction_64+happyReduction_64  =  happyIn49+                 ((Language.Rzk.Syntax.Abs.BNFC'NoPosition, Language.Rzk.Syntax.Abs.noDeclUsedVars Language.Rzk.Syntax.Abs.BNFC'NoPosition)+        )++happyReduce_65 = happySpecReduce_0  12# happyReduction_65+happyReduction_65  =  happyIn50+                 ((Language.Rzk.Syntax.Abs.BNFC'NoPosition, Language.Rzk.Syntax.Abs.NoSectionName Language.Rzk.Syntax.Abs.BNFC'NoPosition)+        )++happyReduce_66 = happySpecReduce_1  12# happyReduction_66+happyReduction_66 happy_x_1+         =  case happyOut43 happy_x_1 of { (HappyWrap43 happy_var_1) -> +        happyIn50+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.SomeSectionName (fst happy_var_1) (snd happy_var_1))+        )}++happyReduce_67 = happySpecReduce_1  13# happyReduction_67+happyReduction_67 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn51+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.PatternUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_68 = happySpecReduce_1  13# happyReduction_68+happyReduction_68 happy_x_1+         =  case happyOut43 happy_x_1 of { (HappyWrap43 happy_var_1) -> +        happyIn51+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.PatternVar (fst happy_var_1) (snd happy_var_1))+        )}++happyReduce_69 = happyReduce 5# 13# happyReduction_69+happyReduction_69 (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 { happy_var_1 -> +        case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> +        case happyOut51 happy_x_4 of { (HappyWrap51 happy_var_4) -> +        happyIn51+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.PatternPair (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+        ) `HappyStk` happyRest}}}++happyReduce_70 = happyReduce 7# 13# happyReduction_70+happyReduction_70 (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 { happy_var_1 -> +        case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> +        case happyOut51 happy_x_4 of { (HappyWrap51 happy_var_4) -> +        case happyOut54 happy_x_6 of { (HappyWrap54 happy_var_6) -> +        happyIn51+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.PatternTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))+        ) `HappyStk` happyRest}}}}++happyReduce_71 = happySpecReduce_1  14# happyReduction_71+happyReduction_71 happy_x_1+         =  case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> +        happyIn52+                 ((fst happy_var_1, (:[]) (snd happy_var_1))+        )}++happyReduce_72 = happySpecReduce_2  14# happyReduction_72+happyReduction_72 happy_x_2+        happy_x_1+         =  case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> +        case happyOut52 happy_x_2 of { (HappyWrap52 happy_var_2) -> +        happyIn52+                 ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_2))+        )}}++happyReduce_73 = happySpecReduce_1  15# happyReduction_73+happyReduction_73 happy_x_1+         =  case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> +        happyIn53+                 ((fst happy_var_1, (snd happy_var_1))+        )}++happyReduce_74 = happySpecReduce_1  16# happyReduction_74+happyReduction_74 happy_x_1+         =  case happyOut53 happy_x_1 of { (HappyWrap53 happy_var_1) -> +        happyIn54+                 ((fst happy_var_1, (:[]) (snd happy_var_1))+        )}++happyReduce_75 = happySpecReduce_3  16# happyReduction_75+happyReduction_75 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut53 happy_x_1 of { (HappyWrap53 happy_var_1) -> +        case happyOut54 happy_x_3 of { (HappyWrap54 happy_var_3) -> +        happyIn54+                 ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_76 = happySpecReduce_1  17# happyReduction_76+happyReduction_76 happy_x_1+         =  case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> +        happyIn55+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ParamPattern (fst happy_var_1) (snd happy_var_1))+        )}++happyReduce_77 = happyReduce 5# 17# happyReduction_77+happyReduction_77 (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 { happy_var_1 -> +        case happyOut52 happy_x_2 of { (HappyWrap52 happy_var_2) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        happyIn55+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+        ) `HappyStk` happyRest}}}++happyReduce_78 = happyReduce 7# 17# happyReduction_78+happyReduction_78 (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 { happy_var_1 -> +        case happyOut52 happy_x_2 of { (HappyWrap52 happy_var_2) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> +        happyIn55+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))+        ) `HappyStk` happyRest}}}}++happyReduce_79 = happyReduce 7# 17# happyReduction_79+happyReduction_79 (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 { happy_var_1 -> +        case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> +        happyIn55+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))+        ) `HappyStk` happyRest}}}}++happyReduce_80 = happyReduce 5# 17# happyReduction_80+happyReduction_80 (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 { happy_var_1 -> +        case happyOut52 happy_x_2 of { (HappyWrap52 happy_var_2) -> +        case happyOut65 happy_x_3 of { (HappyWrap65 happy_var_3) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        happyIn55+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternModalType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4))+        ) `HappyStk` happyRest}}}}++happyReduce_81 = happyReduce 7# 17# happyReduction_81+happyReduction_81 (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 { happy_var_1 -> +        case happyOut52 happy_x_2 of { (HappyWrap52 happy_var_2) -> +        case happyOut65 happy_x_3 of { (HappyWrap65 happy_var_3) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> +        happyIn55+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternModalShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6))+        ) `HappyStk` happyRest}}}}}++happyReduce_82 = happySpecReduce_1  18# happyReduction_82+happyReduction_82 happy_x_1+         =  case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> +        happyIn56+                 ((fst happy_var_1, (:[]) (snd happy_var_1))+        )}++happyReduce_83 = happySpecReduce_2  18# happyReduction_83+happyReduction_83 happy_x_2+        happy_x_1+         =  case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> +        case happyOut56 happy_x_2 of { (HappyWrap56 happy_var_2) -> +        happyIn56+                 ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_2))+        )}}++happyReduce_84 = happySpecReduce_1  19# happyReduction_84+happyReduction_84 happy_x_1+         =  case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> +        happyIn57+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.BindPattern (fst happy_var_1) (snd happy_var_1))+        )}++happyReduce_85 = happySpecReduce_3  19# happyReduction_85+happyReduction_85 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> +        case happyOut73 happy_x_3 of { (HappyWrap73 happy_var_3) -> +        happyIn57+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.BindPatternType (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_86 = happySpecReduce_1  20# happyReduction_86+happyReduction_86 happy_x_1+         =  case happyOut71 happy_x_1 of { (HappyWrap71 happy_var_1) -> +        happyIn58+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ParamType (fst happy_var_1) (snd happy_var_1))+        )}++happyReduce_87 = happyReduce 5# 20# happyReduction_87+happyReduction_87 (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 { happy_var_1 -> +        case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        happyIn58+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+        ) `HappyStk` happyRest}}}++happyReduce_88 = happyReduce 7# 20# happyReduction_88+happyReduction_88 (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 { happy_var_1 -> +        case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> +        happyIn58+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))+        ) `HappyStk` happyRest}}}}++happyReduce_89 = happyReduce 5# 20# happyReduction_89+happyReduction_89 (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 { happy_var_1 -> +        case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        happyIn58+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermTypeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+        ) `HappyStk` happyRest}}}++happyReduce_90 = happyReduce 9# 20# happyReduction_90+happyReduction_90 (happy_x_9 `HappyStk`+        happy_x_8 `HappyStk`+        happy_x_7 `HappyStk`+        happy_x_6 `HappyStk`+        happy_x_5 `HappyStk`+        happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut51 happy_x_3 of { (HappyWrap51 happy_var_3) -> +        case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> +        case happyOut73 happy_x_8 of { (HappyWrap73 happy_var_8) -> +        happyIn58+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamVarShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))+        ) `HappyStk` happyRest}}}}++happyReduce_91 = happyReduce 7# 20# happyReduction_91+happyReduction_91 (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 { happy_var_1 -> +        case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> +        happyIn58+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.paramVarShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))+        ) `HappyStk` happyRest}}}}++happyReduce_92 = happyReduce 5# 20# happyReduction_92+happyReduction_92 (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 { happy_var_1 -> +        case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> +        case happyOut65 happy_x_3 of { (HappyWrap65 happy_var_3) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        happyIn58+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermModalType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4))+        ) `HappyStk` happyRest}}}}++happyReduce_93 = happyReduce 7# 20# happyReduction_93+happyReduction_93 (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 { happy_var_1 -> +        case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> +        case happyOut65 happy_x_3 of { (HappyWrap65 happy_var_3) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> +        happyIn58+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermModalShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6))+        ) `HappyStk` happyRest}}}}}++happyReduce_94 = happySpecReduce_3  21# happyReduction_94+happyReduction_94 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> +        case happyOut73 happy_x_3 of { (HappyWrap73 happy_var_3) -> +        happyIn59+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.SigmaParam (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_95 = happySpecReduce_3  21# happyReduction_95+happyReduction_95 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> +        case happyOut65 happy_x_2 of { (HappyWrap65 happy_var_2) -> +        case happyOut73 happy_x_3 of { (HappyWrap73 happy_var_3) -> +        happyIn59+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.SigmaParamModal (fst happy_var_1) (snd happy_var_1) (snd happy_var_2) (snd happy_var_3))+        )}}}++happyReduce_96 = happySpecReduce_1  22# happyReduction_96+happyReduction_96 happy_x_1+         =  case happyOut59 happy_x_1 of { (HappyWrap59 happy_var_1) -> +        happyIn60+                 ((fst happy_var_1, (:[]) (snd happy_var_1))+        )}++happyReduce_97 = happySpecReduce_3  22# happyReduction_97+happyReduction_97 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut59 happy_x_1 of { (HappyWrap59 happy_var_1) -> +        case happyOut60 happy_x_3 of { (HappyWrap60 happy_var_3) -> +        happyIn60+                 ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_98 = happySpecReduce_3  23# happyReduction_98+happyReduction_98 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut73 happy_x_1 of { (HappyWrap73 happy_var_1) -> +        case happyOut73 happy_x_3 of { (HappyWrap73 happy_var_3) -> +        happyIn61+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.Restriction (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_99 = happySpecReduce_3  23# happyReduction_99+happyReduction_99 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut73 happy_x_1 of { (HappyWrap73 happy_var_1) -> +        case happyOut73 happy_x_3 of { (HappyWrap73 happy_var_3) -> +        happyIn61+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_Restriction (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_100 = happySpecReduce_1  24# happyReduction_100+happyReduction_100 happy_x_1+         =  case happyOut61 happy_x_1 of { (HappyWrap61 happy_var_1) -> +        happyIn62+                 ((fst happy_var_1, (:[]) (snd happy_var_1))+        )}++happyReduce_101 = happySpecReduce_3  24# happyReduction_101+happyReduction_101 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut61 happy_x_1 of { (HappyWrap61 happy_var_1) -> +        case happyOut62 happy_x_3 of { (HappyWrap62 happy_var_3) -> +        happyIn62+                 ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_102 = happySpecReduce_1  25# happyReduction_102+happyReduction_102 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn63+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Flat (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_103 = happySpecReduce_1  25# happyReduction_103+happyReduction_103 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn63+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Flat (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_104 = happySpecReduce_1  25# happyReduction_104+happyReduction_104 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn63+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Sharp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_105 = happySpecReduce_1  25# happyReduction_105+happyReduction_105 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn63+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Sharp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_106 = happySpecReduce_1  25# happyReduction_106+happyReduction_106 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn63+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Op (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_107 = happySpecReduce_1  25# happyReduction_107+happyReduction_107 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn63+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Op (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_108 = happySpecReduce_1  25# happyReduction_108+happyReduction_108 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn63+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Id (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_109 = happySpecReduce_1  26# happyReduction_109+happyReduction_109 happy_x_1+         =  case happyOut63 happy_x_1 of { (HappyWrap63 happy_var_1) -> +        happyIn64+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.Single (fst happy_var_1) (snd happy_var_1))+        )}++happyReduce_110 = happySpecReduce_3  26# happyReduction_110+happyReduction_110 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut63 happy_x_1 of { (HappyWrap63 happy_var_1) -> +        case happyOut63 happy_x_3 of { (HappyWrap63 happy_var_3) -> +        happyIn64+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.Comp (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_111 = happySpecReduce_1  27# happyReduction_111+happyReduction_111 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn65+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModalColonFlat (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_112 = happySpecReduce_1  27# happyReduction_112+happyReduction_112 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn65+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModalColonSharp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_113 = happySpecReduce_1  27# happyReduction_113+happyReduction_113 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn65+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModalColonOp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_114 = happySpecReduce_1  27# happyReduction_114+happyReduction_114 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn65+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModalColonId (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_115 = happySpecReduce_1  27# happyReduction_115+happyReduction_115 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn65+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_ModalColonFlat (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_116 = happySpecReduce_1  27# happyReduction_116+happyReduction_116 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn65+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_ModalColonSharp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_117 = happySpecReduce_1  27# happyReduction_117+happyReduction_117 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn65+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_ModalColonOp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_118 = happySpecReduce_1  28# happyReduction_118+happyReduction_118 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Universe (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_119 = happySpecReduce_1  28# happyReduction_119+happyReduction_119 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.UniverseCube (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_120 = happySpecReduce_1  28# happyReduction_120+happyReduction_120 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.UniverseTope (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_121 = happySpecReduce_1  28# happyReduction_121+happyReduction_121 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_122 = happySpecReduce_1  28# happyReduction_122+happyReduction_122 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeUnitStar (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_123 = happySpecReduce_1  28# happyReduction_123+happyReduction_123 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_124 = happySpecReduce_1  28# happyReduction_124+happyReduction_124 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_125 = happySpecReduce_1  28# happyReduction_125+happyReduction_125 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_126 = happySpecReduce_1  28# happyReduction_126+happyReduction_126 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeI (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_127 = happySpecReduce_1  28# happyReduction_127+happyReduction_127 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeI_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_128 = happySpecReduce_1  28# happyReduction_128+happyReduction_128 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeI_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_129 = happySpecReduce_1  28# happyReduction_129+happyReduction_129 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeTop (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_130 = happySpecReduce_1  28# happyReduction_130+happyReduction_130 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_131 = happySpecReduce_1  28# happyReduction_131+happyReduction_131 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.RecBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_132 = happyReduce 4# 28# happyReduction_132+happyReduction_132 (happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut62 happy_x_3 of { (HappyWrap62 happy_var_3) -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.RecOr (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3))+        ) `HappyStk` happyRest}}++happyReduce_133 = happyReduce 10# 28# happyReduction_133+happyReduction_133 (happy_x_10 `HappyStk`+        happy_x_9 `HappyStk`+        happy_x_8 `HappyStk`+        happy_x_7 `HappyStk`+        happy_x_6 `HappyStk`+        happy_x_5 `HappyStk`+        happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut73 happy_x_3 of { (HappyWrap73 happy_var_3) -> +        case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> +        case happyOut73 happy_x_7 of { (HappyWrap73 happy_var_7) -> +        case happyOut73 happy_x_9 of { (HappyWrap73 happy_var_9) -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.RecOrDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7) (snd happy_var_9))+        ) `HappyStk` happyRest}}}}}++happyReduce_134 = happySpecReduce_1  28# happyReduction_134+happyReduction_134 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_135 = happyReduce 5# 28# happyReduction_135+happyReduction_135 (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 { happy_var_1 -> +        case happyOut58 happy_x_2 of { (HappyWrap58 happy_var_2) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeExtensionDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+        ) `HappyStk` happyRest}}}++happyReduce_136 = happyReduce 5# 28# happyReduction_136+happyReduction_136 (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 { happy_var_1 -> +        case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Pair (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+        ) `HappyStk` happyRest}}}++happyReduce_137 = happyReduce 7# 28# happyReduction_137+happyReduction_137 (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 { happy_var_1 -> +        case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        case happyOut74 happy_x_6 of { (HappyWrap74 happy_var_6) -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Tuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))+        ) `HappyStk` happyRest}}}}++happyReduce_138 = happySpecReduce_3  28# happyReduction_138+happyReduction_138 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut63 happy_x_2 of { (HappyWrap63 happy_var_2) -> +        case happyOut66 happy_x_3 of { (HappyWrap66 happy_var_3) -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModApp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3))+        )}}}++happyReduce_139 = happySpecReduce_2  28# happyReduction_139+happyReduction_139 happy_x_2+        happy_x_1+         =  case happyOut63 happy_x_1 of { (HappyWrap63 happy_var_1) -> +        case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> +        happyIn66+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ModType (fst happy_var_1) (snd happy_var_1) (snd happy_var_2))+        )}}++happyReduce_140 = happySpecReduce_1  28# happyReduction_140+happyReduction_140 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Unit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_141 = happySpecReduce_1  28# happyReduction_141+happyReduction_141 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Refl (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_142 = happySpecReduce_3  28# happyReduction_142+happyReduction_142 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ReflTerm (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_143 = happyReduce 5# 28# happyReduction_143+happyReduction_143 (happy_x_5 `HappyStk`+        happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ReflTermType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+        ) `HappyStk` happyRest}}}++happyReduce_144 = happyReduce 14# 28# happyReduction_144+happyReduction_144 (happy_x_14 `HappyStk`+        happy_x_13 `HappyStk`+        happy_x_12 `HappyStk`+        happy_x_11 `HappyStk`+        happy_x_10 `HappyStk`+        happy_x_9 `HappyStk`+        happy_x_8 `HappyStk`+        happy_x_7 `HappyStk`+        happy_x_6 `HappyStk`+        happy_x_5 `HappyStk`+        happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut73 happy_x_3 of { (HappyWrap73 happy_var_3) -> +        case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> +        case happyOut73 happy_x_7 of { (HappyWrap73 happy_var_7) -> +        case happyOut73 happy_x_9 of { (HappyWrap73 happy_var_9) -> +        case happyOut73 happy_x_11 of { (HappyWrap73 happy_var_11) -> +        case happyOut73 happy_x_13 of { (HappyWrap73 happy_var_13) -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.IdJ (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7) (snd happy_var_9) (snd happy_var_11) (snd happy_var_13))+        ) `HappyStk` happyRest}}}}}}}++happyReduce_145 = happySpecReduce_1  28# happyReduction_145+happyReduction_145 happy_x_1+         =  case happyOut42 happy_x_1 of { (HappyWrap42 happy_var_1) -> +        happyIn66+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.Hole (fst happy_var_1) (snd happy_var_1))+        )}++happyReduce_146 = happySpecReduce_1  28# happyReduction_146+happyReduction_146 happy_x_1+         =  case happyOut43 happy_x_1 of { (HappyWrap43 happy_var_1) -> +        happyIn66+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.Var (fst happy_var_1) (snd happy_var_1))+        )}++happyReduce_147 = happySpecReduce_3  28# happyReduction_147+happyReduction_147 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut73 happy_x_2 of { (HappyWrap73 happy_var_2) -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), (snd happy_var_2))+        )}}++happyReduce_148 = happySpecReduce_1  28# happyReduction_148+happyReduction_148 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_CubeUnitStar (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_149 = happySpecReduce_1  28# happyReduction_149+happyReduction_149 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Cube2_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_150 = happySpecReduce_1  28# happyReduction_150+happyReduction_150 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Cube2_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_151 = happySpecReduce_1  28# happyReduction_151+happyReduction_151 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_CubeI (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_152 = happySpecReduce_1  28# happyReduction_152+happyReduction_152 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_CubeI_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_153 = happySpecReduce_1  28# happyReduction_153+happyReduction_153 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_CubeI_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_154 = happySpecReduce_1  28# happyReduction_154+happyReduction_154 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TopeTop (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_155 = happySpecReduce_1  28# happyReduction_155+happyReduction_155 happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TopeBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+        )}++happyReduce_156 = happyReduce 5# 28# happyReduction_156+happyReduction_156 (happy_x_5 `HappyStk`+        happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut58 happy_x_2 of { (HappyWrap58 happy_var_2) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        happyIn66+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TypeExtensionDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+        ) `HappyStk` happyRest}}}++happyReduce_157 = happySpecReduce_3  29# happyReduction_157+happyReduction_157 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> +        case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> +        happyIn67+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.CubeProduct (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_158 = happySpecReduce_1  29# happyReduction_158+happyReduction_158 happy_x_1+         =  case happyOut71 happy_x_1 of { (HappyWrap71 happy_var_1) -> +        happyIn67+                 ((fst happy_var_1, (snd happy_var_1))+        )}++happyReduce_159 = happySpecReduce_3  29# happyReduction_159+happyReduction_159 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> +        case happyOut71 happy_x_3 of { (HappyWrap71 happy_var_3) -> +        happyIn67+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ascii_CubeProduct (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_160 = happySpecReduce_3  30# happyReduction_160+happyReduction_160 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> +        case happyOut67 happy_x_3 of { (HappyWrap67 happy_var_3) -> +        happyIn68+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_161 = happySpecReduce_3  30# happyReduction_161+happyReduction_161 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> +        case happyOut67 happy_x_3 of { (HappyWrap67 happy_var_3) -> +        happyIn68+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeLEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_162 = happySpecReduce_1  30# happyReduction_162+happyReduction_162 happy_x_1+         =  case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> +        happyIn68+                 ((fst happy_var_1, (snd happy_var_1))+        )}++happyReduce_163 = happySpecReduce_3  30# happyReduction_163+happyReduction_163 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> +        case happyOut67 happy_x_3 of { (HappyWrap67 happy_var_3) -> +        happyIn68+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_164 = happySpecReduce_3  30# happyReduction_164+happyReduction_164 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut67 happy_x_1 of { (HappyWrap67 happy_var_1) -> +        case happyOut67 happy_x_3 of { (HappyWrap67 happy_var_3) -> +        happyIn68+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeLEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_165 = happySpecReduce_3  31# happyReduction_165+happyReduction_165 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut68 happy_x_1 of { (HappyWrap68 happy_var_1) -> +        case happyOut69 happy_x_3 of { (HappyWrap69 happy_var_3) -> +        happyIn69+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeAnd (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_166 = happySpecReduce_1  31# happyReduction_166+happyReduction_166 happy_x_1+         =  case happyOut68 happy_x_1 of { (HappyWrap68 happy_var_1) -> +        happyIn69+                 ((fst happy_var_1, (snd happy_var_1))+        )}++happyReduce_167 = happySpecReduce_3  31# happyReduction_167+happyReduction_167 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut68 happy_x_1 of { (HappyWrap68 happy_var_1) -> +        case happyOut69 happy_x_3 of { (HappyWrap69 happy_var_3) -> +        happyIn69+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeAnd (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_168 = happySpecReduce_3  32# happyReduction_168+happyReduction_168 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut69 happy_x_1 of { (HappyWrap69 happy_var_1) -> +        case happyOut70 happy_x_3 of { (HappyWrap70 happy_var_3) -> +        happyIn70+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeOr (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_169 = happySpecReduce_1  32# happyReduction_169+happyReduction_169 happy_x_1+         =  case happyOut69 happy_x_1 of { (HappyWrap69 happy_var_1) -> +        happyIn70+                 ((fst happy_var_1, (snd happy_var_1))+        )}++happyReduce_170 = happySpecReduce_3  32# happyReduction_170+happyReduction_170 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut69 happy_x_1 of { (HappyWrap69 happy_var_1) -> +        case happyOut70 happy_x_3 of { (HappyWrap70 happy_var_3) -> +        happyIn70+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeOr (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_171 = happySpecReduce_2  33# happyReduction_171+happyReduction_171 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> +        happyIn71+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeInv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_172 = happySpecReduce_2  33# happyReduction_172+happyReduction_172 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> +        happyIn71+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_TopeInv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_173 = happySpecReduce_2  33# happyReduction_173+happyReduction_173 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> +        happyIn71+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeUninv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_174 = happySpecReduce_2  33# happyReduction_174+happyReduction_174 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> +        happyIn71+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_TopeUninv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_175 = happySpecReduce_2  33# happyReduction_175+happyReduction_175 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> +        happyIn71+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeFlip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_176 = happySpecReduce_2  33# happyReduction_176+happyReduction_176 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> +        happyIn71+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_CubeFlip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_177 = happySpecReduce_2  33# happyReduction_177+happyReduction_177 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> +        happyIn71+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeUnflip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_178 = happySpecReduce_2  33# happyReduction_178+happyReduction_178 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> +        happyIn71+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_CubeUnflip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_179 = happyReduce 4# 33# happyReduction_179+happyReduction_179 (happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOut71 happy_x_1 of { (HappyWrap71 happy_var_1) -> +        case happyOut62 happy_x_3 of { (HappyWrap62 happy_var_3) -> +        happyIn71+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeRestricted (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        ) `HappyStk` happyRest}}++happyReduce_180 = happySpecReduce_2  33# happyReduction_180+happyReduction_180 happy_x_2+        happy_x_1+         =  case happyOut71 happy_x_1 of { (HappyWrap71 happy_var_1) -> +        case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> +        happyIn71+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.App (fst happy_var_1) (snd happy_var_1) (snd happy_var_2))+        )}}++happyReduce_181 = happySpecReduce_3  33# happyReduction_181+happyReduction_181 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut64 happy_x_2 of { (HappyWrap64 happy_var_2) -> +        case happyOut66 happy_x_3 of { (HappyWrap66 happy_var_3) -> +        happyIn71+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ModExtract (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3))+        )}}}++happyReduce_182 = happySpecReduce_2  33# happyReduction_182+happyReduction_182 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> +        happyIn71+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.First (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_183 = happySpecReduce_2  33# happyReduction_183+happyReduction_183 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> +        happyIn71+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Second (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_184 = happySpecReduce_1  33# happyReduction_184+happyReduction_184 happy_x_1+         =  case happyOut66 happy_x_1 of { (HappyWrap66 happy_var_1) -> +        happyIn71+                 ((fst happy_var_1, (snd happy_var_1))+        )}++happyReduce_185 = happySpecReduce_2  33# happyReduction_185+happyReduction_185 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> +        happyIn71+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_First (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_186 = happySpecReduce_2  33# happyReduction_186+happyReduction_186 happy_x_2+        happy_x_1+         =  case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut66 happy_x_2 of { (HappyWrap66 happy_var_2) -> +        happyIn71+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Second (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+        )}}++happyReduce_187 = happySpecReduce_3  34# happyReduction_187+happyReduction_187 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut58 happy_x_1 of { (HappyWrap58 happy_var_1) -> +        case happyOut72 happy_x_3 of { (HappyWrap72 happy_var_3) -> +        happyIn72+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeFun (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_188 = happyReduce 8# 34# happyReduction_188+happyReduction_188 (happy_x_8 `HappyStk`+        happy_x_7 `HappyStk`+        happy_x_6 `HappyStk`+        happy_x_5 `HappyStk`+        happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut51 happy_x_3 of { (HappyWrap51 happy_var_3) -> +        case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> +        case happyOut72 happy_x_8 of { (HappyWrap72 happy_var_8) -> +        happyIn72+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeSigma (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))+        ) `HappyStk` happyRest}}}}++happyReduce_189 = happyReduce 8# 34# happyReduction_189+happyReduction_189 (happy_x_8 `HappyStk`+        happy_x_7 `HappyStk`+        happy_x_6 `HappyStk`+        happy_x_5 `HappyStk`+        happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut51 happy_x_3 of { (HappyWrap51 happy_var_3) -> +        case happyOut65 happy_x_4 of { (HappyWrap65 happy_var_4) -> +        case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> +        case happyOut72 happy_x_8 of { (HappyWrap72 happy_var_8) -> +        happyIn72+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeSigmaModal (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_4) (snd happy_var_5) (snd happy_var_8))+        ) `HappyStk` happyRest}}}}}++happyReduce_190 = happyReduce 8# 34# happyReduction_190+happyReduction_190 (happy_x_8 `HappyStk`+        happy_x_7 `HappyStk`+        happy_x_6 `HappyStk`+        happy_x_5 `HappyStk`+        happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut59 happy_x_3 of { (HappyWrap59 happy_var_3) -> +        case happyOut60 happy_x_5 of { (HappyWrap60 happy_var_5) -> +        case happyOut72 happy_x_8 of { (HappyWrap72 happy_var_8) -> +        happyIn72+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeSigmaTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))+        ) `HappyStk` happyRest}}}}++happyReduce_191 = happyReduce 5# 34# happyReduction_191+happyReduction_191 (happy_x_5 `HappyStk`+        happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOut70 happy_x_1 of { (HappyWrap70 happy_var_1) -> +        case happyOut73 happy_x_3 of { (HappyWrap73 happy_var_3) -> +        case happyOut70 happy_x_5 of { (HappyWrap70 happy_var_5) -> +        happyIn72+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeId (fst happy_var_1) (snd happy_var_1) (snd happy_var_3) (snd happy_var_5))+        ) `HappyStk` happyRest}}}++happyReduce_192 = happySpecReduce_3  34# happyReduction_192+happyReduction_192 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut70 happy_x_1 of { (HappyWrap70 happy_var_1) -> +        case happyOut70 happy_x_3 of { (HappyWrap70 happy_var_3) -> +        happyIn72+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeIdSimple (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_193 = happyReduce 6# 34# happyReduction_193+happyReduction_193 (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 { happy_var_1 -> +        case happyOut57 happy_x_2 of { (HappyWrap57 happy_var_2) -> +        case happyOut73 happy_x_4 of { (HappyWrap73 happy_var_4) -> +        case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> +        happyIn72+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Let (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))+        ) `HappyStk` happyRest}}}}++happyReduce_194 = happyReduce 4# 34# happyReduction_194+happyReduction_194 (happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut56 happy_x_2 of { (HappyWrap56 happy_var_2) -> +        case happyOut72 happy_x_4 of { (HappyWrap72 happy_var_4) -> +        happyIn72+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Lambda (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+        ) `HappyStk` happyRest}}}++happyReduce_195 = happyReduce 8# 34# happyReduction_195+happyReduction_195 (happy_x_8 `HappyStk`+        happy_x_7 `HappyStk`+        happy_x_6 `HappyStk`+        happy_x_5 `HappyStk`+        happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut64 happy_x_3 of { (HappyWrap64 happy_var_3) -> +        case happyOut57 happy_x_4 of { (HappyWrap57 happy_var_4) -> +        case happyOut73 happy_x_6 of { (HappyWrap73 happy_var_6) -> +        case happyOut73 happy_x_8 of { (HappyWrap73 happy_var_8) -> +        happyIn72+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.LetMod (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6) (snd happy_var_8))+        ) `HappyStk` happyRest}}}}}++happyReduce_196 = happySpecReduce_1  34# happyReduction_196+happyReduction_196 happy_x_1+         =  case happyOut70 happy_x_1 of { (HappyWrap70 happy_var_1) -> +        happyIn72+                 ((fst happy_var_1, (snd happy_var_1))+        )}++happyReduce_197 = happySpecReduce_3  34# happyReduction_197+happyReduction_197 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut58 happy_x_1 of { (HappyWrap58 happy_var_1) -> +        case happyOut72 happy_x_3 of { (HappyWrap72 happy_var_3) -> +        happyIn72+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TypeFun (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_198 = happyReduce 8# 34# happyReduction_198+happyReduction_198 (happy_x_8 `HappyStk`+        happy_x_7 `HappyStk`+        happy_x_6 `HappyStk`+        happy_x_5 `HappyStk`+        happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut51 happy_x_3 of { (HappyWrap51 happy_var_3) -> +        case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> +        case happyOut72 happy_x_8 of { (HappyWrap72 happy_var_8) -> +        happyIn72+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TypeSigma (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))+        ) `HappyStk` happyRest}}}}++happyReduce_199 = happyReduce 8# 34# happyReduction_199+happyReduction_199 (happy_x_8 `HappyStk`+        happy_x_7 `HappyStk`+        happy_x_6 `HappyStk`+        happy_x_5 `HappyStk`+        happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut51 happy_x_3 of { (HappyWrap51 happy_var_3) -> +        case happyOut65 happy_x_4 of { (HappyWrap65 happy_var_4) -> +        case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> +        case happyOut72 happy_x_8 of { (HappyWrap72 happy_var_8) -> +        happyIn72+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ascii_TypeSigmaModal (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_4) (snd happy_var_5) (snd happy_var_8))+        ) `HappyStk` happyRest}}}}}++happyReduce_200 = happyReduce 8# 34# happyReduction_200+happyReduction_200 (happy_x_8 `HappyStk`+        happy_x_7 `HappyStk`+        happy_x_6 `HappyStk`+        happy_x_5 `HappyStk`+        happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut59 happy_x_3 of { (HappyWrap59 happy_var_3) -> +        case happyOut60 happy_x_5 of { (HappyWrap60 happy_var_5) -> +        case happyOut72 happy_x_8 of { (HappyWrap72 happy_var_8) -> +        happyIn72+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TypeSigmaTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))+        ) `HappyStk` happyRest}}}}++happyReduce_201 = happyReduce 4# 34# happyReduction_201+happyReduction_201 (happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut56 happy_x_2 of { (HappyWrap56 happy_var_2) -> +        case happyOut72 happy_x_4 of { (HappyWrap72 happy_var_4) -> +        happyIn72+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Lambda (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4))+        ) `HappyStk` happyRest}}}++happyReduce_202 = happyReduce 8# 34# happyReduction_202+happyReduction_202 (happy_x_8 `HappyStk`+        happy_x_7 `HappyStk`+        happy_x_6 `HappyStk`+        happy_x_5 `HappyStk`+        happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut51 happy_x_3 of { (HappyWrap51 happy_var_3) -> +        case happyOut73 happy_x_5 of { (HappyWrap73 happy_var_5) -> +        case happyOut72 happy_x_8 of { (HappyWrap72 happy_var_8) -> +        happyIn72+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.unicode_TypeSigmaAlt (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))+        ) `HappyStk` happyRest}}}}++happyReduce_203 = happyReduce 8# 34# happyReduction_203+happyReduction_203 (happy_x_8 `HappyStk`+        happy_x_7 `HappyStk`+        happy_x_6 `HappyStk`+        happy_x_5 `HappyStk`+        happy_x_4 `HappyStk`+        happy_x_3 `HappyStk`+        happy_x_2 `HappyStk`+        happy_x_1 `HappyStk`+        happyRest)+         = case happyOutTok happy_x_1 of { happy_var_1 -> +        case happyOut59 happy_x_3 of { (HappyWrap59 happy_var_3) -> +        case happyOut60 happy_x_5 of { (HappyWrap60 happy_var_5) -> +        case happyOut72 happy_x_8 of { (HappyWrap72 happy_var_8) -> +        happyIn72+                 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.unicode_TypeSigmaTupleAlt (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8))+        ) `HappyStk` happyRest}}}}++happyReduce_204 = happySpecReduce_3  35# happyReduction_204+happyReduction_204 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut70 happy_x_1 of { (HappyWrap70 happy_var_1) -> +        case happyOut72 happy_x_3 of { (HappyWrap72 happy_var_3) -> +        happyIn73+                 ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeAsc (fst happy_var_1) (snd happy_var_1) (snd happy_var_3))+        )}}++happyReduce_205 = happySpecReduce_1  35# happyReduction_205+happyReduction_205 happy_x_1+         =  case happyOut72 happy_x_1 of { (HappyWrap72 happy_var_1) -> +        happyIn73+                 ((fst happy_var_1, (snd happy_var_1))+        )}++happyReduce_206 = happySpecReduce_1  36# happyReduction_206+happyReduction_206 happy_x_1+         =  case happyOut73 happy_x_1 of { (HappyWrap73 happy_var_1) -> +        happyIn74+                 ((fst happy_var_1, (:[]) (snd happy_var_1))+        )}++happyReduce_207 = happySpecReduce_3  36# happyReduction_207+happyReduction_207 happy_x_3+        happy_x_2+        happy_x_1+         =  case happyOut73 happy_x_1 of { (HappyWrap73 happy_var_1) -> +        case happyOut74 happy_x_3 of { (HappyWrap74 happy_var_3) -> +        happyIn74+                 ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3))+        )}}++happyTerminalToTok term = case term of {+        PT _ (TS _ 1) -> 2#;+        PT _ (TS _ 2) -> 3#;+        PT _ (TS _ 3) -> 4#;+        PT _ (TS _ 4) -> 5#;+        PT _ (TS _ 5) -> 6#;+        PT _ (TS _ 6) -> 7#;+        PT _ (TS _ 7) -> 8#;+        PT _ (TS _ 8) -> 9#;+        PT _ (TS _ 9) -> 10#;+        PT _ (TS _ 10) -> 11#;+        PT _ (TS _ 11) -> 12#;+        PT _ (TS _ 12) -> 13#;+        PT _ (TS _ 13) -> 14#;+        PT _ (TS _ 14) -> 15#;+        PT _ (TS _ 15) -> 16#;+        PT _ (TS _ 16) -> 17#;+        PT _ (TS _ 17) -> 18#;+        PT _ (TS _ 18) -> 19#;+        PT _ (TS _ 19) -> 20#;+        PT _ (TS _ 20) -> 21#;+        PT _ (TS _ 21) -> 22#;+        PT _ (TS _ 22) -> 23#;+        PT _ (TS _ 23) -> 24#;+        PT _ (TS _ 24) -> 25#;+        PT _ (TS _ 25) -> 26#;+        PT _ (TS _ 26) -> 27#;+        PT _ (TS _ 27) -> 28#;+        PT _ (TS _ 28) -> 29#;+        PT _ (TS _ 29) -> 30#;+        PT _ (TS _ 30) -> 31#;+        PT _ (TS _ 31) -> 32#;+        PT _ (TS _ 32) -> 33#;+        PT _ (TS _ 33) -> 34#;+        PT _ (TS _ 34) -> 35#;+        PT _ (TS _ 35) -> 36#;+        PT _ (TS _ 36) -> 37#;+        PT _ (TS _ 37) -> 38#;+        PT _ (TS _ 38) -> 39#;+        PT _ (TS _ 39) -> 40#;+        PT _ (TS _ 40) -> 41#;+        PT _ (TS _ 41) -> 42#;+        PT _ (TS _ 42) -> 43#;+        PT _ (TS _ 43) -> 44#;+        PT _ (TS _ 44) -> 45#;+        PT _ (TS _ 45) -> 46#;+        PT _ (TS _ 46) -> 47#;+        PT _ (TS _ 47) -> 48#;+        PT _ (TS _ 48) -> 49#;+        PT _ (TS _ 49) -> 50#;+        PT _ (TS _ 50) -> 51#;+        PT _ (TS _ 51) -> 52#;+        PT _ (TS _ 52) -> 53#;+        PT _ (TS _ 53) -> 54#;+        PT _ (TS _ 54) -> 55#;+        PT _ (TS _ 55) -> 56#;+        PT _ (TS _ 56) -> 57#;+        PT _ (TS _ 57) -> 58#;+        PT _ (TS _ 58) -> 59#;+        PT _ (TS _ 59) -> 60#;+        PT _ (TS _ 60) -> 61#;+        PT _ (TS _ 61) -> 62#;+        PT _ (TS _ 62) -> 63#;+        PT _ (TS _ 63) -> 64#;+        PT _ (TS _ 64) -> 65#;+        PT _ (TS _ 65) -> 66#;+        PT _ (TS _ 66) -> 67#;+        PT _ (TS _ 67) -> 68#;+        PT _ (TS _ 68) -> 69#;+        PT _ (TS _ 69) -> 70#;+        PT _ (TS _ 70) -> 71#;+        PT _ (TS _ 71) -> 72#;+        PT _ (TS _ 72) -> 73#;+        PT _ (TS _ 73) -> 74#;+        PT _ (TS _ 74) -> 75#;+        PT _ (TS _ 75) -> 76#;+        PT _ (TS _ 76) -> 77#;+        PT _ (TS _ 77) -> 78#;+        PT _ (TS _ 78) -> 79#;+        PT _ (TS _ 79) -> 80#;+        PT _ (TS _ 80) -> 81#;+        PT _ (TS _ 81) -> 82#;+        PT _ (TS _ 82) -> 83#;+        PT _ (TS _ 83) -> 84#;+        PT _ (TS _ 84) -> 85#;+        PT _ (TS _ 85) -> 86#;+        PT _ (TS _ 86) -> 87#;+        PT _ (TS _ 87) -> 88#;+        PT _ (TS _ 88) -> 89#;+        PT _ (TS _ 89) -> 90#;+        PT _ (TS _ 90) -> 91#;+        PT _ (TS _ 91) -> 92#;+        PT _ (TS _ 92) -> 93#;+        PT _ (TS _ 93) -> 94#;+        PT _ (TS _ 94) -> 95#;+        PT _ (TS _ 95) -> 96#;+        PT _ (TS _ 96) -> 97#;+        PT _ (TS _ 97) -> 98#;+        PT _ (TS _ 98) -> 99#;+        PT _ (TS _ 99) -> 100#;+        PT _ (TS _ 100) -> 101#;+        PT _ (TS _ 101) -> 102#;+        PT _ (TS _ 102) -> 103#;+        PT _ (TS _ 103) -> 104#;+        PT _ (TS _ 104) -> 105#;+        PT _ (TS _ 105) -> 106#;+        PT _ (TS _ 106) -> 107#;+        PT _ (TS _ 107) -> 108#;+        PT _ (TS _ 108) -> 109#;+        PT _ (TS _ 109) -> 110#;+        PT _ (TS _ 110) -> 111#;+        PT _ (TL _) -> 112#;+        PT _ (T_VarIdentToken _) -> 113#;+        PT _ (T_HoleIdentToken _) -> 114#;+        _ -> -1#;+        }+{-# NOINLINE happyTerminalToTok #-}++happyLex kend  _kmore []       = kend notHappyAtAll []+happyLex _kend kmore  (tk:tks) = kmore (happyTerminalToTok tk) tk tks+{-# INLINE happyLex #-}++happyNewToken action sts stk = happyLex (\tk -> happyDoAction 115# notHappyAtAll action sts stk) (\i tk -> happyDoAction i tk action sts stk)++happyReport 115# tk explist resume tks = happyReport' tks explist resume+happyReport _ tk explist resume tks = happyReport' (tk:tks) explist (\tks -> resume (Happy_Prelude.tail tks))+++happyThen :: () => (Err a) -> (a -> (Err b)) -> (Err b)+happyThen = ((>>=))+happyReturn :: () => a -> (Err a)+happyReturn = (return)+happyThen1 m k tks = ((>>=)) m (\a -> k a tks)+happyFmap1 f m tks = happyThen (m tks) (\a -> happyReturn (f a))+happyReturn1 :: () => a -> b -> (Err a)+happyReturn1 = \a tks -> (return) a+happyReport' :: () => [(Token)] -> [Happy_Prelude.String] -> ([(Token)] -> (Err a)) -> (Err a)+happyReport' = (\tokens expected resume -> happyError tokens)++happyAbort :: () => [(Token)] -> (Err a)+happyAbort = Happy_Prelude.error "Called abort handler in non-resumptive parser"++pModule_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 0# tks) (\x -> happyReturn (let {(HappyWrap41 x') = happyOut41 x} in x'))++pHoleIdent_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 1# tks) (\x -> happyReturn (let {(HappyWrap42 x') = happyOut42 x} in x'))++pVarIdent_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 2# tks) (\x -> happyReturn (let {(HappyWrap43 x') = happyOut43 x} in x'))++pListVarIdent_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 3# tks) (\x -> happyReturn (let {(HappyWrap44 x') = happyOut44 x} in x'))++pLanguageDecl_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 4# tks) (\x -> happyReturn (let {(HappyWrap45 x') = happyOut45 x} in x'))++pLanguage_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 5# tks) (\x -> happyReturn (let {(HappyWrap46 x') = happyOut46 x} in x'))++pCommand_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 6# tks) (\x -> happyReturn (let {(HappyWrap47 x') = happyOut47 x} in x'))++pListCommand_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 7# tks) (\x -> happyReturn (let {(HappyWrap48 x') = happyOut48 x} in x'))++pDeclUsedVars_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 8# tks) (\x -> happyReturn (let {(HappyWrap49 x') = happyOut49 x} in x'))++pSectionName_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 9# tks) (\x -> happyReturn (let {(HappyWrap50 x') = happyOut50 x} in x'))++pPattern_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 10# tks) (\x -> happyReturn (let {(HappyWrap51 x') = happyOut51 x} in x'))++pListPattern_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 11# tks) (\x -> happyReturn (let {(HappyWrap52 x') = happyOut52 x} in x'))++pPattern1_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 12# tks) (\x -> happyReturn (let {(HappyWrap53 x') = happyOut53 x} in x'))++pListPattern1_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 13# tks) (\x -> happyReturn (let {(HappyWrap54 x') = happyOut54 x} in x'))++pParam_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 14# tks) (\x -> happyReturn (let {(HappyWrap55 x') = happyOut55 x} in x'))++pListParam_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 15# tks) (\x -> happyReturn (let {(HappyWrap56 x') = happyOut56 x} in x'))++pBind_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 16# tks) (\x -> happyReturn (let {(HappyWrap57 x') = happyOut57 x} in x'))++pParamDecl_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 17# tks) (\x -> happyReturn (let {(HappyWrap58 x') = happyOut58 x} in x'))++pSigmaParam_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 18# tks) (\x -> happyReturn (let {(HappyWrap59 x') = happyOut59 x} in x'))++pListSigmaParam_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 19# tks) (\x -> happyReturn (let {(HappyWrap60 x') = happyOut60 x} in x'))++pRestriction_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 20# tks) (\x -> happyReturn (let {(HappyWrap61 x') = happyOut61 x} in x'))++pListRestriction_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 21# tks) (\x -> happyReturn (let {(HappyWrap62 x') = happyOut62 x} in x'))++pModality_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 22# tks) (\x -> happyReturn (let {(HappyWrap63 x') = happyOut63 x} in x'))++pModComp_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 23# tks) (\x -> happyReturn (let {(HappyWrap64 x') = happyOut64 x} in x'))++pModalColon_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 24# tks) (\x -> happyReturn (let {(HappyWrap65 x') = happyOut65 x} in x'))++pTerm7_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 25# tks) (\x -> happyReturn (let {(HappyWrap66 x') = happyOut66 x} in x'))++pTerm5_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 26# tks) (\x -> happyReturn (let {(HappyWrap67 x') = happyOut67 x} in x'))++pTerm4_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 27# tks) (\x -> happyReturn (let {(HappyWrap68 x') = happyOut68 x} in x'))++pTerm3_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 28# tks) (\x -> happyReturn (let {(HappyWrap69 x') = happyOut69 x} in x'))++pTerm2_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 29# tks) (\x -> happyReturn (let {(HappyWrap70 x') = happyOut70 x} in x'))++pTerm6_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 30# tks) (\x -> happyReturn (let {(HappyWrap71 x') = happyOut71 x} in x'))++pTerm1_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 31# tks) (\x -> happyReturn (let {(HappyWrap72 x') = happyOut72 x} in x'))++pTerm_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 32# tks) (\x -> happyReturn (let {(HappyWrap73 x') = happyOut73 x} in x'))++pListTerm_internal tks = happySomeParser where+ happySomeParser = happyThen (happyDoParse 33# tks) (\x -> happyReturn (let {(HappyWrap74 x') = happyOut74 x} in x'))++happySeq = happyDontSeq+++type Err = Either String++happyError :: [Token] -> Err a+happyError ts = Left $+  "syntax error at " ++ tokenPos ts +++  case ts of+    []      -> []+    [Err _] -> " due to lexer error"+    t:_     -> " before `" ++ (prToken t) ++ "'"++myLexer :: Data.Text.Text -> [Token]+myLexer = tokens++-- Entrypoints++pModule :: [Token] -> Err Language.Rzk.Syntax.Abs.Module+pModule = fmap snd . pModule_internal++pHoleIdent :: [Token] -> Err Language.Rzk.Syntax.Abs.HoleIdent+pHoleIdent = fmap snd . pHoleIdent_internal++pVarIdent :: [Token] -> Err Language.Rzk.Syntax.Abs.VarIdent+pVarIdent = fmap snd . pVarIdent_internal++pListVarIdent :: [Token] -> Err [Language.Rzk.Syntax.Abs.VarIdent]+pListVarIdent = fmap snd . pListVarIdent_internal++pLanguageDecl :: [Token] -> Err Language.Rzk.Syntax.Abs.LanguageDecl+pLanguageDecl = fmap snd . pLanguageDecl_internal++pLanguage :: [Token] -> Err Language.Rzk.Syntax.Abs.Language+pLanguage = fmap snd . pLanguage_internal++pCommand :: [Token] -> Err Language.Rzk.Syntax.Abs.Command+pCommand = fmap snd . pCommand_internal++pListCommand :: [Token] -> Err [Language.Rzk.Syntax.Abs.Command]+pListCommand = fmap snd . pListCommand_internal++pDeclUsedVars :: [Token] -> Err Language.Rzk.Syntax.Abs.DeclUsedVars+pDeclUsedVars = fmap snd . pDeclUsedVars_internal++pSectionName :: [Token] -> Err Language.Rzk.Syntax.Abs.SectionName+pSectionName = fmap snd . pSectionName_internal++pPattern :: [Token] -> Err Language.Rzk.Syntax.Abs.Pattern+pPattern = fmap snd . pPattern_internal++pListPattern :: [Token] -> Err [Language.Rzk.Syntax.Abs.Pattern]+pListPattern = fmap snd . pListPattern_internal++pPattern1 :: [Token] -> Err Language.Rzk.Syntax.Abs.Pattern+pPattern1 = fmap snd . pPattern1_internal++pListPattern1 :: [Token] -> Err [Language.Rzk.Syntax.Abs.Pattern]+pListPattern1 = fmap snd . pListPattern1_internal++pParam :: [Token] -> Err Language.Rzk.Syntax.Abs.Param+pParam = fmap snd . pParam_internal++pListParam :: [Token] -> Err [Language.Rzk.Syntax.Abs.Param]+pListParam = fmap snd . pListParam_internal++pBind :: [Token] -> Err Language.Rzk.Syntax.Abs.Bind+pBind = fmap snd . pBind_internal++pParamDecl :: [Token] -> Err Language.Rzk.Syntax.Abs.ParamDecl+pParamDecl = fmap snd . pParamDecl_internal++pSigmaParam :: [Token] -> Err Language.Rzk.Syntax.Abs.SigmaParam+pSigmaParam = fmap snd . pSigmaParam_internal++pListSigmaParam :: [Token] -> Err [Language.Rzk.Syntax.Abs.SigmaParam]+pListSigmaParam = fmap snd . pListSigmaParam_internal++pRestriction :: [Token] -> Err Language.Rzk.Syntax.Abs.Restriction+pRestriction = fmap snd . pRestriction_internal++pListRestriction :: [Token] -> Err [Language.Rzk.Syntax.Abs.Restriction]+pListRestriction = fmap snd . pListRestriction_internal++pModality :: [Token] -> Err Language.Rzk.Syntax.Abs.Modality+pModality = fmap snd . pModality_internal++pModComp :: [Token] -> Err Language.Rzk.Syntax.Abs.ModComp+pModComp = fmap snd . pModComp_internal++pModalColon :: [Token] -> Err Language.Rzk.Syntax.Abs.ModalColon+pModalColon = fmap snd . pModalColon_internal  pTerm7 :: [Token] -> Err Language.Rzk.Syntax.Abs.Term pTerm7 = fmap snd . pTerm7_internal
− src/Language/Rzk/Syntax/Par.y
@@ -1,575 +0,0 @@--- -*- haskell -*- File generated by the BNF Converter (bnfc 2.9.6.2).---- Parser definition for use with Happy-{-{-# OPTIONS_GHC -Wno-incomplete-patterns -Wno-overlapping-patterns #-}-{-# LANGUAGE PatternSynonyms #-}--module Language.Rzk.Syntax.Par-  ( happyError-  , myLexer-  , pModule-  , pHoleIdent-  , pVarIdent-  , pListVarIdent-  , pLanguageDecl-  , pLanguage-  , pCommand-  , pListCommand-  , pDeclUsedVars-  , pSectionName-  , pPattern-  , pListPattern-  , pPattern1-  , pListPattern1-  , pParam-  , pListParam-  , pBind-  , pParamDecl-  , pSigmaParam-  , pListSigmaParam-  , pRestriction-  , pListRestriction-  , pModality-  , pModComp-  , pTerm7-  , pTerm5-  , pTerm4-  , pTerm3-  , pTerm2-  , pTerm6-  , pTerm1-  , pTerm-  , pListTerm-  ) where--import Prelude--import qualified Language.Rzk.Syntax.Abs-import Language.Rzk.Syntax.Lex-import qualified Data.Text--}--%name pModule_internal Module-%name pHoleIdent_internal HoleIdent-%name pVarIdent_internal VarIdent-%name pListVarIdent_internal ListVarIdent-%name pLanguageDecl_internal LanguageDecl-%name pLanguage_internal Language-%name pCommand_internal Command-%name pListCommand_internal ListCommand-%name pDeclUsedVars_internal DeclUsedVars-%name pSectionName_internal SectionName-%name pPattern_internal Pattern-%name pListPattern_internal ListPattern-%name pPattern1_internal Pattern1-%name pListPattern1_internal ListPattern1-%name pParam_internal Param-%name pListParam_internal ListParam-%name pBind_internal Bind-%name pParamDecl_internal ParamDecl-%name pSigmaParam_internal SigmaParam-%name pListSigmaParam_internal ListSigmaParam-%name pRestriction_internal Restriction-%name pListRestriction_internal ListRestriction-%name pModality_internal Modality-%name pModComp_internal ModComp-%name pTerm7_internal Term7-%name pTerm5_internal Term5-%name pTerm4_internal Term4-%name pTerm3_internal Term3-%name pTerm2_internal Term2-%name pTerm6_internal Term6-%name pTerm1_internal Term1-%name pTerm_internal Term-%name pListTerm_internal ListTerm--- no lexer declaration-%monad { Err } { (>>=) } { return }-%tokentype {Token}-%token-  '#assume'        { PT _ (TS _ 1)             }-  '#check'         { PT _ (TS _ 2)             }-  '#compute'       { PT _ (TS _ 3)             }-  '#compute-nf'    { PT _ (TS _ 4)             }-  '#compute-whnf'  { PT _ (TS _ 5)             }-  '#def'           { PT _ (TS _ 6)             }-  '#define'        { PT _ (TS _ 7)             }-  '#end'           { PT _ (TS _ 8)             }-  '#lang'          { PT _ (TS _ 9)             }-  '#postulate'     { PT _ (TS _ 10)            }-  '#section'       { PT _ (TS _ 11)            }-  '#set-option'    { PT _ (TS _ 12)            }-  '#unset-option'  { PT _ (TS _ 13)            }-  '#variable'      { PT _ (TS _ 14)            }-  '#variables'     { PT _ (TS _ 15)            }-  '$extract$'      { PT _ (TS _ 16)            }-  '('              { PT _ (TS _ 17)            }-  ')'              { PT _ (TS _ 18)            }-  '*'              { PT _ (TS _ 19)            }-  '*_1'            { PT _ (TS _ 20)            }-  '*₁'             { PT _ (TS _ 21)            }-  ','              { PT _ (TS _ 22)            }-  '->'             { PT _ (TS _ 23)            }-  '/'              { PT _ (TS _ 24)            }-  '/\\'            { PT _ (TS _ 25)            }-  '0_2'            { PT _ (TS _ 26)            }-  '0₂'             { PT _ (TS _ 27)            }-  '1'              { PT _ (TS _ 28)            }-  '1_2'            { PT _ (TS _ 29)            }-  '1₂'             { PT _ (TS _ 30)            }-  '2'              { PT _ (TS _ 31)            }-  ':'              { PT _ (TS _ 32)            }-  ':='             { PT _ (TS _ 33)            }-  ';'              { PT _ (TS _ 34)            }-  '<'              { PT _ (TS _ 35)            }-  '<='             { PT _ (TS _ 36)            }-  '<|'             { PT _ (TS _ 37)            }-  '='              { PT _ (TS _ 38)            }-  '==='            { PT _ (TS _ 39)            }-  '=_{'            { PT _ (TS _ 40)            }-  '>'              { PT _ (TS _ 41)            }-  'BOT'            { PT _ (TS _ 42)            }-  'CUBE'           { PT _ (TS _ 43)            }-  'Sigma'          { PT _ (TS _ 44)            }-  'TOP'            { PT _ (TS _ 45)            }-  'TOPE'           { PT _ (TS _ 46)            }-  'U'              { PT _ (TS _ 47)            }-  'Unit'           { PT _ (TS _ 48)            }-  '['              { PT _ (TS _ 49)            }-  '\\'             { PT _ (TS _ 50)            }-  '\\/'            { PT _ (TS _ 51)            }-  ']'              { PT _ (TS _ 52)            }-  '_#'             { PT _ (TS _ 53)            }-  '_b'             { PT _ (TS _ 54)            }-  '_id'            { PT _ (TS _ 55)            }-  '_op'            { PT _ (TS _ 56)            }-  'as'             { PT _ (TS _ 57)            }-  'first'          { PT _ (TS _ 58)            }-  'flip_op'        { PT _ (TS _ 59)            }-  'flipᵒᵖ'         { PT _ (TS _ 60)            }-  'idJ'            { PT _ (TS _ 61)            }-  'in'             { PT _ (TS _ 62)            }-  'inv_op'         { PT _ (TS _ 63)            }-  'invᵒᵖ'          { PT _ (TS _ 64)            }-  'let'            { PT _ (TS _ 65)            }-  'mod'            { PT _ (TS _ 66)            }-  'recBOT'         { PT _ (TS _ 67)            }-  'recOR'          { PT _ (TS _ 68)            }-  'refl'           { PT _ (TS _ 69)            }-  'refl_{'         { PT _ (TS _ 70)            }-  'rzk-1'          { PT _ (TS _ 71)            }-  'second'         { PT _ (TS _ 72)            }-  'unflip_op'      { PT _ (TS _ 73)            }-  'unflipᵒᵖ'       { PT _ (TS _ 74)            }-  'uninv_op'       { PT _ (TS _ 75)            }-  'uninvᵒᵖ'        { PT _ (TS _ 76)            }-  'unit'           { PT _ (TS _ 77)            }-  'uses'           { PT _ (TS _ 78)            }-  '{'              { PT _ (TS _ 79)            }-  '|'              { PT _ (TS _ 80)            }-  '|->'            { PT _ (TS _ 81)            }-  '|>'             { PT _ (TS _ 82)            }-  '}'              { PT _ (TS _ 83)            }-  '×'              { PT _ (TS _ 84)            }-  'Σ'              { PT _ (TS _ 85)            }-  'π₁'             { PT _ (TS _ 86)            }-  'π₂'             { PT _ (TS _ 87)            }-  'ᵒᵖ'             { PT _ (TS _ 88)            }-  '→'              { PT _ (TS _ 89)            }-  '↦'              { PT _ (TS _ 90)            }-  '∑'              { PT _ (TS _ 91)            }-  '∧'              { PT _ (TS _ 92)            }-  '∨'              { PT _ (TS _ 93)            }-  '≡'              { PT _ (TS _ 94)            }-  '≤'              { PT _ (TS _ 95)            }-  '⊤'              { PT _ (TS _ 96)            }-  '⊥'              { PT _ (TS _ 97)            }-  '♭'              { PT _ (TS _ 98)            }-  '♯'              { PT _ (TS _ 99)            }-  L_quoted         { PT _ (TL _)               }-  L_VarIdentToken  { PT _ (T_VarIdentToken _)  }-  L_HoleIdentToken { PT _ (T_HoleIdentToken _) }--%%--String  :: { (Language.Rzk.Syntax.Abs.BNFC'Position, String) }-String   : L_quoted { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), (Data.Text.unpack ((\(PT _ (TL s)) -> s) $1))) }--VarIdentToken :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdentToken) }-VarIdentToken  : L_VarIdentToken { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.VarIdentToken (tokenText $1)) }--HoleIdentToken :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdentToken) }-HoleIdentToken  : L_HoleIdentToken { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.HoleIdentToken (tokenText $1)) }--Module :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Module) }-Module-  : LanguageDecl ListCommand { (fst $1, Language.Rzk.Syntax.Abs.Module (fst $1) (snd $1) (snd $2)) }--HoleIdent :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.HoleIdent) }-HoleIdent-  : HoleIdentToken { (fst $1, Language.Rzk.Syntax.Abs.HoleIdent (fst $1) (snd $1)) }--VarIdent :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.VarIdent) }-VarIdent-  : VarIdentToken { (fst $1, Language.Rzk.Syntax.Abs.VarIdent (fst $1) (snd $1)) }--ListVarIdent :: { (Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.VarIdent]) }-ListVarIdent-  : VarIdent { (fst $1, (:[]) (snd $1)) }-  | VarIdent ListVarIdent { (fst $1, (:) (snd $1) (snd $2)) }--LanguageDecl :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.LanguageDecl) }-LanguageDecl-  : '#lang' Language ';' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.LanguageDecl (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }--Language :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Language) }-Language-  : 'rzk-1' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Rzk1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }--Command :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Command) }-Command-  : '#set-option' String '=' String { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandSetOption (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }-  | '#unset-option' String { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandUnsetOption (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | '#check' Term ':' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandCheck (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }-  | '#compute' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandCompute (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | '#compute-whnf' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandComputeWHNF (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | '#compute-nf' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandComputeNF (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | '#postulate' VarIdent DeclUsedVars ListParam ':' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandPostulate (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3) (snd $4) (snd $6)) }-  | '#postulate' VarIdent DeclUsedVars ':' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.commandPostulateNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3) (snd $5)) }-  | '#assume' ListVarIdent ':' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandAssume (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }-  | '#variable' VarIdent ':' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.commandVariable (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }-  | '#variables' ListVarIdent ':' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.commandVariables (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }-  | '#section' SectionName { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandSection (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | '#end' SectionName { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandSectionEnd (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | '#define' VarIdent DeclUsedVars ListParam ':' Term ':=' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CommandDefine (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3) (snd $4) (snd $6) (snd $8)) }-  | '#define' VarIdent DeclUsedVars ':' Term ':=' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.commandDefineNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3) (snd $5) (snd $7)) }-  | '#def' VarIdent DeclUsedVars ListParam ':' Term ':=' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.commandDef (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3) (snd $4) (snd $6) (snd $8)) }-  | '#def' VarIdent DeclUsedVars ':' Term ':=' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.commandDefNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3) (snd $5) (snd $7)) }--ListCommand :: { (Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Command]) }-ListCommand-  : {- empty -} { (Language.Rzk.Syntax.Abs.BNFC'NoPosition, []) }-  | Command ';' ListCommand { (fst $1, (:) (snd $1) (snd $3)) }--DeclUsedVars :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.DeclUsedVars) }-DeclUsedVars-  : 'uses' '(' ListVarIdent ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.DeclUsedVars (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3)) }-  | {- empty -} { (Language.Rzk.Syntax.Abs.BNFC'NoPosition, Language.Rzk.Syntax.Abs.noDeclUsedVars Language.Rzk.Syntax.Abs.BNFC'NoPosition) }--SectionName :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SectionName) }-SectionName-  : {- empty -} { (Language.Rzk.Syntax.Abs.BNFC'NoPosition, Language.Rzk.Syntax.Abs.NoSectionName Language.Rzk.Syntax.Abs.BNFC'NoPosition) }-  | VarIdent { (fst $1, Language.Rzk.Syntax.Abs.SomeSectionName (fst $1) (snd $1)) }--Pattern :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern) }-Pattern-  : 'unit' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.PatternUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | VarIdent { (fst $1, Language.Rzk.Syntax.Abs.PatternVar (fst $1) (snd $1)) }-  | '(' Pattern ',' Pattern ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.PatternPair (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }-  | '(' Pattern ',' Pattern ',' ListPattern1 ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.PatternTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $6)) }--ListPattern :: { (Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern]) }-ListPattern-  : Pattern { (fst $1, (:[]) (snd $1)) }-  | Pattern ListPattern { (fst $1, (:) (snd $1) (snd $2)) }--Pattern1 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Pattern) }-Pattern1 : Pattern { (fst $1, (snd $1)) }--ListPattern1 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Pattern]) }-ListPattern1-  : Pattern1 { (fst $1, (:[]) (snd $1)) }-  | Pattern1 ',' ListPattern1 { (fst $1, (:) (snd $1) (snd $3)) }--Param :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Param) }-Param-  : Pattern { (fst $1, Language.Rzk.Syntax.Abs.ParamPattern (fst $1) (snd $1)) }-  | '(' ListPattern ':' Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamPatternType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }-  | '(' ListPattern ':' Term '|' Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamPatternShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $6)) }-  | '{' Pattern ':' Term '|' Term '}' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamPatternShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $6)) }-  | '(' ListPattern ':' Modality Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamPatternModalType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $5)) }--ListParam :: { (Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Param]) }-ListParam-  : Param { (fst $1, (:[]) (snd $1)) }-  | Param ListParam { (fst $1, (:) (snd $1) (snd $2)) }--Bind :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Bind) }-Bind-  : Pattern { (fst $1, Language.Rzk.Syntax.Abs.BindPattern (fst $1) (snd $1)) }-  | Pattern ':' Term { (fst $1, Language.Rzk.Syntax.Abs.BindPatternType (fst $1) (snd $1) (snd $3)) }--ParamDecl :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ParamDecl) }-ParamDecl-  : Term6 { (fst $1, Language.Rzk.Syntax.Abs.ParamType (fst $1) (snd $1)) }-  | '(' Term ':' Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamTermType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }-  | '(' Term ':' Term '|' Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamTermShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $6)) }-  | '{' Pattern ':' Term '}' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamTermTypeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }-  | '{' '(' Pattern ':' Term ')' '|' Term '}' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamVarShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $8)) }-  | '{' Pattern ':' Term '|' Term '}' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.paramVarShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $6)) }-  | '(' Term ':' Modality Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ParamTermModalType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $5)) }--SigmaParam :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.SigmaParam) }-SigmaParam-  : Pattern ':' Term { (fst $1, Language.Rzk.Syntax.Abs.SigmaParam (fst $1) (snd $1) (snd $3)) }-  | Pattern ':' Modality Term { (fst $1, Language.Rzk.Syntax.Abs.SigmaParamModal (fst $1) (snd $1) (snd $3) (snd $4)) }--ListSigmaParam :: { (Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.SigmaParam]) }-ListSigmaParam-  : SigmaParam { (fst $1, (:[]) (snd $1)) }-  | SigmaParam ',' ListSigmaParam { (fst $1, (:) (snd $1) (snd $3)) }--Restriction :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Restriction) }-Restriction-  : Term '↦' Term { (fst $1, Language.Rzk.Syntax.Abs.Restriction (fst $1) (snd $1) (snd $3)) }-  | Term '|->' Term { (fst $1, Language.Rzk.Syntax.Abs.ASCII_Restriction (fst $1) (snd $1) (snd $3)) }--ListRestriction :: { (Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Restriction]) }-ListRestriction-  : Restriction { (fst $1, (:[]) (snd $1)) }-  | Restriction ',' ListRestriction { (fst $1, (:) (snd $1) (snd $3)) }--Modality :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Modality) }-Modality-  : '♭' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Flat (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | '_b' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_Flat (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | '♯' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Sharp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | '_#' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_Sharp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | 'ᵒᵖ' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Op (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | '_op' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_Op (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | '_id' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Id (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }--ModComp :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.ModComp) }-ModComp-  : Modality { (fst $1, Language.Rzk.Syntax.Abs.Single (fst $1) (snd $1)) }-  | Modality '/' Modality { (fst $1, Language.Rzk.Syntax.Abs.Comp (fst $1) (snd $1) (snd $3)) }--Term7 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term) }-Term7-  : 'U' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Universe (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | 'CUBE' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.UniverseCube (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | 'TOPE' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.UniverseTope (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | '1' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CubeUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | '*₁' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CubeUnitStar (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | '2' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Cube2 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | '0₂' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Cube2_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | '1₂' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Cube2_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | '⊤' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TopeTop (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | '⊥' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TopeBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | 'recBOT' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.RecBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | 'recOR' '(' ListRestriction ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.RecOr (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3)) }-  | 'recOR' '(' Term ',' Term ',' Term ',' Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.RecOrDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $7) (snd $9)) }-  | 'Unit' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TypeUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | '<' ParamDecl '→' Term '>' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TypeExtensionDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }-  | '(' Term ',' Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Pair (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }-  | '(' Term ',' Term ',' ListTerm ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Tuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $6)) }-  | 'mod' Modality Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ModApp (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3)) }-  | '<|' Modality '|' Term '|>' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ModType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }-  | 'unit' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Unit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | 'refl' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Refl (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | 'refl_{' Term '}' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ReflTerm (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | 'refl_{' Term ':' Term '}' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ReflTermType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }-  | 'idJ' '(' Term ',' Term ',' Term ',' Term ',' Term ',' Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.IdJ (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $7) (snd $9) (snd $11) (snd $13)) }-  | HoleIdent { (fst $1, Language.Rzk.Syntax.Abs.Hole (fst $1) (snd $1)) }-  | VarIdent { (fst $1, Language.Rzk.Syntax.Abs.Var (fst $1) (snd $1)) }-  | '(' Term ')' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), (snd $2)) }-  | '*_1' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_CubeUnitStar (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | '0_2' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_Cube2_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | '1_2' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_Cube2_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | 'TOP' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_TopeTop (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | 'BOT' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_TopeBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1))) }-  | '<' ParamDecl '->' Term '>' { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_TypeExtensionDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }--Term5 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term) }-Term5-  : Term5 '×' Term6 { (fst $1, Language.Rzk.Syntax.Abs.CubeProduct (fst $1) (snd $1) (snd $3)) }-  | Term6 { (fst $1, (snd $1)) }-  | Term5 '*' Term6 { (fst $1, Language.Rzk.Syntax.Abs.ascii_CubeProduct (fst $1) (snd $1) (snd $3)) }--Term4 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term) }-Term4-  : Term5 '≡' Term5 { (fst $1, Language.Rzk.Syntax.Abs.TopeEQ (fst $1) (snd $1) (snd $3)) }-  | Term5 '≤' Term5 { (fst $1, Language.Rzk.Syntax.Abs.TopeLEQ (fst $1) (snd $1) (snd $3)) }-  | Term5 { (fst $1, (snd $1)) }-  | Term5 '===' Term5 { (fst $1, Language.Rzk.Syntax.Abs.ASCII_TopeEQ (fst $1) (snd $1) (snd $3)) }-  | Term5 '<=' Term5 { (fst $1, Language.Rzk.Syntax.Abs.ASCII_TopeLEQ (fst $1) (snd $1) (snd $3)) }--Term3 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term) }-Term3-  : Term4 '∧' Term3 { (fst $1, Language.Rzk.Syntax.Abs.TopeAnd (fst $1) (snd $1) (snd $3)) }-  | Term4 { (fst $1, (snd $1)) }-  | Term4 '/\\' Term3 { (fst $1, Language.Rzk.Syntax.Abs.ASCII_TopeAnd (fst $1) (snd $1) (snd $3)) }--Term2 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term) }-Term2-  : Term3 '∨' Term2 { (fst $1, Language.Rzk.Syntax.Abs.TopeOr (fst $1) (snd $1) (snd $3)) }-  | Term3 { (fst $1, (snd $1)) }-  | Term3 '\\/' Term2 { (fst $1, Language.Rzk.Syntax.Abs.ASCII_TopeOr (fst $1) (snd $1) (snd $3)) }--Term6 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term) }-Term6-  : 'invᵒᵖ' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TopeInv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | 'inv_op' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ascii_TopeInv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | 'uninvᵒᵖ' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TopeUninv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | 'uninv_op' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ascii_TopeUninv (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | 'flipᵒᵖ' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CubeFlip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | 'flip_op' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ascii_CubeFlip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | 'unflipᵒᵖ' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.CubeUnflip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | 'unflip_op' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ascii_CubeUnflip (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | Term6 '[' ListRestriction ']' { (fst $1, Language.Rzk.Syntax.Abs.TypeRestricted (fst $1) (snd $1) (snd $3)) }-  | Term6 Term7 { (fst $1, Language.Rzk.Syntax.Abs.App (fst $1) (snd $1) (snd $2)) }-  | '$extract$' ModComp Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ModExtract (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3)) }-  | 'π₁' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.First (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | 'π₂' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Second (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | Term7 { (fst $1, (snd $1)) }-  | 'first' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_First (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }-  | 'second' Term7 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_Second (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2)) }--Term1 :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term) }-Term1-  : ParamDecl '→' Term1 { (fst $1, Language.Rzk.Syntax.Abs.TypeFun (fst $1) (snd $1) (snd $3)) }-  | 'Σ' '(' Pattern ':' Term ')' ',' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TypeSigma (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $8)) }-  | 'Σ' '(' Pattern ':' Modality Term ')' ',' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TypeSigmaModal (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $6) (snd $9)) }-  | 'Σ' '(' SigmaParam ',' ListSigmaParam ')' ',' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.TypeSigmaTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $8)) }-  | Term2 '=_{' Term '}' Term2 { (fst $1, Language.Rzk.Syntax.Abs.TypeId (fst $1) (snd $1) (snd $3) (snd $5)) }-  | Term2 '=' Term2 { (fst $1, Language.Rzk.Syntax.Abs.TypeIdSimple (fst $1) (snd $1) (snd $3)) }-  | 'let' Bind ':=' Term 'in' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Let (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4) (snd $6)) }-  | '\\' ListParam '→' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.Lambda (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }-  | 'let' 'mod' ModComp Bind ':=' Term 'in' Term { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.LetMod (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $4) (snd $6) (snd $8)) }-  | Term2 { (fst $1, (snd $1)) }-  | ParamDecl '->' Term1 { (fst $1, Language.Rzk.Syntax.Abs.ASCII_TypeFun (fst $1) (snd $1) (snd $3)) }-  | 'Sigma' '(' Pattern ':' Term ')' ',' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_TypeSigma (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $8)) }-  | 'Sigma' '(' Pattern ':' Modality Term ')' ',' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_TypeSigmaModal (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $6) (snd $9)) }-  | 'Sigma' '(' SigmaParam ',' ListSigmaParam ')' ',' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_TypeSigmaTuple (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $8)) }-  | '\\' ListParam '->' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.ASCII_Lambda (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) }-  | '∑' '(' Pattern ':' Term ')' ',' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.unicode_TypeSigmaAlt (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $8)) }-  | '∑' '(' SigmaParam ',' ListSigmaParam ')' ',' Term1 { (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1), Language.Rzk.Syntax.Abs.unicode_TypeSigmaTupleAlt (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $8)) }--Term :: { (Language.Rzk.Syntax.Abs.BNFC'Position, Language.Rzk.Syntax.Abs.Term) }-Term-  : Term2 'as' Term1 { (fst $1, Language.Rzk.Syntax.Abs.TypeAsc (fst $1) (snd $1) (snd $3)) }-  | Term1 { (fst $1, (snd $1)) }--ListTerm :: { (Language.Rzk.Syntax.Abs.BNFC'Position, [Language.Rzk.Syntax.Abs.Term]) }-ListTerm-  : Term { (fst $1, (:[]) (snd $1)) }-  | Term ',' ListTerm { (fst $1, (:) (snd $1) (snd $3)) }--{--type Err = Either String--happyError :: [Token] -> Err a-happyError ts = Left $-  "syntax error at " ++ tokenPos ts ++-  case ts of-    []      -> []-    [Err _] -> " due to lexer error"-    t:_     -> " before `" ++ (prToken t) ++ "'"--myLexer :: Data.Text.Text -> [Token]-myLexer = tokens---- Entrypoints--pModule :: [Token] -> Err Language.Rzk.Syntax.Abs.Module-pModule = fmap snd . pModule_internal--pHoleIdent :: [Token] -> Err Language.Rzk.Syntax.Abs.HoleIdent-pHoleIdent = fmap snd . pHoleIdent_internal--pVarIdent :: [Token] -> Err Language.Rzk.Syntax.Abs.VarIdent-pVarIdent = fmap snd . pVarIdent_internal--pListVarIdent :: [Token] -> Err [Language.Rzk.Syntax.Abs.VarIdent]-pListVarIdent = fmap snd . pListVarIdent_internal--pLanguageDecl :: [Token] -> Err Language.Rzk.Syntax.Abs.LanguageDecl-pLanguageDecl = fmap snd . pLanguageDecl_internal--pLanguage :: [Token] -> Err Language.Rzk.Syntax.Abs.Language-pLanguage = fmap snd . pLanguage_internal--pCommand :: [Token] -> Err Language.Rzk.Syntax.Abs.Command-pCommand = fmap snd . pCommand_internal--pListCommand :: [Token] -> Err [Language.Rzk.Syntax.Abs.Command]-pListCommand = fmap snd . pListCommand_internal--pDeclUsedVars :: [Token] -> Err Language.Rzk.Syntax.Abs.DeclUsedVars-pDeclUsedVars = fmap snd . pDeclUsedVars_internal--pSectionName :: [Token] -> Err Language.Rzk.Syntax.Abs.SectionName-pSectionName = fmap snd . pSectionName_internal--pPattern :: [Token] -> Err Language.Rzk.Syntax.Abs.Pattern-pPattern = fmap snd . pPattern_internal--pListPattern :: [Token] -> Err [Language.Rzk.Syntax.Abs.Pattern]-pListPattern = fmap snd . pListPattern_internal--pPattern1 :: [Token] -> Err Language.Rzk.Syntax.Abs.Pattern-pPattern1 = fmap snd . pPattern1_internal--pListPattern1 :: [Token] -> Err [Language.Rzk.Syntax.Abs.Pattern]-pListPattern1 = fmap snd . pListPattern1_internal--pParam :: [Token] -> Err Language.Rzk.Syntax.Abs.Param-pParam = fmap snd . pParam_internal--pListParam :: [Token] -> Err [Language.Rzk.Syntax.Abs.Param]-pListParam = fmap snd . pListParam_internal--pBind :: [Token] -> Err Language.Rzk.Syntax.Abs.Bind-pBind = fmap snd . pBind_internal--pParamDecl :: [Token] -> Err Language.Rzk.Syntax.Abs.ParamDecl-pParamDecl = fmap snd . pParamDecl_internal--pSigmaParam :: [Token] -> Err Language.Rzk.Syntax.Abs.SigmaParam-pSigmaParam = fmap snd . pSigmaParam_internal--pListSigmaParam :: [Token] -> Err [Language.Rzk.Syntax.Abs.SigmaParam]-pListSigmaParam = fmap snd . pListSigmaParam_internal--pRestriction :: [Token] -> Err Language.Rzk.Syntax.Abs.Restriction-pRestriction = fmap snd . pRestriction_internal--pListRestriction :: [Token] -> Err [Language.Rzk.Syntax.Abs.Restriction]-pListRestriction = fmap snd . pListRestriction_internal--pModality :: [Token] -> Err Language.Rzk.Syntax.Abs.Modality-pModality = fmap snd . pModality_internal--pModComp :: [Token] -> Err Language.Rzk.Syntax.Abs.ModComp-pModComp = fmap snd . pModComp_internal--pTerm7 :: [Token] -> Err Language.Rzk.Syntax.Abs.Term-pTerm7 = fmap snd . pTerm7_internal--pTerm5 :: [Token] -> Err Language.Rzk.Syntax.Abs.Term-pTerm5 = fmap snd . pTerm5_internal--pTerm4 :: [Token] -> Err Language.Rzk.Syntax.Abs.Term-pTerm4 = fmap snd . pTerm4_internal--pTerm3 :: [Token] -> Err Language.Rzk.Syntax.Abs.Term-pTerm3 = fmap snd . pTerm3_internal--pTerm2 :: [Token] -> Err Language.Rzk.Syntax.Abs.Term-pTerm2 = fmap snd . pTerm2_internal--pTerm6 :: [Token] -> Err Language.Rzk.Syntax.Abs.Term-pTerm6 = fmap snd . pTerm6_internal--pTerm1 :: [Token] -> Err Language.Rzk.Syntax.Abs.Term-pTerm1 = fmap snd . pTerm1_internal--pTerm :: [Token] -> Err Language.Rzk.Syntax.Abs.Term-pTerm = fmap snd . pTerm_internal--pListTerm :: [Token] -> Err [Language.Rzk.Syntax.Abs.Term]-pListTerm = fmap snd . pListTerm_internal-}-
src/Language/Rzk/Syntax/Print.hs view
@@ -1,4 +1,4 @@--- File generated by the BNF Converter (bnfc 2.9.6.2).+-- File generated by the BNF Converter (bnfc 2.9.6.3).  {-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-}@@ -211,7 +211,8 @@     Language.Rzk.Syntax.Abs.ParamPatternType _ patterns term -> prPrec i 0 (concatD [doc (showString "("), prt 0 patterns, doc (showString ":"), prt 0 term, doc (showString ")")])     Language.Rzk.Syntax.Abs.ParamPatternShape _ patterns term1 term2 -> prPrec i 0 (concatD [doc (showString "("), prt 0 patterns, doc (showString ":"), prt 0 term1, doc (showString "|"), prt 0 term2, doc (showString ")")])     Language.Rzk.Syntax.Abs.ParamPatternShapeDeprecated _ pattern_ term1 term2 -> prPrec i 0 (concatD [doc (showString "{"), prt 0 pattern_, doc (showString ":"), prt 0 term1, doc (showString "|"), prt 0 term2, doc (showString "}")])-    Language.Rzk.Syntax.Abs.ParamPatternModalType _ patterns modality term -> prPrec i 0 (concatD [doc (showString "("), prt 0 patterns, doc (showString ":"), prt 0 modality, prt 0 term, doc (showString ")")])+    Language.Rzk.Syntax.Abs.ParamPatternModalType _ patterns modalcolon term -> prPrec i 0 (concatD [doc (showString "("), prt 0 patterns, prt 0 modalcolon, prt 0 term, doc (showString ")")])+    Language.Rzk.Syntax.Abs.ParamPatternModalShape _ patterns modalcolon term1 term2 -> prPrec i 0 (concatD [doc (showString "("), prt 0 patterns, prt 0 modalcolon, prt 0 term1, doc (showString "|"), prt 0 term2, doc (showString ")")])  instance Print [Language.Rzk.Syntax.Abs.Param' a] where   prt _ [] = concatD []@@ -230,12 +231,13 @@     Language.Rzk.Syntax.Abs.ParamTermShape _ term1 term2 term3 -> prPrec i 0 (concatD [doc (showString "("), prt 0 term1, doc (showString ":"), prt 0 term2, doc (showString "|"), prt 0 term3, doc (showString ")")])     Language.Rzk.Syntax.Abs.ParamTermTypeDeprecated _ pattern_ term -> prPrec i 0 (concatD [doc (showString "{"), prt 0 pattern_, doc (showString ":"), prt 0 term, doc (showString "}")])     Language.Rzk.Syntax.Abs.ParamVarShapeDeprecated _ pattern_ term1 term2 -> prPrec i 0 (concatD [doc (showString "{"), doc (showString "("), prt 0 pattern_, doc (showString ":"), prt 0 term1, doc (showString ")"), doc (showString "|"), prt 0 term2, doc (showString "}")])-    Language.Rzk.Syntax.Abs.ParamTermModalType _ term1 modality term2 -> prPrec i 0 (concatD [doc (showString "("), prt 0 term1, doc (showString ":"), prt 0 modality, prt 0 term2, doc (showString ")")])+    Language.Rzk.Syntax.Abs.ParamTermModalType _ term1 modalcolon term2 -> prPrec i 0 (concatD [doc (showString "("), prt 0 term1, prt 0 modalcolon, prt 0 term2, doc (showString ")")])+    Language.Rzk.Syntax.Abs.ParamTermModalShape _ term1 modalcolon term2 term3 -> prPrec i 0 (concatD [doc (showString "("), prt 0 term1, prt 0 modalcolon, prt 0 term2, doc (showString "|"), prt 0 term3, doc (showString ")")])  instance Print (Language.Rzk.Syntax.Abs.SigmaParam' a) where   prt i = \case     Language.Rzk.Syntax.Abs.SigmaParam _ pattern_ term -> prPrec i 0 (concatD [prt 0 pattern_, doc (showString ":"), prt 0 term])-    Language.Rzk.Syntax.Abs.SigmaParamModal _ pattern_ modality term -> prPrec i 0 (concatD [prt 0 pattern_, doc (showString ":"), prt 0 modality, prt 0 term])+    Language.Rzk.Syntax.Abs.SigmaParamModal _ pattern_ modalcolon term -> prPrec i 0 (concatD [prt 0 pattern_, prt 0 modalcolon, prt 0 term])  instance Print [Language.Rzk.Syntax.Abs.SigmaParam' a] where   prt _ [] = concatD []@@ -267,6 +269,16 @@     Language.Rzk.Syntax.Abs.Single _ modality -> prPrec i 0 (concatD [prt 0 modality])     Language.Rzk.Syntax.Abs.Comp _ modality1 modality2 -> prPrec i 0 (concatD [prt 0 modality1, doc (showString "/"), prt 0 modality2]) +instance Print (Language.Rzk.Syntax.Abs.ModalColon' a) where+  prt i = \case+    Language.Rzk.Syntax.Abs.ModalColonFlat _ -> prPrec i 0 (concatD [doc (showString ":\9837")])+    Language.Rzk.Syntax.Abs.ModalColonSharp _ -> prPrec i 0 (concatD [doc (showString ":\9839")])+    Language.Rzk.Syntax.Abs.ModalColonOp _ -> prPrec i 0 (concatD [doc (showString ":\7506\7510")])+    Language.Rzk.Syntax.Abs.ModalColonId _ -> prPrec i 0 (concatD [doc (showString ":_id")])+    Language.Rzk.Syntax.Abs.ASCII_ModalColonFlat _ -> prPrec i 0 (concatD [doc (showString ":_b")])+    Language.Rzk.Syntax.Abs.ASCII_ModalColonSharp _ -> prPrec i 0 (concatD [doc (showString ":_#")])+    Language.Rzk.Syntax.Abs.ASCII_ModalColonOp _ -> prPrec i 0 (concatD [doc (showString ":_op")])+ instance Print (Language.Rzk.Syntax.Abs.Term' a) where   prt i = \case     Language.Rzk.Syntax.Abs.Universe _ -> prPrec i 7 (concatD [doc (showString "U")])@@ -277,6 +289,9 @@     Language.Rzk.Syntax.Abs.Cube2 _ -> prPrec i 7 (concatD [doc (showString "2")])     Language.Rzk.Syntax.Abs.Cube2_0 _ -> prPrec i 7 (concatD [doc (showString "0\8322")])     Language.Rzk.Syntax.Abs.Cube2_1 _ -> prPrec i 7 (concatD [doc (showString "1\8322")])+    Language.Rzk.Syntax.Abs.CubeI _ -> prPrec i 7 (concatD [doc (showString "\120128")])+    Language.Rzk.Syntax.Abs.CubeI_0 _ -> prPrec i 7 (concatD [doc (showString "0\7522")])+    Language.Rzk.Syntax.Abs.CubeI_1 _ -> prPrec i 7 (concatD [doc (showString "1\7522")])     Language.Rzk.Syntax.Abs.CubeProduct _ term1 term2 -> prPrec i 5 (concatD [prt 5 term1, doc (showString "\215"), prt 6 term2])     Language.Rzk.Syntax.Abs.TopeTop _ -> prPrec i 7 (concatD [doc (showString "\8868")])     Language.Rzk.Syntax.Abs.TopeBottom _ -> prPrec i 7 (concatD [doc (showString "\8869")])@@ -293,7 +308,7 @@     Language.Rzk.Syntax.Abs.RecOrDeprecated _ term1 term2 term3 term4 -> prPrec i 7 (concatD [doc (showString "recOR"), doc (showString "("), prt 0 term1, doc (showString ","), prt 0 term2, doc (showString ","), prt 0 term3, doc (showString ","), prt 0 term4, doc (showString ")")])     Language.Rzk.Syntax.Abs.TypeFun _ paramdecl term -> prPrec i 1 (concatD [prt 0 paramdecl, doc (showString "\8594"), prt 1 term])     Language.Rzk.Syntax.Abs.TypeSigma _ pattern_ term1 term2 -> prPrec i 1 (concatD [doc (showString "\931"), doc (showString "("), prt 0 pattern_, doc (showString ":"), prt 0 term1, doc (showString ")"), doc (showString ","), prt 1 term2])-    Language.Rzk.Syntax.Abs.TypeSigmaModal _ pattern_ modality term1 term2 -> prPrec i 1 (concatD [doc (showString "\931"), doc (showString "("), prt 0 pattern_, doc (showString ":"), prt 0 modality, prt 0 term1, doc (showString ")"), doc (showString ","), prt 1 term2])+    Language.Rzk.Syntax.Abs.TypeSigmaModal _ pattern_ modalcolon term1 term2 -> prPrec i 1 (concatD [doc (showString "\931"), doc (showString "("), prt 0 pattern_, prt 0 modalcolon, prt 0 term1, doc (showString ")"), doc (showString ","), prt 1 term2])     Language.Rzk.Syntax.Abs.TypeSigmaTuple _ sigmaparam sigmaparams term -> prPrec i 1 (concatD [doc (showString "\931"), doc (showString "("), prt 0 sigmaparam, doc (showString ","), prt 0 sigmaparams, doc (showString ")"), doc (showString ","), prt 1 term])     Language.Rzk.Syntax.Abs.TypeUnit _ -> prPrec i 7 (concatD [doc (showString "Unit")])     Language.Rzk.Syntax.Abs.TypeId _ term1 term2 term3 -> prPrec i 1 (concatD [prt 2 term1, doc (showString "=_{"), prt 0 term2, doc (showString "}"), prt 2 term3])@@ -306,7 +321,7 @@     Language.Rzk.Syntax.Abs.Pair _ term1 term2 -> prPrec i 7 (concatD [doc (showString "("), prt 0 term1, doc (showString ","), prt 0 term2, doc (showString ")")])     Language.Rzk.Syntax.Abs.Tuple _ term1 term2 terms -> prPrec i 7 (concatD [doc (showString "("), prt 0 term1, doc (showString ","), prt 0 term2, doc (showString ","), prt 0 terms, doc (showString ")")])     Language.Rzk.Syntax.Abs.ModApp _ modality term -> prPrec i 7 (concatD [doc (showString "mod"), prt 0 modality, prt 7 term])-    Language.Rzk.Syntax.Abs.ModType _ modality term -> prPrec i 7 (concatD [doc (showString "<|"), prt 0 modality, doc (showString "|"), prt 0 term, doc (showString "|>")])+    Language.Rzk.Syntax.Abs.ModType _ modality term -> prPrec i 7 (concatD [prt 0 modality, prt 7 term])     Language.Rzk.Syntax.Abs.ModExtract _ modcomp term -> prPrec i 6 (concatD [doc (showString "$extract$"), prt 0 modcomp, prt 7 term])     Language.Rzk.Syntax.Abs.LetMod _ modcomp bind term1 term2 -> prPrec i 1 (concatD [doc (showString "let"), doc (showString "mod"), prt 0 modcomp, prt 0 bind, doc (showString ":="), prt 0 term1, doc (showString "in"), prt 0 term2])     Language.Rzk.Syntax.Abs.First _ term -> prPrec i 6 (concatD [doc (showString "\960\8321"), prt 7 term])@@ -322,6 +337,9 @@     Language.Rzk.Syntax.Abs.ASCII_CubeUnitStar _ -> prPrec i 7 (concatD [doc (showString "*_1")])     Language.Rzk.Syntax.Abs.ASCII_Cube2_0 _ -> prPrec i 7 (concatD [doc (showString "0_2")])     Language.Rzk.Syntax.Abs.ASCII_Cube2_1 _ -> prPrec i 7 (concatD [doc (showString "1_2")])+    Language.Rzk.Syntax.Abs.ASCII_CubeI _ -> prPrec i 7 (concatD [doc (showString "II")])+    Language.Rzk.Syntax.Abs.ASCII_CubeI_0 _ -> prPrec i 7 (concatD [doc (showString "0_I")])+    Language.Rzk.Syntax.Abs.ASCII_CubeI_1 _ -> prPrec i 7 (concatD [doc (showString "1_I")])     Language.Rzk.Syntax.Abs.ASCII_TopeTop _ -> prPrec i 7 (concatD [doc (showString "TOP")])     Language.Rzk.Syntax.Abs.ASCII_TopeBottom _ -> prPrec i 7 (concatD [doc (showString "BOT")])     Language.Rzk.Syntax.Abs.ASCII_TopeEQ _ term1 term2 -> prPrec i 4 (concatD [prt 5 term1, doc (showString "==="), prt 5 term2])@@ -330,7 +348,6 @@     Language.Rzk.Syntax.Abs.ASCII_TopeOr _ term1 term2 -> prPrec i 2 (concatD [prt 3 term1, doc (showString "\\/"), prt 2 term2])     Language.Rzk.Syntax.Abs.ASCII_TypeFun _ paramdecl term -> prPrec i 1 (concatD [prt 0 paramdecl, doc (showString "->"), prt 1 term])     Language.Rzk.Syntax.Abs.ASCII_TypeSigma _ pattern_ term1 term2 -> prPrec i 1 (concatD [doc (showString "Sigma"), doc (showString "("), prt 0 pattern_, doc (showString ":"), prt 0 term1, doc (showString ")"), doc (showString ","), prt 1 term2])-    Language.Rzk.Syntax.Abs.ASCII_TypeSigmaModal _ pattern_ modality term1 term2 -> prPrec i 1 (concatD [doc (showString "Sigma"), doc (showString "("), prt 0 pattern_, doc (showString ":"), prt 0 modality, prt 0 term1, doc (showString ")"), doc (showString ","), prt 1 term2])     Language.Rzk.Syntax.Abs.ASCII_TypeSigmaTuple _ sigmaparam sigmaparams term -> prPrec i 1 (concatD [doc (showString "Sigma"), doc (showString "("), prt 0 sigmaparam, doc (showString ","), prt 0 sigmaparams, doc (showString ")"), doc (showString ","), prt 1 term])     Language.Rzk.Syntax.Abs.ASCII_Lambda _ params term -> prPrec i 1 (concatD [doc (showString "\\"), prt 0 params, doc (showString "->"), prt 1 term])     Language.Rzk.Syntax.Abs.ASCII_TypeExtensionDeprecated _ paramdecl term -> prPrec i 7 (concatD [doc (showString "<"), prt 0 paramdecl, doc (showString "->"), prt 0 term, doc (showString ">")])
src/Language/Rzk/VSCode/Env.hs view
@@ -4,7 +4,7 @@ import           Control.Monad.Reader import           Language.LSP.Server import           Language.Rzk.Free.Syntax   (VarIdent)-import           Language.Rzk.VSCode.Config (ServerConfig)+import qualified Language.Rzk.VSCode.Config as RzkConfig import           Rzk.TypeCheck              (Decl', TypeErrorInScopedContext)  data RzkCachedModule = RzkCachedModule@@ -24,7 +24,7 @@   return RzkEnv     { rzkEnvTypecheckCache = typecheckCache } -type LSP = LspT ServerConfig (ReaderT RzkEnv IO)+type LSP = LspT RzkConfig.ServerConfig (ReaderT RzkEnv IO)  -- | Override the cache with given typechecked modules. cacheTypecheckedModules :: RzkTypecheckCache -> LSP ()
src/Language/Rzk/VSCode/Handlers.hs view
@@ -26,6 +26,7 @@ import           Control.Monad.IO.Class        (MonadIO (..)) import           Data.Default.Class import           Data.List                     (isSuffixOf, sort, (\\))+import qualified Data.List.NonEmpty            as NE import           Data.Maybe                    (fromMaybe, isNothing) import qualified Data.Text                     as T import qualified Data.Yaml                     as Yaml@@ -49,10 +50,11 @@ import           Language.Rzk.Syntax           (Module, VarIdent' (VarIdent),                                                 parseModuleFile,                                                 parseModuleSafe, printTree)-import           Language.Rzk.VSCode.Config    (ServerConfig (ServerConfig, formatEnabled))+import qualified Language.Rzk.VSCode.Config    as RzkConfig import           Language.Rzk.VSCode.Env import           Language.Rzk.VSCode.Logging import           Language.Rzk.VSCode.Tokenize  (tokenizeModule)+import qualified Rzk.Diagnostic                as Diag import           Rzk.Format                    (format) import           Rzk.Project.Config            (ProjectConfig (include)) import           Rzk.TypeCheck@@ -118,10 +120,12 @@           logDebug (tshow (length modifiedFiles) <> " files have been modified")            (parseErrors, parsedModules) <- liftIO $ collectErrors <$> parseFiles modifiedFiles+          -- Run in lenient hole mode so holes are collected (and surfaced as+          -- hints) rather than reported as errors while editing.           tcResults <- liftIO $ try $ evaluate $-            defaultTypeCheck (typecheckModulesWithLocationIncremental cachedModules parsedModules)+            defaultTypeCheckWithHoles (typecheckModulesWithLocationIncremental cachedModules parsedModules) -          (typeErrors, _checkedModules) <- case tcResults of+          (typeErrors, holeInfos) <- case tcResults of             Left (ex :: SomeException) -> do               -- Just a warning to be logged in the "Output" panel and not shown to the user as an error message               --  because exceptions are expected when the file has invalid syntax@@ -130,13 +134,14 @@             Right (Left err) -> do               logError ("An impossible error happened! Please report a bug:\n" <> T.pack (ppTypeErrorInScopedContext' BottomUp err))               return ([err], [])    -- sort of impossible-            Right (Right (checkedModules, errors)) -> do+            Right (Right ((checkedModules, errors), foundHoles)) -> do                 -- cache well-typed modules                 logInfo (tshow (length checkedModules) <> " modules successfully typechecked")                 logInfo (tshow (length errors) <> " errors found")+                logInfo (tshow (length foundHoles) <> " holes found")                 let checkedModules' = map (\(path, decls) -> (path, RzkCachedModule decls (filter ((== path) . filepathOfTypeError) errors))) checkedModules                 cacheTypecheckedModules checkedModules'-                return (errors, checkedModules)+                return (errors, foundHoles)            -- Reset all published diags           -- TODO: remove this after properly grouping by path below, after which there can be an empty list of errors@@ -148,13 +153,22 @@           forM_ parseErrors $ \(path, err) -> do             publishDiagnostics maxDiagnosticCount (filePathToNormalizedUri path) Nothing (partitionBySource [diagnosticOfParseError err]) -          -- TODO: collect all errors for one file in one list--          -- Report typechecking errors to the client-          forM_ typeErrors $ \err -> do-            let errPath = filepathOfTypeError err-                errDiagnostic = diagnosticOfTypeError err-            publishDiagnostics maxDiagnosticCount (filePathToNormalizedUri errPath) Nothing (partitionBySource [errDiagnostic])+          -- Report typechecking errors and holes to the client, grouped by file+          -- so all diagnostics for a file are published in a single call+          -- (publishDiagnostics replaces a source's diagnostics per URI, so+          -- publishing them one at a time would clobber all but the last).+          let errDiagnostics  = [ (filepathOfTypeError err, diagnosticOfTypeError err)+                                | err <- typeErrors ]+              holeDiagnostics = [ (path, diagnosticOfHole hole)+                                | hole <- holeInfos+                                , Just path <- [holeLocation hole >>= locationFilePath] ]+              -- group by file path (NE.groupAllWith sorts then groups, and+              -- yields NonEmpty groups so taking the key is total)+              diagnosticsByFile =+                map (\grp -> (fst (NE.head grp), map snd (NE.toList grp))) $+                NE.groupAllWith fst (errDiagnostics <> holeDiagnostics)+          forM_ diagnosticsByFile $ \(path, diags) ->+            publishDiagnostics maxDiagnosticCount (filePathToNormalizedUri path) Nothing (partitionBySource diags)   where     filepathOfTypeError :: TypeErrorInScopedContext var -> FilePath     filepathOfTypeError (PlainTypeError err) =@@ -163,29 +177,38 @@         _         -> error "the impossible happened! Please contact Abdelrahman immediately!!!"     filepathOfTypeError (ScopedTypeError _orig err) = filepathOfTypeError err -    diagnosticOfTypeError :: TypeErrorInScopedContext VarIdent -> Diagnostic-    diagnosticOfTypeError err = Diagnostic-                      (Range (Position line 0) (Position line 99)) -- 99 to reach end of line and be visible until we actually have information about it-                      (Just DiagnosticSeverity_Error)-                      (Just $ InR "type-error") -- diagnostic code+    -- Map a structured library diagnostic to an LSP diagnostic. The range is+    -- line-level (whole line), reflecting the granularity rzk currently retains.+    lspDiagnosticOf :: Diag.Diagnostic -> Diagnostic+    lspDiagnosticOf d = Diagnostic+                      (Range (Position line 0) (Position line 99)) -- 99 to reach end of line and be visible until we actually have column information+                      (Just (lspSeverity (Diag.diagnosticSeverity d)))+                      (Just (InR (T.pack (Diag.diagnosticCode d))))                       Nothing                   -- diagnostic description                       (Just "rzk")              -- A human-readable string describing the source of this diagnostic-                      (T.pack msg)+                      (T.pack (Diag.diagnosticMessage d))                       Nothing                   -- tags                       (Just [])                 -- related information                       Nothing                   -- data that is preserved between different calls       where-        msg = ppTypeErrorInScopedContext' TopDown err--        extractLineNumber :: TypeErrorInScopedContext var -> Maybe Int-        extractLineNumber (PlainTypeError e)    = do-          loc <- location (typeErrorContext e)+        line = fromIntegral $ fromMaybe 0 $ do+          loc <- Diag.diagnosticLocation d           lineNo <- locationLine loc           return (lineNo - 1) -- VS Code indexes lines from 0, but locationLine starts with 1-        extractLineNumber (ScopedTypeError _ e) = extractLineNumber e -        line = fromIntegral $ fromMaybe 0 $ extractLineNumber err+    lspSeverity :: Diag.Severity -> DiagnosticSeverity+    lspSeverity = \case+      Diag.SeverityError       -> DiagnosticSeverity_Error+      Diag.SeverityWarning     -> DiagnosticSeverity_Warning+      Diag.SeverityInformation -> DiagnosticSeverity_Information+      Diag.SeverityHint        -> DiagnosticSeverity_Hint +    diagnosticOfTypeError :: TypeErrorInScopedContext VarIdent -> Diagnostic+    diagnosticOfTypeError = lspDiagnosticOf . Diag.diagnoseTypeError TopDown++    diagnosticOfHole :: HoleInfo -> Diagnostic+    diagnosticOfHole = lspDiagnosticOf . Diag.diagnoseHole+     diagnosticOfParseError :: T.Text -> Diagnostic     diagnosticOfParseError err = Diagnostic (Range (Position errLine errColumnStart) (Position errLine errColumnEnd))                       (Just DiagnosticSeverity_Error)@@ -283,7 +306,7 @@ formatDocument req res = do   let doc = req ^. params . textDocument . uri . to toNormalizedUri   logInfo $ "Formatting document: " <> T.pack (show doc)-  ServerConfig {formatEnabled = fmtEnabled} <- getConfig+  RzkConfig.ServerConfig {RzkConfig.formatEnabled = fmtEnabled} <- getConfig   if fmtEnabled then do     mdoc <- getVirtualFile doc     possibleEdits <- case virtualFileText <$> mdoc of
src/Language/Rzk/VSCode/Lsp.hs view
@@ -13,7 +13,7 @@  import           Data.Aeson                    (Result (Error, Success),                                                 fromJSON)-import           Language.Rzk.VSCode.Config    (ServerConfig (..))+import qualified Language.Rzk.VSCode.Config    as RzkConfig import           Language.Rzk.VSCode.Env import           Language.Rzk.VSCode.Handlers @@ -75,5 +75,5 @@       , staticHandlers = const handlers       , interpretHandler = \env -> Iso (flip runReaderT rzkEnv . runLspT env) liftIO       , options = defaultOptions { optTextDocumentSync = Just syncOptions }-      , defaultConfig = def :: ServerConfig+      , defaultConfig = def :: RzkConfig.ServerConfig       }
src/Language/Rzk/VSCode/Tokenize.hs view
@@ -62,10 +62,15 @@     [ tokenizePattern pat     , tokenizeTerm cube     , tokenizeTope tope ]-  ParamPatternModalType _loc pats md ty -> concat+  ParamPatternModalType _loc pats mc ty -> concat     [ foldMap tokenizePattern pats-    , tokenizeModality md+    , tokenizeModalColon mc     , tokenizeTerm ty ]+  ParamPatternModalShape _loc pats mc cube tope -> concat+    [ foldMap tokenizePattern pats+    , tokenizeModalColon mc+    , tokenizeTerm cube+    , tokenizeTope tope ]  tokenizePattern :: Pattern -> [SemanticTokenAbsolute] tokenizePattern = \case@@ -103,6 +108,13 @@       Cube2_1{}            -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary]       ASCII_Cube2_1{}      -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary] +      CubeI{}              -> mkToken term SemanticTokenTypes_Enum [SemanticTokenModifiers_DefaultLibrary]+      CubeI_0{}            -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary]+      ASCII_CubeI_0{}      -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary]+      CubeI_1{}            -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary]+      ASCII_CubeI_1{}      -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary]+      ASCII_CubeI{}        -> mkToken term SemanticTokenTypes_Enum [SemanticTokenModifiers_DefaultLibrary]+       CubeProduct _loc l r -> foldMap go [l, r]        TopeTop{}            -> mkToken term SemanticTokenTypes_String [SemanticTokenModifiers_DefaultLibrary]@@ -135,20 +147,15 @@         [ mkToken (VarIdent loc "∑") SemanticTokenTypes_Class [SemanticTokenModifiers_DefaultLibrary]         , tokenizePattern pat         , foldMap go [a, b] ]-      TypeSigmaModal loc pat md a b -> concat+      TypeSigmaModal loc pat mc a b -> concat         [ mkToken (VarIdent loc "∑") SemanticTokenTypes_Class [SemanticTokenModifiers_DefaultLibrary]         , tokenizePattern pat-        , tokenizeModality md+        , tokenizeModalColon mc         , foldMap go [a, b] ]       ASCII_TypeSigma loc pat a b -> concat         [ mkToken (VarIdent loc "Sigma") SemanticTokenTypes_Class [SemanticTokenModifiers_DefaultLibrary]         , tokenizePattern pat         , foldMap go [a, b] ]-      ASCII_TypeSigmaModal loc pat md a b -> concat-        [ mkToken (VarIdent loc "Sigma") SemanticTokenTypes_Class [SemanticTokenModifiers_DefaultLibrary]-        , tokenizePattern pat-        , tokenizeModality md-        , foldMap go [a, b] ]       TypeSigmaTuple loc p ps tN -> concat         [ mkToken (VarIdent loc "∑") SemanticTokenTypes_Class [SemanticTokenModifiers_DefaultLibrary]         , foldMap tokenizeSigmaParam (p : ps)@@ -239,11 +246,14 @@     , tokenizeTerm cube     , tokenizeTope tope     ]-  ParamTermModalType _loc pat md type_ -> concat-    [ tokenizeTerm pat-    , tokenizeModality md-    , tokenizeTerm type_ ]+  ParamTermModalType _loc pat mc type_ -> concat+    [ tokenizeTerm pat, tokenizeModalColon mc, tokenizeTerm type_ ]+  ParamTermModalShape _loc pat mc cube tope -> concat+    [ tokenizeTerm pat, tokenizeModalColon mc, tokenizeTerm cube, tokenizeTope tope ] +tokenizeModalColon :: ModalColon -> [SemanticTokenAbsolute]+tokenizeModalColon mc = mkToken mc SemanticTokenTypes_Decorator []+ tokenizeModality :: Modality -> [SemanticTokenAbsolute] tokenizeModality md = mkToken md SemanticTokenTypes_Decorator [] @@ -257,9 +267,9 @@   SigmaParam _loc pat type_ -> concat     [ tokenizePattern pat     , tokenizeTerm type_ ]-  SigmaParamModal _loc pat md type_ -> concat+  SigmaParamModal _loc pat mc type_ -> concat     [ tokenizePattern pat-    , tokenizeModality md+    , tokenizeModalColon mc     , tokenizeTerm type_ ]  mkToken :: (HasPosition a, Print a) => a -> SemanticTokenTypes -> [SemanticTokenModifiers] -> [SemanticTokenAbsolute]
+ src/Rzk/Diagnostic.hs view
@@ -0,0 +1,235 @@+{-# LANGUAGE LambdaCase        #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards   #-}++-- | Structured diagnostics for rzk: type errors and holes as data (severity,+-- a stable code, a source location, and a message) rather than a single+-- pre-formatted string. The core library produces these; the LSP maps them to+-- LSP diagnostics, and the CLI can emit them as JSON (@rzk typecheck --json@).+--+-- Locations are line-level: rzk currently retains only file + line at the point+-- an error is produced (the column is discarded, and core terms keep no+-- per-node position), so diagnostics point at the enclosing command's line.+module Rzk.Diagnostic where++import           Data.Aeson           (ToJSON (..), Value (String), object,+                                       (.=))++import           Language.Rzk.Free.Syntax (VarIdent)+import           Rzk.TypeCheck++-- | Diagnostic severity, mirroring the usual LSP levels.+data Severity+  = SeverityError+  | SeverityWarning+  | SeverityInformation+  | SeverityHint+  deriving (Eq, Show)++-- | A structured diagnostic. Independent of any editor protocol: the LSP maps+-- it to its own @Diagnostic@, and the CLI serialises it as JSON.+--+-- == JSON wire format (@rzk typecheck --json@)+--+-- This is a stable format that downstream tools (e.g. richer LSP hovers) pin+-- to. Each diagnostic is an object:+--+-- > { "severity": "error" | "warning" | "information" | "hint"+-- > , "code":     <string>           -- "hole", or a TypeError tag (e.g. "TypeErrorUnify")+-- > , "location": { "file": <string|null>, "line": <int|null> } | null+-- > , "message":  <string>           -- human-facing prose (the CLI/LSP display text)+-- > , "hole":     <HoleData> | null  -- present only for hole diagnostics (see 'HoleData')+-- > }+--+-- The @message@ field is kept for back-compat (the LSP and the CLI human mode+-- use it). Structured consumers should read the @hole@ object instead of+-- parsing @message@. For non-hole diagnostics @hole@ is @null@.+data Diagnostic = Diagnostic+  { diagnosticSeverity :: Severity+  , diagnosticCode     :: String            -- ^ stable category, e.g. @\"TypeErrorUnify\"@ or @\"hole\"@+  , diagnosticLocation :: Maybe LocationInfo -- ^ file + line (line-level granularity)+  , diagnosticMessage  :: String+  , diagnosticHole     :: Maybe HoleData     -- ^ structured hole payload ('Nothing' for type errors)+  } deriving (Eq, Show)++-- | The structured payload of a hole diagnostic: the goal and local context as+-- already-rendered display strings (the same strings the LSP/CLI show, i.e.+-- @show@ = @printTree@ on the underlying terms). Consumers render hole panels+-- from these fields directly, without parsing the human-facing @message@.+--+-- == JSON wire format+--+-- > { "name":     <string|null>                 -- the ?name, if the hole was named+-- > , "goal":     <string>                       -- the expected type (the goal)+-- > , "shape":    { "binder": <string>, "tope": <string> } | null+-- > , "termVars": [ { "name": <string>, "type": <string> }, ... ]+-- > , "cubeVars": [ { "name": <string>, "type": <string> }, ... ]+-- > , "topes":    [ <string>, ... ]              -- local tope assumptions (excludes ⊤)+-- > }+--+-- Notes for consumers:+--+-- * @shape@ is non-null only for a shape-restricted /argument/ goal, where the+--   goal reads @(binder : goal | tope)@. For an /extension/ type the boundary is+--   already part of @goal@ (a restricted type @A [ … ↦ … ]@), and @shape@ is+--   @null@ — read the boundary out of @goal@.+-- * @cubeVars@ names can be patterns like @\"(t, s)\"@ (pair-pattern binders);+--   they are display strings, not single identifiers.+data HoleData = HoleData+  { holeDataName     :: Maybe String           -- ^ the @?name@, if named+  , holeDataGoal     :: String                 -- ^ the goal (expected type)+  , holeDataShape    :: Maybe (String, String) -- ^ (binder, tope) for a shape-argument goal+  , holeDataTermVars :: [(String, String)]     -- ^ local hypotheses: (name, type)+  , holeDataCubeVars :: [(String, String)]     -- ^ local cube variables: (name, type)+  , holeDataTopes    :: [String]               -- ^ local tope assumptions (excluding ⊤)+  } deriving (Eq, Show)++instance ToJSON Severity where+  toJSON = String . \case+    SeverityError       -> "error"+    SeverityWarning     -> "warning"+    SeverityInformation -> "information"+    SeverityHint        -> "hint"++-- | Encode a location as JSON. A plain helper rather than a @ToJSON@ instance,+-- to avoid an orphan instance ('LocationInfo' is defined in "Rzk.TypeCheck").+locationToJSON :: LocationInfo -> Value+locationToJSON (LocationInfo path line) = object+  [ "file" .= path+  , "line" .= line+  ]++instance ToJSON Diagnostic where+  toJSON Diagnostic{..} = object+    [ "severity" .= diagnosticSeverity+    , "code"     .= diagnosticCode+    , "location" .= fmap locationToJSON diagnosticLocation+    , "message"  .= diagnosticMessage+    , "hole"     .= diagnosticHole+    ]++instance ToJSON HoleData where+  toJSON HoleData{..} = object+    [ "name"     .= holeDataName+    , "goal"     .= holeDataGoal+    , "shape"    .= fmap shapeToJSON holeDataShape+    , "termVars" .= map entryToJSON holeDataTermVars+    , "cubeVars" .= map entryToJSON holeDataCubeVars+    , "topes"    .= holeDataTopes+    ]+    where+      shapeToJSON (binder, tope) = object [ "binder" .= binder, "tope" .= tope ]+      entryToJSON (name, ty)     = object [ "name" .= name, "type" .= ty ]++-- | A stable tag for a type error, used as its diagnostic code. Independent of+-- the variable type, so it survives the scoped-error unfolding.+typeErrorTag :: TypeError var -> String+typeErrorTag = \case+  TypeErrorOther{}                 -> "TypeErrorOther"+  TypeErrorUnify{}                 -> "TypeErrorUnify"+  TypeErrorUnifyTerms{}            -> "TypeErrorUnifyTerms"+  TypeErrorNotPair{}               -> "TypeErrorNotPair"+  TypeErrorNotModal{}              -> "TypeErrorNotModal"+  TypeErrorModalityMismatch{}      -> "TypeErrorModalityMismatch"+  TypeErrorUnaccessibleVar{}       -> "TypeErrorUnaccessibleVar"+  TypeErrorNotTypeInModal{}        -> "TypeErrorNotTypeInModal"+  TypeErrorNotFunction{}           -> "TypeErrorNotFunction"+  TypeErrorUnexpectedLambda{}      -> "TypeErrorUnexpectedLambda"+  TypeErrorUnexpectedPair{}        -> "TypeErrorUnexpectedPair"+  TypeErrorUnexpectedRefl{}        -> "TypeErrorUnexpectedRefl"+  TypeErrorCannotInferBareLambda{} -> "TypeErrorCannotInferBareLambda"+  TypeErrorCannotInferBareRefl{}   -> "TypeErrorCannotInferBareRefl"+  TypeErrorCannotInferHole{}       -> "TypeErrorCannotInferHole"+  TypeErrorUnsolvedHole{}          -> "TypeErrorUnsolvedHole"+  TypeErrorUndefined{}             -> "TypeErrorUndefined"+  TypeErrorTopeNotSatisfied{}      -> "TypeErrorTopeNotSatisfied"+  TypeErrorTopeContextDisjoint{}   -> "TypeErrorTopeContextDisjoint"+  TypeErrorTopesNotEquivalent{}    -> "TypeErrorTopesNotEquivalent"+  TypeErrorInvalidArgumentType{}   -> "TypeErrorInvalidArgumentType"+  TypeErrorDuplicateTopLevel{}     -> "TypeErrorDuplicateTopLevel"+  TypeErrorUnusedVariable{}        -> "TypeErrorUnusedVariable"+  TypeErrorUnusedUsedVariables{}   -> "TypeErrorUnusedUsedVariables"+  TypeErrorImplicitAssumption{}    -> "TypeErrorImplicitAssumption"++-- | The tag of a scoped type error (peels the binder layers; the tag does not+-- depend on the variable type).+typeErrorTagInScopedContext :: TypeErrorInScopedContext var -> String+typeErrorTagInScopedContext = \case+  PlainTypeError e    -> typeErrorTag (typeErrorError e)+  ScopedTypeError _ e -> typeErrorTagInScopedContext e++-- | The source location of a scoped type error (the enclosing command's line).+locationOfTypeError :: TypeErrorInScopedContext var -> Maybe LocationInfo+locationOfTypeError = \case+  PlainTypeError e    -> location (typeErrorContext e)+  ScopedTypeError _ e -> locationOfTypeError e++-- | A structured diagnostic for a type error. The message is the usual+-- formatted error text; severity is always 'SeverityError'.+diagnoseTypeError :: OutputDirection -> TypeErrorInScopedContext VarIdent -> Diagnostic+diagnoseTypeError dir err = Diagnostic+  { diagnosticSeverity = SeverityError+  , diagnosticCode     = typeErrorTagInScopedContext err+  , diagnosticLocation = locationOfTypeError err+  , diagnosticMessage  = ppTypeErrorInScopedContext' dir err+  , diagnosticHole     = Nothing+  }++-- | A structured diagnostic for a hole, carrying the hole's goal and local+-- context. A hole is an unfilled obligation, so it is a 'SeverityWarning' —+-- mirroring Agda's yellow \"unsolved\" highlight, and visible in the editor's+-- problems panel (unlike 'SeverityHint', which editors render almost+-- invisibly). Finished work still rejects holes outright: the strict default+-- of @rzk typecheck@ reports them as errors (cf. Agda's @--safe@).+diagnoseHole :: HoleInfo -> Diagnostic+diagnoseHole hole = Diagnostic+  { diagnosticSeverity = SeverityWarning+  , diagnosticCode     = "hole"+  , diagnosticLocation = holeLocation hole+  , diagnosticMessage  = ppHoleInfo hole+  , diagnosticHole     = Just (holeData hole)+  }++-- | The structured payload of a hole: its goal and local context rendered to+-- display strings (the same rendering 'ppHoleInfo' uses, but kept as separate+-- fields rather than concatenated into prose). See 'HoleData'.+holeData :: HoleInfo -> HoleData+holeData HoleInfo{..} = HoleData+  { holeDataName     = fmap show holeName+  , holeDataGoal     = show holeGoal+  , holeDataShape    = fmap (\(s, tope) -> (show s, show tope)) holeGoalShape+  , holeDataTermVars = map entry holeTermVars+  , holeDataCubeVars = map entry holeCubeVars+  , holeDataTopes    = map show holeTopes+  }+  where+    entry e = (show (holeEntryName e), show (holeEntryType e))++-- | Render a hole's goal and local context (the structured query) for display,+-- separating term variables, cube variables, and tope assumptions.+ppHoleInfo :: HoleInfo -> String+ppHoleInfo HoleInfo{..} = unlines $+  [ "Hole" <> maybe "" (\name -> " ?" <> show name) holeName+      <> maybe "" (\loc -> " at " <> ppLocationInfo loc) holeLocation+  , "  goal:"+  , "    " <> goalStr+  ]+  <> section "context" holeTermVars+  <> section "cube variables" holeCubeVars+  <> (if null holeTopes+        then []+        else "  tope context:" : [ "    " <> show t | t <- holeTopes ])+  where+    -- a shape goal reads (binder : cube | tope); otherwise just the type+    goalStr = case holeGoalShape of+      Nothing        -> show holeGoal+      Just (s, tope) -> "(" <> show s <> " : " <> show holeGoal <> " | " <> show tope <> ")"+    section title entries+      | null entries = []+      | otherwise = ("  " <> title <> ":")+          : [ "    " <> show (holeEntryName e) <> " : " <> show (holeEntryType e)+            | e <- entries ]++ppLocationInfo :: LocationInfo -> String+ppLocationInfo (LocationInfo mpath mline) =+  maybe "<input>" id mpath <> maybe "" ((":" <>) . show) mline
src/Rzk/Format.hs view
@@ -91,7 +91,13 @@       , ("*_1", "*₁")       , ("0_2", "0₂")       , ("1_2", "1₂")+      , ("II", "𝕀")+      , ("0_I", "0ᵢ")+      , ("1_I", "1ᵢ")       , ("*", "×")+      , (":_b", ":♭")+      , (":_#", ":♯")+      , (":_op", ":ᵒᵖ")       , ("_b", "♭")       , ("_#", "♯")       , ("_op", "ᵒᵖ")
src/Rzk/Main.hs view
@@ -12,6 +12,7 @@ import qualified Data.Yaml            as Yaml import           System.Directory     (doesPathExist) import           System.FilePath.Glob (glob)+import           System.IO            (hPutStrLn, stderr)  import qualified Language.Rzk.Syntax  as Rzk import           Rzk.Project.Config@@ -70,7 +71,7 @@     rzkYamlExists <- doesPathExist rzkYamlPath     if rzkYamlExists       then do-        putStrLn ("Using Rzk project stucture specified in " <> rzkYamlPath)+        hPutStrLn stderr ("Using Rzk project stucture specified in " <> rzkYamlPath)         paths <- extractFilesFromRzkYaml rzkYamlPath         when (null paths) (error $ "No Rzk files specified in the config file at " <> rzkYamlPath)         parseRzkFilesOrStdin paths@@ -81,7 +82,7 @@   paths -> do     expandedPaths <- foldMap globNonEmpty paths     forM expandedPaths $ \path -> do-      putStrLn ("Loading file " <> path)+      hPutStrLn stderr ("Loading file " <> path)       result <- Rzk.parseModule <$> T.readFile path       case result of         Left err -> do
src/Rzk/TypeCheck.hs view
@@ -11,3667 +11,4815 @@ import           Control.Monad            (forM, forM_, join, unless, when) import           Control.Monad.Except import           Control.Monad.Reader-import           Data.Bifunctor           (first)-import           Data.List                (intercalate, intersect, nub, tails,-                                           (\\))-import           Data.Maybe               (catMaybes, fromMaybe, isNothing,-                                           mapMaybe)-import           Data.String              (IsString (..))-import           Data.Tuple               (swap)--import           Free.Scoped-import           Language.Rzk.Free.Syntax-import qualified Language.Rzk.Syntax      as Rzk--import           Debug.Trace-import           Unsafe.Coerce---- $setup--- >>> :set -XOverloadedStrings---- | Parse and 'unsafeInferStandalone''.-instance IsString TermT' where-  fromString = unsafeInferStandalone' . fromString--defaultTypeCheck-  :: TypeCheck var a-  -> Either (TypeErrorInScopedContext var) a-defaultTypeCheck tc = runExcept (runReaderT tc emptyContext)---- FIXME: merge with VarInfo-data Decl var = Decl-  { declName         :: var-  , declType         :: TermT var-  , declValue        :: Maybe (TermT var)-  , declIsAssumption :: Bool-  , declUsedVars     :: [var]-  , declLocation     :: Maybe LocationInfo-  } deriving Eq--type Decl' = Decl VarIdent--typecheckModulesWithLocationIncremental-  :: [(FilePath, [Decl'])]    -- ^ Cached declarations (only those that do not need rechecking).-  -> [(FilePath, Rzk.Module)] -- ^ New modules to check-  -> TypeCheck VarIdent ([(FilePath, [Decl'])], [TypeErrorInScopedContext VarIdent])-typecheckModulesWithLocationIncremental cached modulesToTypecheck = do-  let decls = foldMap snd cached-  localDeclsPrepared decls $ do-    (checked, errors) <- typecheckModulesWithLocation' modulesToTypecheck-    return (cached <> checked, errors)--typecheckModulesWithLocation' :: [(FilePath, Rzk.Module)] -> TypeCheck VarIdent ([(FilePath, [Decl'])], [TypeErrorInScopedContext VarIdent])-typecheckModulesWithLocation' = \case-  [] -> return ([], [])-  m@(path, _) : ms -> do-    (decls, errs) <- typecheckModuleWithLocation m-    case errs of-      _:_ -> return ([(path, decls)], errs)-      _ -> do-        localDeclsPrepared decls $ do-          (decls', errors) <- typecheckModulesWithLocation' ms-          return ((path, decls) : decls', errors)--typecheckModulesWithLocation :: [(FilePath, Rzk.Module)] -> TypeCheck VarIdent [(FilePath, [Decl'])]-typecheckModulesWithLocation = \case-  [] -> return []-  m@(path, _) : ms -> do-    (decls, errs) <- typecheckModuleWithLocation m-    case errs of-      err : _ -> do-        throwError err-      [] -> localDeclsPrepared decls $-        ((path, decls) :) <$> typecheckModulesWithLocation ms--typecheckModules :: [Rzk.Module] -> TypeCheck VarIdent [Decl']-typecheckModules = \case-  [] -> return []-  m : ms -> do-    (decls, errs) <- typecheckModule Nothing m-    case errs of-      err : _ -> do-        throwError err-      _ -> do-        localDeclsPrepared decls $-          (decls <>) <$> typecheckModules ms--typecheckModuleWithLocation :: (FilePath, Rzk.Module) -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])-typecheckModuleWithLocation (path, module_) = do-  traceTypeCheck Normal ("Checking module from " <> path) $ do-    withLocation (LocationInfo { locationFilePath = Just path, locationLine = Nothing }) $-      typecheckModule (Just path) module_--countCommands :: Integral a => [Rzk.Command] -> a-countCommands = fromIntegral . length--typecheckModule :: Maybe FilePath -> Rzk.Module -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])-typecheckModule path (Rzk.Module _moduleLoc _lang commands) =-  withSection Nothing (go 1 commands) $ -- FIXME: use module name? or anonymous section?-    return ([], [])-  where-    totalCommands = countCommands commands--    go :: Integer -> [Rzk.Command] -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])-    go _i [] = return ([], [])--    go  i (command@(Rzk.CommandUnsetOption _loc optionName) : moreCommands) = do-      traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"-          <> " Unsetting option " <> optionName) $ do-        withCommand command $ do-          unsetOption optionName $-            go (i + 1) moreCommands--    go  i (command@(Rzk.CommandSetOption _loc optionName optionValue) : moreCommands) = do-      traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"-          <> " Setting option " <> optionName <> " = " <> optionValue ) $ do-        withCommand command $ do-          setOption optionName optionValue $-            go (i + 1) moreCommands--    go  i (command@(Rzk.CommandDefine _loc name (Rzk.DeclUsedVars _ vars) params ty term) : moreCommands) =-      traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"-          <> " Checking #define " <> Rzk.printTree name ) $ do-        withCommand command $ do-          mapM_ checkDefinedVar (varIdentAt path <$> vars)-          paramDecls <- concat <$> mapM paramToParamDecl params-          ty' <- typecheck (toTerm' (addParamDecls paramDecls ty)) universeT >>= whnfT-          term' <- typecheck (toTerm' (addParams params term)) ty' >>= whnfT-          loc <- asks location-          let decl = Decl (varIdentAt path name) ty' (Just term') False (varIdentAt path <$> vars) loc-          fmap (first (decl :)) $-            localDeclPrepared decl $ do-              Context{..} <- ask-              termSVG <--                case renderBackend of-                  Just RenderSVG -> renderTermSVG (Pure (varIdentAt path name))-                  Just RenderLaTeX -> issueTypeError $ TypeErrorOther "\"latex\" rendering is not yet supported"-                  Nothing -> pure Nothing-              maybe id trace termSVG $ do-                go (i + 1) moreCommands--    go  i (command@(Rzk.CommandPostulate _loc name (Rzk.DeclUsedVars _ vars) params ty) : moreCommands) =-      traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"-          <> " Checking #postulate " <> Rzk.printTree name) $ do-        withCommand command $ do-          mapM_ checkDefinedVar (varIdentAt path <$> vars)-          paramDecls <- concat <$> mapM paramToParamDecl params-          ty' <- typecheck (toTerm' (addParamDecls paramDecls ty)) universeT >>= whnfT-          loc <- asks location-          let decl = Decl (varIdentAt path name) ty' Nothing False (varIdentAt path <$> vars) loc-          fmap (first (decl :)) $-            localDeclPrepared decl $-              go (i + 1) moreCommands--    go  i (command@(Rzk.CommandCheck _loc term ty) : moreCommands) =-      traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"-          <> " Checking " <> Rzk.printTree term <> " : " <> Rzk.printTree ty ) $ do-        withCommand command $ do-          ty' <- typecheck (toTerm' ty) universeT >>= whnfT-          _term' <- typecheck (toTerm' term) ty'-          go (i + 1) moreCommands--    go  i (Rzk.CommandCompute loc term : moreCommands) =-      go i (Rzk.CommandComputeWHNF loc term : moreCommands)--    go  i (command@(Rzk.CommandComputeNF _loc term) : moreCommands) =-      traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"-          <> " Computing NF for " <> Rzk.printTree term) $ do-        withCommand command $ do-          term' <- infer (toTerm' term) >>= nfT-          traceTypeCheck Normal ("  " <> show (untyped term')) $ do-            go (i + 1) moreCommands--    go  i (command@(Rzk.CommandComputeWHNF _loc term) : moreCommands) =-      traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"-          <> " Computing WHNF for " <> Rzk.printTree term) $ do-        withCommand command $ do-          term' <- infer (toTerm' term) >>= whnfT-          traceTypeCheck Normal ("  " <> show (untyped term')) $ do-            go (i + 1) moreCommands--    go  i (command@(Rzk.CommandAssume _loc names ty) : moreCommands) =-      traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"-          <> " Checking #assume " <> intercalate " " [ Rzk.printTree name | name <- names ] ) $ do-        withCommand command $ do-          ty' <- typecheck (toTerm' ty) universeT-          loc <- asks location-          let decls = [ Decl (varIdentAt path name) ty' Nothing True [] loc | name <- names ]-          fmap (first (decls <>)) $-            localDeclsPrepared decls $-              go (i + 1) moreCommands--    go  i (command@(Rzk.CommandSection _loc name) : moreCommands) = do-      withCommand command $ do-        (sectionCommands, moreCommands') <- splitSectionCommands name moreCommands-        withSection (Just name) (go i sectionCommands) $ do-          go (i + countCommands sectionCommands) moreCommands'--    go  _i (command@(Rzk.CommandSectionEnd _loc endName) : _moreCommands) = do-      withCommand command $-        issueTypeError $ TypeErrorOther $-          "unexpected #end " <> Rzk.printTree endName <> ", no section was declared!"---splitSectionCommands :: Rzk.SectionName -> [Rzk.Command] -> TypeCheck var ([Rzk.Command], [Rzk.Command])-splitSectionCommands name [] =-  issueTypeError (TypeErrorOther $ "Section " <> Rzk.printTree name <> " is not closed with an #end")-splitSectionCommands name (Rzk.CommandSection _loc name' : moreCommands) = do-  (cs1, cs2) <- splitSectionCommands name' moreCommands-  (cs3, cs4) <- splitSectionCommands name cs2-  return (cs1 <> cs3, cs4)-splitSectionCommands name (Rzk.CommandSectionEnd _loc endName : moreCommands) = do-  when (Rzk.printTree name /= Rzk.printTree endName) $-    issueTypeError $ TypeErrorOther $-      "unexpected #end " <> Rzk.printTree endName <> ", expecting #end " <> Rzk.printTree name-  return ([], moreCommands)-splitSectionCommands name (command : moreCommands) = do-  (cs1, cs2) <- splitSectionCommands name moreCommands-  return (command : cs1, cs2)--setOption :: String -> String -> TypeCheck var a -> TypeCheck var a-setOption "verbosity" = \case-  "debug"   -> localVerbosity Debug-  "normal"  -> localVerbosity Normal-  "silent"  -> localVerbosity Silent-  _ -> const $-    issueTypeError $ TypeErrorOther "unknown verbosity level (use \"debug\", \"normal\", or \"silent\")"-setOption "render" = \case-  "svg"   -> localRenderBackend (Just RenderSVG)-  "latex" -> localRenderBackend (Just RenderLaTeX)-  "none"  -> localRenderBackend Nothing-  _ -> const $-    issueTypeError $ TypeErrorOther "unknown render backend (use \"svg\", \"latex\", or \"none\")"-setOption optionName = const $ const $-  issueTypeError $ TypeErrorOther ("unknown option " <> show optionName)--unsetOption :: String -> TypeCheck var a -> TypeCheck var a-unsetOption "verbosity" = localVerbosity (verbosity emptyContext)-unsetOption "render" = localRenderBackend (renderBackend emptyContext)-unsetOption optionName = const $-  issueTypeError $ TypeErrorOther ("unknown option " <> show optionName)--paramToParamDecl :: Rzk.Param -> TypeCheck var [Rzk.ParamDecl]-paramToParamDecl (Rzk.ParamPatternShapeDeprecated loc pat cube tope) = pure-  [ Rzk.ParamTermShape loc (patternToTerm pat) cube tope ]-paramToParamDecl (Rzk.ParamPatternShape loc pats cube tope) = pure-  [ Rzk.ParamTermShape loc (patternToTerm pat) cube tope | pat <- pats]-paramToParamDecl (Rzk.ParamPatternType loc pats ty) = pure-  [ Rzk.ParamTermType loc (patternToTerm pat) ty | pat <- pats ]-paramToParamDecl Rzk.ParamPattern{} = issueTypeError $-  TypeErrorOther "untyped pattern in parameters"-paramToParamDecl (Rzk.ParamPatternModalType loc pats md ty) = pure-  [ Rzk.ParamTermModalType loc (patternToTerm pat) md ty | pat <- pats ] --addParamDecls :: [Rzk.ParamDecl] -> Rzk.Term -> Rzk.Term-addParamDecls [] = id-addParamDecls (paramDecl : paramDecls)-  = Rzk.TypeFun Nothing paramDecl . addParamDecls paramDecls--addParams :: [Rzk.Param] -> Rzk.Term -> Rzk.Term-addParams []     = id-addParams params = Rzk.Lambda Nothing params--data TypeError var-  = TypeErrorOther String-  | TypeErrorUnify (TermT var) (TermT var) (TermT var)-  | TypeErrorUnifyTerms (TermT var) (TermT var)-  | TypeErrorNotPair (TermT var) (TermT var)-  | TypeErrorNotModal (Term var) TModality (TermT var)-  | TypeErrorModalityMismatch TModality TModality (Term var)-  | TypeErrorUnaccessibleVar var TModality TModality-  | TypeErrorNotTypeInModal (TermT var)-  | TypeErrorNotFunction (TermT var) (TermT var)-  | TypeErrorUnexpectedLambda (Term var) (TermT var)-  | TypeErrorUnexpectedPair (Term var) (TermT var)-  | TypeErrorUnexpectedRefl (Term var) (TermT var)-  | TypeErrorCannotInferBareLambda (Term var)-  | TypeErrorCannotInferBareRefl (Term var)-  | TypeErrorUndefined var-  | TypeErrorTopeNotSatisfied [TermT var] (TermT var)-  | TypeErrorTopesNotEquivalent (TermT var) (TermT var)-  | TypeErrorInvalidArgumentType (Term var) (TermT var)-  | TypeErrorDuplicateTopLevel [VarIdent] VarIdent-  | TypeErrorUnusedVariable var (TermT var)-  | TypeErrorUnusedUsedVariables [var] var-  | TypeErrorImplicitAssumption (var, TermT var) var-  deriving (Functor, Foldable)--data TypeErrorInContext var = TypeErrorInContext-  { typeErrorError   :: TypeError var-  , typeErrorContext :: Context var-  } deriving (Functor, Foldable)--data TypeErrorInScopedContext var-  = PlainTypeError (TypeErrorInContext var)-  | ScopedTypeError (Maybe VarIdent) (TypeErrorInScopedContext (Inc var))-  deriving (Functor, Foldable)--type TypeError' = TypeError VarIdent--ppTypeError' :: TypeError' -> String-ppTypeError' = \case-  TypeErrorOther msg -> msg-  TypeErrorUnify term expected actual -> block TopDown-    [ "cannot unify expected type"-    , "  " <> show (untyped expected)-    , "with actual type"-    , "  " <> show (untyped actual)-    , "for term"-    , "  " <> show (untyped term) ]-  TypeErrorUnifyTerms expected actual -> block TopDown-    [ "cannot unify term"-    , "  " <> show (untyped expected)-    , "with term"-    , "  " <> show (untyped actual) ]-  TypeErrorNotPair term ty -> block TopDown-    [ "expected a cube product or dependent pair"-    , "but got type"-    , "  " <> show (untyped ty)-    , "for term"-    , "  " <> show (untyped term)-    , case ty of-        TypeFunT{} -> "\nPerhaps the term is applied to too few arguments?"-        _          -> ""-    ]-  TypeErrorNotModal term m ty -> block TopDown-    [ "expected modal type with <| " ++ show m ++ " | ? |>"-    , "but got type"-    , "  " <> show (untyped ty)-    , "for term"-    , "  " <> show term-    ]-  TypeErrorModalityMismatch expected actual term -> block TopDown-    [ "modality mismatch"-    , "  expected " <> show expected-    , "  but got  " <> show actual-    , "for term"-    , "  " <> show term-    ]-  TypeErrorUnaccessibleVar _var varMod locks -> block TopDown-    [ "variable is not accessible"-    , "  variable has modality " <> show varMod-    , "  but is used under locks " <> show locks-    ]-  TypeErrorNotTypeInModal ty -> block TopDown-    [ "expected a type inside modal type"-    , "but got"-    , "  " <> show (untyped ty)-    ]--  TypeErrorUnexpectedLambda term ty -> block TopDown-    [ "unexpected lambda abstraction"-    , "  " <> show term-    , "when typechecking against a non-function type"-    , "  " <> show ty-    ]-  TypeErrorUnexpectedPair term ty -> block TopDown-    [ "unexpected pair"-    , "  " <> show term-    , "when typechecking against a type that is not a product or a dependent sum"-    , "  " <> show ty-    ]-  TypeErrorUnexpectedRefl term ty -> block TopDown-    [ "unexpected refl"-    , "  " <> show term-    , "when typechecking against a type that is not an identity type"-    , "  " <> show ty-    ]--  TypeErrorNotFunction term ty -> block TopDown-    [ "expected a function or extension type"-    , "but got type"-    , "  " <> show (untyped ty)-    , "for term"-    , "  " <> show (untyped term)-    , case term of-        AppT _ty f _x -> "\nPerhaps the term\n  " <> show (untyped f) <> "\nis applied to too many arguments?"-        _ -> ""-    ]-  TypeErrorCannotInferBareLambda term -> block TopDown-    [ "cannot infer the type of the argument"-    , "in lambda abstraction"-    , "  " <> show term-    ]-  TypeErrorCannotInferBareRefl term -> block TopDown-    [ "cannot infer the type of term"-    , "  " <> show term-    ]-  TypeErrorUndefined var -> block TopDown-    [ "undefined variable: " <> show (Pure var :: Term') ]-  TypeErrorTopeNotSatisfied topes tope -> block TopDown-    [ "local context is not included in (does not entail) the tope"-    , "  " <> show (untyped tope)-    , "in local context (normalised)"-    , intercalate "\n" (map ("  " <>) (map show topes))-    , intercalate "\n" (map ("  " <>) (map show (generateTopesForPoints (allTopePoints tope))))] -- FIXME: remove-  TypeErrorTopesNotEquivalent expected actual -> block TopDown-    [ "expected tope"-    , "  " <> show (untyped expected)-    , "but got"-    , "  " <> show (untyped actual) ]--  TypeErrorInvalidArgumentType argType argKind -> block TopDown-    [ "invalid function parameter type"-    , "  " <> show argType-    , "function parameter can be a cube, a shape, or a type"-    , "but given parameter type has type"-    , "  " <> show (untyped argKind)-    ]--  TypeErrorDuplicateTopLevel previous lastName -> block TopDown-    [ "duplicate top-level definition"-    , "  " <> ppVarIdentWithLocation lastName-    , "previous top-level definitions found at"-    , intercalate "\n"-      [ "  " <> ppVarIdentWithLocation name-      | name <- previous ]-    ]--  TypeErrorUnusedVariable name type_ -> block TopDown-    [ "unused variable"-    , "  " <> Rzk.printTree (getVarIdent name) <> " : " <> show (untyped type_)-    ]--  TypeErrorUnusedUsedVariables vars name -> block TopDown-    [ "unused variables"-    , "  " <> intercalate " " (map (Rzk.printTree . getVarIdent) vars)-    , "declared as used in definition of"-    , "  " <> Rzk.printTree (getVarIdent name)-    ]--  TypeErrorImplicitAssumption (a, aType) name -> block TopDown-    [ "implicit assumption"-    , "  " <> Rzk.printTree (getVarIdent a) <> " : " <> show (untyped aType)-    , "used in definition of"-    , "  " <> Rzk.printTree (getVarIdent name)-    ]---ppTypeErrorInContext :: OutputDirection -> TypeErrorInContext VarIdent -> String-ppTypeErrorInContext dir TypeErrorInContext{..} = block dir-  [ ppTypeError' typeErrorError-  , ""-  , ppContext' dir typeErrorContext-  ]--ppTypeErrorInScopedContextWith'-  :: OutputDirection-  -> [VarIdent]-  -> [VarIdent]-  -> TypeErrorInScopedContext VarIdent-  -> String-ppTypeErrorInScopedContextWith' dir used vars = \case-  PlainTypeError err -> ppTypeErrorInContext dir err-  ScopedTypeError orig err -> withFresh orig $ \(x, xs) ->-    ppTypeErrorInScopedContextWith' dir (x:used) xs $ fmap (g x) err-  where-    g x Z     = x-    g _ (S y) = y--    withFresh Nothing f =-      case vars of-        x:xs -> f (x, xs)-        _    -> panicImpossible "not enough fresh variables"-    withFresh (Just z) f = f (z', filter (/= z') vars)    -- FIXME: very inefficient filter-      where-        z' = refreshVar used z -- FIXME: inefficient--ppTypeErrorInScopedContext' :: OutputDirection -> TypeErrorInScopedContext VarIdent -> String-ppTypeErrorInScopedContext' dir err =-  ppTypeErrorInScopedContextWith' dir vars (defaultVarIdents \\ vars) err-  where-    vars = nub (foldMap pure err)--issueWarning :: String -> TypeCheck var ()-issueWarning message = do-  trace ("Warning: " <> message) $-    return ()--fromTypeError :: TypeError var -> TypeCheck var (TypeErrorInScopedContext var)-fromTypeError err = do-  context <- ask-  return $ PlainTypeError $ TypeErrorInContext-    { typeErrorError = err-    , typeErrorContext = context-    }--issueTypeError :: TypeError var -> TypeCheck var a-issueTypeError err = fromTypeError err >>= throwError--panicImpossible :: String -> a-panicImpossible msg = error $ unlines-  [ "PANIC! Impossible happened (" <> msg <> ")!"-  , "Please, report a bug at https://github.com/rzk-lang/rzk/issues"-    -- TODO: add details and/or instructions how to produce an artifact for reproducing-  ]--data Action var-  = ActionTypeCheck (Term var) (TermT var)-  | ActionUnify (TermT var) (TermT var) (TermT var)-  | ActionUnifyTerms (TermT var) (TermT var)-  | ActionInfer (Term var)-  | ActionContextEntailedBy [TermT var] (TermT var)-  | ActionContextEntails [TermT var] (TermT var)-  | ActionContextEquiv [TermT var] [TermT var]-  | ActionWHNF (TermT var)-  | ActionNF (TermT var)-  | ActionCheckCoherence (TermT var, TermT var) (TermT var, TermT var)-  | ActionCloseSection (Maybe Rzk.SectionName)-  | ActionCheckLetValue (Maybe VarIdent)-  deriving (Functor, Foldable)--type Action' = Action VarIdent--ppTermInContext :: Eq var => TermT var -> TypeCheck var String-ppTermInContext term =  do-  vars <- freeVarsT_ term-  let mapping = zip vars defaultVarIdents-      toRzkVarIdent origs var = fromMaybe "_" $-        join (lookup var origs) <|> lookup var mapping-  origs <- asks varOrigs-  return (show (untyped (toRzkVarIdent origs <$> term)))--ppSomeAction :: Eq var => [(var, Maybe VarIdent)] -> Int -> Action var -> String-ppSomeAction origs n action = ppAction n (toRzkVarIdent <$> action)-  where-    vars = nub (foldMap pure action)-    mapping = zip vars defaultVarIdents-    toRzkVarIdent var = fromMaybe "_" $-      join (lookup var origs) <|> lookup var mapping--ppAction :: Int -> Action' -> String-ppAction n = unlines . map (replicate (2 * n) ' ' <>) . \case-  ActionTypeCheck term ty ->-    [ "typechecking"-    , "  " <> show term-    , "against type"-    , "  " <> show (untyped ty) ]--  ActionUnify term expected actual ->-    [ "unifying expected type"-    , "  " <> show (untyped expected)-    , "with actual type"-    , "  " <> show (untyped actual)-    , "for term"-    , "  " <> show (untyped term) ]--  ActionUnifyTerms expected actual ->-    [ "unifying term (expected)"-    , "  " <> show expected-    , "with term (actual)"-    , "  " <> show actual ]--  ActionInfer term ->-    [ "inferring type for term"-    , "  " <> show term ]--  ActionContextEntailedBy ctxTopes term ->-    [ "checking if local context"-    , intercalate "\n" (map (("  " <>) . show . untyped) ctxTopes)-    , "includes (is entailed by) restriction tope"-    , "  " <> show (untyped term) ]--  ActionContextEntails ctxTopes term ->-    [ "checking if local context"-    , intercalate "\n" (map (("  " <>) . show . untyped) ctxTopes)-    , "is included in (entails) the tope"-    , "  " <> show (untyped term) ]--  ActionContextEquiv ctxTopes terms ->-    [ "checking if local context"-    , intercalate "\n" (map (("  " <>) . show . untyped) ctxTopes)-    , "is equivalent to the union of the topes"-    , intercalate "\n" (map (("  " <>) . show . untyped) terms) ]--  ActionWHNF term ->-    [ "computing WHNF for term"-    , "  " <> show term ]--  ActionNF term ->-    [ "computing normal form for term"-    , "  " <> show (untyped term) ]--  ActionCheckCoherence (ltope, lterm) (rtope, rterm) ->-    [ "checking coherence for"-    , "  " <> show (untyped ltope)-    , "  |-> " <> show (untyped lterm)-    , "and"-    , "  " <> show (untyped rtope)-    , "  |-> " <> show (untyped rterm) ]--  ActionCloseSection Nothing ->-    [ "closing the file"-    , "and collecting assumptions (variables)" ]-  ActionCloseSection (Just sectionName) ->-    [ "closing #section " <> Rzk.printTree sectionName-    , "and collecting assumptions (variables)"]--  ActionCheckLetValue orig ->-    [ "checking the local definition "-        <> maybe "_" (Rzk.printTree . getVarIdent) orig ]---traceAction' :: Int -> Action' -> a -> a-traceAction' n action = trace ("[debug]\n" <> ppAction n action)--unsafeTraceAction' :: Int -> Action var -> a -> a-unsafeTraceAction' n = traceAction' n . unsafeCoerce--data LocationInfo = LocationInfo-  { locationFilePath :: Maybe FilePath-  , locationLine     :: Maybe Int-  } deriving (Eq)--data Verbosity-  = Debug-  | Normal-  | Silent-  deriving (Eq, Ord)--trace' :: Verbosity -> Verbosity -> String -> a -> a-trace' msgLevel currentLevel-  | currentLevel <= msgLevel = trace-  | otherwise                = const id--traceTypeCheck :: Verbosity -> String -> TypeCheck var a -> TypeCheck var a-traceTypeCheck msgLevel msg tc = do-  Context{..} <- ask-  trace' msgLevel verbosity msg tc--localVerbosity :: Verbosity -> TypeCheck var a -> TypeCheck var a-localVerbosity v = local $ \Context{..} -> Context { verbosity = v, .. }--localRenderBackend :: Maybe RenderBackend -> TypeCheck var a -> TypeCheck var a-localRenderBackend v = local $ \Context{..} -> Context { renderBackend = v, .. }--data Covariance-  = Covariant     -- ^ Positive position.-  | Contravariant -- ^ Negative position.-  | Invariant     -- ^ Unknown position.--data RenderBackend-  = RenderSVG-  | RenderLaTeX--data ScopeInfo var = ScopeInfo-  { scopeName :: Maybe Rzk.SectionName-  , scopeVars :: [(var, VarInfo var)]-  } deriving (Functor, Foldable)--addVarToScope :: var -> VarInfo var -> ScopeInfo var -> ScopeInfo var-addVarToScope var info ScopeInfo{..} = ScopeInfo-  { scopeVars = (var, info) : scopeVars, .. }--addModalityToScope :: TModality -> ScopeInfo var -> ScopeInfo var-addModalityToScope md ScopeInfo{..} = ScopeInfo-  { scopeVars = map (\(var, VarInfo{..}) -> (var, VarInfo{ modAccum = comp modAccum md, ..})) scopeVars, .. }--data VarInfo var = VarInfo-  { varType                :: TermT var-  , varValue               :: Maybe (TermT var)-  , varModality            :: TModality-  , modAccum               :: TModality-  , varOrig                :: Maybe VarIdent-  , varIsAssumption        :: Bool -- FIXME: perhaps, introduce something like decl kind?-  , varIsTopLevel          :: Bool-  , varDeclaredAssumptions :: [var]-  , varLocation            :: Maybe LocationInfo-  } deriving (Functor, Foldable)---class ModeTheory m where-    iden :: m-    comp :: m -> m -> m-    coe :: m -> m -> Bool--instance ModeTheory TModality where-  iden = Id--  comp Flat Flat   = Flat-  comp Flat Sharp  = Flat-  comp Flat Op     = Flat-  comp Op Flat     = Flat-  comp Sharp Sharp = Sharp-  comp Sharp Flat  = Sharp-  comp Sharp Op    = Sharp-  comp Op Sharp    = Sharp-  comp Op Op       = Id-  comp Id m        = m-  comp m Id        = m--  coe Flat Id    = True-  coe Id Sharp   = True-  coe Flat Sharp = True-  coe a b        = a == b--data Context var = Context-  { localScopes            :: [ScopeInfo var]-  , localTopes             :: [TermT var]-  , localTopesNF           :: [TermT var]-  , localTopesNFUnion      :: [[TermT var]]-  , localTopesEntailBottom :: Bool-  , actionStack            :: [Action var]-  , currentCommand         :: Maybe Rzk.Command-  , location               :: Maybe LocationInfo-  , verbosity              :: Verbosity-  , covariance             :: Covariance-  , renderBackend          :: Maybe RenderBackend-  } deriving (Functor, Foldable)--addVarInCurrentScope :: var -> VarInfo var -> Context var -> Context var-addVarInCurrentScope var info Context{..} = Context-  { localScopes =-      case localScopes of-        []             -> [ScopeInfo Nothing [(var, info)]]-        scope : scopes -> addVarToScope var info scope : scopes-  , .. }--applyModalityToScopes :: TModality -> [ScopeInfo var] -> [ScopeInfo var]-applyModalityToScopes md scopes = map (addModalityToScope md) scopes--applyModality :: TModality -> Context var -> Context var-applyModality md Context{..} = Context { localScopes = applyModalityToScopes md localScopes, .. }--emptyContext :: Context var-emptyContext = Context-  { localScopes = [ScopeInfo Nothing []]-  , localTopes = [topeTopT]-  , localTopesNF = [topeTopT]-  , localTopesNFUnion = [[topeTopT]]-  , localTopesEntailBottom = False-  , actionStack = []-  , currentCommand = Nothing-  , location = Nothing-  , verbosity = Normal-  , covariance = Covariant-  , renderBackend = Nothing-  }--askCurrentScope :: TypeCheck var (ScopeInfo var)-askCurrentScope = asks localScopes >>= \case-  []              -> panicImpossible "no current scope available"-  scope : _scopes -> pure scope--varInfos :: Context var -> [(var, VarInfo var)]-varInfos Context{..} = concatMap scopeVars localScopes--varTypes :: Context var -> [(var, TermT var)]-varTypes = map (fmap varType) . varInfos--varValues :: Context var -> [(var, Maybe (TermT var))]-varValues = map (fmap varValue) . varInfos--varOrigs :: Context var -> [(var, Maybe VarIdent)]-varOrigs = map (fmap varOrig) . varInfos--varModalities :: Context var -> [(var, TModality)]-varModalities = map (fmap varModality) . varInfos--varLocks :: Context var -> [(var, TModality)]-varLocks = map (fmap modAccum) . varInfos--varTopLevels :: Context var -> [(var, Bool)]-varTopLevels = map (fmap varIsTopLevel) . varInfos--withPartialDecls-  :: TypeCheck VarIdent ([Decl'], [err])-  -> TypeCheck VarIdent ([Decl'], [err])-  -> TypeCheck VarIdent ([Decl'], [err])-withPartialDecls tc next = do-  (decls, errs) <- tc-  if null errs-    then first (decls <>)-      <$> localDeclsPrepared decls next-    else return (decls, errs)--withSection-  :: Maybe Rzk.SectionName-  -> TypeCheck VarIdent ([Decl VarIdent], [TypeErrorInScopedContext VarIdent])-  -> TypeCheck VarIdent ([Decl VarIdent], [TypeErrorInScopedContext VarIdent])-  -> TypeCheck VarIdent ([Decl VarIdent], [TypeErrorInScopedContext VarIdent])-withSection name sectionBody =-  withPartialDecls $ startSection name $ do-    (decls, errs) <- sectionBody-    localDeclsPrepared decls $-      performing (ActionCloseSection name) $ do-        result <- (Right <$> endSection errs) `catchError` (return . Left)-        case result of-          Left err              -> return ([], errs <> [err])-          Right (decls', errs') -> return (decls', errs')-        -- (\ decls' -> (decls', errs)) <$> endSection errs--startSection :: Maybe Rzk.SectionName -> TypeCheck VarIdent a -> TypeCheck VarIdent a-startSection name = local $ \Context{..} -> Context-  { localScopes = ScopeInfo { scopeName = name, scopeVars = [] } : localScopes-  , .. }--endSection :: [TypeErrorInScopedContext VarIdent] -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])-endSection errs = askCurrentScope >>= scopeToDecls errs--scopeToDecls :: Eq var => [TypeErrorInScopedContext var] -> ScopeInfo var -> TypeCheck var ([Decl var], [TypeErrorInScopedContext var])-scopeToDecls errs ScopeInfo{..} = do-  (decls, errs') <- collectScopeDecls errs [] scopeVars-  -- only issue unused variable errors if there were no errors prior in the section-  -- when (null errs) $ do-  unusedErrors <- forM decls $ \Decl{..} -> do-    let unusedUsedVars = declUsedVars `intersect` map fst scopeVars-    if null errs && not (null unusedUsedVars)-      then do-        err <- local (\c -> c { location = declLocation }) $-          fromTypeError (TypeErrorUnusedUsedVariables unusedUsedVars declName)-        return [err]-      else return []-  return (decls, errs' <> concat unusedErrors)--insertExplicitAssumptionFor-  :: Eq var => var -> (var, VarInfo var) -> TermT var -> TermT var-insertExplicitAssumptionFor a (declName, VarInfo{..}) term =-  term >>= \case-    y | y == declName -> appT varType (Pure declName) (Pure a)-      | otherwise     -> Pure y--insertExplicitAssumptionFor'-  :: Eq var => var -> (var, VarInfo var) -> VarInfo var -> VarInfo var-insertExplicitAssumptionFor' a decl VarInfo{..}-  | varIsAssumption = VarInfo{..}-  | otherwise = VarInfo-      { varType = insertExplicitAssumptionFor a decl varType-      , varValue = insertExplicitAssumptionFor a decl <$> varValue-      , varIsAssumption = varIsAssumption-      , varIsTopLevel = varIsTopLevel-      , varModality = varModality-      , modAccum = modAccum-      , varOrig = varOrig-      , varDeclaredAssumptions = varDeclaredAssumptions-      , varLocation = varLocation-      }--makeAssumptionExplicit-  :: Eq var-  => (var, VarInfo var)-  -> [(var, VarInfo var)]-  -> TypeCheck var (Bool, [(var, VarInfo var)])-makeAssumptionExplicit _ [] = pure (False {- UNUSED -}, [])-makeAssumptionExplicit assumption@(a, aInfo) ((x, xInfo) : xs) = do-  varsInType <- freeVarsT_ (varType xInfo)-  varsInBody <- concat <$> traverse freeVarsT_ (varValue xInfo)-  let xFreeVars = varsInBody <> varsInType-  let hasAssumption = a `elem` xFreeVars-  xType <- typeOfVar x-  xValue <- valueOfVar x-  let assumptionInType = a `elem` freeVars (untyped xType)-      assumptionInBody = a `elem` foldMap (freeVars . untyped) xValue-      implicitAssumption = and-        [ hasAssumption-        , not (assumptionInType || assumptionInBody)-        , a `notElem` varDeclaredAssumptions xInfo ]-  if hasAssumption-     then do-       when implicitAssumption $ do-         issueTypeError $ TypeErrorImplicitAssumption (a, varType aInfo) x-       (_used, xs'') <- makeAssumptionExplicit (a, aInfo) xs'-       return (True {- USED -}, (x, xInfo') : xs'')-     else do-       (used, xs'') <- makeAssumptionExplicit assumption xs-       return (used, (x, xInfo) : xs'')-  where-    xType' = typeFunT (varOrig aInfo) (varType aInfo) Nothing (abstract a (varType xInfo))-    xInfo' = VarInfo-      { varType = xType'-      , varValue = fmap (lambdaT xType' (varOrig aInfo) Nothing . abstract a) (varValue xInfo)-      , varIsAssumption = varIsAssumption xInfo-      , varIsTopLevel = varIsTopLevel xInfo-      , varModality = Id-      , modAccum = Id-      , varOrig = varOrig xInfo-      , varDeclaredAssumptions = varDeclaredAssumptions xInfo \\ [a]-      , varLocation = varLocation xInfo-      }-    xs' = map (fmap (insertExplicitAssumptionFor' a (x, xInfo))) xs--collectScopeDecls :: Eq var => [TypeErrorInScopedContext var] -> [(var, VarInfo var)] -> [(var, VarInfo var)] -> TypeCheck var ([Decl var], [TypeErrorInScopedContext var])-collectScopeDecls errs recentVars (decl@(var, VarInfo{..}) : vars)-  | varIsAssumption = do-      (used, recentVars') <- makeAssumptionExplicit decl recentVars-      -- only issue unused vars error if there were no other errors previously-      -- when (null errs) $ do-      unusedErr <--        if null errs && not used-          then local (\c -> c { location = varLocation }) $-            pure <$> fromTypeError (TypeErrorUnusedVariable var varType)-          else return []-      collectScopeDecls (errs <> unusedErr) recentVars' vars-  | otherwise = do-      collectScopeDecls errs (decl : recentVars) vars-collectScopeDecls errs recentVars [] = do-  loc <- asks location-  return (toDecl loc <$> recentVars, errs)-  where-    toDecl loc (var, VarInfo{..}) = Decl-      { declName = var-      , declType = varType-      , declValue = varValue-      , declIsAssumption = varIsAssumption-      , declUsedVars = varDeclaredAssumptions-      , declLocation = updatePosition (varOrig >>= fmap fst . Rzk.hasPosition . fromVarIdent) <$> loc -- FIXME-      }-    updatePosition Nothing l       = l-    updatePosition (Just lineNo) l = l { locationLine = Just lineNo }--abstractAssumption :: Eq var => (var, VarInfo var) -> Decl var -> Decl var-abstractAssumption (var, VarInfo{..}) Decl{..} = Decl-  { declName = declName-  , declType = typeFunT varOrig varType Nothing (abstract var declType)-  , declValue = (\body -> lambdaT newDeclType varOrig Nothing (abstract var body)) <$> declValue-  , declIsAssumption = declIsAssumption-  , declUsedVars = declUsedVars-  , declLocation = declLocation-  }-  where-    newDeclType = typeFunT varOrig varType Nothing (abstract var declType)--data OutputDirection = TopDown | BottomUp-  deriving (Eq)--block :: OutputDirection -> [String] -> String-block TopDown  = intercalate "\n"-block BottomUp = intercalate "\n" . reverse--namedBlock :: OutputDirection -> String -> [String] -> String-namedBlock dir name lines_ = block dir $-  name : map indent lines_-  where-    indent = intercalate "\n" . (map ("  " ++)) . lines--ppContext' :: OutputDirection -> Context VarIdent -> String-ppContext' dir ctx@Context{..} = block dir $ dropWhile null-  [ block TopDown-    [ case location of-        _ | dir == TopDown -> "" -- FIXME-        Just (LocationInfo (Just path) (Just lineNo)) ->-          path <> " (line " <> show lineNo <> "):"-        Just (LocationInfo (Just path) _) ->-          path <> ":"-        _  -> ""-    , case currentCommand of-        Just (Rzk.CommandDefine _loc name _vars _params _ty _term) ->-          "  Error occurred when checking\n    #define " <> Rzk.printTree name-        Just (Rzk.CommandPostulate _loc name _vars _params _ty ) ->-          "  Error occurred when checking\n    #postulate " <> Rzk.printTree name-        Just (Rzk.CommandCheck _loc term ty) ->-          "  Error occurred when checking\n    " <> Rzk.printTree term <> " : " <> Rzk.printTree ty-        Just (Rzk.CommandCompute _loc term) ->-          "  Error occurred when computing\n    " <> Rzk.printTree term-        Just (Rzk.CommandComputeNF _loc term) ->-          "  Error occurred when computing NF for\n    " <> Rzk.printTree term-        Just (Rzk.CommandComputeWHNF _loc term) ->-          "  Error occurred when computing WHNF for\n    " <> Rzk.printTree term-        Just (Rzk.CommandSetOption _loc optionName _optionValue) ->-          "  Error occurred when trying to set option\n    #set-option " <> show optionName-        Just command@Rzk.CommandUnsetOption{} ->-          "  Error occurred when trying to unset option\n    " <> Rzk.printTree command-        Just command@Rzk.CommandAssume{} ->-          "  Error occurred when checking assumption\n    " <> Rzk.printTree command-        Just (Rzk.CommandSection _loc name) ->-          "  Error occurred when checking\n    #section " <> Rzk.printTree name-        Just (Rzk.CommandSectionEnd _loc name) ->-          "  Error occurred when checking\n    #end " <> Rzk.printTree name-        Nothing -> "  Error occurred outside of any command!"-    ]-  , ""-  , case filter (/= topeTopT) localTopes of-      [] -> "Local tope context is unrestricted (⊤)."-      localTopes' -> namedBlock TopDown "Local tope context:"-        [ "  " <> show (untyped tope)-        | tope <- localTopes' ]-  , ""-  , block dir-    [ "when " <> ppAction 0 action-    | action <- actionStack ]-  , namedBlock TopDown "Definitions in context:"-    [ block dir-      [ show (Pure x :: Term') <> " : " <> show (untyped ty)-      | (x, ty) <- reverse (varTypes ctx) ] ]-  ]--doesShadowName :: VarIdent -> TypeCheck var [VarIdent]-doesShadowName name = asks $ \ctx ->-  filter (name ==) (mapMaybe snd (varOrigs ctx))--checkTopLevelDuplicate :: VarIdent -> TypeCheck var ()-checkTopLevelDuplicate name = do-  doesShadowName name >>= \case-    []         -> return ()-    collisions -> issueTypeError $-      TypeErrorDuplicateTopLevel collisions name--checkNameShadowing :: VarIdent -> TypeCheck var ()-checkNameShadowing name = do-  doesShadowName name >>= \case-    [] -> return ()-    collisions -> issueWarning $-      Rzk.printTree (getVarIdent name) <> " shadows an existing definition:"-      <> unlines-        [ "  " <> ppVarIdentWithLocation name-        , "previous top-level definitions found at"-        , intercalate "\n"-          [ "  " <> ppVarIdentWithLocation prev | prev <- collisions ] ]--withLocation :: LocationInfo -> TypeCheck var a -> TypeCheck var a-withLocation loc = local $ \Context{..} -> Context { location = Just loc, .. }--withCommand :: Rzk.Command -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent]) -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])-withCommand command tc = local f $ do-  result <- (Right <$> tc) `catchError` (return . Left)-  case result of-    Left err            -> return ([], [err])-    Right (decls, errs) -> return (decls, errs)-  where-    f Context{..} = Context-      { currentCommand = Just command-      , location = updatePosition (Rzk.hasPosition command) <$> location-      , .. }-    updatePosition pos loc = loc { locationLine = fst <$> pos }--localDecls :: [Decl VarIdent] -> TypeCheck VarIdent a -> TypeCheck VarIdent a-localDecls []             = id-localDecls (decl : decls) = localDecl decl . localDecls decls--localDeclsPrepared :: [Decl VarIdent] -> TypeCheck VarIdent a -> TypeCheck VarIdent a-localDeclsPrepared [] = id-localDeclsPrepared (decl : decls) = localDeclPrepared decl . localDeclsPrepared decls--localDecl :: Decl VarIdent -> TypeCheck VarIdent a -> TypeCheck VarIdent a-localDecl (Decl x ty term isAssumption vars loc) tc = do-  ty' <- whnfT ty-  term' <- traverse whnfT term-  localDeclPrepared (Decl x ty' term' isAssumption vars loc) tc--localDeclPrepared :: Decl VarIdent -> TypeCheck VarIdent a -> TypeCheck VarIdent a-localDeclPrepared (Decl x ty term isAssumption vars loc) tc = do-  checkTopLevelDuplicate x-  local update tc-  where-    update = addVarInCurrentScope x VarInfo-      { varType = ty-      , varValue = term-      , varOrig = Just x-      , varModality  = Id-      , modAccum = Id-      , varIsAssumption = isAssumption-      , varIsTopLevel = True-      , varDeclaredAssumptions = vars-      , varLocation = loc-      }--type TypeCheck var = ReaderT (Context var) (Except (TypeErrorInScopedContext var))--freeVarsT_ :: Eq var => TermT var -> TypeCheck var [var]-freeVarsT_ term = do-  types <- asks varTypes-  let typeOfVar' x =-        case lookup x types of-          Nothing -> panicImpossible "undefined variable"-          Just ty -> ty-  return (freeVarsT typeOfVar' term)--traceStartAndFinish :: Show a => String -> a -> a-traceStartAndFinish tag = trace ("start [" <> tag <> "]") .-  (\x -> trace ("finish [" <> tag <> "] with " <> show x) x)--entail :: Eq var => [TermT var] -> TermT var -> Bool-entail topes tope = all (`solveRHS` tope) $-  saturateTopes (allTopePoints tope) <$>-    simplifyLHSwithDisjunctions topes'-  where-    topes' = nubTermT (topes <> generateTopesForPoints (allTopePoints tope))--entailM :: Eq var => [TermT var] -> TermT var -> TypeCheck var Bool-entailM topes tope = do-  -- genTopes <- generateTopesForPointsM (allTopePoints tope)-  discreteAxioms <- generateTopesForModalCubeVarsM-  invAxioms <- mapM nfTope (concatMap generateInvAxioms topes)-  let flipAxioms  = concatMap generateFlipAxioms topes-      flatAxioms  = concatMap generateFlatAxioms topes-      sharpAxioms = concatMap generateSharpAxioms topes-      topes'    = nubTermT (topes <> discreteAxioms <> flipAxioms <> invAxioms <> flatAxioms <> sharpAxioms)-      topes''   = simplifyLHSwithDisjunctions topes'-      topes'''  = saturateTopes (allTopePoints tope) <$> topes''-  prettyTopes <- mapM ppTermInContext (saturateTopes (allTopePoints tope) (simplifyLHS topes'))-  prettyTope <- ppTermInContext tope-  traceTypeCheck Debug-    ("entail " <> intercalate ", " prettyTopes <> " |- " <> prettyTope) $-      and <$> mapM (`solveRHSM` tope) topes'''--generateFlipAxioms :: TermT var -> [TermT var]-generateFlipAxioms = \case-  TopeEQT _ t Cube2_0T{} -> [topeEQT (modExtractT cube2T Id Op (cubeFlipT t)) cube2_1T]-  TopeEQT _ Cube2_0T{} t -> [topeEQT (modExtractT cube2T Id Op (cubeFlipT t)) cube2_1T]-  TopeEQT _ t Cube2_1T{} -> [topeEQT (modExtractT cube2T Id Op (cubeFlipT t)) cube2_0T]-  TopeEQT _ Cube2_1T{} t -> [topeEQT (modExtractT cube2T Id Op (cubeFlipT t)) cube2_0T]-  _ -> []--generateInvAxioms :: TermT var -> [TermT var]-generateInvAxioms = \case-  TypeModalT _ Op inner -> [topeUninvT inner]-  t -> [typeModalT topeT Op (topeInvT t)]---generateFlatAxioms :: TermT var -> [TermT var]-generateFlatAxioms = \case-  TypeModalT _ Flat inner -> [inner]-  _ -> []---generateSharpAxioms :: TermT var -> [TermT var]-generateSharpAxioms = \case-  t -> [typeModalT topeT Sharp t]--generateTopesForModalCubeVarsM :: Eq var => TypeCheck var [TermT var]-generateTopesForModalCubeVarsM = do-  infos <- asks varInfos-  fmap (nubTermT . concat) $ forM infos $ \(var, info) -> do-    ty' <- whnfT (varType info)-    case ty' of-      TypeModalT _ Flat inner -> do-        inner' <- whnfT inner-        if inner' == cube2T-          then do-            let pt = modExtractT cube2T Id Flat (Pure var)-            return [topeOrT (topeEQT pt cube2_0T) (topeEQT pt cube2_1T)]-          else return []-      _ -> return []--entailTraceM :: Eq var => [TermT var] -> TermT var -> TypeCheck var Bool-entailTraceM topes tope = do-  topes' <- mapM ppTermInContext topes-  tope' <- ppTermInContext tope-  result <- trace ("entail " <> intercalate ", " topes' <> " |- " <> tope') $-        topes `entailM` tope-  return $ trace ("  " <> show result) result--nubTermT :: Eq var => [TermT var] -> [TermT var]-nubTermT []     = []-nubTermT (t:ts) = t : nubTermT (filter (/= t) ts)--saturateTopes :: Eq var => [TermT var] -> [TermT var] -> [TermT var]-saturateTopes _points topes = saturateWith-  (\tope ts -> tope `elem` ts)-  generateTopes-  topes---- FIXME: cleanup-saturateWith :: (a -> [a] -> Bool) -> ([a] -> [a] -> [a]) -> [a] -> [a]-saturateWith elem' step zs = go (nub' zs) []-  where-    go lastNew xs-      | null new = lastNew-      | otherwise = lastNew <> go new xs'-      where-        xs' = lastNew <> xs-        new = filter (not . (`elem'` xs')) (nub' $ step lastNew xs)-    nub' []     = []-    nub' (x:xs) = x : nub' (filter (not . (`elem'` [x])) xs)--generateTopes :: Eq var => [TermT var] -> [TermT var] -> [TermT var]-generateTopes newTopes oldTopes-  | topeBottomT `elem` newTopes = []-  | topeEQT cube2_0T cube2_1T `elem` newTopes = [topeBottomT]-  | length oldTopes > 100 = []    -- FIXME-  | otherwise = concat-      [  -- symmetry EQ-        [ topeEQT y x | TopeEQT _ty x y <- newTopes ]-        -- transitivity EQ (1)-      , [ topeEQT x z-        | TopeEQT _ty x y : newTopes' <- tails newTopes-        , TopeEQT _ty y' z <- newTopes' <> oldTopes-        , y == y' ]-        -- transitivity EQ (2)-      , [ topeEQT x z-        | TopeEQT _ty y z : newTopes' <- tails newTopes-        , TopeEQT _ty x y' <- newTopes' <> oldTopes-        , y == y' ]--        -- transitivity LEQ (1)-      , [ topeLEQT x z-        | TopeLEQT _ty x y : newTopes' <- tails newTopes-        , TopeLEQT _ty y' z <- newTopes' <> oldTopes-        , y == y' ]-        -- transitivity LEQ (2)-      , [ topeLEQT x z-        | TopeLEQT _ty y z : newTopes' <- tails newTopes-        , TopeLEQT _ty x y' <- newTopes' <> oldTopes-        , y == y' ]--        -- antisymmetry LEQ-      , [ topeEQT x y-        | TopeLEQT _ty x y : newTopes' <- tails newTopes-        , TopeLEQT _ty y' x' <- newTopes' <> oldTopes-        , y == y'-        , x == x' ]--        -- FIXME: special case of substitution of EQ-        -- transitivity EQ-LEQ (1)-      , [ topeLEQT x z-        | TopeEQT  _ty y z : newTopes' <- tails newTopes-        , TopeLEQT _ty x y' <- newTopes' <> oldTopes-        , y == y' ]--        -- FIXME: special case of substitution of EQ-        -- transitivity EQ-LEQ (2)-      , [ topeLEQT x z-        | TopeEQT  _ty x y : newTopes' <- tails newTopes-        , TopeLEQT _ty y' z <- newTopes' <> oldTopes-        , y == y' ]--        -- FIXME: special case of substitution of EQ-        -- transitivity EQ-LEQ (3)-      , [ topeLEQT x z-        | TopeLEQT  _ty y z : newTopes' <- tails newTopes-        , TopeEQT _ty x y' <- newTopes' <> oldTopes-        , y == y' ]--        -- FIXME: special case of substitution of EQ-        -- transitivity EQ-LEQ (4)-      , [ topeLEQT x z-        | TopeLEQT  _ty x y : newTopes' <- tails newTopes-        , TopeEQT _ty y' z <- newTopes' <> oldTopes-        , y == y' ]--        -- FIXME: consequence of LEM for LEQ and antisymmetry for LEQ-      , [ topeEQT x y | TopeLEQT _ty x y@Cube2_0T{} <- newTopes ]-        -- FIXME: consequence of LEM for LEQ and antisymmetry for LEQ-      , [ topeEQT x y | TopeLEQT _ty x@Cube2_1T{} y <- newTopes ]-      ]--generateTopesForPoints :: Eq var => [TermT var] -> [TermT var]-generateTopesForPoints points = nubTermT $ concat-  [ [ topeOrT (topeLEQT x y) (topeLEQT y x)-    | x : points' <- tails (filter (`notElem` [cube2_0T, cube2_1T]) points)-    , y <- points'-    , x /= y ]-  ]--generateTopesForPointsM :: Eq var => [TermT var] -> TypeCheck var [TermT var]-generateTopesForPointsM points = do-  let pairs = nub $ concat-        [ [ (x, y)-          | x : points' <- tails (filter (`notElem` [cube2_0T, cube2_1T]) points)-          , y <- points'-          , x /= y ]-        ]-  stars <- forM points $ \x -> do -    xType <- typeOf x -    return $ if (xType == cubeUnitT) -      then [topeEQT x cubeUnitStarT] -      else []-  topes <- forM pairs $ \(x, y) -> do-    xType <- typeOf x-    yType <- typeOf y-    return $ if (xType == cube2T) && (yType == cube2T)-      then [topeOrT (topeLEQT x y) (topeLEQT y x)]-      else []-  return (concat (topes ++ stars))--allTopePoints :: Eq var => TermT var -> [TermT var]-allTopePoints = nubTermT . foldMap subPoints . nubTermT . topePoints--topePoints :: TermT var -> [TermT var]-topePoints = \case-  TopeTopT{}     -> []-  TopeBottomT{}  -> []-  TopeAndT _ l r -> topePoints l <> topePoints r-  TopeOrT  _ l r -> topePoints l <> topePoints r-  TopeEQT  _ x y -> [x, y]-  TopeLEQT _ x y -> [x, y]-  _              -> []--subPoints :: TermT var -> [TermT var]-subPoints = \case-  p@(PairT _ x y) -> p : foldMap subPoints [x, y]-  p@Pure{} -> [p]-  p@(Free (AnnF TypeInfo{..} _))-    | Cube2T{} <- infoType -> [p]-    | CubeUnitT{} <- infoType -> [p]-  _ -> []---- | Simplify the context, including disjunctions. See also 'simplifyLHS'.-simplifyLHSwithDisjunctions :: Eq var => [TermT var] -> [[TermT var]]-simplifyLHSwithDisjunctions topes = map nubTermT $-  case topes of-    [] -> [[]]-    TopeTopT{} : topes' -> simplifyLHSwithDisjunctions topes'-    TopeBottomT{} : _  -> [[topeBottomT]]-    TopeAndT _ l r : topes' -> simplifyLHSwithDisjunctions (l : r : topes')--    -- NOTE: it is inefficient to expand disjunctions immediately-    TopeOrT  _ l r : topes' -> simplifyLHSwithDisjunctions (l : topes') <> simplifyLHSwithDisjunctions (r : topes')--    TopeEQT  _ (PairT _ x y) (PairT _ x' y') : topes' ->-      simplifyLHSwithDisjunctions (topeEQT x x' : topeEQT y y' : topes')-    t : topes' -> map (t :) (simplifyLHSwithDisjunctions topes')---- | Simplify the context, except disjunctions. See also 'simplifyLHSwithDisjunctions'.-simplifyLHS :: Eq var => [TermT var] -> [TermT var]-simplifyLHS topes = nubTermT $-  case topes of-    [] -> []-    TopeTopT{} : topes' -> simplifyLHS topes'-    TopeBottomT{} : _  -> [topeBottomT]-    TopeAndT _ l r : topes' -> simplifyLHS (l : r : topes')--    -- NOTE: it is inefficient to expand disjunctions immediately-    -- TopeOrT  _ l r : topes' -> simplifyLHS (l : topes') <> simplifyLHS (r : topes')--    TopeEQT  _ (PairT _ x y) (PairT _ x' y') : topes' ->-      simplifyLHS (topeEQT x x' : topeEQT y y' : topes')-    t : topes' -> t : simplifyLHS topes'--solveRHSM :: Eq var => [TermT var] -> TermT var -> TypeCheck var Bool-solveRHSM topes tope =-  case tope of-    _ | topeBottomT `elem` topes -> return True-    TopeTopT{}     -> return True-    TopeEQT  _ty (PairT _ty1 x y) (PairT _ty2 x' y') ->-      solveRHSM topes $ topeAndT-        (topeEQT x x')-        (topeEQT y y')-    TopeEQT  _ty (PairT TypeInfo{ infoType = CubeProductT _ cubeI cubeJ } x y) r ->-      solveRHSM topes $ topeAndT-        (topeEQT x (firstT cubeI r))-        (topeEQT y (secondT cubeJ r))-    TopeEQT  _ty l (PairT TypeInfo{ infoType = CubeProductT _ cubeI cubeJ } x y) ->-      solveRHSM topes $ topeAndT-        (topeEQT (firstT cubeI l) x)-        (topeEQT (secondT cubeJ l) y)-    TopeEQT  _ty l r-      | or-          [ l == r-          , tope `elem` topes-          , topeEQT r l `elem` topes-          ] -> return True-    TopeEQT  _ty l r -> do -      lType <- typeOf l -      rType <- typeOf r -      return $ case (lType, rType) of-        (CubeUnitT{}, CubeUnitT{}) -> True -        _ -> False-    TopeLEQT _ty l r-      | l == r -> return True-      | solveRHS topes (topeEQT l r) -> return True-      | solveRHS topes (topeEQT l cube2_0T) -> return True-      | solveRHS topes (topeEQT r cube2_1T) -> return True-    TopeAndT _ l r -> (&&)-      <$> solveRHSM topes l-      <*> solveRHSM topes r-    _ | tope `elem` topes -> return True-    TopeOrT  _ l r -> do-      l' <- solveRHSM topes l-      r' <- solveRHSM topes r-      if (l' || r')-        then return True-        else do-          lems <- generateTopesForPointsM (allTopePoints tope)-          let lems' = [ lem | lem@(TopeOrT _ t1 t2) <- lems, all (`notElem` topes) [t1, t2] ]-          case lems' of-            TopeOrT _ t1 t2 : _ -> do-              l'' <- solveRHSM (saturateTopes [] (t1 : topes)) tope-              r'' <- solveRHSM (saturateTopes [] (t2 : topes)) tope-              return (l'' && r'')-            _ -> return False-    _ -> return False--solveRHS :: Eq var => [TermT var] -> TermT var -> Bool-solveRHS topes tope =-  case tope of-    _ | topeBottomT `elem` topes -> True-    TopeTopT{}     -> True-    TopeEQT  _ty (PairT _ty1 x y) (PairT _ty2 x' y')-      | solveRHS topes (topeEQT x x') && solveRHS topes (topeEQT y y') -> True-    TopeEQT  _ty (PairT TypeInfo{ infoType = CubeProductT _ cubeI cubeJ } x y) r-      | solveRHS topes (topeEQT x (firstT cubeI r)) && solveRHS topes (topeEQT y (secondT cubeJ r)) -> True-    TopeEQT  _ty l (PairT TypeInfo{ infoType = CubeProductT _ cubeI cubeJ } x y)-      | solveRHS topes (topeEQT (firstT cubeI l) x) && solveRHS topes (topeEQT (secondT cubeJ l) y) -> True-    TopeEQT  _ty l r -> or-      [ l == r-      , tope `elem` topes-      , topeEQT r l `elem` topes-      ]-    TopeLEQT _ty l r-      | l == r -> True-      | solveRHS topes (topeEQT l r) -> True-      | solveRHS topes (topeEQT l cube2_0T) -> True-      | solveRHS topes (topeEQT r cube2_1T) -> True-    -- TopeBottomT{}  -> solveLHS topes tope-    TopeAndT _ l r -> solveRHS topes l && solveRHS topes r-    TopeOrT  _ l r -> solveRHS topes l || solveRHS topes r-    _ -> tope `elem` topes--checkTope :: Eq var => TermT var -> TypeCheck var Bool-checkTope tope = do-  ctxTopes <- asks localTopes-  performing (ActionContextEntails ctxTopes tope) $ do-    topes' <- asks localTopesNF-    tope' <- nfTope tope-    topes' `entailM` tope'--checkTopeEntails :: Eq var => TermT var -> TypeCheck var Bool-checkTopeEntails tope = do-  ctxTopes <- asks localTopes-  performing (ActionContextEntailedBy ctxTopes tope) $ do-    contextTopes <- asks localTopesNF-    restrictionTope <- nfTope tope-    let contextTopesRHS = foldr topeAndT topeTopT contextTopes-    [restrictionTope] `entailM` contextTopesRHS--checkEntails :: Eq var => TermT var -> TermT var -> TypeCheck var Bool-checkEntails l r = do  -- FIXME: add action-  l' <- nfTope l-  r' <- nfTope r-  [l'] `entailM` r'--contextEntailedBy :: Eq var => TermT var -> TypeCheck var ()-contextEntailedBy tope = do-  ctxTopes <- asks localTopes-  performing (ActionContextEntailedBy ctxTopes tope) $ do-    contextTopes <- asks localTopesNF-    restrictionTope <- nfTope tope-    let contextTopesRHS = foldr topeOrT topeBottomT contextTopes-    [restrictionTope] `entailM` contextTopesRHS >>= \case-      False -> issueTypeError $ TypeErrorTopeNotSatisfied [restrictionTope] contextTopesRHS-      True -> return ()--contextEntails :: Eq var => TermT var -> TypeCheck var ()-contextEntails tope = do-  ctxTopes <- asks localTopes-  performing (ActionContextEntails ctxTopes tope) $ do-    topeIsEntailed <- checkTope tope-    topes' <- asks localTopesNF-    unless topeIsEntailed $-      issueTypeError $ TypeErrorTopeNotSatisfied topes' tope--topesEquiv :: Eq var => TermT var -> TermT var -> TypeCheck var Bool-topesEquiv expected actual = performing (ActionUnifyTerms expected actual) $ do-  expected' <- nfT expected-  actual' <- nfT actual-  (&&)-    <$> [expected'] `entailM` actual'-    <*> [actual'] `entailM` expected'--contextEquiv :: Eq var => [TermT var] -> TypeCheck var ()-contextEquiv topes = do-  ctxTopes <- asks localTopes-  performing (ActionContextEquiv ctxTopes topes) $ do-    contextTopes <- asks localTopesNF-    recTopes <- mapM nfTope topes-    let contextTopesRHS = foldr topeOrT topeBottomT contextTopes-        recTopesRHS     = foldr topeOrT topeBottomT recTopes-    contextTopes `entailM` recTopesRHS >>= \case-      False -> issueTypeError $ TypeErrorTopeNotSatisfied contextTopes recTopesRHS-      True -> return ()-    recTopes `entailM` contextTopesRHS >>= \case-      False -> issueTypeError $ TypeErrorTopeNotSatisfied recTopes contextTopesRHS-      True -> return ()--switchVariance :: TypeCheck var a -> TypeCheck var a-switchVariance = local $ \Context{..} -> Context-  { covariance = switch covariance, .. }-    where-      switch Covariant     = Contravariant-      switch Contravariant = Covariant-      switch Invariant     = Invariant--setVariance :: Covariance -> TypeCheck var a -> TypeCheck var a-setVariance variance = local $ \Context{..} -> Context-  { covariance = variance, .. }--enterScopeContext :: Maybe VarIdent -> TModality -> TermT var -> Maybe (TermT var) -> Context var -> Context (Inc var)-enterScopeContext orig md ty val context =-  addVarInCurrentScope Z VarInfo-    { varType   = S <$> ty-    , varValue  = fmap (S <$>) val-    , varOrig   = orig-    , varModality = md-    , modAccum = Id-    , varIsAssumption = False-    , varIsTopLevel = False-    , varDeclaredAssumptions = []-    , varLocation = location context-    }-    (S <$> context)--enterScope :: Maybe VarIdent -> TermT var -> TypeCheck (Inc var) b -> TypeCheck var b-enterScope orig ty action = do-  newContext <- asks (enterScopeContext orig Id ty Nothing)-  lift $ withExceptT (ScopedTypeError orig) $-    runReaderT action newContext--enterScopeWithBind :: Maybe VarIdent -> TModality -> TermT var -> TermT var -> TypeCheck (Inc var) b -> TypeCheck var b-enterScopeWithBind orig md ty val action = do-  newContext <- asks (enterScopeContext orig md ty (Just val))-  lift $ withExceptT (ScopedTypeError orig) $-    runReaderT action newContext--enterModality :: TModality -> TypeCheck var b -> TypeCheck var b-enterModality md action = do-  newContext <- asks (applyModality md)-  lift $ runReaderT action newContext--performing :: Eq var => Action var -> TypeCheck var a -> TypeCheck var a-performing action tc = do-  ctx@Context{..} <- ask-  unless (length actionStack < 1000) $  -- FIXME: which depth is reasonable? factor out into a parameter-    issueTypeError $ TypeErrorOther "maximum depth reached"-  traceTypeCheck Debug (ppSomeAction (varOrigs ctx) (length actionStack) action) $-    local (const Context { actionStack = action : actionStack, .. }) $ tc--stripTypeRestrictions :: TermT var -> TermT var-stripTypeRestrictions (TypeRestrictedT _ty ty _restriction) = stripTypeRestrictions ty-stripTypeRestrictions t = t---- | Perform at most one \(\eta\)-expansion at the top-level to assist unification.-etaMatch :: Eq var => Maybe (TermT var) -> TermT var -> TermT var -> TypeCheck var (TermT var, TermT var)--- FIXME: double check the next 3 rules-etaMatch _mterm expected@TypeRestrictedT{} actual@TypeRestrictedT{} = pure (expected, actual)-etaMatch  mterm expected (TypeRestrictedT _ty ty _rs) = etaMatch mterm expected ty-etaMatch (Just term) expected@TypeRestrictedT{} actual =-  etaMatch (Just term) expected (typeRestrictedT actual [(topeTopT, term)])--- -------------------------------------etaMatch _mterm expected@LambdaT{} actual@LambdaT{} = pure (expected, actual)-etaMatch _mterm expected@PairT{}   actual@PairT{}   = pure (expected, actual)-etaMatch _mterm expected@LambdaT{} actual = do-  actual' <- etaExpand actual-  pure (expected, actual')-etaMatch _mterm expected actual@LambdaT{} = do-  expected' <- etaExpand expected-  pure (expected', actual)-etaMatch _mterm expected@PairT{} actual = do-  actual' <- etaExpand actual-  pure (expected, actual')-etaMatch _mterm expected actual@PairT{} = do-  expected' <- etaExpand expected-  pure (expected', actual)-etaMatch _mterm expected actual = pure (expected, actual)--etaExpand :: Eq var => TermT var -> TypeCheck var (TermT var)-etaExpand term@LambdaT{} = pure term-etaExpand term@PairT{} = pure term-etaExpand term = do-  ty <- typeOf term-  case stripTypeRestrictions ty of-    TypeFunT _ty orig param mtope ret -> pure $-      lambdaT ty orig (Just (param, mtope))-        (appT ret (S <$> term) (Pure Z))--    TypeSigmaT _ty _orig a b -> pure $-      pairT ty-        (firstT a term)-        (secondT (substituteT (firstT a term) b) term)--    CubeProductT _ty a b -> pure $-      pairT ty-        (firstT a term)-        (secondT b term)--    _ -> pure term--inCubeLayer :: Eq var => TermT var -> TypeCheck var Bool-inCubeLayer = \case-  RecBottomT{}    -> pure False-  UniverseT{}     -> pure False--  UniverseCubeT{} -> pure True-  CubeProductT{}  -> pure True-  CubeUnitT{}     -> pure True-  CubeUnitStarT{} -> pure True-  Cube2T{}        -> pure True-  Cube2_0T{}      -> pure True-  Cube2_1T{}      -> pure True--  t               -> typeOf t >>= inCubeLayer--inTopeLayer :: Eq var => TermT var -> TypeCheck var Bool-inTopeLayer = \case-  RecBottomT{} -> pure False-  UniverseT{} -> pure False--  UniverseCubeT{} -> pure True-  UniverseTopeT{} -> pure True--  CubeProductT{} -> pure True-  CubeUnitT{} -> pure True-  CubeUnitStarT{} -> pure True-  Cube2T{} -> pure True-  Cube2_0T{} -> pure True-  Cube2_1T{} -> pure True--  TopeTopT{} -> pure True-  TopeBottomT{} -> pure True-  TopeAndT{} -> pure True-  TopeOrT{} -> pure True-  TopeEQT{} -> pure True-  TopeLEQT{} -> pure True--  TypeFunT _ty orig param _mtope ret -> do-    enterScope orig param $ inTopeLayer ret--  t -> typeOfUncomputed t >>= inTopeLayer--tryRestriction :: Eq var => TermT var -> TypeCheck var (Maybe (TermT var))-tryRestriction = \case-  TypeRestrictedT _ _ rs -> do-    let go [] = pure Nothing-        go ((tope, term') : rs') = do-          checkTope tope >>= \case-            True  -> pure (Just term')-            False -> go rs'-    go rs-  _ -> pure Nothing---- | Compute a typed term to its WHNF.------ >>> unsafeTypeCheck' $ whnfT "(\\ (x : Unit) -> x) unit"--- unit : Unit-whnfT :: Eq var => TermT var -> TypeCheck var (TermT var)-whnfT tt = performing (ActionWHNF tt) $ case tt of-  -- use cached result if it exists-  Free (AnnF info _)-    | Just tt' <- infoWHNF info -> pure tt'--  -- universe constants-  UniverseT{} -> pure tt-  UniverseCubeT{} -> pure tt-  UniverseTopeT{} -> pure tt--  -- cube layer (except vars, pairs, and applications)-  CubeProductT{} -> nfTope tt-  CubeUnitT{} -> pure tt-  CubeUnitStarT{} -> pure tt-  Cube2T{} -> pure tt-  Cube2_0T{} -> pure tt-  Cube2_1T{} -> pure tt-  CubeFlipT{} -> nfTope tt-  CubeUnflipT{} -> nfTope tt--  -- tope layer (except vars, pairs of points, and applications)-  TopeTopT{} -> pure tt-  TopeBottomT{} -> pure tt-  TopeAndT{} -> nfTope tt-  TopeOrT{} -> nfTope tt-  TopeEQT{} -> nfTope tt-  TopeLEQT{} -> nfTope tt-  TopeInvT{} -> nfTope tt-  TopeUninvT{} -> nfTope tt--  -- type layer terms that should not be evaluated further-  LambdaT{} -> pure tt-  PairT{} -> pure tt-  ReflT{} -> pure tt-  TypeFunT{} -> pure tt-  TypeSigmaT{} -> pure tt-  TypeIdT{} -> pure tt-  RecBottomT{} -> pure tt-  TypeUnitT{} -> pure tt-  UnitT{} -> pure tt--  -- type ascriptions are ignored, since we already have a typechecked term-  TypeAscT _ty term _ty' -> whnfT term--  -- check if we have cube or a tope term (if so, compute NF)-  _ -> typeOf tt >>= \case-    UniverseCubeT{} -> nfTope tt-    UniverseTopeT{} -> nfTope tt--    -- CubeUnitT{} -> pure cubeUnitStarT -- compute an expression of 1 cube to its only point-    TypeUnitT{} -> pure unitT -- compute an expression of Unit type to unit-    -- FIXME: next line is ad hoc, should be improved!-    TypeRestrictedT _info TypeUnitT{} _rs -> pure unitT -- compute an expression of Unit type to unit--    -- check if we have cube point term (if so, compute NF)-    typeOf_tt -> typeOf typeOf_tt >>= \case-      UniverseCubeT{} -> nfTope tt--      -- now we are in the type layer-      _ -> fmap termIsWHNF $ do-        -- check if we are in the empty context-        inBottom <- asks localTopesEntailBottom-        if inBottom-           then pure recBottomT -- if so, reduce to recBOT-           else tryRestriction typeOf_tt >>= \case-            Just tt' -> whnfT tt'-            Nothing -> case tt of-              t@(Pure var) ->-                valueOfVar var >>= \case-                  Nothing   -> pure t-                  Just term -> whnfT term--              AppT ty f x ->-                whnfT f >>= \case-                  LambdaT _ty _orig _arg body ->-                    whnfT (substituteT x body)-                  f' -> typeOf f' >>= \case-                    TypeFunT _ty _orig _param (Just tope) UniverseTopeT{} -> do-                      topeAndT-                        <$> (AppT ty <$> nfT f' <*> nfT x)-                        <*> nfT (substituteT x tope)-                    -- FIXME: this seems to be a hack, and will not work in all situations!-                    -- FIXME: need to check performance of this code thoroughly-                    -- FIXME: for now, it seems to add ~2x slowdown-                    TypeFunT info _orig _param _mtope ret@TypeRestrictedT{}-                      | TypeRestrictedT{} <- infoType info -> pure (AppT ty f' x)-                      | otherwise -> do-                          let ret' = substituteT x ret-                          tryRestriction ret' >>= \case -- FIXME: too many unnecessary checks?-                            Nothing  -> pure (AppT ty { infoType = ret' } f' x)-                            Just tt' -> whnfT tt'-                    _ -> pure (AppT ty f' x)-              -              LetT _ty _orig _mparam val body ->-                whnfT (substituteT val body)-              LetModT _ty _orig app inn _mparam val body -> do-                val' <- whnfT val >>= \case-                  ModAppT _ md t | md == inn -> whnfT t-                  b' -> do-                    bty <- typeOf b' >>= \case-                      TypeModalT _ _ t -> pure t-                      _ -> panicImpossible "not modal in letmod"-                    pure (modExtractT bty app inn b')-                whnfT (substituteT val' body)-              FirstT ty t ->-                whnfT t >>= \case-                  PairT _ l _r -> whnfT l-                  t'           -> pure (FirstT ty t')--              SecondT ty t ->-                whnfT t >>= \case-                  PairT _ _l r -> whnfT r-                  t'           -> pure (SecondT ty t')-              TypeModalT ty md b -> do-                b' <- whnfT b-                pure (TypeModalT ty md b')-              ModAppT ty md b -> do-                whnfT b >>= \case-                  ModExtractT _ _ inn t | inn == md -> whnfT t-                  b' -> pure $ ModAppT ty md b'-              ModExtractT ty app inn b -> do-                whnfT b >>= \case-                  ModAppT _ md t | inn == md -> whnfT t-                  b' -> pure (ModExtractT ty app inn b')-              IdJT ty tA a tC d x p ->-                whnfT p >>= \case-                  ReflT{} -> whnfT d-                  p'      -> pure (IdJT ty tA a tC d x p')--              RecOrT _ty rs -> do-                let go [] = pure Nothing-                    go ((tope, tt') : rs') = do-                      checkTope tope >>= \case-                        True  -> pure (Just tt')-                        False -> go rs'-                go rs >>= \case-                  Just tt' -> whnfT tt'-                  Nothing-                    | [tt'] <- nubTermT (map snd rs) -> whnfT tt'-                    | otherwise -> pure tt--              TypeRestrictedT ty type_ rs -> do-                rs' <- traverse (\(tope, term) -> (,) <$> nfT tope <*> pure term) rs-                case filter ((/= topeBottomT) . fst) rs' of-                  []   -> whnfT type_  -- get rid of restrictions at BOT-                  rs'' -> TypeRestrictedT ty <$> whnfT type_ <*> pure rs''--nfTope :: Eq var => TermT var -> TypeCheck var (TermT var)-nfTope tt = performing (ActionNF tt) $ fmap termIsNF $ case tt of-  Pure var ->-    valueOfVar var >>= \case-      Nothing   -> return tt-      Just term -> nfTope term--  -- see if normal form is already available-  Free (AnnF info _) | Just tt' <- infoNF info -> pure tt'--  -- universe constants-  UniverseT{} -> pure tt-  UniverseCubeT{} -> pure tt-  UniverseTopeT{} -> pure tt--  -- cube layer constants-  CubeUnitT{} -> pure tt-  CubeUnitStarT{} -> pure tt-  Cube2T{} -> pure tt-  Cube2_0T{} -> pure tt-  Cube2_1T{} -> pure tt--  -- type layer constants-  TypeUnitT{} -> pure tt-  UnitT{} -> pure tt--  -- cube layer with computation-  CubeProductT _ty l r -> cubeProductT <$> nfTope l <*> nfTope r--  CubeFlipT _ t ->         -    nfTope t >>= \case-      CubeUnflipT _ t' -> pure t'     -      Cube2_0T{}       -> pure (modAppT (typeModalT cubeT Op cube2T) Op cube2_1T)  -      Cube2_1T{}       -> pure (modAppT (typeModalT cubeT Op cube2T) Op cube2_0T) -      t'               -> pure (cubeFlipT t')--  CubeUnflipT ty t ->-    nfTope t >>= \case-      CubeFlipT _ t'          -> pure t'  -      ModAppT _ Op Cube2_0T{} -> pure cube2_1T -      ModAppT _ Op Cube2_1T{} -> pure cube2_0T -      t'                      -> pure (CubeUnflipT ty t')--  -- tope layer constants-  TopeTopT{} -> pure tt-  TopeBottomT{} -> pure tt--  -- tope layer with computation-  TopeAndT ty l r ->-    nfTope l >>= \case-      TopeBottomT{} -> pure topeBottomT-      l' -> nfTope r >>= \case-        TopeBottomT{} -> pure topeBottomT-        r'            -> pure (TopeAndT ty l' r')--  TopeOrT  ty l r -> do-    l' <- nfTope l-    r' <- nfTope r-    case (l', r') of-      (TopeBottomT{}, _) -> pure r'-      (_, TopeBottomT{}) -> pure l'-      _                  -> pure (TopeOrT ty l' r')--  TopeEQT  ty l r -> TopeEQT  ty <$> nfTope l <*> nfTope r-  TopeLEQT ty l r -> TopeLEQT ty <$> nfTope l <*> nfTope r--  TopeInvT ty t ->-    -- Match And/Or on the *unnormalized* input: nfTope of a shape-restricted-    -- App produces a TopeAnd via shape-side-condition propagation, and-    -- distributing inv over that synthetic conjunction loops forever because-    -- the recursive topeInvT renormalizes the same App back into a TopeAnd.-    case t of-      TopeAndT _ phi psi -> nfTope $-        modAppT (typeModalT universeT Op topeT) Op-          (topeAndT-            (modExtractT topeT Id Op (topeInvT phi))-            (modExtractT topeT Id Op (topeInvT psi)))-      TopeOrT _ phi psi -> nfTope $-        modAppT (typeModalT universeT Op topeT) Op-          (topeOrT-            (modExtractT topeT Id Op (topeInvT phi))-            (modExtractT topeT Id Op (topeInvT psi)))-      _ ->-        nfTope t >>= \case-          TopeUninvT _ phi -> pure phi-          TopeLEQT _ x y -> nfTope $-            modAppT (typeModalT universeT Op topeT) Op-              (topeLEQT-                (modExtractT topeT Id Op (cubeFlipT y))-                (modExtractT topeT Id Op (cubeFlipT x)))-          TopeEQT _ x y -> nfTope $-            modAppT (typeModalT universeT Op topeT) Op-              (topeEQT-                (modExtractT topeT Id Op (cubeFlipT y))-                (modExtractT topeT Id Op (cubeFlipT x)))-          t' -> pure (TopeInvT ty t')--  TopeUninvT ty t ->-    nfTope t >>= \case-      TopeInvT _ phi -> pure phi-      ModAppT _ Op inner -> case inner of-        TopeLEQT _ x y ->-          nfTope $-              (topeLEQT-                (cubeUnflipT (modAppT (typeModalT cubeT Op cube2T) Op y))-                (cubeUnflipT (modAppT (typeModalT cubeT Op cube2T) Op x)))--        TopeEQT _ x y ->-          nfTope $-              (topeEQT-                (cubeUnflipT (modAppT (typeModalT cubeT Op cube2T) Op y))-                (cubeUnflipT (modAppT (typeModalT cubeT Op cube2T) Op x)))--        TopeAndT _ phi psi ->-          nfTope $-              (topeAndT-                (topeUninvT phi)-                (topeUninvT psi))--        TopeOrT _ phi psi ->-          nfTope $-              (topeOrT-                (topeUninvT phi)-                (topeUninvT psi))--        inner' ->-          pure $-            TopeUninvT ty-              (modAppT (typeModalT universeT Op topeT) Op inner')--      t' ->-        pure (TopeUninvT ty t')--  -- type ascriptions are ignored, since we already have a typechecked term-  TypeAscT _ty term _ty' -> nfTope term--  PairT ty l r -> PairT ty <$> nfTope l <*> nfTope r--  AppT ty f x ->-    nfTope f >>= \case-      LambdaT _ty _orig _arg body ->-        nfTope (substituteT x body)-      f' -> typeOfUncomputed f' >>= \case-        TypeFunT _ty _orig _param (Just tope) UniverseTopeT{} -> do-          topeAndT-            <$> (AppT ty f' <$> nfTope x)-            <*> nfTope (substituteT x tope)-        _ -> AppT ty f' <$> nfTope x--  FirstT ty t ->-    nfTope t >>= \case-      PairT _ty x _y -> pure x-      t'             -> pure (FirstT ty t')--  SecondT ty t ->-    nfTope t >>= \case-      PairT _ty _x y -> pure y-      t'             -> pure (SecondT ty t')--  LambdaT ty orig _mparam body-    | TypeFunT _ty _origF param mtope _ret <- infoType ty ->-        LambdaT ty orig (Just (param, mtope)) <$> enterScope orig param (nfTope body)-  LambdaT{} -> panicImpossible "lambda with a non-function type in the tope layer"-  ModAppT ty md b -> -    nfTope b >>= \case -      ModExtractT _ _ inn t | inn == md -> pure t-      b' -> pure $ ModAppT ty md b'  -  ModExtractT ty app inn b ->-    nfTope b >>= \case-      ModAppT _ md t | inn == md -> pure t-      b' -> pure $ ModExtractT ty app inn b'-  LetModT _ty _orig app inn _mparam val body -> do-    val' <- nfTope val >>= \case-      ModAppT _ md t | md == inn -> return t-      b' -> do-        ty <- typeOf b' >>= \case-          TypeModalT _ _ t -> pure t-          _ -> panicImpossible "not modal in letmod"-        pure (modExtractT ty app inn b')-    nfTope (substituteT val' body)--  TypeModalT ty md inner -> TypeModalT ty md <$> nfTope inner-  LetT _ty _orig _mparam val body -> nfTope (substituteT val body)-  TypeFunT{} -> panicImpossible "exposed function type in the tope layer"-  TypeSigmaT{} -> panicImpossible "dependent sum type in the tope layer"-  TypeIdT{} -> panicImpossible "identity type in the tope layer"-  ReflT{} -> panicImpossible "refl in the tope layer"-  IdJT{} -> panicImpossible "idJ eliminator in the tope layer"-  TypeRestrictedT{} -> panicImpossible "extension types in the tope layer"--  RecOrT{} -> panicImpossible "recOR in the tope layer"-  RecBottomT{} -> panicImpossible "recBOT in the tope layer"---- | Compute a typed term to its NF.------ >>> unsafeTypeCheck' $ nfT "(\\ (x : Unit) -> x) unit"--- unit : Unit-nfT :: Eq var => TermT var -> TypeCheck var (TermT var)-nfT tt = performing (ActionNF tt) $ case tt of-  -- universe constants-  UniverseT{} -> pure tt-  UniverseCubeT{} -> pure tt-  UniverseTopeT{} -> pure tt--  -- cube layer constants-  CubeUnitT{} -> pure tt-  CubeUnitStarT{} -> pure tt-  Cube2T{} -> pure tt-  Cube2_0T{} -> pure tt-  Cube2_1T{} -> pure tt--  -- cube layer with computation-  CubeProductT{} -> nfTope tt-  CubeFlipT{} -> nfTope tt-  CubeUnflipT{} -> nfTope tt--  -- tope layer constants-  TopeTopT{} -> pure tt-  TopeBottomT{} -> pure tt--  -- tope layer with computation-  TopeAndT{} -> nfTope tt-  TopeOrT{} -> nfTope tt-  TopeEQT{} -> nfTope tt-  TopeLEQT{} -> nfTope tt-  TopeInvT{} -> nfTope tt-  TopeUninvT{} -> nfTope tt--  -- type layer constants-  ReflT ty _x -> pure (ReflT ty Nothing)-  RecBottomT{} -> pure tt-  TypeUnitT{} -> pure tt-  UnitT{} -> pure tt--  -- type ascriptions are ignored, since we already have a typechecked term-  TypeAscT _ty term _ty' -> nfT term--  -- now we are in the type layer-  _ -> do-    -- check if we are in the empty context-    inBottom <- asks localTopesEntailBottom-    if inBottom-       then pure recBottomT -- if so, reduce to recBOT-       else typeOf tt >>= tryRestriction >>= \case-        Just tt' -> nfT tt'-        Nothing -> case tt of-          t@(Pure var) ->-            valueOfVar var >>= \case-              Nothing   -> pure t-              Just term -> nfT term--          TypeFunT ty orig param mtope ret -> do-            param' <- nfT param-            enterScope orig param' $ do-              mtope' <- traverse nfT mtope-              maybe id localTope mtope' $-                TypeFunT ty orig param' mtope' <$> nfT ret-          AppT ty f x ->-            whnfT f >>= \case-              LambdaT _ty _orig _arg body ->-                nfT (substituteT x body)-              f' -> typeOf f' >>= \case-                TypeFunT _ty _orig _param (Just tope) UniverseTopeT{} -> do-                  topeAndT-                    <$> (AppT ty <$> nfT f' <*> nfT x)-                    <*> nfT (substituteT x tope)-                _ -> AppT ty <$> nfT f' <*> nfT x-          LetT _ty _orig _mparam val body ->-            nfT (substituteT val body)-          LetModT _ty _orig app inn _mparam val body -> do-            val' <- whnfT val >>= \case-              ModAppT _ md t | md == inn -> nfT t-              b' -> do-                bty <- typeOf b' >>= \case-                  TypeModalT _ _ t -> pure t-                  _ -> panicImpossible "not modal in letmod"-                pure (modExtractT bty app inn b')-            nfT (substituteT val' body)-          LambdaT ty orig _mparam body -> do-            case stripTypeRestrictions (infoType ty) of-              TypeFunT _ty _orig param mtope _ret -> do-                param' <- nfT param-                enterScope orig param' $ do-                  mtope' <- traverse nfT mtope-                  maybe id localTope mtope' $-                    LambdaT ty orig (Just (param', mtope')) <$> nfT body-              _ -> panicImpossible "lambda with a non-function type"---          TypeSigmaT ty orig a b -> do-            a' <- nfT a-            enterScope orig a' $ do-              TypeSigmaT ty orig a' <$> nfT b-          PairT ty l r -> PairT ty <$> nfT l <*> nfT r-          FirstT ty t ->-            whnfT t >>= \case-              PairT _ l _r -> nfT l-              t'           -> FirstT ty <$> nfT t'-          SecondT ty t ->-            whnfT t >>= \case-              PairT _ _l r -> nfT r-              t'           -> SecondT ty <$> nfT t'--          TypeIdT ty x _tA y -> TypeIdT ty <$> nfT x <*> pure Nothing <*> nfT y-          IdJT ty tA a tC d x p ->-            whnfT p >>= \case-              ReflT{} -> nfT d-              p' -> IdJT ty <$> nfT tA <*> nfT a <*> nfT tC <*> nfT d <*> nfT x <*> nfT p'--          RecOrT _ty rs -> do-            let go [] = pure Nothing-                go ((tope, tt') : rs') = do-                  checkTope tope >>= \case-                    True  -> pure (Just tt')-                    False -> go rs'-            go rs >>= \case-              Just tt' -> nfT tt'-              Nothing-                | [tt'] <- nubTermT (map snd rs) -> nfT tt'-                | otherwise -> pure tt-          TypeModalT ty md b -> do-            b' <- nfT b-            pure (TypeModalT ty md b')-          ModAppT ty md b -> do-            whnfT b >>= \case-              ModExtractT _ _ inn t | inn == md -> nfT t-              b' -> ModAppT ty md <$> nfT b'-          ModExtractT ty app inn b -> do-            whnfT b >>= \case-              ModAppT _ md t | inn == md -> nfT t-              b' -> ModExtractT ty app inn <$> nfT b'-          TypeRestrictedT ty type_ rs -> do-            rs' <- forM rs $ \(tope, term) -> do-              nfTope tope >>= \case-                TopeBottomT{} -> pure Nothing-                tope' -> do-                  term' <- localTope tope' $-                    nfT term-                  return (Just (tope', term'))-            case catMaybes rs' of-              []   -> nfT type_-              rs'' -> TypeRestrictedT ty <$> nfT type_ <*> pure rs''--checkDefinedVar :: VarIdent -> TypeCheck VarIdent ()-checkDefinedVar x = asks (lookup x . varInfos) >>= \case-  Nothing  -> issueTypeError $ TypeErrorUndefined x-  Just _ty -> return ()--valueOfVar :: Eq var => var -> TypeCheck var (Maybe (TermT var))-valueOfVar x = asks (lookup x . varValues) >>= \case-  Nothing -> issueTypeError $ TypeErrorUndefined x-  Just ty -> return ty--typeOfVar :: Eq var => var -> TypeCheck var (TermT var)-typeOfVar x = asks (lookup x . varTypes) >>= \case-  Nothing -> issueTypeError $ TypeErrorUndefined x-  Just ty -> return ty--modalityOfVar :: Eq var => var -> TypeCheck var (TModality)-modalityOfVar x = asks (lookup x . varModalities) >>= \case-  Nothing -> issueTypeError $ TypeErrorUndefined x-  Just m -> return m--locksOfVar :: Eq var => var -> TypeCheck var (TModality)-locksOfVar x = asks (lookup x . varLocks) >>= \case-  Nothing -> issueTypeError $ TypeErrorUndefined x-  Just m -> return m--isTopLevelVar :: Eq var => var -> TypeCheck var Bool-isTopLevelVar x = asks (lookup x . varTopLevels) >>= \case-  Nothing -> issueTypeError $ TypeErrorUndefined x-  Just b -> return b--typeOfUncomputed :: Eq var => TermT var -> TypeCheck var (TermT var)-typeOfUncomputed = \case-  Pure x                     -> typeOfVar x-  Free (AnnF TypeInfo{..} _) -> pure infoType--typeOf :: Eq var => TermT var -> TypeCheck var (TermT var)-typeOf t = typeOfUncomputed t >>= whnfT--unifyTopes :: Eq var => TermT var -> TermT var -> TypeCheck var ()-unifyTopes l r = do-  equiv <- (&&)-    <$> [l] `entailM` r-    <*> [r] `entailM` l-  unless equiv $-    issueTypeError (TypeErrorTopesNotEquivalent l r)--inAllSubContexts :: TypeCheck var () -> TypeCheck var () -> TypeCheck var ()-inAllSubContexts handleSingle tc = do-  topeSubContexts <- asks localTopesNFUnion-  case topeSubContexts of-    [] -> panicImpossible "empty set of alternative contexts"-    [_] -> handleSingle-    _:_:_ -> do-      forM_ topeSubContexts $ \topes' -> do-        local (\Context{..} -> Context-            { localTopes = topes'-            , localTopesNF = topes'-            , localTopesNFUnion = [topes']-            , .. }) $-          tc--unify :: Eq var => Maybe (TermT var) -> TermT var -> TermT var -> TypeCheck var ()-unify mterm expected actual = performUnification `catchError` \typeError -> do-  inAllSubContexts (throwError typeError) performUnification-  where-    performUnification = unifyInCurrentContext mterm expected actual--unifyViaDecompose :: Eq var => TermT var -> TermT var -> TypeCheck var ()-unifyViaDecompose expected actual | expected == actual = return ()-unifyViaDecompose (AppT _ f x) (AppT _ g y) = do-  unify Nothing f g-  setVariance Invariant $ unify Nothing x y-unifyViaDecompose _ _ = issueTypeError (TypeErrorOther "cannot decompose")--unifyInCurrentContext :: Eq var => Maybe (TermT var) -> TermT var -> TermT var -> TypeCheck var ()-unifyInCurrentContext mterm expected actual = performing action $-  unifyViaDecompose expected actual `catchError` \_ -> do      -- NOTE: this gives a small, but noticeable speedup-    expectedVal <- whnfT expected-    actualVal <- whnfT actual-    mea <- asks covariance >>= \case-      Covariant     -> Just <$> etaMatch mterm expectedVal actualVal-      Contravariant -> Just . swap <$> etaMatch mterm actualVal expectedVal-      Invariant     -> traceTypeCheck Debug "invariant" $ do-        -- FIXME: inefficient-        traceTypeCheck Debug "invariant->covariant" $-          setVariance Covariant     $ unifyInCurrentContext mterm expectedVal actualVal-        traceTypeCheck Debug "invariant->contravariant" $-          setVariance Contravariant $ unifyInCurrentContext mterm expectedVal actualVal-        return Nothing-    case mea of-      Nothing -> return ()-      Just (expected', actual') ->-        unless (expected' == actual') $ do  -- NOTE: this gives a small, but noticeable speedup-          case actual' of-            RecBottomT{} -> return ()-            RecOrT _ty rs' ->-              case expected' of-                RecOrT _ty rs -> sequence_ $-                  checkCoherence <$> rs <*> rs'-                _ -> do-                  forM_ rs' $ \(tope, term) ->-                    localTope tope $-                      unifyTerms expected' term-            _ -> typeOf expected' >>= typeOf >>= \case-              UniverseCubeT{} -> contextEntails (topeEQT expected' actual')-              _ -> do-                let def = unless (expected' == actual') err-                    err =-                      case mterm of-                        Nothing   -> issueTypeError (TypeErrorUnifyTerms expected' actual')-                        Just term -> issueTypeError (TypeErrorUnify term expected' actual')-                    errS = do-                      let expectedS = S <$> expected'-                          actualS = S <$> actual'-                      case mterm of-                        Nothing   -> issueTypeError (TypeErrorUnifyTerms expectedS actualS)-                        Just term -> issueTypeError (TypeErrorUnify (S <$> term) expectedS actualS)-                case expected' of-                  Pure{} -> def--                  UniverseT{} -> def-                  UniverseCubeT{} -> def-                  UniverseTopeT{} -> def--                  TypeUnitT{} -> def-                  UnitT{} -> return ()  -- Unit always unifies!--                  CubeUnitT{} -> def-                  CubeUnitStarT{} -> def-                  Cube2T{} -> def-                  Cube2_0T{} -> def-                  Cube2_1T{} -> def-                  CubeProductT _ l r ->-                    case actual' of-                      CubeProductT _ l' r' -> do-                        unifyTerms l l'-                        unifyTerms r r'-                      _ -> err--                  PairT _ty l r ->-                    case actual' of-                      PairT _ty' l' r' -> do-                        unifyTerms l l'-                        unifyTerms r r'--                      -- one part of eta-expansion for pairs-                      -- FIXME: add symmetric version!-                      _ -> err--                  FirstT _ty t ->-                    case actual' of-                      FirstT _ty' t' -> unifyTerms t t'-                      _              -> err--                  SecondT _ty t ->-                    case actual' of-                      SecondT _ty' t' -> unifyTerms t t'-                      _               -> err--                  TopeTopT{}    -> unifyTopes expected' actual'-                  TopeBottomT{} -> unifyTopes expected' actual'-                  TopeEQT{}     -> unifyTopes expected' actual'-                  TopeLEQT{}    -> unifyTopes expected' actual'-                  TopeAndT{}    -> unifyTopes expected' actual'-                  TopeOrT{}     -> unifyTopes expected' actual'--                  RecBottomT{} -> return () -- unifies with anything-                  RecOrT _ty rs ->-                    case actual' of-                      -- -----------------------------------------------                      -- IMPORTANT: this pattern matching is redundant,-                      -- but it is not obvious, so-                      -- take care when refactoring!-                      -- -----------------------------------------------      --                RecOrT _ty rs' -> sequence_ $-      --                  checkCoherence <$> rs <*> rs'-                      -- -----------------------------------------------                      _ -> do-                        forM_ rs $ \(tope, term) ->-                          localTope tope $-                            unifyTerms term actual'--                  TypeFunT _ty _orig cube mtope ret ->-                    case actual' of-                      TypeFunT _ty' orig' cube' mtope' ret' -> do-                        switchVariance $  -- unifying in the negative position!-                          unifyTerms cube cube' -- FIXME: unifyCubes-                        enterScope orig' cube $ do-                          case ret' of-                            UniverseTopeT{} -> do-                              -- This is the case for tope families (shapes)-                              ---                              -- (Λ → TOPE) <: (Δ → TOPE)-                              -- since if φ : Λ → TOPE-                              -- then φ ⊢ Δ-                              ---                              -- we DO NOT take tope context Φ into account!-                              expectedTopeNF <- fromMaybe topeTopT <$> traverse nfT mtope-                              actualTopeNF   <- fromMaybe topeTopT <$> traverse nfT mtope'-                              actualEntailsExpected <- [actualTopeNF] `entailM` expectedTopeNF-                              unless actualEntailsExpected $-                                issueTypeError (TypeErrorTopeNotSatisfied [actualTopeNF] expectedTopeNF)-                            _ -> do-                              -- this is the case for Π-types and extension types-                              ---                              -- Ξ | Φ | Γ   ⊢   {t : I | φ} → A t   <:   {s : J | ψ} → B s-                              -- when-                              -- Ξ | Φ, ψ ⊢ φ-                              expectedTopeNF <- fromMaybe topeTopT <$> traverse nfT mtope-                              actualTopeNF   <- fromMaybe topeTopT <$> traverse nfT mtope'-                              localTope expectedTopeNF $-                                contextEntails actualTopeNF-                          case mterm of-                            Nothing -> unifyTerms ret ret'-                            Just term -> unifyTypes (appT ret' (S <$> term) (Pure Z)) ret ret'-                      _ -> err--                  TypeSigmaT _ty _orig a b ->-                    case actual' of-                      TypeSigmaT _ty' orig' a' b' -> do-                        unify Nothing a a'-                        enterScope orig' a' $ unify Nothing b b'-                      _ -> err--                  TypeIdT _ty x _tA y ->-                    case actual' of-                      TypeIdT _ty' x' _tA' y' -> do-                        -- unify Nothing tA tA' -- TODO: do we need this check?-                        unify Nothing x x'-                        unify Nothing y y'-                      _ -> err--                  AppT _ty f x ->-                    case actual' of-                      AppT _ty' f' x' -> do-                        unify Nothing f f'-                        setVariance Invariant $-                          unify Nothing x x'-                      _ -> err--                  LambdaT ty _orig _mparam body ->-                    case stripTypeRestrictions (infoType ty) of-                      TypeFunT _ty _origF param mtope _ret ->-                        case actual' of-                          LambdaT ty' orig' _mparam' body' -> do-                            case stripTypeRestrictions (infoType ty') of-                              TypeFunT _ty' _origF' param' mtope' _ret' -> do-                                unify Nothing param param' -- we (should) have already checked this in types!-                                enterScope orig' param $ do-                                  case (mtope, mtope') of-                                    (Just tope, Just tope') -> do-                                      unify Nothing tope tope' -- we (should) have already checked this in types!-                                      localTope tope $ unify Nothing body body'-                                    (Nothing, Nothing) -> do-                                      unify Nothing body body'-                                    _ -> errS-                              _ -> err-                          _ -> err-                      _ -> err-                  -                  LetT{} -> panicImpossible "let at the root of WHNF"-                  LetModT{} -> panicImpossible "let-mod at the root of WHNF"--                  ReflT ty _x | TypeIdT _ty x _tA y <- infoType ty ->-                    case actual' of-                      ReflT ty' _x' | TypeIdT _ty' x' _tA' y' <- infoType ty' -> do-                        -- unify Nothing tA tA' -- TODO: do we need this check?-                        unify Nothing x x'-                        unify Nothing y y'-                      _ -> err-                  ReflT{} -> panicImpossible "refl with a non-identity type!"--                  IdJT _ty a b c d e f ->-                    case actual' of-                      IdJT _ty' a' b' c' d' e' f' -> do-                        unify Nothing a a'-                        unify Nothing b b'-                        unify Nothing c c'-                        unify Nothing d d'-                        unify Nothing e e'-                        unify Nothing f f'-                      _ -> err--                  TypeAscT{} -> panicImpossible "type ascription at the root of WHNF"--                  TypeRestrictedT _ty ty rs ->-                    case actual' of-                      TypeRestrictedT _ty' ty' rs' -> do-                        unify mterm ty ty'-                        sequence_-                          [ localTope tope $ do-                              -- FIXME: can do less entails checks?-                              contextEntails (foldr topeOrT topeBottomT (map fst rs')) -- expected is less specified than actual-                              forM_ rs' $ \(tope', term') -> do-                                localTope tope' $-                                  unify Nothing term term'-                          | (tope, term) <- rs-                          ]-                      _ -> err    -- FIXME: need better unification for restrictions-                  TypeModalT _ty m ty ->-                    case actual' of-                      TypeModalT _ty' m' ty' -> do-                        when (m' /= m) $ err-                        unify Nothing ty ty'-                      _ -> err-                  ModAppT _ty m ty ->-                    case actual' of-                      ModAppT _ty' m' ty' -> do-                        when (m' /= m) $ err-                        unify Nothing ty ty'-                      _ -> err-                  ModExtractT _ty app inn te ->-                    case actual' of-                      ModExtractT _ty' app' inn' te' -> do-                        when (app' /= app) $ err-                        when (inn' /= inn) $ err-                        unify Nothing te te'-                      _ -> err-                  _ -> panicImpossible "unexpected term in UNIFY"---  where-    action = case mterm of-               Nothing   -> ActionUnifyTerms expected actual-               Just term -> ActionUnify term expected actual--unifyTypes :: Eq var => TermT var -> TermT var -> TermT var -> TypeCheck var ()-unifyTypes = unify . Just--unifyTerms :: Eq var => TermT var -> TermT var -> TypeCheck var ()-unifyTerms = unify Nothing--localTope :: Eq var => TermT var -> TypeCheck var a -> TypeCheck var a-localTope tope tc = do-  Context{..} <- ask-  tope' <- nfTope tope-  -- A small optimisation to help unify terms faster-  let refine = case tope' of-        TopeEQT _ x y | x == y -> const tc          -- no new information added!-        _ | tope' `elem` localTopes -> const tc     -- no new information added!-          | otherwise -> id-  refine $ do-    local (f tope' localTopesNF) tc-  where-    f tope' localTopes' Context{..} = Context-      { localTopes = tope : localTopes-      , localTopesNF = tope' : localTopesNF-      , localTopesNFUnion = map nubTermT-          [ new <> old-          | new <- simplifyLHSwithDisjunctions [tope']-          , old <- localTopesNFUnion ]-      , localTopesEntailBottom = entailsBottom-      , .. }-      where-        entailsBottom = (tope' : localTopes') `entail` topeBottomT--universeT :: TermT var-universeT = iterate f (panicImpossible msg) !! 30-  where-    msg = "going too high up the universe levels"-    f t = UniverseT TypeInfo-      { infoType = t-      , infoNF = Just universeT-      , infoWHNF = Just universeT }--cubeT :: TermT var-cubeT = UniverseCubeT TypeInfo-  { infoType = universeT-  , infoNF = Just cubeT-  , infoWHNF = Just cubeT }--topeT :: TermT var-topeT = UniverseTopeT TypeInfo-  { infoType = universeT-  , infoNF = Just topeT-  , infoWHNF = Just topeT }--topeEQT :: TermT var -> TermT var -> TermT var-topeEQT l r = TopeEQT info l r-  where-    info = TypeInfo-      { infoType = topeT-      , infoNF = Nothing-      , infoWHNF = Nothing-      }--topeLEQT :: TermT var -> TermT var -> TermT var-topeLEQT l r = TopeLEQT info l r-  where-    info = TypeInfo-      { infoType = topeT-      , infoNF = Nothing-      , infoWHNF = Nothing-      }--topeOrT :: TermT var -> TermT var -> TermT var-topeOrT l r = TopeOrT info l r-  where-    info = TypeInfo-      { infoType = topeT-      , infoNF = Nothing-      , infoWHNF = Nothing-      }--topeAndT :: TermT var -> TermT var -> TermT var-topeAndT l r = TopeAndT info l r-  where-    info = TypeInfo-      { infoType = topeT-      , infoNF = Nothing-      , infoWHNF = Nothing-      }--cubeProductT :: TermT var -> TermT var -> TermT var-cubeProductT l r = t-  where-    t = CubeProductT info l r-    info = TypeInfo-      { infoType  = cubeT-      , infoNF    = Nothing-      , infoWHNF  = Nothing-      }--cubeUnitT :: TermT var-cubeUnitT = CubeUnitT TypeInfo-  { infoType = cubeT-  , infoNF = Just cubeUnitT-  , infoWHNF = Just cubeUnitT }--cubeUnitStarT :: TermT var-cubeUnitStarT = CubeUnitStarT TypeInfo-  { infoType = cubeUnitT-  , infoNF = Just cubeUnitStarT-  , infoWHNF = Just cubeUnitStarT }--typeUnitT :: TermT var-typeUnitT = TypeUnitT TypeInfo-  { infoType = universeT-  , infoNF = Just typeUnitT-  , infoWHNF = Just typeUnitT }--unitT :: TermT var-unitT = UnitT TypeInfo-  { infoType = typeUnitT-  , infoNF = Just unitT-  , infoWHNF = Just unitT }--cube2T :: TermT var-cube2T = Cube2T TypeInfo-  { infoType = cubeT-  , infoNF = Just cube2T-  , infoWHNF = Just cube2T }--cube2_0T :: TermT var-cube2_0T = Cube2_0T TypeInfo-  { infoType = cube2T-  , infoNF = Just cube2_0T-  , infoWHNF = Just cube2_0T }--cube2_1T :: TermT var-cube2_1T = Cube2_1T TypeInfo-  { infoType = cube2T-  , infoNF = Just cube2_1T-  , infoWHNF = Just cube2_1T }--cubeFlipT :: TermT var -> TermT var-cubeFlipT t = CubeFlipT info t-  where-    info = TypeInfo-      { infoType = typeModalT cube2T Op cube2T-      , infoNF = Nothing-      , infoWHNF = Nothing-      }--cubeUnflipT :: TermT var -> TermT var-cubeUnflipT t = CubeUnflipT info t-  where-    info = TypeInfo-      { infoType = cube2T-      , infoNF = Nothing-      , infoWHNF = Nothing-      }--topeInvT :: TermT var -> TermT var-topeInvT t = TopeInvT info t-  where-    info = TypeInfo-      { infoType = typeModalT topeT Op topeT-      , infoNF = Nothing-      , infoWHNF = Nothing-      }--topeUninvT :: TermT var -> TermT var-topeUninvT t = TopeUninvT info t-  where-    info = TypeInfo-      { infoType = topeT-      , infoNF = Nothing-      , infoWHNF = Nothing-      }--topeTopT :: TermT var-topeTopT = TopeTopT TypeInfo-  { infoType = topeT-  , infoNF = Just topeTopT-  , infoWHNF = Just topeTopT }--topeBottomT :: TermT var-topeBottomT = TopeBottomT TypeInfo-  { infoType = topeT-  , infoNF = Just topeBottomT-  , infoWHNF = Just topeBottomT }--recBottomT :: TermT var-recBottomT = RecBottomT TypeInfo-  { infoType = recBottomT-  , infoNF = Just recBottomT-  , infoWHNF = Just recBottomT }--typeRestrictedT :: TermT var -> [(TermT var, TermT var)] -> TermT var-typeRestrictedT ty rs = t-  where-    t = TypeRestrictedT info ty rs-    info = TypeInfo-      { infoType  = universeT-      , infoNF    = Nothing-      , infoWHNF  = Nothing-      }--lambdaT-  :: TermT var-  -> Maybe VarIdent-  -> Maybe (TermT var, Maybe (Scope TermT var))-  -> Scope TermT var-  -> TermT var-lambdaT ty orig mparam body = t-  where-    t = LambdaT info orig mparam body-    info = TypeInfo-      { infoType  = ty-      , infoNF    = Nothing-      , infoWHNF  = Just t-      }---letT :: TermT var -> Maybe VarIdent -> Maybe (TermT var) -> TermT var -> Scope TermT var -> TermT var-letT ty orig mparam val body = t-  where-    t = LetT info orig mparam val body-    info = TypeInfo-      { infoType = ty-      , infoNF = Nothing-      , infoWHNF = Nothing-      }--letModT :: TermT var -> Maybe VarIdent -> TModality -> TModality -> Maybe (TermT var) -> TermT var -> Scope TermT var -> TermT var-letModT ty orig app inn mparam val body = t-  where-    t = LetModT info orig app inn mparam val body-    info = TypeInfo-      { infoType = ty-      , infoNF = Nothing-      , infoWHNF = Nothing-      }--appT :: TermT var -> TermT var -> TermT var -> TermT var-appT ty f x = t-  where-    t = AppT info f x-    info = TypeInfo-      { infoType  = ty-      , infoNF    = Nothing-      , infoWHNF  = Nothing-      }--pairT :: TermT var -> TermT var -> TermT var -> TermT var-pairT ty l r = t-  where-    t = PairT info l r-    info = TypeInfo-      { infoType  = ty-      , infoNF    = Nothing-      , infoWHNF  = Just t-      }--firstT :: TermT var -> TermT var -> TermT var-firstT ty arg = t-  where-    t = FirstT info arg-    info = TypeInfo-      { infoType  = ty-      , infoNF    = Nothing-      , infoWHNF  = Nothing-      }--secondT :: TermT var -> TermT var -> TermT var-secondT ty arg = t-  where-    t = SecondT info arg-    info = TypeInfo-      { infoType  = ty-      , infoNF    = Nothing-      , infoWHNF  = Nothing-      }--reflT-  :: TermT var-  -> Maybe (TermT var, Maybe (TermT var))-  -> TermT var-reflT ty mx = t-  where-    t = ReflT info mx-    info = TypeInfo-      { infoType  = ty-      , infoNF    = Just (ReflT info Nothing)-      , infoWHNF  = Just (ReflT info Nothing)-      }--typeFunT-  :: Maybe VarIdent-  -> TermT var-  -> Maybe (Scope TermT var)-  -> Scope TermT var-  -> TermT var-typeFunT orig cube mtope ret = t-  where-    t = TypeFunT info orig cube mtope ret-    info = TypeInfo-      { infoType  = universeT-      , infoNF    = Nothing-      , infoWHNF  = Just t-      }--typeSigmaT-  :: Maybe VarIdent-  -> TermT var-  -> Scope TermT var-  -> TermT var-typeSigmaT orig a b = t-  where-    t = TypeSigmaT info orig a b-    info = TypeInfo-      { infoType  = universeT-      , infoNF    = Nothing-      , infoWHNF  = Just t-      }--recOrT-  :: TermT var-  -> [(TermT var, TermT var)]-  -> TermT var-recOrT ty rs = t-  where-    t = RecOrT info rs-    info = TypeInfo-      { infoType  = ty-      , infoNF    = Nothing-      , infoWHNF  = Nothing-      }--typeIdT :: TermT var -> Maybe (TermT var) -> TermT var -> TermT var-typeIdT x tA y = t-  where-    t = TypeIdT info x tA y-    info = TypeInfo-      { infoType  = universeT-      , infoNF    = Nothing-      , infoWHNF  = Just t-      }--idJT-  :: TermT var-  -> TermT var-  -> TermT var-  -> TermT var-  -> TermT var-  -> TermT var-  -> TermT var-  -> TermT var-idJT ty tA a tC d x p = t-  where-    t = IdJT info tA a tC d x p-    info = TypeInfo-      { infoType  = ty-      , infoNF    = Nothing-      , infoWHNF  = Nothing-      }--typeAscT :: TermT var -> TermT var -> TermT var-typeAscT x ty = t-  where-    t = TypeAscT info x ty-    info = TypeInfo-      { infoType  = ty-      , infoNF    = Nothing-      , infoWHNF  = Nothing-      }--typeModalT :: TermT var -> TModality -> TermT var -> TermT var-typeModalT ty md te = t-  where-    t = TypeModalT info md te-    info = TypeInfo-      { infoType = ty-      , infoNF = Nothing-      , infoWHNF = Nothing-      }--modAppT :: TermT var -> TModality -> TermT var -> TermT var-modAppT ty md term = t-  where-    t = ModAppT info md term-    info = TypeInfo-      { infoType = ty-      , infoNF = Nothing-      , infoWHNF = Nothing-      }--modExtractT :: TermT var -> TModality -> TModality -> TermT var -> TermT var-modExtractT ty app inn term = t-  where-    t = ModExtractT info app inn term-    info = TypeInfo-      { infoType = ty-      , infoNF = Nothing-      , infoWHNF = Nothing-      }--typecheck :: Eq var => Term var -> TermT var -> TypeCheck var (TermT var)-typecheck term ty = performing (ActionTypeCheck term ty) $ do-  whnfT ty >>= \case--    RecBottomT{} -> do-      return recBottomT--    TypeRestrictedT _ty ty' rs -> do-      term' <- typecheck term ty'-      contextEntailedBy (foldr topeOrT topeBottomT (map fst rs))-      forM_ rs $ \(tope, rterm) -> do-        localTope tope $-          unifyTerms rterm term'-      return term'    -- FIXME: correct?--    ty' -> case term of-      Lambda orig mparam body ->-        case ty' of-          TypeFunT _ty _orig' param' mtope' ret -> do-            case mparam of-              Nothing -> return ()-              Just (param, Nothing) -> do-                (paramType, mtope) <- do-                  paramType <- infer param-                  typeOf paramType >>= \case-                    -- an argument can be a shape-                    TypeFunT _ty _orig cube _mtope UniverseTopeT{} -> do-                      mapM_ checkNameShadowing orig-                      enterScope orig cube $ do-                        let tope' = appT topeT (S <$> paramType) (Pure Z)  -- eta expand ty'-                        return (cube, Just tope')-                    _kind -> return (paramType, Nothing)-                unifyTerms param' paramType-                mapM_ checkNameShadowing orig-                enterScope orig param' $ do-                  mapM_ (unifyTerms (fromMaybe topeTopT mtope')) mtope-              Just (param, mtope) -> do-                param'' <- typecheck param =<< typeOf param'-                unifyTerms param' param''-                mapM_ checkNameShadowing orig-                enterScope orig param' $ do-                  mtope'' <- typecheck (fromMaybe TopeTop mtope) topeT-                  unifyTerms (fromMaybe topeTopT mtope') mtope''--            mapM_ checkNameShadowing orig-            enterScope orig param' $ do-              maybe id localTope mtope' $ do-                body' <- typecheck body ret-                return (lambdaT ty' orig (Just (param', mtope')) body')--          _ -> issueTypeError $ TypeErrorUnexpectedLambda term ty-      Let orig annot val body -> do-        val' <- performing (ActionCheckLetValue orig) $ case annot of-          Nothing -> infer val-          Just bindType -> do-            bindType' <- typecheck bindType universeT-            typecheck val bindType'-        bindTy <- typeOf val'-        body' <- enterScopeWithBind orig Id bindTy val' $ do-          typecheck body (S <$> ty')-        return (letT ty' orig (Just bindTy) val' body')-      LetMod orig app inn annot val body  -> do-        val' <- performing (ActionCheckLetValue orig) $ case annot of-          Nothing -> enterModality app $ infer val-          Just bindType -> do-            bindType' <- infer bindType-            bindUniv <- typeOf bindType'-            enterModality app $ typecheck val (typeModalT bindUniv inn bindType')-        bindTy <- typeOf val' >>= \case-          o@(TypeModalT _ty md t) ->-            if md == inn then-              return t-            else-              issueTypeError $ TypeErrorNotModal (untyped o) inn val'-          o -> issueTypeError $ TypeErrorNotModal (untyped o) inn val'-        bindVal <- whnfT val' >>= \case-          ModAppT _ty _m t -> pure t-          o -> pure (modExtractT bindTy app inn o)-        body' <- enterScopeWithBind orig (comp app inn) bindTy bindVal $ do-          typecheck body (S <$> ty')-        return (letModT ty' orig app inn (Just bindTy) val' body')-      Pair l r ->-        case ty' of-          CubeProductT _ty a b -> do-            l' <- typecheck l a-            r' <- typecheck r b-            return (pairT ty' l' r')-          TypeSigmaT _ty _orig a b -> do-            l' <- typecheck l a-            r' <- typecheck r (substituteT l' b)-            return (pairT ty' l' r')-          _ -> issueTypeError $ TypeErrorUnexpectedPair term ty--      Refl mx ->-        case ty' of-          TypeIdT _ty y _tA z -> do-            tA <- typeOf y-            forM_ mx $ \(x, mxty) -> do-              forM_ mxty $ \xty -> do-                xty' <- typecheck xty universeT-                unifyTerms tA xty'-              x' <- typecheck x tA-              unifyTerms x' y >> unifyTerms y x'-              unifyTerms x' z >> unifyTerms z x'-            when (isNothing mx) $-              unifyTerms y z >> unifyTerms z y-            return (reflT ty' (Just (y, Just tA)))-          _ -> issueTypeError $ TypeErrorUnexpectedRefl term ty-      ModExtract{} -> panicImpossible "extract is an internal term and cannot be typechecked"-      ModApp md body -> case ty' of-        TypeModalT _ty md' tpe -> do-            when (md /= md') $ issueTypeError $-              TypeErrorModalityMismatch md' md term-            body' <- enterModality md $ typecheck body tpe-            return $ modAppT ty' md body'-        _ -> issueTypeError $ TypeErrorNotModal term md ty'--        -- FIXME: this does not make typechecking faster, why?---      RecOr rs -> do---        rs' <- forM rs $ \(tope, rterm) -> do---          tope' <- typecheck tope topeT---          contextEntailedBy tope'---          localTope tope' $ do---            rterm' <- typecheck rterm ty---            return (tope', rterm')---        return (recOrT ty rs')-      _ -> do-        term' <- infer term-        inferredType <- typeOf term'-        unifyTypes term' ty' inferredType-        return term'--inferAs :: Eq var => TermT var -> Term var -> TypeCheck var (TermT var)-inferAs expectedKind term = do-  term' <- infer term-  ty <- typeOf term'-  kind <- typeOf ty-  unifyTypes ty expectedKind kind-  return term'--infer :: Eq var => Term var -> TypeCheck var (TermT var)-infer tt = performing (ActionInfer tt) $ case tt of-  Pure x -> do-    topLevel <- isTopLevelVar x-    unless topLevel $ do-      varMod <- modalityOfVar x-      locks <- locksOfVar x-      when (not (coe varMod locks)) $ issueTypeError $ TypeErrorUnaccessibleVar x varMod locks-    pure (Pure x)--  Universe     -> pure universeT-  UniverseCube -> pure cubeT-  UniverseTope -> pure topeT--  CubeUnit      -> pure cubeUnitT-  CubeUnitStar  -> pure cubeUnitStarT--  Cube2 -> pure cube2T-  Cube2_0 -> pure cube2_0T-  Cube2_1 -> pure cube2_1T-  CubeProduct l r -> do-    l' <- typecheck l cubeT-    r' <- typecheck r cubeT-    return (cubeProductT l' r')--  CubeFlip t -> do-    t' <- typecheck t cube2T-    return (cubeFlipT t')-  CubeUnflip t -> do-    t' <- typecheck t (typeModalT cubeT Op cube2T)-    return (cubeUnflipT t')--  Pair l r -> do-    l' <- infer l-    r' <- infer r-    lt <- typeOf l'-    rt <- typeOf r'-    typeOf lt >>= \case-      --    Γ ⊢ l ⇒ (I : CUBE)-      --    Γ ⊢ r ⇒ (J : CUBE)-      -- ———————————————————————————-      -- Γ ⊢ (l, r) ⇒ (I × J : CUBE)-      UniverseCubeT{} -> return (pairT (cubeProductT lt rt) l' r')-      --    Γ ⊢ l ⇒ (A : U)-      --    Γ ⊢ r ⇒ (B : U)-      -- ———————————————————————————-      -- Γ ⊢ (l, r) ⇒ (A × B : U)             where A × B = Σ (_ : A), B-      _ -> do-        -- NOTE: infer as a non-dependent pair!-        return (pairT (typeSigmaT Nothing lt (S <$> rt)) l' r')--  First t -> do-    t' <- infer t-    fmap stripTypeRestrictions (typeOf t') >>= \case-      RecBottomT{} -> pure recBottomT -- FIXME: is this ok?-      TypeSigmaT _ty _orig lt _rt ->-        return (firstT lt t')-      CubeProductT _ty l _r ->-        return (firstT l t')-      ty -> issueTypeError $ TypeErrorNotPair t' ty--  Second t -> do-    t' <- infer t-    fmap stripTypeRestrictions (typeOf t') >>= \case-      RecBottomT{} -> pure recBottomT -- FIXME: is this ok?-      TypeSigmaT _ty _orig lt rt ->-        return (secondT (substituteT (firstT lt t') rt) t')-      CubeProductT _ty _l r ->-        return (secondT r t')-      ty -> issueTypeError $ TypeErrorNotPair t' ty--  TypeUnit -> pure typeUnitT-  Unit -> pure unitT--  TopeTop -> pure topeTopT-  TopeBottom -> pure topeBottomT--  TopeEQ l r -> do-    l' <- inferAs cubeT l-    lt <- typeOf l'-    r' <- typecheck r lt-    return (topeEQT l' r')--  TopeLEQ l r -> do-    l' <- typecheck l cube2T-    r' <- typecheck r cube2T-    return (topeLEQT l' r')--  TopeAnd l r -> do-    l' <- typecheck l topeT-    r' <- typecheck r topeT-    return (topeAndT l' r')--  TopeOr l r -> do-    l' <- typecheck l topeT-    r' <- typecheck r topeT-    return (topeOrT l' r')--  TopeInv t -> do-    t' <- typecheck t topeT-    return (topeInvT t')--  TopeUninv t -> do-    t' <- typecheck t (typeModalT universeT Op topeT )-    return (topeUninvT t')--  RecBottom -> do-    contextEntails topeBottomT-    return recBottomT--  -- Γ ⊢ t ⇒ (T : K)-  -- Γ ⊢ K ≡ U-  -- —————————————-  -- Γ ⊢ t ⇒ T ⇐ U--  RecOr rs -> do-    ttts <- forM rs $ \(tope, term) -> do-      tope' <- typecheck tope topeT-      contextEntailedBy tope'-      localTope tope' $ do-        term' <- inferAs universeT term-        ty <- typeOf term'-        return (tope', (term', ty))-    let rs' = map (fmap fst) ttts-        ts  = map (fmap snd) ttts-    sequence_ [ checkCoherence l r | l:rs'' <- tails rs', r <- rs'' ]-    contextEquiv (map fst ttts)-    return (recOrT (recOrT universeT ts) rs')--  TypeFun orig a Nothing b -> do-    a' <- infer a-    typeOf a' >>= \case-      -- an argument can be a type-      UniverseT{} ->-        case a' of-          -- except if its a TOPE universe-          UniverseTopeT{} ->-            issueTypeError $ TypeErrorOther "tope params are illegal"-          _ -> do-            mapM_ checkNameShadowing orig-            b' <- enterScope orig a' $ typecheck b universeT-            return (typeFunT orig a' Nothing b')-      -- an argument can be a cube-      UniverseCubeT{} -> do-        mapM_ checkNameShadowing orig-        b' <- enterScope orig a' $ typecheck b universeT-        return (typeFunT orig a' Nothing b')-      -- an argument can be a shape-      TypeFunT _ty _orig cube mtope UniverseTopeT{} -> do-        mapM_ checkNameShadowing orig-        enterScope orig cube $ do-          let tope' = appT topeT (S <$> a') (Pure Z)  -- eta expand a'-          localTope tope' $ do-            b' <- typecheck b universeT-            case mtope of-              Nothing -> return (typeFunT orig cube (Just tope') b')-              Just tope'' -> return (typeFunT orig cube (Just (topeAndT tope'' tope')) b')-      ty -> issueTypeError $ TypeErrorInvalidArgumentType a ty--  TypeFun orig cube (Just tope) ret -> do-    cube' <- typecheck cube cubeT-    mapM_ checkNameShadowing orig-    enterScope orig cube' $ do-      tope' <- typecheck tope topeT-      localTope tope' $ do-        ret' <- typecheck ret universeT-        return (typeFunT orig cube' (Just tope') ret')--  TypeSigma orig a b -> do-    a' <- typecheck a universeT-    mapM_ checkNameShadowing orig-    b' <- enterScope orig a' $ typecheck b universeT-    return (typeSigmaT orig a' b')--  TypeId x (Just tA) y -> do-    tA' <- typecheck tA universeT-    x' <- typecheck x tA'-    y' <- typecheck y tA'-    return (typeIdT x' (Just tA') y')--  TypeId x Nothing y -> do-    x' <- inferAs universeT x-    tA <- typeOf x'-    y' <- typecheck y tA-    return (typeIdT x' (Just tA) y')--  App f x -> do-    f' <- inferAs universeT f-    fmap stripTypeRestrictions (typeOf f') >>= \case-      TypeFunT _ty _orig a mtope b -> do-        x' <- typecheck x a-        let result = appT (substituteT x' b) f' x'-        case b of-          UniverseTopeT{} -> do-            case mtope of-              Nothing -> return result-              Just tope -> do-                return (topeAndT (substituteT x' tope) result)-          _               -> do-            mapM_ (contextEntails . substituteT x') mtope   -- FIXME: need to check?-            return result-      ty -> issueTypeError $ TypeErrorNotFunction f' ty--  Lambda _orig Nothing _body -> do-    issueTypeError $ TypeErrorCannotInferBareLambda tt-  Lambda orig (Just (ty, Nothing)) body -> do-    ty' <- infer ty-    mtope <- typeOf ty' >>= \case-      -- an argument can be a type-      UniverseT{} ->-        case ty' of-          -- except if its a TOPE universe-          UniverseTopeT{} ->-            issueTypeError $ TypeErrorOther "tope params are illegal"-          _ -> return Nothing-      -- an argument can be a cube-      UniverseCubeT{} -> return Nothing-      -- an argument can be a shape-      TypeFunT _ty _orig cube _mtope UniverseTopeT{} -> do-        mapM_ checkNameShadowing orig-        enterScope orig cube $ do-          let tope' = appT topeT (S <$> ty') (Pure Z)  -- eta expand ty'-          return (Just tope')-      kind -> issueTypeError $ TypeErrorInvalidArgumentType ty kind-    mapM_ checkNameShadowing orig-    enterScope orig ty' $ do-      maybe id localTope mtope $ do-        body' <- infer body-        ret <- typeOf body'-        return (lambdaT (typeFunT orig ty' mtope ret) orig (Just (ty', mtope)) body')-  Lambda orig (Just (cube, Just tope)) body -> do-    cube' <- typecheck cube cubeT-    mapM_ checkNameShadowing orig-    enterScope orig cube' $ do-      tope' <- infer tope-      body' <- localTope tope' $ infer body-      ret <- typeOf body'-      return (lambdaT (typeFunT orig cube' (Just tope') ret) orig (Just (cube', Just tope')) body')-  Let orig annot val body -> do-    val' <- performing (ActionCheckLetValue orig) $ case annot of-      Nothing -> infer val-      Just ty -> do-        bindTy <- typecheck ty universeT-        typecheck val bindTy-    bindTy <- typeOf val'-    enterScopeWithBind orig Id bindTy val' $ do-      body' <- infer body-      ret <- typeOf body'-      return (letT (substituteT val' ret) orig (Just bindTy) val' body')-  LetMod orig app inn annot val body -> do-    val' <- performing (ActionCheckLetValue orig) $ case annot of-      Nothing -> enterModality app $ infer val-      Just bindType -> do-        bindType' <- infer bindType-        bindUniv <- typeOf bindType'-        enterModality app $ typecheck val (typeModalT bindUniv inn bindType')-    bindTy <- typeOf val' >>= \case-      o@(TypeModalT _ty md t) ->-        if md == inn then-          return t-        else-          issueTypeError $ TypeErrorNotModal (untyped o) inn val'-      o -> issueTypeError $ TypeErrorNotModal (untyped o) inn val'-    bindVal <- whnfT val' >>= \case-      ModAppT _ty _m t -> pure t-      o -> pure (modExtractT bindTy app inn o)-    enterScopeWithBind orig (comp app inn) bindTy bindVal $ do-      body' <- infer body-      ret <- typeOf body'-      return (letModT (substituteT val' ret) orig app inn (Just bindTy) val' body')-  Refl Nothing -> issueTypeError $ TypeErrorCannotInferBareRefl tt-  Refl (Just (x, Nothing)) -> do-    x' <- inferAs universeT x-    ty <- typeOf x'-    return (reflT (typeIdT x' (Just ty) x') (Just (x', Just ty)))-  Refl (Just (x, Just ty)) -> do-    ty' <- typecheck ty universeT-    x' <- typecheck x ty'-    return (reflT (typeIdT x' (Just ty') x') (Just (x', Just ty')))--  IdJ tA a tC d x p -> do-    tA' <- typecheck tA universeT-    a' <- typecheck a tA'-    let typeOf_C =-          typeFunT Nothing tA' Nothing $-            typeFunT Nothing (typeIdT (S <$> a') (Just (S <$> tA')) (Pure Z)) Nothing $-              universeT-    tC' <- typecheck tC typeOf_C-    let typeOf_d =-          appT universeT-            (appT (typeFunT Nothing (typeIdT a' (Just tA') a') Nothing universeT)-              tC' a')-            (reflT (typeIdT a' (Just tA') a') Nothing)-    d' <- typecheck d typeOf_d-    x' <- typecheck x tA'-    p' <- typecheck p (typeIdT a' (Just tA') x')-    let ret =-          appT universeT-            (appT (typeFunT Nothing (typeIdT a' (Just tA') x') Nothing universeT)-              tC' x')-            p'-    return (idJT ret tA' a' tC' d' x' p')--  TypeAsc term ty -> do-    ty' <- inferAs universeT ty -- this works on types AND cubes-    term' <- typecheck term ty'-    return (typeAscT term' ty')--  TypeRestricted ty rs -> do-    ty' <- typecheck ty universeT-    rs' <- forM rs $ \(tope, term) -> do-      tope' <- typecheck tope topeT-      term' <- localTope tope' $ typecheck term ty'-      return (tope', term')-    sequence_ [ checkCoherence l r | l:rs'' <- tails rs', r <- rs'' ]-    return (typeRestrictedT ty' rs')-  TypeModal md ty -> do-    ty' <- enterModality md $ infer ty-    universeTy <- typeOf ty'-    _ <- case universeTy of -      UniverseT {} -> pure universeTy -      UniverseCubeT {} -> pure universeTy -      UniverseTopeT {} -> pure universeTy-      _ -> issueTypeError $ TypeErrorNotTypeInModal universeTy-    return (typeModalT universeTy md ty')-  ModApp md term -> do-    term' <- enterModality md $ infer term-    ty <- typeOf term'-    tyUniv <- typeOf ty-    return $ modAppT (typeModalT tyUniv md ty) md term'-  ModExtract _ _ _ -> error "untypable $extract$"--checkCoherence-  :: Eq var-  => (TermT var, TermT var)-  -> (TermT var, TermT var)-  -> TypeCheck var ()-checkCoherence (ltope, lterm) (rtope, rterm) =-  performing (ActionCheckCoherence (ltope, lterm) (rtope, rterm)) $ do-    localTope (topeAndT ltope rtope) $ do-      ltype <- stripTypeRestrictions <$> typeOf lterm   -- FIXME: why strip?-      rtype <- stripTypeRestrictions <$> typeOf rterm   -- FIXME: why strip?-      -- FIXME: do we need to unify types here or is it included in unification of terms?-      unifyTerms ltype rtype-      unifyTerms lterm rterm--inferStandalone :: Eq var => Term var -> Either (TypeErrorInScopedContext var) (TermT var)-inferStandalone term = defaultTypeCheck (infer term)--unsafeInferStandalone' :: Term' -> TermT'-unsafeInferStandalone' term = unsafeTypeCheck' (infer term)--unsafeTypeCheck' :: TypeCheck VarIdent a -> a-unsafeTypeCheck' tc =-  case defaultTypeCheck tc of-    Left err     -> error $ ppTypeErrorInScopedContext' BottomUp err-    Right result -> result--type PointId = String-type ShapeId = [PointId]--cube2powerT :: Int -> TermT var-cube2powerT 1   = cube2T-cube2powerT dim = cubeProductT (cube2powerT (dim - 1)) cube2T--splits :: [a] -> [([a], [a])]-splits [] = [([], [])]-splits (x:xs) = ([], x:xs) : [ (x : before, after) | (before, after) <- splits xs ]--verticesFrom :: [TermT var] -> [(ShapeId, TermT var)]-verticesFrom ts = combine <$> mapM mk ts-  where-    mk t = [("0", topeEQT t cube2_0T), ("1", topeEQT t cube2_1T)]-    combine xs = ([concat (map fst xs)], foldr1 topeAndT (map snd xs))--subTopes2 :: Int -> TermT var -> [(ShapeId, TermT var)]--- 1-dim-subTopes2 1 t =-  [ (words "0", topeEQT t cube2_0T)-  , (words "1", topeEQT t cube2_1T)-  , (words "0 1", topeTopT) ]--- 2-dim-subTopes2 2 ts =-  -- vertices-  [ (words "00", topeEQT t cube2_0T `topeAndT` topeEQT s cube2_0T)-  , (words "01", topeEQT t cube2_0T `topeAndT` topeEQT s cube2_1T)-  , (words "10", topeEQT t cube2_1T `topeAndT` topeEQT s cube2_0T)-  , (words "11", topeEQT t cube2_1T `topeAndT` topeEQT s cube2_1T)-  -- edges and the diagonal-  , (words "00 01", topeEQT t cube2_0T)-  , (words "10 11", topeEQT t cube2_1T)-  , (words "00 10", topeEQT s cube2_0T)-  , (words "01 11", topeEQT s cube2_1T)-  , (words "00 11", topeEQT s t)-  -- triangles-  , (words "00 01 11", topeLEQT t s)-  , (words "00 10 11", topeLEQT s t)-  ]-  where-    t = firstT cube2T ts-    s = secondT cube2T ts--- 3-dim-subTopes2 3 t =-  -- vertices-  [ (words "000", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_0T)-  , (words "001", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_1T)-  , (words "010", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_0T)-  , (words "011", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_1T)-  , (words "100", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_0T)-  , (words "101", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_1T)-  , (words "110", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_0T)-  , (words "111", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_1T)-  -- edges-  , (words "000 001", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_0T)-  , (words "010 011", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_1T)-  , (words "000 010", topeEQT t1 cube2_0T `topeAndT` topeEQT t3 cube2_0T)-  , (words "001 011", topeEQT t1 cube2_0T `topeAndT` topeEQT t3 cube2_1T)-  , (words "100 101", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_0T)-  , (words "110 111", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_1T)-  , (words "100 110", topeEQT t1 cube2_1T `topeAndT` topeEQT t3 cube2_0T)-  , (words "101 111", topeEQT t1 cube2_1T `topeAndT` topeEQT t3 cube2_1T)-  , (words "000 100", topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_0T)-  , (words "001 101", topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_1T)-  , (words "010 110", topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_0T)-  , (words "011 111", topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_1T)-  -- face diagonals-  , (words "000 011", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 t3)-  , (words "100 111", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 t3)-  , (words "000 101", topeEQT t2 cube2_0T `topeAndT` topeEQT t1 t3)-  , (words "010 111", topeEQT t2 cube2_1T `topeAndT` topeEQT t1 t3)-  , (words "000 110", topeEQT t3 cube2_0T `topeAndT` topeEQT t1 t2)-  , (words "001 111", topeEQT t3 cube2_1T `topeAndT` topeEQT t1 t2)-  -- the long diagonal-  , (words "000 111", topeEQT t3 t2 `topeAndT` topeEQT t2 t1)-  -- face triangles-  , (words "000 001 011", topeEQT t1 cube2_0T `topeAndT` topeLEQT t2 t3)-  , (words "000 010 011", topeEQT t1 cube2_0T `topeAndT` topeLEQT t3 t2)-  , (words "100 101 111", topeEQT t1 cube2_1T `topeAndT` topeLEQT t2 t3)-  , (words "100 110 111", topeEQT t1 cube2_1T `topeAndT` topeLEQT t3 t2)-  , (words "000 001 101", topeEQT t2 cube2_0T `topeAndT` topeLEQT t1 t3)-  , (words "000 100 101", topeEQT t2 cube2_0T `topeAndT` topeLEQT t3 t1)-  , (words "010 011 111", topeEQT t2 cube2_1T `topeAndT` topeLEQT t1 t3)-  , (words "010 110 111", topeEQT t2 cube2_1T `topeAndT` topeLEQT t3 t1)-  , (words "000 010 110", topeEQT t3 cube2_0T `topeAndT` topeLEQT t1 t2)-  , (words "000 100 110", topeEQT t3 cube2_0T `topeAndT` topeLEQT t2 t1)-  , (words "001 011 111", topeEQT t3 cube2_1T `topeAndT` topeLEQT t1 t2)-  , (words "001 101 111", topeEQT t3 cube2_1T `topeAndT` topeLEQT t2 t1)-  -- diagonal triangles-  , (words "000 001 111", topeEQT t1 t2 `topeAndT` topeLEQT t2 t3)-  , (words "000 010 111", topeEQT t1 t3 `topeAndT` topeLEQT t1 t2)-  , (words "000 100 111", topeEQT t2 t3 `topeAndT` topeLEQT t2 t1)-  , (words "000 011 111", topeLEQT t1 t2 `topeAndT` topeEQT t2 t3)-  , (words "000 101 111", topeLEQT t2 t1 `topeAndT` topeEQT t1 t3)-  , (words "000 110 111", topeLEQT t3 t1 `topeAndT` topeEQT t1 t2)-  -- tetrahedra-  , (words "000 001 011 111", topeLEQT t1 t2 `topeAndT` topeLEQT t2 t3)-  , (words "000 010 011 111", topeLEQT t1 t3 `topeAndT` topeLEQT t3 t2)-  , (words "000 001 101 111", topeLEQT t2 t1 `topeAndT` topeLEQT t1 t3)-  , (words "000 100 101 111", topeLEQT t2 t3 `topeAndT` topeLEQT t3 t1)-  , (words "000 010 110 111", topeLEQT t3 t1 `topeAndT` topeLEQT t1 t2)-  , (words "000 100 110 111", topeLEQT t3 t2 `topeAndT` topeLEQT t2 t1)-  ]-  where-    t1 = firstT  cube2T (firstT (cube2powerT 2) t)-    t2 = secondT cube2T (firstT (cube2powerT 2) t)-    t3 = secondT cube2T t-subTopes2 dim _ = error (show dim <> " dimensions are not supported")--cubeSubTopes :: [(ShapeId, TermT (Inc var))]-cubeSubTopes = subTopes2 3 (Pure Z)--limitLength :: Int -> String -> String-limitLength n s-  | length s > n = take (n - 1) s <> "…"-  | otherwise    = s--renderObjectsFor-  :: Eq var-  => String-  -> Int-  -> TermT var-  -> TermT var-  -> TypeCheck var [(ShapeId, RenderObjectData)]-renderObjectsFor mainColor dim t term = fmap catMaybes $ do-  forM (subTopes2 dim t) $ \(shapeId, tope) -> do-    checkTopeEntails tope >>= \case-      False -> return Nothing-      True -> typeOf term >>= \case-        UniverseTopeT{} -> localTope term $ checkTopeEntails tope >>= \case-          False -> return Nothing-          True -> return $ Just (shapeId, RenderObjectData-            { renderObjectDataLabel = ""-            , renderObjectDataFullLabel = ""-            , renderObjectDataColor = "orange"  -- FIXME: orange for topes?-            })-        _ -> do-          origs <- asks varOrigs-          term' <- localTope tope $ whnfT term-          label <--            case term' of-              AppT _ (Pure z) arg-                | Just (Just "_") <- lookup z origs -> return ""-                | null (nub (freeVars (untyped arg)) \\ nub (freeVars (untyped t))) ->-                    ppTermInContext (Pure z)-              _ -> ppTermInContext term'-          return $ Just (shapeId, RenderObjectData-            { renderObjectDataLabel = label-            , renderObjectDataFullLabel = label-            , renderObjectDataColor =-                case term' of-                  Pure{} -> "purple"-                  AppT _ (Pure x) arg-                    | Just (Just "_") <- lookup x origs -> mainColor-                    | null (nub (freeVars (untyped arg)) \\ nub (freeVars (untyped t)))  -> "purple"-                  _ -> mainColor-            })--componentWiseEQT :: Int -> TermT var -> TermT var -> TermT var-componentWiseEQT 1 t s = topeEQT t s-componentWiseEQT 2 t s = topeAndT-  (componentWiseEQT 1 (firstT  cube2T t) (firstT  cube2T s))-  (componentWiseEQT 1 (secondT cube2T t) (secondT cube2T s))-componentWiseEQT 3 t s = topeAndT-  (componentWiseEQT 2 (firstT  (cube2powerT 2) t) (firstT (cube2powerT 2) s))-  (componentWiseEQT 1 (secondT cube2T t) (secondT cube2T s))-componentWiseEQT dim _ _ = error ("cannot work with " <> show dim <> " dimensions")--renderObjectsInSubShapeFor-  :: Eq var-  => String-  -> Int-  -> [var]-  -> var-  -> TermT var-  -> TermT var-  -> TermT var-  -> TypeCheck var [(ShapeId, RenderObjectData)]-renderObjectsInSubShapeFor mainColor dim sub super retType f x = fmap catMaybes $ do-  let reduceContext-        = foldr topeOrT topeBottomT-        . map (foldr topeAndT topeTopT)-        . map (filter (\tope -> all (`notElem` tope) sub))-        . map (saturateTopes [])-        . simplifyLHSwithDisjunctions-  contextTopes  <- asks (reduceContext . localTopesNF)-  contextTopes' <- localTope (componentWiseEQT dim (Pure super) x) $ asks (reduceContext . localTopesNF)-  forM (subTopes2 dim (Pure super)) $ \(shapeId, tope) -> do-    checkEntails tope contextTopes >>= \case-      False -> return Nothing-      True -> do-        origs <- asks varOrigs-        term <- localTope tope (whnfT (appT retType f (Pure super)))-        label <- typeOf term >>= \case-          UniverseTopeT{} -> return ""-          _ -> do-            case term of-              AppT _ (Pure z) arg-                | Just (Just "_") <- lookup z origs -> return ""-                | null (nub (freeVars (untyped arg)) \\ [super]) -> ppTermInContext (Pure z)-              _ -> ppTermInContext term-        color <- checkEntails tope contextTopes' >>= \case-          True -> do-            case term of-              Pure{} -> return "purple"-              AppT _ (Pure z) arg-                | Just (Just "_") <- lookup z origs -> return mainColor-                | null (nub (freeVars (untyped arg)) \\ [super]) -> return "purple"-              _ -> return mainColor-          False -> return "gray"-        return $ Just (shapeId, RenderObjectData-          { renderObjectDataLabel = label-          , renderObjectDataFullLabel = label-          , renderObjectDataColor = color-          })--renderForSubShapeSVG-  :: Eq var-  => String -  -> Int-  -> [var]-  -> var-  -> TermT var-  -> TermT var-  -> TermT var-  -> TypeCheck var String-renderForSubShapeSVG mainColor dim sub super retType f x = do-  objects <- renderObjectsInSubShapeFor mainColor dim sub super retType f x-  let objects' = map mk objects-  return $ renderCube defaultCamera (if dim > 2 then (pi/7) else 0) $ \obj ->-    lookup obj objects'-  where-    mk (shapeId, renderData) = (intercalate "-" (map fill shapeId), renderData)-    fill xs = xs <> replicate (3 - length xs) '1'--renderForSVG :: Eq var => String -> Int -> TermT var -> TermT var -> TypeCheck var String-renderForSVG mainColor dim t term = do-  objects <- renderObjectsFor mainColor dim t term-  let objects' = map mk objects-  return $ renderCube defaultCamera (if dim > 2 then (pi/7) else 0) $ \obj ->-    lookup obj objects'-  where-    mk (shapeId, renderData) = (intercalate "-" (map fill shapeId), renderData)-    fill xs = xs <> replicate (3 - length xs) '1'--renderTermSVGFor-  :: Eq var-  => String -- ^ Main color.-  -> Int    -- ^ Accumulated dimensions so far (from 0 to 3).-  -> (Maybe (TermT var, TermT var), [var])  -- ^ Accumulated point term (and its time).-  -> TermT var  -- ^ Term to render.-  -> TypeCheck var (Maybe String)-renderTermSVGFor mainColor accDim (mp, xs) t = do-  t' <- whnfT t-  ty <- typeOf t'-  case t of -- check unevaluated term-    AppT _info f x -> typeOf f >>= \case-      TypeFunT _ fOrig fArg mtopeArg ret | Just dim <- dimOf fArg, dim <= maxDim -> do-        enterScope fOrig fArg $ do-          maybe id localTope mtopeArg $ do-            Just <$> renderForSubShapeSVG mainColor dim (map S xs) Z ret (S <$> f) (S <$> x)  -- FIXME: breaks for 2 * (2 * 2), but works for 2 * 2 * 2 = (2 * 2) * 2-      _ -> traverse (\(p', _) -> renderForSVG mainColor accDim p' t') mp-    TypeFunT{} | null xs -> enterScope (Just "_") t' $ do-      renderTermSVGFor "blue" 0 (Nothing, []) (Pure Z)  -- use blue for types--    _ -> case t' of -- check evaluated term-      AppT _info f x -> typeOf f >>= \case-        TypeFunT _ fOrig fArg mtopeArg ret | Just dim <- dimOf fArg, dim <= maxDim -> do-          enterScope fOrig fArg $ do-            maybe id localTope mtopeArg $ do-              Just <$> renderForSubShapeSVG mainColor dim (map S xs) Z ret (S <$> f) (S <$> x)  -- FIXME: breaks for 2 * (2 * 2), but works for 2 * 2 * 2 = (2 * 2) * 2-        _ -> traverse (\(p', _) -> renderForSVG mainColor accDim p' t') mp-      TypeFunT{} | null xs -> enterScope (Just "_") t' $ do-        renderTermSVGFor "blue" 0 (Nothing, []) (Pure Z)  -- use blue for types--      _ -> case ty of -- check type of the term-        TypeFunT _ orig arg mtope ret-          | Just dim <- dimOf arg, accDim + dim <= maxDim -> enterScope orig arg $ do-              maybe id localTope mtope $-                renderTermSVGFor mainColor (accDim + dim)-                  (join' (both (fmap S) <$> mp) (S <$> arg) (Pure Z), Z : map S xs) $-                    case t' of-                      LambdaT _ _orig _marg body -> body-                      _                          -> appT ret (S <$> t') (Pure Z)-          | null xs -> enterScope orig arg $ do-              maybe id localTope mtope $-                renderTermSVGFor mainColor accDim-                  (both (fmap S) <$> mp, map S xs) $-                    case t' of-                      LambdaT _ _orig _marg body -> body-                      _                          -> appT ret (S <$> t') (Pure Z)-        _ -> traverse (\(p', _) -> renderForSVG mainColor accDim p' t') mp-  where-    maxDim = 3--    both f (x, y) = (f x, f y)--    join' Nothing Cube2T{} x = Just (x, cube2T)-    join' (Just (p, pt)) Cube2T{} x = Just (p', pt')-      where-        pt' = cubeProductT pt cube2T-        p' = pairT pt' p x-    join' p (CubeProductT _ l r) x =-      join' (join' p l (firstT l x)) r (secondT r x)-    join' _ _ _ = Nothing -- FIXME: error?--    dimOf = \case-      Cube2T{}           -> Just 1-      CubeProductT _ l r -> (+) <$> dimOf l <*> dimOf r-      _                  -> Nothing--renderTermSVG :: Eq var => TermT var -> TypeCheck var (Maybe String)-renderTermSVG = renderTermSVGFor "red" 0 (Nothing, [])  -- use red for terms by default--renderTermSVG' :: Eq var => TermT var -> TypeCheck var (Maybe String)-renderTermSVG' t = whnfT t >>= \t' -> typeOf t >>= \case-  TypeFunT _ orig arg mtope ret -> enterScope orig arg $ do-    maybe id localTope mtope $ case t' of-      LambdaT _ _orig _marg (AppT _info f x) ->-        typeOf f >>= \case-          TypeFunT _ fOrig fArg mtope2 _ret | Just dim <- dimOf fArg -> do-            enterScope fOrig fArg $ do+-- An explicit list: a bare 'Control.Monad.Writer' import also re-exports+-- 'Data.Monoid' (incl. 'First'/'Last') on some mtl versions, which clashes with+-- the 'First'/'Last' term patterns from 'Language.Rzk.Free.Syntax'.+import           Control.Monad.Writer     (WriterT, censor, runWriterT, tell)+import           Data.Bifoldable          (bifoldr)+import           Data.Bifunctor           (first)+import           Data.List                (intercalate, intersect, nub, partition,+                                           tails, (\\))+import           Data.Maybe               (catMaybes, fromMaybe, isNothing,+                                           mapMaybe)+import           Data.String              (IsString (..))+import           Data.Tuple               (swap)++import           Free.Scoped+import           Language.Rzk.Free.Syntax+import qualified Language.Rzk.Syntax      as Rzk++import           Debug.Trace+import           Unsafe.Coerce++-- $setup+-- >>> :set -XOverloadedStrings+++-- | Parse and 'unsafeInferStandalone''.+instance IsString TermT' where+  fromString = unsafeInferStandalone' . fromString++defaultTypeCheck+  :: TypeCheck var a+  -> Either (TypeErrorInScopedContext var) a+defaultTypeCheck = fmap fst . defaultTypeCheckWithHoles' emptyContext++-- | Like 'defaultTypeCheck', but runs in lenient hole mode ('allowHoles') and+-- also returns the holes recorded during checking (with their goal and context).+defaultTypeCheckWithHoles+  :: TypeCheck var a+  -> Either (TypeErrorInScopedContext var) (a, [HoleInfo])+defaultTypeCheckWithHoles = defaultTypeCheckWithHoles' (allowHoles emptyContext)++defaultTypeCheckWithHoles'+  :: Context var+  -> TypeCheck var a+  -> Either (TypeErrorInScopedContext var) (a, [HoleInfo])+defaultTypeCheckWithHoles' ctx tc =+  runExcept (runWriterT (runReaderT tc ctx))++-- FIXME: merge with VarInfo+data Decl var = Decl+  { declName         :: var+  , declType         :: TermT var+  , declValue        :: Maybe (TermT var)+  , declIsAssumption :: Bool+  , declUsedVars     :: [var]+  , declLocation     :: Maybe LocationInfo+  } deriving Eq++type Decl' = Decl VarIdent++typecheckModulesWithLocationIncremental+  :: [(FilePath, [Decl'])]    -- ^ Cached declarations (only those that do not need rechecking).+  -> [(FilePath, Rzk.Module)] -- ^ New modules to check+  -> TypeCheck VarIdent ([(FilePath, [Decl'])], [TypeErrorInScopedContext VarIdent])+typecheckModulesWithLocationIncremental cached modulesToTypecheck = do+  let decls = foldMap snd cached+  localDeclsPrepared decls $ do+    (checked, errors) <- typecheckModulesWithLocation' modulesToTypecheck+    return (cached <> checked, errors)++typecheckModulesWithLocation' :: [(FilePath, Rzk.Module)] -> TypeCheck VarIdent ([(FilePath, [Decl'])], [TypeErrorInScopedContext VarIdent])+typecheckModulesWithLocation' = \case+  [] -> return ([], [])+  m@(path, _) : ms -> do+    (decls, errs) <- typecheckModuleWithLocation m+    case errs of+      _:_ -> return ([(path, decls)], errs)+      _ -> do+        localDeclsPrepared decls $ do+          (decls', errors) <- typecheckModulesWithLocation' ms+          return ((path, decls) : decls', errors)++-- | Typecheck modules in lenient hole mode, returning the elaborated+-- declarations, any type errors, and the holes recorded (each with its goal and+-- local context). This is the structured goal/context query consumed by the+-- LSP and the game. Strict callers (the default CLI path, CI) keep using+-- 'typecheckModulesWithLocation', where holes are 'TypeErrorUnsolvedHole'.+typecheckModulesWithHoles+  :: [(FilePath, Rzk.Module)]+  -> Either (TypeErrorInScopedContext VarIdent)+            ([(FilePath, [Decl'])], [TypeErrorInScopedContext VarIdent], [HoleInfo])+typecheckModulesWithHoles = typecheckModulesWithHolesAndLemmas []++-- | Like 'typecheckModulesWithHoles', but additionally offers the given named+-- top-level definitions as hole candidates (each applied to holes when its type+-- fits the goal). The game passes a level's allow-list of relevant lemmas so+-- they surface as moves; an empty list reproduces 'typecheckModulesWithHoles'.+typecheckModulesWithHolesAndLemmas+  :: [VarIdent]+  -> [(FilePath, Rzk.Module)]+  -> Either (TypeErrorInScopedContext VarIdent)+            ([(FilePath, [Decl'])], [TypeErrorInScopedContext VarIdent], [HoleInfo])+typecheckModulesWithHolesAndLemmas lemmas modules =+  flatten <$> defaultTypeCheckWithHoles'+    (withHintLemmas lemmas (allowHoles emptyContext))+    (typecheckModulesWithLocation' modules)+  where+    flatten ((decls, errs), holes) = (decls, errs, holes)++typecheckModulesWithLocation :: [(FilePath, Rzk.Module)] -> TypeCheck VarIdent [(FilePath, [Decl'])]+typecheckModulesWithLocation = \case+  [] -> return []+  m@(path, _) : ms -> do+    (decls, errs) <- typecheckModuleWithLocation m+    case errs of+      err : _ -> do+        throwError err+      [] -> localDeclsPrepared decls $+        ((path, decls) :) <$> typecheckModulesWithLocation ms++typecheckModules :: [Rzk.Module] -> TypeCheck VarIdent [Decl']+typecheckModules = \case+  [] -> return []+  m : ms -> do+    (decls, errs) <- typecheckModule Nothing m+    case errs of+      err : _ -> do+        throwError err+      _ -> do+        localDeclsPrepared decls $+          (decls <>) <$> typecheckModules ms++typecheckModuleWithLocation :: (FilePath, Rzk.Module) -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])+typecheckModuleWithLocation (path, module_) = do+  traceTypeCheck Normal ("Checking module from " <> path) $ do+    withLocation (LocationInfo { locationFilePath = Just path, locationLine = Nothing }) $+      typecheckModule (Just path) module_++countCommands :: Integral a => [Rzk.Command] -> a+countCommands = fromIntegral . length++typecheckModule :: Maybe FilePath -> Rzk.Module -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])+typecheckModule path (Rzk.Module _moduleLoc _lang commands) =+  withSection Nothing (go 1 commands) $ -- FIXME: use module name? or anonymous section?+    return ([], [])+  where+    totalCommands = countCommands commands++    go :: Integer -> [Rzk.Command] -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])+    go _i [] = return ([], [])++    go  i (command@(Rzk.CommandUnsetOption _loc optionName) : moreCommands) = do+      traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"+          <> " Unsetting option " <> optionName) $ do+        withCommand command $ do+          unsetOption optionName $+            go (i + 1) moreCommands++    go  i (command@(Rzk.CommandSetOption _loc optionName optionValue) : moreCommands) = do+      traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"+          <> " Setting option " <> optionName <> " = " <> optionValue ) $ do+        withCommand command $ do+          setOption optionName optionValue $+            go (i + 1) moreCommands++    go  i (command@(Rzk.CommandDefine _loc name (Rzk.DeclUsedVars _ vars) params ty term) : moreCommands) =+      traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"+          <> " Checking #define " <> Rzk.printTree name ) $ do+        withCommand command $ do+          mapM_ checkDefinedVar (varIdentAt path <$> vars)+          paramDecls <- concat <$> mapM paramToParamDecl params+          -- Store the elaborated type and term unreduced, but memoise their+          -- WHNF on the top node (see 'memoizeWHNF'). Reducing in place would+          -- discard or expose a variable occurrence, so the section+          -- unused/implicit-assumption checks (run over the stored type and+          -- value) would disagree with the term the user wrote; keeping the+          -- WHNF cached preserves the original one-shot reduction.+          ty' <- memoizeWHNF =<< typecheck (toTerm' (addParamDecls paramDecls ty)) universeT+          term' <- memoizeWHNF =<< typecheck (toTerm' (addParams params term)) ty'+          loc <- asks location+          let decl = Decl (varIdentAt path name) ty' (Just term') False (varIdentAt path <$> vars) loc+          fmap (first (decl :)) $+            localDeclPrepared decl $ do+              Context{..} <- ask+              termSVG <-+                case renderBackend of+                  Just RenderSVG -> renderTermSVG (Pure (varIdentAt path name))+                  Just RenderLaTeX -> issueTypeError $ TypeErrorOther "\"latex\" rendering is not yet supported"+                  Nothing -> pure Nothing+              maybe id trace termSVG $ do+                go (i + 1) moreCommands++    go  i (command@(Rzk.CommandPostulate _loc name (Rzk.DeclUsedVars _ vars) params ty) : moreCommands) =+      traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"+          <> " Checking #postulate " <> Rzk.printTree name) $ do+        withCommand command $ do+          mapM_ checkDefinedVar (varIdentAt path <$> vars)+          paramDecls <- concat <$> mapM paramToParamDecl params+          ty' <- memoizeWHNF =<< typecheck (toTerm' (addParamDecls paramDecls ty)) universeT+          loc <- asks location+          let decl = Decl (varIdentAt path name) ty' Nothing False (varIdentAt path <$> vars) loc+          fmap (first (decl :)) $+            localDeclPrepared decl $+              go (i + 1) moreCommands++    go  i (command@(Rzk.CommandCheck _loc term ty) : moreCommands) =+      traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"+          <> " Checking " <> Rzk.printTree term <> " : " <> Rzk.printTree ty ) $ do+        withCommand command $ do+          ty' <- typecheck (toTerm' ty) universeT >>= whnfT+          _term' <- typecheck (toTerm' term) ty'+          go (i + 1) moreCommands++    go  i (Rzk.CommandCompute loc term : moreCommands) =+      go i (Rzk.CommandComputeWHNF loc term : moreCommands)++    go  i (command@(Rzk.CommandComputeNF _loc term) : moreCommands) =+      traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"+          <> " Computing NF for " <> Rzk.printTree term) $ do+        withCommand command $ do+          term' <- infer (toTerm' term) >>= nfT+          traceTypeCheck Normal ("  " <> show (untyped term')) $ do+            go (i + 1) moreCommands++    go  i (command@(Rzk.CommandComputeWHNF _loc term) : moreCommands) =+      traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"+          <> " Computing WHNF for " <> Rzk.printTree term) $ do+        withCommand command $ do+          term' <- infer (toTerm' term) >>= whnfT+          traceTypeCheck Normal ("  " <> show (untyped term')) $ do+            go (i + 1) moreCommands++    go  i (command@(Rzk.CommandAssume _loc names ty) : moreCommands) =+      traceTypeCheck Normal ("[ " <> show i <> " out of " <> show totalCommands <> " ]"+          <> " Checking #assume " <> intercalate " " [ Rzk.printTree name | name <- names ] ) $ do+        withCommand command $ do+          ty' <- typecheck (toTerm' ty) universeT+          loc <- asks location+          let decls = [ Decl (varIdentAt path name) ty' Nothing True [] loc | name <- names ]+          fmap (first (decls <>)) $+            localDeclsPrepared decls $+              go (i + 1) moreCommands++    go  i (command@(Rzk.CommandSection _loc name) : moreCommands) = do+      withCommand command $ do+        (sectionCommands, moreCommands') <- splitSectionCommands name moreCommands+        withSection (Just name) (go i sectionCommands) $ do+          go (i + countCommands sectionCommands) moreCommands'++    go  _i (command@(Rzk.CommandSectionEnd _loc endName) : _moreCommands) = do+      withCommand command $+        issueTypeError $ TypeErrorOther $+          "unexpected #end " <> Rzk.printTree endName <> ", no section was declared!"+++splitSectionCommands :: Rzk.SectionName -> [Rzk.Command] -> TypeCheck var ([Rzk.Command], [Rzk.Command])+splitSectionCommands name [] =+  issueTypeError (TypeErrorOther $ "Section " <> Rzk.printTree name <> " is not closed with an #end")+splitSectionCommands name (Rzk.CommandSection _loc name' : moreCommands) = do+  (cs1, cs2) <- splitSectionCommands name' moreCommands+  (cs3, cs4) <- splitSectionCommands name cs2+  return (cs1 <> cs3, cs4)+splitSectionCommands name (Rzk.CommandSectionEnd _loc endName : moreCommands) = do+  when (Rzk.printTree name /= Rzk.printTree endName) $+    issueTypeError $ TypeErrorOther $+      "unexpected #end " <> Rzk.printTree endName <> ", expecting #end " <> Rzk.printTree name+  return ([], moreCommands)+splitSectionCommands name (command : moreCommands) = do+  (cs1, cs2) <- splitSectionCommands name moreCommands+  return (command : cs1, cs2)++setOption :: String -> String -> TypeCheck var a -> TypeCheck var a+setOption "verbosity" = \case+  "debug"   -> localVerbosity Debug+  "normal"  -> localVerbosity Normal+  "silent"  -> localVerbosity Silent+  _ -> const $+    issueTypeError $ TypeErrorOther "unknown verbosity level (use \"debug\", \"normal\", or \"silent\")"+setOption "render" = \case+  "svg"   -> localRenderBackend (Just RenderSVG)+  "latex" -> localRenderBackend (Just RenderLaTeX)+  "none"  -> localRenderBackend Nothing+  _ -> const $+    issueTypeError $ TypeErrorOther "unknown render backend (use \"svg\", \"latex\", or \"none\")"+-- | Render the shape only, hiding the proof term (drop the @\<title\>@+-- everywhere and blank interior labels), so a worked term can be shown as the+-- cell it builds without giving the term away (see 'renderHideTerm').+setOption "render-hide-term" = \case+  "yes" -> localHideTerm True+  "no"  -> localHideTerm False+  _ -> const $+    issueTypeError $ TypeErrorOther "unknown value for \"render-hide-term\" (use \"yes\" or \"no\")"+setOption optionName = const $ const $+  issueTypeError $ TypeErrorOther ("unknown option " <> show optionName)++unsetOption :: String -> TypeCheck var a -> TypeCheck var a+unsetOption "verbosity" = localVerbosity (verbosity emptyContext)+unsetOption "render" = localRenderBackend (renderBackend emptyContext)+unsetOption "render-hide-term" = localHideTerm (renderHideTerm emptyContext)+unsetOption optionName = const $+  issueTypeError $ TypeErrorOther ("unknown option " <> show optionName)++paramToParamDecl :: Rzk.Param -> TypeCheck var [Rzk.ParamDecl]+paramToParamDecl (Rzk.ParamPatternShapeDeprecated loc pat cube tope) = pure+  [ Rzk.ParamTermShape loc (patternToTerm pat) cube tope ]+paramToParamDecl (Rzk.ParamPatternShape loc pats cube tope) = pure+  [ Rzk.ParamTermShape loc (patternToTerm pat) cube tope | pat <- pats]+paramToParamDecl (Rzk.ParamPatternType loc pats ty) = pure+  [ Rzk.ParamTermType loc (patternToTerm pat) ty | pat <- pats ]+paramToParamDecl Rzk.ParamPattern{} = issueTypeError $+  TypeErrorOther "untyped pattern in parameters"+paramToParamDecl (Rzk.ParamPatternModalType loc pats mc ty) = pure+  [ Rzk.ParamTermModalType loc (patternToTerm pat) mc ty | pat <- pats ]+paramToParamDecl (Rzk.ParamPatternModalShape loc pats mc cube tope) = pure+  [ Rzk.ParamTermModalShape loc (patternToTerm pat) mc cube tope | pat <- pats ]++addParamDecls :: [Rzk.ParamDecl] -> Rzk.Term -> Rzk.Term+addParamDecls [] = id+addParamDecls (paramDecl : paramDecls)+  = Rzk.TypeFun Nothing paramDecl . addParamDecls paramDecls++addParams :: [Rzk.Param] -> Rzk.Term -> Rzk.Term+addParams []     = id+addParams params = Rzk.Lambda Nothing params++data TypeError var+  = TypeErrorOther String+  | TypeErrorUnify (TermT var) (TermT var) (TermT var)+  | TypeErrorUnifyTerms (TermT var) (TermT var)+  | TypeErrorNotPair (TermT var) (TermT var)+  | TypeErrorNotModal (Term var) TModality (TermT var)+  | TypeErrorModalityMismatch TModality TModality (Term var)+  | TypeErrorUnaccessibleVar var TModality TModality+  | TypeErrorNotTypeInModal (TermT var)+  | TypeErrorNotFunction (TermT var) (TermT var)+  | TypeErrorUnexpectedLambda (Term var) (TermT var)+  | TypeErrorUnexpectedPair (Term var) (TermT var)+  | TypeErrorUnexpectedRefl (Term var) (TermT var)+  | TypeErrorCannotInferBareLambda (Term var)+  | TypeErrorCannotInferBareRefl (Term var)+  | TypeErrorCannotInferHole (Term var)+  | TypeErrorUnsolvedHole (Maybe VarIdent) (TermT var)+  | TypeErrorUndefined var+  | TypeErrorTopeNotSatisfied [TermT var] (TermT var)+  | TypeErrorTopeContextDisjoint (TermT var) [TermT var]+  | TypeErrorTopesNotEquivalent (TermT var) (TermT var)+  | TypeErrorInvalidArgumentType (Term var) (TermT var)+  | TypeErrorDuplicateTopLevel [VarIdent] VarIdent+  | TypeErrorUnusedVariable var (TermT var)+  | TypeErrorUnusedUsedVariables [var] var+  | TypeErrorImplicitAssumption (var, TermT var) var+  deriving (Functor, Foldable)++data TypeErrorInContext var = TypeErrorInContext+  { typeErrorError   :: TypeError var+  , typeErrorContext :: Context var+  } deriving (Functor, Foldable)++data TypeErrorInScopedContext var+  = PlainTypeError (TypeErrorInContext var)+  | ScopedTypeError (Maybe VarIdent) (TypeErrorInScopedContext (Inc var))+  deriving (Functor, Foldable)++type TypeError' = TypeError VarIdent++ppModality :: TModality -> String+ppModality = \case+  Flat  -> "♭"+  Sharp -> "♯"+  Op    -> "ᵒᵖ"+  Id    -> "_id"++-- | Render a type error, folding pattern-binder projections (e.g. @π₁ x@ back to+-- the user's @t@) and showing a bare pattern point as the pattern, using the+-- context's freshened binders (see 'contextBinders').+ppTypeError' :: [(VarIdent, Binder)] -> TypeError' -> String+ppTypeError' fbs = \case+  TypeErrorOther msg -> msg+  TypeErrorUnify term expected actual -> block TopDown+    [ "cannot unify expected type"+    , "  " <> ppU (untyped expected)+    , "with actual type"+    , "  " <> ppU (untyped actual)+    , "for term"+    , "  " <> ppU (untyped term) ]+  TypeErrorUnifyTerms expected actual -> block TopDown+    [ "cannot unify term"+    , "  " <> ppU (untyped expected)+    , "with term"+    , "  " <> ppU (untyped actual) ]+  TypeErrorNotPair term ty -> block TopDown+    [ "expected a cube product or dependent pair"+    , "but got type"+    , "  " <> ppU (untyped ty)+    , "for term"+    , "  " <> ppU (untyped term)+    , case ty of+        TypeFunT{} -> "\nPerhaps the term is applied to too few arguments?"+        _          -> ""+    ]+  TypeErrorNotModal term m ty -> block TopDown+    [ "expected modal type " <> ppModality m <> " ?"+    , "but got type"+    , "  " <> ppU (untyped ty)+    , "for term"+    , "  " <> ppU term+    ]+  TypeErrorModalityMismatch expected actual term -> block TopDown+    [ "modality mismatch"+    , "  expected " <> ppModality expected+    , "  but got  " <> ppModality actual+    , "for term"+    , "  " <> ppU term+    ]+  TypeErrorUnaccessibleVar _var varMod locks -> block TopDown+    [ "unaccessible var with modality " <> ppModality varMod+    , "  under locks " <> ppModality locks+    ]+  TypeErrorNotTypeInModal ty -> block TopDown+    [ "expected a type inside modal type"+    , "but got"+    , "  " <> ppU (untyped ty)+    ]++  TypeErrorUnexpectedLambda term ty -> block TopDown+    [ "unexpected lambda abstraction"+    , "  " <> ppU term+    , "when typechecking against a non-function type"+    , "  " <> ppTyped ty+    ]+  TypeErrorUnexpectedPair term ty -> block TopDown+    [ "unexpected pair"+    , "  " <> ppU term+    , "when typechecking against a type that is not a product or a dependent sum"+    , "  " <> ppTyped ty+    ]+  TypeErrorUnexpectedRefl term ty -> block TopDown+    [ "unexpected refl"+    , "  " <> ppU term+    , "when typechecking against a type that is not an identity type"+    , "  " <> ppTyped ty+    ]++  TypeErrorNotFunction term ty -> block TopDown+    [ "expected a function or extension type"+    , "but got type"+    , "  " <> ppU (untyped ty)+    , "for term"+    , "  " <> ppU (untyped term)+    , case term of+        AppT _ty f _x -> "\nPerhaps the term\n  " <> ppU (untyped f) <> "\nis applied to too many arguments?"+        _ -> ""+    ]+  TypeErrorCannotInferBareLambda term -> block TopDown+    [ "cannot infer the type of the argument"+    , "in lambda abstraction"+    , "  " <> ppU term+    ]+  TypeErrorCannotInferBareRefl term -> block TopDown+    [ "cannot infer the type of term"+    , "  " <> ppU term+    ]+  TypeErrorCannotInferHole term -> block TopDown+    [ "cannot infer the type of a hole"+    , "  " <> ppU term+    , "a hole is only allowed where its type is already known (checking position)"+    ]+  TypeErrorUnsolvedHole mname goal -> block TopDown+    [ "found an unsolved hole" <> maybe "" (\name -> " ?" <> show name) mname+    , "expected type (goal):"+    , "  " <> ppU (untyped goal)+    ]+  TypeErrorUndefined var -> block TopDown+    [ "undefined variable: " <> show (Pure var :: Term') ]+  TypeErrorTopeNotSatisfied topes tope -> block TopDown+    [ "local context is not included in (does not entail) the tope"+    , "  " <> ppU (untyped tope)+    , "in local context (normalised)"+    , intercalate "\n" (map ("  " <>) (map ppTyped topes))] -- FIXME: remove+  TypeErrorTopeContextDisjoint tope topes -> block TopDown+    [ "the tope"+    , "  " <> ppU (untyped tope)+    , "is disjoint from the local tope context (their conjunction is the empty tope ⊥),"+    , "so this restriction face or recOR branch is vacuous everywhere"+    , "in local context (normalised)"+    , intercalate "\n" (map ("  " <>) (map ppTyped topes))]+  TypeErrorTopesNotEquivalent expected actual -> block TopDown+    [ "expected tope"+    , "  " <> ppU (untyped expected)+    , "but got"+    , "  " <> ppU (untyped actual) ]++  TypeErrorInvalidArgumentType argType argKind -> block TopDown+    [ "invalid function parameter type"+    , "  " <> ppU argType+    , "function parameter can be a cube, a shape, or a type"+    , "but given parameter type has type"+    , "  " <> ppU (untyped argKind)+    ]++  TypeErrorDuplicateTopLevel previous lastName -> block TopDown+    [ "duplicate top-level definition"+    , "  " <> ppVarIdentWithLocation lastName+    , "previous top-level definitions found at"+    , intercalate "\n"+      [ "  " <> ppVarIdentWithLocation name+      | name <- previous ]+    ]++  TypeErrorUnusedVariable name type_ -> block TopDown+    [ "unused variable"+    , "  " <> Rzk.printTree (getVarIdent name) <> " : " <> ppU (untyped type_)+    ]++  TypeErrorUnusedUsedVariables vars name -> block TopDown+    [ "unused variables"+    , "  " <> intercalate " " (map (Rzk.printTree . getVarIdent) vars)+    , "declared as used in definition of"+    , "  " <> Rzk.printTree (getVarIdent name)+    ]++  TypeErrorImplicitAssumption (a, aType) name -> block TopDown+    [ "implicit assumption"+    , "  " <> Rzk.printTree (getVarIdent a) <> " : " <> ppU (untyped aType)+    , "used in definition of"+    , "  " <> Rzk.printTree (getVarIdent name)+    ]+  where+    ppU :: Term' -> String+    ppU = ppFoldU fbs+    ppTyped :: TermT' -> String+    ppTyped = ppFoldT fbs+++-- | The pattern binders in scope, freshened and keyed by their (current) name,+-- together with the projection-folding map derived from them. Both share the+-- same freshened component names, so a term's projections and the binder shown+-- in the context agree.+contextBinders+  :: Context VarIdent+  -> ([(VarIdent, Binder)], [(VarIdent, [([Proj], VarIdent)])])+contextBinders ctx = (fbs, binderProjMap id fbs)+  where+    mapping = [ (v, v) | (v, _) <- varTypes ctx ]+    fbs     = freshBinders id mapping (varBinders ctx)++-- | Render an (untyped) term for an error or diagnostic message, given the+-- context's freshened pattern binders: fold a pattern-binder variable's+-- projections to their component names, then expand a bare use of the variable+-- to the pattern itself (see 'foldBinderProjections' and 'restorePatternVars').+-- An empty binder list renders the term as-is.+ppFoldU :: [(VarIdent, Binder)] -> Term' -> String+ppFoldU fbs =+  show . restorePatternVars fbs . foldBinderProjections (binderProjMap id fbs)++-- | Like 'ppFoldU' for a type-annotated term, shown as @term : type@ with the+-- same folding and pattern restoration applied to both halves.+ppFoldT :: [(VarIdent, Binder)] -> TermT' -> String+ppFoldT fbs t0 =+  case foldBinderProjectionsT (binderProjMap id fbs) t0 of+    t@Pure{}               -> r t+    t@(Free (AnnF info _)) -> r t <> " : " <> r (infoType info)+  where+    r :: TermT' -> String+    r = show . restorePatternVars fbs . untyped++ppTypeErrorInContext :: OutputDirection -> TypeErrorInContext VarIdent -> String+ppTypeErrorInContext dir TypeErrorInContext{..} = block dir+  [ ppTypeError' fbs typeErrorError+  , ""+  , ppContext' dir typeErrorContext+  ]+  where+    (fbs, _) = contextBinders typeErrorContext++ppTypeErrorInScopedContextWith'+  :: OutputDirection+  -> [VarIdent]+  -> [VarIdent]+  -> TypeErrorInScopedContext VarIdent+  -> String+ppTypeErrorInScopedContextWith' dir used vars = \case+  PlainTypeError err -> ppTypeErrorInContext dir err+  ScopedTypeError orig err -> withFresh orig $ \(x, xs) ->+    ppTypeErrorInScopedContextWith' dir (x:used) xs $ fmap (g x) err+  where+    g x Z     = x+    g _ (S y) = y++    withFresh Nothing f =+      case vars of+        x:xs -> f (x, xs)+        _    -> panicImpossible "not enough fresh variables"+    withFresh (Just z) f = f (z', filter (/= z') vars)    -- FIXME: very inefficient filter+      where+        z' = refreshVar used z -- FIXME: inefficient++ppTypeErrorInScopedContext' :: OutputDirection -> TypeErrorInScopedContext VarIdent -> String+ppTypeErrorInScopedContext' dir err =+  ppTypeErrorInScopedContextWith' dir vars (defaultVarIdents \\ vars) err+  where+    vars = nub (foldMap pure err)++issueWarning :: String -> TypeCheck var ()+issueWarning message = do+  trace ("Warning: " <> message) $+    return ()++fromTypeError :: TypeError var -> TypeCheck var (TypeErrorInScopedContext var)+fromTypeError err = do+  context <- ask+  return $ PlainTypeError $ TypeErrorInContext+    { typeErrorError = err+    , typeErrorContext = context+    }++issueTypeError :: TypeError var -> TypeCheck var a+issueTypeError err = fromTypeError err >>= throwError++panicImpossible :: String -> a+panicImpossible msg = error $ unlines+  [ "PANIC! Impossible happened (" <> msg <> ")!"+  , "Please, report a bug at https://github.com/rzk-lang/rzk/issues"+    -- TODO: add details and/or instructions how to produce an artifact for reproducing+  ]++data Action var+  = ActionTypeCheck (Term var) (TermT var)+  | ActionUnify (TermT var) (TermT var) (TermT var)+  | ActionUnifyTerms (TermT var) (TermT var)+  | ActionInfer (Term var)+  | ActionContextEntailedBy [TermT var] (TermT var)+  | ActionContextEntails [TermT var] (TermT var)+  | ActionContextEntailsUnion [TermT var] [TermT var]+  | ActionWHNF (TermT var)+  | ActionNF (TermT var)+  | ActionCheckCoherence (TermT var, TermT var) (TermT var, TermT var)+  | ActionCloseSection (Maybe Rzk.SectionName)+  | ActionCheckLetValue (Maybe VarIdent)+  deriving (Functor, Foldable)++type Action' = Action VarIdent++-- | Freshen the compound (pattern) binders in scope so their component names+-- avoid the display names already in use and one another. Returns each relevant+-- variable paired with its freshened binder. Variables bound to a single name+-- are omitted: they need no projection folding and are displayed normally.+freshBinders+  :: Eq var+  => (var -> VarIdent)+  -> [(var, VarIdent)]+  -> [(var, Binder)]+  -> [(var, Binder)]+freshBinders name mapping binders = go (map (name . fst) mapping) compound+  where+    compound = [ (v, b) | (v, b) <- binders, binderIsCompound b, v `elem` map fst mapping ]+    go _    []             = []+    go used ((v, b) : rest) =+      let b' = freshenBinderLeaves used b+      in (v, b') : go (binderLeaves b' ++ used) rest++-- | The projection-folding map for rendering: each pattern-binder variable's+-- display name mapped to the projection paths of its component names (e.g.+-- @π₁@ ↦ @t@, @π₂@ ↦ @s@). Ordinary projections (of non-pattern variables) are+-- left untouched.+binderProjMap :: (var -> VarIdent) -> [(var, Binder)] -> [(VarIdent, [([Proj], VarIdent)])]+binderProjMap name fbs = [ (name v, binderPaths b) | (v, b) <- fbs ]++ppTermInContext :: Eq var => TermT var -> TypeCheck var String+ppTermInContext term =  do+  vars <- freeVarsT_ term+  let mapping = zip vars defaultVarIdents+      toRzkVarIdent origs var = fromMaybe "_" $+        join (lookup var origs) <|> lookup var mapping+  origs <- asks varOrigs+  binders <- asks varBinders+  let name = toRzkVarIdent origs+      fbs  = freshBinders name mapping binders+  return (show (restorePatternVars [ (name v, b) | (v, b) <- fbs ]+                  (foldBinderProjections (binderProjMap name fbs)+                    (untyped (name <$> term)))))++-- | Classify a (WHNF) type as a cube, so cube variables (e.g. @t : 2@) are+-- shown separately from ordinary term variables in a hole's context.+isCubeType :: TermT var -> Bool+isCubeType = \case+  CubeUnitT{}     -> True+  Cube2T{}        -> True+  CubeIT{}        -> True+  CubeProductT{}  -> True+  UniverseCubeT{} -> True+  _               -> False++-- | Is a (WHNF) goal type in the cube or tope layer, so a hole of this type is a+-- cube point or a tope rather than a term? Used to suppress type-layer-specific+-- hole candidates (@recOR@, @recBOT@), which cannot inhabit a cube or a tope.+isCubeOrTopeType :: TermT var -> Bool+isCubeOrTopeType t = isCubeType t || case t of+  UniverseTopeT{} -> True+  _               -> False++-- | Is this term a hole? Holes only exist in lenient mode (see 'allowHoles');+-- they are opaque placeholders standing for a term of the expected type.+isHoleT :: TermT var -> Bool+isHoleT HoleT{} = True+isHoleT _       = False++-- | Does this term contain a hole anywhere (including nested, e.g. @f ?@)?+-- Used to keep unification lenient around incomplete terms: a term with an+-- unfilled hole cannot be meaningfully compared, so a unification that would+-- otherwise fail is deferred. Evaluated only on the failure path.+containsHole :: TermT var -> Bool+containsHole = \case+  HoleT{}             -> True+  Pure{}              -> False+  Free (AnnF _ termf) -> bifoldr ((||) . containsHole) ((||) . containsHole) False termf++-- | All ways to eliminate a hypothesis into a value usable at a goal. Given a+-- @target@ type and a hypothesis /term/ (e.g. @Pure v@ for a context variable),+-- return every elimination spine over that term whose type fits the target (or+-- a subtype of it). Arguments introduced by application are left as holes for+-- the caller to fill later. A value that already fits is returned as-is; a+-- function is applied to holes; a Σ-type (or anything that unfolds to one, e.g.+-- @is-contr@) is projected, possibly repeatedly — so e.g.+-- @first (first (is-segal-A ? ? ? ? ?))@ is discovered.+--+-- The search is driven uniformly by the eliminators a (weak head normal) type+-- admits (see 'eliminatorsOf'), so adding a new eliminator extends it without+-- touching the search. Depth is bounded by 'maxEliminationDepth'.+allEliminationsInto+  :: Eq var => TermT var -> TermT var -> TypeCheck var [TermT var]+allEliminationsInto target = go maxEliminationDepth+  where+    go depth term = do+      ty   <- typeOf term+      fits <- fitsInto term ty target+      deeper <-+        if depth <= 0+          then pure []+          else do+            elims <- eliminatorsOf ty+            concat <$> mapM (\wrap -> go (depth - 1) (wrap term)) elims+      pure ([term | fits] <> deeper)++-- | How deep an elimination spine 'allEliminationsInto' will build. A temporary+-- fixed bound: seven is enough for the spines seen so far (fully applying a+-- five-argument hypothesis and projecting twice), and a larger bound mostly adds+-- self-referential spines (a built result applied again). It should be made+-- configurable, and likely raised, once there is more evidence of what real+-- goals need. The chain only branches at Σ-types, which are shallow, so the+-- search stays small.+maxEliminationDepth :: Int+maxEliminationDepth = 7++-- | Whether a term of the given (whnf) type may stand where a value of the+-- @target@ type is expected: the two types unify under 'structuralHoleUnify',+-- so a hole acts as a wildcard leaf but a structural mismatch around it is still+-- a mismatch (an under-applied function does not match an extension-type goal,+-- but a partial application that genuinely fits an ordinary-function goal does).+--+-- Outer type restrictions are stripped from both sides first: an extension-type+-- boundary is satisfied by later refinement, not by the choice of spine, and+-- matching against the restricted goal would reject the very spine that+-- introduces the holes meant to satisfy it (e.g. @f ?@ at a boundary goal).+--+-- Holes or constraints recorded while probing are discarded, so this is a pure+-- yes/no query.+fitsInto :: Eq var => TermT var -> TermT var -> TermT var -> TypeCheck var Bool+fitsInto term ty target = do+  ty'     <- stripTypeRestrictions <$> whnfT ty+  target' <- stripTypeRestrictions <$> whnfT target+  censor (const []) $ local structuralHoleUnify+    ((unify (Just term) target' ty' >> pure True) `catchError` \_ -> pure False)++-- | The eliminators a value of the given (weak head normal) type admits, each+-- as a function wrapping the eliminated term. A Π-type is eliminated by+-- application to a fresh hole; a Σ-type by either projection; an identity type+-- by path induction (@idJ@), with the motive and base case left as holes.+-- Anything else admits no simple eliminator.+eliminatorsOf :: Eq var => TermT var -> TypeCheck var [TermT var -> TermT var]+eliminatorsOf ty =+  case stripTypeRestrictions ty of+    TypeFunT _ty _orig _md param _mtope ret ->+      pure [ \term -> let h = mkHole param in appT (substituteT h ret) term h ]+    TypeSigmaT _ty _orig _md a b ->+      pure [ \term -> firstT a term+           , \term -> secondT (substituteT (firstT a term) b) term ]+    -- A cube point pair (e.g. a pattern-bound @(t , s) : 2 × 2@) projects to its+    -- coordinates; rzk renders those projections back as the pattern names.+    CubeProductT _ty a b ->+      pure [ \term -> firstT a term+           , \term -> secondT b term ]+    -- A path @p : a =_A x@ is eliminated by path induction. The motive+    -- @C : (z : A) → (a =_A z) → U@ is always a function, so we introduce it+    -- straight away as @\\ b q → ?@ rather than leaving it a bare hole: the spine+    -- @idJ A a (\\ b q → ?) ? x p@ then has type @C x p@, which β-reduces to that+    -- inner hole — so J fits any goal (the player fills the motive and the base+    -- case @d : C a refl@). The two holes are the motive predicate and the base.+    TypeIdT _ty a mtA x -> do+      tA <- maybe (typeOf a) pure mtA+      let -- the motive predicate body, a type, under the two motive binders+          cBody  = mkHole universeT+          cInner = lambdaT (typeFunT (BinderVar Nothing) Id+                              (typeIdT (S <$> a) (Just (S <$> tA)) (Pure Z)) Nothing universeT)+                     (BinderVar (Just (fromString "q"))) Nothing cBody+          cType  = typeFunT (BinderVar Nothing) Id tA Nothing $+                     typeFunT (BinderVar Nothing) Id+                       (typeIdT (S <$> a) (Just (S <$> tA)) (Pure Z)) Nothing universeT+          c      = lambdaT cType (BinderVar (Just (fromString "b"))) Nothing cInner+          dType  = appT universeT+                     (appT (typeFunT (BinderVar Nothing) Id (typeIdT a (Just tA) a) Nothing universeT) c a)+                     (reflT (typeIdT a (Just tA) a) Nothing)+          d      = mkHole dType+          motiveAt y p = appT universeT+            (appT (typeFunT (BinderVar Nothing) Id (typeIdT a (Just tA) y) Nothing universeT) c y) p+      pure [ \p -> idJT (motiveAt x p) tA a c d x p ]+    _ -> pure []+  where+    mkHole t = HoleT TypeInfo{ infoType = t, infoWHNF = Nothing, infoNF = Nothing } Nothing++-- | The binder for a λ introduced over a domain type. A binder the type already+-- gives as a pattern is kept as-is — it carries the user's own names (e.g.+-- @(t , s)@). Otherwise an /explicit/ (pre-whnf) Σ-type or product domain is+-- destructured into a fresh pair pattern, recursively for products, so that a+-- nameless @2 × 2 × 2@ parameter is introduced as @((t1 , t2) , t3)@ rather than+-- a single opaque variable. Any other domain keeps its single binder.+--+-- Leaves are named by what they range over: a cube-product component is a point,+-- named @t@/@s@-style as @tN@; a Σ component is a term, named @xN@. The names are+-- display-only (the body is a hole that does not mention them) and carry a+-- shared running index, so every leaf in the pattern is distinct.+destructuringBinder :: Binder -> TermT var -> Binder+destructuringBinder orig param = case orig of+  BinderPair{} -> orig                 -- already a pattern: keep the user's names+  _ -> case param of+    CubeProductT{} -> fst (go 1 param)+    TypeSigmaT{}   -> fst (go 1 param)+    _              -> orig             -- not a product/Σ: leave the binder alone+  where+    -- a product/Σ becomes a pair; we recurse into a product's components (plain+    -- types) but not under a Σ's binder (a scope). A leaf is named by its+    -- enclosing constructor: @tN@ under a cube product, @xN@ under a Σ.+    go n = \case+      CubeProductT _ a b ->+        let (l, n')  = child "t" n  a+            (r, n'') = child "t" n' b+        in (BinderPair l r, n'')+      TypeSigmaT _ _ _md a _b ->+        let (l, n') = child "x" n a+        in (BinderPair l (BinderVar (Just (leaf "x" n'))), n' + 1)+      _ -> (BinderVar (Just (leaf "t" n)), n + 1)  -- unreached: go is called on products only+    child pfx n = \case+      c@CubeProductT{} -> go n c+      c@TypeSigmaT{}   -> go n c+      _                -> (BinderVar (Just (leaf pfx n)), n + 1)+    leaf pfx n = fromString (pfx <> show n :: String)++-- | All ways to introduce a value /of/ a goal type by its head constructor,+-- leaving the constituents as holes. Given a @target@ type, return its+-- introduction forms:+--+--   * a Π-type is introduced by a λ-abstraction over a hole body (@\\ x -> ?@);+--     the binder is taken from the type, so a pattern domain (e.g. a @Δ²@ point+--     @(t , s)@) is introduced as @\\ (t , s) -> ?@;+--   * a Σ-type or a cube product by a pair of holes (@(? , ?)@);+--   * an identity type by @refl@, but only when its two endpoints already agree+--     (otherwise @refl@ would not typecheck);+--   * the unit type by @unit@;+--   * the tope universe by each tope constructor — @TOP@, @BOT@, @? ≡ ?@,+--     @? ≤ ?@, @? ∧ ?@, @? ∨ ?@ — so a shape (a hole of type @TOPE@) can be+--     built up by tapping.+--+-- Any other type admits no simple introduction. Unlike 'allEliminationsInto'+-- this does not search: a type has at most one introduction form (the tope+-- universe is the one exception), read off its (weak head normal) head+-- constructor. Outer type restrictions are stripped first, so an extension type+-- is introduced by the form of its underlying type (its boundary is met by later+-- refinement of the holes, not by the choice of constructor).+--+-- The λ binder of a Π-introduction is freshened against @inScope@ (the names+-- already visible at the hole), so introducing over a type whose own definition+-- reuses an in-scope name (e.g. @hom@, whose internal binder is @t@) yields+-- @\\ t₁ -> ?@ rather than a @t@ that shadows the existing one.+allIntroductionsOf :: Eq var => TermT var -> [VarIdent] -> TypeCheck var [TermT var]+allIntroductionsOf target inScope = do+  target' <- stripTypeRestrictions <$> whnfT target+  case target' of+    TypeFunT _ty orig _md param _mtope ret ->+      let binder = freshenBinderLeaves inScope (destructuringBinder orig param)+       in pure [ lambdaT target' binder Nothing (mkHole ret) ]+    TypeSigmaT _ty _orig _md a b ->+      let h = mkHole a in pure [ pairT target' h (mkHole (substituteT h b)) ]+    CubeProductT _ty a b ->+      pure [ pairT target' (mkHole a) (mkHole b) ]+    TypeIdT _ty a _tA b -> do+      agree <- endpointsAgree a b+      pure [ reflT target' Nothing | agree ]+    TypeUnitT{} -> pure [ unitT ]+    -- the tope universe: every tope constructor builds a tope, so all are+    -- introductions of a shape goal. Point arguments (of ≡, ≤) and tope+    -- arguments (of ∧, ∨) are left as holes.+    UniverseTopeT{} ->+      let point = mkHole (mkHole cubeT)  -- a point of an as-yet-unknown cube+          tope  = mkHole target'         -- a tope (its type is the tope universe)+       in pure [ topeTopT, topeBottomT+               , topeEQT  point point, topeLEQT point point+               , topeAndT tope  tope,  topeOrT  tope  tope ]+    _ -> pure []+  where+    mkHole t = HoleT TypeInfo{ infoType = t, infoWHNF = Nothing, infoNF = Nothing } Nothing++-- | Whether the two endpoints of an identity type are definitionally equal, so+-- that @refl@ inhabits it. Like 'fitsInto', any holes or constraints recorded+-- while probing are discarded, leaving a pure yes\/no query.+endpointsAgree :: Eq var => TermT var -> TermT var -> TypeCheck var Bool+endpointsAgree a b =+  censor (const [])+    ((unify Nothing a b >> pure True) `catchError` \_ -> pure False)++-- | Whether the local tope context is contradictory (entails ⊥). Reads the+-- precomputed flag when present, falling back to an entailment check. Used to+-- decide whether @recBOT@ (ex falso) is available.+contextEntailsBottom :: Eq var => TypeCheck var Bool+contextEntailsBottom = asks localTopesEntailBottom >>= \case+  Just b  -> return b+  Nothing -> asks localTopesNF >>= (`entailM` topeBottomT)++-- | Ex falso: in a contradictory tope context @recBOT@ inhabits any type, so it+-- is a candidate for every goal there (and only there — elsewhere it would not+-- typecheck). Independent of the goal and of the local hypotheses.+recBottomCandidates :: Eq var => TypeCheck var [TermT var]+recBottomCandidates = do+  vacuous <- contextEntailsBottom+  pure [ recBottomT | vacuous ]++-- | Whether the local tope context is covered by the union of the given topes —+-- the coverage obligation of @recOR@ (see 'contextEntailsUnion'), but as a pure+-- yes\/no query rather than a check that issues an error.+coverageHolds :: Eq var => [TermT var] -> TypeCheck var Bool+coverageHolds topes = do+  contextTopes <- asks localTopesNF+  topesNF      <- mapM nfTope topes+  contextTopes `entailM` foldr topeOrT topeBottomT topesNF++-- | Tope case-split moves: ways to build a value of the goal by @recOR@,+-- splitting the proof over a cover of the local tope context. Three sources,+-- offered together (the UI ranks and filters):+--+--   * each disjunction @ψ ∨ φ@ already in the context becomes+--     @recOR(ψ ↦ ?, φ ↦ ?)@ — its cover is immediate;+--   * when the goal is an extension type, its restriction faces are a cover+--     candidate @recOR(ψ₁ ↦ ?, …)@, offered only when they actually cover the+--     context (so the move typechecks);+--   * a generic two-way split @recOR(? ↦ ?, ? ↦ ?)@ with the guards left as+--     holes, for an unusual split the player fills in by hand.+--+-- All three are offered only in a setting where a split makes sense — a cube+-- variable is in scope, the context has a non-trivial tope, or the goal is a+-- restricted type — so an ordinary (tope-free) goal is left alone.+recOrCandidates :: Eq var => TermT var -> TypeCheck var [TermT var]+recOrCandidates goal = do+  goalW   <- whnfT goal+  topes   <- asks (filter (/= topeTopT) . availableTopes)+  locals  <- asks (filter (not . varIsTopLevel . snd) . varInfos)+  hasCube <- or <$> mapM (fmap isCubeType . whnfT . varType . snd) locals+  let stripped     = stripTypeRestrictions goalW+      mkRecOr gs   = recOrT stripped [ (g, mkHole stripped) | g <- gs ]+      fromContext  = [ mkRecOr [l, r] | TopeOrT _ l r <- topes ]+      faces        = case goalW of+        TypeRestrictedT _ _ rs -> map fst rs+        _                      -> []+      isRestricted = case goalW of TypeRestrictedT{} -> True; _ -> False+      inShape      = hasCube || not (null topes) || isRestricted+      generic      = [ recOrT stripped [ (mkHole topeT, mkHole stripped)+                                       , (mkHole topeT, mkHole stripped) ]+                     | inShape ]+  fromFaces <- if length faces >= 2+    then do covered <- coverageHolds faces+            pure [ mkRecOr faces | covered ]+    else pure []+  pure (fromContext <> fromFaces <> generic)+  where+    mkHole t = HoleT TypeInfo{ infoType = t, infoWHNF = Nothing, infoNF = Nothing } Nothing++-- | Record the goal and local context at a hole (lenient mode only). The goal,+-- the local hypotheses, and the tope assumptions are all rendered to+-- user-facing 'VarIdent' names here — reusing the same resolution as+-- 'ppTermInContext' — so the resulting 'HoleInfo' is independent of the De+-- Bruijn scope. The global environment is deliberately excluded (only+-- @varIsTopLevel == False@ locals are kept), and locals are split into cube+-- variables and ordinary term variables.+recordHole :: Eq var => Maybe VarIdent -> TermT var -> TypeCheck var ()+recordHole mname goalTy = recordHoleShape mname goalTy Nothing++-- | Record a hole. When the hole is the argument of a shape-restricted function+-- its goal is a /shape/: the cube @goalTy@ together with a membership tope. The+-- tope is a scope over the shape's bound variable (the third argument carries+-- the declared binder name, if any, and the tope); it is rendered under that+-- binder so the goal reads @(binder : goalTy | tope)@.+recordHoleShape+  :: Eq var+  => Maybe VarIdent+  -> TermT var+  -> Maybe (Binder, TermT (Inc var))+  -> TypeCheck var ()+recordHoleShape mname goalTy mshape = do+  goal'     <- whnfT goalTy+  locals    <- asks (filter (not . varIsTopLevel . snd) . varInfos)+  -- named top-level lemmas the caller allow-listed for hints (see 'hintLemmas').+  -- They feed the candidate-elimination loop only — not the local context shown+  -- to the user, since they are global definitions, not local hypotheses.+  lemmas    <- asks hintLemmas+  lemmaVars <- asks (filter (\(_, i) -> varIsTopLevel i && maybe False (`elem` lemmas) (binderName (varOrig i))) . varInfos)+  cubeFlags <- mapM (fmap isCubeType . whnfT . varType . snd) locals+  topes     <- asks (filter (/= topeTopT) . availableTopes)+  origs     <- asks varOrigs+  binders   <- asks varBinders+  loc       <- asks location+  -- for each local hypothesis (and allow-listed lemma), the elimination spines+  -- that land in the goal (arguments left as holes). Probing must not leak holes+  -- into the recorded output, hence 'censor'.+  candidates <- censor (const []) $ do+    elims  <- concat <$> mapM (\(v, _) -> allEliminationsInto goalTy (Pure v)) (locals ++ lemmaVars)+    -- context-driven moves (independent of the goal's head and the hypotheses):+    -- ex falso in a contradictory context, and tope case-splits. recOR and recBOT+    -- are term-level eliminators, so they are offered only for a term goal — not+    -- when the hole is a cube point or a tope, where they cannot appear.+    let termLayer = not (isCubeOrTopeType goal')+    recbot <- if termLayer then recBottomCandidates    else pure []+    recor  <- if termLayer then recOrCandidates goalTy else pure []+    pure (elims <> recbot <> recor)+  let shapeTope     = snd <$> mshape+      shapeTopeVars = maybe [] (\t -> [ v | S v <- foldr (:) [] t ]) shapeTope+  varsList  <- concat <$> mapM freeVarsT_ (goal' : map (varType . snd) (locals ++ lemmaVars) ++ topes)+  let mapping  = zip (nub (varsList ++ shapeTopeVars ++ map fst (locals ++ lemmaVars))) defaultVarIdents+      name v   = fromMaybe "_" (join (lookup v origs) <|> lookup v mapping)+      fbs      = freshBinders name mapping binders+      render t = restorePatternVars [ (name v, b) | (v, b) <- fbs ]+                   (foldBinderProjections (binderProjMap name fbs) (untyped (name <$> t)))+      -- a pattern binder is shown as its pattern, e.g. (t , s); others by name+      entryName v = maybe (name v) binderDisplayName (lookup v fbs)+      entries  = [ HoleEntry (entryName v) (render (varType info)) | (v, info) <- locals ]+      flagged  = zip cubeFlags entries+      -- binder name for the shape: the declared name if any, else a default+      shapeBinder   = fromMaybe (fromString "t") (binderName =<< (fst <$> mshape))+      nameInc Z     = shapeBinder+      nameInc (S v) = name v+      goalShape = (\t -> (shapeBinder, untyped (nameInc <$> t))) <$> shapeTope+      -- names already visible at the hole, which an introduced binder must not+      -- shadow: each local hypothesis by its display name, or the leaves of a+      -- pattern hypothesis.+      inScopeNames = [ nm | (v, _) <- locals+                          , nm <- maybe [name v] binderLeaves (lookup v fbs) ]+  -- the introduction forms for the goal itself (constituents left as holes); the+  -- Π binder is freshened against 'inScopeNames' so it does not shadow.+  introductions <- censor (const []) (allIntroductionsOf goalTy inScopeNames)+  -- the goal cell: an SVG of the shape the hole must inhabit (an arrow, triangle+  -- or square), drawn from an abstract inhabitant with the proof term hidden.+  -- 'Nothing' when the goal is not a renderable shape.+  diagram <- censor (const []) (renderGoalCellSVG goal')+  lift $ tell+    [ HoleInfo+        { holeName      = mname+        , holeGoal      = render goal'+        , holeGoalShape = goalShape+        , holeTermVars  = [ e | (False, e) <- flagged ]+        , holeCubeVars  = [ e | (True,  e) <- flagged ]+        , holeTopes     = map render topes+        , holeCandidates = map render candidates+        , holeIntroductions = map render introductions+        , holeDiagram  = diagram+        , holeLocation  = loc+        } ]++-- | Check a hole that appears as the argument of a shape-restricted function,+-- whose domain is the cube @cube@ restricted by @tope@ (a scope over the+-- domain's bound variable). Mirrors the hole case of 'typecheck', but records+-- the shape as the hole's goal so the diagnostic shows @(binder : cube | tope)@.+checkHoleAgainstShape+  :: Eq var+  => Maybe VarIdent -> Binder -> TermT var -> TermT (Inc var)+  -> TypeCheck var (TermT var)+checkHoleAgainstShape mname orig cube tope = do+  reject <- asks holesAreErrors+  if reject+    then issueTypeError (TypeErrorUnsolvedHole mname cube)+    else do+      recordHoleShape mname cube (Just (orig, tope))+      return (HoleT TypeInfo{ infoType = cube, infoWHNF = Nothing, infoNF = Nothing } mname)++ppSomeAction :: Eq var => [(var, Maybe VarIdent)] -> Int -> Action var -> String+ppSomeAction origs n action = ppAction [] n (toRzkVarIdent <$> action)+  where+    vars = nub (foldMap pure action)+    mapping = zip vars defaultVarIdents+    toRzkVarIdent var = fromMaybe "_" $+      join (lookup var origs) <|> lookup var mapping++ppAction :: [(VarIdent, Binder)] -> Int -> Action' -> String+ppAction fbs n = unlines . map (replicate (2 * n) ' ' <>) . \case+  ActionTypeCheck term ty ->+    [ "typechecking"+    , "  " <> ppU term+    , "against type"+    , "  " <> ppU (untyped ty) ]++  ActionUnify term expected actual ->+    [ "unifying expected type"+    , "  " <> ppU (untyped expected)+    , "with actual type"+    , "  " <> ppU (untyped actual)+    , "for term"+    , "  " <> ppU (untyped term) ]++  ActionUnifyTerms expected actual ->+    [ "unifying term (expected)"+    , "  " <> ppTyped expected+    , "with term (actual)"+    , "  " <> ppTyped actual ]++  ActionInfer term ->+    [ "inferring type for term"+    , "  " <> ppU term ]++  ActionContextEntailedBy ctxTopes term ->+    [ "checking if local context"+    , intercalate "\n" (map (("  " <>) . ppU . untyped) ctxTopes)+    , "includes (is entailed by) restriction tope"+    , "  " <> ppU (untyped term) ]++  ActionContextEntails ctxTopes term ->+    [ "checking if local context"+    , intercalate "\n" (map (("  " <>) . ppU . untyped) ctxTopes)+    , "is included in (entails) the tope"+    , "  " <> ppU (untyped term) ]++  ActionContextEntailsUnion ctxTopes terms ->+    [ "checking if local context"+    , intercalate "\n" (map (("  " <>) . ppU . untyped) ctxTopes)+    , "is included in (entails) the union of the topes"+    , intercalate "\n" (map (("  " <>) . ppU . untyped) terms) ]++  ActionWHNF term ->+    [ "computing WHNF for term"+    , "  " <> ppTyped term ]++  ActionNF term ->+    [ "computing normal form for term"+    , "  " <> ppU (untyped term) ]++  ActionCheckCoherence (ltope, lterm) (rtope, rterm) ->+    [ "checking coherence for"+    , "  " <> ppU (untyped ltope)+    , "  |-> " <> ppU (untyped lterm)+    , "and"+    , "  " <> ppU (untyped rtope)+    , "  |-> " <> ppU (untyped rterm) ]++  ActionCloseSection Nothing ->+    [ "closing the file"+    , "and collecting assumptions (variables)" ]+  ActionCloseSection (Just sectionName) ->+    [ "closing #section " <> Rzk.printTree sectionName+    , "and collecting assumptions (variables)"]++  ActionCheckLetValue orig ->+    [ "checking the local definition "+        <> maybe "_" (Rzk.printTree . getVarIdent) orig ]+  where+    ppU :: Term' -> String+    ppU = ppFoldU fbs+    ppTyped :: TermT' -> String+    ppTyped = ppFoldT fbs+++traceAction' :: Int -> Action' -> a -> a+traceAction' n action = trace ("[debug]\n" <> ppAction [] n action)++unsafeTraceAction' :: Int -> Action var -> a -> a+unsafeTraceAction' n = traceAction' n . unsafeCoerce++data LocationInfo = LocationInfo+  { locationFilePath :: Maybe FilePath+  , locationLine     :: Maybe Int+  } deriving (Eq, Show)++data Verbosity+  = Debug+  | Normal+  | Silent+  deriving (Eq, Ord)++trace' :: Verbosity -> Verbosity -> String -> a -> a+trace' msgLevel currentLevel+  | currentLevel <= msgLevel = trace+  | otherwise                = const id++traceTypeCheck :: Verbosity -> String -> TypeCheck var a -> TypeCheck var a+traceTypeCheck msgLevel msg tc = do+  Context{..} <- ask+  trace' msgLevel verbosity msg tc++localVerbosity :: Verbosity -> TypeCheck var a -> TypeCheck var a+localVerbosity v = local $ \Context{..} -> Context { verbosity = v, .. }++localRenderBackend :: Maybe RenderBackend -> TypeCheck var a -> TypeCheck var a+localRenderBackend v = local $ \Context{..} -> Context { renderBackend = v, .. }++-- | Run the enclosed action with the 'renderHideTerm' policy set.+localHideTerm :: Bool -> TypeCheck var a -> TypeCheck var a+localHideTerm v = local $ \ctx -> ctx { renderHideTerm = v }++-- | Render the enclosed action with the proof term hidden (see 'renderHideTerm').+hidingTerm :: TypeCheck var a -> TypeCheck var a+hidingTerm = localHideTerm True++data Covariance+  = Covariant     -- ^ Positive position.+  | Contravariant -- ^ Negative position.+  | Invariant     -- ^ Unknown position.++data RenderBackend+  = RenderSVG+  | RenderLaTeX++data ScopeInfo var = ScopeInfo+  { scopeName :: Maybe Rzk.SectionName+  , scopeVars :: [(var, VarInfo var)]+  } deriving (Functor, Foldable)++addVarToScope :: var -> VarInfo var -> ScopeInfo var -> ScopeInfo var+addVarToScope var info ScopeInfo{..} = ScopeInfo+  { scopeVars = (var, info) : scopeVars, .. }++addModalityToScope :: TModality -> ScopeInfo var -> ScopeInfo var+addModalityToScope md ScopeInfo{..} = ScopeInfo+  { scopeVars = map (\(var, VarInfo{..}) -> (var, VarInfo{ modAccum = comp modAccum md, ..})) scopeVars, .. }++data VarInfo var = VarInfo+  { varType                :: TermT var+  , varValue               :: Maybe (TermT var)+  , varModality            :: TModality+  , modAccum               :: TModality+  , varOrig                :: Binder+  , varIsAssumption        :: Bool -- FIXME: perhaps, introduce something like decl kind?+  , varIsTopLevel          :: Bool+  , varDeclaredAssumptions :: [var]+  , varLocation            :: Maybe LocationInfo+  } deriving (Functor, Foldable)+++class ModeTheory m where+    iden :: m+    comp :: m -> m -> m+    coe :: m -> m -> Bool+    isRA :: m -> Bool++instance ModeTheory TModality where+  iden = Id++  comp Flat Flat   = Flat+  comp Flat Sharp  = Flat+  comp Flat Op     = Flat+  comp Op Flat     = Flat+  comp Sharp Sharp = Sharp+  comp Sharp Flat  = Sharp+  comp Sharp Op    = Sharp+  comp Op Sharp    = Sharp+  comp Op Op       = Id+  comp Id m        = m+  comp m Id        = m++  coe Flat Id    = True+  coe Flat Op    = True+  coe Id Sharp   = True+  coe Flat Sharp = True+  coe Op Sharp   = True+  coe a b        = a == b++  isRA Sharp = True +  isRA Op = True +  isRA Id = True+  isRA _ = False++data ModalTope var = ModalTope+  { tModAccum :: TModality+  , tModVar   :: TModality+  , tTope     :: TermT var+  } deriving (Functor, Foldable, Eq)++data Context var = Context+  { localScopes            :: [ScopeInfo var]+  , localTopes             :: [ModalTope var]+  , localTopesNF           :: [ModalTope var]+  , localTopesNFUnion      :: [[ModalTope var]]+  , localTopesEntailBottom :: Maybe Bool+  , actionStack            :: [Action var]+  , currentCommand         :: Maybe Rzk.Command+  , location               :: Maybe LocationInfo+  , verbosity              :: Verbosity+  , covariance             :: Covariance+  , renderBackend          :: Maybe RenderBackend+    -- | When rendering a diagram, hide the proof term: drop the @\<title\>@+    -- (which carries the full term) from every cell and blank the visible label+    -- of proof-coloured (interior) cells, keeping the given boundary labels. So+    -- a worked term or an abstract inhabitant of a goal type is shown as the+    -- shape with its given edges, not the term that fills it.+  , renderHideTerm     :: Bool+  , holesAreErrors         :: Bool+    -- ^ When 'True' (the default), an unfilled hole is reported as a+    -- 'TypeErrorUnsolvedHole'; finished work (and CI) must have no holes. The+    -- lenient mode ('allowHoles') instead records each hole's goal and context.+  , deferHoleMismatches    :: Bool+    -- ^ How holes behave during unification, giving three modes overall. With+    -- 'holesAreErrors' a hole is rejected outright (strict). Otherwise a hole+    -- always unifies as a leaf; this flag then chooses what happens when the+    -- /surrounding/ structure disagrees: 'True' (the default) defers — any term+    -- containing a hole is accepted, for an in-progress sketch — while 'False'+    -- keeps such a mismatch an error, so only a hole standing in a matching+    -- structure is accepted ('structuralHoleUnify').+  , hintLemmas             :: [VarIdent]+    -- ^ Named top-level definitions a hole's candidate list may draw on, beyond+    -- the local hypotheses (see 'withHintLemmas'). A caller (the game) supplies+    -- a small curated allow-list per level; each listed lemma whose type fits+    -- the goal is then offered, applied to holes (e.g. @concat ? ? ?@).+  } deriving (Functor, Foldable)++addVarInCurrentScope :: var -> VarInfo var -> Context var -> Context var+addVarInCurrentScope var info Context{..} = Context+  { localScopes =+      case localScopes of+        []             -> [ScopeInfo Nothing [(var, info)]]+        scope : scopes -> addVarToScope var info scope : scopes+  , .. }++applyModalityToScopes :: TModality -> [ScopeInfo var] -> [ScopeInfo var]+applyModalityToScopes md scopes = map (addModalityToScope md) scopes++applyModalityToTopes :: TModality -> [ModalTope var] -> [ModalTope var]+applyModalityToTopes md topes = map (\ModalTope{..} -> ModalTope{tModAccum = comp tModAccum md, ..}) topes++applyModality :: TModality -> Context var -> Context var+applyModality md Context{..} = Context+  { localScopes = applyModalityToScopes md localScopes+  , localTopes = applyModalityToTopes md localTopes+  , localTopesNF = applyModalityToTopes md localTopesNF+  , localTopesNFUnion = map (applyModalityToTopes md) localTopesNFUnion+  , .. }++emptyTopeContext :: [ModalTope var]+emptyTopeContext =+  [ ModalTope Id Id    topeTopT+  , ModalTope Id Flat  topeTopT+  , ModalTope Id Op    topeTopT+  , ModalTope Id Sharp topeTopT+  ]++emptyContext :: Context var+emptyContext = Context+  { localScopes = [ScopeInfo Nothing []]+  , localTopes = emptyTopeContext+  , localTopesNF = emptyTopeContext+  , localTopesNFUnion = [emptyTopeContext]+  , localTopesEntailBottom = Just False+  , actionStack = []+  , currentCommand = Nothing+  , location = Nothing+  , verbosity = Normal+  , covariance = Covariant+  , renderBackend = Nothing+  , renderHideTerm = False+  , holesAreErrors = True+  , deferHoleMismatches = True+  , hintLemmas = []+  }++-- | Switch to lenient hole mode: record each hole's goal and context instead+-- of reporting it as an error. Used by the structured goal/context query and+-- the @--allow-holes@ CLI mode; the default (strict) mode rejects holes.+allowHoles :: Context var -> Context var+allowHoles ctx = ctx { holesAreErrors = False }++-- | Allow a hole's candidate list to draw on the given named top-level+-- definitions (in addition to the local hypotheses). The game supplies the+-- per-level allow-list; 'recordHoleShape' then offers each listed lemma whose+-- type fits the goal, applied to holes. See 'hintLemmas'.+withHintLemmas :: [VarIdent] -> Context var -> Context var+withHintLemmas lemmas ctx = ctx { hintLemmas = lemmas }++-- | Within the given action, a hole unifies only as a leaf in an otherwise+-- matching structure: a structural mismatch around a hole stays an error rather+-- than being deferred (see 'deferHoleMismatches'). Used to ask whether a term+-- /could/ have a given type, as opposed to tolerating an in-progress sketch.+structuralHoleUnify :: Context var -> Context var+structuralHoleUnify ctx = ctx { deferHoleMismatches = False }++askCurrentScope :: TypeCheck var (ScopeInfo var)+askCurrentScope = asks localScopes >>= \case+  []              -> panicImpossible "no current scope available"+  scope : _scopes -> pure scope++isAccessible :: ModalTope var -> Bool+isAccessible mt = coe (tModVar mt) (tModAccum mt)++filterAccessible :: [ModalTope var] -> [ModalTope var]+filterAccessible = filter isAccessible++filterInaccessible :: [ModalTope var] -> [ModalTope var]+filterInaccessible = filter (not . isAccessible)++partitionAccessible :: [ModalTope var] -> ([ModalTope var], [ModalTope var])+partitionAccessible = partition isAccessible++accessibleTopes :: [ModalTope var] -> [TermT var]+accessibleTopes = map tTope . filterAccessible++plainTope :: TermT var -> ModalTope var+plainTope = ModalTope Id Id++availableTopes :: Context var -> [TermT var]+availableTopes ctx = map tTope $ filterAccessible (localTopes ctx)++availableTopesNF :: Context var -> [TermT var]+availableTopesNF ctx = map tTope $ filterAccessible (localTopesNF ctx)++varInfos :: Context var -> [(var, VarInfo var)]+varInfos Context{..} = concatMap scopeVars localScopes++varTypes :: Context var -> [(var, TermT var)]+varTypes = map (fmap varType) . varInfos++varValues :: Context var -> [(var, Maybe (TermT var))]+varValues = map (fmap varValue) . varInfos++varOrigs :: Context var -> [(var, Maybe VarIdent)]+varOrigs = map (fmap (binderName . varOrig)) . varInfos++-- | The full binder (pattern) of each in-scope variable, used to restore+-- pattern-binder component names (e.g. @t@\/@s@ for @\\ (t , s) -> …@) when+-- rendering goals, holes and contexts.+varBinders :: Context var -> [(var, Binder)]+varBinders = map (fmap varOrig) . varInfos++varModalities :: Context var -> [(var, TModality)]+varModalities = map (fmap varModality) . varInfos++varLocks :: Context var -> [(var, TModality)]+varLocks = map (fmap modAccum) . varInfos++varTopLevels :: Context var -> [(var, Bool)]+varTopLevels = map (fmap varIsTopLevel) . varInfos++withPartialDecls+  :: TypeCheck VarIdent ([Decl'], [err])+  -> TypeCheck VarIdent ([Decl'], [err])+  -> TypeCheck VarIdent ([Decl'], [err])+withPartialDecls tc next = do+  (decls, errs) <- tc+  if null errs+    then first (decls <>)+      <$> localDeclsPrepared decls next+    else return (decls, errs)++withSection+  :: Maybe Rzk.SectionName+  -> TypeCheck VarIdent ([Decl VarIdent], [TypeErrorInScopedContext VarIdent])+  -> TypeCheck VarIdent ([Decl VarIdent], [TypeErrorInScopedContext VarIdent])+  -> TypeCheck VarIdent ([Decl VarIdent], [TypeErrorInScopedContext VarIdent])+withSection name sectionBody =+  withPartialDecls $ startSection name $ do+    (decls, errs) <- sectionBody+    localDeclsPrepared decls $+      performing (ActionCloseSection name) $ do+        result <- (Right <$> endSection errs) `catchError` (return . Left)+        case result of+          Left err              -> return ([], errs <> [err])+          Right (decls', errs') -> return (decls', errs')+        -- (\ decls' -> (decls', errs)) <$> endSection errs++startSection :: Maybe Rzk.SectionName -> TypeCheck VarIdent a -> TypeCheck VarIdent a+startSection name = local $ \Context{..} -> Context+  { localScopes = ScopeInfo { scopeName = name, scopeVars = [] } : localScopes+  , .. }++endSection :: [TypeErrorInScopedContext VarIdent] -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])+endSection errs = askCurrentScope >>= scopeToDecls errs++scopeToDecls :: Eq var => [TypeErrorInScopedContext var] -> ScopeInfo var -> TypeCheck var ([Decl var], [TypeErrorInScopedContext var])+scopeToDecls errs ScopeInfo{..} = do+  -- In lenient (hole-checking) mode an as-yet-unfilled hole may still come to+  -- use a declared variable, so we tolerate the unused-variable diagnostics+  -- wherever such a hole is present: a hole anywhere in the section for an+  -- unused section assumption, a hole in the declaration itself for an unused+  -- 'uses' variable. Strict mode (the default, and CI) keeps reporting both.+  lenient <- not <$> asks holesAreErrors+  let sectionHasHole = any (maybe False containsHole . varValue . snd) scopeVars+  (decls, errs') <- collectScopeDecls (lenient && sectionHasHole) errs [] scopeVars+  -- only issue unused variable errors if there were no errors prior in the section+  -- when (null errs) $ do+  unusedErrors <- forM decls $ \Decl{..} -> do+    let unusedUsedVars = declUsedVars `intersect` map fst scopeVars+        declHasHole    = maybe False containsHole declValue+    if null errs && not (null unusedUsedVars) && not (lenient && declHasHole)+      then do+        err <- local (\c -> c { location = declLocation }) $+          fromTypeError (TypeErrorUnusedUsedVariables unusedUsedVars declName)+        return [err]+      else return []+  return (decls, errs' <> concat unusedErrors)++insertExplicitAssumptionFor+  :: Eq var => var -> (var, VarInfo var) -> TermT var -> TermT var+insertExplicitAssumptionFor a (declName, VarInfo{..}) term =+  term >>= \case+    y | y == declName -> appT varType (Pure declName) (Pure a)+      | otherwise     -> Pure y++insertExplicitAssumptionFor'+  :: Eq var => var -> (var, VarInfo var) -> VarInfo var -> VarInfo var+insertExplicitAssumptionFor' a decl VarInfo{..}+  | varIsAssumption = VarInfo{..}+  | otherwise = VarInfo+      { varType = insertExplicitAssumptionFor a decl varType+      , varValue = insertExplicitAssumptionFor a decl <$> varValue+      , varIsAssumption = varIsAssumption+      , varIsTopLevel = varIsTopLevel+      , varModality = varModality+      , modAccum = modAccum+      , varOrig = varOrig+      , varDeclaredAssumptions = varDeclaredAssumptions+      , varLocation = varLocation+      }++makeAssumptionExplicit+  :: Eq var+  => (var, VarInfo var)+  -> [(var, VarInfo var)]+  -> TypeCheck var (Bool, [(var, VarInfo var)])+makeAssumptionExplicit _ [] = pure (False {- UNUSED -}, [])+makeAssumptionExplicit assumption@(a, aInfo) ((x, xInfo) : xs) = do+  varsInType <- freeVarsT_ (varType xInfo)+  varsInBody <- concat <$> traverse freeVarsT_ (varValue xInfo)+  let xFreeVars = varsInBody <> varsInType+  let hasAssumption = a `elem` xFreeVars+  xType <- typeOfVar x+  xValue <- valueOfVar x+  let assumptionInType = a `elem` freeVars (untyped xType)+      assumptionInBody = a `elem` foldMap (freeVars . untyped) xValue+      implicitAssumption = and+        [ hasAssumption+        , not (assumptionInType || assumptionInBody)+        , a `notElem` varDeclaredAssumptions xInfo ]+  if hasAssumption+     then do+       when implicitAssumption $ do+         issueTypeError $ TypeErrorImplicitAssumption (a, varType aInfo) x+       (_used, xs'') <- makeAssumptionExplicit (a, aInfo) xs'+       return (True {- USED -}, (x, xInfo') : xs'')+     else do+       (used, xs'') <- makeAssumptionExplicit assumption xs+       return (used, (x, xInfo) : xs'')+  where+    xType' = typeFunT (varOrig aInfo) Id (varType aInfo) Nothing (abstract a (varType xInfo))+    xInfo' = VarInfo+      { varType = xType'+      , varValue = fmap (lambdaT xType' (varOrig aInfo) Nothing . abstract a) (varValue xInfo)+      , varIsAssumption = varIsAssumption xInfo+      , varIsTopLevel = varIsTopLevel xInfo+      , varModality = Id+      , modAccum = Id+      , varOrig = varOrig xInfo+      , varDeclaredAssumptions = varDeclaredAssumptions xInfo \\ [a]+      , varLocation = varLocation xInfo+      }+    xs' = map (fmap (insertExplicitAssumptionFor' a (x, xInfo))) xs++collectScopeDecls :: Eq var => Bool -> [TypeErrorInScopedContext var] -> [(var, VarInfo var)] -> [(var, VarInfo var)] -> TypeCheck var ([Decl var], [TypeErrorInScopedContext var])+collectScopeDecls tolerateUnused errs recentVars (decl@(var, VarInfo{..}) : vars)+  | varIsAssumption = do+      (used, recentVars') <- makeAssumptionExplicit decl recentVars+      -- only issue unused vars error if there were no other errors previously+      -- when (null errs) $ do+      unusedErr <-+        if null errs && not used && not tolerateUnused+          then local (\c -> c { location = varLocation }) $+            pure <$> fromTypeError (TypeErrorUnusedVariable var varType)+          else return []+      collectScopeDecls tolerateUnused (errs <> unusedErr) recentVars' vars+  | otherwise = do+      collectScopeDecls tolerateUnused errs (decl : recentVars) vars+collectScopeDecls _ errs recentVars [] = do+  loc <- asks location+  return (toDecl loc <$> recentVars, errs)+  where+    toDecl loc (var, VarInfo{..}) = Decl+      { declName = var+      , declType = varType+      , declValue = varValue+      , declIsAssumption = varIsAssumption+      , declUsedVars = varDeclaredAssumptions+      , declLocation = updatePosition (binderName varOrig >>= fmap fst . Rzk.hasPosition . fromVarIdent) <$> loc -- FIXME+      }+    updatePosition Nothing l       = l+    updatePosition (Just lineNo) l = l { locationLine = Just lineNo }++abstractAssumption :: Eq var => (var, VarInfo var) -> Decl var -> Decl var+abstractAssumption (var, VarInfo{..}) Decl{..} = Decl+  { declName = declName+  , declType = typeFunT varOrig Id varType Nothing (abstract var declType)+  , declValue = (\body -> lambdaT newDeclType varOrig Nothing (abstract var body)) <$> declValue+  , declIsAssumption = declIsAssumption+  , declUsedVars = declUsedVars+  , declLocation = declLocation+  }+  where+    newDeclType = typeFunT varOrig Id varType Nothing (abstract var declType)++data OutputDirection = TopDown | BottomUp+  deriving (Eq)++block :: OutputDirection -> [String] -> String+block TopDown  = intercalate "\n"+block BottomUp = intercalate "\n" . reverse++namedBlock :: OutputDirection -> String -> [String] -> String+namedBlock dir name lines_ = block dir $+  name : map indent lines_+  where+    indent = intercalate "\n" . (map ("  " ++)) . lines++ppContext' :: OutputDirection -> Context VarIdent -> String+ppContext' dir ctx@Context{..} = block dir $ dropWhile null+  [ block TopDown+    [ case location of+        _ | dir == TopDown -> "" -- FIXME+        Just (LocationInfo (Just path) (Just lineNo)) ->+          path <> " (line " <> show lineNo <> "):"+        Just (LocationInfo (Just path) _) ->+          path <> ":"+        _  -> ""+    , case currentCommand of+        Just (Rzk.CommandDefine _loc name _vars _params _ty _term) ->+          "  Error occurred when checking\n    #define " <> Rzk.printTree name+        Just (Rzk.CommandPostulate _loc name _vars _params _ty ) ->+          "  Error occurred when checking\n    #postulate " <> Rzk.printTree name+        Just (Rzk.CommandCheck _loc term ty) ->+          "  Error occurred when checking\n    " <> Rzk.printTree term <> " : " <> Rzk.printTree ty+        Just (Rzk.CommandCompute _loc term) ->+          "  Error occurred when computing\n    " <> Rzk.printTree term+        Just (Rzk.CommandComputeNF _loc term) ->+          "  Error occurred when computing NF for\n    " <> Rzk.printTree term+        Just (Rzk.CommandComputeWHNF _loc term) ->+          "  Error occurred when computing WHNF for\n    " <> Rzk.printTree term+        Just (Rzk.CommandSetOption _loc optionName _optionValue) ->+          "  Error occurred when trying to set option\n    #set-option " <> show optionName+        Just command@Rzk.CommandUnsetOption{} ->+          "  Error occurred when trying to unset option\n    " <> Rzk.printTree command+        Just command@Rzk.CommandAssume{} ->+          "  Error occurred when checking assumption\n    " <> Rzk.printTree command+        Just (Rzk.CommandSection _loc name) ->+          "  Error occurred when checking\n    #section " <> Rzk.printTree name+        Just (Rzk.CommandSectionEnd _loc name) ->+          "  Error occurred when checking\n    #end " <> Rzk.printTree name+        Nothing -> "  Error occurred outside of any command!"+    ]+  , ""+  , case filter (/= topeTopT) (availableTopes ctx) of+      [] -> "Local tope context is unrestricted (⊤)."+      localTopes' -> namedBlock TopDown "Local tope context:"+        [ "  " <> ppU (untyped tope)+        | tope <- localTopes' ]+  , ""+  , block dir+    [ "when " <> ppAction fbs 0 action+    | action <- actionStack ]+  , namedBlock TopDown "Definitions in context:"+    [ block dir+      [ dispName x <> " : " <> ppU (untyped ty)+      | (x, ty) <- reverse (varTypes ctx) ] ]+  ]+  where+    (fbs, _) = contextBinders ctx+    ppU = ppFoldU fbs+    -- a pattern binder is shown as its pattern, e.g. (t , s); others by name+    dispName x = maybe (show (Pure x :: Term')) (show . binderDisplayName) (lookup x fbs)++doesShadowName :: VarIdent -> TypeCheck var [VarIdent]+doesShadowName name = asks $ \ctx ->+  filter (name ==) (mapMaybe snd (varOrigs ctx))++checkTopLevelDuplicate :: VarIdent -> TypeCheck var ()+checkTopLevelDuplicate name = do+  doesShadowName name >>= \case+    []         -> return ()+    collisions -> issueTypeError $+      TypeErrorDuplicateTopLevel collisions name++checkNameShadowing :: VarIdent -> TypeCheck var ()+checkNameShadowing name = do+  doesShadowName name >>= \case+    [] -> return ()+    collisions -> issueWarning $+      Rzk.printTree (getVarIdent name) <> " shadows an existing definition:"+      <> unlines+        [ "  " <> ppVarIdentWithLocation name+        , "previous top-level definitions found at"+        , intercalate "\n"+          [ "  " <> ppVarIdentWithLocation prev | prev <- collisions ] ]++withLocation :: LocationInfo -> TypeCheck var a -> TypeCheck var a+withLocation loc = local $ \Context{..} -> Context { location = Just loc, .. }++withCommand :: Rzk.Command -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent]) -> TypeCheck VarIdent ([Decl'], [TypeErrorInScopedContext VarIdent])+withCommand command tc = local f $ do+  result <- (Right <$> tc) `catchError` (return . Left)+  case result of+    Left err            -> return ([], [err])+    Right (decls, errs) -> return (decls, errs)+  where+    f Context{..} = Context+      { currentCommand = Just command+      , location = updatePosition (Rzk.hasPosition command) <$> location+      , .. }+    updatePosition pos loc = loc { locationLine = fst <$> pos }++localDecls :: [Decl VarIdent] -> TypeCheck VarIdent a -> TypeCheck VarIdent a+localDecls []             = id+localDecls (decl : decls) = localDecl decl . localDecls decls++localDeclsPrepared :: [Decl VarIdent] -> TypeCheck VarIdent a -> TypeCheck VarIdent a+localDeclsPrepared [] = id+localDeclsPrepared (decl : decls) = localDeclPrepared decl . localDeclsPrepared decls++localDecl :: Decl VarIdent -> TypeCheck VarIdent a -> TypeCheck VarIdent a+localDecl (Decl x ty term isAssumption vars loc) tc = do+  ty' <- memoizeWHNF ty+  term' <- traverse memoizeWHNF term+  localDeclPrepared (Decl x ty' term' isAssumption vars loc) tc++localDeclPrepared :: Decl VarIdent -> TypeCheck VarIdent a -> TypeCheck VarIdent a+localDeclPrepared (Decl x ty term isAssumption vars loc) tc = do+  checkTopLevelDuplicate x+  local update tc+  where+    update = addVarInCurrentScope x VarInfo+      { varType = ty+      , varValue = term+      , varOrig = BinderVar (Just x)+      , varModality  = Id+      , modAccum = Id+      , varIsAssumption = isAssumption+      , varIsTopLevel = True+      , varDeclaredAssumptions = vars+      , varLocation = loc+      }++-- | A binding shown in a hole's local context: the display name and its type,+-- already rendered with user-facing 'VarIdent' names (see 'HoleInfo').+data HoleEntry = HoleEntry+  { holeEntryName :: VarIdent+  , holeEntryType :: Term'+  } deriving (Eq, Show)++-- | The structured goal and context at a hole, recorded in lenient mode (see+-- 'allowHoles'). Everything is rendered to user-facing 'VarIdent' names at+-- record time, so 'HoleInfo' is independent of the De Bruijn scope it came+-- from. Local hypotheses are split into ordinary term variables and cube+-- variables (the cube/tope layer is specific to Rzk); the global environment is+-- deliberately excluded — it belongs in a searchable inventory, not the goal+-- panel.+data HoleInfo = HoleInfo+  { holeName      :: Maybe VarIdent  -- ^ the @?name@, if the hole was named+  , holeGoal      :: Term'           -- ^ expected type (the goal), kept symbolic+  , holeGoalShape :: Maybe (VarIdent, Term')+    -- ^ when the goal is a /shape/ (the hole is the argument of a+    -- shape-restricted function), the shape's bound variable and its tope: the+    -- goal then reads @(binder : holeGoal | tope)@. 'Nothing' for an ordinary+    -- goal. (Extension-type goals need no special handling — they are already a+    -- restricted type in 'holeGoal'.)+  , holeTermVars  :: [HoleEntry]     -- ^ local hypotheses whose type is not a cube+  , holeCubeVars  :: [HoleEntry]     -- ^ local cube variables (type is a cube)+  , holeTopes     :: [Term']         -- ^ local tope assumptions (excluding ⊤)+  , holeCandidates :: [Term']+    -- ^ elimination spines over the local hypotheses whose type fits the goal,+    -- with applied arguments left as holes (see 'allEliminationsInto'). Already+    -- rendered, like the other fields.+  , holeIntroductions :: [Term']+    -- ^ introduction forms for the goal type, built from its head constructor+    -- with the constituents left as holes (see 'allIntroductionsOf'). Already+    -- rendered, like the other fields.+  , holeDiagram   :: Maybe String+    -- ^ an SVG of the goal cell, when the goal is a renderable shape (an arrow,+    -- triangle, or square up to dimension 3): the shape with its given boundary+    -- edges, drawn from an abstract inhabitant of the goal type with the+    -- proof term hidden (see 'renderHideTerm'). 'Nothing' for a non-shape goal.+  , holeLocation  :: Maybe LocationInfo+  } deriving (Eq, Show)++type TypeCheck var =+  ReaderT (Context var)+    (WriterT [HoleInfo] (Except (TypeErrorInScopedContext var)))++freeVarsT_ :: Eq var => TermT var -> TypeCheck var [var]+freeVarsT_ term = do+  types <- asks varTypes+  let typeOfVar' x =+        case lookup x types of+          Nothing -> panicImpossible "undefined variable"+          Just ty -> ty+  return (freeVarsT typeOfVar' term)++traceStartAndFinish :: Show a => String -> a -> a+traceStartAndFinish tag = trace ("start [" <> tag <> "]") .+  (\x -> trace ("finish [" <> tag <> "] with " <> show x) x)++entailM :: Eq var => [ModalTope var] -> TermT var -> TypeCheck var Bool+entailM modalTopes goal = do+  -- genTopes <- generateTopesForPointsM (allTopePoints goal)+  discreteAxioms <- generateTopesForModalCubeVarsM+  let topes'    = nubTermT (modalTopes <> discreteAxioms)+      topes''   = simplifyLHSwithDisjunctions topes'+  topes'''  <- mapM (fmap (saturateTopes (allTopePoints goal) . saturateBottom) . saturateInv) topes''+  prettyTopes <- mapM ppTermInContext (map tTope (saturateTopes (allTopePoints goal) (simplifyLHS topes')))+  prettyTope <- ppTermInContext goal+  traceTypeCheck Debug+    ("entail " <> intercalate ", " prettyTopes <> " |- " <> prettyTope) $+      and <$> mapM (`solveRHSM` goal) topes'''+++generateTopesForModalCubeVarsM :: Eq var => TypeCheck var [ModalTope var]+generateTopesForModalCubeVarsM = do+  infos <- asks varInfos+  fmap (nubTermT . concat) $ forM infos $ \(var, info) ->+    case varModality info of+      Flat -> do+        whnfT (varType info) >>= \case+          Cube2T{} -> do+            let pt = Pure var+            return [plainTope (topeOrT (topeEQT pt cube2_0T) (topeEQT pt cube2_1T))]+          CubeIT{} -> do+            let pt = Pure var+            return [plainTope (topeOrT (topeEQT pt cubeI_0T) (topeEQT pt cubeI_1T))]+          _ -> return []+      _ -> return []++entailTraceM :: Eq var => [ModalTope var] -> TermT var -> TypeCheck var Bool+entailTraceM modalTopes goal = do+  topes' <- mapM ppTermInContext (accessibleTopes modalTopes)+  goal' <- ppTermInContext goal+  result <- trace ("entail " <> intercalate ", " topes' <> " |- " <> goal') $+        modalTopes `entailM` goal+  return $ trace ("  " <> show result) result++nubTermT :: Eq a => [a] -> [a]+nubTermT []     = []+nubTermT (t:ts) = t : nubTermT (filter (/= t) ts)++saturateTopes :: Eq var => [TermT var] -> [ModalTope var] -> [ModalTope var]+saturateTopes _points topes =+  let (accessible, inaccessible) = partitionAccessible topes+      saturated = saturateWith+        (\mt ts -> mt `elem` ts)+        (\new old -> map plainTope $ generateTopes (map tTope new) (map tTope old))+        accessible+  in saturated <> inaccessible++saturateInv :: Eq var => [ModalTope var] -> TypeCheck var [ModalTope var]+saturateInv modalTopes = do+    -- FIXME: this is a workaround; ideally we should regenerate all topes+    -- on EVERY modality change in any layer, but that would produce too many;+    -- for now we also invert topes that were accessible before the modality shift+    let accessible = filterAccessible modalTopes+        accessibleById = filter (\mt -> coe (tModVar mt) Id) modalTopes+    invResults <- forM (nubTermT (accessible <> accessibleById)) $ \mt -> do+      nf <- nfTope $ modExtractT topeT Id Op (topeInvT (tTope mt))+      return $ ModalTope (tModAccum mt) Op nf+    let accessibleUnderOp = filter (\mt -> coe (tModVar mt) (comp (tModAccum mt) Op)) modalTopes+    uninvResults <- forM accessibleUnderOp $ \(ModalTope acc var' phi) -> do+      nf <- nfTope $ topeUninvT (modAppT topeT Op phi)+      return $ ModalTope (comp acc Op) var' nf+    let newTopes = nubTermT (invResults <> uninvResults)+        fresh = filter (`notElem` modalTopes) newTopes+    return (modalTopes <> fresh)++-- | Ex falso for BOT, lifted across modalities.+--+-- A contradiction in the topes that are genuinely available at the identity+-- modality entails BOT, and BOT entails @_μ BOT@ for every modality @μ@ by the+-- absurd rule (this holds for BOT specifically; a general tope @φ@ does NOT give+-- @_μ φ@, which would need the missing unit @id ⇒ μ@). Re-asserting @_μ BOT@ at+-- each lock @μ@ where an available tope was hidden lets the contradiction survive+-- the lock: e.g. @_b BOT@ is accessible under a @_b@ lock (@coe Flat Flat@), so+-- @mod _b recBOT@ in a vacuous context is accepted.+--+-- A tope counts as available at the identity modality when its variable modality+-- coerces into @Id@: a @_b@-modal tope qualifies via the counit (@coe Flat Id@),+-- but a @_#@-modal one does not (@coe Sharp Id@ is False) — which is exactly why+-- @_# BOT@ does not leak to plain BOT (see ill-modal-sharp-bot-not-bot).+saturateBottom :: Eq var => [ModalTope var] -> [ModalTope var]+saturateBottom modalTopes+  | null droppedAccums = modalTopes   -- nothing hidden by a lock; ordinary saturation suffices+  | botDerivable       = modalTopes <> fresh+  | otherwise          = modalTopes+  where+    idAccessible  = filter (\mt -> coe (tModVar mt) Id) modalTopes+    droppedAccums = nub [ tModAccum mt | mt <- idAccessible, not (isAccessible mt) ]+    saturatedId   = saturateWith (\t ts -> t `elem` ts) generateTopes (map tTope idAccessible)+    botDerivable  = topeBottomT `elem` saturatedId+    fresh = [ mt+            | acc <- droppedAccums+            , let mt = ModalTope acc acc topeBottomT+            , mt `notElem` modalTopes ]++-- FIXME: cleanup+saturateWith :: (a -> [a] -> Bool) -> ([a] -> [a] -> [a]) -> [a] -> [a]+saturateWith elem' step zs = go (nub' zs) []+  where+    go lastNew xs+      | null new = lastNew+      | otherwise = lastNew <> go new xs'+      where+        xs' = lastNew <> xs+        new = filter (not . (`elem'` xs')) (nub' $ step lastNew xs)+    nub' []     = []+    nub' (x:xs) = x : nub' (filter (not . (`elem'` [x])) xs)++generateTopes :: Eq var => [TermT var] -> [TermT var] -> [TermT var]+generateTopes newTopes oldTopes+  | topeBottomT `elem` newTopes = []+  | topeEQT cube2_0T cube2_1T `elem` newTopes = [topeBottomT]+  | topeEQT cubeI_0T cubeI_1T `elem` newTopes = [topeBottomT]+  | length oldTopes > 100 = []    -- FIXME+  | otherwise = concat+      [  -- symmetry EQ+        [ topeEQT y x | TopeEQT _ty x y <- newTopes ]+        -- transitivity EQ (1)+      , [ topeEQT x z+        | TopeEQT _ty x y : newTopes' <- tails newTopes+        , TopeEQT _ty y' z <- newTopes' <> oldTopes+        , y == y' ]+        -- transitivity EQ (2)+      , [ topeEQT x z+        | TopeEQT _ty y z : newTopes' <- tails newTopes+        , TopeEQT _ty x y' <- newTopes' <> oldTopes+        , y == y' ]++        -- transitivity LEQ (1)+      , [ topeLEQT x z+        | TopeLEQT _ty x y : newTopes' <- tails newTopes+        , TopeLEQT _ty y' z <- newTopes' <> oldTopes+        , y == y' ]+        -- transitivity LEQ (2)+      , [ topeLEQT x z+        | TopeLEQT _ty y z : newTopes' <- tails newTopes+        , TopeLEQT _ty x y' <- newTopes' <> oldTopes+        , y == y' ]++        -- antisymmetry LEQ+      , [ topeEQT x y+        | TopeLEQT _ty x y : newTopes' <- tails newTopes+        , TopeLEQT _ty y' x' <- newTopes' <> oldTopes+        , y == y'+        , x == x' ]++        -- FIXME: special case of substitution of EQ+        -- transitivity EQ-LEQ (1)+      , [ topeLEQT x z+        | TopeEQT  _ty y z : newTopes' <- tails newTopes+        , TopeLEQT _ty x y' <- newTopes' <> oldTopes+        , y == y' ]++        -- FIXME: special case of substitution of EQ+        -- transitivity EQ-LEQ (2)+      , [ topeLEQT x z+        | TopeEQT  _ty x y : newTopes' <- tails newTopes+        , TopeLEQT _ty y' z <- newTopes' <> oldTopes+        , y == y' ]++        -- FIXME: special case of substitution of EQ+        -- transitivity EQ-LEQ (3)+      , [ topeLEQT x z+        | TopeLEQT  _ty y z : newTopes' <- tails newTopes+        , TopeEQT _ty x y' <- newTopes' <> oldTopes+        , y == y' ]++        -- FIXME: special case of substitution of EQ+        -- transitivity EQ-LEQ (4)+      , [ topeLEQT x z+        | TopeLEQT  _ty x y : newTopes' <- tails newTopes+        , TopeEQT _ty y' z <- newTopes' <> oldTopes+        , y == y' ]++        -- FIXME: consequence of LEM for LEQ and antisymmetry for LEQ+      , [ topeEQT x y | TopeLEQT _ty x y@Cube2_0T{} <- newTopes ]+        -- FIXME: consequence of LEM for LEQ and antisymmetry for LEQ+      , [ topeEQT x y | TopeLEQT _ty x@Cube2_1T{} y <- newTopes ]+      , [ topeEQT x y | TopeLEQT _ty x y@CubeI_0T{} <- newTopes ]+        -- FIXME: consequence of LEM for LEQ and antisymmetry for LEQ+      , [ topeEQT x y | TopeLEQT _ty x@CubeI_1T{} y <- newTopes ]++        -- subtyping 2 <: II: endpoints and order of 2 lift to II+      , [ topeEQT x cubeI_0T | TopeEQT _ty x Cube2_0T{} <- newTopes ]+      , [ topeEQT cubeI_0T x | TopeEQT _ty Cube2_0T{} x <- newTopes ]+      , [ topeEQT x cubeI_1T | TopeEQT _ty x Cube2_1T{} <- newTopes ]+      , [ topeEQT cubeI_1T x | TopeEQT _ty Cube2_1T{} x <- newTopes ]+      , [ topeLEQT x cubeI_0T | TopeLEQT _ty x Cube2_0T{} <- newTopes ]+      , [ topeLEQT cubeI_0T x | TopeLEQT _ty Cube2_0T{} x <- newTopes ]+      , [ topeLEQT x cubeI_1T | TopeLEQT _ty x Cube2_1T{} <- newTopes ]+      , [ topeLEQT cubeI_1T x | TopeLEQT _ty Cube2_1T{} x <- newTopes ]+      ]++generateTopesForPointsM :: Eq var => [TermT var] -> TypeCheck var [TermT var]+generateTopesForPointsM points = do+  let pairs = nub $ concat+        [ [ (x, y)+          | x : points' <- tails (filter (`notElem` [cube2_0T, cube2_1T, cubeI_0T, cubeI_1T]) points)+          , y <- points'+          , x /= y ]+        ]+  stars <- forM points $ \x -> do+    xType <- typeOf x+    return $ if (xType == cubeUnitT)+      then [topeEQT x cubeUnitStarT]+      else []+  topes <- forM pairs $ \(x, y) -> do+    xType <- typeOf x+    yType <- typeOf y+    return $ if (xType == cube2T) && (yType == cube2T)+      then [topeOrT (topeLEQT x y) (topeLEQT y x)]+      else []+  return (concat (topes ++ stars))++allTopePoints :: Eq var => TermT var -> [TermT var]+allTopePoints = nubTermT . foldMap subPoints . nubTermT . topePoints++topePoints :: TermT var -> [TermT var]+topePoints = \case+  TopeTopT{}     -> []+  TopeBottomT{}  -> []+  TopeAndT _ l r -> topePoints l <> topePoints r+  TopeOrT  _ l r -> topePoints l <> topePoints r+  TopeEQT  _ x y -> [x, y]+  TopeLEQT _ x y -> [x, y]+  _              -> []++subPoints :: TermT var -> [TermT var]+subPoints = \case+  p@(PairT _ x y) -> p : foldMap subPoints [x, y]+  p@Pure{} -> [p]+  p@(Free (AnnF TypeInfo{..} _))+    | Cube2T{} <- infoType -> [p]+    | CubeUnitT{} <- infoType -> [p]+  _ -> []++-- | Simplify the context, including disjunctions. See also 'simplifyLHS'.+simplifyLHSwithDisjunctions :: Eq var => [ModalTope var] -> [[ModalTope var]]+simplifyLHSwithDisjunctions topes = map nubTermT $+  case topes of+    [] -> [[]]+    (ModalTope _ _ TopeTopT{}) : topes' -> simplifyLHSwithDisjunctions topes'+    (ModalTope mAcc mVar TopeBottomT{}) : _  -> [[ModalTope mAcc mVar topeBottomT]]+    (ModalTope mAcc mVar (TopeAndT _ l r)) : topes' -> simplifyLHSwithDisjunctions ((ModalTope mAcc mVar l) : (ModalTope mAcc mVar r) : topes')++    -- NOTE: it is inefficient to expand disjunctions immediately+    (ModalTope mAcc mVar (TopeOrT  _ l r)) : topes' -> simplifyLHSwithDisjunctions ((ModalTope mAcc mVar l) : topes') <> simplifyLHSwithDisjunctions ((ModalTope mAcc mVar r) : topes')++    (ModalTope mAcc mVar (TopeEQT  _ (PairT _ x y) (PairT _ x' y'))) : topes' ->+      simplifyLHSwithDisjunctions (ModalTope mAcc mVar (topeEQT x x') : ModalTope mAcc mVar (topeEQT y y') : topes')+    (ModalTope mAcc mVar (TypeModalT _ md inTope)) : topes' ->+      simplifyLHSwithDisjunctions ((ModalTope mAcc (comp mVar md) inTope) : topes')+    t : topes' -> map (t :) (simplifyLHSwithDisjunctions topes')++-- | Simplify the context, except disjunctions. See also 'simplifyLHSwithDisjunctions'.+simplifyLHS :: Eq var => [ModalTope var] -> [ModalTope var]+simplifyLHS topes = nubTermT $+  case topes of+    [] -> []+    (ModalTope _ _ TopeTopT{}) : topes' -> simplifyLHS topes'+    (ModalTope _ _ TopeBottomT{}) : _  -> [plainTope topeBottomT]+    (ModalTope mAcc mVar (TopeAndT _ l r)) : topes' -> simplifyLHS (ModalTope mAcc mVar l : ModalTope mAcc mVar r : topes')++    -- NOTE: it is inefficient to expand disjunctions immediately+    -- (ModalTope mAcc mVar (TopeOrT _ l r)) : topes' -> simplifyLHS (ModalTope mAcc mVar l : topes') <> simplifyLHS (ModalTope mAcc mVar r : topes')++    (ModalTope mAcc mVar (TopeEQT _ (PairT _ x y) (PairT _ x' y'))) : topes' ->+      simplifyLHS (ModalTope mAcc mVar (topeEQT x x') : ModalTope mAcc mVar (topeEQT y y') : topes')+    (ModalTope mAcc mVar (TypeModalT _ md inTope)) : topes' ->+      simplifyLHS (ModalTope mAcc (comp mVar md) inTope : topes')+    t : topes' -> t : simplifyLHS topes'++solveRHSM :: Eq var => [ModalTope var] -> TermT var -> TypeCheck var Bool+solveRHSM modalTopes goal =+  let topes = accessibleTopes modalTopes+  in case goal of+    _ | topeBottomT `elem` topes -> return True+    TopeTopT{}     -> return True+    TypeModalT _ty md inTope -> do+      let shifted = applyModalityToTopes md modalTopes+          resaturated = saturateTopes [] shifted+      resaturatedInv <- saturateInv resaturated+      solveRHSM resaturatedInv inTope+    TopeEQT  _ty (PairT _ty1 x y) (PairT _ty2 x' y') ->+      solveRHSM modalTopes $ topeAndT+        (topeEQT x x')+        (topeEQT y y')+    TopeEQT  _ty (PairT TypeInfo{ infoType = CubeProductT _ cubeI cubeJ } x y) r ->+      solveRHSM modalTopes $ topeAndT+        (topeEQT x (firstT cubeI r))+        (topeEQT y (secondT cubeJ r))+    TopeEQT  _ty l (PairT TypeInfo{ infoType = CubeProductT _ cubeI cubeJ } x y) ->+      solveRHSM modalTopes $ topeAndT+        (topeEQT (firstT cubeI l) x)+        (topeEQT (secondT cubeJ l) y)+    TopeEQT  _ty l r+      | or+          [ l == r+          , goal `elem` topes+          , topeEQT r l `elem` topes+          ] -> return True+    TopeEQT  _ty l r -> do+      lType <- typeOf l+      rType <- typeOf r+      return $ case (lType, rType) of+        (CubeUnitT{}, CubeUnitT{}) -> True+        _                          -> False+    TopeLEQT _ty l r+      | l == r -> return True+      | solveRHS topes (topeEQT l r) -> return True+      | solveRHS topes (topeEQT l cube2_0T) -> return True+      | solveRHS topes (topeEQT r cube2_1T) -> return True+    TopeAndT _ l r -> (&&)+      <$> solveRHSM modalTopes l+      <*> solveRHSM modalTopes r+    _ | goal `elem` topes -> return True+    TopeInvT{} -> do+      goal' <- nfTope goal+      case goal' of+        TopeInvT{} -> return False+        _          -> solveRHSM modalTopes goal'+    TopeUninvT{} -> do+      goal' <- nfTope goal+      case goal' of+        TopeUninvT{} -> return False+        _            -> solveRHSM modalTopes goal'+    TopeOrT  _ l r -> do+      l' <- solveRHSM modalTopes l+      r' <- solveRHSM modalTopes r+      if (l' || r')+        then return True+        else do+          lems <- generateTopesForPointsM (allTopePoints goal)+          let lems' = [ lem | lem@(TopeOrT _ t1 t2) <- lems, all (`notElem` topes) [t1, t2] ]+              (accessible, hidden) = partitionAccessible modalTopes+              withTope t = hidden ++ saturateTopes [] (plainTope t : accessible)++          case lems' of+            TopeOrT _ t1 t2 : _ -> do+              l'' <- solveRHSM (withTope t1) goal+              r'' <- solveRHSM (withTope t2) goal+              return (l'' && r'')+            _ -> return False+    _ -> return False++solveRHS :: Eq var => [TermT var] -> TermT var -> Bool+solveRHS topes tope =+  case tope of+    _ | topeBottomT `elem` topes -> True+    TopeTopT{}     -> True+    TopeEQT  _ty (PairT _ty1 x y) (PairT _ty2 x' y')+      | solveRHS topes (topeEQT x x') && solveRHS topes (topeEQT y y') -> True+    TopeEQT  _ty (PairT TypeInfo{ infoType = CubeProductT _ cubeI cubeJ } x y) r+      | solveRHS topes (topeEQT x (firstT cubeI r)) && solveRHS topes (topeEQT y (secondT cubeJ r)) -> True+    TopeEQT  _ty l (PairT TypeInfo{ infoType = CubeProductT _ cubeI cubeJ } x y)+      | solveRHS topes (topeEQT (firstT cubeI l) x) && solveRHS topes (topeEQT (secondT cubeJ l) y) -> True+    TopeEQT  _ty l r -> or+      [ l == r+      , tope `elem` topes+      , topeEQT r l `elem` topes+      ]+    TopeLEQT _ty l r+      | l == r -> True+      | solveRHS topes (topeEQT l r) -> True+      | solveRHS topes (topeEQT l cube2_0T) -> True+      | solveRHS topes (topeEQT r cube2_1T) -> True+    -- TopeBottomT{}  -> solveLHS topes tope+    TopeAndT _ l r -> solveRHS topes l && solveRHS topes r+    TopeOrT  _ l r -> solveRHS topes l || solveRHS topes r+    _ -> tope `elem` topes++checkTope :: Eq var => TermT var -> TypeCheck var Bool+checkTope tope = do+  ctxTopes <- asks availableTopes+  performing (ActionContextEntails ctxTopes tope) $ do+    topes' <- asks localTopesNF+    tope' <- nfTope tope+    topes' `entailM` tope'++checkTopeEntails :: Eq var => TermT var -> TypeCheck var Bool+checkTopeEntails tope = do+  ctxTopes <- asks availableTopes+  performing (ActionContextEntailedBy ctxTopes tope) $ do+    contextTopes <- asks availableTopesNF+    restrictionTope <- nfTope tope+    let contextTopesRHS = foldr topeAndT topeTopT contextTopes+    [plainTope restrictionTope] `entailM` contextTopesRHS++checkEntails :: Eq var => TermT var -> TermT var -> TypeCheck var Bool+checkEntails l r = do  -- FIXME: add action+  l' <- nfTope l+  r' <- nfTope r+  [plainTope l'] `entailM` r'++contextEntails :: Eq var => TermT var -> TypeCheck var ()+contextEntails tope = do+  ctxTopes <- asks availableTopes+  performing (ActionContextEntails ctxTopes tope) $ do+    topeIsEntailed <- checkTope tope+    topes' <- asks availableTopesNF+    -- When a hole is used in a cube/tope position (e.g. as the argument of a+    -- shape-restricted function), the tope being checked mentions the hole and+    -- cannot be decided. Treat it as satisfied (defer) rather than failing.+    unless (topeIsEntailed || containsHole tope) $+      issueTypeError $ TypeErrorTopeNotSatisfied topes' tope++topesEquiv :: Eq var => TermT var -> TermT var -> TypeCheck var Bool+topesEquiv expected actual = performing (ActionUnifyTerms expected actual) $ do+  expected' <- nfT expected+  actual' <- nfT actual+  (&&)+    <$> [plainTope expected'] `entailM` actual'+    <*> [plainTope actual'] `entailM` expected'++-- | Check that the local tope context is included in (entails) the union of+-- the given topes. This is the COVERAGE obligation of @recOR@: every point of the+-- context must be covered by some branch guard.+--+-- Note that only coverage is required, not equivalence: branch guards may overhang+-- the context (e.g. when splitting with an already-defined shape), so we do not+-- require @OR(guards) |- context@.+contextEntailsUnion :: Eq var => [TermT var] -> TypeCheck var ()+contextEntailsUnion topes = do+  ctxTopes <- asks availableTopes+  performing (ActionContextEntailsUnion ctxTopes topes) $ do+    contextTopes <- asks localTopesNF+    topesNF <- mapM nfTope topes+    let unionRHS = foldr topeOrT topeBottomT topesNF+    contextTopes `entailM` unionRHS >>= \case+      -- a guard mentioning an (unfilled) hole can't be decided; defer coverage+      False | not (any containsHole topesNF) ->+        issueTypeError $ TypeErrorTopeNotSatisfied (accessibleTopes contextTopes) unionRHS+      _ -> return ()++-- | Diagnose a recOR branch guard or restriction face against the local tope+-- context. There are three cases, by how the tope relates to the context:+--+--   * DISJOINT — the tope and a consistent context have empty overlap (their+--     conjunction is ⊥). The face/branch is then vacuous everywhere, so this is a+--     hard error.+--   * OVERHANG — the tope is not entailed by the context but still overlaps it.+--     This is allowed and often intentional (e.g. splitting or restricting with an+--     already-defined shape, whose faces live on the whole cube rather than being+--     relativised to the context), so we only emit a non-fatal hint. The hint is+--     gated at 'Normal' verbosity, hence silent under 'Silent' (e.g. in tests).+--   * CONTAINED — the tope entails the context: nothing to report.+checkTopeAgainstContext :: Eq var => String -> TermT var -> TypeCheck var ()+checkTopeAgainstContext what tope = do+  -- a contradictory context is handled elsewhere (recBOT)+  ctxEntailsBottom <- contextEntailsBottom+  unless ctxEntailsBottom $ do+    contextTopes <- asks localTopesNF+    let ctxTopes = filter (/= topeTopT) (accessibleTopes contextTopes)+    disjoint <- (plainTope tope : contextTopes) `entailM` topeBottomT+    -- a face/guard mentioning an (unfilled) hole can't be decided; defer+    if disjoint && not (containsHole tope)+      then issueTypeError (TypeErrorTopeContextDisjoint tope ctxTopes)+      else do+        entailed <- checkTopeEntails tope     -- tope |- AND(accessible context)+        unless entailed $ do+          topeStr <- ppTermInContext tope+          ctxStrs <- mapM ppTermInContext ctxTopes+          traceTypeCheck Normal+            (intercalate "\n" $+              [ "Warning: " <> what <> " overhangs the local tope context"+              , "  " <> topeStr+              , "is not entailed by the local context (normalised)"+              ] <> map ("  " <>) ctxStrs)+            (return ())++switchVariance :: TypeCheck var a -> TypeCheck var a+switchVariance = local $ \Context{..} -> Context+  { covariance = switch covariance, .. }+    where+      switch Covariant     = Contravariant+      switch Contravariant = Covariant+      switch Invariant     = Invariant++setVariance :: Covariance -> TypeCheck var a -> TypeCheck var a+setVariance variance = local $ \Context{..} -> Context+  { covariance = variance, .. }++enterScopeContext :: Binder -> TModality -> TermT var -> Maybe (TermT var) -> Context var -> Context (Inc var)+enterScopeContext orig md ty val context =+  addVarInCurrentScope Z VarInfo+    { varType   = S <$> ty+    , varValue  = fmap (S <$>) val+    , varOrig   = orig+    , varModality = md+    , modAccum = Id+    , varIsAssumption = False+    , varIsTopLevel = False+    , varDeclaredAssumptions = []+    , varLocation = location context+    }+    (S <$> context)++enterScopeMaybe :: Binder -> TModality -> TermT var -> Maybe (TermT var) -> TypeCheck (Inc var) b -> TypeCheck var b+enterScopeMaybe orig md ty mval action = do+  newContext <- asks (enterScopeContext orig md ty mval)+  closeScope orig (runReaderT action newContext)++enterScope :: Binder -> TModality -> TermT var -> TypeCheck (Inc var) b -> TypeCheck var b+enterScope orig md ty = enterScopeMaybe orig md ty Nothing++enterScopeWithBind :: Binder -> TModality -> TermT var -> TermT var -> TypeCheck (Inc var) b -> TypeCheck var b+enterScopeWithBind orig md ty val = enterScopeMaybe orig md ty (Just val)++-- | Run a sub-scope computation and lift it back to the enclosing scope: close+-- the error channel one binder with 'ScopedTypeError' (as before), and re-emit+-- the holes it recorded. 'HoleInfo' is already rendered to 'VarIdent' names, so+-- no De Bruijn re-indexing is needed — only a plain re-'tell'. On a thrown+-- error the sub-scope's holes are dropped, which is intended: holes only matter+-- on the success path (lenient mode), and strict mode wants the error anyway.+closeScope+  :: Binder+  -> WriterT [HoleInfo] (Except (TypeErrorInScopedContext (Inc var))) b+  -> TypeCheck var b+closeScope orig inner = do+  (b, holes) <- lift . lift . withExceptT (ScopedTypeError (binderName orig)) $ runWriterT inner+  lift (tell holes)+  return b++enterModality :: TModality -> TypeCheck var b -> TypeCheck var b+enterModality Id action = action+enterModality md action = do+  newContext <- asks (applyModality md)+  let newContext' = newContext { localTopesEntailBottom = Nothing }+  lift $ runReaderT action newContext'++performing :: Eq var => Action var -> TypeCheck var a -> TypeCheck var a+performing action tc = do+  ctx@Context{..} <- ask+  unless (length actionStack < 1000) $  -- FIXME: which depth is reasonable? factor out into a parameter+    issueTypeError $ TypeErrorOther "maximum depth reached"+  traceTypeCheck Debug (ppSomeAction (varOrigs ctx) (length actionStack) action) $+    local (const Context { actionStack = action : actionStack, .. }) $ tc++stripTypeRestrictions :: TermT var -> TermT var+stripTypeRestrictions (TypeRestrictedT _ty ty _restriction) = stripTypeRestrictions ty+stripTypeRestrictions t = t++-- | Perform at most one \(\eta\)-expansion at the top-level to assist unification.+etaMatch :: Eq var => Maybe (TermT var) -> TermT var -> TermT var -> TypeCheck var (TermT var, TermT var)+-- FIXME: double check the next 3 rules+etaMatch _mterm expected@TypeRestrictedT{} actual@TypeRestrictedT{} = pure (expected, actual)+etaMatch  mterm expected (TypeRestrictedT _ty ty _rs) = etaMatch mterm expected ty+etaMatch (Just term) expected@TypeRestrictedT{} actual =+  etaMatch (Just term) expected (typeRestrictedT actual [(topeTopT, term)])+-- ------------------------------------+-- | Subtyping on interval+etaMatch _mterm CubeIT{} Cube2T{} = pure (cubeIT, cubeIT)+-- ------------------------------------+etaMatch _mterm expected@LambdaT{} actual@LambdaT{} = pure (expected, actual)+etaMatch _mterm expected@PairT{}   actual@PairT{}   = pure (expected, actual)+etaMatch _mterm expected@LambdaT{} actual = do+  actual' <- etaExpand actual+  pure (expected, actual')+etaMatch _mterm expected actual@LambdaT{} = do+  expected' <- etaExpand expected+  pure (expected', actual)+etaMatch _mterm expected@PairT{} actual = do+  actual' <- etaExpand actual+  pure (expected, actual')+etaMatch _mterm expected actual@PairT{} = do+  expected' <- etaExpand expected+  pure (expected', actual)+etaMatch _mterm expected actual = pure (expected, actual)++etaExpand :: Eq var => TermT var -> TypeCheck var (TermT var)+etaExpand term@LambdaT{} = pure term+etaExpand term@PairT{} = pure term+etaExpand term = do+  ty <- typeOf term+  case stripTypeRestrictions ty of+    TypeFunT _ty orig md param mtope ret -> pure $+      lambdaT ty orig (Just (md, param, mtope))+        (appT ret (S <$> term) (Pure Z))++    TypeSigmaT _ty _orig _md a b -> pure $+      pairT ty+        (firstT a term)+        (secondT (substituteT (firstT a term) b) term)++    CubeProductT _ty a b -> pure $+      pairT ty+        (firstT a term)+        (secondT b term)++    _ -> pure term++inCubeLayer :: Eq var => TermT var -> TypeCheck var Bool+inCubeLayer = \case+  RecBottomT{}    -> pure False+  UniverseT{}     -> pure False++  UniverseCubeT{} -> pure True+  CubeProductT{}  -> pure True+  CubeUnitT{}     -> pure True+  CubeUnitStarT{} -> pure True+  Cube2T{}        -> pure True+  Cube2_0T{}      -> pure True+  Cube2_1T{}      -> pure True++  t               -> typeOf t >>= inCubeLayer++inTopeLayer :: Eq var => TermT var -> TypeCheck var Bool+inTopeLayer = \case+  RecBottomT{} -> pure False+  UniverseT{} -> pure False++  UniverseCubeT{} -> pure True+  UniverseTopeT{} -> pure True++  CubeProductT{} -> pure True+  CubeUnitT{} -> pure True+  CubeUnitStarT{} -> pure True+  Cube2T{} -> pure True+  Cube2_0T{} -> pure True+  Cube2_1T{} -> pure True++  TopeTopT{} -> pure True+  TopeBottomT{} -> pure True+  TopeAndT{} -> pure True+  TopeOrT{} -> pure True+  TopeEQT{} -> pure True+  TopeLEQT{} -> pure True++  TypeFunT _ty orig md param _mtope ret -> do+    enterScope orig md param $ inTopeLayer ret++  t -> typeOfUncomputed t >>= inTopeLayer++tryRestriction :: Eq var => TermT var -> TypeCheck var (Maybe (TermT var))+tryRestriction = \case+  TypeRestrictedT _ _ rs -> do+    let go [] = pure Nothing+        go ((tope, term') : rs') = do+          checkTope tope >>= \case+            True  -> pure (Just term')+            False -> go rs'+    go rs+  _ -> pure Nothing++-- | Memoise a term's WHNF on its top node without reducing the term itself.+--+-- The returned term has the same (unreduced) structure, so free-variable and+-- @uses@ detection see exactly what the user wrote, while a later 'whnfT' is+-- O(1) via the cached 'infoWHNF'. Used when storing a definition's elaborated+-- type and value, where an in-place reduction could otherwise discard or+-- expose a variable occurrence.+memoizeWHNF :: Eq var => TermT var -> TypeCheck var (TermT var)+memoizeWHNF t@Pure{} = pure t+memoizeWHNF t@(Free (AnnF info f)) = do+  w <- whnfT t+  pure (Free (AnnF info { infoWHNF = Just w } f))++-- | Compute a typed term to its WHNF.+--+-- >>> unsafeTypeCheck' $ whnfT "(\\ (x : Unit) -> x) unit"+-- unit : Unit+whnfT :: Eq var => TermT var -> TypeCheck var (TermT var)+whnfT tt = performing (ActionWHNF tt) $ case tt of+  -- use cached result if it exists+  Free (AnnF info _)+    | Just tt' <- infoWHNF info -> pure tt'++  -- universe constants+  UniverseT{} -> pure tt+  UniverseCubeT{} -> pure tt+  UniverseTopeT{} -> pure tt++  -- cube layer (except vars, pairs, and applications)+  CubeProductT{} -> nfTope tt+  CubeUnitT{} -> pure tt+  CubeUnitStarT{} -> pure tt+  Cube2T{} -> pure tt+  Cube2_0T{} -> pure tt+  Cube2_1T{} -> pure tt+  CubeIT{} -> pure tt+  CubeI_0T{} -> pure tt+  CubeI_1T{} -> pure tt+  CubeFlipT{} -> nfTope tt+  CubeUnflipT{} -> nfTope tt++  -- tope layer (except vars, pairs of points, and applications)+  TopeTopT{} -> pure tt+  TopeBottomT{} -> pure tt+  TopeAndT{} -> nfTope tt+  TopeOrT{} -> nfTope tt+  TopeEQT{} -> nfTope tt+  TopeLEQT{} -> nfTope tt+  TopeInvT{} -> nfTope tt+  TopeUninvT{} -> nfTope tt++  -- type layer terms that should not be evaluated further+  LambdaT{} -> pure tt+  PairT{} -> pure tt+  ReflT{} -> pure tt+  TypeFunT{} -> pure tt+  TypeSigmaT{} -> pure tt+  TypeIdT{} -> pure tt+  TypeModalT{} -> pure tt+  RecBottomT{} -> pure tt+  TypeUnitT{} -> pure tt+  UnitT{} -> pure tt++  -- type ascriptions are ignored, since we already have a typechecked term+  TypeAscT _ty term _ty' -> whnfT term++  -- check if we have cube or a tope term (if so, compute NF)+  _ -> typeOf tt >>= \case+    UniverseCubeT{} -> nfTope tt+    UniverseTopeT{} -> nfTope tt++    -- CubeUnitT{} -> pure cubeUnitStarT -- compute an expression of 1 cube to its only point+    TypeUnitT{} -> pure unitT -- compute an expression of Unit type to unit+    -- FIXME: next line is ad hoc, should be improved!+    TypeRestrictedT _info TypeUnitT{} _rs -> pure unitT -- compute an expression of Unit type to unit++    -- check if we have cube point term (if so, compute NF)+    typeOf_tt -> typeOf typeOf_tt >>= \case+      UniverseCubeT{} -> nfTope tt++      -- now we are in the type layer+      _ -> fmap termIsWHNF $ do+        tryRestriction typeOf_tt >>= \case+            Just tt' -> whnfT tt'+            Nothing -> case tt of+              -- a hole is opaque: it never reduces, it is already a normal form+              HoleT{} -> pure tt+              t@(Pure var) ->+                valueOfVar var >>= \case+                  Nothing   -> pure t+                  Just term -> whnfT term++              AppT ty f x ->+                whnfT f >>= \case+                  LambdaT _ty _orig _arg body ->+                    whnfT (substituteT x body)+                  f' -> typeOf f' >>= \case+                    TypeFunT _ty _orig md _param (Just tope) UniverseTopeT{} -> do+                      x' <- enterModality md $ nfT x+                      topeAndT+                        <$> pure (AppT ty f' x')+                        <*> nfT (substituteT x' tope)+                    -- FIXME: this seems to be a hack, and will not work in all situations!+                    -- FIXME: need to check performance of this code thoroughly+                    -- FIXME: for now, it seems to add ~2x slowdown+                    TypeFunT info _orig md _param _mtope ret@TypeRestrictedT{}+                      | TypeRestrictedT{} <- infoType info -> pure (AppT ty f' x)+                      | otherwise -> do+                          x' <- enterModality md $ whnfT x+                          let ret' = substituteT x' ret+                          tryRestriction ret' >>= \case -- FIXME: too many unnecessary checks?+                            Nothing  -> pure (AppT ty { infoType = ret' } f' x')+                            Just tt' -> whnfT tt'+                    _ -> pure (AppT ty f' x)++              LetT _ty _orig _mparam val body ->+                whnfT (substituteT val body)+              LetModT ty orig app inn mparam val body -> do+                (enterModality app $ whnfT val) >>= \case+                  ModAppT _ md t | md == inn -> do+                    val' <- enterModality md $ whnfT t+                    whnfT (substituteT val' body)+                  b' | isRA inn -> do+                    bty <- typeOf b' >>= \case+                      TypeModalT _ _ t -> pure t+                      _ -> panicImpossible "not modal in letmod"+                    whnfT (substituteT (modExtractT bty app inn b') body)+                  _ -> pure (LetModT ty orig app inn mparam val body)+              FirstT ty t ->+                whnfT t >>= \case+                  PairT _ l _r -> whnfT l+                  t'           -> pure (FirstT ty t')++              SecondT ty t ->+                whnfT t >>= \case+                  PairT _ _l r -> whnfT r+                  t'           -> pure (SecondT ty t')+              ModAppT ty md b -> do+                (enterModality md $ whnfT b) >>= \case+                  ModExtractT _ app inn t | inn == md -> enterModality (comp md app) $ whnfT t+                  b' -> pure $ ModAppT ty md b'+              ModExtractT ty app inn b -> do+                (enterModality app $ whnfT b) >>= \case+                  ModAppT _ md t | inn == md -> enterModality inn $ whnfT t+                  b' -> pure (ModExtractT ty app inn b')+              IdJT ty tA a tC d x p ->+                whnfT p >>= \case+                  ReflT{} -> whnfT d+                  p'      -> pure (IdJT ty tA a tC d x p')++              RecOrT _ty rs -> do+                let go [] = pure Nothing+                    go ((tope, tt') : rs') = do+                      checkTope tope >>= \case+                        True  -> pure (Just tt')+                        False -> go rs'+                go rs >>= \case+                  Just tt' -> whnfT tt'+                  Nothing+                    | [tt'] <- nubTermT (map snd rs) -> whnfT tt'+                    | otherwise -> pure tt++              TypeRestrictedT ty type_ rs -> do+                rs' <- traverse (\(tope, term) -> (,) <$> nfT tope <*> pure term) rs+                case filter ((/= topeBottomT) . fst) rs' of+                  []   -> whnfT type_  -- get rid of restrictions at BOT+                  rs'' -> TypeRestrictedT ty <$> whnfT type_ <*> pure rs''++nfTope :: Eq var => TermT var -> TypeCheck var (TermT var)+nfTope tt = performing (ActionNF tt) $ fmap termIsNF $ case tt of+  HoleT{} -> pure tt+  Pure var ->+    valueOfVar var >>= \case+      Nothing   -> return tt+      Just term -> nfTope term++  -- see if normal form is already available+  Free (AnnF info _) | Just tt' <- infoNF info -> pure tt'++  -- universe constants+  UniverseT{} -> pure tt+  UniverseCubeT{} -> pure tt+  UniverseTopeT{} -> pure tt++  -- cube layer constants+  CubeUnitT{} -> pure tt+  CubeUnitStarT{} -> pure tt+  Cube2T{} -> pure tt+  Cube2_0T{} -> pure tt+  Cube2_1T{} -> pure tt+  CubeIT{} -> pure tt+  CubeI_0T{} -> pure tt+  CubeI_1T{} -> pure tt++  -- type layer constants+  TypeUnitT{} -> pure tt+  UnitT{} -> pure tt++  -- cube layer with computation+  CubeProductT _ty l r -> cubeProductT <$> nfTope l <*> nfTope r++  CubeFlipT ty t ->+    nfTope t >>= \case+      CubeUnflipT _ t' -> pure t'+      Cube2_0T{}       -> pure (modAppT (typeModalT cubeT Op cube2T) Op cube2_1T)+      Cube2_1T{}       -> pure (modAppT (typeModalT cubeT Op cube2T) Op cube2_0T)+      CubeI_0T{}       -> pure (modAppT (typeModalT cubeT Op cubeIT) Op cubeI_1T)+      CubeI_1T{}       -> pure (modAppT (typeModalT cubeT Op cubeIT) Op cubeI_0T)+      t'               -> pure (CubeFlipT ty t')++  CubeUnflipT ty t -> +    nfTope t >>= \case+      CubeFlipT _ t'          -> pure t'+      ModAppT _ Op Cube2_0T{} -> pure cube2_1T+      ModAppT _ Op Cube2_1T{} -> pure cube2_0T+      ModAppT _ Op CubeI_0T{} -> pure cubeI_1T+      ModAppT _ Op CubeI_1T{} -> pure cubeI_0T+      t'                      -> pure (CubeUnflipT ty t')++  -- tope layer constants+  TopeTopT{} -> pure tt+  TopeBottomT{} -> pure tt++  -- tope layer with computation+  TopeAndT ty l r ->+    nfTope l >>= \case+      TopeBottomT{} -> pure topeBottomT+      l' -> nfTope r >>= \case+        TopeBottomT{} -> pure topeBottomT+        r'            -> pure (TopeAndT ty l' r')++  TopeOrT  ty l r -> do+    l' <- nfTope l+    r' <- nfTope r+    case (l', r') of+      (TopeBottomT{}, _) -> pure r'+      (_, TopeBottomT{}) -> pure l'+      _                  -> pure (TopeOrT ty l' r')++  TopeEQT  ty l r -> TopeEQT  ty <$> nfTope l <*> nfTope r+  TopeLEQT ty l r -> TopeLEQT ty <$> nfTope l <*> nfTope r++  TopeInvT ty t ->+    -- Match And/Or on the *unnormalized* input: nfTope of a shape-restricted+    -- App produces a TopeAnd via shape-side-condition propagation, and+    -- distributing inv over that synthetic conjunction loops forever because+    -- the recursive topeInvT renormalizes the same App back into a TopeAnd.+    case t of+      TopeTopT _ -> pure $ modAppT topeT Op topeTopT+      TopeBottomT _ -> pure $ modAppT topeT Op topeBottomT+      TopeLEQT _ x y -> do+        xTy <- typeOf x+        yTy <- typeOf y+        nfTope $+          modAppT (typeModalT universeT Op topeT) Op+            (topeLEQT+              (modExtractT topeT Id Op (cubeFlipT xTy y))+              (modExtractT topeT Id Op (cubeFlipT yTy x)))+      TopeEQT _ x y -> do+        xTy <- typeOf x+        yTy <- typeOf y+        nfTope $+          modAppT (typeModalT universeT Op topeT) Op+            (topeEQT+              (modExtractT topeT Id Op (cubeFlipT xTy y))+              (modExtractT topeT Id Op (cubeFlipT yTy x)))+      TopeAndT _ phi psi -> nfTope $+        modAppT (typeModalT universeT Op topeT) Op+          (topeAndT+            (modExtractT topeT Id Op (topeInvT phi))+            (modExtractT topeT Id Op (topeInvT psi)))+      TopeOrT _ phi psi -> nfTope $+        modAppT (typeModalT universeT Op topeT) Op+          (topeOrT+            (modExtractT topeT Id Op (topeInvT phi))+            (modExtractT topeT Id Op (topeInvT psi)))+      _ ->+        nfTope t >>= \case+          TopeTopT _ -> pure topeTopT+          TopeBottomT _ -> pure topeBottomT+          TopeUninvT _ phi -> pure phi+          TopeLEQT _ x y -> do+            xTy <- typeOf x+            yTy <- typeOf y+            nfTope $+              modAppT (typeModalT universeT Op topeT) Op+                (topeLEQT+                  (modExtractT topeT Id Op (cubeFlipT xTy y))+                  (modExtractT topeT Id Op (cubeFlipT yTy x)))+          TopeEQT _ x y -> do+            xTy <- typeOf x+            yTy <- typeOf y+            nfTope $+              modAppT (typeModalT universeT Op topeT) Op+                (topeEQT+                  (modExtractT topeT Id Op (cubeFlipT xTy y))+                  (modExtractT topeT Id Op (cubeFlipT yTy x)))+          t' -> pure (TopeInvT ty t')++  TopeUninvT ty t ->+    case t of+      ModAppT _ Op inner -> case inner of+        TopeTopT _ -> pure topeTopT+        TopeBottomT _ -> pure topeBottomT +        TopeAndT _ phi psi ->+          nfTope $+              (topeAndT+                (topeUninvT phi)+                (topeUninvT psi))+        TopeOrT _ phi psi ->+          nfTope $+              (topeOrT+                (topeUninvT phi)+                (topeUninvT psi))+        _ ->+          nfTope t >>= \case+            TopeTopT _ -> pure topeTopT+            TopeBottomT _ -> pure topeBottomT+            TopeInvT _ phi -> pure phi+            ModAppT _ Op inner'' -> case inner'' of+              TopeLEQT _ x y -> do+                xTy <- typeOf x+                yTy <- typeOf y+                nfTope $+                  (topeLEQT+                    (cubeUnflipT xTy (modAppT (typeModalT cubeT Op xTy) Op y))+                    (cubeUnflipT yTy (modAppT (typeModalT cubeT Op yTy) Op x)))+              TopeEQT _ x y -> do+                xTy <- typeOf x+                yTy <- typeOf y+                nfTope $+                  (topeEQT+                    (cubeUnflipT xTy (modAppT (typeModalT cubeT Op xTy) Op y))+                    (cubeUnflipT yTy (modAppT (typeModalT cubeT Op yTy) Op x)))+              inner' ->+                pure $+                  TopeUninvT ty+                    (modAppT (typeModalT universeT Op topeT) Op inner')+            t' ->+                pure (TopeUninvT ty t')+      _ ->+        nfTope t >>= \case+          TopeInvT _ phi -> pure phi+          t'@(ModAppT _ Op _) -> nfTope (TopeUninvT ty t')+          t' -> pure (TopeUninvT ty t')++  -- type ascriptions are ignored, since we already have a typechecked term+  TypeAscT _ty term _ty' -> nfTope term++  PairT ty l r -> PairT ty <$> nfTope l <*> nfTope r++  AppT ty f x ->+    nfTope f >>= \case+      LambdaT _ty _orig _arg body ->+        nfTope (substituteT x body)+      f' -> typeOfUncomputed f' >>= \case+        TypeFunT _ty _orig md _param (Just tope) UniverseTopeT{} -> do+          x' <- enterModality md $ nfTope x+          topeAndT+            <$> pure (AppT ty f' x')+            <*> nfTope (substituteT x' tope)+        _ -> AppT ty f' <$> nfTope x++  FirstT ty t ->+    nfTope t >>= \case+      PairT _ty x _y -> pure x+      t'             -> pure (FirstT ty t')++  SecondT ty t ->+    nfTope t >>= \case+      PairT _ty _x y -> pure y+      t'             -> pure (SecondT ty t')++  LambdaT ty orig _mparam body+    | TypeFunT _ty _origF md param mtope _ret <- infoType ty ->+        -- NOTE: the domain @param@ is left unnormalised: in the tope layer it may+        -- be a shape (a function type into TOPE), which nfTope cannot normalise.+        LambdaT ty orig (Just (md, param, mtope)) <$> enterScope orig md param (nfTope body)+  LambdaT{} -> panicImpossible "lambda with a non-function type in the tope layer"+  ModAppT ty md b ->+    (enterModality md $ nfTope b) >>= \case+      ModExtractT _ _ inn t | inn == md -> pure t+      b' -> pure $ ModAppT ty md b'+  ModExtractT ty app inn b ->+    (enterModality app $ nfTope b) >>= \case+      ModAppT _ md t | inn == md -> pure t+      b' -> pure $ ModExtractT ty app inn b'+  LetModT ty orig app inn mparam val body -> do+    (enterModality app $ nfTope val) >>= \case+      ModAppT _ md t | md == inn -> do+        val' <- return t+        nfTope (substituteT val' body)+      b' | isRA inn -> do+        bty <- typeOf b' >>= \case+          TypeModalT _ _ t -> pure t+          _ -> panicImpossible "not modal in letmod"+        nfTope (substituteT (modExtractT bty app inn b') body)+      b' -> do+        bty <- typeOf b' >>= \case+          TypeModalT _ _ t -> pure t+          _ -> panicImpossible "not modal in letmod"+        val' <- enterModality app $ nfTope b'+        body' <- enterScope orig (comp app inn) bty $ nfTope body+        pure (LetModT ty orig app inn mparam val' body')++  TypeModalT ty md inner -> TypeModalT ty md <$> (enterModality md $ nfTope inner)+  LetT _ty _orig _mparam val body -> nfTope (substituteT val body)+  TypeFunT{} -> panicImpossible "exposed function type in the tope layer"+  TypeSigmaT{} -> panicImpossible "dependent sum type in the tope layer"+  TypeIdT{} -> panicImpossible "identity type in the tope layer"+  ReflT{} -> panicImpossible "refl in the tope layer"+  IdJT{} -> panicImpossible "idJ eliminator in the tope layer"+  TypeRestrictedT{} -> panicImpossible "extension types in the tope layer"++  -- A recOR/recBOT is a term-level eliminator, never a tope. It should have+  -- been rejected before reaching here (see the RecOr case of 'typecheck'); as+  -- a safety net for any other path, report a type error rather than panicking.+  RecOrT{} -> issueTypeError $ TypeErrorOther "a recOR cannot appear in the tope layer"+  RecBottomT{} -> issueTypeError $ TypeErrorOther "a recBOT cannot appear in the tope layer"++-- | Compute a typed term to its NF.+--+-- >>> unsafeTypeCheck' $ nfT "(\\ (x : Unit) -> x) unit"+-- unit : Unit+nfT :: Eq var => TermT var -> TypeCheck var (TermT var)+nfT tt = performing (ActionNF tt) $ case tt of+  -- universe constants+  UniverseT{} -> pure tt+  UniverseCubeT{} -> pure tt+  UniverseTopeT{} -> pure tt++  -- cube layer constants+  CubeUnitT{} -> pure tt+  CubeUnitStarT{} -> pure tt+  Cube2T{} -> pure tt+  Cube2_0T{} -> pure tt+  Cube2_1T{} -> pure tt+  CubeIT{} -> pure tt+  CubeI_0T{} -> pure tt+  CubeI_1T{} -> pure tt++  -- cube layer with computation+  CubeProductT{} -> nfTope tt+  CubeFlipT{} -> nfTope tt+  CubeUnflipT{} -> nfTope tt++  -- tope layer constants+  TopeTopT{} -> pure tt+  TopeBottomT{} -> pure tt++  -- tope layer with computation+  TopeAndT{} -> nfTope tt+  TopeOrT{} -> nfTope tt+  TopeEQT{} -> nfTope tt+  TopeLEQT{} -> nfTope tt+  TopeInvT{} -> nfTope tt+  TopeUninvT{} -> nfTope tt++  -- type layer constants+  ReflT ty _x -> pure (ReflT ty Nothing)+  RecBottomT{} -> pure tt+  TypeUnitT{} -> pure tt+  UnitT{} -> pure tt++  -- type ascriptions are ignored, since we already have a typechecked term+  TypeAscT _ty term _ty' -> nfT term++  -- now we are in the type layer+  _ -> do+    typeOf tt >>= tryRestriction >>= \case+        Just tt' -> nfT tt'+        Nothing -> case tt of+          -- a hole is opaque: it never reduces, it is already a normal form+          HoleT{} -> pure tt+          t@(Pure var) ->+            valueOfVar var >>= \case+              Nothing   -> pure t+              Just term -> nfT term++          TypeFunT ty orig md param mtope ret -> do+            param' <- enterModality md $ nfT param+            enterScope orig md param' $ do+              mtope' <- traverse nfT mtope+              maybe id localTope mtope' $+                TypeFunT ty orig md param' mtope' <$> nfT ret+          AppT ty f x ->+            whnfT f >>= \case+              LambdaT _ty _orig _arg body ->+                nfT (substituteT x body)+              f' -> typeOf f' >>= \case+                TypeFunT _ty _orig md _param (Just tope) UniverseTopeT{} -> do+                  x' <- enterModality md $ nfT x+                  topeAndT+                    <$> pure (AppT ty f' x')+                    <*> nfT (substituteT x' tope)+                _ -> AppT ty <$> nfT f' <*> nfT x+          LetT _ty _orig _mparam val body ->+            nfT (substituteT val body)+          LetModT ty orig app inn mparam val body -> do+            (enterModality app $ whnfT val) >>= \case+              ModAppT _ md t | md == inn -> do+                val' <- enterModality md $ nfT t+                nfT (substituteT val' body)+              b' | isRA inn -> do+                bty <- typeOf b' >>= \case+                  TypeModalT _ _ t -> pure t+                  _ -> panicImpossible "not modal in letmod"+                nfT (substituteT (modExtractT bty app inn b') body)+              b' -> do+                bty <- typeOf b' >>= \case+                  TypeModalT _ _ t -> pure t+                  _ -> panicImpossible "not modal in letmod"+                val' <- enterModality app $ nfT b'+                body' <- enterScope orig (comp app inn) bty $ nfT body+                pure (LetModT ty orig app inn mparam val' body')+          LambdaT ty orig _mparam body -> do+            case stripTypeRestrictions (infoType ty) of+              TypeFunT _ty _orig md param mtope _ret -> do+                param' <- enterModality md $ nfT param+                enterScope orig md param' $ do+                  mtope' <- traverse nfT mtope+                  maybe id localTope mtope' $+                    LambdaT ty orig (Just (md, param', mtope')) <$> nfT body+              _ -> panicImpossible "lambda with a non-function type"+++          TypeSigmaT ty orig md a b -> do+            a' <- enterModality md $ nfT a+            enterScope orig md a' $ do+              TypeSigmaT ty orig md a' <$> nfT b+          PairT ty l r -> PairT ty <$> nfT l <*> nfT r+          FirstT ty t ->+            whnfT t >>= \case+              PairT _ l _r -> nfT l+              t'           -> FirstT ty <$> nfT t'+          SecondT ty t ->+            whnfT t >>= \case+              PairT _ _l r -> nfT r+              t'           -> SecondT ty <$> nfT t'++          TypeIdT ty x _tA y -> TypeIdT ty <$> nfT x <*> pure Nothing <*> nfT y+          IdJT ty tA a tC d x p ->+            whnfT p >>= \case+              ReflT{} -> nfT d+              p' -> IdJT ty <$> nfT tA <*> nfT a <*> nfT tC <*> nfT d <*> nfT x <*> nfT p'++          RecOrT _ty rs -> do+            let go [] = pure Nothing+                go ((tope, tt') : rs') = do+                  checkTope tope >>= \case+                    True  -> pure (Just tt')+                    False -> go rs'+            go rs >>= \case+              Just tt' -> nfT tt'+              Nothing+                | [tt'] <- nubTermT (map snd rs) -> nfT tt'+                | otherwise -> pure tt+          TypeModalT ty md b -> do+            b' <- enterModality md $ nfT b+            pure (TypeModalT ty md b')+          ModAppT ty md b -> do+            (enterModality md $ whnfT b) >>= \case+              ModExtractT _ app inn t | inn == md -> enterModality (comp app inn) $ nfT t+              b' -> ModAppT ty md <$> (enterModality md $ nfT b')+          ModExtractT ty app inn b -> do+            (enterModality app $ whnfT b) >>= \case+              ModAppT _ md t | inn == md -> enterModality (comp app inn) $ nfT t+              b' -> ModExtractT ty app inn <$> (enterModality app $ nfT b') +          TypeRestrictedT ty type_ rs -> do+            rs' <- forM rs $ \(tope, term) -> do+              nfTope tope >>= \case+                TopeBottomT{} -> pure Nothing+                tope' -> do+                  term' <- localTope tope' $+                    nfT term+                  return (Just (tope', term'))+            case catMaybes rs' of+              []   -> nfT type_+              rs'' -> TypeRestrictedT ty <$> nfT type_ <*> pure rs''++checkDefinedVar :: VarIdent -> TypeCheck VarIdent ()+checkDefinedVar x = asks (lookup x . varInfos) >>= \case+  Nothing  -> issueTypeError $ TypeErrorUndefined x+  Just _ty -> return ()++valueOfVar :: Eq var => var -> TypeCheck var (Maybe (TermT var))+valueOfVar x = asks (lookup x . varValues) >>= \case+  Nothing -> issueTypeError $ TypeErrorUndefined x+  Just ty -> return ty++typeOfVar :: Eq var => var -> TypeCheck var (TermT var)+typeOfVar x = asks (lookup x . varTypes) >>= \case+  Nothing -> issueTypeError $ TypeErrorUndefined x+  Just ty -> return ty++modalityOfVar :: Eq var => var -> TypeCheck var (TModality)+modalityOfVar x = asks (lookup x . varModalities) >>= \case+  Nothing -> issueTypeError $ TypeErrorUndefined x+  Just m -> return m++locksOfVar :: Eq var => var -> TypeCheck var (TModality)+locksOfVar x = asks (lookup x . varLocks) >>= \case+  Nothing -> issueTypeError $ TypeErrorUndefined x+  Just m -> return m++isTopLevelVar :: Eq var => var -> TypeCheck var Bool+isTopLevelVar x = asks (lookup x . varTopLevels) >>= \case+  Nothing -> issueTypeError $ TypeErrorUndefined x+  Just b -> return b++typeOfUncomputed :: Eq var => TermT var -> TypeCheck var (TermT var)+typeOfUncomputed = \case+  Pure x                     -> typeOfVar x+  Free (AnnF TypeInfo{..} _) -> pure infoType++typeOf :: Eq var => TermT var -> TypeCheck var (TermT var)+typeOf t = typeOfUncomputed t >>= whnfT++unifyTopes :: Eq var => TermT var -> TermT var -> TypeCheck var ()+unifyTopes l r = do+  equiv <- (&&)+    <$> [plainTope l] `entailM` r+    <*> [plainTope r] `entailM` l+  unless equiv $+    issueTypeError (TypeErrorTopesNotEquivalent l r)++inAllSubContexts :: TypeCheck var () -> TypeCheck var () -> TypeCheck var ()+inAllSubContexts handleSingle tc = do+  topeSubContexts <- asks localTopesNFUnion+  case topeSubContexts of+    [] -> panicImpossible "empty set of alternative contexts"+    [_] -> handleSingle+    _:_:_ -> do+      forM_ topeSubContexts $ \topes' -> do+        local (\Context{..} -> Context+            { localTopes = topes'+            , localTopesNF = topes'+            , localTopesNFUnion = [topes']+            , .. }) $+          tc++unify :: Eq var => Maybe (TermT var) -> TermT var -> TermT var -> TypeCheck var ()+unify mterm expected actual = performUnification `catchError` \typeError -> do+  inAllSubContexts (throwError typeError) performUnification+  where+    performUnification = unifyInCurrentContext mterm expected actual++unifyViaDecompose :: Eq var => TermT var -> TermT var -> TypeCheck var ()+unifyViaDecompose expected actual | expected == actual = return ()+unifyViaDecompose (AppT _ f x) (AppT _ g y) = do+  unify Nothing f g+  setVariance Invariant $ unify Nothing x y+unifyViaDecompose _ _ = issueTypeError (TypeErrorOther "cannot decompose")++unifyInCurrentContext :: Eq var => Maybe (TermT var) -> TermT var -> TermT var -> TypeCheck var ()+unifyInCurrentContext mterm expected actual = performing action $ do+  inBottom <- contextEntailsBottom+  unless inBottom $+    unifyViaDecompose expected actual `catchError` \_ -> do      -- NOTE: this gives a small, but noticeable speedup+      expectedVal <- whnfT expected+      actualVal <- whnfT actual+      mea <- asks covariance >>= \case+        Covariant     -> Just <$> etaMatch mterm expectedVal actualVal+        Contravariant -> Just . swap <$> etaMatch mterm actualVal expectedVal+        Invariant     -> traceTypeCheck Debug "invariant" $ do+          -- FIXME: inefficient+          traceTypeCheck Debug "invariant->covariant" $+            setVariance Covariant     $ unifyInCurrentContext mterm expectedVal actualVal+          traceTypeCheck Debug "invariant->contravariant" $+            setVariance Contravariant $ unifyInCurrentContext mterm expectedVal actualVal+          return Nothing+      case mea of+        Nothing -> return ()+        -- A hole (lenient mode) stands for a term of the expected type, so it+        -- unifies with anything; accept it instead of falling through to the+        -- dispatch below (which would panic on an unexpected term).+        Just (expected', actual') | isHoleT expected' || isHoleT actual' -> return ()+        Just (expected', actual') ->+          unless (expected' == actual') $ do  -- NOTE: this gives a small, but noticeable speedup+            case actual' of+              RecBottomT{} -> return ()+              RecOrT _ty rs' ->+                case expected' of+                  RecOrT _ty rs -> sequence_ $+                    checkCoherence <$> rs <*> rs'+                  _ -> do+                    forM_ rs' $ \(tope, term) ->+                      localTope tope $+                        unifyTerms expected' term+              _ -> typeOf expected' >>= typeOf >>= \case+                UniverseCubeT{} -> contextEntails (topeEQT expected' actual')+                _ -> do+                  -- A hole stands for a term of the expected type, so a+                  -- unification that would otherwise fail is deferred when either+                  -- side still contains an (unfilled) hole — including one nested+                  -- in a larger term, e.g. @f ?@ checked against an extension-type+                  -- boundary. 'structuralHoleUnify' turns this off, keeping a+                  -- structural mismatch around a hole an error. Lazy: only runs on+                  -- the failure path.+                  defer <- asks deferHoleMismatches+                  let def = unless (expected' == actual') err+                      holePresent = defer && (containsHole expected' || containsHole actual')+                      err+                        | holePresent = return ()+                        | otherwise =+                            case mterm of+                              Nothing   -> issueTypeError (TypeErrorUnifyTerms expected' actual')+                              Just term -> issueTypeError (TypeErrorUnify term expected' actual')+                      errS+                        | holePresent = return ()+                        | otherwise = do+                            let expectedS = S <$> expected'+                                actualS = S <$> actual'+                            case mterm of+                              Nothing   -> issueTypeError (TypeErrorUnifyTerms expectedS actualS)+                              Just term -> issueTypeError (TypeErrorUnify (S <$> term) expectedS actualS)+                  case expected' of+                    Pure{} -> def++                    UniverseT{} -> def+                    UniverseCubeT{} -> def+                    UniverseTopeT{} -> def++                    TypeUnitT{} -> def+                    UnitT{} -> return ()  -- Unit always unifies!++                    CubeUnitT{} -> def+                    CubeUnitStarT{} -> def+                    Cube2T{} -> def+                    Cube2_0T{} -> def+                    Cube2_1T{} -> def+                    CubeIT{} -> def+                    CubeI_0T{} -> def+                    CubeI_1T{} -> def+                    CubeProductT _ l r ->+                      case actual' of+                        CubeProductT _ l' r' -> do+                          unifyTerms l l'+                          unifyTerms r r'+                        _ -> err++                    PairT _ty l r ->+                      case actual' of+                        PairT _ty' l' r' -> do+                          unifyTerms l l'+                          unifyTerms r r'++                        -- one part of eta-expansion for pairs+                        -- FIXME: add symmetric version!+                        _ -> err++                    FirstT _ty t ->+                      case actual' of+                        FirstT _ty' t' -> unifyTerms t t'+                        _              -> err++                    SecondT _ty t ->+                      case actual' of+                        SecondT _ty' t' -> unifyTerms t t'+                        _               -> err++                    TopeTopT{}    -> unifyTopes expected' actual'+                    TopeBottomT{} -> unifyTopes expected' actual'+                    TopeEQT{}     -> unifyTopes expected' actual'+                    TopeLEQT{}    -> unifyTopes expected' actual'+                    TopeAndT{}    -> unifyTopes expected' actual'+                    TopeOrT{}     -> unifyTopes expected' actual'++                    RecBottomT{} -> return () -- unifies with anything+                    RecOrT _ty rs ->+                      case actual' of+                        -- ----------------------------------------------+                        -- IMPORTANT: this pattern matching is redundant,+                        -- but it is not obvious, so+                        -- take care when refactoring!+                        -- ----------------------------------------------+        --                RecOrT _ty rs' -> sequence_ $+        --                  checkCoherence <$> rs <*> rs'+                        -- ----------------------------------------------+                        _ -> do+                          forM_ rs $ \(tope, term) ->+                            localTope tope $+                              unifyTerms term actual'++                    TypeFunT _ty _orig md cube mtope ret ->+                      case actual' of+                        TypeFunT _ty' orig' md' cube' mtope' ret' -> do+                          when (md /= md') $+                            issueTypeError (TypeErrorOther $ "modality mismatch in function type: expected " <> show md <> " but got " <> show md')+                          switchVariance $  -- unifying in the negative position!+                            unifyTerms cube cube' -- FIXME: unifyCubes+                          enterScope orig' md cube' $ do+                            case ret' of+                              UniverseTopeT{} -> do+                                -- This is the case for tope families (shapes)+                                --+                                -- (Λ → TOPE) <: (Δ → TOPE)+                                -- since if φ : Λ → TOPE+                                -- then φ ⊢ Δ+                                --+                                -- we DO NOT take tope context Φ into account!+                                expectedTopeNF <- fromMaybe topeTopT <$> traverse nfT mtope+                                actualTopeNF   <- fromMaybe topeTopT <$> traverse nfT mtope'+                                actualEntailsExpected <- [plainTope actualTopeNF] `entailM` expectedTopeNF+                                unless (actualEntailsExpected || containsHole expectedTopeNF || containsHole actualTopeNF) $+                                  issueTypeError (TypeErrorTopeNotSatisfied [actualTopeNF] expectedTopeNF)+                              _ -> do+                                -- this is the case for Π-types and extension types+                                --+                                -- Ξ | Φ | Γ   ⊢   {t : I | φ} → A t   <:   {s : J | ψ} → B s+                                -- when+                                -- Ξ | Φ, ψ ⊢ φ+                                expectedTopeNF <- fromMaybe topeTopT <$> traverse nfT mtope+                                actualTopeNF   <- fromMaybe topeTopT <$> traverse nfT mtope'+                                localTope expectedTopeNF $+                                  contextEntails actualTopeNF+                            case mterm of+                              Nothing -> unifyTerms ret ret'+                              Just term -> unifyTypes (appT ret' (S <$> term) (Pure Z)) ret ret'+                        _ -> err++                    TypeSigmaT _ty _orig md a b ->+                      case actual' of+                        TypeSigmaT _ty' orig' md' a' b' -> do+                          when (md /= md') $+                            issueTypeError (TypeErrorOther $ "modality mismatch in sigma type: expected " <> show md <> " but got " <> show md')+                          unify Nothing a a'+                          enterScope orig' md a' $ unify Nothing b b'+                        _ -> err++                    TypeIdT _ty x _tA y ->+                      case actual' of+                        TypeIdT _ty' x' _tA' y' -> do+                          -- unify Nothing tA tA' -- TODO: do we need this check?+                          unify Nothing x x'+                          unify Nothing y y'+                        _ -> err++                    AppT _ty f x ->+                      case actual' of+                        AppT _ty' f' x' -> do+                          unify Nothing f f'+                          setVariance Invariant $+                            unify Nothing x x'+                        _ -> err++                    LambdaT ty _orig _mparam body ->+                      case stripTypeRestrictions (infoType ty) of+                        TypeFunT _ty _origF md param mtope _ret ->+                          case actual' of+                            LambdaT ty' orig' _mparam' body' ->+                              case stripTypeRestrictions (infoType ty') of+                                TypeFunT _ty' _origF' md' param' mtope' _ret' -> do+                                  when (md /= md') $+                                    issueTypeError (TypeErrorOther $ "modality mismatch in lambda: expected " <> show md <> " but got " <> show md')+                                  unify Nothing param param' -- we (should) have already checked this in types!+                                  enterScope orig' md param $ do+                                    case (mtope, mtope') of+                                      (Just tope, Just tope') -> do+                                        unify Nothing tope tope' -- we (should) have already checked this in types!+                                        localTope tope $ unify Nothing body body'+                                      (Nothing, Nothing) -> do+                                        unify Nothing body body'+                                      _ -> errS+                                _ -> err+                            _ -> err+                        _ -> err++                    LetT{} -> panicImpossible "let at the root of WHNF"+                    LetModT _ orig app inn _ val body ->+                      case actual' of+                        LetModT _ _ app' inn' _ val' body'+                          | app == app', inn == inn' -> do+                            unify Nothing val val'+                            bty <- typeOf val >>= \case+                              TypeModalT _ _ t -> pure t+                              _ -> panicImpossible "not modal in letmod"+                            enterScope orig (comp app inn) bty $+                              unify Nothing body body'+                        _ -> err++                    ReflT ty _x | TypeIdT _ty x _tA y <- infoType ty ->+                      case actual' of+                        ReflT ty' _x' | TypeIdT _ty' x' _tA' y' <- infoType ty' -> do+                          -- unify Nothing tA tA' -- TODO: do we need this check?+                          unify Nothing x x'+                          unify Nothing y y'+                        _ -> err+                    ReflT{} -> panicImpossible "refl with a non-identity type!"++                    IdJT _ty a b c d e f ->+                      case actual' of+                        IdJT _ty' a' b' c' d' e' f' -> do+                          unify Nothing a a'+                          unify Nothing b b'+                          unify Nothing c c'+                          unify Nothing d d'+                          unify Nothing e e'+                          unify Nothing f f'+                        _ -> err++                    TypeAscT{} -> panicImpossible "type ascription at the root of WHNF"++                    TypeRestrictedT _ty ty rs ->+                      case actual' of+                        TypeRestrictedT _ty' ty' rs' -> do+                          unify mterm ty ty'+                          sequence_+                            [ localTope tope $ do+                                -- FIXME: can do less entails checks?+                                contextEntails (foldr topeOrT topeBottomT (map fst rs')) -- expected is less specified than actual+                                forM_ rs' $ \(tope', term') -> do+                                  localTope tope' $+                                    unify Nothing term term'+                            | (tope, term) <- rs+                            ]+                        _ -> err    -- FIXME: need better unification for restrictions+                    TypeModalT _ty m ty ->+                      case actual' of+                        TypeModalT _ty' m' ty' -> do+                          when (m' /= m) $ err+                          enterModality m $ unify Nothing ty ty'+                        _ -> err+                    ModAppT _ty m ty ->+                      case actual' of+                        ModAppT _ty' m' ty' -> do+                          when (m' /= m) $ err+                          enterModality m $ unify Nothing ty ty'+                        _ -> err+                    ModExtractT _ty app inn te ->+                      case actual' of+                        ModExtractT _ty' app' inn' te' -> do+                          when (app' /= app) $ err+                          when (inn' /= inn) $ err+                          enterModality app $ unify Nothing te te'+                        _ -> err+                    -- defensive: a hole nested anywhere also defers here rather+                    -- than panicking on an otherwise unexpected shape+                    _ | holePresent -> return ()+                    _ -> panicImpossible "unexpected term in UNIFY"+++  where+    action = case mterm of+               Nothing   -> ActionUnifyTerms expected actual+               Just term -> ActionUnify term expected actual++unifyTypes :: Eq var => TermT var -> TermT var -> TermT var -> TypeCheck var ()+unifyTypes = unify . Just++unifyTerms :: Eq var => TermT var -> TermT var -> TypeCheck var ()+unifyTerms = unify Nothing++localTope :: Eq var => TermT var -> TypeCheck var a -> TypeCheck var a+localTope tope tc = do+  Context{..} <- ask+  tope' <- nfTope tope+  let modalTope' = plainTope tope'+  -- A small optimisation to help unify terms faster+  let refine = case tope' of+        TopeEQT _ x y | x == y -> const tc          -- no new information added!+        _ | modalTope' `elem` localTopesNF -> const tc     -- no new information added!+          | otherwise -> id+  refine $ do+    entailsBottom <- (modalTope' : localTopesNF) `entailM` topeBottomT+    local (f modalTope' entailsBottom) tc+  where+    f tope' entailsBottom Context{..} = Context+      { localTopes = plainTope tope : localTopes+      , localTopesNF = tope' : localTopesNF+      , localTopesNFUnion = map nubTermT+          [ new <> old+          | new <- simplifyLHSwithDisjunctions [tope']+          , old <- localTopesNFUnion ]+      , localTopesEntailBottom = Just entailsBottom+      , .. }++universeT :: TermT var+universeT = iterate f (panicImpossible msg) !! 30+  where+    msg = "going too high up the universe levels"+    f t = UniverseT TypeInfo+      { infoType = t+      , infoNF = Just universeT+      , infoWHNF = Just universeT }++cubeT :: TermT var+cubeT = UniverseCubeT TypeInfo+  { infoType = universeT+  , infoNF = Just cubeT+  , infoWHNF = Just cubeT }++topeT :: TermT var+topeT = UniverseTopeT TypeInfo+  { infoType = universeT+  , infoNF = Just topeT+  , infoWHNF = Just topeT }++topeEQT :: TermT var -> TermT var -> TermT var+topeEQT l r = TopeEQT info l r+  where+    info = TypeInfo+      { infoType = topeT+      , infoNF = Nothing+      , infoWHNF = Nothing+      }++topeLEQT :: TermT var -> TermT var -> TermT var+topeLEQT l r = TopeLEQT info l r+  where+    info = TypeInfo+      { infoType = topeT+      , infoNF = Nothing+      , infoWHNF = Nothing+      }++topeOrT :: TermT var -> TermT var -> TermT var+topeOrT l r = TopeOrT info l r+  where+    info = TypeInfo+      { infoType = topeT+      , infoNF = Nothing+      , infoWHNF = Nothing+      }++topeAndT :: TermT var -> TermT var -> TermT var+topeAndT l r = TopeAndT info l r+  where+    info = TypeInfo+      { infoType = topeT+      , infoNF = Nothing+      , infoWHNF = Nothing+      }++cubeProductT :: TermT var -> TermT var -> TermT var+cubeProductT l r = t+  where+    t = CubeProductT info l r+    info = TypeInfo+      { infoType  = cubeT+      , infoNF    = Nothing+      , infoWHNF  = Nothing+      }++cubeUnitT :: TermT var+cubeUnitT = CubeUnitT TypeInfo+  { infoType = cubeT+  , infoNF = Just cubeUnitT+  , infoWHNF = Just cubeUnitT }++cubeUnitStarT :: TermT var+cubeUnitStarT = CubeUnitStarT TypeInfo+  { infoType = cubeUnitT+  , infoNF = Just cubeUnitStarT+  , infoWHNF = Just cubeUnitStarT }++typeUnitT :: TermT var+typeUnitT = TypeUnitT TypeInfo+  { infoType = universeT+  , infoNF = Just typeUnitT+  , infoWHNF = Just typeUnitT }++unitT :: TermT var+unitT = UnitT TypeInfo+  { infoType = typeUnitT+  , infoNF = Just unitT+  , infoWHNF = Just unitT }++cube2T :: TermT var+cube2T = Cube2T TypeInfo+  { infoType = cubeT+  , infoNF = Just cube2T+  , infoWHNF = Just cube2T }++cube2_0T :: TermT var+cube2_0T = Cube2_0T TypeInfo+  { infoType = cube2T+  , infoNF = Just cube2_0T+  , infoWHNF = Just cube2_0T }++cube2_1T :: TermT var+cube2_1T = Cube2_1T TypeInfo+  { infoType = cube2T+  , infoNF = Just cube2_1T+  , infoWHNF = Just cube2_1T }++cubeIT :: TermT var+cubeIT = CubeIT TypeInfo+  { infoType = cubeT+  , infoNF = Just cubeIT+  , infoWHNF = Just cubeIT }++cubeI_0T :: TermT var+cubeI_0T = CubeI_0T TypeInfo+  { infoType = cubeIT+  , infoNF = Just cubeI_0T+  , infoWHNF = Just cubeI_0T }++cubeI_1T :: TermT var+cubeI_1T = CubeI_1T TypeInfo+  { infoType = cubeIT+  , infoNF = Just cubeI_1T+  , infoWHNF = Just cubeI_1T }++cubeFlipT :: TermT var -> TermT var -> TermT var+cubeFlipT cubeTy t = CubeFlipT info t+  where+    info = TypeInfo+      { infoType = typeModalT cubeT Op cubeTy+      , infoNF = Nothing+      , infoWHNF = Nothing+      }++cubeUnflipT :: TermT var -> TermT var -> TermT var+cubeUnflipT cubeTy t = CubeUnflipT info t+  where+    info = TypeInfo+      { infoType = cubeTy+      , infoNF = Nothing+      , infoWHNF = Nothing+      }++topeInvT :: TermT var -> TermT var+topeInvT t = TopeInvT info t+  where+    info = TypeInfo+      { infoType = typeModalT universeT Op topeT+      , infoNF = Nothing+      , infoWHNF = Nothing+      }++topeUninvT :: TermT var -> TermT var+topeUninvT t = TopeUninvT info t+  where+    info = TypeInfo+      { infoType = topeT+      , infoNF = Nothing+      , infoWHNF = Nothing+      }++topeTopT :: TermT var+topeTopT = TopeTopT TypeInfo+  { infoType = topeT+  , infoNF = Just topeTopT+  , infoWHNF = Just topeTopT }++topeBottomT :: TermT var+topeBottomT = TopeBottomT TypeInfo+  { infoType = topeT+  , infoNF = Just topeBottomT+  , infoWHNF = Just topeBottomT }++recBottomT :: TermT var+recBottomT = RecBottomT TypeInfo+  { infoType = recBottomT+  , infoNF = Just recBottomT+  , infoWHNF = Just recBottomT }++typeRestrictedT :: TermT var -> [(TermT var, TermT var)] -> TermT var+typeRestrictedT ty rs = t+  where+    t = TypeRestrictedT info ty rs+    info = TypeInfo+      { infoType  = universeT+      , infoNF    = Nothing+      , infoWHNF  = Nothing+      }++lambdaT+  :: TermT var+  -> Binder+  -> Maybe (TModality, TermT var, Maybe (Scope TermT var))+  -> Scope TermT var+  -> TermT var+lambdaT ty orig mparam body = t+  where+    t = LambdaT info orig mparam body+    info = TypeInfo+      { infoType  = ty+      , infoNF    = Nothing+      , infoWHNF  = Just t+      }+++letT :: TermT var -> Binder -> Maybe (TermT var) -> TermT var -> Scope TermT var -> TermT var+letT ty orig mparam val body = t+  where+    t = LetT info orig mparam val body+    info = TypeInfo+      { infoType = ty+      , infoNF = Nothing+      , infoWHNF = Nothing+      }++letModT :: TermT var -> Binder -> TModality -> TModality -> Maybe (TermT var) -> TermT var -> Scope TermT var -> TermT var+letModT ty orig app inn mparam val body = t+  where+    t = LetModT info orig app inn mparam val body+    info = TypeInfo+      { infoType = ty+      , infoNF = Nothing+      , infoWHNF = Nothing+      }++appT :: TermT var -> TermT var -> TermT var -> TermT var+appT ty f x = t+  where+    t = AppT info f x+    info = TypeInfo+      { infoType  = ty+      , infoNF    = Nothing+      , infoWHNF  = Nothing+      }++pairT :: TermT var -> TermT var -> TermT var -> TermT var+pairT ty l r = t+  where+    t = PairT info l r+    info = TypeInfo+      { infoType  = ty+      , infoNF    = Nothing+      , infoWHNF  = Just t+      }++firstT :: TermT var -> TermT var -> TermT var+firstT ty arg = t+  where+    t = FirstT info arg+    info = TypeInfo+      { infoType  = ty+      , infoNF    = Nothing+      , infoWHNF  = Nothing+      }++secondT :: TermT var -> TermT var -> TermT var+secondT ty arg = t+  where+    t = SecondT info arg+    info = TypeInfo+      { infoType  = ty+      , infoNF    = Nothing+      , infoWHNF  = Nothing+      }++reflT+  :: TermT var+  -> Maybe (TermT var, Maybe (TermT var))+  -> TermT var+reflT ty mx = t+  where+    t = ReflT info mx+    info = TypeInfo+      { infoType  = ty+      , infoNF    = Just (ReflT info Nothing)+      , infoWHNF  = Just (ReflT info Nothing)+      }++typeFunT+  :: Binder+  -> TModality+  -> TermT var+  -> Maybe (Scope TermT var)+  -> Scope TermT var+  -> TermT var+typeFunT orig md cube mtope ret = t+  where+    t = TypeFunT info orig md cube mtope ret+    info = TypeInfo+      { infoType  = universeT+      , infoNF    = Nothing+      , infoWHNF  = Just t+      }++typeSigmaT+  :: Binder+  -> TModality+  -> TermT var+  -> Scope TermT var+  -> TermT var+typeSigmaT orig md a b = t+  where+    t = TypeSigmaT info orig md a b+    info = TypeInfo+      { infoType  = universeT+      , infoNF    = Nothing+      , infoWHNF  = Just t+      }++recOrT+  :: TermT var+  -> [(TermT var, TermT var)]+  -> TermT var+recOrT ty rs = t+  where+    t = RecOrT info rs+    info = TypeInfo+      { infoType  = ty+      , infoNF    = Nothing+      , infoWHNF  = Nothing+      }++typeIdT :: TermT var -> Maybe (TermT var) -> TermT var -> TermT var+typeIdT x tA y = t+  where+    t = TypeIdT info x tA y+    info = TypeInfo+      { infoType  = universeT+      , infoNF    = Nothing+      , infoWHNF  = Just t+      }++idJT+  :: TermT var+  -> TermT var+  -> TermT var+  -> TermT var+  -> TermT var+  -> TermT var+  -> TermT var+  -> TermT var+idJT ty tA a tC d x p = t+  where+    t = IdJT info tA a tC d x p+    info = TypeInfo+      { infoType  = ty+      , infoNF    = Nothing+      , infoWHNF  = Nothing+      }++typeAscT :: TermT var -> TermT var -> TermT var+typeAscT x ty = t+  where+    t = TypeAscT info x ty+    info = TypeInfo+      { infoType  = ty+      , infoNF    = Nothing+      , infoWHNF  = Nothing+      }++typeModalT :: TermT var -> TModality -> TermT var -> TermT var+typeModalT ty md te = t+  where+    t = TypeModalT info md te+    info = TypeInfo+      { infoType = ty+      , infoNF = Nothing+      , infoWHNF = Nothing+      }++modAppT :: TermT var -> TModality -> TermT var -> TermT var+modAppT ty md term = t+  where+    t = ModAppT info md term+    info = TypeInfo+      { infoType = ty+      , infoNF = Nothing+      , infoWHNF = Nothing+      }++modExtractT :: TermT var -> TModality -> TModality -> TermT var -> TermT var+modExtractT ty app inn term = t+  where+    t = ModExtractT info app inn term+    info = TypeInfo+      { infoType = ty+      , infoNF = Nothing+      , infoWHNF = Nothing+      }++-- | Check a @recOR@ in checking position against a known expected type: each+-- branch is checked against that type under its guard tope, followed by the+-- usual pairwise coherence and the coverage obligation. Passing a /restricted/+-- type pushes the boundary into every branch, so a branch hole reports the+-- faces it must meet (under its tope) instead of the bare underlying type.+--+-- Under a branch guard, the faces belonging to the other (mutually exclusive)+-- branches become disjoint from this branch's tope context, so they are pruned+-- by 'pruneVacuousFaces' before the branch is checked. Otherwise a face like+-- @i ≡ 1₂@ would be reported as vacuous while checking the @i ≡ 0₂@ branch+-- against @A [i ≡ 0₂ ↦ a, i ≡ 1₂ ↦ b]@ — which arises in particular with+-- flat-discrete cube variables, where @i ≡ 0₂ ∧ i ≡ 1₂@ is provably ⊥.+checkRecOrAgainst :: Eq var => TermT var -> [(Term var, Term var)] -> TypeCheck var (TermT var)+checkRecOrAgainst expected rs = do+  rs' <- forM rs $ \(tope, rterm) -> do+    tope' <- typecheck tope topeT+    checkTopeAgainstContext "recOR branch guard" tope'+    localTope tope' $ do+      expected' <- pruneVacuousFaces expected+      rterm' <- typecheck rterm expected'+      return (tope', rterm')+  sequence_ [ checkCoherence l r | l:rs'' <- tails rs', r <- rs'' ]+  contextEntailsUnion (map fst rs')+  return (recOrT expected rs')++-- | Drop the restriction faces of an extension type that are vacuous in the+-- current tope context (their overlap with the context is the empty tope ⊥). A+-- face mentioning an unfilled hole cannot be decided, so it is kept. Non-extension+-- types are returned unchanged. Used when descending into a recOR branch, where+-- the sibling branches' faces are disjoint from the branch guard.+pruneVacuousFaces :: Eq var => TermT var -> TypeCheck var (TermT var)+pruneVacuousFaces (TypeRestrictedT _info ty rs) = do+  contextTopes <- asks localTopesNF+  kept <- fmap concat $ forM rs $ \face@(tope, _) -> do+    vacuous <- if containsHole tope+      then return False+      else (plainTope tope : contextTopes) `entailM` topeBottomT+    return [ face | not vacuous ]+  return $ case kept of+    [] -> ty+    _  -> typeRestrictedT ty kept+pruneVacuousFaces ty = return ty++typecheck :: Eq var => Term var -> TermT var -> TypeCheck var (TermT var)+typecheck term ty = performing (ActionTypeCheck term ty) $ case term of+  -- A hole is checked against a known type (this is checking position): in+  -- strict mode it is reported as an unsolved hole; in lenient mode its goal+  -- and context are recorded and it is treated as inhabiting the expected type.+  Hole mname -> do+    reject <- asks holesAreErrors+    if reject+      then issueTypeError (TypeErrorUnsolvedHole mname ty)+      else do+        recordHole mname ty+        return (HoleT TypeInfo{ infoType = ty, infoWHNF = Nothing, infoNF = Nothing } mname)++  _ -> whnfT ty >>= \case++    RecBottomT{} -> do+      -- Even under an absurd tope context (where the expected type collapses to+      -- recBOT), the term must still be well-formed in its own right, so that+      -- ill-typed bodies are not silently admitted under a false hypothesis. We+      -- synthesise its type, discard the result, and keep the recBOT elaboration.+      _ <- infer term+      return recBottomT++    tr@(TypeRestrictedT _ty ty' rs) -> case term of+      -- A recOR against a restricted type: push the restriction into each branch+      -- instead of stripping it first, so a branch hole reports the boundary+      -- faces it must satisfy under its guard tope, rather than the bare+      -- underlying type. Concrete branches still meet the faces, which are+      -- checked on each branch's overlap with them (see the general case below).+      RecOr branches -> checkRecOrAgainst tr branches+      _ -> do+        term' <- typecheck term ty'+        -- NOTE: restriction faces need not be contained in the local tope context.+        -- Each face is checked only on its overlap with the context below, so an+        -- overhanging face is harmless (we only hint); a face disjoint from the context+        -- is vacuous, however, and is reported as an error by checkTopeAgainstContext.+        forM_ rs $ \(tope, rterm) -> do+          checkTopeAgainstContext "restriction face" tope+          localTope tope $+            unifyTerms rterm term'+        return term'    -- FIXME: correct?++    ty' -> case term of+      Lambda orig mparam body ->+        case ty' of+          TypeFunT _ty _orig' md' param' mtope' ret -> do+            case mparam of+              Nothing -> return ()+              Just (md, param, Nothing) -> do+                when (md /= md') $+                  issueTypeError (TypeErrorModalityMismatch md' md term)+                (paramType, mtope) <- do+                  paramType <- enterModality md $ infer param+                  typeOf paramType >>= \case+                    -- an argument can be a shape+                    TypeFunT _ty _orig _md cube _mtope UniverseTopeT{} -> do+                      mapM_ checkNameShadowing (binderLeaves orig)+                      enterScope orig md cube $ do+                        let tope' = appT topeT (S <$> paramType) (Pure Z)  -- eta expand ty'+                        return (cube, Just tope')+                    _kind -> return (paramType, Nothing)+                unifyTerms param' paramType+                mapM_ checkNameShadowing (binderLeaves orig)+                enterScope orig md param' $ do+                  mapM_ (unifyTerms (fromMaybe topeTopT mtope')) mtope+              Just (md, param, mtope) -> do+                when (md /= md') $+                  issueTypeError (TypeErrorModalityMismatch md' md term)+                param'' <- enterModality md $ typecheck param =<< typeOf param'+                unifyTerms param' param''+                mapM_ checkNameShadowing (binderLeaves orig)+                enterScope orig md param' $ do+                  mtope'' <- typecheck (fromMaybe TopeTop mtope) topeT+                  unifyTerms (fromMaybe topeTopT mtope') mtope''++            mapM_ checkNameShadowing (binderLeaves orig)+            enterScope orig md' param' $ do+              maybe id localTope mtope' $ do+                body' <- typecheck body ret+                return (lambdaT ty' orig (Just (md', param', mtope')) body')++          _ -> issueTypeError $ TypeErrorUnexpectedLambda term ty+      Let orig annot val body -> do+        val' <- performing (ActionCheckLetValue (binderName orig)) $ case annot of+          Nothing -> infer val+          Just bindType -> do+            bindType' <- typecheck bindType universeT+            typecheck val bindType'+        bindTy <- typeOf val'+        body' <- enterScopeWithBind orig Id bindTy val' $ do+          typecheck body (S <$> ty')+        return (letT ty' orig (Just bindTy) val' body')+      LetMod orig app inn annot val body  -> do+        val' <- performing (ActionCheckLetValue (binderName orig)) $ case annot of+          Nothing -> enterModality app $ infer val+          Just bindType -> do+            bindType' <- infer bindType+            bindUniv <- typeOf bindType'+            enterModality app $ typecheck val (typeModalT bindUniv inn bindType')+        bindTy <- typeOf val' >>= \case+          o@(TypeModalT _ty md t) ->+            if md == inn then+              return t+            else+              issueTypeError $ TypeErrorNotModal (untyped o) inn val'+          o -> issueTypeError $ TypeErrorNotModal (untyped o) inn val'+        bindVal <- whnfT val' >>= \case+          ModAppT _ty _m t -> pure (Just t)+          o | isRA inn -> pure (Just (modExtractT bindTy app inn o))+          _ -> pure Nothing+        body' <- enterScopeMaybe orig (comp app inn) bindTy bindVal $ do+          typecheck body (S <$> ty')+        return (letModT ty' orig app inn (Just bindTy) val' body')+      Pair l r ->+        case ty' of+          CubeProductT _ty a b -> do+            l' <- typecheck l a+            r' <- typecheck r b+            return (pairT ty' l' r')+          TypeSigmaT _ty _orig md a b -> do+            l' <- enterModality md $ typecheck l a+            r' <- typecheck r (substituteT l' b)+            return (pairT ty' l' r')+          _ -> issueTypeError $ TypeErrorUnexpectedPair term ty++      Refl mx ->+        case ty' of+          TypeIdT _ty y _tA z -> do+            tA <- typeOf y+            forM_ mx $ \(x, mxty) -> do+              forM_ mxty $ \xty -> do+                xty' <- typecheck xty universeT+                unifyTerms tA xty'+              x' <- typecheck x tA+              unifyTerms x' y >> unifyTerms y x'+              unifyTerms x' z >> unifyTerms z x'+            when (isNothing mx) $+              unifyTerms y z >> unifyTerms z y+            return (reflT ty' (Just (y, Just tA)))+          _ -> issueTypeError $ TypeErrorUnexpectedRefl term ty+      ModExtract{} -> panicImpossible "extract is an internal term and cannot be typechecked"+      ModApp md body -> case ty' of+        TypeModalT _ty md' tpe -> do+            when (md /= md') $ issueTypeError $+              TypeErrorModalityMismatch md' md term+            body' <- enterModality md $ typecheck body tpe+            return $ modAppT ty' md body'+        _ -> issueTypeError $ TypeErrorNotModal term md ty'++      -- In checking position the common type is already known, so we push it+      -- into every branch instead of inferring each one and unifying. This is+      -- what lets a bare hole branch (recOR(φ ↦ ?, …)) be checked against the+      -- expected type and recorded, rather than hitting TypeErrorCannotInferHole+      -- via the inference rule. The branch-guard, coherence, and coverage+      -- obligations mirror the inference rule (see the RecOr case of 'infer').+      -- A recOR is a term-level eliminator, not a tope; rejecting it when it is+      -- checked against the tope universe (e.g. in another recOR's branch guard)+      -- keeps it out of the tope layer, where it would otherwise hit a panic.+      RecOr rs -> case ty' of+        UniverseTopeT{} -> issueTypeError $+          TypeErrorOther "a recOR cannot be used as a tope"+        _ -> checkRecOrAgainst ty' rs+      -- A neutral term is inferred, then its type unified with the expected+      -- one. In lenient (hole-checking) mode a term that still carries an+      -- unfilled hole is a work in progress, so a failure of that final+      -- unification is tolerated: the holes recorded while inferring the term+      -- stand (they were committed before this point), and we accept the term+      -- rather than rejecting the whole sketch. The mismatch is typically+      -- incidental to the missing pieces — e.g. an extension-type boundary face+      -- that only fails to line up because an argument hole sits in the wrong+      -- place (`f t` vs `x`), where neither side is itself a hole, so the+      -- per-term deferral in 'unifyInCurrentContext' cannot see it. Strict mode+      -- (the default, and CI) still rejects the mismatch.+      _ -> do+        term' <- infer term+        inferredType <- typeOf term'+        lenient <- not <$> asks holesAreErrors+        if lenient && containsHole term'+          then unifyTypes term' ty' inferredType `catchError` \_ -> return ()+          else unifyTypes term' ty' inferredType+        return term'++inferAs :: Eq var => TermT var -> Term var -> TypeCheck var (TermT var)+inferAs expectedKind term = do+  term' <- infer term+  ty <- typeOf term'+  kind <- typeOf ty+  unifyTypes ty expectedKind kind+  return term'++infer :: Eq var => Term var -> TypeCheck var (TermT var)+infer tt = performing (ActionInfer tt) $ case tt of+  Hole _mname -> issueTypeError (TypeErrorCannotInferHole tt)+  Pure x -> do+    topLevel <- isTopLevelVar x+    unless topLevel $ do+      varMod <- modalityOfVar x+      locks <- locksOfVar x+      when (not (coe varMod locks)) $ issueTypeError $ TypeErrorUnaccessibleVar x varMod locks+    pure (Pure x)++  Universe     -> pure universeT+  UniverseCube -> pure cubeT+  UniverseTope -> pure topeT++  CubeUnit      -> pure cubeUnitT+  CubeUnitStar  -> pure cubeUnitStarT++  Cube2 -> pure cube2T+  Cube2_0 -> pure cube2_0T+  Cube2_1 -> pure cube2_1T++  CubeI -> pure cubeIT+  CubeI_0 -> pure cubeI_0T+  CubeI_1 -> pure cubeI_1T+  CubeProduct l r -> do+    l' <- typecheck l cubeT+    r' <- typecheck r cubeT+    return (cubeProductT l' r')++  CubeFlip t -> do+    t' <- infer t+    typeOf t' >>= \case+      CubeIT{} -> pure $ cubeFlipT cubeIT t'+      Cube2T{} -> pure $ cubeFlipT cube2T t'+      ty -> do+        tyStr <- ppTermInContext ty+        issueTypeError $ TypeErrorOther $+          "flip expects an interval cube (2 or 𝕀); got " <> tyStr+  CubeUnflip t -> do+    t' <- infer t+    typeOf t' >>= \case+      TypeModalT _ Op (CubeIT{}) -> pure $ cubeUnflipT cubeIT t'+      TypeModalT _ Op (Cube2T{}) -> pure $ cubeUnflipT cube2T t'+      ty -> do+        tyStr <- ppTermInContext ty+        issueTypeError $ TypeErrorOther $+          "unflip expects an interval cube (2 or 𝕀) under _op; got " <> tyStr+  Pair l r -> do+    l' <- infer l+    r' <- infer r+    lt <- typeOf l'+    rt <- typeOf r'+    typeOf lt >>= \case+      --    Γ ⊢ l ⇒ (I : CUBE)+      --    Γ ⊢ r ⇒ (J : CUBE)+      -- ———————————————————————————+      -- Γ ⊢ (l, r) ⇒ (I × J : CUBE)+      UniverseCubeT{} -> return (pairT (cubeProductT lt rt) l' r')+      --    Γ ⊢ l ⇒ (A : U)+      --    Γ ⊢ r ⇒ (B : U)+      -- ———————————————————————————+      -- Γ ⊢ (l, r) ⇒ (A × B : U)             where A × B = Σ (_ : A), B+      _ -> do+        -- NOTE: infer as a non-dependent pair!+        return (pairT (typeSigmaT (BinderVar Nothing) Id lt (S <$> rt)) l' r')++  First t -> do+    t' <- infer t+    fmap stripTypeRestrictions (typeOf t') >>= \case+      RecBottomT{} -> pure recBottomT -- FIXME: is this ok?+      TypeSigmaT _ty _orig _md lt _rt ->+        return (firstT lt t')+      CubeProductT _ty l _r ->+        return (firstT l t')+      ty -> issueTypeError $ TypeErrorNotPair t' ty++  Second t -> do+    t' <- infer t+    fmap stripTypeRestrictions (typeOf t') >>= \case+      RecBottomT{} -> pure recBottomT -- FIXME: is this ok?+      TypeSigmaT _ty _orig _md lt rt ->+        return (secondT (substituteT (firstT lt t') rt) t')+      CubeProductT _ty _l r ->+        return (secondT r t')+      ty -> issueTypeError $ TypeErrorNotPair t' ty++  TypeUnit -> pure typeUnitT+  Unit -> pure unitT++  TopeTop -> pure topeTopT+  TopeBottom -> pure topeBottomT++  TopeEQ l r -> do+    l' <- inferAs cubeT l+    lt <- typeOf l'+    r' <- typecheck r lt+    return (topeEQT l' r')++  TopeLEQ l r -> do+    l' <- inferAs cubeT l+    r' <- inferAs cubeT r+    lTy <- typeOf l'+    rTy <- typeOf r'+    case (lTy, rTy) of+      (Cube2T{}, Cube2T{}) -> return (topeLEQT l' r')+      (CubeIT{}, CubeIT{}) -> return (topeLEQT l' r')+      (CubeIT{}, Cube2T{}) -> do+        r'' <- typecheck r cubeIT+        return (topeLEQT l' r'')+      (Cube2T{}, CubeIT{}) -> do+        l'' <- typecheck l cubeIT+        return (topeLEQT l'' r')+      _ -> do+        lStr <- ppTermInContext lTy+        rStr <- ppTermInContext rTy+        issueTypeError $ TypeErrorOther $+          "the (t ≤ s) tope expects points in interval cubes (2 or 𝕀); got "+            <> lStr <> " and " <> rStr++  TopeAnd l r -> do+    l' <- typecheck l topeT+    r' <- typecheck r topeT+    return (topeAndT l' r')++  TopeOr l r -> do+    l' <- typecheck l topeT+    r' <- typecheck r topeT+    return (topeOrT l' r')++  TopeInv t -> do+    t' <- typecheck t topeT+    return (topeInvT t')++  TopeUninv t -> do+    t' <- typecheck t (typeModalT universeT Op topeT )+    return (topeUninvT t')++  RecBottom -> do+    contextEntails topeBottomT+    return recBottomT++  -- Γ ⊢ t ⇒ (T : K)+  -- Γ ⊢ K ≡ U+  -- —————————————+  -- Γ ⊢ t ⇒ T ⇐ U++  RecOr rs -> do+    ttts <- forM rs $ \(tope, term) -> do+      tope' <- typecheck tope topeT+      -- NOTE: branch guards need not be contained in the context. recOR requires+      -- only coverage (context |- OR(guards)), enforced by contextEntailsUnion below;+      -- a guard may overhang the context (e.g. when splitting with a named shape).+      -- checkTopeAgainstContext warns on overhang and errors only if the guard is+      -- disjoint from the context (a vacuous branch).+      checkTopeAgainstContext "recOR branch guard" tope'+      localTope tope' $ do+        term' <- inferAs universeT term+        ty <- typeOf term'+        return (tope', (term', ty))+    let rs' = map (fmap fst) ttts+        ts  = map (fmap snd) ttts+    sequence_ [ checkCoherence l r | l:rs'' <- tails rs', r <- rs'' ]+    contextEntailsUnion (map fst ttts)+    return (recOrT (recOrT universeT ts) rs')++  TypeFun orig md a Nothing b -> do+    a' <- enterModality md $ infer a+    typeOf a' >>= \case+      -- an argument can be a type+      UniverseT{} ->+        case a' of+          -- except if its a TOPE universe+          UniverseTopeT{} ->+            issueTypeError $ TypeErrorOther "tope params are illegal"+          _ -> do+            mapM_ checkNameShadowing (binderLeaves orig)+            b' <- enterScope orig md a' $ typecheck b universeT+            return (typeFunT orig md a' Nothing b')+      -- an argument can be a cube+      UniverseCubeT{} -> do+        mapM_ checkNameShadowing (binderLeaves orig)+        b' <- enterScope orig md a' $ typecheck b universeT+        return (typeFunT orig md a' Nothing b')+      -- an argument can be a shape+      TypeFunT _ty _orig _md cube mtope UniverseTopeT{} -> do+        mapM_ checkNameShadowing (binderLeaves orig)+        enterScope orig md cube $ do+          let tope' = appT topeT (S <$> a') (Pure Z)  -- eta expand a'+          localTope tope' $ do+            b' <- typecheck b universeT+            case mtope of+              Nothing -> return (typeFunT orig md cube (Just tope') b')+              Just tope'' -> return (typeFunT orig md cube (Just (topeAndT tope'' tope')) b')+      ty -> issueTypeError $ TypeErrorInvalidArgumentType a ty++  TypeFun orig md cube (Just tope) ret -> do+    cube' <- enterModality md $ typecheck cube cubeT+    mapM_ checkNameShadowing (binderLeaves orig)+    enterScope orig md cube' $ do+      tope' <- typecheck tope topeT+      localTope tope' $ do+        ret' <- typecheck ret universeT+        return (typeFunT orig md cube' (Just tope') ret')++  TypeSigma orig md a b -> do+    a' <- enterModality md $ typecheck a universeT+    mapM_ checkNameShadowing (binderLeaves orig)+    b' <- enterScope orig md a' $ typecheck b universeT+    return (typeSigmaT orig md a' b')++  TypeId x (Just tA) y -> do+    tA' <- typecheck tA universeT+    x' <- typecheck x tA'+    y' <- typecheck y tA'+    return (typeIdT x' (Just tA') y')++  TypeId x Nothing y -> do+    x' <- inferAs universeT x+    tA <- typeOf x'+    y' <- typecheck y tA+    return (typeIdT x' (Just tA) y')++  App f x -> do+    f' <- inferAs universeT f+    fmap stripTypeRestrictions (typeOf f') >>= \case+      TypeFunT _ty orig md a mtope b -> do+        -- A hole argument to a shape-restricted function carries the shape as+        -- its goal: record (binder : a | tope) rather than just the cube a.+        x' <- enterModality md $ case (x, mtope) of+          (Hole mname, Just tope) -> checkHoleAgainstShape mname orig a tope+          _                       -> typecheck x a+        let result = appT (substituteT x' b) f' x'+        case b of+          UniverseTopeT{} -> do+            case mtope of+              Nothing -> return result+              Just tope -> do+                return (topeAndT (substituteT x' tope) result)+          _               -> do+            mapM_ (contextEntails . substituteT x') mtope   -- FIXME: need to check?+            return result+      ty -> issueTypeError $ TypeErrorNotFunction f' ty++  Lambda _orig Nothing _body -> do+    issueTypeError $ TypeErrorCannotInferBareLambda tt+  Lambda orig (Just (md, ty, Nothing)) body -> do+    ty' <- enterModality md $ infer ty+    mtope <- typeOf ty' >>= \case+      -- an argument can be a type+      UniverseT{} ->+        case ty' of+          -- except if its a TOPE universe+          UniverseTopeT{} ->+            issueTypeError $ TypeErrorOther "tope params are illegal"+          _ -> return Nothing+      -- an argument can be a cube+      UniverseCubeT{} -> return Nothing+      -- an argument can be a shape+      TypeFunT _ty _orig _md cube _mtope UniverseTopeT{} -> do+        mapM_ checkNameShadowing (binderLeaves orig)+        enterScope orig md cube $ do+          let tope' = appT topeT (S <$> ty') (Pure Z)  -- eta expand ty'+          return (Just tope')+      kind -> issueTypeError $ TypeErrorInvalidArgumentType ty kind+    mapM_ checkNameShadowing (binderLeaves orig)+    enterScope orig md ty' $ do+      maybe id localTope mtope $ do+        body' <- infer body+        ret <- typeOf body'+        return (lambdaT (typeFunT orig md ty' mtope ret) orig (Just (md, ty', mtope)) body')+  Lambda orig (Just (md, cube, Just tope)) body -> do+    cube' <- enterModality md $ typecheck cube cubeT+    mapM_ checkNameShadowing (binderLeaves orig)+    enterScope orig md cube' $ do+      tope' <- infer tope+      body' <- localTope tope' $ infer body+      ret <- typeOf body'+      return (lambdaT (typeFunT orig md cube' (Just tope') ret) orig (Just (md, cube', Just tope')) body')+  Let orig annot val body -> do+    val' <- performing (ActionCheckLetValue (binderName orig)) $ case annot of+      Nothing -> infer val+      Just ty -> do+        bindTy <- typecheck ty universeT+        typecheck val bindTy+    bindTy <- typeOf val'+    enterScopeWithBind orig Id bindTy val' $ do+      body' <- infer body+      ret <- typeOf body'+      return (letT (substituteT val' ret) orig (Just bindTy) val' body')+  LetMod orig app inn annot val body -> do+    val' <- performing (ActionCheckLetValue (binderName orig)) $ case annot of+      Nothing -> enterModality app $ infer val+      Just bindType -> do+        bindType' <- infer bindType+        bindUniv <- typeOf bindType'+        enterModality app $ typecheck val (typeModalT bindUniv inn bindType')+    bindTy <- typeOf val' >>= \case+      o@(TypeModalT _ty md t) ->+        if md == inn then+          return t+        else+          issueTypeError $ TypeErrorNotModal (untyped o) inn val'+      o -> issueTypeError $ TypeErrorNotModal (untyped o) inn val'+    bindVal <- whnfT val' >>= \case+      ModAppT _ty _m t -> pure (Just t)+      o | isRA inn -> pure (Just (modExtractT bindTy app inn o))+      _ -> pure Nothing+    enterScopeMaybe orig (comp app inn) bindTy bindVal $ do+      body' <- infer body+      ret <- typeOf body'+      return (letModT (substituteT val' ret) orig app inn (Just bindTy) val' body')+  Refl Nothing -> issueTypeError $ TypeErrorCannotInferBareRefl tt+  Refl (Just (x, Nothing)) -> do+    x' <- inferAs universeT x+    ty <- typeOf x'+    return (reflT (typeIdT x' (Just ty) x') (Just (x', Just ty)))+  Refl (Just (x, Just ty)) -> do+    ty' <- typecheck ty universeT+    x' <- typecheck x ty'+    return (reflT (typeIdT x' (Just ty') x') (Just (x', Just ty')))++  IdJ tA a tC d x p -> do+    tA' <- typecheck tA universeT+    a' <- typecheck a tA'+    let typeOf_C =+          typeFunT (BinderVar Nothing) Id tA' Nothing $+            typeFunT (BinderVar Nothing) Id (typeIdT (S <$> a') (Just (S <$> tA')) (Pure Z)) Nothing $+              universeT+    tC' <- typecheck tC typeOf_C+    let typeOf_d =+          appT universeT+            (appT (typeFunT (BinderVar Nothing) Id (typeIdT a' (Just tA') a') Nothing universeT)+              tC' a')+            (reflT (typeIdT a' (Just tA') a') Nothing)+    d' <- typecheck d typeOf_d+    x' <- typecheck x tA'+    p' <- typecheck p (typeIdT a' (Just tA') x')+    let ret =+          appT universeT+            (appT (typeFunT (BinderVar Nothing) Id (typeIdT a' (Just tA') x') Nothing universeT)+              tC' x')+            p'+    return (idJT ret tA' a' tC' d' x' p')++  TypeAsc term ty -> do+    ty' <- inferAs universeT ty -- this works on types AND cubes+    term' <- typecheck term ty'+    return (typeAscT term' ty')++  TypeRestricted ty rs -> do+    ty' <- typecheck ty universeT+    rs' <- forM rs $ \(tope, term) -> do+      tope' <- typecheck tope topeT+      term' <- localTope tope' $ typecheck term ty'+      return (tope', term')+    sequence_ [ checkCoherence l r | l:rs'' <- tails rs', r <- rs'' ]+    return (typeRestrictedT ty' rs')+  TypeModal md ty -> do+    ty' <- enterModality md $ infer ty+    universeTy <- typeOf ty'+    _ <- case universeTy of+      UniverseT {}     -> pure universeTy+      UniverseCubeT {} -> pure universeTy+      UniverseTopeT {} -> pure universeTy+      _                -> issueTypeError $ TypeErrorNotTypeInModal universeTy+    return (typeModalT universeTy md ty')+  ModApp md term -> do+    term' <- enterModality md $ infer term+    ty <- typeOf term'+    tyUniv <- typeOf ty+    return $ modAppT (typeModalT tyUniv md ty) md term'+  ModExtract _ _ _ -> error "untypable $extract$"++checkCoherence+  :: Eq var+  => (TermT var, TermT var)+  -> (TermT var, TermT var)+  -> TypeCheck var ()+checkCoherence (ltope, lterm) (rtope, rterm) =+  performing (ActionCheckCoherence (ltope, lterm) (rtope, rterm)) $ do+    localTope (topeAndT ltope rtope) $ do+      ltype <- stripTypeRestrictions <$> typeOf lterm   -- FIXME: why strip?+      rtype <- stripTypeRestrictions <$> typeOf rterm   -- FIXME: why strip?+      -- FIXME: do we need to unify types here or is it included in unification of terms?+      unifyTerms ltype rtype+      unifyTerms lterm rterm++inferStandalone :: Eq var => Term var -> Either (TypeErrorInScopedContext var) (TermT var)+inferStandalone term = defaultTypeCheck (infer term)++unsafeInferStandalone' :: Term' -> TermT'+unsafeInferStandalone' term = unsafeTypeCheck' (infer term)++unsafeTypeCheck' :: TypeCheck VarIdent a -> a+unsafeTypeCheck' tc =+  case defaultTypeCheck tc of+    Left err     -> error $ ppTypeErrorInScopedContext' BottomUp err+    Right result -> result++type PointId = String+type ShapeId = [PointId]++cube2powerT :: Int -> TermT var+cube2powerT 1   = cube2T+cube2powerT dim = cubeProductT (cube2powerT (dim - 1)) cube2T++splits :: [a] -> [([a], [a])]+splits [] = [([], [])]+splits (x:xs) = ([], x:xs) : [ (x : before, after) | (before, after) <- splits xs ]++verticesFrom :: [TermT var] -> [(ShapeId, TermT var)]+verticesFrom ts = combine <$> mapM mk ts+  where+    mk t = [("0", topeEQT t cube2_0T), ("1", topeEQT t cube2_1T)]+    combine xs = ([concat (map fst xs)], foldr1 topeAndT (map snd xs))++subTopes2 :: Int -> TermT var -> [(ShapeId, TermT var)]+-- 1-dim+subTopes2 1 t =+  [ (words "0", topeEQT t cube2_0T)+  , (words "1", topeEQT t cube2_1T)+  , (words "0 1", topeTopT) ]+-- 2-dim+subTopes2 2 ts =+  -- vertices+  [ (words "00", topeEQT t cube2_0T `topeAndT` topeEQT s cube2_0T)+  , (words "01", topeEQT t cube2_0T `topeAndT` topeEQT s cube2_1T)+  , (words "10", topeEQT t cube2_1T `topeAndT` topeEQT s cube2_0T)+  , (words "11", topeEQT t cube2_1T `topeAndT` topeEQT s cube2_1T)+  -- edges and the diagonal+  , (words "00 01", topeEQT t cube2_0T)+  , (words "10 11", topeEQT t cube2_1T)+  , (words "00 10", topeEQT s cube2_0T)+  , (words "01 11", topeEQT s cube2_1T)+  , (words "00 11", topeEQT s t)+  -- triangles+  , (words "00 01 11", topeLEQT t s)+  , (words "00 10 11", topeLEQT s t)+  ]+  where+    t = firstT cube2T ts+    s = secondT cube2T ts+-- 3-dim+subTopes2 3 t =+  -- vertices+  [ (words "000", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_0T)+  , (words "001", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_1T)+  , (words "010", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_0T)+  , (words "011", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_1T)+  , (words "100", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_0T)+  , (words "101", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_1T)+  , (words "110", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_0T)+  , (words "111", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_1T)+  -- edges+  , (words "000 001", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_0T)+  , (words "010 011", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 cube2_1T)+  , (words "000 010", topeEQT t1 cube2_0T `topeAndT` topeEQT t3 cube2_0T)+  , (words "001 011", topeEQT t1 cube2_0T `topeAndT` topeEQT t3 cube2_1T)+  , (words "100 101", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_0T)+  , (words "110 111", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 cube2_1T)+  , (words "100 110", topeEQT t1 cube2_1T `topeAndT` topeEQT t3 cube2_0T)+  , (words "101 111", topeEQT t1 cube2_1T `topeAndT` topeEQT t3 cube2_1T)+  , (words "000 100", topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_0T)+  , (words "001 101", topeEQT t2 cube2_0T `topeAndT` topeEQT t3 cube2_1T)+  , (words "010 110", topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_0T)+  , (words "011 111", topeEQT t2 cube2_1T `topeAndT` topeEQT t3 cube2_1T)+  -- face diagonals+  , (words "000 011", topeEQT t1 cube2_0T `topeAndT` topeEQT t2 t3)+  , (words "100 111", topeEQT t1 cube2_1T `topeAndT` topeEQT t2 t3)+  , (words "000 101", topeEQT t2 cube2_0T `topeAndT` topeEQT t1 t3)+  , (words "010 111", topeEQT t2 cube2_1T `topeAndT` topeEQT t1 t3)+  , (words "000 110", topeEQT t3 cube2_0T `topeAndT` topeEQT t1 t2)+  , (words "001 111", topeEQT t3 cube2_1T `topeAndT` topeEQT t1 t2)+  -- the long diagonal+  , (words "000 111", topeEQT t3 t2 `topeAndT` topeEQT t2 t1)+  -- face triangles+  , (words "000 001 011", topeEQT t1 cube2_0T `topeAndT` topeLEQT t2 t3)+  , (words "000 010 011", topeEQT t1 cube2_0T `topeAndT` topeLEQT t3 t2)+  , (words "100 101 111", topeEQT t1 cube2_1T `topeAndT` topeLEQT t2 t3)+  , (words "100 110 111", topeEQT t1 cube2_1T `topeAndT` topeLEQT t3 t2)+  , (words "000 001 101", topeEQT t2 cube2_0T `topeAndT` topeLEQT t1 t3)+  , (words "000 100 101", topeEQT t2 cube2_0T `topeAndT` topeLEQT t3 t1)+  , (words "010 011 111", topeEQT t2 cube2_1T `topeAndT` topeLEQT t1 t3)+  , (words "010 110 111", topeEQT t2 cube2_1T `topeAndT` topeLEQT t3 t1)+  , (words "000 010 110", topeEQT t3 cube2_0T `topeAndT` topeLEQT t1 t2)+  , (words "000 100 110", topeEQT t3 cube2_0T `topeAndT` topeLEQT t2 t1)+  , (words "001 011 111", topeEQT t3 cube2_1T `topeAndT` topeLEQT t1 t2)+  , (words "001 101 111", topeEQT t3 cube2_1T `topeAndT` topeLEQT t2 t1)+  -- diagonal triangles+  , (words "000 001 111", topeEQT t1 t2 `topeAndT` topeLEQT t2 t3)+  , (words "000 010 111", topeEQT t1 t3 `topeAndT` topeLEQT t1 t2)+  , (words "000 100 111", topeEQT t2 t3 `topeAndT` topeLEQT t2 t1)+  , (words "000 011 111", topeLEQT t1 t2 `topeAndT` topeEQT t2 t3)+  , (words "000 101 111", topeLEQT t2 t1 `topeAndT` topeEQT t1 t3)+  , (words "000 110 111", topeLEQT t3 t1 `topeAndT` topeEQT t1 t2)+  -- tetrahedra+  , (words "000 001 011 111", topeLEQT t1 t2 `topeAndT` topeLEQT t2 t3)+  , (words "000 010 011 111", topeLEQT t1 t3 `topeAndT` topeLEQT t3 t2)+  , (words "000 001 101 111", topeLEQT t2 t1 `topeAndT` topeLEQT t1 t3)+  , (words "000 100 101 111", topeLEQT t2 t3 `topeAndT` topeLEQT t3 t1)+  , (words "000 010 110 111", topeLEQT t3 t1 `topeAndT` topeLEQT t1 t2)+  , (words "000 100 110 111", topeLEQT t3 t2 `topeAndT` topeLEQT t2 t1)+  ]+  where+    t1 = firstT  cube2T (firstT (cube2powerT 2) t)+    t2 = secondT cube2T (firstT (cube2powerT 2) t)+    t3 = secondT cube2T t+subTopes2 dim _ = error (show dim <> " dimensions are not supported")++cubeSubTopes :: [(ShapeId, TermT (Inc var))]+cubeSubTopes = subTopes2 3 (Pure Z)++limitLength :: Int -> String -> String+limitLength n s+  | length s > n = take (n - 1) s <> "…"+  | otherwise    = s++-- | Apply the 'renderHideTerm' policy to a cell's render data: drop the+-- @\<title\>@ (the full term) from every cell, and blank the visible label of a+-- proof-coloured (interior) cell. Boundary cells (coloured otherwise) keep+-- their given labels. A no-op when not hiding.+hideTermData :: Bool -> String -> RenderObjectData -> RenderObjectData+hideTermData False _ d = d+hideTermData True  mainColor d+  | renderObjectDataColor d == mainColor =+      d { renderObjectDataLabel = "", renderObjectDataFullLabel = "" }+  | otherwise = d { renderObjectDataFullLabel = "" }++renderObjectsFor+  :: Eq var+  => String+  -> Int+  -> TermT var+  -> TermT var+  -> TypeCheck var [(ShapeId, RenderObjectData)]+renderObjectsFor mainColor dim t term = fmap catMaybes $ do+  forM (subTopes2 dim t) $ \(shapeId, tope) -> do+    checkTopeEntails tope >>= \case+      False -> return Nothing+      True -> typeOf term >>= \case+        UniverseTopeT{} -> localTope term $ checkTopeEntails tope >>= \case+          False -> return Nothing+          True -> return $ Just (shapeId, RenderObjectData+            { renderObjectDataLabel = ""+            , renderObjectDataFullLabel = ""+            , renderObjectDataColor = "orange"  -- FIXME: orange for topes?+            })+        _ -> do+          origs <- asks varOrigs+          term' <- localTope tope $ whnfT term+          label <-+            case term' of+              AppT _ (Pure z) arg+                | Just (Just "_") <- lookup z origs -> return ""+                | null (nub (freeVars (untyped arg)) \\ nub (freeVars (untyped t))) ->+                    ppTermInContext (Pure z)+              _ -> ppTermInContext term'+          hide <- asks renderHideTerm+          return $ Just (shapeId, hideTermData hide mainColor RenderObjectData+            { renderObjectDataLabel = label+            , renderObjectDataFullLabel = label+            , renderObjectDataColor =+                case term' of+                  Pure{} -> "purple"+                  AppT _ (Pure x) arg+                    | Just (Just "_") <- lookup x origs -> mainColor+                    | null (nub (freeVars (untyped arg)) \\ nub (freeVars (untyped t)))  -> "purple"+                  _ -> mainColor+            })++componentWiseEQT :: Int -> TermT var -> TermT var -> TermT var+componentWiseEQT 1 t s = topeEQT t s+componentWiseEQT 2 t s = topeAndT+  (componentWiseEQT 1 (firstT  cube2T t) (firstT  cube2T s))+  (componentWiseEQT 1 (secondT cube2T t) (secondT cube2T s))+componentWiseEQT 3 t s = topeAndT+  (componentWiseEQT 2 (firstT  (cube2powerT 2) t) (firstT (cube2powerT 2) s))+  (componentWiseEQT 1 (secondT cube2T t) (secondT cube2T s))+componentWiseEQT dim _ _ = error ("cannot work with " <> show dim <> " dimensions")++renderObjectsInSubShapeFor+  :: Eq var+  => String+  -> Int+  -> [var]+  -> var+  -> TermT var+  -> TermT var+  -> TermT var+  -> TypeCheck var [(ShapeId, RenderObjectData)]+renderObjectsInSubShapeFor mainColor dim sub super retType f x = fmap catMaybes $ do+  let reduceContext+        = foldr topeOrT topeBottomT+        . map (foldr topeAndT topeTopT)+        . map (filter (\tope -> all (`notElem` tope) sub))+        . map (map tTope)+        . map (saturateTopes [])+        . simplifyLHSwithDisjunctions+  contextTopes  <- asks (reduceContext . localTopesNF)+  contextTopes' <- localTope (componentWiseEQT dim (Pure super) x) $ asks (reduceContext . localTopesNF)+  forM (subTopes2 dim (Pure super)) $ \(shapeId, tope) -> do+    checkEntails tope contextTopes >>= \case+      False -> return Nothing+      True -> do+        origs <- asks varOrigs+        term <- localTope tope (whnfT (appT retType f (Pure super)))+        label <- typeOf term >>= \case+          UniverseTopeT{} -> return ""+          _ -> do+            case term of+              AppT _ (Pure z) arg+                | Just (Just "_") <- lookup z origs -> return ""+                | null (nub (freeVars (untyped arg)) \\ [super]) -> ppTermInContext (Pure z)+              _ -> ppTermInContext term+        color <- checkEntails tope contextTopes' >>= \case+          True -> do+            case term of+              Pure{} -> return "purple"+              AppT _ (Pure z) arg+                | Just (Just "_") <- lookup z origs -> return mainColor+                | null (nub (freeVars (untyped arg)) \\ [super]) -> return "purple"+              _ -> return mainColor+          False -> return "gray"+        hide <- asks renderHideTerm+        return $ Just (shapeId, hideTermData hide mainColor RenderObjectData+          { renderObjectDataLabel = label+          , renderObjectDataFullLabel = label+          , renderObjectDataColor = color+          })++renderForSubShapeSVG+  :: Eq var+  => String+  -> Int+  -> [var]+  -> var+  -> TermT var+  -> TermT var+  -> TermT var+  -> TypeCheck var String+renderForSubShapeSVG mainColor dim sub super retType f x = do+  objects <- renderObjectsInSubShapeFor mainColor dim sub super retType f x+  let objects' = map mk objects+  return $ renderCube defaultCamera (if dim > 2 then (pi/7) else 0) $ \obj ->+    lookup obj objects'+  where+    mk (shapeId, renderData) = (intercalate "-" (map fill shapeId), renderData)+    fill xs = xs <> replicate (3 - length xs) '1'++renderForSVG :: Eq var => String -> Int -> TermT var -> TermT var -> TypeCheck var String+renderForSVG mainColor dim t term = do+  objects <- renderObjectsFor mainColor dim t term+  let objects' = map mk objects+  return $ renderCube defaultCamera (if dim > 2 then (pi/7) else 0) $ \obj ->+    lookup obj objects'+  where+    mk (shapeId, renderData) = (intercalate "-" (map fill shapeId), renderData)+    fill xs = xs <> replicate (3 - length xs) '1'++renderTermSVGFor+  :: Eq var+  => String -- ^ Main color.+  -> Int    -- ^ Accumulated dimensions so far (from 0 to 3).+  -> (Maybe (TermT var, TermT var), [var])  -- ^ Accumulated point term (and its time).+  -> TermT var  -- ^ Term to render.+  -> TypeCheck var (Maybe String)+renderTermSVGFor mainColor accDim (mp, xs) t = do+  t' <- whnfT t+  ty <- typeOf t'+  case t of -- check unevaluated term+    AppT _info f x -> typeOf f >>= \case+      TypeFunT _ fOrig md fArg mtopeArg ret | Just dim <- dimOf fArg, dim <= maxDim -> do+        enterScope fOrig md fArg $ do+          maybe id localTope mtopeArg $ do+            Just <$> renderForSubShapeSVG mainColor dim (map S xs) Z ret (S <$> f) (S <$> x)  -- FIXME: breaks for 2 * (2 * 2), but works for 2 * 2 * 2 = (2 * 2) * 2+      _ -> traverse (\(p', _) -> renderForSVG mainColor accDim p' t') mp+    TypeFunT _ _orig' md' _ _ _ | null xs -> enterScope (BinderVar (Just "_")) md' t' $ do+      renderTermSVGFor "blue" 0 (Nothing, []) (Pure Z)  -- use blue for types++    _ -> case t' of -- check evaluated term+      AppT _info f x -> typeOf f >>= \case+        TypeFunT _ fOrig md fArg mtopeArg ret | Just dim <- dimOf fArg, dim <= maxDim -> do+          enterScope fOrig md fArg $ do+            maybe id localTope mtopeArg $ do+              Just <$> renderForSubShapeSVG mainColor dim (map S xs) Z ret (S <$> f) (S <$> x)  -- FIXME: breaks for 2 * (2 * 2), but works for 2 * 2 * 2 = (2 * 2) * 2+        _ -> traverse (\(p', _) -> renderForSVG mainColor accDim p' t') mp+      TypeFunT _ _orig' md' _ _ _ | null xs -> enterScope (BinderVar (Just "_")) md' t' $ do+        renderTermSVGFor "blue" 0 (Nothing, []) (Pure Z)  -- use blue for types++      _ -> case ty of -- check type of the term+        TypeFunT _ orig md arg mtope ret+          | Just dim <- dimOf arg, accDim + dim <= maxDim -> enterScope orig md arg $ do+              maybe id localTope mtope $+                renderTermSVGFor mainColor (accDim + dim)+                  (join' (both (fmap S) <$> mp) (S <$> arg) (Pure Z), Z : map S xs) $+                    case t' of+                      LambdaT _ _orig _marg body -> body+                      _                          -> appT ret (S <$> t') (Pure Z)+          | null xs -> enterScope orig md arg $ do+              maybe id localTope mtope $+                renderTermSVGFor mainColor accDim+                  (both (fmap S) <$> mp, map S xs) $+                    case t' of+                      LambdaT _ _orig _marg body -> body+                      _                          -> appT ret (S <$> t') (Pure Z)+        _ -> traverse (\(p', _) -> renderForSVG mainColor accDim p' t') mp+  where+    maxDim = 3++    both f (x, y) = (f x, f y)++    join' Nothing Cube2T{} x = Just (x, cube2T)+    join' (Just (p, pt)) Cube2T{} x = Just (p', pt')+      where+        pt' = cubeProductT pt cube2T+        p' = pairT pt' p x+    join' p (CubeProductT _ l r) x =+      join' (join' p l (firstT l x)) r (secondT r x)+    join' _ _ _ = Nothing -- FIXME: error?++    dimOf = \case+      Cube2T{}           -> Just 1+      CubeProductT _ l r -> (+) <$> dimOf l <*> dimOf r+      _                  -> Nothing++renderTermSVG :: Eq var => TermT var -> TypeCheck var (Maybe String)+renderTermSVG = renderTermSVGFor "red" 0 (Nothing, [])  -- use red for terms by default++-- | Render the goal /cell/ for a (shape) type: introduce an abstract inhabitant+-- and render it with the proof term hidden. Under a boundary tope an abstract+-- inhabitant of an extension type reduces to the prescribed face value, so the+-- cell shows its given edges with a blank interior — the shape to inhabit, not+-- an answer. 'Nothing' for a non-shape type (a 0-cell or a non-cube goal).+renderGoalCellSVG :: Eq var => TermT var -> TypeCheck var (Maybe String)+renderGoalCellSVG ty =+  hidingTerm $ enterScope (BinderVar (Just "_")) Id ty $ renderTermSVG' (Pure Z)++renderTermSVG' :: Eq var => TermT var -> TypeCheck var (Maybe String)+renderTermSVG' t = whnfT t >>= \t' -> typeOf t >>= \case+  TypeFunT _ orig md arg mtope ret -> enterScope orig md arg $ do+    maybe id localTope mtope $ case t' of+      LambdaT _ _orig _marg (AppT _info f x) ->+        typeOf f >>= \case+          TypeFunT _ fOrig md2 fArg mtope2 _ret | Just dim <- dimOf fArg -> do+            enterScope fOrig md2 fArg $ do               maybe id localTope mtope2 $ do                 Just <$> renderForSubShapeSVG "red" dim [S Z] Z (S <$> ret) (S <$> f) (S <$> x)           _ -> defaultRenderTermSVG t' arg ret
+ test/Rzk/DiagnosticSpec.hs view
@@ -0,0 +1,98 @@+{-# LANGUAGE OverloadedStrings #-}+-- | Tests for structured diagnostics (Rzk.Diagnostic): the severity/code/+-- location derived from a type error or a hole, and the JSON encoding consumed+-- by `rzk typecheck --json`.+module Rzk.DiagnosticSpec (spec) where++import           Data.Aeson                 (encode)+import qualified Data.ByteString.Lazy.Char8 as BL8+import           Data.List                  (isInfixOf)+import qualified Data.Text                  as T++import qualified Language.Rzk.Syntax        as Rzk+import           Rzk.Diagnostic+import           Rzk.TypeCheck++import           Test.Hspec++-- | All diagnostics for a module, in lenient hole mode (type errors as errors,+-- holes as hints) — the same set `rzk typecheck --json` emits.+diagnose :: T.Text -> [Diagnostic]+diagnose src =+  case Rzk.parseModule src of+    Left err -> error ("parse error: " <> T.unpack err)+    Right m  -> case typecheckModulesWithHoles [("<test>", m)] of+      Left err                 -> [diagnoseTypeError BottomUp err]+      Right (_, errors, holes) ->+        map (diagnoseTypeError BottomUp) errors ++ map diagnoseHole holes++spec :: Spec+spec = do+  describe "diagnoseTypeError" $ do+    it "produces an error-severity diagnostic with a stable code and a line" $ do+      case diagnose "#lang rzk-1\n#check U U : U\n" of+        [d] -> do+          diagnosticSeverity d `shouldBe` SeverityError+          diagnosticCode d `shouldBe` "TypeErrorNotFunction"+          (diagnosticLocation d >>= locationLine) `shouldBe` Just 2+        ds  -> expectationFailure ("expected one diagnostic, got " <> show (length ds))++  describe "diagnoseHole" $ do+    it "produces a warning-severity diagnostic carrying the goal" $ do+      case diagnose "#lang rzk-1\n#define g : (A : U) -> A -> A\n  := \\ A a -> ?goal\n" of+        [d] -> do+          diagnosticSeverity d `shouldBe` SeverityWarning+          diagnosticCode d `shouldBe` "hole"+          ("goal" `isInfixOf` diagnosticMessage d) `shouldBe` True+        ds  -> expectationFailure ("expected one diagnostic, got " <> show (length ds))++  -- The structured hole payload (Rzk.Diagnostic.HoleData) exposes the goal and+  -- local context as separate rendered strings, so consumers (e.g. richer LSP+  -- hovers) need not parse the prose `message`. The pair-pattern example is+  -- reused from Rzk.HolesSpec so these assertions double as a regression that the+  -- restored binder names (t / s, not π₁ / π₂) survive into the JSON.+  describe "diagnoseHole structured payload" $ do+    let pairPattern =+          "#lang rzk-1\n\+          \#define test : (A : U) -> (x : A) -> ( (t , s) : 2 * 2 | s <= t ) -> A [ t === s |-> x ]\n\+          \  := \\ A x (t , s) -> ?\n"+    it "carries the goal, cube variables and topes as separate fields" $ do+      case diagnose pairPattern of+        [d] -> case diagnosticHole d of+          Just hd -> do+            holeDataName hd `shouldBe` Nothing+            holeDataShape hd `shouldBe` Nothing+            ("t \8801 s" `isInfixOf` holeDataGoal hd) `shouldBe` True   -- t ≡ s+            map fst (holeDataCubeVars hd) `shouldContain` ["(t, s)"]+            holeDataTopes hd `shouldContain` ["s \8804 t"]              -- s ≤ t+          Nothing -> expectationFailure "expected a structured hole payload"+        ds  -> expectationFailure ("expected one diagnostic, got " <> show (length ds))++    it "encodes the structured hole object in JSON" $ do+      case diagnose pairPattern of+        [d] -> do+          let json = BL8.unpack (encode d)+          ("\"code\":\"hole\"" `isInfixOf` json) `shouldBe` True+          ("\"hole\":{" `isInfixOf` json) `shouldBe` True+          ("\"goal\":" `isInfixOf` json) `shouldBe` True+          ("\"cubeVars\":" `isInfixOf` json) `shouldBe` True+          ("\"topes\":" `isInfixOf` json) `shouldBe` True+          -- restored binder names are present in the wire format+          ("(t, s)" `isInfixOf` json) `shouldBe` True+        ds  -> expectationFailure ("expected one diagnostic, got " <> show (length ds))++  describe "JSON encoding" $ do+    it "encodes severity, code and message" $ do+      case diagnose "#lang rzk-1\n#check U U : U\n" of+        [d] -> do+          let json = BL8.unpack (encode d)+          ("\"severity\":\"error\"" `isInfixOf` json) `shouldBe` True+          ("\"code\":\"TypeErrorNotFunction\"" `isInfixOf` json) `shouldBe` True+        ds  -> expectationFailure ("expected one diagnostic, got " <> show (length ds))++    it "emits a null hole field for a type-error diagnostic" $ do+      case diagnose "#lang rzk-1\n#check U U : U\n" of+        [d] -> do+          diagnosticHole d `shouldBe` Nothing+          ("\"hole\":null" `isInfixOf` BL8.unpack (encode d)) `shouldBe` True+        ds  -> expectationFailure ("expected one diagnostic, got " <> show (length ds))
+ test/Rzk/HolesSpec.hs view
@@ -0,0 +1,502 @@+{-# LANGUAGE OverloadedStrings #-}+-- | Tests for the structured goal/context query (lenient hole mode). The+-- YAML fixtures cover the strict-mode errors (ill-hole-*); here we check the+-- structured 'HoleInfo' that the game and LSP consume, which substring+-- assertions in the fixture harness cannot pin down (especially the split+-- between term variables and cube variables).+module Rzk.HolesSpec (spec) where++import           Data.List           (isInfixOf)+import           Data.Maybe          (fromMaybe)+import qualified Data.Text           as T+import qualified Data.Text.IO        as T (readFile)+import           System.Environment  (lookupEnv)+import           System.FilePath     ((</>))++import qualified Language.Rzk.Syntax as Rzk+import           Language.Rzk.Free.Syntax (VarIdent)+import           Rzk.Diagnostic      (typeErrorTagInScopedContext)+import           Rzk.TypeCheck++import           Test.Hspec++-- | Parse and typecheck a module in lenient hole mode, returning the recorded+-- holes. Errors out loudly so a broken fixture is obvious.+holesOf :: T.Text -> [HoleInfo]+holesOf src =+  case Rzk.parseModule src of+    Left err -> error ("parse error: " <> T.unpack err)+    Right m  -> case typecheckModulesWithHoles [("<test>", m)] of+      Left err            -> error ("typecheck threw: " <> ppTypeErrorInScopedContext' BottomUp err)+      Right (_, _, holes) -> holes++-- | Like 'holesOf', but allow-lists the given named top-level lemmas for the+-- candidate hints (see 'withHintLemmas'\/'typecheckModulesWithHolesAndLemmas').+holesWithLemmas :: [VarIdent] -> T.Text -> [HoleInfo]+holesWithLemmas lemmas src =+  case Rzk.parseModule src of+    Left err -> error ("parse error: " <> T.unpack err)+    Right m  -> case typecheckModulesWithHolesAndLemmas lemmas [("<test>", m)] of+      Left err            -> error ("typecheck threw: " <> ppTypeErrorInScopedContext' BottomUp err)+      Right (_, _, holes) -> holes++names :: [HoleEntry] -> [String]+names = map (show . holeEntryName)++-- | Parse and typecheck a module in lenient hole mode, returning the+-- constructor tags of the collected (non-fatal) type errors. Used to assert+-- which diagnostics fire without depending on their rendered text.+errTagsOf :: T.Text -> [String]+errTagsOf src =+  case Rzk.parseModule src of+    Left err -> error ("parse error: " <> T.unpack err)+    Right m  -> case typecheckModulesWithHoles [("<test>", m)] of+      Left err           -> [typeErrorTagInScopedContext err]+      Right (_, errs, _) -> map typeErrorTagInScopedContext errs++-- | Like 'holesOf'/'errTagsOf', but reads a module from @test/files/@ (so a+-- large example need not be inlined). Honours @RZK_TEST_ROOT@ like the other+-- specs. Returns the recorded holes and the collected error tags.+checkFile :: FilePath -> IO ([HoleInfo], [String])+checkFile name = do+  root <- fromMaybe "." <$> lookupEnv "RZK_TEST_ROOT"+  src  <- T.readFile (root </> "test" </> "files" </> name)+  case Rzk.parseModule src of+    Left err -> error ("parse error: " <> T.unpack err)+    Right m  -> case typecheckModulesWithHoles [(name, m)] of+      Left err           -> error ("typecheck threw: " <> ppTypeErrorInScopedContext' BottomUp err)+      Right (_, errs, hs) -> pure (hs, map typeErrorTagInScopedContext errs)++spec :: Spec+spec = do+  describe "typecheckModulesWithHoles (structured goal/context query)" $ do+    it "records a hole's goal and local term context (no name)" $ do+      case holesOf "#lang rzk-1\n#define f : (A : U) -> A -> A\n  := \\ A a -> ?\n" of+        [h] -> do+          holeName h `shouldBe` Nothing+          show (holeGoal h) `shouldBe` "A"+          names (holeTermVars h) `shouldContain` ["A"]+          names (holeTermVars h) `shouldContain` ["a"]+          holeCubeVars h `shouldBe` []+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    it "keeps the user's hole name and splits cube variables from term variables" $ do+      case holesOf "#lang rzk-1\n#define g : (A : U) -> (t : 2) -> A\n  := \\ A t -> ?goal\n" of+        [h] -> do+          holeName h `shouldBe` Just "goal"+          names (holeCubeVars h) `shouldBe` ["t"]+          names (holeTermVars h) `shouldContain` ["A"]+          names (holeTermVars h) `shouldNotContain` ["t"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    it "records every hole in a module" $ do+      let holes = holesOf "#lang rzk-1\n#define p : (A : U) -> (B : U) -> A -> B -> A\n  := \\ A B a b -> ?\n"+      length holes `shouldBe` 1+      let holes2 = holesOf "#lang rzk-1\n#define q : (A : U) -> A -> A\n  := \\ A a -> ?\n#define r : (A : U) -> A -> A\n  := \\ A a -> ?\n"+      length holes2 `shouldBe` 2++    -- A hole whose elaborated term reaches unification (here the `refl` endpoint)+    -- must not panic ("unexpected term in UNIFY"); it unifies with anything.+    it "handles a hole that flows into unification" $ do+      case holesOf "#lang rzk-1\n#define t : (A : U) -> (a : A) -> a =_{A} a\n  := \\ A a -> refl_{?}\n" of+        [h] -> show (holeGoal h) `shouldBe` "A"+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A bare hole in each recOR branch: the checking-direction recOR rule pushes+    -- the common type (A) into every branch, so both holes are recorded against A+    -- with their branch tope in context. Without that rule the recOR is elaborated+    -- by inference and the branch holes fail with TypeErrorCannotInferHole.+    it "records a hole in each recOR branch against the common type" $ do+      case holesOf "#lang rzk-1\n#define square : (A : U) -> A -> (2 × 2) -> A\n  := \\ A a (t , s) -> recOR ( t ≤ s ↦ ? , s ≤ t ↦ ? )\n" of+        [h1, h2] -> do+          show (holeGoal h1) `shouldBe` "A"+          show (holeGoal h2) `shouldBe` "A"+          map show (holeTopes h1) `shouldContain` ["t ≤ s"]+          map show (holeTopes h2) `shouldContain` ["s ≤ t"]+        hs  -> expectationFailure ("expected exactly two holes, got " <> show (length hs))++    -- When the recOR is checked against an /extension type/, each branch hole+    -- reports the boundary it must meet under its tope (the restriction is+    -- pushed into the branches), rather than the bare underlying type. So the+    -- player sees, e.g., that the value must equal `f t` on `s ≡ 0₂` and `a` on+    -- `s ≡ 1₂`, not just `A`.+    it "shows the extension-type boundary in a recOR branch hole" $ do+      case holesOf "#lang rzk-1\n#def square (A : U) (a : A) (f : (t : 2) → A)\n  : (t : 2) → (s : 2) → A [ s ≡ 0₂ ↦ f t , s ≡ 1₂ ↦ a ]\n  := \\ t s → recOR ( s ≤ t ↦ ? , t ≤ s ↦ ? )\n" of+        [h1, h2] -> do+          let goal1 = show (holeGoal h1)+          ("A [" `isInfixOf` goal1) `shouldBe` True   -- a restricted type, not bare A+          ("↦ f t" `isInfixOf` goal1) `shouldBe` True -- the s ≡ 0₂ face is shown+          ("↦ a" `isInfixOf` goal1) `shouldBe` True   -- the s ≡ 1₂ face is shown+          map show (holeTopes h1) `shouldContain` ["s ≤ t"]+          show (holeGoal h2) `shouldBe` goal1          -- both branches carry the same boundary+          map show (holeTopes h2) `shouldContain` ["t ≤ s"]+        hs  -> expectationFailure ("expected exactly two holes, got " <> show (length hs))++    -- A hole nested inside a larger term (`f ?`) checked against an+    -- extension-type boundary: the boundary face is unified against `f ?`, which+    -- must be deferred rather than reported as a mismatch.+    it "handles a nested hole under an extension-type boundary" $ do+      case holesOf "#lang rzk-1\n#define t : (A : U) -> (f : A -> A) -> (a : A) -> (t : 2) -> A [ t === 0_2 |-> a ]\n  := \\ A f a t -> f ?\n" of+        [h] -> show (holeGoal h) `shouldBe` "A"+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A genuinely completable work-in-progress term is tolerated. The example+    -- (the Yoneda game's square-transformation level) feeds an incomplete+    -- `codomain-square A is-segal-A a b (f ?) ? ? ? ?` where a value of+    -- `hom A (f t) a` is wanted. Inferring it records the holes, but the final+    -- check of its type then unifies two extension-type boundaries, and a+    -- *hole-free* face comparison fails — so the existing per-term deferral+    -- cannot see that a hole is involved, and the whole def was rejected with+    -- TypeErrorUnifyTerms. We now tolerate it and keep the recorded holes. The+    -- companion `…-complete` definition fills the holes and typechecks, so the+    -- holes really can be filled to make the same term check (it is not a dead+    -- end). See test/files/holes-wip-square.rzk.+    it "tolerates a completable WIP term whose type only fails around a hole" $ do+      (holes, errs) <- checkFile "holes-wip-square.rzk"+      errs `shouldBe` []          -- the WIP def is tolerated, the complete one checks+      length holes `shouldBe` 5   -- the five holes of square-transformation-wip++    -- A hole used as the argument of a shape-restricted function: the+    -- shape-membership tope (psi ?) mentions the hole and cannot be decided, so+    -- it is deferred rather than reported as TypeErrorTopeNotSatisfied. The goal+    -- is the shape (s : I | psi s), captured in holeGoalShape.+    it "records the shape goal for a hole argument to a shape-restricted function" $ do+      case holesOf "#lang rzk-1\n#define t : (I : CUBE) -> (psi : I -> TOPE) -> (A : U) -> (a : (s : I | psi s) -> A) -> (t : I) -> A\n  := \\ I psi A a t -> a ?\n" of+        [h] -> do+          show (holeGoal h) `shouldBe` "I"+          case holeGoalShape h of+            Just (s, tope) -> do+              show s `shouldBe` "s"+              show tope `shouldBe` "psi s"+            Nothing -> expectationFailure "expected a shape goal (holeGoalShape)"+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- An ordinary (non-shape) hole has no shape goal.+    it "leaves holeGoalShape empty for an ordinary hole" $ do+      case holesOf "#lang rzk-1\n#define f : (A : U) -> A -> A\n  := \\ A a -> ?\n" of+        [h] -> holeGoalShape h `shouldBe` Nothing+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A hole checked directly against an extension type shows its boundary in+    -- the goal (the extension type is a real restricted type, carried in+    -- holeGoal — not a shape, so holeGoalShape stays empty).+    it "shows the extension-type boundary in the goal" $ do+      case holesOf "#lang rzk-1\n#define t : (A : U) -> (a : A) -> (t : 2) -> A [ t === 0_2 |-> a ]\n  := \\ A a t -> ?\n" of+        [h] -> do+          holeGoalShape h `shouldBe` Nothing+          let goal = show (holeGoal h)+          ("A [" `isInfixOf` goal) `shouldBe` True   -- a restricted type, not bare A+          ("↦ a" `isInfixOf` goal) `shouldBe` True   -- the boundary face is present+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A pair-pattern binder \ (t , s) -> ? restores the user's component names:+    -- the goal and tope context show t / s, not projections (π₁ / π₂) of a fresh+    -- variable. This is what the game and LSP hole panels display.+    it "restores pair-pattern binder names in the goal and topes" $ do+      case holesOf "#lang rzk-1\n#define test : (A : U) -> (x : A) -> ( (t , s) : 2 * 2 | s <= t ) -> A [ t === s |-> x ]\n  := \\ A x (t , s) -> ?\n" of+        [h] -> do+          let goal = show (holeGoal h)+          ("t ≡ s" `isInfixOf` goal) `shouldBe` True+          ('π' `elem` goal) `shouldBe` False+          map show (holeTopes h) `shouldContain` ["s ≤ t"]+          -- the cube variable is shown as the pattern, not a fresh variable+          names (holeCubeVars h) `shouldBe` ["(t, s)"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A nested tuple pattern ((t , s) , r) restores all the component names,+    -- including the doubly-projected one (s = π₂ (π₁ x)).+    it "restores nested tuple binder names" $ do+      case holesOf "#lang rzk-1\n#define test : (A : U) -> (x : A) -> ( ((t , s) , r) : (2 * 2) * 2 | r <= s ) -> A [ r === t |-> x ]\n  := \\ A x ((t , s) , r) -> ?\n" of+        [h] -> do+          let goal = show (holeGoal h)+          ("r ≡ t" `isInfixOf` goal) `shouldBe` True+          ('π' `elem` goal) `shouldBe` False+          map show (holeTopes h) `shouldContain` ["r ≤ s"]+          names (holeCubeVars h) `shouldBe` ["((t, s), r)"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A bare use of a pattern binder's point (not a projection) inside a shape+    -- in the /goal type/ must print as the pattern, not a fresh variable: the+    -- membership tope of @((t , s) : Δ²) → A@ reads @Δ² (t , s)@, not @Δ² x@.+    it "restores a pattern point used bare in a goal-type shape tope" $ do+      case holesOf "#lang rzk-1\n#def Δ² : (2 × 2) → TOPE := \\ (t , s) → s ≤ t\n#def f (A : U) : ( ((t , s) : Δ²) → A ) := ?\n" of+        [h] -> do+          let goal = show (holeGoal h)+          ("| Δ² (t, s))" `isInfixOf` goal) `shouldBe` True+          ('π' `elem` goal) `shouldBe` False+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- Guardrail: ordinary projections of a variable that is NOT a pattern binder+    -- must still print as π₁ / π₂ (only pattern-binder projections are folded).+    it "leaves ordinary projections of a non-pattern variable as π₁ / π₂" $ do+      case holesOf "#lang rzk-1\n#define test : (A : U) -> (x : A) -> ( p : 2 * 2 | second p <= first p ) -> A [ first p === second p |-> x ]\n  := \\ A x p -> ?\n" of+        [h] -> do+          let goal = show (holeGoal h)+          ("π₁ p ≡ π₂ p" `isInfixOf` goal) `shouldBe` True+          map show (holeTopes h) `shouldContain` ["π₂ p ≤ π₁ p"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++  describe "holeCandidates (type-directed elimination candidates)" $ do+    let cands = map show . holeCandidates++    -- A hypothesis that already has the goal type is offered as-is.+    it "offers a hypothesis of the goal type directly" $ do+      case holesOf "#lang rzk-1\n#define f : (A : U) -> A -> A\n  := \\ A a -> ?\n" of+        [h] -> cands h `shouldContain` ["a"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A function is offered fully applied, with its argument left as a hole;+    -- the under-applied function itself is not a move.+    it "applies a function, leaving the argument as a hole" $ do+      case holesOf "#lang rzk-1\n#define h : (A : U) -> (B : U) -> (A -> B) -> A -> B\n  := \\ A B g a -> ?\n" of+        [h] -> cands h `shouldContain` ["g ?"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A Σ-typed hypothesis is eliminated by projection to reach the goal.+    it "projects a Σ-typed hypothesis to reach the goal" $ do+      case holesOf "#lang rzk-1\n#define k : (A : U) -> (s : Σ (a : A) , A) -> A\n  := \\ A s -> ?\n" of+        [h] -> do+          cands h `shouldContain` ["π₁ s"]+          cands h `shouldContain` ["π₂ s"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A path is eliminated by path induction. The motive is introduced straight+    -- away as a λ, so over @p : a =_A x@ the spine @idJ (A, a, \ b → \ q → ?, ?,+    -- x, p)@ has a result type that β-reduces to a hole and so fits any goal —+    -- here an ordinary goal @A@ with the path in scope.+    it "eliminates a path by idJ, introducing the motive λ" $ do+      case holesOf "#lang rzk-1\n#def f (A : U) (a x : A) (p : a =_{A} x) : A := ?\n" of+        [h] -> cands h `shouldContain` ["idJ (A, a, \\ b → \\ q → ?, ?, x, p)"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- With no path in scope there is nothing to eliminate by idJ.+    it "does not offer idJ without a path hypothesis" $ do+      case holesOf "#lang rzk-1\n#def f (A : U) (a : A) : A := ?\n" of+        [h] -> filter (isInfixOf "idJ") (cands h) `shouldBe` []+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A partial application whose result structurally mismatches the goal is not+    -- offered: matching uses structural (not fully lenient) hole unification, so+    -- the hole in @h ?@ : @P ?@ cannot excuse the mismatch with the goal @Q@.+    it "does not offer a structurally mismatched partial application" $ do+      case holesOf "#lang rzk-1\n#define t : (A : U) -> (P : A -> U) -> (Q : U) -> (h : (a : A) -> P a) -> Q\n  := \\ A P Q h -> ?\n" of+        [h] -> cands h `shouldBe` []+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- In a contradictory tope context (here the shape @t ≡ 0₂ ∧ t ≡ 1₂@, which+    -- entails ⊥) recBOT inhabits the goal, so it is offered as a candidate.+    it "offers recBOT in a contradictory tope context" $ do+      case holesOf "#lang rzk-1\n#def f (A : U) (a : A) : ( (t : 2 | t ≡ 0₂ ∧ t ≡ 1₂) → A )\n  := \\ t → ?\n" of+        [h] -> cands h `shouldContain` ["recBOT"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A consistent tope context does not offer recBOT.+    it "does not offer recBOT in a consistent tope context" $ do+      case holesOf "#lang rzk-1\n#def f (A : U) (a : A) : ( (t : 2 | t ≡ 0₂) → A )\n  := \\ t → ?\n" of+        [h] -> cands h `shouldNotContain` ["recBOT"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- In a shape setting (a cube variable in scope) the goal can be built by a+    -- tope case split; the generic two-way recOR is always available there.+    it "offers a generic recOR split in a shape setting" $ do+      case holesOf "#lang rzk-1\n#def Δ¹ : 2 → TOPE := \\ t → TOP\n#def hom (A : U) (x y : A) : U\n  := (t : Δ¹) → A [ t ≡ 0₂ ↦ x , t ≡ 1₂ ↦ y ]\n#def mor (A : U) (x y : A) : hom A x y := \\ t → ?\n" of+        hs | (h:_) <- reverse hs -> cands h `shouldContain` ["recOR (? ↦ ?, ? ↦ ?)"]+        _ -> expectationFailure "expected at least one hole"++    -- recOR and recBOT are term-level eliminators, so a hole whose goal is a cube+    -- point or a tope is never offered them — even in a setting (a cube variable+    -- in scope) that does offer a recOR split for a term goal.+    let recCands = filter (\s -> isInfixOf "recOR" s || isInfixOf "recBOT" s) . cands+    it "does not offer recOR/recBOT for a cube goal" $+      -- `?` is a cube point (goal `2`) fed to a shape function, with a cube+      -- variable `s` in scope (which would offer a recOR split for a term goal).+      case holesOf "#lang rzk-1\n#def c (A : U) (s : 2) (g : (t : 2) -> A) : A := g ?\n" of+        [h] -> recCands h `shouldBe` []+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))+    it "does not offer recOR/recBOT for a tope goal" $+      case holesOf "#lang rzk-1\n#def p (A : U) (t : 2) : TOPE := ?\n" of+        [h] -> recCands h `shouldBe` []+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- An ordinary, tope-free goal offers no recOR split.+    it "offers no recOR split for a tope-free goal" $ do+      case holesOf "#lang rzk-1\n#def plain (A : U) (a : A) : A := ?\n" of+        [h] -> filter (isInfixOf "recOR") (cands h) `shouldBe` []+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- On the boundary t ≡ 0₂ ∨ t ≡ 1₂ the faces cover the context, so the goal's+    -- restriction faces become a concrete recOR split.+    it "splits on the goal's faces when they cover the context" $ do+      case holesOf "#lang rzk-1\n#def bdry (A : U) (x y : A)\n  : ( (t : 2 | t ≡ 0₂ ∨ t ≡ 1₂) → A [ t ≡ 0₂ ↦ x , t ≡ 1₂ ↦ y ] )\n  := \\ t → ?\n" of+        [h] -> cands h `shouldContain` ["recOR (t ≡ 0₂ ↦ ?, t ≡ 1₂ ↦ ?)"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++  describe "holeCandidates with allow-listed lemmas (withHintLemmas)" $ do+    let cands = map show . holeCandidates+        -- two top-level lemmas and an off-type one; the goal is the type @B@.+        src = "#lang rzk-1\n#postulate B : U\n#postulate C : U\n"+           <> "#postulate concat : B -> B -> B\n#postulate rev : B -> B\n"+           <> "#postulate elsewhere : C\n#define goal : B := ?\n"+        oneHole f hs = case hs of+          [h] -> f h+          _   -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A top-level definition is not a hole candidate unless it is allow-listed.+    it "does not offer a top-level lemma that was not allow-listed" $+      flip oneHole (holesWithLemmas [] src) $ \h ->+        filter (isInfixOf "concat") (cands h) `shouldBe` []++    -- An allow-listed lemma is offered, applied to holes (fit to the goal).+    it "offers an allow-listed lemma applied to holes" $+      flip oneHole (holesWithLemmas ["concat"] src) $ \h ->+        cands h `shouldContain` ["concat ? ?"]++    -- Each allow-listed lemma is offered independently.+    it "offers several allow-listed lemmas" $+      flip oneHole (holesWithLemmas ["concat", "rev"] src) $ \h -> do+        cands h `shouldContain` ["concat ? ?"]+        cands h `shouldContain` ["rev ?"]++    -- The allow-list is still fit-filtered: a lemma whose type cannot reach the+    -- goal (here @elsewhere : C@ against goal @B@) is not offered.+    it "does not offer an allow-listed lemma whose type does not fit" $+      flip oneHole (holesWithLemmas ["elsewhere"] src) $ \h ->+        filter (isInfixOf "elsewhere") (cands h) `shouldBe` []++    -- Lemmas feed the candidate list only, not the local context: an allow-listed+    -- global does not appear among the hole's term/cube variables.+    it "keeps allow-listed lemmas out of the local context" $+      flip oneHole (holesWithLemmas ["concat"] src) $ \h ->+        (names (holeTermVars h) <> names (holeCubeVars h)) `shouldNotContain` ["concat"]++  describe "holeIntroductions (type-directed introduction forms)" $ do+    let intros = map show . holeIntroductions++    -- A function goal is introduced by a λ over a hole body; the binder is+    -- taken from the type, so a named domain keeps its name.+    it "introduces a function goal as a λ with a hole body" $ do+      case holesOf "#lang rzk-1\n#define f : (A : U) -> ((n : A) -> A)\n  := \\ A -> ?\n" of+        [h] -> intros h `shouldBe` ["\\ n → ?"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- The λ binder is freshened so it does not shadow a name already in scope.+    -- Here the goal unfolds to `(t : 2) -> A`, whose binder `t` (taken from+    -- `endo`'s definition, mirroring `hom`) clashes with the in-scope cube+    -- variable `t`; the introduction binds `t₁` instead of a shadowing `t`.+    it "freshens the λ binder so it does not shadow an in-scope name" $ do+      case holesOf "#lang rzk-1\n#define endo : U -> U\n  := \\ A -> (t : 2) -> A\n#define f : (A : U) -> (t : 2) -> endo A\n  := \\ A t -> ?\n" of+        [h] -> intros h `shouldBe` ["\\ t₁ → ?"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A named pattern domain (e.g. a cube point) keeps its pattern, so the λ+    -- binds the user's names rather than a projection.+    it "introduces a pattern-domain function with the pattern binder" $ do+      case holesOf "#lang rzk-1\n#define f : (A : U) -> ( ((t , s) : 2 × 2) -> A )\n  := \\ A -> ?\n" of+        [h] -> intros h `shouldBe` ["\\ (t, s) → ?"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A nameless product domain is destructured by default, recursively, with+    -- cube-point leaves named tN.+    it "destructures a nameless cube-product domain" $ do+      case holesOf "#lang rzk-1\n#def f (A : U) : ( (2 × 2 × 2) → A ) := ?\n" of+        [h] -> intros h `shouldBe` ["\\ ((t1, t2), t3) → ?"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A nameless Σ domain is destructured too, with term leaves named xN.+    it "destructures a nameless Σ domain" $ do+      case holesOf "#lang rzk-1\n#def f (A B C : U) : ( (Σ (a : A) , B) → C ) := ?\n" of+        [h] -> intros h `shouldBe` ["\\ (x1, x2) → ?"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A Σ-type goal is introduced by a pair of holes.+    it "introduces a Σ goal as a pair of holes" $ do+      case holesOf "#lang rzk-1\n#define f : (A : U) -> (B : A -> U) -> (a : A) -> (b : B a) -> Σ (w : A) , B w\n  := \\ A B a b -> ?\n" of+        [h] -> intros h `shouldBe` ["(?, ?)"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- An identity type whose endpoints already agree is introduced by refl.+    it "introduces an identity type with agreeing endpoints by refl" $ do+      case holesOf "#lang rzk-1\n#define f : (A : U) -> (a : A) -> (a =_{A} a)\n  := \\ A a -> ?\n" of+        [h] -> intros h `shouldBe` ["refl"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- refl is conditional: it is not offered when the endpoints need not agree.+    it "does not offer refl when the endpoints need not agree" $ do+      case holesOf "#lang rzk-1\n#define f : (A : U) -> (a : A) -> (b : A) -> (a =_{A} b)\n  := \\ A a b -> ?\n" of+        [h] -> intros h `shouldBe` []+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- The unit type is introduced by unit.+    it "introduces the unit type by unit" $ do+      case holesOf "#lang rzk-1\n#define f : Unit\n  := ?\n" of+        [h] -> intros h `shouldBe` ["unit"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A goal whose type has no head constructor to introduce (a neutral+    -- application) offers no introduction.+    it "offers no introduction for a neutral goal" $ do+      case holesOf "#lang rzk-1\n#define f : (A : U) -> (B : A -> U) -> (a : A) -> B a\n  := \\ A B a -> ?\n" of+        [h] -> intros h `shouldBe` []+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    -- A shape goal (a hole of type TOPE) is introduced by every tope+    -- constructor, so a shape can be built up by tapping.+    it "introduces a tope goal by every tope constructor" $ do+      case holesOf "#lang rzk-1\n#define sh : 2 -> TOPE\n  := \\ t -> ?\n" of+        [h] -> do+          show (holeGoal h) `shouldBe` "TOPE"+          intros h `shouldBe` ["⊤", "⊥", "? ≡ ?", "? ≤ ?", "? ∧ ?", "? ∨ ?"]+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++  -- In lenient (hole-checking) mode a partial proof should still typecheck even+  -- when it has not yet applied a declared variable: the unfilled hole may be+  -- where that variable will eventually be used. We tolerate the unused-variable+  -- diagnostics only while such a hole is present; strict mode (the YAML+  -- ill-unused-* fixtures) still reports them.+  describe "unused-variable diagnostics tolerated in lenient hole mode" $ do+    let section body = "#lang rzk-1\n#section sec\n#variable A : U\n"+                    <> "#variable unused-var : A\n" <> body <> "\n#end sec\n"++    it "tolerates an unused section assumption when the section has a hole" $+      errTagsOf (section "#define only-type : U\n  := ?")+        `shouldNotContain` ["TypeErrorUnusedVariable"]++    it "still reports an unused section assumption with no hole present" $+      errTagsOf (section "#define only-type : U\n  := A")+        `shouldContain` ["TypeErrorUnusedVariable"]++    let usesSection body = "#lang rzk-1\n#section sec\n#variable A : U\n"+                        <> "#variable x : A\n" <> body <> "\n#end sec\n"++    it "tolerates an unused 'uses' variable when the declaration has a hole" $+      errTagsOf (usesSection "#define f uses (x) : U\n  := ?")+        `shouldNotContain` ["TypeErrorUnusedUsedVariables"]++    it "still reports an unused 'uses' variable with no hole in the declaration" $+      errTagsOf (usesSection "#define f uses (x) : U\n  := A")+        `shouldContain` ["TypeErrorUnusedUsedVariables"]++  -- The goal cell: when the goal is a renderable shape, the hole carries an SVG+  -- of that shape, drawn from an abstract inhabitant with the proof term hidden+  -- (see 'renderHideTerm'). So the picture shows the given boundary edges with a+  -- blank interior, never the term that would fill it.+  describe "holeDiagram (goal-cell SVG)" $ do+    it "renders a shape goal as a labelled, term-free SVG" $ do+      let src = "#lang rzk-1\n\+                \#def sq (A : U) (a : A) : U\n\+                \  := ((t , s) : 2 * 2) -> A [ t === 0_2 |-> a , t === 1_2 |-> a , s === 0_2 |-> a , s === 1_2 |-> a ]\n\+                \#def fill (A : U) (a : A) : sq A a := ?\n"+      case holesOf src of+        [h] -> case holeDiagram h of+          Just svg -> do+            ("<svg" `isInfixOf` svg)            `shouldBe` True+            ("<path" `isInfixOf` svg)           `shouldBe` True  -- a 2-cell (square), not just an arrow+            (">a</text>" `isInfixOf` svg)       `shouldBe` True  -- the given boundary edge `a`+            ("<title></title>" `isInfixOf` svg) `shouldBe` True  -- titles blanked: no proof term+          Nothing -> expectationFailure "expected a goal-cell diagram for a shape goal"+        hs -> expectationFailure ("expected exactly one hole, got " <> show (length hs))++    it "has no diagram for a non-shape goal" $+      case holesOf "#lang rzk-1\n#define f : (A : U) -> A -> A\n  := \\ A a -> ?\n" of+        [h] -> holeDiagram h `shouldBe` Nothing+        hs  -> expectationFailure ("expected exactly one hole, got " <> show (length hs))
test/Rzk/TypeCheckSpec.hs view
@@ -19,6 +19,7 @@  import           Language.Rzk.Free.Syntax   (VarIdent) import qualified Language.Rzk.Syntax        as Rzk+import           Rzk.Diagnostic            (typeErrorTag) import           Rzk.TypeCheck              (Context (..), Decl', LocationInfo (..),                                            OutputDirection (..), TypeError (..),                                            TypeErrorInContext (..),@@ -64,30 +65,11 @@     location (typeErrorContext e) >>= locationLine   ScopedTypeError _ e -> errorLine (unsafeCoerce e) +-- | The constructor name of a type error, used to match @error_tag@ in+-- fixtures. This is the library's 'typeErrorTag' (also used for diagnostic+-- codes), aliased here so the two cannot drift apart. typeErrorConstructorName :: TypeError VarIdent -> String-typeErrorConstructorName = \case-  TypeErrorOther{}                -> "TypeErrorOther"-  TypeErrorUnify{}                -> "TypeErrorUnify"-  TypeErrorUnifyTerms{}           -> "TypeErrorUnifyTerms"-  TypeErrorNotPair{}              -> "TypeErrorNotPair"-  TypeErrorNotModal{}             -> "TypeErrorNotModal"-  TypeErrorModalityMismatch{}     -> "TypeErrorModalityMismatch"-  TypeErrorUnaccessibleVar{}      -> "TypeErrorUnaccessibleVar"-  TypeErrorNotTypeInModal{}       -> "TypeErrorNotTypeInModal"-  TypeErrorNotFunction{}          -> "TypeErrorNotFunction"-  TypeErrorUnexpectedLambda{}     -> "TypeErrorUnexpectedLambda"-  TypeErrorUnexpectedPair{}       -> "TypeErrorUnexpectedPair"-  TypeErrorUnexpectedRefl{}       -> "TypeErrorUnexpectedRefl"-  TypeErrorCannotInferBareLambda{} -> "TypeErrorCannotInferBareLambda"-  TypeErrorCannotInferBareRefl{}  -> "TypeErrorCannotInferBareRefl"-  TypeErrorUndefined{}           -> "TypeErrorUndefined"-  TypeErrorTopeNotSatisfied{}    -> "TypeErrorTopeNotSatisfied"-  TypeErrorTopesNotEquivalent{}  -> "TypeErrorTopesNotEquivalent"-  TypeErrorInvalidArgumentType{} -> "TypeErrorInvalidArgumentType"-  TypeErrorDuplicateTopLevel{}   -> "TypeErrorDuplicateTopLevel"-  TypeErrorUnusedVariable{}       -> "TypeErrorUnusedVariable"-  TypeErrorUnusedUsedVariables{}  -> "TypeErrorUnusedUsedVariables"-  TypeErrorImplicitAssumption{}   -> "TypeErrorImplicitAssumption"+typeErrorConstructorName = typeErrorTag  casesRoot :: FilePath casesRoot = "test/typecheck/cases"
test/doctests.hs view
@@ -1,7 +1,5 @@--- doctests/Main.hs--import           Test.DocTest+import           System.Environment (getArgs)+import           Test.DocTest       (mainFromCabal) --- This test suite exists only to add dependencies main :: IO ()-main = doctest ["src"]+main = mainFromCabal "rzk" =<< getArgs
test/typecheck/SCHEMA.md view
@@ -20,7 +20,7 @@ | `error_tag` | if `status: error` | Name of the `TypeError` constructor after stripping `ScopedTypeError` wrappers, e.g. `TypeErrorUnify`, `TypeErrorUndefined`. | | `message_contains` | no | Substrings that must all appear in the rendered error (`ppTypeErrorInScopedContext'`). | | `line` | no | 1-based line number (approximate) in the Rzk file where the error is reported. |-| `regression_for` | no | Traceability: GitHub issue/PR URLs, commit themes, or short **semantic** rule names (e.g. `contextEquiv-recOR-boundary`). Avoid `TypeCheck.hs` line numbers and `issueTypeError-<line>` tags — they go stale. |+| `regression_for` | no | Traceability: GitHub issue/PR URLs, commit themes, or short **semantic** rule names (e.g. `contextEntailsUnion-recOR-boundary`). Avoid `TypeCheck.hs` line numbers and `issueTypeError-<line>` tags — they go stale. | | `modules` | no | If set (directory case), ordered list of module files for one `typecheckModulesWithLocation` run. | | `api` | no | Omit or `strict` (default): `typecheckModulesWithLocation` (throws on first error). `collect`: `typecheckModulesWithLocation'` — returns a list of errors without using `throwError`; note that the typechecker still stops per-module chaining when a module reports errors (see implementation in `Rzk.TypeCheck`). | 
+ test/typecheck/cases/happy-flip-unflip.expect.yaml view
@@ -0,0 +1,3 @@+status: ok+regression_for:+  - flip-tope-equivalence
+ test/typecheck/cases/happy-flip-unflip.rzk view
@@ -0,0 +1,29 @@+#lang rzk-1++-- Test: _op (flip(i) === 0_2) is equivalent to (i === 1_2)+-- Verified via propositional equality of topes under _op++#def test-flip-tope-equiv+  (i : 2)+  : let mod _op q := inv_op (i === 1_2) in+    let mod _op fi := flip_op i in+    _op (q = (fi === 0_2))+  := mod _op refl++-- Symmetric case: _op (flip(i) === 1_2) is equivalent to (i === 0_2)++#def test-flip-tope-equiv-sym+  (i : 2)+  : let mod _op q := inv_op (i === 0_2) in+    let mod _op fi := flip_op i in+    _op (q = (fi === 1_2))+  := mod _op refl++-- flip/unflip with 2: inv roundtrip++#def test-flip-inv-roundtrip-2+  (i : 2)+  : let mod _op q := inv_op (i === 0_2) in+    let mod _op fi := flip_op i in+    _op (q = (fi === 1_2))+  := mod _op refl
+ test/typecheck/cases/happy-interval-basics.expect.yaml view
@@ -0,0 +1,5 @@+status: ok+regression_for:+  - interval-cube-basics+  - covariance-2-and-I+  - totality-on-2
+ test/typecheck/cases/happy-interval-basics.rzk view
@@ -0,0 +1,68 @@+#lang rzk-1++-- Extension types are needed to map out of cubes into types.+-- You cannot simply write `(t : 2) -> A`; you need `<{(t : 2) | TOP} -> A>`.++-- Basic extension type over 2+#define arr2+  (A : U)+  : U+  := (t : 2) -> A++-- Basic extension type over I+#define arrI+  (A : U)+  : U+  := (t : II) -> A++-- Extension type with boundary over 2+#define hom2+  (A : U) (x y : A)+  : U+  := (t : 2) -> A [ t === 0_2 |-> x , t === 1_2 |-> y ]++-- Extension type with boundary over I+#define homI+  (A : U) (x y : A)+  : U+  := (t : II) -> A [ t === 0_I |-> x , t === 1_I |-> y ]++-- Covariance of 2: a map A -> B induces a map on arrows+#define cov2+  (A B : U)+  (f : A -> B)+  (p : (t : 2) -> A)+  : (t : 2) -> B+  := \ t -> f (p t)++-- Covariance of I: a map A -> B induces a map on paths+#define covI+  (A B : U)+  (f : A -> B)+  (p : (t : II) -> A)+  : (t : II) -> B+  := \ t -> f (p t)++-- Covariance of 2 preserves boundary+#define cov2-boundary+  (A B : U)+  (f : A -> B)+  (x y : A)+  (p : (t : 2) -> A [ t === 0_2 |-> x , t === 1_2 |-> y ])+  : (t : 2) -> B [ t === 0_2 |-> f x , t === 1_2 |-> f y ]+  := \ t -> f (p t)++-- Covariance of I preserves boundary+#define covI-boundary+  (A B : U)+  (f : A -> B)+  (x y : A)+  (p : (t : II) -> A [ t === 0_I |-> x , t === 1_I |-> y ])+  : (t : II) -> B [ t === 0_I |-> f x , t === 1_I |-> f y ]+  := \ t -> f (p t)++-- Totality on 2: recOR works because 2 has total order+#define total2+  (t : 2)+  : Unit+  := recOR( t <= 0_2 |-> unit , 0_2 <= t |-> unit )
+ test/typecheck/cases/happy-interval-subtyping.expect.yaml view
@@ -0,0 +1,3 @@+status: ok+regression_for:+  - interval-subtyping-2-to-II
+ test/typecheck/cases/happy-interval-subtyping.rzk view
@@ -0,0 +1,16 @@+#lang rzk-1++-- An (t : II) -> A is usable where a (t : 2) -> A is expected:+-- 2 <: II at the cube level, so by contravariance (II -> A) <: (2 -> A).+-- The converse (a 2-arrow where an II-path is expected) is in ill-interval-subtyping.rzk.++#define arr2+  (A : U) (x y : A)+  : U+  := (t : 2) -> A [ t === 0_2 |-> x , t === 1_2 |-> y ]++#define arrII-to-arr2+  (A : U) (x y : A)+  (p : (t : II) -> A [ t === 0_I |-> x , t === 1_I |-> y ])+  : arr2 A x y+  := p
test/typecheck/cases/happy-modal-basics.rzk view
@@ -1,65 +1,322 @@ #lang rzk-1  #def sharp-pure (A : U) (x : A)-  : <| _# | A |>+  : _# A   := mod _# x  #def sharp-map (A B : U) (f : A → B)-  : <| _# | A |> → <| _# | B |>-  := \ (x : _# A) → mod _# (f x)+  : (x :_# A) → _# B+  := \ (x :_# A) → mod _# (f x) -#def b-extract (A : _b U) (x : _b A)+#def b-extract (A :_b U) (x :_b A)   : A   := x -#def b-map (A B : _b U) (f : _b A → B)-  : <| _b | A |> → <| _b | B |>-  := \ (x : _b A) → mod _b (f x)+#def b-map (A B :_b U) (f :_b A → B)+  : (x :_b A) → _b B+  := \ (x :_b A) → mod _b (f x) -#def b-dup (A : _b U) (x : _b A)-  : <| _b | <| _b | A |> |>+#def b-dup (A :_b U) (x :_b A)+  : _b (_b A)   := mod _b (mod _b x) -#def op-map (A B : _op U) (f : _op A → B)-  : <| _op | A |> → <| _op | B |>-  := \ (x : _op A) → mod _op (f x)+#def op-map (A B :_op U) (f :_op A → B)+  : (x :_op A) → _op B+  := \ (x :_op A) → mod _op (f x) -#def double-op (A : U) (x : <| _op | <| _op | A |> |>)+#def double-op (A : U) (x : _op (_op A))   : A   :=   let mod _op x_1 := x in   let mod _op / _op x_2 := x_1 in   x_2 -#def sharp-join (A : U) (a : <| _# | <| _# | A |> |>)-  : <| _# | A |>+#def sharp-join (A : U) (a : _# (_# A))+  : _# A   :=   let mod _# x_1 := a in   let mod _# / _# x_2 := x_1 in   mod _# x_2 -#def flat-to-sharp (A : _b U) (x : _b A)-  : <| _# | A |>+#def flat-to-sharp (A :_b U) (x :_b A)+  : _# A   := mod _# x  #def id-pure (A : U) (x : A)-  : <| _id | A |>+  : _id A   := mod _id x  #def id-map (A B : U) (f : A → B)-  : <| _id | A |> → <| _id | B |>-  := \ (x : _id A) → mod _id (f x)+  : (x :_id A) → _id B+  := \ (x :_id A) → mod _id (f x) -#def id-join (A : U) (a : <| _id | <| _id | A |> |>)-  : <| _id | A |>+#def id-join (A : U) (a : _id (_id A))+  : _id A   :=   let mod _id x_1 := a in   let mod _id / _id x_2 := x_1 in   mod _id x_2 -#def op-op-is-id (A : U) (x : <| _op | <| _op | A |> |>)-  : <| _id | A |>+#def op-op-is-id (A : U) (x : _op (_op A))+  : _id A   :=   let mod _op x_1 := x in   let mod _op / _op x_2 := x_1 in   mod _id x_2++-- comp(Flat, Op) = Flat: flat var stays accessible inside op-under-flat+#def flat-op-chain (A :_b U) (x :_b A)+  : _op (_b A)+  := mod _op (mod _b x)++-- comp(Sharp, Op) = Sharp: plain var stays accessible inside op-under-sharp+#def sharp-op-chain (A : U) (x : A)+  : _op (_# A)+  := mod _op (mod _# x)++-- Flat tope accessible at plain level with boundary+#def test-flat-tope-to-plain+  (A :_b U)+  (a :_b A)+  : (i :_b 2 | i === 0_2) -> A [ i === 0_2 |-> a ]+  := \ i -> a++-- recOR under flat: LEM covers 2+#def test-recOR-flat+  (A :_b U)+  (a b :_b A)+  : (i :_b 2) -> A+  := \(i :_b 2) -> recOR( i === 0_2 |-> a , i === 1_2 |-> b )++-- Flat accessible under sharp chain+#def test-sharp-from-flat-chain+  (A :_b U)+  (a :_b A)+  : (i :_b 2 | i === 0_2) -> _# A+  := \ i -> mod _# a++-- LEQ recOR under flat+#def test-flat-leq-recOR+  (A :_b U)+  (a :_b A)+  : (i :_b 2) -> A+  := \ (i :_b 2) -> recOR( i <= 0_2 |-> a, 0_2 <= i |-> a)++-- Disjunction restriction under flat+#def test-flat-disjunction-cover+  (A :_b U)+  (a b :_b A)+  : (i :_b 2 | (i === 0_2) \/ (i === 1_2)) -> A+  := \ (i :_b 2) -> recOR( i === 0_2 |-> a , i === 1_2 |-> b )++-- Conjunction split under flat+#def test-flat-conjunction-split+  (A :_b U)+  (a :_b A)+  : (i :_b 2 | i === 0_2) -> (j :_b 2 | j === 0_2) -> A+  := \ i j -> a++-- Product cube face under flat+#def test-flat-product-face+  (A :_b U)+  (a :_b A)+  : (ts :_b (2 * 2) | first ts === 0_2) -> A+  := \ ts -> a++-- Symmetry through saturation: (0 === i) => (i === 0)+#def test-flat-symmetry+  (A :_b U)+  (a :_b A)+  : (i :_b 2 | 0_2 === i) -> A [ i === 0_2 |-> a ]+  := \ i -> a++-- Transitivity under flat: (i === j) /\ (j === 0) => (i === 0)+#def test-flat-transitivity+  (A :_b U)+  (a :_b A)+  (i j :_b 2)+  : (i :_b 2 | (i === j) /\ (j === 0_2)) -> A [ i === 0_2 |-> a ]+  := \ _ -> a++-- Plain tope entails _# goal+#def test-solve-sharp-goal+  (A : U)+  (a : A)+  : (i : 2 | i === 0_2) -> _# Unit+  := \ i -> mod _# unit++-- Nested modal goal: _# (_b A)+#def test-solve-nested-modal-goal+  (A :_b U)+  (a :_b A)+  : _# (_b A)+  := mod _# (mod _b a)++-- Op var with extension boundary+#def test-op-var-boundary+  (A :_op U)+  (a :_op A)+  (i :_op 2)+  : (i :_op 2 |_op (i === 0_2)) -> (_op A) [ _op (i === 0_2) |-> (mod _op a) ]+  := \ _ -> (mod _op a)++-- _op var accessible under _op restriction+#def test-op-goal-with-op-var+  (A :_op U)+  (a :_op A)+  (i :_op 2)+  : (i :_op 2 | (_op (i === 0_2))) -> _op A+  := \ _ -> mod _op a++-- ============ Extension types under modalities ============++-- recOR with <= under mod _#: endpoint LEQs always solvable+#def test-sharp-tope-boundary+  (A : U) (a : A)+  : (t : 2) -> _# A+  := \ t -> mod _# (recOR( 0_2 <= t |-> a , t <= 1_2 |-> a ))++-- Sharp extension with boundary+#def test-sharp-extension+  (A : U)+  (a : A)+  : (i : 2) -> (_# A) [ i === 0_2 |-> mod _# a , i === 1_2 |-> mod _# a ]+  := \(i : 2) -> mod _# (recOR( 0_2 <= i |-> a , i <= 1_2 |-> a ))++-- Extension under flat with boundary+#def test-flat-extension-boundary+  (A :_b U)+  (a b :_b A)+  : (i :_b 2) -> A [ i === 0_2 |-> a , i === 1_2 |-> b ]+  := \(i :_b 2) -> recOR( i === 0_2 |-> a , i === 1_2 |-> b )++-- Constant path under flat+#def test-flat-const-path+  (A :_b U)+  (a :_b A)+  : (i :_b 2) -> A [ i === 0_2 |-> a , i === 1_2 |-> a ]+  := \(i :_b 2) -> a++-- Flat tope with sharp return type and boundary+#def test-flat-tope-sharp-boundary+  (A :_b U) (a :_b A)+  (i :_b 2)+  : (i :_b 2 | i === 0_2) -> _# A [ i === 0_2 |-> mod _# a ]+  := \ _ -> mod _# a++-- Mixed flat + plain variables in extension+#def test-mixed-flat-plain-vars+  (A :_b U)+  (a :_b A)+  (i :_b 2)+  (j : 2)+  : (i :_b 2 | (i === 0_2) /\ (j === 0_2)) -> A+  := \ _ -> a++-- Flat double-wrap with boundary+#def test-flat-double-wrap-boundary+  (A :_b U) (a :_b A) (i :_b 2)+  : (i :_b 2 | i === 0_2) -> _b (_b A) [ i === 0_2 |-> mod _b (mod _b a) ]+  := \ _ -> mod _b (mod _b a)++-- Flat to sharp chain with tope+#def test-flat-to-sharp-with-tope+  (A :_b U) (a :_b A) (i :_b 2)+  : (i :_b 2 | i === 0_2) -> _# (_# A)+  := \ _ -> mod _# (mod _# a)++-- ============ Manual conversions ============++-- Manual conversion: (x :_# A) → B  to  (_# A) → B+#def sharp-modal-to-explicit+  (A : U) (B : U) (f : (x :_# A) -> B)+  : (_# A) -> B+  := \ y -> let mod _# z := y in f z++-- Manual conversion: (_# A) → B  to  (x :_# A) → B+#def sharp-explicit-to-modal+  (A : U) (B : U) (f : (_# A) -> B)+  : (x :_# A) -> B+  := \ (x :_# A) -> f (mod _# x)++-- Manual conversion: (x :_op A) → B  to  (_op A) → B+#def op-modal-to-explicit+  (A :_op U) (B : U) (f : (x :_op A) -> B)+  : (_op A) -> B+  := \ y -> let mod _op z := y in f z++-- Manual conversion: (_op A) → B  to  (x :_op A) → B+#def op-explicit-to-modal+  (A :_op U) (B : U) (f : (_op A) -> B)+  : (x :_op A) -> B+  := \ (x :_op A) -> f (mod _op x)++-- Manual conversion: (x :_id A) → B  to  (_id A) → B+#def id-modal-to-explicit+  (A : U) (B : U) (f : (x :_id A) -> B)+  : (_id A) -> B+  := \ y -> let mod _id z := y in f z++-- Manual conversion: (_id A) → B  to  (x :_id A) → B+#def id-explicit-to-modal+  (A : U) (B : U) (f : (_id A) -> B)+  : (x :_id A) -> B+  := \ (x :_id A) -> f (mod _id x)++-- Manual conversion: (x :_b A) → B  to  (_b A) → B+#def flat-modal-to-explicit+  (A :_b U) (B : U) (f : (x :_b A) -> B)+  : (_b A) -> B+  := \ y -> let mod _b z := y in f z++-- Manual conversion: (_b A) → B  to  (x :_b A) → B+#def flat-explicit-to-modal+  (A :_b U) (B : U) (f : (_b A) -> B)+  : (x :_b A) -> B+  := \ (x :_b A) -> f (mod _b x)++-- ============ RA letmod commutativity ============++-- Sharp letmod commutes (RA)+#def sharp-letmod-commute+  (A : U) (B : U)+  (x : _# A) (y : _# B)+  : (let mod _# a := x in let mod _# b := y in mod _# (a))+  = (let mod _# b := y in let mod _# a := x in mod _# (a))+  := refl++-- Op letmod commutes (RA)+#def op-letmod-commute+  (A :_op U) (B :_op U)+  (x : _op A) (y : _op B)+  : (let mod _op a := x in let mod _op b := y in mod _op (a))+  = (let mod _op b := y in let mod _op a := x in mod _op (a))+  := refl++-- Id letmod commutes (RA)+#def id-letmod-commute+  (A : U) (B : U)+  (x : _id A) (y : _id B)+  : (let mod _id a := x in let mod _id b := y in mod _id (a))+  = (let mod _id b := y in let mod _id a := x in mod _id (a))+  := refl++-- ============ Modal eta: mod m (extract a) = a ============++-- Sharp eta+#def sharp-eta+  (A : U) (x : _# A)+  : (let mod _# a := x in mod _# a) = x+  := refl++-- Op eta+#def op-eta+  (A :_op U) (x : _op A)+  : (let mod _op a := x in mod _op a) = x+  := refl++-- Id eta+#def id-eta+  (A : U) (x : _id A)+  : (let mod _id a := x in mod _id a) = x+  := refl
+ test/typecheck/cases/happy-modal-flat-recOR-under-op.expect.yaml view
@@ -0,0 +1,1 @@+status: ok
+ test/typecheck/cases/happy-modal-flat-recOR-under-op.rzk view
@@ -0,0 +1,9 @@+#lang rzk-1++-- Flat var under op: values accessible even in topes+#def flat-recOR-under-op+  (A :_b U)+  (a b :_b A)+  (i :_b 2)+  : _op A+  := mod _op (recOR( i === 0_2 |-> a , i === 1_2 |-> b ))
+ test/typecheck/cases/happy-modal-flat-under-op.expect.yaml view
@@ -0,0 +1,1 @@+status: ok
+ test/typecheck/cases/happy-modal-flat-under-op.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- Flat var are accessible under op+#def flat-under-op+  (A :_b U) (a :_b A)+  : _op A+  := mod _op a
test/typecheck/cases/happy-modal-inv.rzk view
@@ -1,13 +1,56 @@ #lang rzk-1 --- Simplest test: phi_op should unify with the inverted tope--- so refl typechecks if the substitution is correct- #compute-nf inv_op (0_2 === 0_2) +-- inv flips endpoint: inv_op(i === 0) = mod _op (flip(i) === 1) #def test-lt-mod-inv   ( i : 2)-  : let mod _op q := invᵒᵖ (i ≡ 0₂) in let mod _op fi := flip_op i in <| _op | (q = (fi === 1_2)) |>+  : let mod _op q := invᵒᵖ (i ≡ 0₂) in let mod _op fi := flip_op i in _op (q = (fi === 1_2))   := mod _op refl +#def test-inv-endpoint-one+  (i : 2)+  : let mod _op q := inv_op (i === 1_2) in+    let mod _op fi := flip_op i in+    _op (q = (fi === 0_2))+  := mod _op refl +-- uninv(inv(phi)) = phi+#def test-inv-uninv-cancel+  (i : 2)+  : uninv_op (inv_op (i === 0_2)) = (i === 0_2)+  := refl++-- inv(uninv(mod _op phi)) = mod _op phi+#def test-uninv-inv-cancel+  (i : 2)+  : let mod _op fi := flip_op i in+    inv_op (uninv_op (mod _op (fi === 0_2))) = mod _op (fi === 0_2)+  := refl++-- inv distributes over conjunction+#def test-inv-distributes-and+  (i j : 2)+  : let mod _op q := inv_op ((i === 0_2) /\ (j === 1_2)) in+    let mod _op fi := flip_op i in+    let mod _op fj := flip_op j in+    _op (q = ((fi === 1_2) /\ (fj === 0_2)))+  := mod _op refl++-- inv/uninv on TOP and BOT (bug catchers: stuck without nfTope fix)++#def test-inv-top+  : let mod _op q := (inv_op TOP) in _op (q = TOP)+  := mod _op refl++#def test-inv-bot+  : let mod _op q := inv_op BOT in _op (q = BOT)+  := mod _op refl++#def test-uninv-top+  : uninv_op (mod _op TOP) = TOP+  := refl++#def test-uninv-bot+  : uninv_op (mod _op BOT) = BOT+  := refl
+ test/typecheck/cases/happy-modal-tope-unwrap.expect.yaml view
@@ -0,0 +1,6 @@+status: ok+regression_for:+  - modal-tope-unwrap+  - flat-implies-plain+  - plain-implies-sharp+
+ test/typecheck/cases/happy-modal-tope-unwrap.rzk view
@@ -0,0 +1,33 @@+#lang rzk-1++-- Test logical relationships between modal topes and plain topes.++-- 1. _op phi and uninv_op(phi) are equivalent:+--    given _op phi we can derive uninv_op(phi), and vice versa.++#def test-op-unwrap-to-uninv+  (i : 2)+  : let mod _op q := inv_op (i === 0_2) in+    let mod _op fi := flip_op i in+    _op (q = (fi === 1_2))+  := mod _op refl++-- 2. _b phi implies phi:+--    a flat-restricted extension type is a subtype of the plain-restricted one.+--    If i :_b 2, the tope (i === 0_2) is flat-accessible, so the restriction holds.++#def test-flat-implies-plain+  (A :_b U)+  (a :_b A)+  : (i :_b 2 | i === 0_2) -> A [i === 0_2 |-> a]+  := \ i -> a++-- 3. phi implies _# phi:+--    a plain tope can be lifted into a sharp-modal tope.++#def test-plain-implies-sharp+  (A : U)+  (a : A)+  : (i : 2 | i === 0_2) -> _# A+  := \ i -> mod _# a+
+ test/typecheck/cases/happy-modal-topes.expect.yaml view
@@ -0,0 +1,1 @@+status: ok
+ test/typecheck/cases/happy-modal-topes.rzk view
@@ -0,0 +1,195 @@+#lang rzk-1++-- ============ Modal topes in restrictions ============++-- _#(t === 0) in restriction, accessible under mod _#+#def test-sharp-from-plain+  (i : 2)+  (A : U)+  (a : A)+  (p : (t : 2 | t === 0_2) -> A [ t === 0_2 |-> a ])+  : (t : 2 | _# (t === 0_2)) -> (_# A) [t === 0_2 |-> mod _# a]+  := \ t -> mod _# (p t)++-- Plain LEQ + _#(EQ): both accessible under mod _# (coe(Id, Sharp) = True)+#def test-cross-modality-sharp-accessible+  (A :_# U) (a :_# A)+  (j k : 2)+  : (i : 2 | (i <= j) /\ _# (k === 0_2)) -> _# A+  := \ i -> mod _# (recOR( (i <= j) /\ (k === 0_2) |-> a ))++-- _#(_# phi) = _# phi: sharp tope idempotent, with extension type+#def test-sharp-tope-idempotent-under-sharp+  (A : U) (a : A)+  (p : (i : 2 | i === 0_2) -> A [ i === 0_2 |-> a ])+  : (i : 2 | _# (_# (i === 0_2))) -> (_# A) [ i === 0_2 |-> mod _# a ]+  := \ i -> mod _# (p i)++-- _b(phi) in restriction: _b(phi) => phi, with extension type+#def test-flat-tope-in-restriction+  (A :_b U) (a :_b A)+  (p : (i :_b 2 | i === 0_2) -> A [ i === 0_2 |-> a ])+  : (i :_b 2 | _b (i === 0_2)) -> A [ i === 0_2 |-> a ]+  := \ i -> p i++-- _b(_b phi) => _b phi ^ _b(phi) => phi: flat tope idempotent, with extension type+#def test-flat-tope-idempotent+  (A :_b U) (a :_b A)+  (p : (i :_b 2 | _b ( _b (i === 0_2))) -> A [ i === 0_2 |-> a ])+  : (i :_b 2 | _b (i === 0_2)) -> A [ (i === 0_2) |-> a ]+  := \ i -> p i++-- _#(phi) => _#(_#(phi)): sharp tope expansion+#def test-sharp-tope-expand+  (A : U) (a : A)+  (p : (i : 2 | _# (_# (i === 0_2))) -> (_# A) [ i === 0_2 |-> mod _# a ])+  : (i : 2 | _# (i === 0_2)) -> (_# A) [ i === 0_2 |-> mod _# a ]+  := \ i -> p i++-- _b(_b(phi)) => _b(phi): flat tope collapse+#def test-flat-tope-collapse+  (A :_b U) (a :_b A)+  (p : (i :_b 2 | _b (i === 0_2)) -> A [ i === 0_2 |-> a ])+  : (i :_b 2 | _b (_b (i === 0_2))) -> A [ i === 0_2 |-> a ]+  := \ i -> p i++-- ============ Contradiction / recBOT under modalities ============++-- _#(i===0) /\ _#(i===1) → BOT under _#+#def test-sharp-tope-contradiction-under-sharp+  (A : U) (i : 2)+  : (i : 2 | _# (i === 0_2) /\ _# (i === 1_2)) -> _# A+  := \ _ -> mod _# recBOT++-- _op(i===0) /\ _op(i===1) → BOT at plain+#def test-op-bot-entails-bot+  (A : U)+  : (i :_op 2 | _op (i === 0_2) /\ _op (i === 1_2)) -> A+  := \ _ -> recBOT++-- Plain contradiction under _b. The tope context (i === 0_2) /\ (i === 1_2) is+-- contradictory, so BOT is derivable; and BOT |- _b BOT by the absurd rule of BOT+-- (this holds for BOT specifically, NOT for an arbitrary tope phi -- there is no+-- unit id => _b). Saturation therefore produces _b BOT, which is accessible under+-- the _b lock (coe Flat Flat), and _b BOT |- BOT by the counit, so mod _b recBOT+-- is legal. (Contrast _# BOT, which does NOT entail plain BOT -- coe Sharp Id is+-- False -- see ill-modal-sharp-bot-not-bot.)+#def test-contradiction-under-flat+  (A :_b U) (i : 2)+  : (i : 2 | (i === 0_2) /\ (i === 1_2)) -> _b A+  := \ _ -> mod _b recBOT++-- Contradiction survives entering _op via saturation+#def test-contradiction-survives-under-op+  (A :_op U) (i : 2)+  : (i : 2 | (i === 0_2) /\ (i === 1_2)) -> _op A+  := \ _ -> mod _op recBOT++-- Contradiction survives entering _#+#def test-contradiction-survives-under-sharp+  (A : U) (i : 2)+  : (i : 2 | (i === 0_2) /\ (i === 1_2)) -> _# A+  := \ _ -> mod _# recBOT++-- Double _op returns topes to accessible+#def test-double-op-entails-bottom+  (i : 2)+  : (i : 2 | (i === 0_2) /\ (i === 1_2)) -> _op (_op Unit)+  := \ _ -> mod _op (mod _op recBOT)++-- Nested _#: plain topes directly accessible under sharp+#def test-nested-sharp-entails-bottom+  (A : U) (i : 2)+  : (i : 2 | (i === 0_2) /\ (i === 1_2)) -> _# (_# A)+  := \ _ -> mod _# (mod _# recBOT)++-- Flat var contradiction under _#+#def test-flat-var-contradiction-under-sharp+  (A :_b U) (i :_b 2)+  : (i :_b 2 | (i === 0_2) /\ (i === 1_2)) -> _# A+  := \ _ -> mod _# recBOT++-- Flat contradiction in extension+#def test-flat-contradiction-extension+  (A : U)+  (i :_b 2)+  : (i :_b 2 | (i === 0_2) /\ (i === 1_2)) -> A+  := \ _ -> recBOT++-- _b(i===0) /\ (i===1) → BOT+#def test-flat-and-plain-bot+  (A : U)+  (i :_b 2)+  : (i :_b 2 | (_b (i === 0_2)) /\ (i === 1_2)) -> A+  := \ _ -> recBOT++-- Mixed _# + plain topes: transitivity derives contradiction under _#+#def test-mixed-sharp-plain-contradiction-under-sharp+  (A : U) (i j : 2)+  : (i : 2 | _# ((i === 0_2) /\ (j === 1_2)) /\ (i === j)) -> _# A+  := \ _ -> mod _# recBOT++-- ============ Saturation under modalities ============++-- LEQ antisymmetry under _op: (i<=0) /\ (0<=i) => i===0+#def test-leq-saturation-under-op+  (A :_op U) (a :_op A)+  (p : (i :_op 2 | _op (i === 0_2)) -> _op A [ _op (i === 0_2) |-> mod _op a ])+  : (i :_op 2 | _op ((i <= 0_2) /\ (0_2 <= i))) -> _op A [ _op (i === 0_2) |-> mod _op a ]+  := \i -> p i ++-- EQ transitivity under _op: (i===j) /\ (j===0) => i===0+#def test-transitivity-under-op+  (A :_op U) (a :_op A)+  (i j :_op 2)+  (p : (i :_op 2 | _op (i === 0_2)) -> _op A [ _op (i === 0_2) |-> mod _op a ])+  : (i :_op 2 | (_op (i === j)) /\ (_op (j === 0_2))) -> _op A [ _op (i === 0_2) |-> mod _op a ]+  := \ i -> p i++-- LEQ antisymmetry under _#+#def test-leq-saturation-under-sharp+  (A :_b U) (a :_b A)+  (p : (i : 2 | i === 0_2) -> A [ i === 0_2 |-> a ])+  : (i : 2 | (i <= 0_2) /\ (0_2 <= i)) -> _# A [ i === 0_2 |-> mod _# a ]+  := \ i -> mod _# (p i)++-- Transitivity across modalities: flat+plain vars, (i === j) /\ (j === 0) => i === 0+#def test-mixed-transitivity-under-flat+  (A :_b U)+  (a :_b A)+  (i :_b 2)+  (j :_b 2)+  (p : (i :_b 2 | i === 0_2) -> A [ i === 0_2 |-> a ])+  : (i :_b 2 | (_b (i === j)) /\ (j === 0_2)) -> A [ i === 0_2 |-> a ]+  := \ i -> p i++#def test-mixed-transitivity-under-sharp+  (A :_b U)+  (a :_b A)+  (i :_# 2)+  (j : 2)+  (p : (i :_b 2 | i === 0_2) -> A [ i === 0_2 |-> a ])+  : (i :_b 2 | (_# (i === j)) /\ (j === 0_2)) -> _# A [ i === 0_2 |-> mod _# a ]+  := \ i -> mod _# (p i)++-- ============ Inv/uninv saturation ========================++#def with-inversed-tope +  (A : U) +  (a : A) +  : (t : 2) -> A +  := \ t -> recOR (0_2 <= t |-> a, let mod _op ft := flip_op t in (_op (0_2 <= ft)) |-> a)++#def with-inv-op-tope +  (A : U) +  (a : A) +  : (t : 2) -> A +  := \ t -> recOR (0_2 <= t |-> a, let mod _op inv_t := inv_op (t <= 1_2) in (_op inv_t) |-> a)++#def discrete-inversed-eliminator +  (A : U) +  (a : A) +  : (t :_b 2) -> A +  := \ (t :_b 2) -> recOR (0_2 === t |-> a, let mod _op ft := flip_op t in (_op (ft === 0_2)) |-> a)++
+ test/typecheck/cases/happy-op-hom-to-hom.expect.yaml view
@@ -0,0 +1,1 @@+status: ok
+ test/typecheck/cases/happy-op-hom-to-hom.rzk view
@@ -0,0 +1,13 @@+#lang rzk-1++-- Test: reversing the direction of a morphism using _op modality+-- This requires the tope solver to derive extract(flip_op t) === 1_2+-- from t === 0_2 (and vice versa) when entering mod _op in solveRHSM.++#def op-hom-to-hom+  ( B :_op U)+  ( x :_op B)+  ( y :_op B)+  ( h :_op (t : 2) -> B [ t === 0_2 |-> x , t === 1_2 |-> y ])+  : ( ( t : 2) -> _op B [ t === 0_2 |-> mod _op y , t === 1_2 |-> mod _op x ])+  := \ t -> let mod _op s := flip_op t in mod _op (h s)
+ test/typecheck/cases/happy-recbot-term-wellformed.expect.yaml view
@@ -0,0 +1,3 @@+status: ok+regression_for:+  - recBOT-term-well-formed-accepted
+ test/typecheck/cases/happy-recbot-term-wellformed.rzk view
@@ -0,0 +1,12 @@+#lang rzk-1++-- Well-formed terms under an absurd tope context are still accepted: the check only+-- rejects terms that are ill-typed in their own right, not vacuous definitions.++-- `recBOT` is well-typed when the context entails ⊥.+#define okRecBot (A : U) (t : 2 | (t === 0_2) /\ (t === 1_2)) : A+  := recBOT++-- A well-typed application under the same absurd context.+#define okRecBotApp (A : U) (g : A -> A) (a : A) (t : 2 | (t === 0_2) /\ (t === 1_2)) : A+  := g a
+ test/typecheck/cases/happy-recor-guard-exceeds-context.expect.yaml view
@@ -0,0 +1,3 @@+status: ok+regression_for:+  - recOR-requires-coverage-not-containment
+ test/typecheck/cases/happy-recor-guard-exceeds-context.rzk view
@@ -0,0 +1,12 @@+#lang rzk-1++-- `recOR` requires its branch guards to COVER the local tope context+-- (`context ⊢ ⋁ guards`), not to be contained in it. A guard may strictly exceed+-- the context, as long as the guards together still cover it.++#define u : U := Unit -> Unit++-- The single guard `t ≡ 0 ∨ t ≡ 1` strictly exceeds the context `t ≡ 0`, but it+-- covers it, so the case split is well-typed.+#define guardExceedsContext (t : 2 | t === 0_2) : U+  := recOR( (t === 0_2) \/ (t === 1_2) |-> u )
+ test/typecheck/cases/happy-recor-split-simplex-overhang.expect.yaml view
@@ -0,0 +1,3 @@+status: ok+regression_for:+  - recOR-overhang-simplex-total-order-split
+ test/typecheck/cases/happy-recor-split-simplex-overhang.rzk view
@@ -0,0 +1,22 @@+#lang rzk-1++-- Overhang is useful for reusing already-defined shapes. Here we split the+-- 2-simplex Δ² = { (t , s) : 2 × 2 | s ≤ t } into its two halves by the total-order+-- topes `t ≤ s` and `s ≤ t`. These topes are defined on the whole square, not+-- relativised to Δ², so the guard `t ≤ s` overhangs Δ² (its overlap with the+-- context is the diagonal `t ≡ s`). The two guards still cover Δ², so the case+-- split is well-typed; only a non-fatal overhang warning is emitted.+--+-- Being able to write the global total-order topes directly — rather than+-- intersecting each with Δ² by hand — is exactly what overhang support buys us.+-- This mirrors `join-square-arrow` / `meet-square-arrow` (RS17 Proposition 3.5) in+-- sHoTT, which split by the same topes over the full square 2 × 2.++#def Δ² : (2 * 2) -> TOPE+  := \ (t , s) -> s <= t++#define split-2simplex+  ( A : U)+  ( f : (2 * 2) -> A)+  : ( (t , s) : Δ²) -> A+  := \ (t , s) -> recOR ( t <= s |-> f (t , s) , s <= t |-> f (t , s) )
+ test/typecheck/cases/happy-restrict-face-not-contained.expect.yaml view
@@ -0,0 +1,3 @@+status: ok+regression_for:+  - restricted-type-face-need-not-be-contained
+ test/typecheck/cases/happy-restrict-face-not-contained.rzk view
@@ -0,0 +1,16 @@+#lang rzk-1++-- Restriction faces need not lie within the local tope context. The checker+-- constrains the term only on `context ∧ face`, so a face that overhangs the+-- context (extends beyond it while still overlapping) is allowed. Following+-- Riehl–Shulman, there is no requirement that the face be contained in (entailed+-- by) the context. Overhang only triggers a non-fatal warning.+--+-- (A face *disjoint* from the context is a different matter: it is vacuous and is+-- rejected — see `ill-restrict-face-disjoint`.)++-- The face `first t ≡ 0 ∨ second t ≡ 0` strictly exceeds the context `first t ≡ 0`,+-- yet overlaps it (on `first t ≡ 0`). The restriction is checked on the overlap.+#define faceOverhang (t : 2 * 2 | first t === 0_2)+  : Unit [ (first t === 0_2) \/ (second t === 0_2) |-> unit ]+  := unit
test/typecheck/cases/happy-tope-rec-and-restrict.expect.yaml view
@@ -1,5 +1,5 @@ status: ok regression_for:-  - contextEquiv-recOR-disjunctive-shape+  - contextEntailsUnion-recOR-disjunctive-shape   - contextEntails-recBOT-under-contradiction   - contextEntailedBy-TypeRestricted-TOP
test/typecheck/cases/happy-tope-rec-and-restrict.rzk view
@@ -1,6 +1,7 @@ #lang rzk-1 --- `recOR` with a disjunctive shape so `contextEquiv` matches the union of branch guards.+-- `recOR` with a disjunctive shape so `contextEntailsUnion` is satisfied: the context is+-- covered by the union of branch guards. #define u : U := Unit -> Unit  #define happyRecOrBoundary (t : 2 | (t === 0_2) \/ (t === 1_2)) : U@@ -10,6 +11,6 @@ #define happyRecBotContradiction (t : 2 | (t === 0_2) /\ (t === 1_2)) : U   := recBOT --- Trivial restriction (always `contextEntailedBy` from `TOP`).+-- Trivial restriction on the `TOP` face: typechecks (the restriction holds everywhere). #define happyRestrictedUnitTrivial : Unit [ TOP |-> unit ]   := unit
+ test/typecheck/cases/ill-hole-infer.expect.yaml view
@@ -0,0 +1,6 @@+status: error+error_tag: TypeErrorCannotInferHole+message_contains:+  - "cannot infer the type of a hole"+regression_for:+  - holes-inference-position
+ test/typecheck/cases/ill-hole-infer.rzk view
@@ -0,0 +1,6 @@+#lang rzk-1++-- A hole in inference position (here applied as a function) has no known type,+-- so it is reported rather than guessed (no metavariables).+#define f : (A : U) -> A -> A+  := \ A x -> ? x
+ test/typecheck/cases/ill-hole-pattern-binder-names.expect.yaml view
@@ -0,0 +1,8 @@+status: error+error_tag: TypeErrorUnsolvedHole+message_contains:+  - "found an unsolved hole"+  - "(a, b) : Σ (a : A), B a"+  - "B a"+regression_for:+  - restore-pattern-binder-names
+ test/typecheck/cases/ill-hole-pattern-binder-names.rzk view
@@ -0,0 +1,9 @@+#lang rzk-1++-- In strict mode the unsolved-hole error must render pattern-binder names: the+-- lambda destructures p as (a , b), so the goal B (first p) shows as B a (not+-- B (π₁ x)), and the binder appears in the context as (a , b), not a fresh+-- variable. Regression for the pattern-binder name restoration.+#define bad+  : (A : U) -> (B : A -> U) -> (p : Σ (a : A) , B a) -> B (first p)+  := \ A B (a , b) -> ?
+ test/typecheck/cases/ill-hole-recor-branch.expect.yaml view
@@ -0,0 +1,7 @@+status: error+error_tag: TypeErrorUnsolvedHole+message_contains:+  - "found an unsolved hole"+  - "A"+regression_for:+  - holes-recOR-branch-checking-position
+ test/typecheck/cases/ill-hole-recor-branch.rzk view
@@ -0,0 +1,10 @@+#lang rzk-1++-- A hole in a recOR branch is in checking position: the common type of the+-- recOR (here A) is pushed into every branch, so the branch holes are checked+-- against A. In the default (strict) mode this is reported as an unsolved hole.+-- Before the recOR checking rule existed, the recOR was elaborated by inference+-- and a bare hole branch failed with TypeErrorCannotInferHole instead.+#define square (A : U) (a : A)+  : (2 × 2) → A+  := \ (t , s) → recOR ( t ≤ s ↦ ? , s ≤ t ↦ ? )
+ test/typecheck/cases/ill-hole-unsolved.expect.yaml view
@@ -0,0 +1,6 @@+status: error+error_tag: TypeErrorUnsolvedHole+message_contains:+  - "found an unsolved hole"+regression_for:+  - holes-strict-mode
+ test/typecheck/cases/ill-hole-unsolved.rzk view
@@ -0,0 +1,6 @@+#lang rzk-1++-- A hole in checking position is rejected in the default (strict) mode, so+-- finished work and CI never admit unfilled holes.+#define f : (A : U) -> A -> A+  := \ A a -> ?
+ test/typecheck/cases/ill-interval-no-totality.expect.yaml view
@@ -0,0 +1,4 @@+status: error+error_tag: TypeErrorTopeNotSatisfied+regression_for:+  - interval-no-total-order
+ test/typecheck/cases/ill-interval-no-totality.rzk view
@@ -0,0 +1,10 @@+#lang rzk-1++-- The interval I does NOT have a total order: we cannot case-split on+-- `t <= s \/ s <= t` for arbitrary I-points. This recOR should fail because+-- the tope solver cannot derive that the two guards cover the whole context.++#define no-total-I+  (t : II) (s : II)+  : Unit+  := recOR( t <= s |-> unit , s <= t |-> unit )
+ test/typecheck/cases/ill-interval-subtyping.expect.yaml view
@@ -0,0 +1,4 @@+status: error+error_tag: TypeErrorUnifyTerms+regression_for:+  - interval-no-subtype-II-to-2
+ test/typecheck/cases/ill-interval-subtyping.rzk view
@@ -0,0 +1,15 @@+#lang rzk-1++-- II is NOT a subtype of 2.+-- Trying to use a 2-arrow where an II-path is expected should fail.++#define cub-hom+  (A : U) (x y : A)+  : U+  := (t : II) -> A [ t === 0_I |-> x , t === 1_I |-> y ]++#define bad-2-to-II+  (A : U) (x y : A)+  (p : (t : 2) -> A [ t === 0_2 |-> x , t === 1_2 |-> y ])+  : cub-hom A x y+  := p
test/typecheck/cases/ill-modal-b-no-dist.expect.yaml view
@@ -1,4 +1,4 @@ status: error error_tag: TypeErrorUnaccessibleVar message_contains:-  - "variable is not accessible"+  - "unaccessible var with modality"
test/typecheck/cases/ill-modal-b-no-dist.rzk view
@@ -1,11 +1,11 @@ #lang rzk-1  -#def b-extract (A : _b U) (x : _b A)+#def b-extract (A :_b U) (x :_b A)   : A   := x -#def ill-b-typed (A B : U) (f : A → <| _b | B |>)-  : <| _b | A → B |>+#def ill-b-typed (A B : U) (f : A → _b B)+  : _b (A → B)   :=   mod _b (\ (x : A) → b-extract B (f x))
+ test/typecheck/cases/ill-modal-flat-no-commute.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorUnifyTerms
+ test/typecheck/cases/ill-modal-flat-no-commute.rzk view
@@ -0,0 +1,12 @@+#lang rzk-1++-- Flat letmod should NOT commute: flat is not RA,+-- so extract does not reduce and the two orderings+-- are not definitionally equal.++#def ill-flat-commute+  (A :_b U) (B :_b U)+  (x : _b A) (y : _b B)+  : (let mod _b a := x in let mod _b b := y in a)+  = (let mod _b b := y in let mod _b a := x in a)+  := refl
+ test/typecheck/cases/ill-modal-op-at-plain.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorUnaccessibleVar
+ test/typecheck/cases/ill-modal-op-at-plain.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- Op var not accessible at plain level+#def ill-op-at-plain+  (A :_op U) (x :_op A)+  : A+  := x
− test/typecheck/cases/ill-modal-op-unaccessible.expect.yaml
@@ -1,4 +0,0 @@-status: error-error_tag: TypeErrorUnaccessibleVar-message_contains:-  - "variable is not accessible"
− test/typecheck/cases/ill-modal-op-unaccessible.rzk
@@ -1,5 +0,0 @@-#lang rzk-1--#def bad-use-under-op (A : U) (x : A)-  : <| _op | A |>-  := mod _op x
+ test/typecheck/cases/ill-modal-op-under-flat.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorUnaccessibleVar
+ test/typecheck/cases/ill-modal-op-under-flat.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- Op var not accessible under flat+#def ill-op-under-flat+  (A :_op U) (x :_op A)+  : _b A+  := mod _b x
+ test/typecheck/cases/ill-modal-plain-under-flat.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorUnaccessibleVar
+ test/typecheck/cases/ill-modal-plain-under-flat.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- Plain var not accessible under flat+#def ill-plain-under-flat+  (A : U) (x : A)+  : _b A+  := mod _b x
+ test/typecheck/cases/ill-modal-plain-under-op.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorUnaccessibleVar
+ test/typecheck/cases/ill-modal-plain-under-op.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- Plain var not accessible under op+#def ill-plain-under-op+  (A : U) (x : A)+  : _op A+  := mod _op x
+ test/typecheck/cases/ill-modal-recBOT-under-op-no-contradiction.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorTopeNotSatisfied
+ test/typecheck/cases/ill-modal-recBOT-under-op-no-contradiction.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- recBOT under op without contradiction: tope not accessible+#def ill-recBOT-under-op-no-contradiction+  (A :_op U) (i : 2)+  : (i : 2 | i === 0_2) -> _op A+  := \ _ -> mod _op recBOT
+ test/typecheck/cases/ill-modal-sharp-at-plain.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorUnaccessibleVar
+ test/typecheck/cases/ill-modal-sharp-at-plain.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- Sharp var not accessible at plain level+#def ill-sharp-at-plain+  (A :_# U) (x :_# A)+  : A+  := x
+ test/typecheck/cases/ill-modal-sharp-bot-not-bot.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorTopeNotSatisfied
+ test/typecheck/cases/ill-modal-sharp-bot-not-bot.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- #BOT should not entail BOT: sharp tope is not accessible in plain context+#def sharp-bot-not-bot+  (A : U)+  : (t : 2 | _# BOT) -> A+  := \ _ -> recBOT
+ test/typecheck/cases/ill-modal-sharp-recOR-plain-var.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorTopeNotSatisfied
+ test/typecheck/cases/ill-modal-sharp-recOR-plain-var.rzk view
@@ -0,0 +1,9 @@+#lang rzk-1++-- recOR under sharp: plain var's discrete axiom inaccessible+#def ill-sharp-recOR-plain-var+  (A :_# U)+  (a b :_# A)+  (i : 2)+  : _# A+  := mod _# (recOR( i === 0_2 |-> a , i === 1_2 |-> b ))
+ test/typecheck/cases/ill-modal-sharp-under-flat.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorUnaccessibleVar
+ test/typecheck/cases/ill-modal-sharp-under-flat.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- Sharp var not accessible under flat+#def ill-sharp-under-flat+  (A :_# U) (x :_# A)+  : _b A+  := mod _b x
+ test/typecheck/cases/ill-modal-sharp-under-op.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorUnaccessibleVar
+ test/typecheck/cases/ill-modal-sharp-under-op.rzk view
@@ -0,0 +1,7 @@+#lang rzk-1++-- Sharp var not accessible under op+#def ill-sharp-under-op+  (A :_# U) (x :_# A)+  : _op A+  := mod _op x
+ test/typecheck/cases/ill-modal-tope-cross-modality.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorTopeNotSatisfied
+ test/typecheck/cases/ill-modal-tope-cross-modality.rzk view
@@ -0,0 +1,12 @@+#lang rzk-1++-- Plain LEQ becomes inaccessible under mod _b (coe(Id, Flat) = False),+-- while _b(EQ) stays accessible (coe(Flat, Flat) = True).+-- LEQ has no symmetry in saturation, so it cannot be re-derived.+-- Without mod _b, both parts are accessible and the recOR passes.++#def ill-cross-modality-leq-under-flat+  (A :_b U) (a :_b A)+  (j m :_b 2)+  : (i :_b 2 | (i <= j) /\ _# (m === 0_2)) -> _b A+  := \ (i :_b 2) -> mod _b (recOR( (i <= j) /\ (m === 0_2) |-> a ))
− test/typecheck/cases/ill-modal-unaccessible.expect.yaml
@@ -1,4 +0,0 @@-status: error-error_tag: TypeErrorUnaccessibleVar-message_contains:-  - "variable is not accessible"
− test/typecheck/cases/ill-modal-unaccessible.rzk
@@ -1,5 +0,0 @@-#lang rzk-1--#def bad-use-under-flat (A : U) (x : A)-  : <| _b | A |>-  := mod _b x
+ test/typecheck/cases/ill-recbot-term-not-function.expect.yaml view
@@ -0,0 +1,4 @@+status: error+error_tag: TypeErrorNotFunction+regression_for:+  - recBOT-term-must-be-well-typed
+ test/typecheck/cases/ill-recbot-term-not-function.rzk view
@@ -0,0 +1,8 @@+#lang rzk-1++-- Under an absurd tope context the expected type collapses to recBOT, but the term+-- must still be well-typed in its own right, so that ill-formed bodies are not+-- silently admitted under a false hypothesis. Here the body `a a` applies the+-- non-function `a`, so it is rejected even though `t ≡ 0 ∧ t ≡ 1` is absurd.+#define illRecBotApp (A : U) (a : A) (t : 2 | (t === 0_2) /\ (t === 1_2)) : A+  := a a
+ test/typecheck/cases/ill-recbot-term-undefined.expect.yaml view
@@ -0,0 +1,4 @@+status: error+error_tag: TypeErrorUndefined+regression_for:+  - recBOT-term-must-be-well-typed
+ test/typecheck/cases/ill-recbot-term-undefined.rzk view
@@ -0,0 +1,6 @@+#lang rzk-1++-- An undefined variable must not be admitted under an absurd hypothesis either:+-- the body is checked for well-formedness before recBOT is accepted.+#define illRecBotUndefined (A : U) (t : 2 | (t === 0_2) /\ (t === 1_2)) : A+  := nonexistent
+ test/typecheck/cases/ill-recor-as-tope.expect.yaml view
@@ -0,0 +1,6 @@+status: error+error_tag: TypeErrorOther+message_contains:+  - "recOR cannot be used as a tope"+regression_for:+  - recOR-in-tope-layer-panic
+ test/typecheck/cases/ill-recor-as-tope.rzk view
@@ -0,0 +1,8 @@+#lang rzk-1++-- A recOR in another recOR's branch-guard (tope) position must be rejected as a+-- type error, not crash the tope-layer normaliser. Regression for the reported+-- "PANIC! Impossible happened (recOR in the tope layer)" (a recOR reaching+-- nfTope), surfaced by the Yoneda game.+#def bad (A : U) (a : A) : (2 × 2) → A+  := \ (t , s) → recOR ( recOR ( s ≤ t ↦ s ≤ t , t ≤ s ↦ t ≤ s ) ↦ a , ⊤ ↦ a )
+ test/typecheck/cases/ill-recor-coverage-required.expect.yaml view
@@ -0,0 +1,6 @@+status: error+error_tag: TypeErrorTopeNotSatisfied+message_contains:+  - "union of the topes"+regression_for:+  - recOR-coverage-required
+ test/typecheck/cases/ill-recor-coverage-required.rzk view
@@ -0,0 +1,12 @@+#lang rzk-1++-- Coverage is the sole tope obligation for `recOR`: the disjunction of branch+-- guards must entail (cover) the local tope context. Here the context is the+-- non-trivial boundary `t ≡ 0 ∨ t ≡ 1`, but the single guard `t ≡ 0` covers only+-- half of it, so `contextEntailsUnion` reports that the context is not covered by (does+-- not entail) the union of the guards.++#define u : U := Unit -> Unit++#define guardsUndercover (t : 2 | (t === 0_2) \/ (t === 1_2)) : U+  := recOR( t === 0_2 |-> u )
+ test/typecheck/cases/ill-recor-guard-disjoint.expect.yaml view
@@ -0,0 +1,4 @@+status: error+error_tag: TypeErrorTopeContextDisjoint+regression_for:+  - recOR-branch-guard-disjoint-from-context
+ test/typecheck/cases/ill-recor-guard-disjoint.rzk view
@@ -0,0 +1,9 @@+#lang rzk-1++-- A recOR branch guard disjoint from the local tope context is a dead branch: its+-- overlap with the context is ⊥, so the branch can never apply. This is rejected.+-- Here the guard `t ≡ 1` cannot hold in the context `t ≡ 0`.+#define u : U := Unit -> Unit++#define guardDisjoint (t : 2 | t === 0_2) : U+  := recOR( t === 1_2 |-> u, t === 0_2 |-> u )
+ test/typecheck/cases/ill-restrict-face-disjoint.expect.yaml view
@@ -0,0 +1,4 @@+status: error+error_tag: TypeErrorTopeContextDisjoint+regression_for:+  - restricted-type-face-disjoint-from-context
+ test/typecheck/cases/ill-restrict-face-disjoint.rzk view
@@ -0,0 +1,8 @@+#lang rzk-1++-- A restriction face disjoint from the local tope context is vacuous: its overlap+-- with the context is ⊥, so it constrains the term nowhere. Such a face is always+-- rejected (whereas a merely overhanging face is only warned about). Here the face+-- `t ≡ 1` cannot hold in the context `t ≡ 0`.+#define faceDisjoint (t : 2 | t === 0_2) : Unit [ t === 1_2 |-> unit ]+  := unit
test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d4.expect.yaml view
@@ -1,5 +1,5 @@ status: error-error_tag: TypeErrorUnifyTerms+error_tag: TypeErrorUnify message_contains:   - "cannot unify" regression_for:
test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d4.rzk view
@@ -2,8 +2,8 @@  -- Ill counterpart to `happy-tope-nested-rec-or-d4.rzk`: **identical** nested binary `recOR` -- except the **rightmost leaf** along the all-`1₂` corner (`t0 ≡ 1₂`, …, `t3 ≡ 1₂`),--- where `u` is replaced by `unit`, so the branch infers `Unit` instead of `U` and--- `recOR` inference fails only after processing the full tree (see error at innermost branch).+-- where `u` is replaced by `unit`. The type-level `recOR` is checked against `U`, so+-- the bad leaf is caught directly when its `unit` (of type `Unit`) is checked against `U`.  #define u : U := Unit 
test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d5.expect.yaml view
@@ -1,5 +1,5 @@ status: error-error_tag: TypeErrorUnifyTerms+error_tag: TypeErrorUnify message_contains:   - "cannot unify" regression_for:
test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d5.rzk view
@@ -2,8 +2,8 @@  -- Ill counterpart to `happy-tope-nested-rec-or-d5.rzk`: **identical** nested binary `recOR` -- except the **rightmost leaf** along the all-`1₂` corner (`t0 ≡ 1₂`, …, `t4 ≡ 1₂`),--- where `u` is replaced by `unit`, so the branch infers `Unit` instead of `U` and--- `recOR` inference fails only after processing the full tree (see error at innermost branch).+-- where `u` is replaced by `unit`. The type-level `recOR` is checked against `U`, so+-- the bad leaf is caught directly when its `unit` (of type `Unit`) is checked against `U`.  #define u : U := Unit 
test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d6.expect.yaml view
@@ -1,5 +1,5 @@ status: error-error_tag: TypeErrorUnifyTerms+error_tag: TypeErrorUnify message_contains:   - "cannot unify" regression_for:
test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton-d6.rzk view
@@ -2,8 +2,8 @@  -- Ill counterpart to `happy-tope-nested-rec-or-d6.rzk`: **identical** nested binary `recOR` -- except the **rightmost leaf** along the all-`1₂` corner (`t0 ≡ 1₂`, …, `t5 ≡ 1₂`),--- where `u` is replaced by `unit`, so the branch infers `Unit` instead of `U` and--- `recOR` inference fails only after processing the full tree (see error at innermost branch).+-- where `u` is replaced by `unit`. The type-level `recOR` is checked against `U`, so+-- the bad leaf is caught directly when its `unit` (of type `Unit`) is checked against `U`.  #define u : U := Unit 
test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton.expect.yaml view
@@ -1,6 +1,6 @@ status: error error_tag: TypeErrorTopeNotSatisfied message_contains:-  - "equivalent to the union"+  - "union of the topes" regression_for:-  - nested-recOR-contextEquiv-inner-singleton+  - nested-recOR-contextEntailsUnion-inner-singleton
test/typecheck/cases/ill-tope-nested-rec-or-inner-singleton.rzk view
@@ -1,7 +1,7 @@ #lang rzk-1  -- Inner `recOR` on `t2` must cover both endpoints while `t2 ≡ 0 ∨ t2 ≡ 1` holds.--- A singleton inner `recOR` leaves `contextEquiv` unsatisfied on the `t1 ≡ 0₂` face.+-- A singleton inner `recOR` leaves `contextEntailsUnion` unsatisfied on the `t1 ≡ 0₂` face.  #define u : U := Unit 
test/typecheck/cases/ill-tope-not-satisfied-rec-or-boundary-equiv.expect.yaml view
@@ -1,7 +1,7 @@ status: error error_tag: TypeErrorTopeNotSatisfied message_contains:-  - "equivalent to the union"+  - "union of the topes"   - "recOR" regression_for:-  - contextEquiv-recOR-boundary+  - contextEntailsUnion-recOR-boundary
test/typecheck/cases/ill-tope-not-satisfied-rec-or-boundary-equiv.rzk view
@@ -1,8 +1,10 @@ #lang rzk-1  -- After the branches of `recOR`, the checker requires the local tope context to be--- equivalent to the disjunction of branch guard topes (`contextEquiv`).--- With only `⊤` on `t : 2`, the boundary `t ≡ 0 ∨ t ≡ 1` is not entailed.+-- covered by (to entail) the disjunction of branch guard topes (`contextEntailsUnion`).+-- With only `⊤` on `t : 2`, the boundary `t ≡ 0 ∨ t ≡ 1` is not entailed. The branches+-- are the type `Unit` (a valid type in U) so the type-level recOR is well-formed up to+-- the coverage obligation, which is what this fixture pins down.  #define boundaryUnit (t : 2) : U-  := recOR( t === 0_2 |-> unit, t === 1_2 |-> unit )+  := recOR( t === 0_2 |-> Unit, t === 1_2 |-> Unit )
test/typecheck/cases/ill-tope-not-satisfied-rec-or-open-singleton.expect.yaml view
@@ -1,6 +1,6 @@ status: error error_tag: TypeErrorTopeNotSatisfied message_contains:-  - "equivalent to the union"+  - "union of the topes" regression_for:-  - contextEquiv-recOR-singleton+  - contextEntailsUnion-recOR-singleton
test/typecheck/cases/ill-tope-not-satisfied-rec-or-open-singleton.rzk view
@@ -1,7 +1,7 @@ #lang rzk-1 --- Single-branch `recOR` on unrestricted `t : 2`: `contextEquiv` requires `⊤` to match--- `t ≡ 0₂ ∨ ⊥` (`contextEquiv` after `recOR`).+-- Single-branch `recOR` on unrestricted `t : 2`: `contextEntailsUnion` requires `⊤` to entail+-- `t ≡ 0₂ ∨ ⊥`, which fails (`contextEntailsUnion` after `recOR`).  #define u : U := Unit -> Unit 
+ test/typecheck/cases/ill-tope-pattern-binder-bare.expect.yaml view
@@ -0,0 +1,7 @@+status: error+error_tag: TypeErrorUndefined+message_contains:+  - "Local tope context:"+  - "Δ² (t, s)"+regression_for:+  - render-bare-pattern-point
+ test/typecheck/cases/ill-tope-pattern-binder-bare.rzk view
@@ -0,0 +1,11 @@+#lang rzk-1++-- A pattern-bound point used bare in a shape's membership tope must render as+-- the pattern (Δ² (t , s)) in a type error's local tope context, not as a fresh+-- variable (Δ² x₁). The undefined body forces an error whose context shows the+-- tope. Regression for the bare-pattern rendering fix.+#def Δ² : (2 × 2) → TOPE+  := \ (t , s) → s ≤ t++#def bad (A : U) (x : A) : ( ((t , s) : Δ²) → A )+  := \ (t , s) → nonexistent
+ test/typecheck/cases/ill-tope-recOR-non-discrete.expect.yaml view
@@ -0,0 +1,2 @@+status: error+error_tag: TypeErrorTopeNotSatisfied
+ test/typecheck/cases/ill-tope-recOR-non-discrete.rzk view
@@ -0,0 +1,13 @@+#lang rzk-1++-- recOR with === on a plain (non-flat) interval variable.+-- Only flat (_b) variables have discrete axioms (LEM: i === 0 ∨ i === 1).+-- A plain variable does not have LEM, so recOR with === 0 / === 1 is not total.++#def ill-recOR-non-discrete+  (A : U)+  (a b : A)+  (i : 2)+  : A+  := recOR( i === 0_2 |-> a , i === 1_2 |-> b )+
test/typecheck/cases/ill-tope-subtle-rec-or-5d-boundary.expect.yaml view
@@ -1,6 +1,6 @@ status: error error_tag: TypeErrorTopeNotSatisfied message_contains:-  - "equivalent to the union"+  - "union of the topes" regression_for:-  - contextEquiv-recOR-high-dim+  - contextEntailsUnion-recOR-high-dim
test/typecheck/cases/ill-tope-subtle-rec-or-5d-boundary.rzk view
@@ -1,7 +1,7 @@ #lang rzk-1 --- `recOR` requires the local tope context to match the disjunction of branch guards--- (`contextEquiv`: local Φ must be equivalent to the disjunction of branch guards).+-- `recOR` requires the local tope context to be covered by the disjunction of branch guards+-- (`contextEntailsUnion`: local Φ must entail the disjunction of branch guards). -- On the full 5-cube only `⊤` holds, so -- pinning the *first* coordinate to `0₂` or `1₂` is not entailed (interior points). 
+ test/typecheck/cases/uses-whnf-discarded.expect.yaml view
@@ -0,0 +1,3 @@+status: ok+regression_for:+  - uses-checks-key-off-actual-term-not-whnf
+ test/typecheck/cases/uses-whnf-discarded.rzk view
@@ -0,0 +1,18 @@+#lang rzk-1++-- An assumption whose only occurrence sits in a redex that weak head+-- normalisation discards (here the argument to a constant function) is still+-- a genuine use: the section unused-variable check must see the term the user+-- wrote, not its WHNF. Before the fix, `b` was reported as an unused variable.++#section sec-whnf-discarded++#variable A : U+#variable a : A+#variable b : A++#define pick+  : A+  := (\ (_ : A) → a) b++#end sec-whnf-discarded
+ test/typecheck/cases/uses-whnf-masked-transitive.expect.yaml view
@@ -0,0 +1,7 @@+status: error+error_tag: TypeErrorImplicitAssumption+message_contains:+  - "implicit assumption"+  - "used in definition of"+regression_for:+  - uses-checks-key-off-actual-term-not-whnf
+ test/typecheck/cases/uses-whnf-masked-transitive.rzk view
@@ -0,0 +1,22 @@+#lang rzk-1++-- A transitive dependency on a section assumption that weak head normalisation+-- would otherwise hide. `d2`'s value `first (unit , d1)` mentions `d1`, whose+-- type `a =_{A} a` depends on the assumption `a`; reducing the value to `unit`+-- discards `d1` and so masks the dependency. Keying the use check off the term+-- the user wrote catches it: `d2` implicitly relies on `a` and must say so.++#section sec-whnf-masked++#variable A : U+#variable a : A++#define d1+  : a =_{A} a+  := refl++#define d2+  : Unit+  := first (unit , d1)++#end sec-whnf-masked