morte 1.4.2 → 1.5.0
raw patch · 33 files changed
+2616/−441 lines, 33 filesdep +QuickCheckdep +mtldep +tastydep −manageddep ~Earleydep ~transformersPVP ok
version bump matches the API change (PVP)
Dependencies added: QuickCheck, mtl, tasty, tasty-hunit, tasty-quickcheck
Dependencies removed: managed
Dependency ranges changed: Earley, transformers
API changes (from Hackage documentation)
- Morte.Core: type Context = [(Text, Expr X)]
+ Morte.Context: data Context a
+ Morte.Context: empty :: Context a
+ Morte.Context: insert :: Text -> a -> Context a -> Context a
+ Morte.Context: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Morte.Context.Context a)
+ Morte.Context: instance GHC.Base.Functor Morte.Context.Context
+ Morte.Context: lookup :: Text -> Int -> Context a -> Maybe a
+ Morte.Context: toList :: Context a -> [(Text, a)]
+ Morte.Core: data Context a
- Morte.Core: TypeError :: Context -> Expr X -> TypeMessage -> TypeError
+ Morte.Core: TypeError :: Context (Expr X) -> Expr X -> TypeMessage -> TypeError
- Morte.Core: [context] :: TypeError -> Context
+ Morte.Core: [context] :: TypeError -> Context (Expr X)
- Morte.Core: typeWith :: Context -> Expr X -> Either TypeError (Expr X)
+ Morte.Core: typeWith :: Context (Expr X) -> Expr X -> Either TypeError (Expr X)
Files
- bench/Main.hs +45/−0
- bench/src/concat.mt +1/−0
- bench/src/factorial.mt +99/−0
- bench/src/recursive.mt +186/−0
- benchmarks/Bench.hs +0/−59
- benchmarks/src/factorial.mt +0/−99
- benchmarks/src/recursive.mt +0/−186
- dist/build/Morte/Lexer.hs +420/−0
- exec/Main.hs +78/−12
- morte.cabal +45/−29
- src/Morte/Context.hs +58/−0
- src/Morte/Core.hs +19/−32
- src/Morte/Import.hs +24/−15
- src/Morte/Lexer.x +1/−0
- src/Morte/Parser.hs +2/−0
- src/Morte/Tutorial.hs +9/−9
- test/Main.hs +204/−0
- test/src/example0.mt +1/−0
- test/src/example1.mt +7/−0
- test/src/example10.mt +177/−0
- test/src/example11.mt +177/−0
- test/src/example12.mt +177/−0
- test/src/example13.mt +177/−0
- test/src/example14.mt +272/−0
- test/src/example15.mt +148/−0
- test/src/example2.mt +8/−0
- test/src/example3.mt +27/−0
- test/src/example4.mt +39/−0
- test/src/example5.mt +79/−0
- test/src/example6.mt +24/−0
- test/src/example7.mt +24/−0
- test/src/example8.mt +45/−0
- test/src/example9.mt +43/−0
+ bench/Main.hs view
@@ -0,0 +1,45 @@+{-# LANGUAGE OverloadedStrings #-}++import Control.Exception (throwIO)+import Criterion.Main (Benchmark, defaultMain, env, bgroup, bench, nf)+import Filesystem.Path.CurrentOS (FilePath)+import Morte.Core (Expr, X)+import Paths_morte (getDataFileName)+import Prelude hiding (FilePath)++import qualified Data.Text.Lazy.IO as Text+import qualified Filesystem.Path.CurrentOS as Filesystem+import qualified Morte.Core as Morte+import qualified Morte.Import as Morte+import qualified Morte.Parser as Morte++readMorteFile :: FilePath -> IO (Expr X)+readMorteFile filename = do+ str <- getDataFileName (Filesystem.encodeString filename)+ text <- Text.readFile str+ case Morte.exprFromText text of+ Left e -> throwIO e+ Right expr -> Morte.load expr++main :: IO ()+main = defaultMain+ [ env srcEnv (\ ~(x0, x1, x2) ->+ bgroup "source"+ [ benchExpr "recursive.mt" x0+ , benchExpr "factorial.mt" x1+ , benchExpr "concat.mt" x2+ ] )+ ]+ where+ srcEnv = do+ x0 <- readMorteFile "bench/src/recursive.mt"+ x1 <- readMorteFile "bench/src/factorial.mt"+ x2 <- readMorteFile "bench/src/concat.mt"+ return (x0, x1, x2)++benchExpr :: FilePath -> Expr X -> Benchmark+benchExpr path expr = bgroup (Filesystem.encodeString path)+ [ bench "normalize" (nf Morte.normalize expr)+ , bench "equality" (nf (expr ==) expr)+ , bench "typeOf" (nf Morte.typeOf expr)+ ]
+ bench/src/concat.mt view
@@ -0,0 +1,1 @@+λ(strs : ∀(List : *) → ∀(Cons : ∀(head : ∀(B : *) → ∀(N : B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → B) → ∀(tail : List) → List) → ∀(Nil : List) → List) → strs (∀(B : *) → ∀(N : B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → B) (λ(n1 : ∀(B : *) → ∀(N : B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → B) → λ(n2 : ∀(B : *) → ∀(N : B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → B) → λ(B : *) → λ(N : B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → n1 B (n2 B N C@255 C@254 C@253 C@252 C@251 C@250 C@249 C@248 C@247 C@246 C@245 C@244 C@243 C@242 C@241 C@240 C@239 C@238 C@237 C@236 C@235 C@234 C@233 C@232 C@231 C@230 C@229 C@228 C@227 C@226 C@225 C@224 C@223 C@222 C@221 C@220 C@219 C@218 C@217 C@216 C@215 C@214 C@213 C@212 C@211 C@210 C@209 C@208 C@207 C@206 C@205 C@204 C@203 C@202 C@201 C@200 C@199 C@198 C@197 C@196 C@195 C@194 C@193 C@192 C@191 C@190 C@189 C@188 C@187 C@186 C@185 C@184 C@183 C@182 C@181 C@180 C@179 C@178 C@177 C@176 C@175 C@174 C@173 C@172 C@171 C@170 C@169 C@168 C@167 C@166 C@165 C@164 C@163 C@162 C@161 C@160 C@159 C@158 C@157 C@156 C@155 C@154 C@153 C@152 C@151 C@150 C@149 C@148 C@147 C@146 C@145 C@144 C@143 C@142 C@141 C@140 C@139 C@138 C@137 C@136 C@135 C@134 C@133 C@132 C@131 C@130 C@129 C@128 C@127 C@126 C@125 C@124 C@123 C@122 C@121 C@120 C@119 C@118 C@117 C@116 C@115 C@114 C@113 C@112 C@111 C@110 C@109 C@108 C@107 C@106 C@105 C@104 C@103 C@102 C@101 C@100 C@99 C@98 C@97 C@96 C@95 C@94 C@93 C@92 C@91 C@90 C@89 C@88 C@87 C@86 C@85 C@84 C@83 C@82 C@81 C@80 C@79 C@78 C@77 C@76 C@75 C@74 C@73 C@72 C@71 C@70 C@69 C@68 C@67 C@66 C@65 C@64 C@63 C@62 C@61 C@60 C@59 C@58 C@57 C@56 C@55 C@54 C@53 C@52 C@51 C@50 C@49 C@48 C@47 C@46 C@45 C@44 C@43 C@42 C@41 C@40 C@39 C@38 C@37 C@36 C@35 C@34 C@33 C@32 C@31 C@30 C@29 C@28 C@27 C@26 C@25 C@24 C@23 C@22 C@21 C@20 C@19 C@18 C@17 C@16 C@15 C@14 C@13 C@12 C@11 C@10 C@9 C@8 C@7 C@6 C@5 C@4 C@3 C@2 C@1 C) C@255 C@254 C@253 C@252 C@251 C@250 C@249 C@248 C@247 C@246 C@245 C@244 C@243 C@242 C@241 C@240 C@239 C@238 C@237 C@236 C@235 C@234 C@233 C@232 C@231 C@230 C@229 C@228 C@227 C@226 C@225 C@224 C@223 C@222 C@221 C@220 C@219 C@218 C@217 C@216 C@215 C@214 C@213 C@212 C@211 C@210 C@209 C@208 C@207 C@206 C@205 C@204 C@203 C@202 C@201 C@200 C@199 C@198 C@197 C@196 C@195 C@194 C@193 C@192 C@191 C@190 C@189 C@188 C@187 C@186 C@185 C@184 C@183 C@182 C@181 C@180 C@179 C@178 C@177 C@176 C@175 C@174 C@173 C@172 C@171 C@170 C@169 C@168 C@167 C@166 C@165 C@164 C@163 C@162 C@161 C@160 C@159 C@158 C@157 C@156 C@155 C@154 C@153 C@152 C@151 C@150 C@149 C@148 C@147 C@146 C@145 C@144 C@143 C@142 C@141 C@140 C@139 C@138 C@137 C@136 C@135 C@134 C@133 C@132 C@131 C@130 C@129 C@128 C@127 C@126 C@125 C@124 C@123 C@122 C@121 C@120 C@119 C@118 C@117 C@116 C@115 C@114 C@113 C@112 C@111 C@110 C@109 C@108 C@107 C@106 C@105 C@104 C@103 C@102 C@101 C@100 C@99 C@98 C@97 C@96 C@95 C@94 C@93 C@92 C@91 C@90 C@89 C@88 C@87 C@86 C@85 C@84 C@83 C@82 C@81 C@80 C@79 C@78 C@77 C@76 C@75 C@74 C@73 C@72 C@71 C@70 C@69 C@68 C@67 C@66 C@65 C@64 C@63 C@62 C@61 C@60 C@59 C@58 C@57 C@56 C@55 C@54 C@53 C@52 C@51 C@50 C@49 C@48 C@47 C@46 C@45 C@44 C@43 C@42 C@41 C@40 C@39 C@38 C@37 C@36 C@35 C@34 C@33 C@32 C@31 C@30 C@29 C@28 C@27 C@26 C@25 C@24 C@23 C@22 C@21 C@20 C@19 C@18 C@17 C@16 C@15 C@14 C@13 C@12 C@11 C@10 C@9 C@8 C@7 C@6 C@5 C@4 C@3 C@2 C@1 C) (λ(B : *) → λ(N : B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → N)
+ bench/src/factorial.mt view
@@ -0,0 +1,99 @@+( \(Nat : *)+-> \(Succ : Nat -> Nat)+-> \(Zero : Nat)+-> \(mult : Nat -> Nat -> Nat)+-> \(foldNat : Nat -> forall (r : *) -> (r -> r) -> r -> r)+-> \(Pair : * -> *)+-> \(_P : forall (a : *) -> a -> a -> Pair a)+-> \(_fst : forall (a : *) -> Pair a -> a)+-> \(_snd : forall (a : *) -> Pair a -> a)+-> ( \(NPair : *)+ -> \(P : Nat -> Nat -> NPair)+ -> \(fst : NPair -> Nat)+ -> \(snd : NPair -> Nat)+ -> \(mi : Nat)+ -> \(n : Nat)+ -> ( \(pfact : NPair -> NPair) + -> snd (foldNat n NPair pfact (P Zero mi))+ )++ ( \(p : NPair)+ -> (\(sfp : Nat) -> P sfp (mult (snd p) sfp)) (Succ (fst p))+ )+ )++ -- NPair+ (Pair Nat)++ -- P+ (_P Nat)++ -- fst+ (_fst Nat)++ -- snd+ (_snd Nat)++ -- multiplicative identity+ (Succ Zero)++ -- 7+ (Succ (Succ (Succ (Succ (Succ (Succ (Succ Zero)))))))++)++-- Nat+(forall (nat : *) -> (nat -> nat) -> nat -> nat)++-- Succ data constructor+( \(n : forall (nat : *) -> (nat -> nat) -> nat -> nat)+-> \(nat : *)+-> \(Succ : nat -> nat)+-> \(Zero : nat)+-> Succ (n nat Succ Zero)+)++-- Zero data constructor+( \(nat : *)+-> \(Succ : nat -> nat)+-> \(Zero : nat)+-> Zero+)++-- mult+( \(a : |~| (nat : *) -> (nat -> nat) -> nat -> nat)+-> \(b : forall (nat : *) -> (nat -> nat) -> nat -> nat)+-> \(nat : *)+-> \(Succ : nat -> nat)+-> \(Zero : nat)+-> (a nat) (b nat Succ) Zero+)++-- foldNat+( \(n : forall (r : *) -> (r -> r) -> r -> r)+-> n+)++-- MonoPair+(\(a : *) -> forall (r : *) -> (a -> a -> r) -> r)++-- P+( \(a : *)+-> \(va : a)+-> \(vb : a)+-> \(r : *)+-> \(Pair : a -> a -> r)+-> Pair va vb+)++-- fst+( \(a : *)+-> \(p : forall (r : *) -> (a -> a -> r) -> r)+-> p a (\(x : a) -> \(_ : a) -> x)+)++-- snd+( \(a : *)+-> \(p : forall (r : *) -> (a -> a -> r) -> r)+-> p a (\(_ : a) -> \(x : a) -> x)+)
+ bench/src/recursive.mt view
@@ -0,0 +1,186 @@+-- "Free" variables+( \(String : * )+-> \(U : *)+-> \(Unit : U)++ -- Simple prelude+-> ( \(Nat : *)+ -> \(zero : Nat)+ -> \(one : Nat)+ -> \((+) : Nat -> Nat -> Nat)+ -> \((*) : Nat -> Nat -> Nat)+ -> \(foldNat : Nat -> forall (a : *) -> (a -> a) -> a -> a)+ -> \(IO : * -> *)+ -> \(return : forall (a : *) -> a -> IO a)+ -> \((>>=)+ : forall (a : *)+ -> forall (b : *)+ -> IO a+ -> (a -> IO b)+ -> IO b+ )+ -> \(putStrLn : String -> IO U)+ -> \(getLine : IO String)++ -- Derived functions+ -> ( \((>>) : IO U -> IO U -> IO U)+ -> \(two : Nat)+ -> \(three : Nat)+ -> \(four : Nat)+ -> \(five : Nat)+ -> \(six : Nat)+ -> \(seven : Nat)+ -> \(eight : Nat)+ -> \(nine : Nat)+ -> \(ten : Nat)+ -> ( \(replicateM_ : Nat -> IO U -> IO U)+ -> \(ninetynine : Nat)+ -> replicateM_ ninetynine ((>>=) String U getLine putStrLn)+ )++ -- replicateM_+ ( \(n : Nat)+ -> \(io : IO U)+ -> foldNat n (IO U) ((>>) io) (return U Unit)+ )++ -- ninetynine+ ((+) ((*) nine ten) nine)+ )++ -- (>>)+ ( \(m : IO U)+ -> \(n : IO U)+ -> (>>=) U U m (\(_ : U) -> n)+ )++ -- two+ ((+) one one)++ -- three+ ((+) one ((+) one one))++ -- four+ ((+) one ((+) one ((+) one one)))++ -- five+ ((+) one ((+) one ((+) one ((+) one one))))++ -- six+ ((+) one ((+) one ((+) one ((+) one ((+) one one)))))++ -- seven+ ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one))))))++ -- eight+ ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one)))))))+ -- nine+ ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one))))))))++ -- ten+ ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one)))))))))+ )++ -- Nat+ ( forall (a : *)+ -> (a -> a)+ -> a+ -> a+ )++ -- zero+ ( \(a : *)+ -> \(Succ : a -> a)+ -> \(Zero : a)+ -> Zero+ )++ -- one+ ( \(a : *)+ -> \(Succ : a -> a)+ -> \(Zero : a)+ -> Succ Zero+ )++ -- (+)+ ( \(m : forall (a : *) -> (a -> a) -> a -> a)+ -> \(n : forall (a : *) -> (a -> a) -> a -> a)+ -> \(a : *)+ -> \(Succ : a -> a)+ -> \(Zero : a)+ -> m a Succ (n a Succ Zero)+ )++ -- (*)+ ( \(m : forall (a : *) -> (a -> a) -> a -> a)+ -> \(n : forall (a : *) -> (a -> a) -> a -> a)+ -> \(a : *)+ -> \(Succ : a -> a)+ -> \(Zero : a)+ -> m a (n a Succ) Zero+ )++ -- foldNat+ ( \(n : forall (a : *) -> (a -> a) -> a -> a)+ -> n+ )++ -- IO+ ( \(r : *)+ -> forall (x : *)+ -> (String -> x -> x)+ -> ((String -> x) -> x)+ -> (r -> x)+ -> x+ )++ -- return+ ( \(a : *)+ -> \(va : a)+ -> \(x : *)+ -> \(PutStrLn : String -> x -> x)+ -> \(GetLine : (String -> x) -> x)+ -> \(Return : a -> x)+ -> Return va+ )++ -- (>>=)+ ( \(a : *)+ -> \(b : *)+ -> \(m : forall (x : *)+ -> (String -> x -> x)+ -> ((String -> x) -> x)+ -> (a -> x)+ -> x+ )+ -> \(f : a+ -> forall (x : *)+ -> (String -> x -> x)+ -> ((String -> x) -> x)+ -> (b -> x)+ -> x+ )+ -> \(x : *)+ -> \(PutStrLn : String -> x -> x)+ -> \(GetLine : (String -> x) -> x)+ -> \(Return : b -> x)+ -> m x PutStrLn GetLine (\(va : a) -> f va x PutStrLn GetLine Return)+ )++ -- putStrLn+ ( \(str : String)+ -> \(x : *)+ -> \(PutStrLn : String -> x -> x )+ -> \(GetLine : (String -> x) -> x)+ -> \(Return : U -> x)+ -> PutStrLn str (Return Unit)+ )++ -- getLine+ ( \(x : *)+ -> \(PutStrLn : String -> x -> x )+ -> \(GetLine : (String -> x) -> x)+ -> \(Return : String -> x)+ -> GetLine Return+ )+)
− benchmarks/Bench.hs
@@ -1,59 +0,0 @@-module Main (main) where--import Morte.Core-import Morte.Import (load)-import Morte.Parser (ParseError, exprFromText)--import Control.Monad (foldM)-import Criterion.Main (Benchmark, defaultMain, env, bgroup, bench, nf)-import Data.Text.Lazy (Text)-import qualified Data.Text.Lazy as T-import Data.Text.Lazy.IO (readFile, hPutStrLn)-import GHC.IO.Handle.FD (stderr)-import Paths_morte (getDataFileName)-import Prelude hiding (readFile)--benchFilenames :: [String]-benchFilenames = [- "recursive.mt"- , "factorial.mt"- ]--readMtFile :: String -> IO (String, Text)-readMtFile filename = do- path <- getDataFileName filename- mtFile <- readFile path- return (filename, mtFile)--partitionExpr- :: ([(String, ParseError)],[(String, Expr X)])- -> (String, Text)- -> IO ([(String, ParseError)],[(String, Expr X)])-partitionExpr (pe, ps) (filename, contents) =- case exprFromText contents of- Left perr -> return ((filename,perr):pe,ps)- Right expr -> do- expr' <- load expr- return (pe,(filename,expr'):ps)--pprFileParseError :: (String, ParseError) -> Text-pprFileParseError (fn,pe) = T.unlines [T.pack fn, pretty pe]--srcEnv :: IO [(String, Expr X)]-srcEnv = do- mtFiles <- mapM readMtFile benchFilenames- (pe,ps) <- foldM partitionExpr ([],[]) mtFiles- mapM_ (hPutStrLn stderr . pprFileParseError) pe- return ps--main :: IO ()-main = defaultMain [- env srcEnv $ bgroup "source" . map benchExpr- ]--benchExpr :: (String, Expr X) -> Benchmark-benchExpr (tag,expr) = bgroup tag [- bench "normalize" $ nf normalize expr- , bench "equality" $ nf (expr ==) expr- , bench "typeOf" $ nf typeOf expr- ]
− benchmarks/src/factorial.mt
@@ -1,99 +0,0 @@-( \(Nat : *)--> \(Succ : Nat -> Nat)--> \(Zero : Nat)--> \(mult : Nat -> Nat -> Nat)--> \(foldNat : Nat -> forall (r : *) -> (r -> r) -> r -> r)--> \(Pair : * -> *)--> \(_P : forall (a : *) -> a -> a -> Pair a)--> \(_fst : forall (a : *) -> Pair a -> a)--> \(_snd : forall (a : *) -> Pair a -> a)--> ( \(NPair : *)- -> \(P : Nat -> Nat -> NPair)- -> \(fst : NPair -> Nat)- -> \(snd : NPair -> Nat)- -> \(mi : Nat)- -> \(n : Nat)- -> ( \(pfact : NPair -> NPair) - -> snd (foldNat n NPair pfact (P Zero mi))- )-- ( \(p : NPair)- -> (\(sfp : Nat) -> P sfp (mult (snd p) sfp)) (Succ (fst p))- )- )-- -- NPair- (Pair Nat)-- -- P- (_P Nat)-- -- fst- (_fst Nat)-- -- snd- (_snd Nat)-- -- multiplicative identity- (Succ Zero)-- -- 7- (Succ (Succ (Succ (Succ (Succ (Succ (Succ Zero)))))))--)---- Nat-(forall (nat : *) -> (nat -> nat) -> nat -> nat)---- Succ data constructor-( \(n : forall (nat : *) -> (nat -> nat) -> nat -> nat)--> \(nat : *)--> \(Succ : nat -> nat)--> \(Zero : nat)--> Succ (n nat Succ Zero)-)---- Zero data constructor-( \(nat : *)--> \(Succ : nat -> nat)--> \(Zero : nat)--> Zero-)---- mult-( \(a : |~| (nat : *) -> (nat -> nat) -> nat -> nat)--> \(b : forall (nat : *) -> (nat -> nat) -> nat -> nat)--> \(nat : *)--> \(Succ : nat -> nat)--> \(Zero : nat)--> (a nat) (b nat Succ) Zero-)---- foldNat-( \(n : forall (r : *) -> (r -> r) -> r -> r)--> n-)---- MonoPair-(\(a : *) -> forall (r : *) -> (a -> a -> r) -> r)---- P-( \(a : *)--> \(va : a)--> \(vb : a)--> \(r : *)--> \(Pair : a -> a -> r)--> Pair va vb-)---- fst-( \(a : *)--> \(p : forall (r : *) -> (a -> a -> r) -> r)--> p a (\(x : a) -> \(_ : a) -> x)-)---- snd-( \(a : *)--> \(p : forall (r : *) -> (a -> a -> r) -> r)--> p a (\(_ : a) -> \(x : a) -> x)-)
− benchmarks/src/recursive.mt
@@ -1,186 +0,0 @@--- "Free" variables-( \(String : * )--> \(U : *)--> \(Unit : U)-- -- Simple prelude--> ( \(Nat : *)- -> \(zero : Nat)- -> \(one : Nat)- -> \((+) : Nat -> Nat -> Nat)- -> \((*) : Nat -> Nat -> Nat)- -> \(foldNat : Nat -> forall (a : *) -> (a -> a) -> a -> a)- -> \(IO : * -> *)- -> \(return : forall (a : *) -> a -> IO a)- -> \((>>=)- : forall (a : *)- -> forall (b : *)- -> IO a- -> (a -> IO b)- -> IO b- )- -> \(putStrLn : String -> IO U)- -> \(getLine : IO String)-- -- Derived functions- -> ( \((>>) : IO U -> IO U -> IO U)- -> \(two : Nat)- -> \(three : Nat)- -> \(four : Nat)- -> \(five : Nat)- -> \(six : Nat)- -> \(seven : Nat)- -> \(eight : Nat)- -> \(nine : Nat)- -> \(ten : Nat)- -> ( \(replicateM_ : Nat -> IO U -> IO U)- -> \(ninetynine : Nat)- -> replicateM_ ninetynine ((>>=) String U getLine putStrLn)- )-- -- replicateM_- ( \(n : Nat)- -> \(io : IO U)- -> foldNat n (IO U) ((>>) io) (return U Unit)- )-- -- ninetynine- ((+) ((*) nine ten) nine)- )-- -- (>>)- ( \(m : IO U)- -> \(n : IO U)- -> (>>=) U U m (\(_ : U) -> n)- )-- -- two- ((+) one one)-- -- three- ((+) one ((+) one one))-- -- four- ((+) one ((+) one ((+) one one)))-- -- five- ((+) one ((+) one ((+) one ((+) one one))))-- -- six- ((+) one ((+) one ((+) one ((+) one ((+) one one)))))-- -- seven- ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one))))))-- -- eight- ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one)))))))- -- nine- ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one))))))))-- -- ten- ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one)))))))))- )-- -- Nat- ( forall (a : *)- -> (a -> a)- -> a- -> a- )-- -- zero- ( \(a : *)- -> \(Succ : a -> a)- -> \(Zero : a)- -> Zero- )-- -- one- ( \(a : *)- -> \(Succ : a -> a)- -> \(Zero : a)- -> Succ Zero- )-- -- (+)- ( \(m : forall (a : *) -> (a -> a) -> a -> a)- -> \(n : forall (a : *) -> (a -> a) -> a -> a)- -> \(a : *)- -> \(Succ : a -> a)- -> \(Zero : a)- -> m a Succ (n a Succ Zero)- )-- -- (*)- ( \(m : forall (a : *) -> (a -> a) -> a -> a)- -> \(n : forall (a : *) -> (a -> a) -> a -> a)- -> \(a : *)- -> \(Succ : a -> a)- -> \(Zero : a)- -> m a (n a Succ) Zero- )-- -- foldNat- ( \(n : forall (a : *) -> (a -> a) -> a -> a)- -> n- )-- -- IO- ( \(r : *)- -> forall (x : *)- -> (String -> x -> x)- -> ((String -> x) -> x)- -> (r -> x)- -> x- )-- -- return- ( \(a : *)- -> \(va : a)- -> \(x : *)- -> \(PutStrLn : String -> x -> x)- -> \(GetLine : (String -> x) -> x)- -> \(Return : a -> x)- -> Return va- )-- -- (>>=)- ( \(a : *)- -> \(b : *)- -> \(m : forall (x : *)- -> (String -> x -> x)- -> ((String -> x) -> x)- -> (a -> x)- -> x- )- -> \(f : a- -> forall (x : *)- -> (String -> x -> x)- -> ((String -> x) -> x)- -> (b -> x)- -> x- )- -> \(x : *)- -> \(PutStrLn : String -> x -> x)- -> \(GetLine : (String -> x) -> x)- -> \(Return : b -> x)- -> m x PutStrLn GetLine (\(va : a) -> f va x PutStrLn GetLine Return)- )-- -- putStrLn- ( \(str : String)- -> \(x : *)- -> \(PutStrLn : String -> x -> x )- -> \(GetLine : (String -> x) -> x)- -> \(Return : U -> x)- -> PutStrLn str (Return Unit)- )-- -- getLine- ( \(x : *)- -> \(PutStrLn : String -> x -> x )- -> \(GetLine : (String -> x) -> x)- -> \(Return : String -> x)- -> GetLine Return- )-)
+ dist/build/Morte/Lexer.hs view
@@ -0,0 +1,420 @@+{-# LANGUAGE CPP,MagicHash #-}+{-# LINE 1 "src/Morte/Lexer.x" #-}++{-# LANGUAGE OverloadedStrings #-}++-- | Lexing logic for the Morte language+module Morte.Lexer (+ -- * Lexer+ lexExpr,++ -- * Types+ Token(..),+ Position(..),+ LocatedToken(..)+ ) where++import Control.Monad.Trans.State.Strict (State, get)+import Data.Bits (shiftR, (.&.))+import Data.Char (digitToInt, ord)+import Data.Text.Lazy (Text)+import qualified Data.Text.Lazy as Text+import Data.Word (Word8)+import Filesystem.Path.CurrentOS (FilePath)+import qualified Filesystem.Path.CurrentOS as Filesystem+import Lens.Micro.Mtl ((.=), (+=))+import Pipes (Producer, for, lift, yield)+import Prelude hiding (FilePath)+++#if __GLASGOW_HASKELL__ >= 603+#include "ghcconfig.h"+#elif defined(__GLASGOW_HASKELL__)+#include "config.h"+#endif+#if __GLASGOW_HASKELL__ >= 503+import Data.Array+import Data.Char (ord)+import Data.Array.Base (unsafeAt)+#else+import Array+import Char (ord)+#endif+#if __GLASGOW_HASKELL__ >= 503+import GHC.Exts+#else+import GlaExts+#endif+alex_base :: AlexAddr+alex_base = AlexA# "\xf8\xff\xff\xff\xd9\xff\xff\xff\x66\xff\xff\xff\x52\x00\x00\x00\x5b\x00\x00\x00\xdb\x00\x00\x00\x5b\x01\x00\x00\xdb\x01\x00\x00\x5b\x02\x00\x00\xdb\x02\x00\x00\x5b\x03\x00\x00\xdb\x03\x00\x00\x00\x00\x00\x00\x4c\x04\x00\x00\x00\x00\x00\x00\xbd\x04\x00\x00\x00\x00\x00\x00\x2e\x05\x00\x00\x00\x00\x00\x00\x9f\x05\x00\x00\x00\x00\x00\x00\xe0\x05\x00\x00\x00\x00\x00\x00\x21\x06\x00\x00\x00\x00\x00\x00\x62\x06\x00\x00\x8a\xff\xff\xff\x83\xff\xff\xff\x00\x00\x00\x00\xa3\x06\x00\x00\xa3\x07\x00\x00\x63\x07\x00\x00\x00\x00\x00\x00\x5a\x08\x00\x00\x5a\x09\x00\x00\xbb\x07\x00\x00\x00\x00\x00\x00\xda\x09\x00\x00\x9a\x09\x00\x00\x00\x00\x00\x00\x6c\xff\xff\xff\x8d\xff\xff\xff\x8e\xff\xff\xff\x7c\xff\xff\xff\x9a\x0a\x00\x00\x5a\x0a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x50\x0b\x00\x00\x3a\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x0c\x00\x00\xe1\xff\xff\xff\x00\x00\x00\x00\x6b\x0c\x00\x00\xb6\x0c\x00\x00\x01\x0d\x00\x00\x00\x00\x00\x00\x4c\x0d\x00\x00\x97\x0d\x00\x00\xe2\x0d\x00\x00\x2d\x0e\x00\x00\x78\x0e\x00\x00\x53\x00\x00\x00\xea\x0e\x00\x00\xe1\x0f\x00\x00\xd8\x10\x00\x00\xcf\x11\x00\x00\xc6\x12\x00\x00\xbd\x13\x00\x00\xb4\x14\x00\x00\xab\x15\x00\x00\xa2\x16\x00\x00\x99\x17\x00\x00\x90\x18\x00\x00\x87\x19\x00\x00\x7e\x1a\x00\x00\x75\x1b\x00\x00"#++alex_table :: AlexAddr+alex_table = AlexA# "\x00\x00\x2f\x00\x30\x00\x2f\x00\x2f\x00\x2f\x00\x31\x00\x37\x00\x2a\x00\x2b\x00\x3a\x00\x29\x00\x3a\x00\x3a\x00\x39\x00\x2f\x00\x3a\x00\x2f\x00\x2f\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x39\x00\x2f\x00\x02\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x33\x00\x35\x00\x00\x00\x00\x00\x01\x00\x2f\x00\x3d\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x00\x42\x00\x3e\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x40\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x03\x00\x1a\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x41\x00\x03\x00\x03\x00\x00\x00\x03\x00\x03\x00\x03\x00\x00\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\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\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x2c\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x25\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x22\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x04\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x05\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x06\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x00\x00\x03\x00\x03\x00\x03\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x03\x00\x00\x00\x03\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x03\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2d\x00\x04\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1d\x00\x08\x00\x12\x00\x12\x00\x12\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x46\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x44\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x43\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x3f\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x45\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x3b\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x38\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x26\x00\x05\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x19\x00\x09\x00\x10\x00\x10\x00\x10\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x23\x00\x06\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x17\x00\x0a\x00\x0e\x00\x0e\x00\x0e\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x23\x00\x06\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x17\x00\x0a\x00\x0e\x00\x0e\x00\x0e\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x26\x00\x05\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x19\x00\x09\x00\x10\x00\x10\x00\x10\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++alex_check :: AlexAddr+alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2d\x00\xa1\x00\x7e\x00\x86\x00\x7c\x00\x88\x00\xa0\x00\x80\x00\x92\x00\x09\x00\x2f\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x3e\x00\x20\x00\x96\x00\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x2d\x00\x20\x00\xbb\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x5c\x00\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x21\x00\x7c\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\x29\x00\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xce\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\x68\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5c\x00\xff\xff\x5e\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x70\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x3a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x73\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x3a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00"#++alex_deflt :: AlexAddr+alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x14\x00\x16\x00\x16\x00\x18\x00\x18\x00\x1c\x00\x1c\x00\x20\x00\x20\x00\x24\x00\x24\x00\x27\x00\x27\x00\xff\xff\xff\xff\x2e\x00\x2e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x49\x00\x49\x00\x49\x00\x48\x00\x48\x00\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x31\x00\x31\x00\xff\xff\xff\xff\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x49\x00\x48\x00"#++alex_accept = listArray (0::Int,85) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAcc (alex_action_1),AlexAccSkip,AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5),AlexAcc (alex_action_6),AlexAcc (alex_action_7),AlexAcc (alex_action_8),AlexAcc (alex_action_8),AlexAcc (alex_action_9),AlexAcc (alex_action_10),AlexAcc (alex_action_10),AlexAcc (alex_action_11),AlexAcc (alex_action_11),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_13),AlexAcc (alex_action_14),AlexAcc (alex_action_15),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16)]+{-# LINE 61 "src/Morte/Lexer.x" #-}+++toInt :: Text -> Int+toInt = Text.foldl' (\x c -> 10 * x + digitToInt c) 0++toUrl :: Text -> String+toUrl = Text.unpack . Text.drop 1++toFile :: Text -> FilePath+toFile = Filesystem.fromText . Text.toStrict . Text.drop 1++-- This was lifted almost intact from the @alex@ source code+encode :: Char -> (Word8, [Word8])+encode c = (fromIntegral h, map fromIntegral t)+ where+ (h, t) = go (ord c)++ go n+ | n <= 0x7f = (n, [])+ | n <= 0x7ff = (0xc0 + (n `shiftR` 6), [0x80 + n .&. 0x3f])+ | n <= 0xffff =+ ( 0xe0 + (n `shiftR` 12)+ , [ 0x80 + ((n `shiftR` 6) .&. 0x3f)+ , 0x80 + n .&. 0x3f+ ]+ )+ | otherwise =+ ( 0xf0 + (n `shiftR` 18)+ , [ 0x80 + ((n `shiftR` 12) .&. 0x3f)+ , 0x80 + ((n `shiftR` 6) .&. 0x3f)+ , 0x80 + n .&. 0x3f+ ]+ )++-- | The cursor's location while lexing the text+data Position = P+ { lineNo :: {-# UNPACK #-} !Int+ , columnNo :: {-# UNPACK #-} !Int+ } deriving (Show)++-- line :: Lens' Position Int+line :: Functor f => (Int -> f Int) -> Position -> f Position+line k (P l c) = fmap (\l' -> P l' c) (k l)++-- column :: Lens' Position Int+column :: Functor f => (Int -> f Int) -> Position -> f Position+column k (P l c) = fmap (\c' -> P l c') (k c)++{- @alex@ does not provide a `Text` wrapper, so the following code just modifies+ the code from their @basic@ wrapper to work with `Text`++ I could not get the @basic-bytestring@ wrapper to work; it does not correctly+ recognize Unicode regular expressions.+-}+data AlexInput = AlexInput+ { prevChar :: Char+ , currBytes :: [Word8]+ , currInput :: Text+ }++alexGetByte :: AlexInput -> Maybe (Word8,AlexInput)+alexGetByte (AlexInput c bytes text) = case bytes of+ b:ytes -> Just (b, AlexInput c ytes text)+ [] -> case Text.uncons text of+ Nothing -> Nothing+ Just (t, ext) -> case encode t of+ (b, ytes) -> Just (b, AlexInput t ytes ext)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar = prevChar++{-| Convert a text representation of an expression into a stream of tokens++ `lexExpr` keeps track of position and returns the remainder of the input if+ lexing fails.+-}+lexExpr :: Text -> Producer LocatedToken (State Position) (Maybe Text)+lexExpr text = for (go (AlexInput '\n' [] text)) tag+ where+ tag token = do+ pos <- lift get+ yield (LocatedToken token pos)++ go input = case alexScan input 0 of+ AlexEOF -> return Nothing+ AlexError (AlexInput _ _ text) -> return (Just text)+ AlexSkip input' len -> do+ lift (column += len)+ go input'+ AlexToken input' len act -> do+ act (Text.take (fromIntegral len) (currInput input))+ lift (column += len)+ go input'++-- | A `Token` augmented with `Position` information+data LocatedToken = LocatedToken+ { token :: !Token+ , position :: {-# UNPACK #-} !Position+ } deriving (Show)++-- | Token type, used to communicate between the lexer and parser+data Token+ = OpenParen+ | CloseParen+ | Colon+ | At+ | Star+ | Box+ | Arrow+ | Lambda+ | Pi+ | Label Text+ | Number Int+ | File FilePath+ | URL String+ | EOF+ deriving (Eq, Show)++alex_action_1 = \_ -> lift (do+ line += 1+ column .= 0 ) +alex_action_3 = \_ -> yield OpenParen +alex_action_4 = \_ -> yield CloseParen +alex_action_5 = \_ -> yield Colon +alex_action_6 = \_ -> yield Star +alex_action_7 = \_ -> yield At +alex_action_8 = \_ -> yield Box +alex_action_9 = \_ -> yield Arrow +alex_action_10 = \_ -> yield Pi +alex_action_11 = \_ -> yield Lambda +alex_action_12 = \text -> yield (Label text) +alex_action_13 = \text -> yield (Number (toInt text)) +alex_action_14 = \text -> yield (URL (toUrl text)) +alex_action_15 = \text -> yield (URL (toUrl text)) +alex_action_16 = \text -> yield (File (toFile text)) +{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "<command-line>" #-}++++++++# 1 "/usr/include/stdc-predef.h" 1 3 4++# 17 "/usr/include/stdc-predef.h" 3 4++++++++++++++++++++# 47 "/usr/include/stdc-predef.h" 3 4++# 59 "/usr/include/stdc-predef.h" 3 4+++++++++{-# LINE 7 "<command-line>" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- -----------------------------------------------------------------------------+-- ALEX TEMPLATE+--+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use+-- it for any purpose whatsoever.++-- -----------------------------------------------------------------------------+-- INTERNALS and main scanner engine++{-# LINE 21 "templates/GenericTemplate.hs" #-}++++++-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#if __GLASGOW_HASKELL__ > 706+#define GTE(n,m) (tagToEnum# (n >=# m))+#define EQ(n,m) (tagToEnum# (n ==# m))+#else+#define GTE(n,m) (n >=# m)+#define EQ(n,m) (n ==# m)+#endif+{-# LINE 51 "templates/GenericTemplate.hs" #-}+++data AlexAddr = AlexA# Addr#+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#if __GLASGOW_HASKELL__ < 503+uncheckedShiftL# = shiftL#+#endif++{-# INLINE alexIndexInt16OffAddr #-}+alexIndexInt16OffAddr (AlexA# arr) off =+#ifdef WORDS_BIGENDIAN+ narrow16Int# i+ where+ i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)+ high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+ low = int2Word# (ord# (indexCharOffAddr# arr off'))+ off' = off *# 2#+#else+ indexInt16OffAddr# arr off+#endif++++++{-# INLINE alexIndexInt32OffAddr #-}+alexIndexInt32OffAddr (AlexA# arr) off = +#ifdef WORDS_BIGENDIAN+ narrow32Int# i+ where+ i = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`+ (b2 `uncheckedShiftL#` 16#) `or#`+ (b1 `uncheckedShiftL#` 8#) `or#` b0)+ b3 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))+ b2 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))+ b1 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+ b0 = int2Word# (ord# (indexCharOffAddr# arr off'))+ off' = off *# 4#+#else+ indexInt32OffAddr# arr off+#endif+++++++#if __GLASGOW_HASKELL__ < 503+quickIndex arr i = arr ! i+#else+-- GHC >= 503, unsafeAt is available from Data.Array.Base.+quickIndex = unsafeAt+#endif+++++-- -----------------------------------------------------------------------------+-- Main lexing routines++data AlexReturn a+ = AlexEOF+ | AlexError !AlexInput+ | AlexSkip !AlexInput !Int+ | AlexToken !AlexInput !Int a++-- alexScan :: AlexInput -> StartCode -> AlexReturn a+alexScan input (I# (sc))+ = alexScanUser undefined input (I# (sc))++alexScanUser user input (I# (sc))+ = case alex_scan_tkn user input 0# input sc AlexNone of+ (AlexNone, input') ->+ case alexGetByte input of+ Nothing -> ++++ AlexEOF+ Just _ ->++++ AlexError input'++ (AlexLastSkip input'' len, _) ->++++ AlexSkip input'' len++ (AlexLastAcc k input''' len, _) ->++++ AlexToken input''' len k+++-- Push the input through the DFA, remembering the most recent accepting+-- state it encountered.++alex_scan_tkn user orig_input len input s last_acc =+ input `seq` -- strict in the input+ let + new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))+ in+ new_acc `seq`+ case alexGetByte input of+ Nothing -> (new_acc, input)+ Just (c, new_input) -> ++++ case fromIntegral c of { (I# (ord_c)) ->+ let+ base = alexIndexInt32OffAddr alex_base s+ offset = (base +# ord_c)+ check = alexIndexInt16OffAddr alex_check offset+ + new_s = if GTE(offset,0#) && EQ(check,ord_c)+ then alexIndexInt16OffAddr alex_table offset+ else alexIndexInt16OffAddr alex_deflt s+ in+ case new_s of+ -1# -> (new_acc, input)+ -- on an error, we want to keep the input *before* the+ -- character that failed, not after.+ _ -> alex_scan_tkn user orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)+ -- note that the length is increased ONLY if this is the 1st byte in a char encoding)+ new_input new_s new_acc+ }+ where+ check_accs (AlexAccNone) = last_acc+ check_accs (AlexAcc a ) = AlexLastAcc a input (I# (len))+ check_accs (AlexAccSkip) = AlexLastSkip input (I# (len))+{-# LINE 198 "templates/GenericTemplate.hs" #-}++data AlexLastAcc a+ = AlexNone+ | AlexLastAcc a !AlexInput !Int+ | AlexLastSkip !AlexInput !Int++instance Functor AlexLastAcc where+ fmap f AlexNone = AlexNone+ fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z+ fmap f (AlexLastSkip x y) = AlexLastSkip x y++data AlexAcc a user+ = AlexAccNone+ | AlexAcc a+ | AlexAccSkip+{-# LINE 242 "templates/GenericTemplate.hs" #-}++-- used by wrappers+iUnbox (I# (i)) = i
exec/Main.hs view
@@ -2,6 +2,7 @@ import Control.Exception (Exception, throwIO) import Data.Monoid (mempty)+import Data.Traversable import qualified Data.Text.Lazy.IO as Text import Morte.Core (typeOf, pretty, normalize) import Morte.Parser (exprFromText)@@ -15,20 +16,85 @@ throws (Left e) = throwIO e throws (Right r) = return r +data Mode = Default | Resolve | TypeCheck | Normalize++parser :: Parser Mode+parser+ = subparser+ ( command "resolve"+ (info (helper <*> pure Resolve)+ ( fullDesc+ <> header "morte resolve - Resolve Morte code"+ <> progDesc "Transitively replace all remote paths and URLs \+ \with the code that they refer to, reading the\+ \program from standard input and writing the \+ \fully resolved program to standard output."+ )+ )+ <> metavar "resolve"+ )+ <|> subparser+ ( command "typecheck"+ ( info (helper <*> pure TypeCheck)+ ( fullDesc+ <> header "morte typecheck - Type-check Morte code"+ <> progDesc "Verify that Morte code is well-formed by \+ \type-checking the program, reading the program \+ \from standard input and writing the program's \+ \inferred type to standard output."+ ) )+ <> metavar "typecheck" )+ <|> subparser+ ( command "normalize"+ ( info (helper <*> pure Normalize)+ ( fullDesc+ <> header "morte normalize - Normalize Morte code"+ <> progDesc "Reduce Morte code to normal form using \+ \β-reduction and η-reduction, reading the program \+ \from standard input and writing the normalized \+ \program to standard output."+ ) )+ <> metavar "normalize"+ )+ <|> pure Default+ main :: IO () main = do- execParser $ info (helper <*> pure ())+ mode <- execParser $ info (helper <*> parser) ( fullDesc <> header "morte - A bare-bones calculus of constructions"- <> progDesc "Type-check and normalize a Morte program, reading the \- \program from standard input, writing the program's type \- \to standard error, and writing the normalized program to \- \standard output."+ <> progDesc "Type-check, resolve, and normalize a Morte program, \+ \reading the program from standard input, writing the \+ \program's normalized type to standard error, and writing \+ \the normalized program to standard output." )- inText <- Text.getContents- expr <- throws (exprFromText inText)- expr' <- load expr- typeExpr <- throws (typeOf expr')- Text.hPutStrLn stderr (pretty (normalize typeExpr))- Text.hPutStrLn stderr mempty- Text.putStrLn (pretty (normalize expr'))+ case mode of+ Default -> do+ inText <- Text.getContents+ expr <- throws (exprFromText inText)+ expr' <- load expr+ typeExpr <- throws (typeOf expr')+ Text.hPutStrLn stderr (pretty (normalize typeExpr))+ Text.hPutStrLn stderr mempty+ Text.putStrLn (pretty (normalize expr'))+ Resolve -> do+ inText <- Text.getContents+ expr <- throws (exprFromText inText)+ expr' <- load expr+ Text.putStrLn (pretty expr')+ TypeCheck -> do+ inText <- Text.getContents+ expr <- throws (exprFromText inText)+ case traverse (\_ -> Nothing) expr of+ Nothing -> throwIO (userError+ "`morte typecheck` cannot type-check a program containing \+ \remote references. Use `morte resolve` to resolve all \+ \remote references or just use `morte` which combines \+ \resolution, type-checking, and normalization." )+ Just expr' -> do+ typeExpr <- throws (typeOf expr')+ Text.putStrLn (pretty typeExpr)+ Normalize -> do+ inText <- Text.getContents+ expr <- throws (exprFromText inText)+ Text.putStrLn (pretty (normalize expr))
morte.cabal view
@@ -1,5 +1,5 @@ Name: morte-Version: 1.4.2+Version: 1.5.0 Cabal-Version: >=1.8.0.2 Build-Type: Simple Tested-With: GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.2@@ -26,8 +26,7 @@ . Read "Morte.Tutorial" to learn how to use this library Category: Compiler-Data-Dir: benchmarks/src-Data-Files: *.mt+Data-Files: bench/src/*.mt test/src/*.mt Source-Repository head Type: git Location: https://github.com/Gabriel439/Haskell-Morte-Library@@ -35,24 +34,24 @@ Library Hs-Source-Dirs: src Build-Depends:- base >= 4 && < 5 ,- array >= 0.4.0.0 && < 0.6 ,- binary >= 0.7.0.0 && < 0.8 ,- containers >= 0.5.0.0 && < 0.6 ,- deepseq >= 1.3.0 && < 1.5 ,- Earley >= 0.10.1.0 && < 0.11 ,- http-client >= 0.4.0 && < 0.5 ,- http-client-tls >= 0.2.0 && < 0.3 ,- microlens >= 0.2.0.0 && < 0.5 ,- microlens-mtl >= 0.1.3.1 && < 0.2 ,- managed >= 1.0.0 && < 1.1 ,- pipes >= 4.0.0 && < 4.2 ,- system-filepath >= 0.3.1 && < 0.5 ,- system-fileio >= 0.2.1 && < 0.4 ,- text >= 0.11.1.0 && < 1.3 ,- text-format < 0.4 ,- transformers >= 0.2.0.0 && < 0.5+ base >= 4 && < 5 ,+ array >= 0.4.0.0 && < 0.6 ,+ binary >= 0.7.0.0 && < 0.8 ,+ containers >= 0.5.0.0 && < 0.6 ,+ deepseq >= 1.3.0 && < 1.5 ,+ Earley >= 0.10.1.0 && < 0.12,+ http-client >= 0.4.0 && < 0.5 ,+ http-client-tls >= 0.2.0 && < 0.3 ,+ microlens >= 0.2.0.0 && < 0.5 ,+ microlens-mtl >= 0.1.3.1 && < 0.2 ,+ pipes >= 4.0.0 && < 4.2 ,+ system-filepath >= 0.3.1 && < 0.5 ,+ system-fileio >= 0.2.1 && < 0.4 ,+ text >= 0.11.1.0 && < 1.3 ,+ text-format < 0.4 ,+ transformers >= 0.2.0.0 && < 0.6 Exposed-Modules:+ Morte.Context, Morte.Core, Morte.Import, Morte.Lexer,@@ -70,14 +69,31 @@ optparse-applicative < 0.13 , text >= 0.11.1.0 && < 1.3 -Benchmark benchmarks- Type: exitcode-stdio-1.0- HS-Source-Dirs: benchmarks- Main-Is: Bench.hs- GHC-Options: -O2 -Wall+Benchmark bench+ Type: exitcode-stdio-1.0+ HS-Source-Dirs: bench+ Main-Is: Main.hs+ GHC-Options: -O2 -Wall+ Build-Depends:+ base >= 4 && < 5 ,+ criterion >= 1.0.0.1 && < 1.2,+ morte ,+ system-filepath >= 0.3.1 && < 0.5,+ text >= 0.11.1.0 && < 1.3 +Test-Suite test+ Type: exitcode-stdio-1.0+ HS-Source-Dirs: test+ Main-Is: Main.hs+ GHC-Options: -O2 -Wall Build-Depends:- base >= 4 && < 5 ,- criterion >= 1.0.0.1 && < 1.2,- morte ,- text >= 0.11.1.0 && < 1.3+ base >= 4 && < 5 ,+ mtl >= 2.2 && < 2.3 ,+ QuickCheck >= 2.8.1 && < 2.9 ,+ system-filepath >= 0.3.1 && < 0.5 ,+ tasty >= 0.11 && < 0.12,+ tasty-hunit >= 0.9 && < 0.10,+ tasty-quickcheck >= 0.8.4 && < 0.9 ,+ transformers >= 0.2.0.0 && < 0.6 ,+ morte ,+ text >= 0.11.1.0 && < 1.3
+ src/Morte/Context.hs view
@@ -0,0 +1,58 @@+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE DeriveFunctor #-}++-- | All `Context`-related operations++module Morte.Context (+ -- * Context+ Context+ , empty+ , insert+ , lookup+ , toList+ ) where++import Control.DeepSeq (NFData)+import Data.Text.Lazy (Text)+import Prelude hiding (lookup)++{-| Bound variable names and their types++ Variable names may appear more than once in the `Context`. The `Var` @x\@n@+ refers to the @n@th occurrence of @x@ in the `Context` (using 0-based+ numbering).+-}+newtype Context a = Context { getContext :: [(Text, a)] }+ deriving (Functor, NFData)++{-| An empty context with no key-value pairs++> toList empty = []+-}+empty :: Context a+empty = Context []++-- | Add a key-value pair to the `Context`+insert :: Text -> a -> Context a -> Context a+insert k v (Context kvs) = Context ((k, v) : kvs)+{-# INLINABLE insert #-}++{-| Lookup a key by name and index++> lookup k 0 (insert k v0 ctx ) = Just v0+> lookup k 1 (insert k v0 (insert k v1 ctx)) = Just v1+-}+lookup :: Text -> Int -> Context a -> Maybe a+lookup k n0 (Context kvs0) = loop kvs0 n0+ where+ loop ((k', v):kvs) n | k /= k' = loop kvs n+ | n > 0 = loop kvs $! n - 1+ | n == 0 = Just v+ | otherwise = Nothing+ loop [] _ = Nothing+{-# INLINABLE lookup #-}++-- | Return all key-value associations as a list+toList :: Context a -> [(Text, a)]+toList = getContext+{-# INLINABLE toList #-}
src/Morte/Core.hs view
@@ -1,9 +1,10 @@-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE DeriveFoldable #-}-{-# LANGUAGE DeriveFunctor #-}-{-# LANGUAGE DeriveTraversable #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RankNTypes #-} {-# OPTIONS_GHC -Wall #-} {-| This module contains the core calculus for the Morte language. This@@ -78,7 +79,6 @@ import Data.Binary.Get (getWord64le) import Data.Binary.Put (putWord64le) import Data.Foldable (Foldable(..))-import Data.Traversable (Traversable(..)) import Data.Monoid ((<>)) import Data.String (IsString(..)) import Data.Text.Buildable (Buildable(..))@@ -86,12 +86,16 @@ import qualified Data.Text.Encoding as Text import qualified Data.Text.Lazy as Text import qualified Data.Text.Lazy.Builder as Builder+import Data.Traversable (Traversable(..)) import Data.Typeable (Typeable) import Data.Word (Word8) import Filesystem.Path.CurrentOS (FilePath) import qualified Filesystem.Path.CurrentOS as Filesystem+import Morte.Context (Context) import Prelude hiding (FilePath) +import qualified Morte.Context as Context+ {-| Label for a bound variable The `Text` field is the variable's name (i.e. \"@x@\").@@ -189,7 +193,7 @@ axiom :: Const -> Either TypeError Const axiom Star = return Box-axiom Box = Left (TypeError [] (Const Box) (Untyped Box))+axiom Box = Left (TypeError Context.empty (Const Box) (Untyped Box)) rule :: Const -> Const -> Either TypeError Const rule Star Box = return Box@@ -270,16 +274,6 @@ App f a -> App (f >>= k) (a >>= k) Embed r -> k r -lookupN :: Eq a => a -> [(a, b)] -> Int -> Maybe b-lookupN a ((a', b'):abs') n | a /= a' = lookupN a abs' n- | n > 0 = lookupN a abs' $! n - 1- | n == 0 = Just b'- | otherwise = Nothing-lookupN _ [] _ = Nothing--lookupCtx :: Var -> Context -> Maybe (Expr X)-lookupCtx (V x n) ctx = lookupN x ctx n- match :: Text -> Int -> Text -> Int -> [(Text, Text)] -> Bool match xL nL xR nR [] = xL == xR && nL == nR match xL 0 xR 0 ((xL', xR'):_ ) | xL == xL' && xR == xR' = True@@ -398,14 +392,6 @@ <> (if parenApp then ")" else "") Embed p -> build p -{-| Bound variable names and their types-- Variable names may appear more than once in the `Context`. The `Var` @x\@n@- refers to the @n@th occurrence of @x@ in the `Context` (using 0-based- numbering).--}-type Context = [(Text, Expr X)]- -- | The specific type error data TypeMessage = UnboundVariable@@ -449,7 +435,7 @@ -- | A structured type error that includes context data TypeError = TypeError- { context :: Context+ { context :: Context (Expr X) , current :: Expr X , typeMessage :: TypeMessage } deriving (Typeable)@@ -480,6 +466,7 @@ . Text.unlines . map (Builder.toLazyText . buildKV) . reverse+ . Context.toList {-| Substitute all occurrences of a variable with an expression @@ -531,14 +518,14 @@ is not necessary for just type-checking. If you actually care about the returned type then you may want to `normalize` it afterwards. -}-typeWith :: Context -> Expr X -> Either TypeError (Expr X)+typeWith :: Context (Expr X) -> Expr X -> Either TypeError (Expr X) typeWith ctx e = case e of Const c -> fmap Const (axiom c)- Var x -> case lookupCtx x ctx of+ Var (V x n) -> case Context.lookup x n ctx of Nothing -> Left (TypeError ctx e UnboundVariable) Just a -> return a Lam x _A b -> do- let ctx' = [ (x', shift 1 x _A') | (x', _A') <- (x, _A):ctx ]+ let ctx' = fmap (shift 1 x) (Context.insert x _A ctx) _B <- typeWith ctx' b let p = Pi x _A _B _t <- typeWith ctx p@@ -548,7 +535,7 @@ s <- case eS of Const s -> return s _ -> Left (TypeError ctx e (InvalidInputType _A))- let ctx' = [ (x', shift 1 x _A') | (x', _A') <- (x, _A):ctx ]+ let ctx' = fmap (shift 1 x) (Context.insert x _A ctx) eT <- fmap whnf (typeWith ctx' _B) t <- case eT of Const t -> return t@@ -576,7 +563,7 @@ will fail. -} typeOf :: Expr X -> Either TypeError (Expr X)-typeOf = typeWith []+typeOf = typeWith Context.empty -- | Reduce an expression to weak-head normal form whnf :: Expr a -> Expr a
src/Morte/Import.hs view
@@ -74,8 +74,6 @@ import Control.Exception (Exception, IOException, catch, onException, throwIO) import Control.Monad (join) import Control.Monad.IO.Class (MonadIO(liftIO))-import Control.Monad.Managed (Managed, managed, with)-import Control.Monad.Trans.Class (lift) import Control.Monad.Trans.State.Strict (StateT, evalStateT, get, put) import Data.Map.Strict (Map) import qualified Data.Map.Strict as Map@@ -179,7 +177,7 @@ manager :: Lens' Status (Maybe Manager) manager k s = fmap (\x -> s { _manager = x }) (k (_manager s)) -needManager :: StateT Status Managed Manager+needManager :: StateT Status IO Manager needManager = do x <- zoom manager get case x of@@ -187,12 +185,12 @@ Nothing -> do let settings = HTTP.tlsManagerSettings { HTTP.managerResponseTimeout = Just 1000000 } -- 1 second- m <- lift (managed (HTTP.withManager settings))+ m <- liftIO (HTTP.newManager settings) zoom manager (put (Just m)) return m -- | Load a `Path` as a \"dynamic\" expression (without resolving any imports)-loadDynamic :: Path -> StateT Status Managed (Expr Path)+loadDynamic :: Path -> StateT Status IO (Expr Path) loadDynamic p = do paths <- zoom stack get txt <- case p of@@ -247,7 +245,7 @@ Right expr -> return expr -- | Load a `Path` as a \"static\" expression (with all imports resolved)-loadStatic :: Path -> StateT Status Managed (Expr X)+loadStatic :: Path -> StateT Status IO (Expr X) loadStatic path = do paths <- zoom stack get @@ -267,31 +265,42 @@ let paths' = path:paths zoom stack (put paths')- expr <- if path `elem` paths+ (expr, cached) <- if path `elem` paths then liftIO (throwIO (Imported paths (Cycle path))) else do m <- zoom cache get case Map.lookup path m of- Just expr -> return expr+ Just expr -> return (expr, True) Nothing -> do- expr' <- loadDynamic path- case traverse (\_ -> Nothing) expr' of+ expr' <- loadDynamic path+ expr'' <- case traverse (\_ -> Nothing) expr' of -- No imports left Just expr -> do zoom cache (put $! Map.insert path expr m) return expr -- Some imports left, so recurse Nothing -> fmap join (traverse loadStatic expr')- case typeOf expr of- Left err -> liftIO (throwIO (Imported paths' err))- Right _ -> return ()+ return (expr'', False)++ -- Type-check expressions here for two separate reasons:+ --+ -- * to verify that they are closed+ -- * to catch type errors as early in the import process as possible+ --+ -- There is no need to check expressions that have been cached, since they+ -- have already been checked+ if cached+ then return ()+ else case typeOf expr of+ Left err -> liftIO (throwIO (Imported paths' err))+ Right _ -> return ()+ zoom stack (put paths) return expr -- | Resolve all imports within an expression load :: Expr Path -> IO (Expr X)-load expr =- with (evalStateT (fmap join (traverse loadStatic expr)) status) return+load expr = evalStateT (fmap join (traverse loadStatic expr)) status where status = Status [] Map.empty Nothing
src/Morte/Lexer.x view
@@ -152,6 +152,7 @@ lift (column += len) go input' +-- | A `Token` augmented with `Position` information data LocatedToken = LocatedToken { token :: !Token , position :: {-# UNPACK #-} !Position
src/Morte/Parser.hs view
@@ -2,6 +2,8 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecursiveDo #-} +-- | Parsing logic for the Morte language+ module Morte.Parser ( -- * Parser exprFromText,
src/Morte/Tutorial.hs view
@@ -93,7 +93,7 @@ > $ morte > \(a : *) -> \(x : a) -> x <Enter> > <Ctrl-D>-> ∀(a : *) → a → a+> ∀(a : *) → ∀(x : a) → a > > λ(a : *) → λ(x : a) → x > $@@ -108,7 +108,7 @@ > id :: a -> a > > -- Morte-> ∀(a : *) → a → a+> ∀(a : *) → ∀(x : a) → a The first thing you'll notice is that Morte explicitly quantifies all types. In Haskell, you can do this, too, using the @ExplicitForAll@ extension:@@ -165,7 +165,7 @@ Then we'll type-check and optimize this program: > $ morte < id.mt-> ∀(String : *) → String → String+> ∀(String : *) → ∀(x : String) → String > > λ(String : *) → λ(x : String) → x @@ -518,7 +518,7 @@ If you type-check and optimize this, you get: > $ morte < bool.mt-> ∀(Int : *) → Int → Int → Int+> ∀(Int : *) → ∀(Zero : Int) → ∀(One : Int) → Int > > λ(Int : *) → λ(Zero : Int) → λ(One : Int) → One @@ -616,7 +616,7 @@ If you compile and type-check that you get: > $ morte < pair.mt-> ∀(a : *) → a → a → a+> ∀(a : *) → ∀(x : a) → ∀(y : a) → a > > λ(a : *) → λ(x : a) → λ(y : a) → y @@ -1259,8 +1259,8 @@ over the list just once, applying @\'f\'@ and @\'g\'@ to every value: > $ morte < mapcomp1.mt-> ∀(a : *) → ∀(b : *) → ∀(c : *) → (b → c) → (a → b) → (∀(x : *) → (a → x → x) →-> x → x) → ∀(x : *) → (c → x → x) → x → x+> ∀(a : *) → ∀(b : *) → ∀(c : *) → ∀(f : b → c) → ∀(g : a → b) → (∀(x : *) → (a +> → x → x) → x → x) → ∀(x : *) → (c → x → x) → x → x > > λ(a : *) → λ(b : *) → λ(c : *) → λ(f : b → c) → λ(g : a → b) → λ(l : ∀(x : *) > → (a → x → x) → x → x) → λ(x : *) → λ(Cons : c → x → x) → l x (λ(va : a) → Con@@ -1798,8 +1798,8 @@ input to standard output: > $ morte < recursive.mt-> ∀(String : *) → ∀(U : *) → U → ∀(x : *) → (String → x → x) → ((String → x-> ) → x) → (U → x) → x+> ∀(String : *) → ∀(U : *) → ∀(Unit : U) → ∀(x : *) → (String → x → x) → ((Strin+> g → x) → x) → (U → x) → x > > λ(String : *) → λ(U : *) → λ(Unit : U) → λ(x : *) → λ(PutStrLn : String → x → > x) → λ(GetLine : (String → x) → x) → λ(Return : U → x) → GetLine (λ(va : Strin
+ test/Main.hs view
@@ -0,0 +1,204 @@+{-# LANGUAGE OverloadedStrings #-}++module Main (+ main+ ) where++import Control.Exception (throwIO)+import ClosedWellTyped (ClosedWellTyped(..))+import Data.Text.Lazy (Text)+import Filesystem.Path (FilePath)+import Morte.Core (Expr, X)+import Paths_morte (getDataFileName)+import Prelude hiding (FilePath)+import Test.Tasty (TestTree)++import qualified Data.Text.Lazy.IO as Text+import qualified Filesystem.Path.CurrentOS as Filesystem+import qualified Morte.Core as Morte+import qualified Morte.Import as Morte+import qualified Morte.Parser as Morte+import qualified Test.Tasty as Tasty+import qualified Test.Tasty.QuickCheck as QuickCheck+import qualified Test.Tasty.HUnit as HUnit++main :: IO ()+main = Tasty.defaultMain tests++tests :: TestTree+tests =+ Tasty.testGroup "Tests"+ [ Tasty.testGroup "Properties"+ [ QuickCheck.testProperty "Normalization is idempotent"+ normalizationIsIdempotent + , QuickCheck.testProperty "Normalization preserves type safety"+ normalizationPreservesTypeSafety+ ]+ , Tasty.testGroup "Unit tests"+ [ HUnit.testCase "Tutorial - Identity" example0+ , HUnit.testCase "Tutorial - id.mt" example1+ , HUnit.testCase "Tutorial - id2.mt" example2+ , HUnit.testCase "Tutorial - bool.mt" example3+ , HUnit.testCase "Tutorial - pair.mt" example4+ , HUnit.testCase "Tutorial - all.mt" example5+ , HUnit.testCase "Tutorial - mapid1.mt" example6+ , HUnit.testCase "Tutorial - mapid2.mt" example7+ , HUnit.testCase "Tutorial - mapcomp1.mt" example8+ , HUnit.testCase "Tutorial - mapcomp2.mt" example9+ , HUnit.testCase "Tutorial - corecursive.mt - A" example10+ , HUnit.testCase "Tutorial - corecursive.mt - B" example11+ , HUnit.testCase "Tutorial - corecursive.mt - C" example12+ , HUnit.testCase "Tutorial - corecursive.mt - D" example13+ , HUnit.testCase "Tutorial - recursive.mt" example14+ , HUnit.testCase "Tutorial - corecursive.mt" example15+ ]+ ]++typeChecks :: Expr X -> Bool+typeChecks expr = case Morte.typeOf expr of+ Right _ -> True+ Left _ -> False++-- Carefully note that `ClosedWellTyped` generates well-typed expressions, so+-- this is really testing that `typeChecks expr ==> typeChecks (normalize expr)`+normalizationPreservesTypeSafety :: ClosedWellTyped -> Bool+normalizationPreservesTypeSafety (ClosedWellTyped expr) =+ typeChecks (Morte.normalize expr)++-- Carefully note that `(==)` also normalizes both sides before checking for+-- α-equality, so this is really testing that `normalize (normalize expr)` and+-- `normalize expr` are α-equivalent.+normalizationIsIdempotent :: ClosedWellTyped -> Bool+normalizationIsIdempotent (ClosedWellTyped expr) = Morte.normalize expr == expr++example+ :: FilePath+ -> Text+ -> Text+ -> IO ()+example path stderr stdout = do+ str <- getDataFileName (Filesystem.encodeString path)+ stdin <- Text.readFile str+ case Morte.exprFromText stdin of+ Left e -> throwIO e+ Right expr -> do+ expr' <- Morte.load expr+ case Morte.typeOf expr' of+ Left e -> throwIO e+ Right typeExpr -> do+ let stderr' = Morte.pretty (Morte.normalize typeExpr)+ let stdout' = Morte.pretty (Morte.normalize expr')+ HUnit.assertEqual "" stderr stderr'+ HUnit.assertEqual "" stdout stdout'++example0 :: IO ()+example0 =+ example+ "test/src/example0.mt"+ "∀(a : *) → ∀(x : a) → a"+ "λ(a : *) → λ(x : a) → x"++example1 :: IO ()+example1 =+ example+ "test/src/example1.mt"+ "∀(String : *) → ∀(x : String) → String"+ "λ(String : *) → λ(x : String) → x"++example2 :: IO ()+example2 =+ example+ "test/src/example2.mt"+ "∀(a : *) → a → a"+ "λ(a : *) → λ(x : a) → x"++example3 :: IO ()+example3 =+ example+ "test/src/example3.mt"+ "∀(Int : *) → ∀(Zero : Int) → ∀(One : Int) → Int"+ "λ(Int : *) → λ(Zero : Int) → λ(One : Int) → One"++example4 :: IO ()+example4 =+ example+ "test/src/example4.mt"+ "∀(a : *) → ∀(x : a) → ∀(y : a) → a"+ "λ(a : *) → λ(x : a) → λ(y : a) → y"++example5 :: IO ()+example5 =+ example+ "test/src/example5.mt"+ "∀(r : *) → r → r → r"+ "λ(r : *) → λ(x : r) → λ(_ : r) → x"++example6 :: IO ()+example6 =+ example+ "test/src/example6.mt"+ "∀(a : *) → (∀(x : *) → (a → x → x) → x → x) → ∀(x : *) → (a → x → x) → x → x"+ "λ(a : *) → λ(l : ∀(x : *) → (a → x → x) → x → x) → l"++example7 :: IO ()+example7 =+ example+ "test/src/example7.mt"+ "∀(a : *) → (∀(x : *) → (a → x → x) → x → x) → ∀(x : *) → (a → x → x) → x → x"+ "λ(a : *) → λ(va : ∀(x : *) → (a → x → x) → x → x) → va"++example8 :: IO ()+example8 =+ example+ "test/src/example8.mt"+ "∀(a : *) → ∀(b : *) → ∀(c : *) → ∀(f : b → c) → ∀(g : a → b) → (∀(x : *) → (a → x → x) → x → x) → ∀(x : *) → (c → x → x) → x → x"+ "λ(a : *) → λ(b : *) → λ(c : *) → λ(f : b → c) → λ(g : a → b) → λ(l : ∀(x : *) → (a → x → x) → x → x) → λ(x : *) → λ(Cons : c → x → x) → l x (λ(va : a) → Cons (f (g va)))"++example9 :: IO ()+example9 =+ example+ "test/src/example9.mt"+ "∀(a : *) → ∀(b : *) → ∀(c : *) → ∀(f : b → c) → ∀(g : a → b) → (∀(x : *) → (a → x → x) → x → x) → ∀(x : *) → (c → x → x) → x → x"+ "λ(a : *) → λ(b : *) → λ(c : *) → λ(f : b → c) → λ(g : a → b) → λ(va : ∀(x : *) → (a → x → x) → x → x) → λ(x : *) → λ(Cons : c → x → x) → va x (λ(va : a) → Cons (f (g va)))"++example10 :: IO ()+example10 =+ example+ "test/src/example10.mt"+ "∀(a : *) → (∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x) → ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x"+ "λ(a : *) → λ(st : ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x) → st"++example11 :: IO ()+example11 =+ example+ "test/src/example11.mt"+ "∀(a : *) → (∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x) → ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x"+ "λ(a : *) → λ(va : ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x) → va"++example12 :: IO ()+example12 =+ example+ "test/src/example12.mt"+ "∀(a : *) → ∀(b : *) → ∀(c : *) → (b → c) → (a → b) → (∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x) → ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (c → s → x) → x) → x) → x"+ "λ(a : *) → λ(b : *) → λ(c : *) → λ(f : b → c) → λ(g : a → b) → λ(st : ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x) → λ(x : *) → λ(S : ∀(s : *) → s → (s → ∀(x : *) → (c → s → x) → x) → x) → st x (λ(s : *) → λ(seed : s) → λ(step : s → ∀(x : *) → (a → s → x) → x) → S s seed (λ(seed : s) → λ(x : *) → λ(Pair : c → s → x) → step seed x (λ(va : a) → Pair (f (g va)))))"++example13 :: IO ()+example13 =+ example+ "test/src/example13.mt"+ "∀(a : *) → ∀(b : *) → ∀(c : *) → (b → c) → (a → b) → (∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x) → ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (c → s → x) → x) → x) → x"+ "λ(a : *) → λ(b : *) → λ(c : *) → λ(f : b → c) → λ(g : a → b) → λ(va : ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x) → λ(x : *) → λ(S : ∀(s : *) → s → (s → ∀(x : *) → (c → s → x) → x) → x) → va x (λ(s : *) → λ(seed : s) → λ(step : s → ∀(x : *) → (a → s → x) → x) → S s seed (λ(seed : s) → λ(x : *) → λ(Pair : c → s → x) → step seed x (λ(va : a) → Pair (f (g va)))))"++example14 :: IO ()+example14 =+ example+ "test/src/example14.mt"+ "∀(String : *) → ∀(U : *) → ∀(Unit : U) → ∀(x : *) → (String → x → x) → ((String → x) → x) → (U → x) → x"+ "λ(String : *) → λ(U : *) → λ(Unit : U) → λ(x : *) → λ(PutStrLn : String → x → x) → λ(GetLine : (String → x) → x) → λ(Return : U → x) → GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (Return Unit))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))"++example15 :: IO ()+example15 =+ example+ "test/src/example15.mt"+ "∀(String : *) → ∀(r : *) → ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (String → s → x) → ((String → s) → x) → (r → x) → x) → x) → x"+ "λ(String : *) → λ(r : *) → λ(x : *) → λ(k : ∀(s : *) → s → (s → ∀(x : *) → (String → s → x) → ((String → s) → x) → (r → x) → x) → x) → k (∀(x : *) → (String → x) → x → x) (λ(x : *) → λ(Just : String → x) → λ(Nothing : x) → Nothing) (λ(m : ∀(x : *) → (String → x) → x → x) → m (∀(x : *) → (String → (∀(x : *) → (String → x) → x → x) → x) → ((String → ∀(x : *) → (String → x) → x → x) → x) → (r → x) → x) (λ(str : String) → λ(x : *) → λ(PutStrLn : String → (∀(x : *) → (String → x) → x → x) → x) → λ(GetLine : (String → ∀(x : *) → (String → x) → x → x) → x) → λ(Return : r → x) → PutStrLn str (λ(x : *) → λ(Just : String → x) → λ(Nothing : x) → Nothing)) (λ(x : *) → λ(PutStrLn : String → (∀(x : *) → (String → x) → x → x) → x) → λ(GetLine : (String → ∀(x : *) → (String → x) → x → x) → x) → λ(Return : r → x) → GetLine (λ(va : String) → λ(x : *) → λ(Just : String → x) → λ(Nothing : x) → Just va)))"
+ test/src/example0.mt view
@@ -0,0 +1,1 @@+\(a : *) -> \(x : a) -> x
+ test/src/example1.mt view
@@ -0,0 +1,7 @@+-- id.mt++-- Morte accepts comments++-- Also, whitespace is not significant+\(String : *) ->+ (\(a : *) -> \(x : a) -> x) String
+ test/src/example10.mt view
@@ -0,0 +1,177 @@+-- corecursive.mt++-- first :: (a -> b) -> (a, c) -> (b, c)+-- first f (va, vb) = (f va, vb) +-- +-- data Stream a = Cons (a, Stream a)+-- +-- map :: (a -> b) -> Stream a -> Stream b+-- map f (Cons (va, s)) = Cons (first f (va, map f s))+-- +-- -- exampleA = exampleB+-- +-- exampleA :: Stream a -> Stream a+-- exampleA = map id+-- +-- exampleB :: Stream a -> Stream a+-- exampleB = id+-- +-- -- exampleC = exampleD+-- +-- exampleC :: (b -> c) -> (a -> b) -> Stream a -> Stream c+-- exampleC f g = map (f . g)+-- +-- exampleD :: (b -> c) -> (a -> b) -> Stream a -> Stream c+-- exampleD f g = map f . map g++( \(id : forall (a : *) -> a -> a)+-> \( (.)+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (b -> c)+ -> (a -> b)+ -> (a -> c)+ )+-> \(Pair : * -> * -> *)+-> \(P : forall (a : *) -> forall (b : *) -> a -> b -> Pair a b)+-> \( first+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (a -> b)+ -> Pair a c+ -> Pair b c+ )++-> ( \(Stream : * -> *)+ -> \( map+ : forall (a : *)+ -> forall (b : *)+ -> (a -> b)+ -> Stream a+ -> Stream b+ )++ -- exampleA = exampleB+ -> ( \(exampleA : forall (a : *) -> Stream a -> Stream a)+ -> \(exampleB : forall (a : *) -> Stream a -> Stream a)++ -- exampleC = exampleD+ -> \( exampleC+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (b -> c)+ -> (a -> b)+ -> Stream a+ -> Stream c+ )++ -> \( exampleD+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (b -> c)+ -> (a -> b)+ -> Stream a+ -> Stream c+ )++ -- Uncomment the example you want to test+ -> exampleA+-- -> exampleB+-- -> exampleC+-- -> exampleD+ )++ -- exampleA+ (\(a : *) -> map a a (id a))+ + -- exampleB+ (\(a : *) -> id (Stream a))++ -- exampleC+ ( \(a : *)+ -> \(b : *)+ -> \(c : *)+ -> \(f : b -> c)+ -> \(g : a -> b)+ -> map a c ((.) a b c f g)+ )++ -- exampleD+ ( \(a : *)+ -> \(b : *)+ -> \(c : *)+ -> \(f : b -> c)+ -> \(g : a -> b)+ -> (.) (Stream a) (Stream b) (Stream c) (map b c f) (map a b g)+ )+ )++ -- Stream+ ( \(a : *)+ -> forall (x : *)+ -> (forall (s : *) -> s -> (s -> Pair a s) -> x)+ -> x+ )++ -- map+ ( \(a : *)+ -> \(b : *)+ -> \(f : a -> b)+ -> \( st+ : forall (x : *) -> (forall (s : *) -> s -> (s -> Pair a s) -> x) -> x+ )+ -> \(x : *)+ -> \(S : forall (s : *) -> s -> (s -> Pair b s) -> x)+ -> st+ x+ ( \(s : *)+ -> \(seed : s)+ -> \(step : s -> Pair a s)+ -> S+ s+ seed+ (\(seed : s) -> first a b s f (step seed))+ )+ )+)++-- id+(\(a : *) -> \(va : a) -> va)++-- (.)+( \(a : *)+-> \(b : *)+-> \(c : *)+-> \(f : b -> c)+-> \(g : a -> b)+-> \(va : a)+-> f (g va)+)++-- Pair+(\(a : *) -> \(b : *) -> forall (x : *) -> (a -> b -> x) -> x)++-- P+( \(a : *)+-> \(b : *)+-> \(va : a)+-> \(vb : b)+-> \(x : *)+-> \(P : a -> b -> x)+-> P va vb+)++-- first+( \(a : *)+-> \(b : *)+-> \(c : *)+-> \(f : a -> b)+-> \(p : forall (x : *) -> (a -> c -> x) -> x)+-> \(x : *)+-> \(Pair : b -> c -> x)+-> p x (\(va : a) -> \(vc : c) -> Pair (f va) vc)+)
+ test/src/example11.mt view
@@ -0,0 +1,177 @@+-- corecursive.mt++-- first :: (a -> b) -> (a, c) -> (b, c)+-- first f (va, vb) = (f va, vb) +-- +-- data Stream a = Cons (a, Stream a)+-- +-- map :: (a -> b) -> Stream a -> Stream b+-- map f (Cons (va, s)) = Cons (first f (va, map f s))+-- +-- -- exampleA = exampleB+-- +-- exampleA :: Stream a -> Stream a+-- exampleA = map id+-- +-- exampleB :: Stream a -> Stream a+-- exampleB = id+-- +-- -- exampleC = exampleD+-- +-- exampleC :: (b -> c) -> (a -> b) -> Stream a -> Stream c+-- exampleC f g = map (f . g)+-- +-- exampleD :: (b -> c) -> (a -> b) -> Stream a -> Stream c+-- exampleD f g = map f . map g++( \(id : forall (a : *) -> a -> a)+-> \( (.)+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (b -> c)+ -> (a -> b)+ -> (a -> c)+ )+-> \(Pair : * -> * -> *)+-> \(P : forall (a : *) -> forall (b : *) -> a -> b -> Pair a b)+-> \( first+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (a -> b)+ -> Pair a c+ -> Pair b c+ )++-> ( \(Stream : * -> *)+ -> \( map+ : forall (a : *)+ -> forall (b : *)+ -> (a -> b)+ -> Stream a+ -> Stream b+ )++ -- exampleA = exampleB+ -> ( \(exampleA : forall (a : *) -> Stream a -> Stream a)+ -> \(exampleB : forall (a : *) -> Stream a -> Stream a)++ -- exampleC = exampleD+ -> \( exampleC+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (b -> c)+ -> (a -> b)+ -> Stream a+ -> Stream c+ )++ -> \( exampleD+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (b -> c)+ -> (a -> b)+ -> Stream a+ -> Stream c+ )++ -- Uncomment the example you want to test+-- -> exampleA+ -> exampleB+-- -> exampleC+-- -> exampleD+ )++ -- exampleA+ (\(a : *) -> map a a (id a))+ + -- exampleB+ (\(a : *) -> id (Stream a))++ -- exampleC+ ( \(a : *)+ -> \(b : *)+ -> \(c : *)+ -> \(f : b -> c)+ -> \(g : a -> b)+ -> map a c ((.) a b c f g)+ )++ -- exampleD+ ( \(a : *)+ -> \(b : *)+ -> \(c : *)+ -> \(f : b -> c)+ -> \(g : a -> b)+ -> (.) (Stream a) (Stream b) (Stream c) (map b c f) (map a b g)+ )+ )++ -- Stream+ ( \(a : *)+ -> forall (x : *)+ -> (forall (s : *) -> s -> (s -> Pair a s) -> x)+ -> x+ )++ -- map+ ( \(a : *)+ -> \(b : *)+ -> \(f : a -> b)+ -> \( st+ : forall (x : *) -> (forall (s : *) -> s -> (s -> Pair a s) -> x) -> x+ )+ -> \(x : *)+ -> \(S : forall (s : *) -> s -> (s -> Pair b s) -> x)+ -> st+ x+ ( \(s : *)+ -> \(seed : s)+ -> \(step : s -> Pair a s)+ -> S+ s+ seed+ (\(seed : s) -> first a b s f (step seed))+ )+ )+)++-- id+(\(a : *) -> \(va : a) -> va)++-- (.)+( \(a : *)+-> \(b : *)+-> \(c : *)+-> \(f : b -> c)+-> \(g : a -> b)+-> \(va : a)+-> f (g va)+)++-- Pair+(\(a : *) -> \(b : *) -> forall (x : *) -> (a -> b -> x) -> x)++-- P+( \(a : *)+-> \(b : *)+-> \(va : a)+-> \(vb : b)+-> \(x : *)+-> \(P : a -> b -> x)+-> P va vb+)++-- first+( \(a : *)+-> \(b : *)+-> \(c : *)+-> \(f : a -> b)+-> \(p : forall (x : *) -> (a -> c -> x) -> x)+-> \(x : *)+-> \(Pair : b -> c -> x)+-> p x (\(va : a) -> \(vc : c) -> Pair (f va) vc)+)
+ test/src/example12.mt view
@@ -0,0 +1,177 @@+-- corecursive.mt++-- first :: (a -> b) -> (a, c) -> (b, c)+-- first f (va, vb) = (f va, vb) +-- +-- data Stream a = Cons (a, Stream a)+-- +-- map :: (a -> b) -> Stream a -> Stream b+-- map f (Cons (va, s)) = Cons (first f (va, map f s))+-- +-- -- exampleA = exampleB+-- +-- exampleA :: Stream a -> Stream a+-- exampleA = map id+-- +-- exampleB :: Stream a -> Stream a+-- exampleB = id+-- +-- -- exampleC = exampleD+-- +-- exampleC :: (b -> c) -> (a -> b) -> Stream a -> Stream c+-- exampleC f g = map (f . g)+-- +-- exampleD :: (b -> c) -> (a -> b) -> Stream a -> Stream c+-- exampleD f g = map f . map g++( \(id : forall (a : *) -> a -> a)+-> \( (.)+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (b -> c)+ -> (a -> b)+ -> (a -> c)+ )+-> \(Pair : * -> * -> *)+-> \(P : forall (a : *) -> forall (b : *) -> a -> b -> Pair a b)+-> \( first+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (a -> b)+ -> Pair a c+ -> Pair b c+ )++-> ( \(Stream : * -> *)+ -> \( map+ : forall (a : *)+ -> forall (b : *)+ -> (a -> b)+ -> Stream a+ -> Stream b+ )++ -- exampleA = exampleB+ -> ( \(exampleA : forall (a : *) -> Stream a -> Stream a)+ -> \(exampleB : forall (a : *) -> Stream a -> Stream a)++ -- exampleC = exampleD+ -> \( exampleC+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (b -> c)+ -> (a -> b)+ -> Stream a+ -> Stream c+ )++ -> \( exampleD+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (b -> c)+ -> (a -> b)+ -> Stream a+ -> Stream c+ )++ -- Uncomment the example you want to test+-- -> exampleA+-- -> exampleB+ -> exampleC+-- -> exampleD+ )++ -- exampleA+ (\(a : *) -> map a a (id a))+ + -- exampleB+ (\(a : *) -> id (Stream a))++ -- exampleC+ ( \(a : *)+ -> \(b : *)+ -> \(c : *)+ -> \(f : b -> c)+ -> \(g : a -> b)+ -> map a c ((.) a b c f g)+ )++ -- exampleD+ ( \(a : *)+ -> \(b : *)+ -> \(c : *)+ -> \(f : b -> c)+ -> \(g : a -> b)+ -> (.) (Stream a) (Stream b) (Stream c) (map b c f) (map a b g)+ )+ )++ -- Stream+ ( \(a : *)+ -> forall (x : *)+ -> (forall (s : *) -> s -> (s -> Pair a s) -> x)+ -> x+ )++ -- map+ ( \(a : *)+ -> \(b : *)+ -> \(f : a -> b)+ -> \( st+ : forall (x : *) -> (forall (s : *) -> s -> (s -> Pair a s) -> x) -> x+ )+ -> \(x : *)+ -> \(S : forall (s : *) -> s -> (s -> Pair b s) -> x)+ -> st+ x+ ( \(s : *)+ -> \(seed : s)+ -> \(step : s -> Pair a s)+ -> S+ s+ seed+ (\(seed : s) -> first a b s f (step seed))+ )+ )+)++-- id+(\(a : *) -> \(va : a) -> va)++-- (.)+( \(a : *)+-> \(b : *)+-> \(c : *)+-> \(f : b -> c)+-> \(g : a -> b)+-> \(va : a)+-> f (g va)+)++-- Pair+(\(a : *) -> \(b : *) -> forall (x : *) -> (a -> b -> x) -> x)++-- P+( \(a : *)+-> \(b : *)+-> \(va : a)+-> \(vb : b)+-> \(x : *)+-> \(P : a -> b -> x)+-> P va vb+)++-- first+( \(a : *)+-> \(b : *)+-> \(c : *)+-> \(f : a -> b)+-> \(p : forall (x : *) -> (a -> c -> x) -> x)+-> \(x : *)+-> \(Pair : b -> c -> x)+-> p x (\(va : a) -> \(vc : c) -> Pair (f va) vc)+)
+ test/src/example13.mt view
@@ -0,0 +1,177 @@+-- corecursive.mt++-- first :: (a -> b) -> (a, c) -> (b, c)+-- first f (va, vb) = (f va, vb) +-- +-- data Stream a = Cons (a, Stream a)+-- +-- map :: (a -> b) -> Stream a -> Stream b+-- map f (Cons (va, s)) = Cons (first f (va, map f s))+-- +-- -- exampleA = exampleB+-- +-- exampleA :: Stream a -> Stream a+-- exampleA = map id+-- +-- exampleB :: Stream a -> Stream a+-- exampleB = id+-- +-- -- exampleC = exampleD+-- +-- exampleC :: (b -> c) -> (a -> b) -> Stream a -> Stream c+-- exampleC f g = map (f . g)+-- +-- exampleD :: (b -> c) -> (a -> b) -> Stream a -> Stream c+-- exampleD f g = map f . map g++( \(id : forall (a : *) -> a -> a)+-> \( (.)+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (b -> c)+ -> (a -> b)+ -> (a -> c)+ )+-> \(Pair : * -> * -> *)+-> \(P : forall (a : *) -> forall (b : *) -> a -> b -> Pair a b)+-> \( first+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (a -> b)+ -> Pair a c+ -> Pair b c+ )++-> ( \(Stream : * -> *)+ -> \( map+ : forall (a : *)+ -> forall (b : *)+ -> (a -> b)+ -> Stream a+ -> Stream b+ )++ -- exampleA = exampleB+ -> ( \(exampleA : forall (a : *) -> Stream a -> Stream a)+ -> \(exampleB : forall (a : *) -> Stream a -> Stream a)++ -- exampleC = exampleD+ -> \( exampleC+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (b -> c)+ -> (a -> b)+ -> Stream a+ -> Stream c+ )++ -> \( exampleD+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (b -> c)+ -> (a -> b)+ -> Stream a+ -> Stream c+ )++ -- Uncomment the example you want to test+-- -> exampleA+-- -> exampleB+-- -> exampleC+ -> exampleD+ )++ -- exampleA+ (\(a : *) -> map a a (id a))+ + -- exampleB+ (\(a : *) -> id (Stream a))++ -- exampleC+ ( \(a : *)+ -> \(b : *)+ -> \(c : *)+ -> \(f : b -> c)+ -> \(g : a -> b)+ -> map a c ((.) a b c f g)+ )++ -- exampleD+ ( \(a : *)+ -> \(b : *)+ -> \(c : *)+ -> \(f : b -> c)+ -> \(g : a -> b)+ -> (.) (Stream a) (Stream b) (Stream c) (map b c f) (map a b g)+ )+ )++ -- Stream+ ( \(a : *)+ -> forall (x : *)+ -> (forall (s : *) -> s -> (s -> Pair a s) -> x)+ -> x+ )++ -- map+ ( \(a : *)+ -> \(b : *)+ -> \(f : a -> b)+ -> \( st+ : forall (x : *) -> (forall (s : *) -> s -> (s -> Pair a s) -> x) -> x+ )+ -> \(x : *)+ -> \(S : forall (s : *) -> s -> (s -> Pair b s) -> x)+ -> st+ x+ ( \(s : *)+ -> \(seed : s)+ -> \(step : s -> Pair a s)+ -> S+ s+ seed+ (\(seed : s) -> first a b s f (step seed))+ )+ )+)++-- id+(\(a : *) -> \(va : a) -> va)++-- (.)+( \(a : *)+-> \(b : *)+-> \(c : *)+-> \(f : b -> c)+-> \(g : a -> b)+-> \(va : a)+-> f (g va)+)++-- Pair+(\(a : *) -> \(b : *) -> forall (x : *) -> (a -> b -> x) -> x)++-- P+( \(a : *)+-> \(b : *)+-> \(va : a)+-> \(vb : b)+-> \(x : *)+-> \(P : a -> b -> x)+-> P va vb+)++-- first+( \(a : *)+-> \(b : *)+-> \(c : *)+-> \(f : a -> b)+-> \(p : forall (x : *) -> (a -> c -> x) -> x)+-> \(x : *)+-> \(Pair : b -> c -> x)+-> p x (\(va : a) -> \(vc : c) -> Pair (f va) vc)+)
+ test/src/example14.mt view
@@ -0,0 +1,272 @@+-- recursive.mt++-- The Haskell code we will translate to Morte:+--+-- import Prelude hiding (+-- (+), (*), IO, putStrLn, getLine, (>>=), (>>), return )+-- +-- -- Simple prelude+--+-- data Nat = Succ Nat | Zero+--+-- zero :: Nat+-- zero = Zero+--+-- one :: Nat+-- one = Succ Zero+--+-- (+) :: Nat -> Nat -> Nat+-- Zero + n = n+-- Succ m + n = m + Succ n+--+-- (*) :: Nat -> Nat -> Nat+-- Zero * n = Zero+-- Succ m * n = n + (m * n)+--+-- foldNat :: Nat -> (a -> a) -> a -> a+-- foldNat Zero f x = x+-- foldNat (Succ m) f x = f (foldNat m f x)+--+-- data IO r = PutStrLn String (IO r) | GetLine (String -> IO r) | Return r+--+-- putStrLn :: String -> IO U+-- putStrLn str = PutStrLn str (Return Unit)+--+-- getLine :: IO String+-- getLine = GetLine Return+--+-- return :: a -> IO a+-- return = Return+--+-- (>>=) :: IO a -> (a -> IO b) -> IO b+-- PutStrLn str io >>= f = PutStrLn str (io >>= f)+-- GetLine k >>= f = GetLine (\str -> k str >>= f)+-- Return r >>= f = f r+--+-- -- Derived functions+--+-- (>>) :: IO U -> IO U -> IO U+-- m >> n = m >>= \_ -> n+--+-- two :: Nat+-- two = one + one+--+-- three :: Nat+-- three = one + one + one+--+-- four :: Nat+-- four = one + one + one + one+--+-- five :: Nat+-- five = one + one + one + one + one+--+-- six :: Nat+-- six = one + one + one + one + one + one+--+-- seven :: Nat+-- seven = one + one + one + one + one + one + one+--+-- eight :: Nat+-- eight = one + one + one + one + one + one + one + one+--+-- nine :: Nat+-- nine = one + one + one + one + one + one + one + one + one+--+-- ten :: Nat+-- ten = one + one + one + one + one + one + one + one + one + one+--+-- replicateM_ :: Nat -> IO U -> IO U+-- replicateM_ n io = foldNat n (io >>) (return Unit)+--+-- ninetynine :: Nat+-- ninetynine = nine * ten + nine+--+-- main_ :: IO U+-- main_ = getLine >>= putStrLn++-- "Free" variables+( \(String : * )+-> \(U : *)+-> \(Unit : U)++ -- Simple prelude+-> ( \(Nat : *)+ -> \(zero : Nat)+ -> \(one : Nat)+ -> \((+) : Nat -> Nat -> Nat)+ -> \((*) : Nat -> Nat -> Nat)+ -> \(foldNat : Nat -> forall (a : *) -> (a -> a) -> a -> a)+ -> \(IO : * -> *)+ -> \(return : forall (a : *) -> a -> IO a)+ -> \((>>=)+ : forall (a : *)+ -> forall (b : *)+ -> IO a+ -> (a -> IO b)+ -> IO b+ )+ -> \(putStrLn : String -> IO U)+ -> \(getLine : IO String)++ -- Derived functions+ -> ( \((>>) : IO U -> IO U -> IO U)+ -> \(two : Nat)+ -> \(three : Nat)+ -> \(four : Nat)+ -> \(five : Nat)+ -> \(six : Nat)+ -> \(seven : Nat)+ -> \(eight : Nat)+ -> \(nine : Nat)+ -> \(ten : Nat)+ -> ( \(replicateM_ : Nat -> IO U -> IO U)+ -> \(ninetynine : Nat)+ -> replicateM_ ninetynine ((>>=) String U getLine putStrLn)+ )++ -- replicateM_+ ( \(n : Nat)+ -> \(io : IO U)+ -> foldNat n (IO U) ((>>) io) (return U Unit)+ )++ -- ninetynine+ ((+) ((*) nine ten) nine)+ )++ -- (>>)+ ( \(m : IO U)+ -> \(n : IO U)+ -> (>>=) U U m (\(_ : U) -> n)+ )++ -- two+ ((+) one one)++ -- three+ ((+) one ((+) one one))++ -- four+ ((+) one ((+) one ((+) one one)))++ -- five+ ((+) one ((+) one ((+) one ((+) one one))))++ -- six+ ((+) one ((+) one ((+) one ((+) one ((+) one one)))))++ -- seven+ ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one))))))++ -- eight+ ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one)))))))+ -- nine+ ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one))))))))++ -- ten+ ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one)))))))))+ )++ -- Nat+ ( forall (a : *)+ -> (a -> a)+ -> a+ -> a+ )++ -- zero+ ( \(a : *)+ -> \(Succ : a -> a)+ -> \(Zero : a)+ -> Zero+ )++ -- one+ ( \(a : *)+ -> \(Succ : a -> a)+ -> \(Zero : a)+ -> Succ Zero+ )++ -- (+)+ ( \(m : forall (a : *) -> (a -> a) -> a -> a)+ -> \(n : forall (a : *) -> (a -> a) -> a -> a)+ -> \(a : *)+ -> \(Succ : a -> a)+ -> \(Zero : a)+ -> m a Succ (n a Succ Zero)+ )++ -- (*)+ ( \(m : forall (a : *) -> (a -> a) -> a -> a)+ -> \(n : forall (a : *) -> (a -> a) -> a -> a)+ -> \(a : *)+ -> \(Succ : a -> a)+ -> \(Zero : a)+ -> m a (n a Succ) Zero+ )++ -- foldNat+ ( \(n : forall (a : *) -> (a -> a) -> a -> a)+ -> n+ )++ -- IO+ ( \(r : *)+ -> forall (x : *)+ -> (String -> x -> x)+ -> ((String -> x) -> x)+ -> (r -> x)+ -> x+ )++ -- return+ ( \(a : *)+ -> \(va : a)+ -> \(x : *)+ -> \(PutStrLn : String -> x -> x)+ -> \(GetLine : (String -> x) -> x)+ -> \(Return : a -> x)+ -> Return va+ )++ -- (>>=)+ ( \(a : *)+ -> \(b : *)+ -> \(m : forall (x : *)+ -> (String -> x -> x)+ -> ((String -> x) -> x)+ -> (a -> x)+ -> x+ )+ -> \(f : a+ -> forall (x : *)+ -> (String -> x -> x)+ -> ((String -> x) -> x)+ -> (b -> x)+ -> x+ )+ -> \(x : *)+ -> \(PutStrLn : String -> x -> x)+ -> \(GetLine : (String -> x) -> x)+ -> \(Return : b -> x)+ -> m x PutStrLn GetLine (\(va : a) -> f va x PutStrLn GetLine Return)+ )++ -- putStrLn+ ( \(str : String)+ -> \(x : *)+ -> \(PutStrLn : String -> x -> x )+ -> \(GetLine : (String -> x) -> x)+ -> \(Return : U -> x)+ -> PutStrLn str (Return Unit)+ )++ -- getLine+ ( \(x : *)+ -> \(PutStrLn : String -> x -> x )+ -> \(GetLine : (String -> x) -> x)+ -> \(Return : String -> x)+ -> GetLine Return+ )+)
+ test/src/example15.mt view
@@ -0,0 +1,148 @@+-- corecursive.mt++-- data IOF r s = PutStrLn String s | GetLine (String -> s) | Return r+--+-- data IO r = forall s . MkIO s (s -> IOF r s)+--+-- main = MkIO Nothing (maybe (\str -> PutStrLn str Nothing) (GetLine Just))++( \(String : *)+-> ( \(Maybe : * -> *)+ -> \(Just : forall (a : *) -> a -> Maybe a)+ -> \(Nothing : forall (a : *) -> Maybe a)+ -> \( maybe+ : forall (a : *) -> Maybe a -> forall (x : *) -> (a -> x) -> x -> x+ )+ -> \(IOF : * -> * -> *)+ -> \( PutStrLn+ : forall (r : *)+ -> forall (s : *)+ -> String+ -> s+ -> IOF r s+ )+ -> \( GetLine+ : forall (r : *)+ -> forall (s : *)+ -> (String -> s)+ -> IOF r s+ )+ -> \( Return+ : forall (r : *)+ -> forall (s : *)+ -> r+ -> IOF r s+ )+ -> ( \(IO : * -> *)+ -> \( MkIO+ : forall (r : *) -> forall (s : *) -> s -> (s -> IOF r s) -> IO r+ )+ -> ( \(main : forall (r : *) -> IO r)+ -> main+ )++ -- main+ ( \(r : *)+ -> MkIO+ r+ (Maybe String)+ (Nothing String)+ ( \(m : Maybe String)+ -> maybe+ String+ m+ (IOF r (Maybe String))+ (\(str : String) ->+ PutStrLn r (Maybe String) str (Nothing String)+ )+ (GetLine r (Maybe String) (Just String))+ )+ )+ )++ -- IO+ ( \(r : *)+ -> forall (x : *)+ -> (forall (s : *) -> s -> (s -> IOF r s) -> x)+ -> x+ )++ -- MkIO+ ( \(r : *)+ -> \(s : *)+ -> \(seed : s)+ -> \(step : s -> IOF r s)+ -> \(x : *)+ -> \(k : forall (s : *) -> s -> (s -> IOF r s) -> x)+ -> k s seed step+ )+ )++ -- Maybe+ (\(a : *) -> forall (x : *) -> (a -> x) -> x -> x)++ -- Just+ ( \(a : *)+ -> \(va : a)+ -> \(x : *)+ -> \(Just : a -> x)+ -> \(Nothing : x)+ -> Just va+ )++ -- Nothing+ ( \(a : *)+ -> \(x : *)+ -> \(Just : a -> x)+ -> \(Nothing : x)+ -> Nothing+ )++ -- maybe+ (\(a : *) -> \(m : forall (x : *) -> (a -> x) -> x -> x) -> m)++ -- IOF+ ( \(r : *)+ -> \(s : *)+ -> forall (x : *)+ -> (String -> s -> x)+ -> ((String -> s) -> x)+ -> (r -> x)+ -> x+ )++ -- PutStrLn+ ( \(r : *)+ -> \(s : *)+ -> \(str : String)+ -> \(vs : s)+ -> \(x : *)+ -> \(PutStrLn : String -> s -> x)+ -> \(GetLine : (String -> s) -> x)+ -> \(Return : r -> x)+ -> PutStrLn str vs+ )++ -- GetLine+ ( \(r : *)+ -> \(s : *)+ -> \(k : String -> s)+ -> \(x : *)+ -> \(PutStrLn : String -> s -> x)+ -> \(GetLine : (String -> s) -> x)+ -> \(Return : r -> x)+ -> GetLine k+ )++ -- Return+ ( \(r : *)+ -> \(s : *)+ -> \(vr : r)+ -> \(x : *)+ -> \(PutStrLn : String -> s -> x)+ -> \(GetLine : (String -> s) -> x)+ -> \(Return : r -> x)+ -> Return vr+ )++)
+ test/src/example2.mt view
@@ -0,0 +1,8 @@+-- id2.mt++( \(id : forall (a : *) -> a -> a)+-> id (forall (a : *) -> a -> a) id -- Apply the identity function to itself+)++-- id+(\(a : *) -> \(x : a) -> x)
+ test/src/example3.mt view
@@ -0,0 +1,27 @@+-- bool.mt++-- let data Bool = True | False+--+-- in if True then One else Zero++( \(Bool : *)+-> \(True : Bool)+-> \(False : Bool)+-> \(if : Bool -> forall (r : *) -> r -> r -> r)+-> \(Int : *)+-> \(Zero : Int)+ -> \(One : Int)+-> if True Int One Zero+)++-- Bool+(forall (r : *) -> r -> r -> r)++-- True+(\(r : *) -> \(x : r) -> \(_ : r) -> x)++-- False+(\(r : *) -> \(_ : r) -> \(x : r) -> x)++-- if+(\(b : forall (r : *) -> r -> r -> r) -> b)
+ test/src/example4.mt view
@@ -0,0 +1,39 @@+-- pair.mt++-- let Pair a b = P a b+--+-- in \x y -> snd (P x y)++( \(Pair : * -> * -> *)+-> \(P : forall (a : *) -> forall (b : *) -> a -> b -> Pair a b)+-> \(fst : forall (a : *) -> forall (b : *) -> Pair a b -> a)+-> \(snd : forall (a : *) -> forall (b : *) -> Pair a b -> b)+-> \(a : *) -> \(x : a) -> \(y : a) -> snd a a (P a a x y)+)++-- Pair+(\(a : *) -> \(b : *) -> forall (r : *) -> (a -> b -> r) -> r)++-- P+( \(a : *)+-> \(b : *)+-> \(va : a)+-> \(vb : b)+-> \(r : *)+-> \(Pair : a -> b -> r)+-> Pair va vb+)++-- fst+( \(a : *)+-> \(b : *)+-> \(p : forall (r : *) -> (a -> b -> r) -> r)+-> p a (\(x : a) -> \(_ : b) -> x)+)++-- snd+( \(a : *)+-> \(b : *)+-> \(p : forall (r : *) -> (a -> b -> r) -> r)+-> p b (\(_ : a) -> \(x : b) -> x)+)
+ test/src/example5.mt view
@@ -0,0 +1,79 @@+-- all.mt++-- let data Bool = True | False+--+-- data List a = Cons a (List a) | Nil+--+-- in let (&&) :: Bool -> Bool -> Bool+-- (&&) b1 b2 = if b1 then b2 else False+--+-- bools :: List Bool+-- bools = Cons True (Cons True (Cons True Nil))+--+-- in foldr bools (&&) True++( \(Bool : *)+-> \(True : Bool)+-> \(False : Bool)+-> \(if : Bool -> forall (r : *) -> r -> r -> r)+-> \(List : * -> *)+-> \(Cons : forall (a : *) -> a -> List a -> List a)+-> \(Nil : forall (a : *) -> List a)+-> \( foldr+ : forall (a : *) -> List a -> forall (r : *) -> (a -> r -> r) -> r -> r+ )+-> ( \((&&) : Bool -> Bool -> Bool)+ -> \(bools : List Bool)+ -> foldr Bool bools Bool (&&) True+ )++ -- (&&)+ (\(x : Bool) -> \(y : Bool) -> if x Bool y False)++ -- bools+ (Cons Bool True (Cons Bool True (Cons Bool True (Nil Bool))))+)++-- Bool+(forall (r : *) -> r -> r -> r)++-- True+(\(r : *) -> \(x : r) -> \(_ : r) -> x)++-- False+(\(r : *) -> \(_ : r) -> \(x : r) -> x)++-- if+(\(b : forall (r : *) -> r -> r -> r) -> b)++-- List+( \(a : *)+-> forall (list : *)+-> (a -> list -> list) -- Cons+-> list -- Nil+-> list+)++-- Cons+( \(a : *)+-> \(va : a)+-> \(vas : forall (list : *) -> (a -> list -> list) -> list -> list)+-> \(list : *)+-> \(Cons : a -> list -> list)+-> \(Nil : list)+-> Cons va (vas list Cons Nil)+)++-- Nil+( \(a : *)+-> \(list : *)+-> \(Cons : a -> list -> list)+-> \(Nil : list)+-> Nil+)++-- foldr+( \(a : *)+-> \(vas : forall (list : *) -> (a -> list -> list) -> list -> list)+-> vas+)
+ test/src/example6.mt view
@@ -0,0 +1,24 @@+-- mapid1.mt++( \(List : * -> *)+-> \(map : forall (a : *) -> forall (b : *) -> (a -> b) -> List a -> List b)+-> \(id : forall (a : *) -> a -> a)+ -> \(a : *) -> map a a (id a)+)++-- List+(\(a : *) -> forall (x : *) -> (a -> x -> x) -> x -> x)++-- map+( \(a : *)+-> \(b : *)+-> \(f : a -> b)+-> \(l : forall (x : *) -> (a -> x -> x) -> x -> x)+-> \(x : *)+-> \(Cons : b -> x -> x)+-> \(Nil: x)+-> l x (\(va : a) -> \(vx : x) -> Cons (f va) vx) Nil+)++-- id+(\(a : *) -> \(va : a) -> va)
+ test/src/example7.mt view
@@ -0,0 +1,24 @@+-- mapid2.mt++( \(List : * -> *)+-> \(map : forall (a : *) -> forall (b : *) -> (a -> b) -> List a -> List b)+-> \(id : forall (a : *) -> a -> a)+ -> \(a : *) -> id (List a)+)++-- List+(\(a : *) -> forall (x : *) -> (a -> x -> x) -> x -> x)++-- map+( \(a : *)+-> \(b : *)+-> \(f : a -> b)+-> \(l : forall (x : *) -> (a -> x -> x) -> x -> x)+-> \(x : *)+-> \(Cons : b -> x -> x)+-> \(Nil: x)+-> l x (\(va : a) -> \(vx : x) -> Cons (f va) vx) Nil+)++-- id+(\(a : *) -> \(va : a) -> va)
+ test/src/example8.mt view
@@ -0,0 +1,45 @@+-- mapcomp1.mt++-- map (f . g)++( \(List : * -> *)+-> \(map : forall (a : *) -> forall (b : *) -> (a -> b) -> List a -> List b)+-> \( (.)+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (b -> c)+ -> (a -> b)+ -> (a -> c)+ )+ -> \(a : *)+ -> \(b : *)+ -> \(c : *)+ -> \(f : b -> c)+ -> \(g : a -> b)+ -> map a c ((.) a b c f g)+)++-- List+(\(a : *) -> forall (x : *) -> (a -> x -> x) -> x -> x)++-- map+( \(a : *)+-> \(b : *)+-> \(f : a -> b)+-> \(l : forall (x : *) -> (a -> x -> x) -> x -> x)+-> \(x : *)+-> \(Cons : b -> x -> x)+-> \(Nil: x)+-> l x (\(va : a) -> \(vx : x) -> Cons (f va) vx) Nil+)++-- (.)+( \(a : *)+-> \(b : *)+-> \(c : *)+-> \(f : b -> c)+-> \(g : a -> b)+-> \(va : a)+-> f (g va)+)
+ test/src/example9.mt view
@@ -0,0 +1,43 @@+-- mapcomp2.mt++( \(List : * -> *)+-> \(map : forall (a : *) -> forall (b : *) -> (a -> b) -> List a -> List b)+-> \( (.)+ : forall (a : *)+ -> forall (b : *)+ -> forall (c : *)+ -> (b -> c)+ -> (a -> b)+ -> (a -> c)+ )+ -> \(a : *)+ -> \(b : *)+ -> \(c : *)+ -> \(f : b -> c)+ -> \(g : a -> b)+ -> (.) (List a) (List b) (List c) (map b c f) (map a b g)+)++-- List+(\(a : *) -> forall (x : *) -> (a -> x -> x) -> x -> x)++-- map+( \(a : *)+-> \(b : *)+-> \(f : a -> b)+-> \(l : forall (x : *) -> (a -> x -> x) -> x -> x)+-> \(x : *)+-> \(Cons : b -> x -> x)+-> \(Nil: x)+-> l x (\(va : a) -> \(vx : x) -> Cons (f va) vx) Nil+)++-- (.)+( \(a : *)+-> \(b : *)+-> \(c : *)+-> \(f : b -> c)+-> \(g : a -> b)+-> \(va : a)+-> f (g va)+)