packages feed

wasm (empty) → 1.0.0

raw patch · 17 files changed

+15523/−0 lines, 17 filesdep +arraydep +basedep +base64-bytestringsetup-changed

Dependencies added: array, base, base64-bytestring, bytestring, cereal, containers, deepseq, directory, filepath, ieee754, mtl, optparse-applicative, tasty, tasty-hunit, text, transformers, utf8-string, vector, wasm

Files

+ LICENSE view
@@ -0,0 +1,22 @@+Copyright (c) 2018 Ilya Rezvov++Permission is hereby granted, free of charge, to any person obtaining a copy+of this software and associated documentation files (the "Software"), to deal+in the Software without restriction, including without limitation the rights+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+copies of the Software, and to permit persons to whom the Software is+furnished to do so, subject to the following conditions:++The above copyright notice and this permission notice shall be included in all+copies or substantial portions of the Software.++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE+SOFTWARE.++The project also includes test cases from WebAssembly Test Suite without any+modifications. WebAssembly Test Suite is distributed under Apache License 2.0.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ dist/build/Language/Wasm/Lexer.hs view
@@ -0,0 +1,1413 @@+{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-}+{-# LANGUAGE CPP,MagicHash #-}+{-# LINE 1 "src/Language/Wasm/Lexer.x" #-}++{-# LANGUAGE FlexibleContexts #-}++module Language.Wasm.Lexer (+    Lexeme(..),+    Token(..),+    AlexPosn(..),+    scanner,+    asFloat,+    asDouble+) where++import qualified Data.ByteString.Lazy as LBS+import qualified Data.Char as Char+import qualified Data.ByteString.Lazy.UTF8 as LBSUtf8+import Control.Applicative ((<$>))+import Control.Monad (when)+import Numeric.IEEE (infinity, nan)+import Language.Wasm.FloatUtils (makeNaN, doubleToFloat)+import Data.Word (Word8)+import Data.List (isPrefixOf)+import Text.Read (readEither)+++#if __GLASGOW_HASKELL__ >= 603+#include "ghcconfig.h"+#elif defined(__GLASGOW_HASKELL__)+#include "config.h"+#endif+#if __GLASGOW_HASKELL__ >= 503+import Data.Array+import Data.Array.Base (unsafeAt)+#else+import Array+#endif+#if __GLASGOW_HASKELL__ >= 503+import GHC.Exts+#else+import GlaExts+#endif+{-# LINE 1 "templates/wrappers.hs" #-}++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- -----------------------------------------------------------------------------+-- Alex wrapper code.+--+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use+-- it for any purpose whatsoever.+++import Control.Applicative as App (Applicative (..))+import qualified Control.Monad (ap)+++import Data.Word (Word8)+++import Data.Int (Int64)+import qualified Data.Char+import qualified Data.ByteString.Lazy     as ByteString+import qualified Data.ByteString.Internal as ByteString (w2c)++++type Byte = Word8++-- -----------------------------------------------------------------------------+-- The input type+++++type AlexInput = (AlexPosn,     -- current position,+                  Char,         -- previous char+                  ByteString.ByteString,        -- current input string+                  Int64)           -- bytes consumed so far++ignorePendingBytes :: AlexInput -> AlexInput+ignorePendingBytes i = i   -- no pending bytes when lexing bytestrings++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (_,c,_,_) = c++alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)+alexGetByte (p,_,cs,n) =+    case ByteString.uncons cs of+        Nothing -> Nothing+        Just (b, cs') ->+            let c   = ByteString.w2c b+                p'  = alexMove p c+                n'  = n+1+            in p' `seq` cs' `seq` n' `seq` Just (b, (p', c, cs',n'))+++++++-- -----------------------------------------------------------------------------+-- Token positions++-- `Posn' records the location of a token in the input text.  It has three+-- fields: the address (number of chacaters preceding the token), line number+-- and column of a token within the file. `start_pos' gives the position of the+-- start of the file and `eof_pos' a standard encoding for the end of file.+-- `move_pos' calculates the new position after traversing a given character,+-- assuming the usual eight character tab stops.+++data AlexPosn = AlexPn !Int !Int !Int+        deriving (Eq,Show)++alexStartPos :: AlexPosn+alexStartPos = AlexPn 0 1 1++alexMove :: AlexPosn -> Char -> AlexPosn+alexMove (AlexPn a l c) '\t' = AlexPn (a+1)  l     (((c+alex_tab_size-1) `div` alex_tab_size)*alex_tab_size+1)+alexMove (AlexPn a l _) '\n' = AlexPn (a+1) (l+1)   1+alexMove (AlexPn a l c) _    = AlexPn (a+1)  l     (c+1)+++-- -----------------------------------------------------------------------------+-- Default monad+++++-- -----------------------------------------------------------------------------+-- Monad (with ByteString input)+++data AlexState = AlexState {+        alex_pos :: !AlexPosn,  -- position at current input location+        alex_bpos:: !Int64,     -- bytes consumed so far+        alex_inp :: ByteString.ByteString,      -- the current input+        alex_chr :: !Char,      -- the character before the input+        alex_scd :: !Int        -- the current startcode++      , alex_ust :: AlexUserState -- AlexUserState will be defined in the user program++    }++-- Compile with -funbox-strict-fields for best results!++runAlex :: ByteString.ByteString -> Alex a -> Either String a+runAlex input__ (Alex f)+   = case f (AlexState {alex_pos = alexStartPos,+                        alex_bpos = 0,+                        alex_inp = input__,+                        alex_chr = '\n',++                        alex_ust = alexInitUserState,++                        alex_scd = 0}) of Left msg -> Left msg+                                          Right ( _, a ) -> Right a++newtype Alex a = Alex { unAlex :: AlexState -> Either String (AlexState, a) }++instance Functor Alex where+  fmap f m = do x <- m; return (f x)++instance Applicative Alex where+  pure a = Alex $ \s -> Right (s,a)+  (<*>) = Control.Monad.ap++instance Monad Alex where+  m >>= k  = Alex $ \s -> case unAlex m s of+                                Left msg -> Left msg+                                Right (s',a) -> unAlex (k a) s'+  return = App.pure++alexGetInput :: Alex AlexInput+alexGetInput+ = Alex $ \s@AlexState{alex_pos=pos,alex_bpos=bpos,alex_chr=c,alex_inp=inp__} ->+        Right (s, (pos,c,inp__,bpos))++alexSetInput :: AlexInput -> Alex ()+alexSetInput (pos,c,inp__,bpos)+ = Alex $ \s -> case s{alex_pos=pos,+                       alex_bpos=bpos,+                       alex_chr=c,+                       alex_inp=inp__} of+                  state__@(AlexState{}) -> Right (state__, ())++alexError :: String -> Alex a+alexError message = Alex $ const $ Left message++alexGetStartCode :: Alex Int+alexGetStartCode = Alex $ \s@AlexState{alex_scd=sc} -> Right (s, sc)++alexSetStartCode :: Int -> Alex ()+alexSetStartCode sc = Alex $ \s -> Right (s{alex_scd=sc}, ())++alexMonadScan = do+  inp__@(_,_,_,n) <- alexGetInput+  sc <- alexGetStartCode+  case alexScan inp__ sc of+    AlexEOF -> alexEOF+    AlexError ((AlexPn _ line column),_,_,_) -> alexError $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)+    AlexSkip  inp__' _len -> do+        alexSetInput inp__'+        alexMonadScan+    AlexToken inp__'@(_,_,_,n') _ action -> do+        alexSetInput inp__'+        action (ignorePendingBytes inp__) len+      where+        len = n'-n++-- -----------------------------------------------------------------------------+-- Useful token actions++type AlexAction result = AlexInput -> Int64 -> Alex result++-- just ignore this token and scan another one+-- skip :: AlexAction result+skip _input _len = alexMonadScan++-- ignore this token, but set the start code to a new value+-- begin :: Int -> AlexAction result+begin code _input _len = do alexSetStartCode code; alexMonadScan++-- perform an action for this token, and set the start code to a new value+andBegin :: AlexAction result -> Int -> AlexAction result+(action `andBegin` code) input__ len = do+  alexSetStartCode code+  action input__ len++token :: (AlexInput -> Int64 -> token) -> AlexAction token+token t input__ len = return (t input__ len)++++-- -----------------------------------------------------------------------------+-- Basic wrapper+++++-- -----------------------------------------------------------------------------+-- Basic wrapper, ByteString version+++++++-- -----------------------------------------------------------------------------+-- Posn wrapper++-- Adds text positions to the basic model.+++++-- -----------------------------------------------------------------------------+-- Posn wrapper, ByteString version+++++-- -----------------------------------------------------------------------------+-- GScan wrapper++-- For compatibility with previous versions of Alex, and because we can.+++alex_tab_size :: Int+alex_tab_size = 8+alex_base :: AlexAddr+alex_base = AlexA#+  "\xf8\xff\xff\xff\x5b\x00\x00\x00\x51\x01\x00\x00\x47\x00\x00\x00\xc8\xff\xff\xff\xd1\x01\x00\x00\x51\x02\x00\x00\xd1\x02\x00\x00\x51\x03\x00\x00\xd1\x03\x00\x00\x51\x04\x00\x00\x00\x00\x00\x00\xc2\x04\x00\x00\x00\x00\x00\x00\x33\x05\x00\x00\x00\x00\x00\x00\xa4\x05\x00\x00\x00\x00\x00\x00\xe5\x05\x00\x00\x7c\xff\xff\xff\x00\x00\x00\x00\x26\x06\x00\x00\x2c\x01\x00\x00\x00\x00\x00\x00\x67\x06\x00\x00\x7e\xff\xff\xff\x67\x07\x00\x00\x27\x07\x00\x00\x00\x00\x00\x00\x7f\xff\xff\xff\x72\xff\xff\xff\x27\x08\x00\x00\xe7\x07\x00\x00\x00\x00\x00\x00\x44\x01\x00\x00\xe7\x08\x00\x00\xa7\x08\x00\x00\x00\x00\x00\x00\x73\xff\xff\xff\x9e\x09\x00\x00\x74\xff\xff\xff\x00\x00\x00\x00\x7d\x0a\x00\x00\xd9\x0a\x00\x00\x37\x0b\x00\x00\x93\x0b\x00\x00\xf1\x0b\x00\x00\x4d\x0c\x00\x00\xab\x0c\x00\x00\x07\x0d\x00\x00\x65\x0d\x00\x00\xc1\x0d\x00\x00\x1f\x0e\x00\x00\x7b\x0e\x00\x00\xd9\x0e\x00\x00\x35\x0f\x00\x00\x93\x0f\x00\x00\xef\x0f\x00\x00\x00\x00\x00\x00\x4d\x10\x00\x00\xd0\xff\xff\xff\x00\x00\x00\x00\xa9\x10\x00\x00\x07\x11\x00\x00\x63\x11\x00\x00\xc1\x11\x00\x00\x1d\x12\x00\x00\x7b\x12\x00\x00\xd7\x12\x00\x00\x35\x13\x00\x00\x91\x13\x00\x00\x00\x00\x00\x00\xd1\xff\xff\xff\xe4\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x09\x00\x00\xef\x13\x00\x00\x4b\x14\x00\x00\xa9\x14\x00\x00\x05\x15\x00\x00\x63\x15\x00\x00\xbf\x15\x00\x00\x1d\x16\x00\x00\x79\x16\x00\x00\xd7\x16\x00\x00\x33\x17\x00\x00\x91\x17\x00\x00\xed\x17\x00\x00\x4b\x18\x00\x00\xa7\x18\x00\x00\x05\x19\x00\x00\x61\x19\x00\x00\xbf\x19\x00\x00\x1b\x1a\x00\x00\x79\x1a\x00\x00\xd5\x1a\x00\x00\x33\x1b\x00\x00\x8f\x1b\x00\x00\xed\x1b\x00\x00"#++alex_table :: AlexAddr+alex_table = AlexA#+  "\x00\x00\x29\x00\x29\x00\x27\x00\x1e\x00\x29\x00\x26\x00\x28\x00\x5b\x00\x3b\x00\x33\x00\x47\x00\x47\x00\x4b\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x5b\x00\x4c\x00\x5b\x00\x58\x00\x5b\x00\x5b\x00\x5b\x00\x3c\x00\x3d\x00\x5b\x00\x69\x00\x00\x00\x68\x00\x5b\x00\x5b\x00\x3f\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x5b\x00\x04\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x35\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\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\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\x03\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\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\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x24\x00\x05\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x18\x00\x08\x00\x0f\x00\x0f\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x55\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x00\x00\x00\x00\x03\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\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x20\x00\x06\x00\x14\x00\x14\x00\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\x09\x00\x0d\x00\x0d\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x1f\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x1a\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x05\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x06\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x07\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x51\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\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1b\x00\x07\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x0b\x00\x0b\x00\x0c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x34\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x5b\x00\x33\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5c\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x1d\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5c\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x33\x00\x5b\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x13\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x38\x00\x33\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x00\x00\x33\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x6c\x00\x5b\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x33\x00\x5b\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1d\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x00\x00\x33\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x1d\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x13\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x39\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x13\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1d\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x36\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1d\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x37\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1d\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x38\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1d\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2f\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1d\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1d\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2a\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x00\x00\x33\x00\x3b\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x1d\x00\x00\x00\x3b\x00\x3b\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x3b\x00\x5b\x00\x3b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x1d\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x42\x00\x5b\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x63\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x67\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x63\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x19\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x42\x00\x5b\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x63\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x67\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x63\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x66\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x45\x00\x5b\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x61\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x66\x00\x5b\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x61\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x63\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x65\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x63\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x63\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x63\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x64\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x61\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x60\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x61\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x61\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x61\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x62\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x3b\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x13\x00\x00\x00\x3b\x00\x3b\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x3b\x00\x5b\x00\x3b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x6e\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x19\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x6d\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5f\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x6a\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x6b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x6c\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x62\x00\x00\x00\x62\x00\x5b\x00\x5b\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x64\x00\x00\x00\x64\x00\x5b\x00\x5b\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x3f\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5d\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5a\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x3f\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5e\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x59\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x31\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x30\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x2c\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x2b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++alex_check :: AlexAddr+alex_check = AlexA#+  "\xff\xff\x09\x00\x0a\x00\x3b\x00\x88\x00\x0d\x00\x88\x00\x88\x00\x96\x00\x96\x00\x96\x00\x3b\x00\x3b\x00\x29\x00\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x0a\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\x22\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\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\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\x09\x00\x0a\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++alex_deflt :: AlexAddr+alex_deflt = AlexA#+  "\xff\xff\x4a\x00\x56\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x11\x00\x11\x00\x14\x00\x14\x00\x17\x00\x17\x00\x1c\x00\x1c\x00\xff\xff\x21\x00\x21\x00\xff\xff\x25\x00\x25\x00\xff\xff\x27\x00\x27\x00\x27\x00\xff\xff\xff\xff\x56\x00\x56\x00\x56\x00\xff\xff\x4a\x00\x4a\x00\x4a\x00\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++alex_accept = listArray (0 :: Int, 110)+  [ 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 64+  , AlexAcc 63+  , AlexAcc 62+  , AlexAcc 61+  , AlexAcc 60+  , AlexAcc 59+  , AlexAcc 58+  , AlexAcc 57+  , AlexAcc 56+  , AlexAcc 55+  , AlexAcc 54+  , AlexAcc 53+  , AlexAcc 52+  , AlexAcc 51+  , AlexAcc 50+  , AlexAcc 49+  , AlexAccSkip+  , AlexAcc 48+  , AlexAcc 47+  , AlexAcc 46+  , AlexAcc 45+  , AlexAcc 44+  , AlexAcc 43+  , AlexAcc 42+  , AlexAcc 41+  , AlexAcc 40+  , AlexAcc 39+  , AlexAcc 38+  , AlexAcc 37+  , AlexAcc 36+  , AlexAccSkip+  , AlexAccSkip+  , AlexAccSkip+  , AlexAcc 35+  , AlexAcc 34+  , AlexAcc 33+  , AlexAcc 32+  , AlexAcc 31+  , AlexAcc 30+  , AlexAcc 29+  , AlexAcc 28+  , AlexAcc 27+  , AlexAcc 26+  , AlexAcc 25+  , AlexAccPred 24 (isAllowedStringChar)(AlexAccNone)+  , AlexAccPred 23 (isAllowedStringChar)(AlexAccNone)+  , AlexAcc 22+  , AlexAcc 21+  , AlexAcc 20+  , AlexAcc 19+  , AlexAcc 18+  , AlexAcc 17+  , AlexAcc 16+  , AlexAcc 15+  , AlexAcc 14+  , AlexAcc 13+  , AlexAcc 12+  , AlexAcc 11+  , AlexAcc 10+  , AlexAcc 9+  , AlexAcc 8+  , AlexAcc 7+  , AlexAcc 6+  , AlexAcc 5+  , AlexAcc 4+  , AlexAcc 3+  , AlexAcc 2+  , AlexAcc 1+  , AlexAcc 0+  ]++alex_actions = array (0 :: Int, 65)+  [ (64,alex_action_1)+  , (63,alex_action_2)+  , (62,alex_action_3)+  , (61,alex_action_4)+  , (60,alex_action_4)+  , (59,alex_action_5)+  , (58,alex_action_6)+  , (57,alex_action_7)+  , (56,alex_action_8)+  , (55,alex_action_8)+  , (54,alex_action_8)+  , (53,alex_action_8)+  , (52,alex_action_8)+  , (51,alex_action_8)+  , (50,alex_action_8)+  , (49,alex_action_8)+  , (48,alex_action_10)+  , (47,alex_action_11)+  , (46,alex_action_12)+  , (45,alex_action_13)+  , (44,alex_action_13)+  , (43,alex_action_14)+  , (42,alex_action_15)+  , (41,alex_action_15)+  , (40,alex_action_15)+  , (39,alex_action_16)+  , (38,alex_action_16)+  , (37,alex_action_16)+  , (36,alex_action_17)+  , (35,alex_action_19)+  , (34,alex_action_20)+  , (33,alex_action_21)+  , (32,alex_action_22)+  , (31,alex_action_23)+  , (30,alex_action_24)+  , (29,alex_action_25)+  , (28,alex_action_26)+  , (27,alex_action_27)+  , (26,alex_action_28)+  , (25,alex_action_29)+  , (24,alex_action_30)+  , (23,alex_action_30)+  , (22,alex_action_31)+  , (21,alex_action_31)+  , (20,alex_action_31)+  , (19,alex_action_31)+  , (18,alex_action_31)+  , (17,alex_action_31)+  , (16,alex_action_31)+  , (15,alex_action_31)+  , (14,alex_action_31)+  , (13,alex_action_31)+  , (12,alex_action_31)+  , (11,alex_action_31)+  , (10,alex_action_31)+  , (9,alex_action_31)+  , (8,alex_action_31)+  , (7,alex_action_31)+  , (6,alex_action_31)+  , (5,alex_action_31)+  , (4,alex_action_31)+  , (3,alex_action_31)+  , (2,alex_action_31)+  , (1,alex_action_31)+  , (0,alex_action_31)+  ]++{-# LINE 95 "src/Language/Wasm/Lexer.x" #-}+++{- Lexem Helpers -}++defaultStartCode :: Int+defaultStartCode = 0++-- inner string literal character predicate+isAllowedStringChar :: user -> AlexInput -> Int -> AlexInput -> Bool+isAllowedStringChar _userState (_pos, _rest, inp, _) _len _nextInp =+    let Just (char, _) = LBSUtf8.decode inp in+    let code = Char.ord char in+    code >= 0x20 && code /= 0x7f && char /= '"' && char /= '\\'++minusNaN, inf, minusInf :: Double+minusNaN = negate nan+inf = infinity+minusInf = -infinity++parseSign :: (Num a) => LBS.ByteString -> ((a -> a), Int64)+parseSign str =+    let Just (ch, _) = LBSUtf8.decode str in+    case ch of+        '-' -> (negate, 1)+        '+' -> (abs, 1)+        otherwise -> (abs, 0)++{-# SPECIALIZE parseSign :: LBS.ByteString -> ((Integer -> Integer), Int64) #-}+{-# SPECIALIZE parseSign :: LBS.ByteString -> ((Double -> Double), Int64) #-}++parseHexalSignedInt :: AlexAction Lexeme+parseHexalSignedInt = token $ \(pos, _, s, _) len -> +    let (sign, slen) = parseSign s in+    let num = readHexFromPrefix (len - 2 - slen) $ LBSUtf8.drop (2 + slen) s in+    Lexeme (Just pos) $ TIntLit $ sign num++parseNanSigned :: AlexAction Lexeme+parseNanSigned = token $ \(pos, _, s, _) len -> +    let (sign, slen) = parseSign s in+    let num = readHexFromPrefix (len - 6 - slen) $ LBSUtf8.drop (6 + slen) s in+    Lexeme (Just pos) $ TFloatLit $ BinRep $ sign $ makeNaN $ fromIntegral num++parseDecimalSignedInt :: AlexAction Lexeme+parseDecimalSignedInt = token $ \(pos, _, s, _) len ->+    let (sign, slen) = parseSign s in+    let num = readDecFromPrefix (len - slen) $ LBSUtf8.drop slen s in+    Lexeme (Just pos) $ TIntLit $ sign num++parseDecFloat :: AlexAction Lexeme+parseDecFloat = token $ \(pos, _, s, _) len ->+    Lexeme (Just pos) $ TFloatLit $ DecRep $ filter (/= '_') $ takeChars len s++expAsInt :: String -> Int+expAsInt [] = 0+expAsInt ('+' : rest) = expAsInt rest+expAsInt ('-' : rest) = negate $ expAsInt rest+expAsInt str = read str++readDecFloat :: String -> Either String Float+readDecFloat str =+    let (sign, rest) = case str of+            ('+':rest) -> (abs, rest)+            ('-':rest) -> (negate, rest)+            rest -> (abs, rest)+    in+    let (val, exp) = splitBy (\c -> c == 'E' || c == 'e') rest in+    let (int, frac) = splitBy (== '.') val in+    let nullIfEmpty str = if null str then "0" else str in+    let expInt = expAsInt $ nullIfEmpty exp in+    if expInt > 38+    then Left $ "constant out of range"+    else fmap sign $ readEither $ nullIfEmpty int ++ "." ++ nullIfEmpty frac ++ "e" ++ nullIfEmpty exp++readDecDouble :: String -> Either String Double+readDecDouble str =+    let (sign, rest) = case str of+            ('+':rest) -> (abs, rest)+            ('-':rest) -> (negate, rest)+            rest -> (abs, rest)+    in+    let (val, exp) = splitBy (\c -> c == 'E' || c == 'e') rest in+    let (int, frac) = splitBy (== '.') val in+    let nullIfEmpty str = if null str then "0" else str in+    let expInt = expAsInt $ nullIfEmpty exp in+    if expInt > 308+    then Left $ "constant out of range"+    else fmap sign $ readEither $ nullIfEmpty int ++ "." ++ nullIfEmpty frac ++ "e" ++ nullIfEmpty exp++parseHexFloat :: AlexAction Lexeme+parseHexFloat = token $ \(pos, _, s, _) len ->+    Lexeme (Just pos) $ TFloatLit $ HexRep $ filter (/= '_') $ takeChars len s++readHexFloat :: Int -> String -> String -> Either String Double+readHexFloat expLimit restrictedPrefix str =+    let (sign, '0':'x':rest) = case str of+            ('+':rest) -> (abs, rest)+            ('-':rest) -> (negate, rest)+            rest -> (abs, rest)+    in+    let (val, exp) = splitBy (\c -> c == 'P' || c == 'p') rest in+    let (int, frac) = splitBy (== '.') val in+    let intLen = length int in+    let expInt = expAsInt exp in+    if int == "1" && ((restrictedPrefix `isPrefixOf` frac && expInt == expLimit - 1) || expInt >= expLimit)+    then Left $ "constant out of range"+    else+        let intVal = sum $ zipWith (\i c -> readHexFromChar c * (16 ^ (intLen - i))) [1..] int in+        Right $ sign $ (intVal + readHexFrac frac) * readHexExp exp+    where+        readHexExp :: String -> Double+        readHexExp [] = 1+        readHexExp ('+' : rest) = readHexExp rest+        readHexExp ('-' : rest) = 1 / readHexExp rest+        readHexExp expStr = 2 ^ read expStr++        readHexFrac :: String -> Double+        readHexFrac [] = 0+        readHexFrac val =+            let len = length val in+            sum $ zipWith (\i c -> readHexFromChar c / (16 ^ i)) [1..] val++asFloat :: FloatRep -> Either String Float+asFloat (BinRep d) = Right $ doubleToFloat d+asFloat (HexRep s) = doubleToFloat <$> readHexFloat 128 "ffffff" s+asFloat (DecRep s) = readDecFloat s++asDouble :: FloatRep -> Either String Double+asDouble (BinRep d) = Right d+asDouble (HexRep s) = readHexFloat 1024 "fffffffffffff8" s+asDouble (DecRep s) = readDecDouble s++startBlockComment :: AlexAction Lexeme+startBlockComment _inp _len = do+    depth <- getLexerCommentDepth+    if depth <= 0+    then do+        alexSetStartCode blockComment+        setLexerCommentDepth 1+    else+        setLexerCommentDepth (depth + 1)+    alexMonadScan++endBlockComment :: AlexAction Lexeme+endBlockComment _inp _len = do+    depth <- getLexerCommentDepth+    if depth == 1+    then do+        alexSetStartCode defaultStartCode+        setLexerCommentDepth 0+    else+        setLexerCommentDepth (depth - 1)+    alexMonadScan++startStringLiteral :: AlexAction Lexeme+startStringLiteral _inp _len = do+    alexSetStartCode stringLiteral+    setLexerStringFlag True+    alexMonadScan++appendCharToStringLiteral :: Char -> AlexAction Lexeme+appendCharToStringLiteral chr _inp _len = do+    addCharToLexerStringValue chr+    alexMonadScan++appendFromHead :: AlexAction Lexeme+appendFromHead (_pos, _rest, inp, _) _len = do+    let Just (first, _) = LBSUtf8.decode inp+    addCharToLexerStringValue first+    alexMonadScan++appendDoubleHexChar :: AlexAction Lexeme+appendDoubleHexChar (_pos, _rest, inp, _) _len = do+    addCharCodeToLexerStringValue $ fromIntegral $ readHexFromPrefix 2 $ LBSUtf8.drop 1 inp+    alexMonadScan++-- TODO: add a predicate with code ranges check+-- if 𝑛 < 0xD800 ∨ 0xE000 ≤ 𝑛 < 0x110000+appendHexEscapedChar :: AlexAction Lexeme+appendHexEscapedChar (pos, _rest, inp, _) len = do+    let code = readHexFromPrefix (len - 3) $ LBSUtf8.drop 2 inp+    if code < 0xD800 || (code >= 0xE000 && code < 0x110000)+    then do+        addCharToLexerStringValue $ Char.chr $ fromIntegral code+        alexMonadScan+    else+        alexError $ "Character code should be in valid UTF range (code < 0xD800 || (code >= 0xE000 && code < 0x110000)): " ++ show pos++endStringLiteral :: AlexAction Lexeme+endStringLiteral (pos, _, _inp, _) _len = do+    alexSetStartCode defaultStartCode+    setLexerStringFlag False+    str <- LBS.pack . reverse <$> getLexerStringValue+    setLexerStringValue []+    return $ Lexeme (Just pos) $ TStringLit str++tokenStr :: (LBS.ByteString -> Token) -> AlexAction Lexeme+tokenStr f = token $ \(pos, _, s, _) len -> (Lexeme (Just pos) $ f $ LBS.take len s)++constToken :: Token -> AlexAction Lexeme+constToken tok = token $ \(pos, _, _, _) _len -> (Lexeme (Just pos) tok)++{- End Lexem Helpers -}++data FloatRep+    = BinRep Double+    | DecRep String+    | HexRep String+    deriving (Show, Eq)++data Token = TKeyword LBS.ByteString+    | TIntLit Integer+    | TFloatLit FloatRep+    | TStringLit LBS.ByteString+    | TId LBS.ByteString+    | TOpenBracket+    | TCloseBracket+    | TReserved LBS.ByteString+    | EOF+    deriving (Show, Eq)++data Lexeme = Lexeme { pos :: Maybe AlexPosn, tok :: Token } deriving (Show, Eq)++data AlexUserState = AlexUserState {+        lexerCommentDepth :: Int,+        lexerStringValue  :: [Word8],+        lexerIsString     :: Bool+    }++alexInitUserState :: AlexUserState+alexInitUserState = AlexUserState {+        lexerCommentDepth  = 0,+        lexerIsString      = False,+        lexerStringValue   = []+    }++getLexerCommentDepth :: Alex Int+getLexerCommentDepth = Alex $ \s@AlexState{alex_ust=ust} ->+    Right (s, lexerCommentDepth ust)++setLexerCommentDepth :: Int -> Alex ()+setLexerCommentDepth ss = Alex $ \s ->+    Right (s{ alex_ust=(alex_ust s){ lexerCommentDepth = ss } }, ())++getLexerStringFlag :: Alex Bool+getLexerStringFlag = Alex $ \s@AlexState{alex_ust=ust} -> Right (s, lexerIsString ust)++setLexerStringFlag :: Bool -> Alex ()+setLexerStringFlag isString = Alex $ \s ->+    Right (s{ alex_ust=(alex_ust s){ lexerIsString = isString } }, ())++getLexerStringValue :: Alex [Word8]+getLexerStringValue = Alex $ \s@AlexState{alex_ust=ust} -> Right (s, lexerStringValue ust)++setLexerStringValue :: [Word8] -> Alex ()+setLexerStringValue ss = Alex $ \s ->+    Right (s{ alex_ust=(alex_ust s){ lexerStringValue = ss } }, ())++addCharToLexerStringValue :: Char -> Alex ()+addCharToLexerStringValue c = Alex $ \s ->+    let ust = alex_ust s in+    Right (s{ alex_ust = ust{ lexerStringValue = (reverse $ LBS.unpack $ LBSUtf8.fromString [c]) ++ lexerStringValue ust } }, ())++addCharCodeToLexerStringValue :: Word8 -> Alex ()+addCharCodeToLexerStringValue c = Alex $ \s ->+    let ust = alex_ust s in+    Right (s{ alex_ust = ust{ lexerStringValue = c : lexerStringValue ust } }, ())++alexEOF = return $ Lexeme Nothing EOF++takeChars :: Int64 -> LBS.ByteString -> String+takeChars n str = reverse $ go n str []+    where+        go :: Int64 -> LBS.ByteString -> String -> String+        go 0 _ acc = acc+        go n str acc = case LBSUtf8.uncons str of+            Just (c, rest) -> go (n - 1) rest (c : acc)+            Nothing -> acc++readHexFromChar :: (Num a) => Char -> a+readHexFromChar chr =+    case chr of +        '0' -> 0 +        '1' -> 1 +        '2' -> 2 +        '3' -> 3 +        '4' -> 4 +        '5' -> 5 +        '6' -> 6 +        '7' -> 7 +        '8' -> 8 +        '9' -> 9 +        'A' -> 10 +        'B' -> 11 +        'C' -> 12 +        'D' -> 13 +        'E' -> 14 +        'F' -> 15+        'a' -> 10 +        'b' -> 11 +        'c' -> 12 +        'd' -> 13 +        'e' -> 14 +        'f' -> 15+        otherwise -> 0++{-# SPECIALIZE readHexFromChar :: Char -> Integer #-}+{-# SPECIALIZE readHexFromChar :: Char -> Double #-}++readFromPrefix :: Int -> Int64 -> LBS.ByteString -> Integer+readFromPrefix base n bstr+    | base <= 16 =+        let str = filter (/= '_') $ takeChars n bstr in+        let len = length str in+        sum $ zipWith (\i c -> readHexFromChar c * (fromIntegral base ^ fromIntegral (len - i))) [1..] str+    | otherwise = error "base has to be less than or equal 16"++readHexFromPrefix :: Int64 -> LBS.ByteString -> Integer+readHexFromPrefix = readFromPrefix 16++readDecFromPrefix :: Int64 -> LBS.ByteString -> Integer+readDecFromPrefix = readFromPrefix 10++splitBy :: (Char -> Bool) -> String -> (String, String)+splitBy pred str =+    case break pred str of+        (left, (_ : rest)) -> (left, rest)+        res -> res++scanner :: LBS.ByteString -> Either String [Lexeme]+scanner str = runAlex str loop+    where+        loop :: Alex [Lexeme]+        loop = do+            lex <- alexMonadScan+            case lex of+                Lexeme _ EOF -> do+                    strFlag <- getLexerStringFlag+                    when strFlag $ alexError "End of file reached before string literal end"+                    commentDepth <- getLexerCommentDepth+                    when (commentDepth > 0) $ alexError "End of file reached before block comment end"+                    return [lex]+                otherwise -> (lex :) <$> loop+++blockComment,stringLiteral :: Int+blockComment = 1+stringLiteral = 2+alex_action_1 =  constToken $ TFloatLit $ BinRep (abs nan) +alex_action_2 =  constToken $ TFloatLit $ BinRep (abs nan) +alex_action_3 =  constToken $ TFloatLit $ BinRep nan +alex_action_4 =  parseNanSigned +alex_action_5 =  constToken $ TFloatLit $ BinRep inf +alex_action_6 =  constToken $ TFloatLit $ BinRep inf +alex_action_7 =  constToken $ TFloatLit $ BinRep minusInf +alex_action_8 =  tokenStr TKeyword +alex_action_10 =  tokenStr TId +alex_action_11 =  constToken TOpenBracket +alex_action_12 =  constToken TCloseBracket +alex_action_13 =  parseDecimalSignedInt +alex_action_14 =  parseHexalSignedInt +alex_action_15 =  parseDecFloat +alex_action_16 =  parseHexFloat +alex_action_17 =  startBlockComment +alex_action_19 =  endBlockComment +alex_action_20 =  startStringLiteral +alex_action_21 =  appendDoubleHexChar +alex_action_22 =  appendCharToStringLiteral '\x09' +alex_action_23 =  appendCharToStringLiteral '\x0A' +alex_action_24 =  appendCharToStringLiteral '\x0D' +alex_action_25 =  appendCharToStringLiteral '\x22' +alex_action_26 =  appendCharToStringLiteral '\x27' +alex_action_27 =  appendCharToStringLiteral '\x5C' +alex_action_28 =  appendHexEscapedChar +alex_action_29 =  endStringLiteral +alex_action_30 =  appendFromHead +alex_action_31 =  tokenStr TReserved +{-# LINE 1 "templates/GenericTemplate.hs" #-}++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- -----------------------------------------------------------------------------+-- ALEX TEMPLATE+--+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use+-- it for any purpose whatsoever.++-- -----------------------------------------------------------------------------+-- INTERNALS and main scanner engine++++++++-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#if __GLASGOW_HASKELL__ > 706+#define GTE(n,m) (tagToEnum# (n >=# m))+#define EQ(n,m) (tagToEnum# (n ==# m))+#else+#define GTE(n,m) (n >=# m)+#define EQ(n,m) (n ==# m)+#endif++++data AlexAddr = AlexA# Addr#+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#if __GLASGOW_HASKELL__ < 503+uncheckedShiftL# = shiftL#+#endif++{-# INLINE alexIndexInt16OffAddr #-}+alexIndexInt16OffAddr (AlexA# arr) off =+#ifdef WORDS_BIGENDIAN+  narrow16Int# i+  where+        i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)+        high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+        low  = int2Word# (ord# (indexCharOffAddr# arr off'))+        off' = off *# 2#+#else+  indexInt16OffAddr# arr off+#endif++++++{-# INLINE alexIndexInt32OffAddr #-}+alexIndexInt32OffAddr (AlexA# arr) off =+#ifdef WORDS_BIGENDIAN+  narrow32Int# i+  where+   i    = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`+                     (b2 `uncheckedShiftL#` 16#) `or#`+                     (b1 `uncheckedShiftL#` 8#) `or#` b0)+   b3   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))+   b2   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))+   b1   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+   b0   = int2Word# (ord# (indexCharOffAddr# arr off'))+   off' = off *# 4#+#else+  indexInt32OffAddr# arr off+#endif+++++++#if __GLASGOW_HASKELL__ < 503+quickIndex arr i = arr ! i+#else+-- GHC >= 503, unsafeAt is available from Data.Array.Base.+quickIndex = unsafeAt+#endif+++++-- -----------------------------------------------------------------------------+-- Main lexing routines++data AlexReturn a+  = AlexEOF+  | AlexError  !AlexInput+  | AlexSkip   !AlexInput !Int+  | AlexToken  !AlexInput !Int a++-- alexScan :: AlexInput -> StartCode -> AlexReturn a+alexScan input__ (I# (sc))+  = alexScanUser undefined input__ (I# (sc))++alexScanUser user__ input__ (I# (sc))+  = case alex_scan_tkn user__ input__ 0# input__ sc AlexNone of+  (AlexNone, input__') ->+    case alexGetByte input__ of+      Nothing ->++++                                   AlexEOF+      Just _ ->++++                                   AlexError input__'++  (AlexLastSkip input__'' len, _) ->++++    AlexSkip input__'' len++  (AlexLastAcc k input__''' len, _) ->++++    AlexToken input__''' len (alex_actions ! k)+++-- Push the input through the DFA, remembering the most recent accepting+-- state it encountered.++alex_scan_tkn user__ orig_input len input__ s last_acc =+  input__ `seq` -- strict in the input+  let+  new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))+  in+  new_acc `seq`+  case alexGetByte input__ of+     Nothing -> (new_acc, input__)+     Just (c, new_input) ->++++      case fromIntegral c of { (I# (ord_c)) ->+        let+                base   = alexIndexInt32OffAddr alex_base s+                offset = (base +# ord_c)+                check  = alexIndexInt16OffAddr alex_check offset++                new_s = if GTE(offset,0#) && EQ(check,ord_c)+                          then alexIndexInt16OffAddr alex_table offset+                          else alexIndexInt16OffAddr alex_deflt s+        in+        case new_s of+            -1# -> (new_acc, input__)+                -- on an error, we want to keep the input *before* the+                -- character that failed, not after.+            _ -> alex_scan_tkn user__ orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)+                                                -- note that the length is increased ONLY if this is the 1st byte in a char encoding)+                        new_input new_s new_acc+      }+  where+        check_accs (AlexAccNone) = last_acc+        check_accs (AlexAcc a  ) = AlexLastAcc a input__ (I# (len))+        check_accs (AlexAccSkip) = AlexLastSkip  input__ (I# (len))++        check_accs (AlexAccPred a predx rest)+           | predx user__ orig_input (I# (len)) input__+           = AlexLastAcc a input__ (I# (len))+           | otherwise+           = check_accs rest+        check_accs (AlexAccSkipPred predx rest)+           | predx user__ orig_input (I# (len)) input__+           = AlexLastSkip input__ (I# (len))+           | otherwise+           = check_accs rest+++data AlexLastAcc+  = AlexNone+  | AlexLastAcc !Int !AlexInput !Int+  | AlexLastSkip     !AlexInput !Int++data AlexAcc user+  = AlexAccNone+  | AlexAcc Int+  | AlexAccSkip++  | AlexAccPred Int (AlexAccPred user) (AlexAcc user)+  | AlexAccSkipPred (AlexAccPred user) (AlexAcc user)++type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool++-- -----------------------------------------------------------------------------+-- Predicates on a rule++alexAndPred p1 p2 user__ in1 len in2+  = p1 user__ in1 len in2 && p2 user__ in1 len in2++--alexPrevCharIsPred :: Char -> AlexAccPred _+alexPrevCharIs c _ input__ _ _ = c == alexInputPrevChar input__++alexPrevCharMatches f _ input__ _ _ = f (alexInputPrevChar input__)++--alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _+alexPrevCharIsOneOf arr _ input__ _ _ = arr ! alexInputPrevChar input__++--alexRightContext :: Int -> AlexAccPred _+alexRightContext (I# (sc)) user__ _ _ input__ =+     case alex_scan_tkn user__ input__ 0# input__ sc AlexNone of+          (AlexNone, _) -> False+          _ -> True+        -- TODO: there's no need to find the longest+        -- match when checking the right context, just+        -- the first match will do.+
+ dist/build/Language/Wasm/Parser.hs view
@@ -0,0 +1,7182 @@+{-# OPTIONS_GHC -w #-}+{-# OPTIONS -XMagicHash -XBangPatterns -XTypeSynonymInstances -XFlexibleInstances -cpp #-}+#if __GLASGOW_HASKELL__ >= 710+{-# OPTIONS_GHC -XPartialTypeSignatures #-}+#endif+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ViewPatterns #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveAnyClass #-}++module Language.Wasm.Parser (+    parseModule,+    parseModuleFields,+    parseScript,+    desugarize,+    ModuleField(..),+    DataSegment(..),+    ElemSegment(..),+    StartFunction(..),+    Export(..),+    ExportDesc(..),+    Table(..),+    Memory(..),+    Global(..),+    Function(..),+    LocalType(..),+    Import(..),+    ImportDesc(..),+    Instruction(..),+    TypeUse(..),+    TypeDef(..),+    PlainInstr(..),+    Index(..),+    Ident(..),+    ParamType(..),+    FuncType(..),+    -- script+    Script,+    ModuleDef(..),+    Command(..),+    Action(..),+    Assertion(..),+    Meta(..)+) where++import Language.Wasm.Structure (+        MemArg(..),+        IUnOp(..),+        IBinOp(..),+        IRelOp(..),+        FUnOp(..),+        FBinOp(..),+        FRelOp(..),+        BitSize(..),+        TableType(..),+        ElemType(..),+        Limit(..),+        GlobalType(..),+        ValueType(..)+    )++import qualified Language.Wasm.Structure as S++import qualified Data.Text as T+import qualified Data.Text.Lazy as TL+import qualified Data.Text.Lazy.Encoding as TLEncoding+import qualified Data.Text.Lazy.Read as TLRead++import qualified Data.ByteString.Lazy as LBS+import qualified Data.ByteString.Lazy.Char8 as LBSChar8+import Data.Maybe (fromMaybe, fromJust, isNothing)+import Data.List (foldl', findIndex, find)+import Control.Monad (guard, foldM)++import Numeric.Natural (Natural)+import Data.Word (Word32, Word64)+import Data.Bits ((.|.))+import Numeric.IEEE (infinity, nan, maxFinite)+import Language.Wasm.FloatUtils (doubleToFloat)+import Control.DeepSeq (NFData)+import GHC.Generics (Generic)++import Language.Wasm.Lexer (+        Token (+            TKeyword,+            TIntLit,+            TFloatLit,+            TStringLit,+            TId,+            TOpenBracket,+            TCloseBracket,+            TReserved,+            EOF+        ),+        Lexeme(..),+        AlexPosn(..),+        asFloat,+        asDouble+    )+import qualified Data.Array as Happy_Data_Array+import qualified Data.Bits as Bits+import qualified GHC.Exts as Happy_GHC_Exts+import Control.Applicative(Applicative(..))+import Control.Monad (ap)++-- parser produced by Happy Version 1.19.8++newtype HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131 = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = Happy_GHC_Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn6 :: (TL.Text) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn6 #-}+happyOut6 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (TL.Text)+happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut6 #-}+happyIn7 :: (TL.Text) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (TL.Text)+happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: (Ident) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Ident)+happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: (ValueType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ValueType)+happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: (Index) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Index)+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: (Integer) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Integer)+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: (Natural) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Natural)+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: (Integer) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Integer)+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: (Float) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Float)+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: (Double) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Double)+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: (PlainInstr) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (PlainInstr)+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: (TypeUse) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (TypeUse)+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: (TypeUse) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (TypeUse)+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: (Maybe FuncType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe FuncType)+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: (TypeDef) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (TypeDef)+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: (FuncType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (FuncType)+happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: (FuncType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (FuncType)+happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyIn23 :: (FuncType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn23 #-}+happyOut23 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (FuncType)+happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut23 #-}+happyIn24 :: (FuncType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn24 #-}+happyOut24 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (FuncType)+happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut24 #-}+happyIn25 :: (FuncType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn25 #-}+happyOut25 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (FuncType)+happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut25 #-}+happyIn26 :: (FuncType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn26 #-}+happyOut26 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (FuncType)+happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut26 #-}+happyIn27 :: (FuncType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn27 #-}+happyOut27 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (FuncType)+happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut27 #-}+happyIn28 :: (MemArg) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn28 #-}+happyOut28 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (MemArg)+happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut28 #-}+happyIn29 :: (MemArg) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn29 #-}+happyOut29 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (MemArg)+happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut29 #-}+happyIn30 :: (MemArg) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn30 #-}+happyOut30 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (MemArg)+happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut30 #-}+happyIn31 :: (MemArg) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn31 #-}+happyOut31 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (MemArg)+happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut31 #-}+happyIn32 :: ([Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn32 #-}+happyOut32 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([Instruction])+happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut32 #-}+happyIn33 :: ([Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn33 #-}+happyOut33 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([Instruction])+happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut33 #-}+happyIn34 :: (Maybe Ident -> Either String Instruction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn34 #-}+happyOut34 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Either String Instruction)+happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut34 #-}+happyIn35 :: (Maybe Ident -> Either String Instruction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn35 #-}+happyOut35 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Either String Instruction)+happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut35 #-}+happyIn36 :: (Maybe Ident -> Either String Instruction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn36 #-}+happyOut36 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Either String Instruction)+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut36 #-}+happyIn37 :: (Maybe Ident -> Either String Instruction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn37 #-}+happyOut37 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Either String Instruction)+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut37 #-}+happyIn38 :: (Maybe Ident -> Either String [Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn38 #-}+happyOut38 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Either String [Instruction])+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut38 #-}+happyIn39 :: (Maybe Ident -> Either String [Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn39 #-}+happyOut39 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Either String [Instruction])+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut39 #-}+happyIn40 :: (([Instruction], Maybe Ident)) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn40 #-}+happyOut40 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (([Instruction], Maybe Ident))+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut40 #-}+happyIn41 :: ([Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn41 #-}+happyOut41 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([Instruction])+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut41 #-}+happyIn42 :: ((TypeUse, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn42 #-}+happyOut42 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((TypeUse, [Instruction]))+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut42 #-}+happyIn43 :: ((Maybe FuncType, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn43 #-}+happyOut43 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((Maybe FuncType, [Instruction]))+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut43 #-}+happyIn44 :: ((Maybe FuncType, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn44 #-}+happyOut44 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((Maybe FuncType, [Instruction]))+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut44 #-}+happyIn45 :: ((Maybe FuncType, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn45 #-}+happyOut45 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((Maybe FuncType, [Instruction]))+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut45 #-}+happyIn46 :: ((Maybe FuncType, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn46 #-}+happyOut46 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((Maybe FuncType, [Instruction]))+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut46 #-}+happyIn47 :: ([Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn47 #-}+happyOut47 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([Instruction])+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut47 #-}+happyIn48 :: ([Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn48 #-}+happyOut48 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([Instruction])+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut48 #-}+happyIn49 :: (Maybe Ident -> Instruction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn49 #-}+happyOut49 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Instruction)+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut49 #-}+happyIn50 :: (Maybe Ident -> Instruction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn50 #-}+happyOut50 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Instruction)+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut50 #-}+happyIn51 :: (Maybe Ident -> Instruction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn51 #-}+happyOut51 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Instruction)+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut51 #-}+happyIn52 :: (Maybe Ident -> Instruction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn52 #-}+happyOut52 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Instruction)+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut52 #-}+happyIn53 :: (Maybe Ident -> [Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn53 #-}+happyOut53 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> [Instruction])+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut53 #-}+happyIn54 :: (([Instruction], ([Instruction], [Instruction]))) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn54 #-}+happyOut54 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (([Instruction], ([Instruction], [Instruction])))+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut54 #-}+happyIn55 :: ([Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn55 #-}+happyOut55 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([Instruction])+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut55 #-}+happyIn56 :: ([Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn56 #-}+happyOut56 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([Instruction])+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut56 #-}+happyIn57 :: ((TypeUse, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn57 #-}+happyOut57 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((TypeUse, [Instruction]))+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut57 #-}+happyIn58 :: ((Maybe FuncType, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn58 #-}+happyOut58 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((Maybe FuncType, [Instruction]))+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut58 #-}+happyIn59 :: ((Maybe FuncType, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn59 #-}+happyOut59 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((Maybe FuncType, [Instruction]))+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut59 #-}+happyIn60 :: ((Maybe FuncType, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn60 #-}+happyOut60 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((Maybe FuncType, [Instruction]))+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut60 #-}+happyIn61 :: ((Maybe FuncType, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn61 #-}+happyOut61 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((Maybe FuncType, [Instruction]))+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut61 #-}+happyIn62 :: (ImportDesc) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn62 #-}+happyOut62 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ImportDesc)+happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut62 #-}+happyIn63 :: (Import) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn63 #-}+happyOut63 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Import)+happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut63 #-}+happyIn64 :: (ModuleField) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn64 #-}+happyOut64 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ModuleField)+happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut64 #-}+happyIn65 :: (Maybe Ident -> ModuleField) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn65 #-}+happyOut65 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> ModuleField)+happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut65 #-}+happyIn66 :: (Maybe Ident -> ModuleField) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn66 #-}+happyOut66 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> ModuleField)+happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut66 #-}+happyIn67 :: (Maybe Ident -> ModuleField) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn67 #-}+happyOut67 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> ModuleField)+happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut67 #-}+happyIn68 :: (Maybe Ident -> Function) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn68 #-}+happyOut68 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Function)+happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut68 #-}+happyIn69 :: (Function) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn69 #-}+happyOut69 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Function)+happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut69 #-}+happyIn70 :: (Function) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn70 #-}+happyOut70 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Function)+happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut70 #-}+happyIn71 :: (Function) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn71 #-}+happyOut71 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Function)+happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut71 #-}+happyIn72 :: (Function) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn72 #-}+happyOut72 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Function)+happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut72 #-}+happyIn73 :: (([LocalType], [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn73 #-}+happyOut73 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (([LocalType], [Instruction]))+happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut73 #-}+happyIn74 :: (([LocalType], [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn74 #-}+happyOut74 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (([LocalType], [Instruction]))+happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut74 #-}+happyIn75 :: (ModuleField) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn75 #-}+happyOut75 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ModuleField)+happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut75 #-}+happyIn76 :: (GlobalType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn76 #-}+happyOut76 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (GlobalType)+happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut76 #-}+happyIn77 :: (Maybe Ident -> ModuleField) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn77 #-}+happyOut77 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> ModuleField)+happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut77 #-}+happyIn78 :: (Maybe Ident -> ModuleField) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn78 #-}+happyOut78 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> ModuleField)+happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut78 #-}+happyIn79 :: ([ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn79 #-}+happyOut79 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([ModuleField])+happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut79 #-}+happyIn80 :: (Maybe Ident -> [ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn80 #-}+happyOut80 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> [ModuleField])+happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut80 #-}+happyIn81 :: (LBS.ByteString) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn81 #-}+happyOut81 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (LBS.ByteString)+happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut81 #-}+happyIn82 :: (Maybe Ident -> [ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn82 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn82 #-}+happyOut82 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> [ModuleField])+happyOut82 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut82 #-}+happyIn83 :: (Maybe Ident -> [ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn83 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn83 #-}+happyOut83 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> [ModuleField])+happyOut83 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut83 #-}+happyIn84 :: (Limit) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn84 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn84 #-}+happyOut84 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Limit)+happyOut84 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut84 #-}+happyIn85 :: (ElemType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn85 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn85 #-}+happyOut85 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ElemType)+happyOut85 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut85 #-}+happyIn86 :: (TableType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn86 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn86 #-}+happyOut86 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (TableType)+happyOut86 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut86 #-}+happyIn87 :: ([ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn87 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn87 #-}+happyOut87 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([ModuleField])+happyOut87 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut87 #-}+happyIn88 :: (Maybe Ident -> [ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn88 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn88 #-}+happyOut88 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> [ModuleField])+happyOut88 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut88 #-}+happyIn89 :: (Maybe Ident -> [ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn89 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn89 #-}+happyOut89 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> [ModuleField])+happyOut89 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut89 #-}+happyIn90 :: (ExportDesc) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn90 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn90 #-}+happyOut90 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ExportDesc)+happyOut90 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut90 #-}+happyIn91 :: (Export) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn91 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn91 #-}+happyOut91 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Export)+happyOut91 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut91 #-}+happyIn92 :: (StartFunction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn92 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn92 #-}+happyOut92 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (StartFunction)+happyOut92 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut92 #-}+happyIn93 :: ([Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn93 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn93 #-}+happyOut93 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([Instruction])+happyOut93 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut93 #-}+happyIn94 :: (ElemSegment) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn94 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn94 #-}+happyOut94 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ElemSegment)+happyOut94 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut94 #-}+happyIn95 :: (DataSegment) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn95 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn95 #-}+happyOut95 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (DataSegment)+happyOut95 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut95 #-}+happyIn96 :: (ModuleField) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn96 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn96 #-}+happyOut96 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ModuleField)+happyOut96 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut96 #-}+happyIn97 :: ([ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn97 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn97 #-}+happyOut97 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([ModuleField])+happyOut97 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut97 #-}+happyIn98 :: ([ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn98 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn98 #-}+happyOut98 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([ModuleField])+happyOut98 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut98 #-}+happyIn99 :: ([ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn99 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn99 #-}+happyOut99 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([ModuleField])+happyOut99 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut99 #-}+happyIn100 :: ([ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn100 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn100 #-}+happyOut100 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([ModuleField])+happyOut100 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut100 #-}+happyIn101 :: (S.Module) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn101 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn101 #-}+happyOut101 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (S.Module)+happyOut101 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut101 #-}+happyIn102 :: (Script) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn102 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn102 #-}+happyOut102 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Script)+happyOut102 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut102 #-}+happyIn103 :: (Command) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn103 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn103 #-}+happyOut103 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Command)+happyOut103 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut103 #-}+happyIn104 :: (Command) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn104 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn104 #-}+happyOut104 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Command)+happyOut104 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut104 #-}+happyIn105 :: (ModuleDef) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn105 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn105 #-}+happyOut105 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ModuleDef)+happyOut105 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut105 #-}+happyIn106 :: (Action) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn106 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn106 #-}+happyOut106 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Action)+happyOut106 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut106 #-}+happyIn107 :: (Assertion) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn107 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn107 #-}+happyOut107 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Assertion)+happyOut107 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut107 #-}+happyIn108 :: (Either Action ModuleDef) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn108 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn108 #-}+happyOut108 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Either Action ModuleDef)+happyOut108 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut108 #-}+happyIn109 :: (Meta) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn109 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn109 #-}+happyOut109 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Meta)+happyOut109 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut109 #-}+happyIn110 :: t110 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn110 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn110 #-}+happyOut110 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t110+happyOut110 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut110 #-}+happyIn111 :: t111 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn111 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn111 #-}+happyOut111 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t111+happyOut111 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut111 #-}+happyIn112 :: t112 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn112 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn112 #-}+happyOut112 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t112+happyOut112 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut112 #-}+happyIn113 :: t113 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn113 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn113 #-}+happyOut113 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t113+happyOut113 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut113 #-}+happyIn114 :: t114 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn114 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn114 #-}+happyOut114 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t114+happyOut114 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut114 #-}+happyIn115 :: t115 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn115 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn115 #-}+happyOut115 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t115+happyOut115 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut115 #-}+happyIn116 :: t116 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn116 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn116 #-}+happyOut116 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t116+happyOut116 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut116 #-}+happyIn117 :: t117 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn117 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn117 #-}+happyOut117 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t117+happyOut117 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut117 #-}+happyIn118 :: t118 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn118 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn118 #-}+happyOut118 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t118+happyOut118 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut118 #-}+happyIn119 :: t119 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn119 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn119 #-}+happyOut119 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t119+happyOut119 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut119 #-}+happyIn120 :: t120 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn120 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn120 #-}+happyOut120 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t120+happyOut120 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut120 #-}+happyIn121 :: t121 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn121 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn121 #-}+happyOut121 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t121+happyOut121 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut121 #-}+happyIn122 :: t122 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn122 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn122 #-}+happyOut122 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t122+happyOut122 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut122 #-}+happyIn123 :: t123 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn123 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn123 #-}+happyOut123 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t123+happyOut123 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut123 #-}+happyIn124 :: t124 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn124 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn124 #-}+happyOut124 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t124+happyOut124 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut124 #-}+happyIn125 :: t125 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn125 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn125 #-}+happyOut125 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t125+happyOut125 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut125 #-}+happyIn126 :: t126 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn126 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn126 #-}+happyOut126 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t126+happyOut126 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut126 #-}+happyIn127 :: t127 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn127 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn127 #-}+happyOut127 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t127+happyOut127 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut127 #-}+happyIn128 :: t128 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn128 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn128 #-}+happyOut128 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t128+happyOut128 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut128 #-}+happyIn129 :: t129 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn129 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn129 #-}+happyOut129 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t129+happyOut129 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut129 #-}+happyIn130 :: t130 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn130 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn130 #-}+happyOut130 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t130+happyOut130 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut130 #-}+happyIn131 :: t131 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyIn131 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn131 #-}+happyOut131 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t131+happyOut131 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut131 #-}+happyInTok :: (Lexeme) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Lexeme)+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyExpList :: HappyAddr+happyExpList = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x6f\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x36\xff\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\xe0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x36\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xc0\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xc0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\xf0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xf8\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\xf0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\xf8\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xf8\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\xe0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\xf8\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\xe0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xf8\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\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\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\xf0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++{-# NOINLINE happyExpListPerState #-}+happyExpListPerState st =+    token_strs_expected+  where token_strs = ["error","%dummy","%start_parseModule","%start_parseModuleFields","%start_parseScript","string","name","ident","valtype","index","int32","u32","int64","float32","float64","plaininstr","typeuse","typeuse1","typedtypeuse","typedef","functype","params_results","params_results1","results","results1","paramsresultstypeuse","paramsresulttypeuse","memarg1","memarg2","memarg4","memarg8","instruction","raw_instr","raw_block","raw_block1","raw_loop","raw_loop1","raw_if_result","raw_if_result1","raw_else","raw_call_indirect","raw_call_indirect_typeuse","raw_call_indirect_functype","raw_call_indirect_functype1","raw_call_indirect_return_functype","raw_call_indirect_return_functype1","folded_instr","folded_instr1","folded_block","folded_block1","folded_loop","folded_loop1","folded_if_result","folded_then_else","folded_else","folded_call_indirect","folded_call_indirect_typeuse","folded_call_indirect_functype","folded_call_indirect_functype1","folded_call_indirect_return_functype","folded_call_indirect_return_functype1","importdesc","import","function","export_import_typeuse_locals_body","export_import_typeuse_locals_body1","import_typeuse_locals_body1","typeuse_locals_body1","signature_locals_body","signature_locals_body1","result_locals_body","result_locals_body1","locals_body","locals_body1","global","globaltype","global_type_export_import","global_mut_export_import","memory","memory_limits_export_import","datastring","memory_limits_export_import1","memory_limits","limits","elemtype","tabletype","table","limits_elemtype_elem","import_export_table","exportdesc","export","start","offsetexpr","elemsegment","datasegment","modulefield1_single","modulefield1_multi","modulefield1","modulefield","modAsFields","mod","script","command","command1","module1","action1","assertion1","assertion_trap","meta1","list__command__","list__folded_instr__","list__index__","list__instruction__","list__modulefield__","list__str__","list__string__","list__valtype__","opt__align__","opt__ident__","opt__index__","opt__offset__","opt__u32__","rev_list1__index__","rev_list__command__","rev_list__folded_instr__","rev_list__index__","rev_list__instruction__","rev_list__modulefield__","rev_list__str__","rev_list__string__","rev_list__valtype__","'('","')'","'func'","'param'","'result'","'i32'","'i64'","'f32'","'f64'","'mut'","'anyfunc'","'type'","'unreachable'","'nop'","'br'","'br_if'","'br_table'","'return'","'call'","'call_indirect'","'drop'","'select'","'get_local'","'set_local'","'tee_local'","'get_global'","'set_global'","'i32.load'","'i64.load'","'f32.load'","'f64.load'","'i32.load8_s'","'i32.load8_u'","'i32.load16_s'","'i32.load16_u'","'i64.load8_s'","'i64.load8_u'","'i64.load16_s'","'i64.load16_u'","'i64.load32_s'","'i64.load32_u'","'i32.store'","'i64.store'","'f32.store'","'f64.store'","'i32.store8'","'i32.store16'","'i64.store8'","'i64.store16'","'i64.store32'","'current_memory'","'grow_memory'","'memory.size'","'memory.grow'","'i32.const'","'i64.const'","'f32.const'","'f64.const'","'i32.clz'","'i32.ctz'","'i32.popcnt'","'i32.add'","'i32.sub'","'i32.mul'","'i32.div_s'","'i32.div_u'","'i32.rem_s'","'i32.rem_u'","'i32.and'","'i32.or'","'i32.xor'","'i32.shl'","'i32.shr_s'","'i32.shr_u'","'i32.rotl'","'i32.rotr'","'i64.clz'","'i64.ctz'","'i64.popcnt'","'i64.add'","'i64.sub'","'i64.mul'","'i64.div_s'","'i64.div_u'","'i64.rem_s'","'i64.rem_u'","'i64.and'","'i64.or'","'i64.xor'","'i64.shl'","'i64.shr_s'","'i64.shr_u'","'i64.rotl'","'i64.rotr'","'f32.abs'","'f32.neg'","'f32.ceil'","'f32.floor'","'f32.trunc'","'f32.nearest'","'f32.sqrt'","'f32.add'","'f32.sub'","'f32.mul'","'f32.div'","'f32.min'","'f32.max'","'f32.copysign'","'f64.abs'","'f64.neg'","'f64.ceil'","'f64.floor'","'f64.trunc'","'f64.nearest'","'f64.sqrt'","'f64.add'","'f64.sub'","'f64.mul'","'f64.div'","'f64.min'","'f64.max'","'f64.copysign'","'i32.eqz'","'i32.eq'","'i32.ne'","'i32.lt_s'","'i32.lt_u'","'i32.gt_s'","'i32.gt_u'","'i32.le_s'","'i32.le_u'","'i32.ge_s'","'i32.ge_u'","'i64.eqz'","'i64.eq'","'i64.ne'","'i64.lt_s'","'i64.lt_u'","'i64.gt_s'","'i64.gt_u'","'i64.le_s'","'i64.le_u'","'i64.ge_s'","'i64.ge_u'","'f32.eq'","'f32.ne'","'f32.lt'","'f32.gt'","'f32.le'","'f32.ge'","'f64.eq'","'f64.ne'","'f64.lt'","'f64.gt'","'f64.le'","'f64.ge'","'i32.wrap/i64'","'i32.trunc_s/f32'","'i32.trunc_u/f32'","'i32.trunc_s/f64'","'i32.trunc_u/f64'","'i64.extend_s/i32'","'i64.extend_u/i32'","'i64.trunc_s/f32'","'i64.trunc_u/f32'","'i64.trunc_s/f64'","'i64.trunc_u/f64'","'f32.convert_s/i32'","'f32.convert_u/i32'","'f32.convert_s/i64'","'f32.convert_u/i64'","'f32.demote/f64'","'f64.convert_s/i32'","'f64.convert_u/i32'","'f64.convert_s/i64'","'f64.convert_u/i64'","'f64.promote/f32'","'i32.reinterpret/f32'","'i64.reinterpret/f64'","'f32.reinterpret/i32'","'f64.reinterpret/i64'","'block'","'loop'","'if'","'else'","'end'","'then'","'table'","'memory'","'global'","'import'","'export'","'local'","'elem'","'data'","'offset'","'start'","'module'","'binary'","'quote'","'register'","'invoke'","'get'","'assert_return'","'assert_return_canonical_nan'","'assert_return_arithmetic_nan'","'assert_trap'","'assert_malformed'","'assert_invalid'","'assert_unlinkable'","'assert_exhaustion'","'script'","'input'","'output'","id","int","f64","offset","align","str","EOF","%eof"]+        bit_start = st * 353+        bit_end = (st + 1) * 353+        read_bit = readArrayBit happyExpList+        bits = map read_bit [bit_start..bit_end - 1]+        bits_indexed = zip bits [0..352]+        token_strs_expected = concatMap f bits_indexed+        f (False, _) = []+        f (True, nr) = [token_strs !! nr]++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x1a\x00\x1a\x00\x00\x00\x60\xff\x00\x00\x69\xff\x6c\xff\x51\x00\x72\xff\x2f\x00\x00\x00\x72\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\xff\x8b\xff\x8b\xff\x8b\xff\x8b\xff\x95\xff\x95\xff\xeb\x00\xeb\x00\xeb\x00\x00\x00\x00\x00\xfe\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x01\x59\x02\x18\x03\x18\x03\xf2\x00\x08\x01\x0d\x01\xa6\x04\x60\x05\x15\x06\x18\x06\x5b\x0a\x7c\x09\x7c\x09\x7c\x09\x0f\x0b\xc1\x0b\x00\x00\xc2\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x0d\xe4\x0d\x00\x00\x3d\x0f\x1e\x0f\x00\x00\xe4\x03\x02\x00\x01\x00\xad\x10\x55\x05\x85\x10\x00\x00\x00\x00\x00\x00\x00\x00\x07\x01\x00\x00\x00\x00\x00\x00\xeb\x00\xeb\x00\xeb\x00\x00\x00\xeb\x00\x15\x12\x00\x00\x00\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x12\xff\x13\xec\x00\x10\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x14\x01\x14\x01\x14\x9a\x15\x9c\x15\xb4\x14\xa1\x15\xad\x15\xaf\x15\x00\x00\x58\x05\x00\x00\x00\x00\x00\x00\xd4\x15\xa8\xff\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x15\x19\x00\x99\x09\x99\x09\x00\x00\x00\x00\x45\x00\xfc\x14\x0c\x15\x0c\x15\x00\x00\x04\x06\x3a\x00\x3a\x00\x3a\x00\x1f\x00\x04\x06\x04\x06\x04\x06\x0c\x15\x0c\x15\x1e\x15\x09\x06\x00\x00\xf8\x15\x00\x00\x00\x00\x0d\x16\x00\x00\x1c\x16\x00\x00\x28\x16\x29\x16\x00\x00\x00\x00\x4a\x15\x4a\x15\x4a\x15\x4a\x15\x4a\x15\x38\x16\x4e\x16\x53\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x07\x74\x15\x74\x15\x74\x15\x00\x00\x00\x00\x56\x16\xb1\x06\xb1\x06\xb1\x06\xb1\x06\x2a\x00\x00\x00\x99\x04\x94\x15\x94\x15\x65\x16\x51\x0a\x00\x00\x95\x15\x95\x15\x00\x00\x00\x00\x00\x00\x95\x15\x95\x15\x00\x00\xa3\x15\x00\x00\x00\x00\x00\x00\x3d\x08\x00\x00\x29\x03\xe3\x03\x9b\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x15\x00\x00\x00\x00\x71\x15\x00\x00\x71\x15\x00\x00\x00\x00\x00\x00\x71\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x0b\x00\x00\x00\x00\x69\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x15\x00\x00\x69\x07\xd1\x15\xd1\x15\xd7\x15\x6a\x16\x00\x00\x99\x04\xde\x16\x99\x04\xdf\x16\x06\x16\xe1\x16\xe2\x16\x99\x04\xe5\x16\xe8\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x0f\x14\x16\x00\x00\x00\x00\xee\x0f\x14\x16\x00\x00\x00\x00\x00\x00\xa2\x10\x14\x16\x14\x16\x00\x00\xf2\x08\x00\x00\x00\x00\xea\x16\x11\x16\xec\x16\x00\x00\x13\x16\xee\x16\x15\x16\x00\x00\x00\x00\x00\x00\xcd\x14\x00\x00\xf0\x16\x17\x16\xf2\x16\xf3\x16\x1f\x16\x1f\x16\x1f\x16\x1f\x16\xf5\x16\xf6\x16\xf7\x16\xf8\x16\x00\x00\xf9\x16\x21\x08\xfa\x16\xfc\x16\xfd\x16\x0d\x06\xc5\x06\x00\x00\x6f\x0c\x00\x00\xfe\x16\xff\x16\x00\x00\x00\x00\x00\x00\x00\x17\x01\x17\x02\x17\x03\x17\x04\x17\x00\x00\x00\x00\x05\x17\x00\x00\x06\x17\x00\x00\x07\x17\x23\x16\x08\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x08\x00\x00\x00\x00\x56\x11\x00\x00\x00\x00\x00\x00\x0a\x12\x00\x00\x05\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x04\x33\x16\x33\x16\x0b\x17\x00\x00\x00\x00\x0c\x17\x53\x05\x00\x00\x0d\x17\x02\x00\x00\x00\x0e\x17\x0f\x17\x01\x00\x10\x17\x00\x00\x00\x00\x36\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x04\xa1\x09\x00\x00\x00\x00\x00\x00\x99\x04\x5e\x16\x00\x00\x00\x00\x00\x00\x99\x04\x62\x16\x11\x17\x12\x17\x13\x17\x00\x00\x74\x0c\x14\x17\x7d\x07\x74\x0c\x15\x17\x35\x08\x00\x00\xed\x08\x17\x17\xed\x08\x00\x00\x00\x00\x85\x0e\x00\x00\x00\x00\x19\x17\x00\x00\xbc\x01\x00\x00\x00\x00\x00\x00\x71\x02\x00\x00\x74\x0c\x00\x00\x1a\x17\x1c\x17\x1d\x17\x4b\x16\x1e\x17\x67\x16\x50\x16\x21\x17\x6b\x16\x00\x00\x22\x17\xbe\x0b\x6e\x16\x24\x17\x99\x04\x27\x17\x28\x17\x00\x00\x47\x16\x00\x00\x00\x00\x47\x16\x00\x00\x57\x05\x29\x17\x2a\x17\xe2\x03\x2b\x17\x2c\x17\x00\x00\x2d\x17\x26\x17\x30\x17\x00\x00\x00\x00\x99\x04\x00\x00\x00\x00\x00\x00\x99\x04\x31\x17\x00\x00\x00\x00\x99\x04\x32\x17\x33\x17\x34\x17\x35\x17\x36\x17\x00\x00\x78\x0c\x29\x0d\x2b\x0d\x00\x00\x37\x17\x38\x17\x00\x00\x39\x17\x3a\x17\x3b\x17\x3c\x17\x1e\x14\x99\x04\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x17\x00\x00\x69\x16\x00\x00\x57\x0c\x00\x00\x00\x00\x3f\x17\x40\x17\x41\x17\x00\x00\xde\x0d\x42\x17\xe0\x0d\x71\x16\x00\x00\x00\x00\x71\x16\x00\x00\x00\x00\x71\x16\x00\x00\x00\x00\x00\x00\x24\x0d\x00\x00\xbe\x12\x00\x00\x00\x00\x00\x00\x43\x17\x00\x00\x44\x17\x00\x00\x45\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x16\x00\x00\x8f\x16\x00\x00\x2a\x0d\x00\x00\x00\x00\x46\x17\x00\x00\x3f\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x48\x17\x4a\x17\x99\x04\x4b\x17\x3e\x0f\x4c\x17\x00\x00\x4e\x17\x43\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x0d\x00\x00\x00\x00\x72\x13\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x17\x50\x17\x00\x00\x97\x16\x00\x00\x1e\x14\x00\x00\x00\x00\x00\x00\x51\x17\x00\x00\x53\x17\x00\x00\x00\x00\x00\x00\x7e\x16\x7e\x16\x00\x00\x00\x00\x00\x00\xf0\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x17\x56\x17\x57\x17\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x98\x0f\x09\x17\xf8\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x16\x00\x00\x21\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf\xff\x0c\x00\x17\x00\x1b\x00\x1c\x00\x1d\x00\xf8\x0f\xa8\x10\x11\x00\x14\x00\x73\x02\xe2\xff\x00\x00\x82\x15\x00\x00\xea\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x58\x17\x21\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x00\x00\x16\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x10\x00\x00\x49\x00\xb9\x15\x9e\x15\x52\x17\x6f\x00\x00\x00\x00\x00\x00\x00\xf0\xff\x00\x00\x44\x16\x00\x00\x00\x00\x00\x00\x76\x02\x2a\x03\x09\x00\x00\x00\x2b\x03\x3d\x17\x00\x00\x00\x00\x0e\x06\x0f\x06\xc6\x06\xc7\x06\x7e\x07\x6d\x00\x08\x00\x88\x00\x18\x00\xee\xff\xf2\xff\xfd\xff\x46\x00\xfc\xff\x16\x00\x4c\x00\x4f\x00\x93\x00\x9d\x00\x9e\x00\x9f\x00\x6e\x15\x70\x15\x39\x00\x65\x00\x44\x00\x70\x00\x6f\x15\x00\x00\x00\x00\x00\x00\x00\x00\x55\x17\x5b\x17\x5c\x17\x5a\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x0b\x00\x1b\x17\x00\x00\x00\x00\x00\x00\x0a\x17\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x17\xf4\xff\x00\x00\x20\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x17\x7e\x15\x93\x15\x00\x00\x00\x00\x3a\x16\x00\x00\x5e\x17\x5f\x17\xc1\x15\x23\x17\xbf\x15\xe3\x15\x08\x16\xa6\x15\x25\x17\x2e\x17\x2f\x17\x65\x17\x66\x17\x2c\x00\x84\x00\x00\x00\x00\x00\xff\xff\x2b\x15\x00\x00\x32\x15\x00\x00\xdc\x15\x00\x00\x00\x00\x00\x00\x00\x00\x69\x17\x6d\x17\x6e\x17\x6f\x17\x70\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x15\x00\x00\x43\x15\x47\x17\x2d\x00\x2e\x00\x31\x00\x24\x16\x2d\x16\x00\x00\x7f\x07\x36\x08\x37\x08\xee\x08\x49\x17\x00\x00\x71\x17\xac\x10\x5c\x11\x00\x00\x87\x16\x00\x00\x5e\x11\x60\x11\xb2\x15\x00\x00\x00\x00\x10\x12\x12\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x17\x00\x00\x84\x16\x82\x16\x8a\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\x16\x00\x00\x00\x00\x4d\x17\x00\x00\x59\x17\x00\x00\x00\x00\x00\x00\x5d\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x16\x00\x00\x00\x00\xef\x08\x00\x00\x00\x00\x2e\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\xfb\xff\x52\x0a\x14\x12\xc4\x12\x04\x00\x00\x00\x00\x00\x72\x17\x00\x00\x73\x17\x00\x00\xc6\x12\x00\x00\x00\x00\x74\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x16\x39\x16\x53\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x16\x00\x00\x90\x15\x32\x00\x3f\x16\x00\x00\x16\x16\x33\x00\x40\x16\x00\x00\x00\x00\x8e\x15\x34\x00\x35\x00\x00\x00\xfc\x00\x00\x00\x42\x16\x00\x00\xc8\x12\x00\x00\x00\x00\x00\x00\x00\x00\x78\x13\x00\x00\x00\x00\x00\x00\x19\x16\x00\x00\x00\x00\x7a\x13\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x0b\x00\x00\x62\x17\x00\x00\x97\x15\x4d\x16\x00\x00\xfb\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x16\x00\x00\x00\x00\x00\x00\x43\x16\x4c\x16\x0a\x0b\x48\x16\x00\x00\x4b\x00\x00\x00\x49\x16\x00\x00\x8b\x15\x00\x00\x1a\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x4d\x00\x84\x15\x67\x17\x00\x00\x4a\x16\x00\x00\x4a\x00\x00\x00\x00\x00\xc4\x15\x00\x00\x00\x00\x00\x00\xa4\x15\x00\x00\x00\x00\x00\x00\x05\x00\x4f\x16\x00\x00\x51\x16\x00\x00\x54\x16\x77\x17\x60\x17\x00\x00\x00\x00\x59\x16\x79\x17\x00\x00\x00\x00\x00\x00\x5a\x16\x7a\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x17\x00\x00\x88\x15\x64\x17\x00\x00\x87\x15\x00\x00\x83\x15\x00\x00\x85\x15\x5b\x16\x00\x00\x81\x15\x00\x00\x00\x00\x75\x17\x00\x00\x8c\x15\x00\x00\x5c\x16\x00\x00\x8d\x15\x00\x00\x68\x17\x00\x00\x6a\x17\x76\x17\x6b\x17\x3d\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x17\x00\x00\x00\x00\x7b\x17\x00\x00\x00\x00\x00\x00\xbd\x15\x00\x00\x00\x00\x4e\x00\x00\x00\x5b\x00\x00\x00\x00\x00\x1f\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x17\x5d\x16\x60\x16\x00\x00\x80\x17\x00\x00\x63\x16\x00\x00\x81\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x17\x7e\x17\x7f\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x16\x82\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x61\x16\xbf\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x17\x00\x00\x83\x17\x3f\x00\x00\x00\x64\x16\x40\x00\x66\x16\x00\x00\x41\x00\x6c\x16\x00\x00\x00\x00\x5f\x16\x00\x00\x09\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x17\x00\x00\x00\x00\x85\x17\x00\x00\x87\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x17\x00\x00\x8a\x17\x00\x00\x00\x00\x00\x00\x88\x17\x00\x00\x6d\x16\x00\x00\x6f\x16\x00\x00\x1d\x16\x00\x00\x00\x00\x89\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x17\x00\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x00\x00\x68\x13\x00\x00\x00\x00\x70\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyAdjustOffset :: Happy_GHC_Exts.Int# -> Happy_GHC_Exts.Int#+happyAdjustOffset off = off++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\x00\x00\x00\x00\x64\xfe\x00\x00\xfc\xff\x00\x00\x00\x00\x79\xfe\x00\x00\x00\x00\x94\xfe\x00\x00\xa3\xfe\xa2\xfe\x9d\xfe\x9c\xfe\x9a\xfe\x9b\xfe\xa1\xfe\xa0\xfe\x9f\xfe\x9e\xfe\x99\xfe\x98\xfe\x5c\xfe\x6e\xfe\x6e\xfe\x6e\xfe\x6e\xfe\x6e\xfe\x00\x00\x00\x00\x6c\xfe\x6c\xfe\x00\x00\x5c\xfe\x65\xfe\x00\x00\x93\xfe\x5c\xfe\x92\xfe\x91\xfe\x8f\xfe\x8e\xfe\x8d\xfe\x6e\xfe\x00\x00\x6e\xfe\x6e\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\xfe\x6e\xfe\x6e\xfe\x00\x00\x75\xfe\xf4\xff\x00\x00\xf5\xff\xfa\xff\xf2\xff\x6d\xfe\x00\x00\x00\x00\xfb\xff\x00\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\xfe\x29\xff\x5e\xfe\xe0\xfe\x00\x00\xdf\xfe\xec\xff\xeb\xff\x00\x00\x00\x00\x00\x00\xe7\xff\x00\x00\x12\xff\xe5\xff\xe4\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\xc7\xff\xc6\xff\xc5\xff\xc4\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbf\xff\xbe\xff\xbd\xff\xbc\xff\xbb\xff\xba\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\xb5\xff\xb4\xff\xb3\xff\xb2\xff\xb1\xff\xb0\xff\xaf\xff\xae\xff\xad\xff\xac\xff\xab\xff\xaa\xff\xa9\xff\xa8\xff\xa7\xff\xa6\xff\xa5\xff\xa4\xff\xa3\xff\xa2\xff\xa1\xff\xa0\xff\x9f\xff\x9e\xff\x9d\xff\x9c\xff\x9b\xff\x9a\xff\x99\xff\x98\xff\x97\xff\x96\xff\x95\xff\x94\xff\x93\xff\x92\xff\x91\xff\x90\xff\x8f\xff\x8e\xff\x8d\xff\x8c\xff\x8b\xff\x8a\xff\x89\xff\x88\xff\x87\xff\x86\xff\x85\xff\x84\xff\x83\xff\x82\xff\x81\xff\x80\xff\x7f\xff\x7e\xff\x7d\xff\x7c\xff\x7b\xff\x7a\xff\x79\xff\x78\xff\x77\xff\x76\xff\x75\xff\x74\xff\x73\xff\x72\xff\x71\xff\x70\xff\x6f\xff\x6e\xff\x6d\xff\x6c\xff\x6b\xff\x6a\xff\x69\xff\x68\xff\x67\xff\x66\xff\x65\xff\x64\xff\x63\xff\x62\xff\x61\xff\x60\xff\x5f\xff\x5e\xff\x5d\xff\x5c\xff\x5b\xff\x5a\xff\x59\xff\x58\xff\x57\xff\x56\xff\x55\xff\x54\xff\x53\xff\x52\xff\x51\xff\x50\xff\x4f\xff\x4e\xff\x4d\xff\x4c\xff\x4b\xff\x4a\xff\x49\xff\x48\xff\x47\xff\x46\xff\x45\xff\x6e\xfe\x6e\xfe\x6e\xfe\x00\x00\x00\x00\x68\xfe\x00\x00\x00\x00\x00\x00\xb3\xfe\x00\x00\xb5\xfe\xbe\xfe\xbd\xfe\x00\x00\x00\x00\x5e\xfe\xc6\xfe\x00\x00\xf9\xff\xf8\xff\xf7\xff\xf6\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa8\xfe\x5d\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\xfe\x5c\xfe\x89\xfe\x00\x00\x5a\xfe\x58\xfe\x00\x00\x62\xfe\x00\x00\x62\xfe\x00\x00\x00\x00\x7d\xfe\x7e\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xfe\x97\xfe\x62\xfe\xa6\xfe\x5a\xfe\x00\x00\x6e\xfe\x6e\xfe\x6e\xfe\x62\xfe\x60\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x76\xfe\xbc\xfe\x00\x00\x00\x00\x5a\xfe\xb7\xfe\xb0\xfe\x00\x00\x00\x00\xb2\xfe\x00\x00\xb4\xfe\x69\xfe\xb6\xfe\x00\x00\x3e\xff\x00\x00\x00\x00\x00\x00\xc0\xff\xee\xff\xed\xff\xc1\xff\xf0\xff\xef\xff\xc2\xff\xf1\xff\xc3\xff\xf3\xff\xc8\xff\x70\xfe\x6b\xfe\xc9\xff\x70\xfe\xca\xff\x70\xfe\xcb\xff\xcc\xff\xcd\xff\x70\xfe\xce\xff\xcf\xff\xd0\xff\xd1\xff\xd2\xff\xd3\xff\xd4\xff\xd5\xff\xd6\xff\xd7\xff\xd8\xff\xd9\xff\xda\xff\xdb\xff\xdc\xff\xdd\xff\xde\xff\xdf\xff\xe0\xff\xe1\xff\xe2\xff\xe3\xff\x28\xff\x00\x00\xe6\xff\x66\xfe\xe8\xff\xe9\xff\xea\xff\x5e\xfe\xdd\xfe\xdb\xfe\xd9\xfe\xd7\xfe\xd2\xfe\xcd\xfe\x56\xfe\x56\xfe\x00\x00\x00\x00\x00\x00\x56\xfe\x00\x00\xde\xfe\x00\x00\x00\x00\x72\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\xfe\x13\xff\x10\xff\x0c\xff\x08\xff\x56\xfe\x56\xfe\x00\x00\x2c\xff\x71\xfe\x2f\xff\x2e\xff\x2d\xff\x5e\xfe\x27\xff\x00\x00\x6e\xfe\x5e\xfe\x26\xff\x00\x00\x6e\xfe\x5e\xfe\x25\xff\x1a\xff\x00\x00\x6e\xfe\x6e\xfe\x3d\xff\x00\x00\x3c\xff\x60\xfe\x00\x00\x00\x00\x00\x00\xbb\xfe\x74\xfe\x00\x00\x00\x00\x5f\xfe\x2b\xff\x2a\xff\x00\x00\xc3\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x6e\xfe\x6e\xfe\x6e\xfe\x6e\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa9\xfe\x00\x00\x77\xfe\x00\x00\x78\xfe\x00\x00\x00\x00\x00\x00\x05\xff\x00\x00\xf1\xfe\x00\x00\x00\x00\x7a\xfe\x7b\xfe\x7c\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\xfe\x85\xfe\x00\x00\x87\xfe\x00\x00\x90\xfe\x00\x00\x73\xfe\x00\x00\x8a\xfe\x8c\xfe\x59\xfe\x8b\xfe\x88\xfe\x86\xfe\x83\xfe\x82\xfe\x81\xfe\x80\xfe\x7f\xfe\x06\xff\xa4\xfe\x62\xfe\xf0\xfe\xee\xfe\xea\xfe\x56\xfe\x56\xfe\x00\x00\x5e\xfe\x04\xff\x00\x00\x01\xff\x5e\xfe\x03\xff\x00\x00\xfc\xfe\x00\x00\x63\xfe\xa7\xfe\x61\xfe\xa5\xfe\xad\xfe\xac\xfe\xab\xfe\xaa\xfe\x00\x00\x00\x00\x00\x00\x43\xff\xe1\xfe\x5e\xfe\x00\x00\x00\x00\x07\xff\x00\x00\x00\x00\x5b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x3b\xff\x38\xff\x56\xfe\x56\xfe\x15\xff\x5e\xfe\x18\xff\x5e\xfe\x00\x00\x00\x00\x1f\xff\x1d\xff\x5e\xfe\x00\x00\x00\x00\x24\xff\x22\xff\x5e\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\xfe\x00\x00\x00\x00\x00\x00\x5e\xfe\xc9\xfe\x00\x00\xcc\xfe\xdc\xfe\x43\xff\xd8\xfe\x00\x00\xd6\xfe\x5e\xfe\xce\xfe\x00\x00\xd1\xfe\x00\x00\xd4\xfe\x0e\xff\x0a\xff\x0e\xff\x6e\xfe\x00\x00\x00\x00\x6e\xfe\x00\x00\x00\x00\x19\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\xfe\x00\x00\xb8\xfe\xba\xfe\x00\x00\xc0\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\xfe\x00\x00\x00\x00\x00\x00\x02\xff\xf6\xfe\x00\x00\x5e\xfe\x5e\xfe\xfb\xfe\x00\x00\x00\x00\x5e\xfe\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\xfe\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x00\x00\xfa\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\xfe\xe3\xfe\xe4\xfe\x44\xff\x41\xff\x33\xff\x56\xfe\x56\xfe\x00\x00\xe5\xfe\xc1\xfe\x00\x00\x00\x00\x00\x00\xb1\xfe\x00\x00\x00\x00\x00\x00\x6e\xfe\x16\xff\x5e\xfe\x6e\xfe\x5e\xfe\x1e\xff\x6e\xfe\x5e\xfe\x23\xff\x11\xff\x00\x00\x09\xff\x00\x00\x0d\xff\xd3\xfe\xd0\xfe\x00\x00\xd5\xfe\x00\x00\xca\xfe\x00\x00\xc8\xfe\xcb\xfe\xda\xfe\xcf\xfe\x0b\xff\x0f\xff\x00\x00\x20\xff\x00\x00\x1b\xff\x00\x00\x14\xff\x35\xff\x00\x00\x37\xff\x00\x00\x3a\xff\xaf\xfe\xb9\xfe\xbf\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\xfe\x00\x00\x00\x00\xf8\xfe\x5e\xfe\xfd\xfe\x5e\xfe\xef\xfe\x00\x00\xec\xfe\xe7\xfe\x00\x00\xe8\xfe\xeb\xfe\xe9\xfe\xed\xfe\x00\x00\x00\x00\xf5\xfe\x00\x00\xf3\xfe\x00\x00\xc4\xfe\x34\xff\x32\xff\x00\x00\x30\xff\x3f\xff\x39\xff\x36\xff\x17\xff\x6e\xfe\x6e\xfe\x21\xff\x1c\xff\x42\xff\x00\x00\x31\xff\xf7\xfe\x5e\xfe\xf9\xfe\xfe\xfe\x00\x00\x40\xff\x00\x00\xf2\xfe"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x03\x00\x01\x00\x01\x00\x16\x00\x02\x00\x02\x00\x02\x00\x16\x00\x02\x00\x0c\x00\x02\x00\x0b\x00\x04\x00\x02\x00\x06\x00\x0a\x00\x06\x00\x16\x00\x02\x00\x17\x00\x04\x00\x02\x00\x06\x00\x04\x00\x02\x00\x06\x00\x01\x00\x03\x00\x02\x00\x02\x00\x02\x00\x02\x00\x19\x00\x03\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x0c\x00\x16\x00\x03\x00\x02\x00\x02\x00\x02\x00\x19\x00\x03\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x0c\x00\xdc\x00\x03\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x0c\x00\xde\x00\x03\x00\xdd\x00\x4b\x00\x6c\x00\x03\x00\x03\x00\x6c\x00\x16\x00\xde\x00\x0c\x00\x01\x00\x06\x00\x06\x00\x0a\x00\x6c\x00\x03\x00\x60\x00\x7a\x00\x16\x00\x6b\x00\x7a\x00\x17\x00\x03\x00\x6b\x00\x68\x00\x73\x00\xd7\x00\x17\x00\x7a\x00\x73\x00\x17\x00\xbf\x00\xc0\x00\x79\x00\x6f\x00\xc3\x00\x6d\x00\x79\x00\x76\x00\x73\x00\x73\x00\xdc\x00\x6f\x00\x6f\x00\x6f\x00\x2a\x00\x6f\x00\x2c\x00\x7d\x00\x0a\x00\x7b\x00\x73\x00\x17\x00\x71\x00\x75\x00\x74\x00\x7d\x00\x7d\x00\x7d\x00\x72\x00\x7d\x00\x18\x00\x72\x00\x17\x00\x71\x00\x73\x00\x1b\x00\x73\x00\x71\x00\x71\x00\x71\x00\x71\x00\x47\x00\x47\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x46\x00\x4e\x00\x4e\x00\x71\x00\x71\x00\x71\x00\x18\x00\x46\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x3b\x00\x18\x00\x73\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x18\x00\x18\x00\x73\x00\x19\x00\x73\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\x73\x00\xc2\x00\xc3\x00\x73\x00\xc5\x00\xc6\x00\xbf\x00\xc0\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xbc\x00\xbd\x00\xbe\x00\x73\x00\xd8\x00\xd8\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\x73\x00\xc2\x00\xc3\x00\x73\x00\xc5\x00\xc6\x00\xbc\x00\xbd\x00\xbe\x00\xca\x00\xcb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\x6c\x00\xc2\x00\xc3\x00\x01\x00\xc5\x00\xc6\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\x73\x00\xc2\x00\xc3\x00\x7a\x00\xc5\x00\xc6\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\x73\x00\xc2\x00\xc3\x00\x01\x00\xc5\x00\x04\x00\x05\x00\x11\x00\x01\x00\x13\x00\x73\x00\x73\x00\x73\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x04\x00\x05\x00\xd7\x00\xd8\x00\xd8\x00\xd9\x00\xbf\x00\xc0\x00\xc1\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x02\x00\x05\x00\x04\x00\x02\x00\x06\x00\x04\x00\xd7\x00\x06\x00\xc1\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\x0c\x00\x02\x00\x02\x00\x04\x00\x04\x00\x06\x00\x06\x00\xc1\x00\x14\x00\x15\x00\xdc\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\x01\x00\x01\x00\x04\x00\x05\x00\xd8\x00\xd9\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0c\x00\xd7\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\xba\x00\x01\x00\x06\x00\x07\x00\x08\x00\x09\x00\x06\x00\x07\x00\x08\x00\x09\x00\x01\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\xba\x00\x01\x00\x02\x00\x01\x00\x06\x00\x07\x00\x08\x00\x09\x00\x06\x00\x07\x00\x08\x00\x09\x00\x01\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\x02\x00\x02\x00\x02\x00\x04\x00\x04\x00\x06\x00\x06\x00\x01\x00\xbf\x00\xc0\x00\x01\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\x02\x00\x02\x00\x02\x00\x04\x00\x04\x00\x06\x00\x06\x00\xca\x00\xcb\x00\xc7\x00\xc8\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\x02\x00\x02\x00\x02\x00\x04\x00\x04\x00\x06\x00\x06\x00\x01\x00\x02\x00\xd7\x00\xd8\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\x02\x00\x02\x00\x02\x00\x04\x00\x04\x00\x06\x00\x06\x00\x01\x00\x02\x00\xd7\x00\xd8\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\x02\x00\x02\x00\x02\x00\x04\x00\x04\x00\x06\x00\x06\x00\x04\x00\x05\x00\xd7\x00\xd8\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\xd7\x00\x02\x00\x02\x00\x04\x00\x04\x00\x06\x00\x06\x00\xb9\x00\xba\x00\x01\x00\xc4\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x05\x00\x02\x00\x02\x00\x04\x00\x04\x00\x06\x00\x06\x00\x02\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x04\x00\x05\x00\xbb\x00\x02\x00\x01\x00\x04\x00\x02\x00\x06\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x04\x00\x05\x00\x01\x00\x02\x00\xb9\x00\xba\x00\x01\x00\x02\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x04\x00\x05\x00\x01\x00\x02\x00\x01\x00\x02\x00\xd7\x00\xd8\x00\x01\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x04\x00\x05\x00\x01\x00\x02\x00\x01\x00\x02\x00\xb9\x00\xba\x00\x01\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\x05\x00\x01\x00\x02\x00\x04\x00\x05\x00\x01\x00\x02\x00\xc1\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x05\x00\x04\x00\x05\x00\x5e\x00\x5f\x00\x00\x00\x01\x00\xdc\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x05\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x01\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x05\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\xdd\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x05\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x01\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x05\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\xda\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x05\x00\x00\x00\x01\x00\x00\x00\x01\x00\x14\x00\x15\x00\xd8\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xd8\x00\xd7\x00\xbb\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x18\x00\x18\x00\x0a\x00\x19\x00\x06\x00\x0a\x00\xd8\x00\x0a\x00\x4b\x00\x0a\x00\x0e\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x6e\x00\x0a\x00\x69\x00\x02\x00\x0a\x00\x1b\x00\x03\x00\x1b\x00\x0a\x00\x1b\x00\x1b\x00\x06\x00\x1b\x00\x1c\x00\x7c\x00\x2a\x00\x77\x00\x06\x00\x2a\x00\x0b\x00\x1d\x00\x01\x00\x21\x00\x6d\x00\x02\x00\x1b\x00\x2a\x00\x0e\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2e\x00\x2a\x00\x39\x00\x3a\x00\x2a\x00\x7b\x00\x06\x00\x37\x00\x01\x00\x3b\x00\x06\x00\x2d\x00\x44\x00\x43\x00\x45\x00\x43\x00\x41\x00\x06\x00\x49\x00\x40\x00\x0e\x00\x42\x00\x42\x00\x44\x00\x44\x00\x4e\x00\x51\x00\x50\x00\x57\x00\x02\x00\x55\x00\x56\x00\xdd\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x39\x00\x3a\x00\x73\x00\x73\x00\x73\x00\x62\x00\x63\x00\x64\x00\x65\x00\xdc\x00\x67\x00\x57\x00\x45\x00\x4e\x00\x4f\x00\x50\x00\x49\x00\x52\x00\x0e\x00\x4e\x00\x4f\x00\x50\x00\xd7\x00\x52\x00\x51\x00\x39\x00\x3a\x00\x02\x00\x55\x00\x56\x00\x4b\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x4a\x00\x45\x00\x0a\x00\x4d\x00\x4e\x00\x49\x00\x63\x00\x64\x00\x4e\x00\x66\x00\x50\x00\x4a\x00\x02\x00\x51\x00\x4d\x00\x4e\x00\x0a\x00\x55\x00\x56\x00\x0e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x39\x00\x3a\x00\x02\x00\x6d\x00\x0a\x00\x60\x00\x63\x00\x0a\x00\x0a\x00\x2a\x00\xdc\x00\x0a\x00\x45\x00\x68\x00\x02\x00\x02\x00\x49\x00\x7b\x00\x33\x00\x0e\x00\x35\x00\x28\x00\x37\x00\x2a\x00\x51\x00\x1f\x00\x0a\x00\x76\x00\x55\x00\x56\x00\x02\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x2a\x00\x39\x00\x3a\x00\x2a\x00\x2a\x00\x69\x00\x63\x00\x2a\x00\x0e\x00\x2f\x00\x30\x00\xd7\x00\xdb\x00\x45\x00\x0a\x00\x0a\x00\x02\x00\x49\x00\x35\x00\x77\x00\x37\x00\x02\x00\x2a\x00\x0a\x00\x02\x00\x51\x00\x39\x00\x3a\x00\x30\x00\x55\x00\x56\x00\x69\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\xc2\x00\x45\x00\x02\x00\x1b\x00\x0a\x00\x49\x00\x63\x00\x02\x00\x77\x00\x2a\x00\x2a\x00\xdc\x00\xdc\x00\x51\x00\x39\x00\x3a\x00\x30\x00\x55\x00\x56\x00\x2b\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x0a\x00\x45\x00\x3c\x00\x3d\x00\x3e\x00\x49\x00\x40\x00\x26\x00\x42\x00\x28\x00\x44\x00\x2a\x00\xd7\x00\x51\x00\x0a\x00\x69\x00\x0a\x00\x55\x00\x56\x00\x0a\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x6a\x00\x24\x00\x6b\x00\x26\x00\x77\x00\x28\x00\x1b\x00\x2a\x00\x1b\x00\x1e\x00\x1a\x00\x1b\x00\x6f\x00\x20\x00\x78\x00\x22\x00\x79\x00\x6f\x00\x6b\x00\x6b\x00\x6b\x00\x6a\x00\xdc\x00\xd7\x00\x69\x00\x29\x00\x7d\x00\x6f\x00\x6b\x00\x6b\x00\x6b\x00\x7d\x00\x79\x00\x79\x00\x79\x00\x78\x00\x6f\x00\x6b\x00\x77\x00\x6f\x00\x6b\x00\x7d\x00\x79\x00\x79\x00\x79\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x7d\x00\x79\x00\x6b\x00\x7d\x00\x79\x00\x6b\x00\x6b\x00\x6f\x00\x6b\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x6b\x00\x6b\x00\x79\x00\x6b\x00\x6b\x00\x79\x00\x79\x00\x7d\x00\x79\x00\x02\x00\x02\x00\xdc\x00\x02\x00\x02\x00\x79\x00\x79\x00\x02\x00\x79\x00\x79\x00\x02\x00\xd7\x00\x02\x00\xdc\x00\x02\x00\xdc\x00\x02\x00\xdc\x00\x02\x00\xdc\x00\x02\x00\x02\x00\xd7\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x01\x00\x01\x00\xdc\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\xd8\x00\x01\x00\xd7\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\xba\x00\x02\x00\x01\x00\x01\x00\xba\x00\x01\x00\x01\x00\xd8\x00\x02\x00\xba\x00\xd7\x00\x02\x00\x02\x00\xba\x00\x02\x00\xd7\x00\xba\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x0a\x00\x01\x00\xba\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x01\x00\xd7\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\xd7\x00\xba\x00\x02\x00\x05\x00\x02\x00\x02\x00\x02\x00\x01\x00\xb9\x00\x02\x00\x02\x00\x02\x00\x01\x00\xd7\x00\x02\x00\x01\x00\x00\x00\x02\x00\x05\x00\x70\x00\x61\x00\x53\x00\x00\x00\x00\x00\x23\x00\x0f\x00\x07\x00\x09\x00\x08\x00\x00\x00\x00\x00\x5e\x00\x48\x00\x00\x00\x4f\x00\x4c\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x0b\x00\x5d\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x32\x00\x03\x00\xff\xff\x03\x00\x03\x00\x03\x00\x03\x00\x0b\x00\x38\x00\x22\x00\x03\x00\x03\x00\x03\x00\xff\xff\x64\x00\xff\xff\x64\x00\xff\xff\x29\x00\x03\x00\xff\xff\x22\x00\x25\x00\x25\x00\xff\xff\x64\x00\x64\x00\x10\x00\x12\x00\xff\xff\x10\x00\x13\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x15\x00\xff\xff\xff\xff\x3f\x00\x3f\x00\xff\xff\xff\xff\xff\xff\x3f\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\xff\xff\x34\x00\x36\x00\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\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\x70\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++happyTable :: HappyAddr+happyTable = HappyA# "\x00\x00\x1a\x00\x0a\x01\x0f\x01\x8b\x01\xb2\x01\xab\x01\x7e\x02\x8a\x01\xec\x02\x1b\x00\x3e\x00\x0b\x01\x98\x01\x49\x00\x40\x00\x54\x01\x63\x01\x87\x01\x3e\x00\x89\x01\x43\x00\x3e\x00\x40\x00\x43\x00\x49\x00\x40\x00\x0a\x00\x4e\x01\x49\x00\x49\x00\x49\x00\x49\x00\x8e\x01\x1a\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x1b\x00\x86\x01\xe5\x01\x49\x00\x49\x00\x49\x00\x8c\x01\x1a\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x1b\x00\x05\x00\x1a\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x1b\x00\xff\xff\x1a\x00\x27\x00\x09\x02\x4f\x00\x0f\x01\x0f\x01\x3c\x00\x7c\x01\xff\xff\x1b\x00\x26\x00\x04\x01\x04\x01\x43\x01\x2d\x01\x8d\x02\x05\x00\x3d\x00\x79\x01\xa9\x01\x3d\x00\x88\x01\x8d\x02\x56\x01\x06\x00\x7a\x01\x42\x00\x85\x01\x3d\x00\x7a\x01\x84\x01\x5a\x01\x5b\x01\x57\x01\xb1\x01\x5c\x01\xd7\x01\x57\x01\x07\x00\x7a\x01\x78\x01\x05\x00\xb3\x01\xac\x01\x7f\x02\x99\x02\xed\x02\x9a\x02\xad\x01\x51\x00\xd8\x01\x7e\x01\x7b\x01\x4e\x00\x99\x01\x64\x01\xad\x01\xad\x01\xad\x01\x45\x00\xad\x01\x8f\x01\x44\x00\x77\x01\x4d\x00\x7a\x01\x52\x00\x7e\x01\x4c\x00\x4b\x00\x4a\x00\x2c\x01\x10\x01\x86\x02\x2a\x01\x29\x01\x20\x01\x1f\x01\x1e\x01\x69\x01\x68\x01\x67\x01\x8e\x02\x8c\x02\xbb\x02\x31\x01\xf3\x01\xf2\x01\x8d\x01\xba\x02\xf1\x01\x4e\x02\x49\x02\x44\x02\x43\x02\x32\x02\x31\x02\x30\x02\x53\x00\x83\x01\x7a\x01\x2f\x02\xc9\x02\xc6\x02\xe1\x02\xdf\x02\xdd\x02\x12\x03\x11\x03\x82\x01\x81\x01\x7a\x01\x80\x01\x78\x01\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x78\x01\x21\x00\x22\x00\x78\x01\x23\x00\x2e\x00\x55\x01\x56\x01\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\x4f\x01\x50\x01\x51\x01\x78\x01\x43\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x75\x01\x21\x00\x22\x00\x78\x01\x23\x00\x2e\x00\xe6\x01\xe7\x01\xe8\x01\x30\x00\x31\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x2e\x01\x21\x00\x22\x00\x29\x01\x23\x00\x24\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x75\x01\x21\x00\x22\x00\x3d\x00\x23\x00\x2e\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x75\x01\x21\x00\x22\x00\x28\x01\x23\x00\xa4\x01\xa5\x01\x3f\x02\x27\x01\x40\x02\x75\x01\x75\x01\x7e\x01\xa6\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\xa4\x01\xa5\x01\x42\x00\x43\x00\x6f\x01\x70\x01\xa7\x01\xa8\x01\xa9\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x3e\x00\xa5\x01\x3f\x00\x3e\x00\x40\x00\x9b\x01\x42\x00\x40\x00\xa9\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\xce\x01\xb2\x02\x3e\x00\x3e\x00\x9a\x01\x97\x01\x40\x00\x40\x00\xa9\x01\xb3\x02\xb4\x02\x05\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\xcf\x01\xd0\x01\xc9\x01\x12\x01\xb6\x02\xb7\x02\x6c\x01\x6d\x01\x13\x01\x14\x01\x15\x01\x16\x01\xb8\x02\x42\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\xc5\x01\xca\x01\x90\x02\x13\x01\x14\x01\x15\x01\x16\x01\x13\x01\x14\x01\x15\x01\x16\x01\x26\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x12\x01\xc6\x01\x55\x00\x56\x00\x90\x02\x13\x01\x14\x01\x15\x01\x16\x01\x13\x01\x14\x01\x15\x01\x16\x01\x25\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x25\x02\x26\x02\x3e\x00\x3e\x00\x94\x01\x93\x01\x40\x00\x40\x00\x24\x01\x5f\x01\x60\x01\x23\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x21\x02\x22\x02\x3e\x00\x3e\x00\x92\x01\x91\x01\x40\x00\x40\x00\x30\x00\x31\x00\x30\x01\x31\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x6d\x02\x6e\x02\x3e\x00\x3e\x00\x90\x01\xeb\x01\x40\x00\x40\x00\xf6\x01\xf7\x01\x42\x00\x43\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x55\x00\x56\x00\x3e\x00\x3e\x00\xea\x01\xe9\x01\x40\x00\x40\x00\xd2\x01\xd3\x01\x42\x00\x43\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x64\x02\x65\x02\x3e\x00\x3e\x00\xe8\x01\xb5\x01\x40\x00\x40\x00\x42\x02\x43\x02\x42\x00\x43\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\xdf\x01\x42\x00\x3e\x00\x3e\x00\xb0\x01\x53\x02\x40\x00\x40\x00\xcf\x01\xd0\x01\x22\x01\x4b\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x94\x02\x3e\x00\x3e\x00\x29\x02\x9d\x02\x40\x00\x40\x00\x1e\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\xbb\x01\xbc\x01\x95\x02\x3e\x00\x1d\x01\xea\x02\x1b\x01\x40\x00\xbd\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x1c\x02\x1d\x02\x69\x02\x6a\x02\xcf\x01\xd0\x01\xf9\x02\xfa\x02\x1e\x02\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\xbb\x01\xbc\x01\xfc\x02\xfd\x02\xf9\x02\xfa\x02\x42\x00\x43\x00\x1a\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x1c\x02\x1d\x02\xd2\x01\xd3\x01\xe4\x02\xe5\x02\xcf\x01\xd0\x01\x19\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x18\x01\x52\x02\xd2\x01\xd3\x01\xb6\x02\xb7\x02\x04\x03\x05\x03\xa9\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x4d\x02\xb6\x02\xb7\x02\x0a\x00\x0b\x00\x46\x00\x48\x00\x05\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x48\x02\x46\x00\x47\x00\x46\x00\x16\x01\x46\x00\xe1\x01\x04\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x9c\x02\x46\x00\xe0\x01\x46\x00\xda\x01\x46\x00\xd9\x01\x51\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x98\x02\x46\x00\xd5\x01\x46\x00\xd4\x01\x46\x00\xaf\x01\x97\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\xbc\x01\x46\x00\xae\x01\x46\x00\x5b\x02\x46\x00\x3c\x02\x77\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x1d\x02\x46\x00\x38\x02\x46\x00\x35\x02\x1b\x03\xb4\x02\x74\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x72\x01\x42\x00\x95\x02\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x7f\x01\x74\x01\x43\x01\x7d\x01\x04\x01\x43\x01\x43\x00\x51\x00\xf7\x01\x51\x00\x0c\x00\x51\x00\x51\x00\x43\x01\x51\x00\x43\x01\x43\x01\x43\x01\x43\x01\x07\x02\x43\x01\x05\x02\x67\x01\x43\x01\x61\x02\x66\x01\x61\x02\x51\x00\x52\x00\x6a\x02\x04\x01\xc2\x01\xc3\x01\x08\x02\x44\x01\xf0\x01\x04\x01\x9c\x01\x0b\x01\x4f\x02\x62\x01\x45\x02\xd7\x01\x61\x01\x22\x02\x17\x02\x0c\x00\x95\x02\x9c\x01\x9c\x01\x46\x02\x96\x02\x50\x02\x0d\x00\x0e\x00\x44\x01\xd8\x01\x04\x01\xfe\x02\x52\x01\x65\x02\x04\x01\x23\x02\xd4\x02\x62\x02\x0f\x00\xd6\x02\x6b\x02\x04\x01\x10\x00\xd2\x02\x0c\x00\xa1\x01\xd0\x02\xa2\x01\xa2\x01\x05\x01\x11\x00\x8b\x02\x4b\x01\x5d\x01\x12\x00\x13\x00\x42\x01\x14\x00\x15\x00\x16\x00\x17\x00\x27\x00\x0d\x00\x0e\x00\x75\x01\x75\x01\x7e\x01\x28\x00\x29\x00\x2a\x00\x2b\x00\x05\x00\x2c\x00\x45\x01\x0f\x00\x05\x01\x06\x01\x07\x01\x10\x00\x08\x01\x0c\x00\x05\x01\x06\x01\x07\x01\x42\x00\x81\x02\x11\x00\x0d\x00\x0e\x00\x0b\x02\x12\x00\x13\x00\xd6\x01\x14\x00\x15\x00\x16\x00\x17\x00\x27\x00\x0b\x01\x0f\x00\x43\x01\x0c\x01\x0d\x01\x10\x00\x37\x01\x38\x01\x05\x01\x39\x01\xbc\x02\x84\x02\x07\x02\x11\x00\x0c\x01\x0d\x01\x43\x01\x12\x00\x13\x00\x0c\x00\x14\x00\x15\x00\x16\x00\x17\x00\x27\x00\x0d\x00\x0e\x00\x05\x02\xd7\x01\x43\x01\x3e\x01\x3c\x01\x43\x01\x43\x01\x17\x02\x05\x00\x43\x01\x0f\x00\x06\x00\x03\x02\x02\x02\x10\x00\xd8\x01\x18\x02\x0c\x00\x19\x02\xda\x02\x1a\x02\xb9\x01\x11\x00\x4a\x02\x43\x01\x07\x00\x12\x00\x13\x00\xfc\x01\x14\x00\x15\x00\x16\x00\x17\x00\x27\x00\x4b\x02\x0d\x00\x0e\x00\x37\x02\x90\x02\x03\x02\x3b\x01\x17\x02\x0c\x00\x91\x02\x92\x02\x42\x00\xbf\x01\x0f\x00\x43\x01\x43\x01\xfb\x01\x10\x00\xff\x02\xf0\x01\x1a\x02\xfa\x01\x90\x02\x51\x00\xed\x01\x11\x00\x0d\x00\x0e\x00\xf0\x02\x12\x00\x13\x00\xf8\x01\x14\x00\x15\x00\x16\x00\x17\x00\x27\x00\xd4\x01\x0f\x00\xe0\x01\x1e\x02\x43\x01\x10\x00\x3a\x01\xab\x01\xf0\x01\x9c\x01\x90\x02\x05\x00\x05\x00\x11\x00\x0d\x00\x0e\x00\x16\x03\x12\x00\x13\x00\x1f\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x43\x01\x0f\x00\x9d\x01\x9e\x01\x9f\x01\x10\x00\xa0\x01\xdb\x02\xa1\x01\xb8\x01\xa2\x01\xb9\x01\x42\x00\x11\x00\x51\x00\xef\x01\x51\x00\x12\x00\x13\x00\x51\x00\x14\x00\x15\x00\x16\x00\x17\x00\x42\x01\xed\x01\xb6\x01\xb4\x01\xb7\x01\xf0\x01\xb8\x01\xc6\x01\xb9\x01\xca\x01\xc7\x01\xdb\x01\xdc\x01\x55\x02\xcb\x01\xee\x01\xcc\x01\x57\x01\x54\x02\x52\x02\x4d\x02\x48\x02\x3e\x02\x05\x00\x42\x00\xa0\x02\xdd\x01\xad\x01\x9f\x02\x9c\x02\x98\x02\x88\x02\xad\x01\x57\x01\x57\x01\x57\x01\xee\x01\x9e\x02\x7c\x02\xf0\x01\x7d\x02\x7b\x02\xad\x01\x57\x01\x57\x01\x57\x01\x78\x02\x75\x02\xd5\x02\xd1\x02\xab\x02\xad\x01\x57\x01\xaa\x02\xad\x01\x57\x01\xa7\x02\xe0\x02\xeb\x02\xde\x02\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\xdc\x02\x01\x03\x57\x01\x00\x03\x1a\x03\x57\x01\x57\x01\xad\x01\x57\x01\x5f\x02\x5d\x02\x05\x00\x5b\x02\x5a\x02\x57\x01\x57\x01\x58\x02\x57\x01\x57\x01\x57\x02\x42\x00\x3e\x02\x05\x00\x3c\x02\x3b\x02\x3a\x02\x05\x00\x37\x02\x05\x00\x35\x02\x34\x02\x42\x00\x2f\x02\x2e\x02\x2d\x02\x2c\x02\x2b\x02\x29\x02\xdf\x01\x27\x02\x05\x00\x17\x02\x16\x02\x15\x02\x14\x02\x13\x02\x12\x02\x11\x02\x10\x02\x0f\x02\x0e\x02\x0c\x02\x43\x00\x8b\x02\x42\x00\x88\x02\x86\x02\x84\x02\x83\x02\x81\x02\x73\x02\x72\x02\x71\x02\x6f\x02\x67\x02\x77\x02\x61\x02\x8b\x02\xcc\x02\x74\x02\xce\x02\xcc\x02\x43\x00\xc9\x02\xc8\x02\x42\x00\xc6\x02\xc4\x02\xc5\x02\xc1\x02\x42\x00\xc2\x02\xbf\x02\xbe\x02\xba\x02\xb9\x02\xb2\x02\xb1\x02\xb0\x02\xaf\x02\xae\x02\x11\x03\xa9\x02\xa6\x02\xa5\x02\xa4\x02\xa3\x02\xa2\x02\xf7\x02\xf6\x02\xf5\x02\xf4\x02\xf3\x02\xf2\x02\xef\x02\x42\x00\xea\x02\xe9\x02\xe8\x02\xe6\x02\xda\x02\xd9\x02\xd8\x02\x42\x00\x10\x03\x0c\x03\x43\x02\x0b\x03\x09\x03\x07\x03\x06\x03\x18\x03\x1a\x03\x19\x03\x16\x03\x15\x03\x42\x00\x1d\x03\xef\x02\x2b\x01\x1e\x03\x72\x01\xc1\x01\x24\x00\x5d\x01\x40\x01\x3f\x01\x95\x01\x02\x01\x70\x01\x6a\x01\x6d\x01\x33\x01\x32\x01\x08\x00\x52\x01\x00\x02\x62\x01\x58\x01\x4c\x01\xff\x01\xfe\x01\xfd\x01\xfc\x01\xd0\x01\x89\x02\x1b\x01\xe2\x01\x5f\x02\x5d\x02\x58\x02\x0c\x02\xf4\x01\x7a\x02\x00\x00\x77\x02\x74\x02\xbf\x02\xac\x02\xd3\x02\xe3\x01\x79\x02\xa9\x02\xa6\x02\xef\x02\x00\x00\x3d\x01\x00\x00\x36\x01\x00\x00\x27\x02\x09\x03\x00\x00\xc2\x02\xce\x02\xca\x02\x00\x00\x35\x01\x34\x01\xe6\x02\xe2\x02\x00\x00\x0c\x03\x0d\x03\x13\x03\x00\x00\x00\x00\x00\x00\xcc\x02\x00\x00\x07\x03\x00\x00\x00\x00\x6f\x02\x67\x02\x00\x00\x00\x00\x00\x00\xcf\x02\x0e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\x02\x00\x00\xf7\x02\xfa\x02\x00\x00\x00\x00\x00\x00\x00\x00\x02\x03\x00\x00\x00\x00\x00\x00\xc0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x01\x00\x00\x00\x00\x00\x00\xbd\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyReduceArr = Happy_Data_Array.array (3, 425) [+	(3 , happyReduce_3),+	(4 , happyReduce_4),+	(5 , happyReduce_5),+	(6 , happyReduce_6),+	(7 , happyReduce_7),+	(8 , happyReduce_8),+	(9 , happyReduce_9),+	(10 , happyReduce_10),+	(11 , happyReduce_11),+	(12 , happyReduce_12),+	(13 , happyReduce_13),+	(14 , happyReduce_14),+	(15 , happyReduce_15),+	(16 , happyReduce_16),+	(17 , happyReduce_17),+	(18 , happyReduce_18),+	(19 , happyReduce_19),+	(20 , happyReduce_20),+	(21 , happyReduce_21),+	(22 , happyReduce_22),+	(23 , happyReduce_23),+	(24 , happyReduce_24),+	(25 , happyReduce_25),+	(26 , happyReduce_26),+	(27 , happyReduce_27),+	(28 , happyReduce_28),+	(29 , happyReduce_29),+	(30 , happyReduce_30),+	(31 , happyReduce_31),+	(32 , happyReduce_32),+	(33 , happyReduce_33),+	(34 , happyReduce_34),+	(35 , happyReduce_35),+	(36 , happyReduce_36),+	(37 , happyReduce_37),+	(38 , happyReduce_38),+	(39 , happyReduce_39),+	(40 , happyReduce_40),+	(41 , happyReduce_41),+	(42 , happyReduce_42),+	(43 , happyReduce_43),+	(44 , happyReduce_44),+	(45 , happyReduce_45),+	(46 , happyReduce_46),+	(47 , happyReduce_47),+	(48 , happyReduce_48),+	(49 , happyReduce_49),+	(50 , happyReduce_50),+	(51 , happyReduce_51),+	(52 , happyReduce_52),+	(53 , happyReduce_53),+	(54 , happyReduce_54),+	(55 , happyReduce_55),+	(56 , happyReduce_56),+	(57 , happyReduce_57),+	(58 , happyReduce_58),+	(59 , happyReduce_59),+	(60 , happyReduce_60),+	(61 , happyReduce_61),+	(62 , happyReduce_62),+	(63 , happyReduce_63),+	(64 , happyReduce_64),+	(65 , happyReduce_65),+	(66 , happyReduce_66),+	(67 , happyReduce_67),+	(68 , happyReduce_68),+	(69 , happyReduce_69),+	(70 , happyReduce_70),+	(71 , happyReduce_71),+	(72 , happyReduce_72),+	(73 , happyReduce_73),+	(74 , happyReduce_74),+	(75 , happyReduce_75),+	(76 , happyReduce_76),+	(77 , happyReduce_77),+	(78 , happyReduce_78),+	(79 , happyReduce_79),+	(80 , happyReduce_80),+	(81 , happyReduce_81),+	(82 , happyReduce_82),+	(83 , happyReduce_83),+	(84 , happyReduce_84),+	(85 , happyReduce_85),+	(86 , happyReduce_86),+	(87 , happyReduce_87),+	(88 , happyReduce_88),+	(89 , happyReduce_89),+	(90 , happyReduce_90),+	(91 , happyReduce_91),+	(92 , happyReduce_92),+	(93 , happyReduce_93),+	(94 , happyReduce_94),+	(95 , happyReduce_95),+	(96 , happyReduce_96),+	(97 , happyReduce_97),+	(98 , happyReduce_98),+	(99 , happyReduce_99),+	(100 , happyReduce_100),+	(101 , happyReduce_101),+	(102 , happyReduce_102),+	(103 , happyReduce_103),+	(104 , happyReduce_104),+	(105 , happyReduce_105),+	(106 , happyReduce_106),+	(107 , happyReduce_107),+	(108 , happyReduce_108),+	(109 , happyReduce_109),+	(110 , happyReduce_110),+	(111 , happyReduce_111),+	(112 , happyReduce_112),+	(113 , happyReduce_113),+	(114 , happyReduce_114),+	(115 , happyReduce_115),+	(116 , happyReduce_116),+	(117 , happyReduce_117),+	(118 , happyReduce_118),+	(119 , happyReduce_119),+	(120 , happyReduce_120),+	(121 , happyReduce_121),+	(122 , happyReduce_122),+	(123 , happyReduce_123),+	(124 , happyReduce_124),+	(125 , happyReduce_125),+	(126 , happyReduce_126),+	(127 , happyReduce_127),+	(128 , happyReduce_128),+	(129 , happyReduce_129),+	(130 , happyReduce_130),+	(131 , happyReduce_131),+	(132 , happyReduce_132),+	(133 , happyReduce_133),+	(134 , happyReduce_134),+	(135 , happyReduce_135),+	(136 , happyReduce_136),+	(137 , happyReduce_137),+	(138 , happyReduce_138),+	(139 , happyReduce_139),+	(140 , happyReduce_140),+	(141 , happyReduce_141),+	(142 , happyReduce_142),+	(143 , happyReduce_143),+	(144 , happyReduce_144),+	(145 , happyReduce_145),+	(146 , happyReduce_146),+	(147 , happyReduce_147),+	(148 , happyReduce_148),+	(149 , happyReduce_149),+	(150 , happyReduce_150),+	(151 , happyReduce_151),+	(152 , happyReduce_152),+	(153 , happyReduce_153),+	(154 , happyReduce_154),+	(155 , happyReduce_155),+	(156 , happyReduce_156),+	(157 , happyReduce_157),+	(158 , happyReduce_158),+	(159 , happyReduce_159),+	(160 , happyReduce_160),+	(161 , happyReduce_161),+	(162 , happyReduce_162),+	(163 , happyReduce_163),+	(164 , happyReduce_164),+	(165 , happyReduce_165),+	(166 , happyReduce_166),+	(167 , happyReduce_167),+	(168 , happyReduce_168),+	(169 , happyReduce_169),+	(170 , happyReduce_170),+	(171 , happyReduce_171),+	(172 , happyReduce_172),+	(173 , happyReduce_173),+	(174 , happyReduce_174),+	(175 , happyReduce_175),+	(176 , happyReduce_176),+	(177 , happyReduce_177),+	(178 , happyReduce_178),+	(179 , happyReduce_179),+	(180 , happyReduce_180),+	(181 , happyReduce_181),+	(182 , happyReduce_182),+	(183 , happyReduce_183),+	(184 , happyReduce_184),+	(185 , happyReduce_185),+	(186 , happyReduce_186),+	(187 , happyReduce_187),+	(188 , happyReduce_188),+	(189 , happyReduce_189),+	(190 , happyReduce_190),+	(191 , happyReduce_191),+	(192 , happyReduce_192),+	(193 , happyReduce_193),+	(194 , happyReduce_194),+	(195 , happyReduce_195),+	(196 , happyReduce_196),+	(197 , happyReduce_197),+	(198 , happyReduce_198),+	(199 , happyReduce_199),+	(200 , happyReduce_200),+	(201 , happyReduce_201),+	(202 , happyReduce_202),+	(203 , happyReduce_203),+	(204 , happyReduce_204),+	(205 , happyReduce_205),+	(206 , happyReduce_206),+	(207 , happyReduce_207),+	(208 , happyReduce_208),+	(209 , happyReduce_209),+	(210 , happyReduce_210),+	(211 , happyReduce_211),+	(212 , happyReduce_212),+	(213 , happyReduce_213),+	(214 , happyReduce_214),+	(215 , happyReduce_215),+	(216 , happyReduce_216),+	(217 , happyReduce_217),+	(218 , happyReduce_218),+	(219 , happyReduce_219),+	(220 , happyReduce_220),+	(221 , happyReduce_221),+	(222 , happyReduce_222),+	(223 , happyReduce_223),+	(224 , happyReduce_224),+	(225 , happyReduce_225),+	(226 , happyReduce_226),+	(227 , happyReduce_227),+	(228 , happyReduce_228),+	(229 , happyReduce_229),+	(230 , happyReduce_230),+	(231 , happyReduce_231),+	(232 , happyReduce_232),+	(233 , happyReduce_233),+	(234 , happyReduce_234),+	(235 , happyReduce_235),+	(236 , happyReduce_236),+	(237 , happyReduce_237),+	(238 , happyReduce_238),+	(239 , happyReduce_239),+	(240 , happyReduce_240),+	(241 , happyReduce_241),+	(242 , happyReduce_242),+	(243 , happyReduce_243),+	(244 , happyReduce_244),+	(245 , happyReduce_245),+	(246 , happyReduce_246),+	(247 , happyReduce_247),+	(248 , happyReduce_248),+	(249 , happyReduce_249),+	(250 , happyReduce_250),+	(251 , happyReduce_251),+	(252 , happyReduce_252),+	(253 , happyReduce_253),+	(254 , happyReduce_254),+	(255 , happyReduce_255),+	(256 , happyReduce_256),+	(257 , happyReduce_257),+	(258 , happyReduce_258),+	(259 , happyReduce_259),+	(260 , happyReduce_260),+	(261 , happyReduce_261),+	(262 , happyReduce_262),+	(263 , happyReduce_263),+	(264 , happyReduce_264),+	(265 , happyReduce_265),+	(266 , happyReduce_266),+	(267 , happyReduce_267),+	(268 , happyReduce_268),+	(269 , happyReduce_269),+	(270 , happyReduce_270),+	(271 , happyReduce_271),+	(272 , happyReduce_272),+	(273 , happyReduce_273),+	(274 , happyReduce_274),+	(275 , happyReduce_275),+	(276 , happyReduce_276),+	(277 , happyReduce_277),+	(278 , happyReduce_278),+	(279 , happyReduce_279),+	(280 , happyReduce_280),+	(281 , happyReduce_281),+	(282 , happyReduce_282),+	(283 , happyReduce_283),+	(284 , happyReduce_284),+	(285 , happyReduce_285),+	(286 , happyReduce_286),+	(287 , happyReduce_287),+	(288 , happyReduce_288),+	(289 , happyReduce_289),+	(290 , happyReduce_290),+	(291 , happyReduce_291),+	(292 , happyReduce_292),+	(293 , happyReduce_293),+	(294 , happyReduce_294),+	(295 , happyReduce_295),+	(296 , happyReduce_296),+	(297 , happyReduce_297),+	(298 , happyReduce_298),+	(299 , happyReduce_299),+	(300 , happyReduce_300),+	(301 , happyReduce_301),+	(302 , happyReduce_302),+	(303 , happyReduce_303),+	(304 , happyReduce_304),+	(305 , happyReduce_305),+	(306 , happyReduce_306),+	(307 , happyReduce_307),+	(308 , happyReduce_308),+	(309 , happyReduce_309),+	(310 , happyReduce_310),+	(311 , happyReduce_311),+	(312 , happyReduce_312),+	(313 , happyReduce_313),+	(314 , happyReduce_314),+	(315 , happyReduce_315),+	(316 , happyReduce_316),+	(317 , happyReduce_317),+	(318 , happyReduce_318),+	(319 , happyReduce_319),+	(320 , happyReduce_320),+	(321 , happyReduce_321),+	(322 , happyReduce_322),+	(323 , happyReduce_323),+	(324 , happyReduce_324),+	(325 , happyReduce_325),+	(326 , happyReduce_326),+	(327 , happyReduce_327),+	(328 , happyReduce_328),+	(329 , happyReduce_329),+	(330 , happyReduce_330),+	(331 , happyReduce_331),+	(332 , happyReduce_332),+	(333 , happyReduce_333),+	(334 , happyReduce_334),+	(335 , happyReduce_335),+	(336 , happyReduce_336),+	(337 , happyReduce_337),+	(338 , happyReduce_338),+	(339 , happyReduce_339),+	(340 , happyReduce_340),+	(341 , happyReduce_341),+	(342 , happyReduce_342),+	(343 , happyReduce_343),+	(344 , happyReduce_344),+	(345 , happyReduce_345),+	(346 , happyReduce_346),+	(347 , happyReduce_347),+	(348 , happyReduce_348),+	(349 , happyReduce_349),+	(350 , happyReduce_350),+	(351 , happyReduce_351),+	(352 , happyReduce_352),+	(353 , happyReduce_353),+	(354 , happyReduce_354),+	(355 , happyReduce_355),+	(356 , happyReduce_356),+	(357 , happyReduce_357),+	(358 , happyReduce_358),+	(359 , happyReduce_359),+	(360 , happyReduce_360),+	(361 , happyReduce_361),+	(362 , happyReduce_362),+	(363 , happyReduce_363),+	(364 , happyReduce_364),+	(365 , happyReduce_365),+	(366 , happyReduce_366),+	(367 , happyReduce_367),+	(368 , happyReduce_368),+	(369 , happyReduce_369),+	(370 , happyReduce_370),+	(371 , happyReduce_371),+	(372 , happyReduce_372),+	(373 , happyReduce_373),+	(374 , happyReduce_374),+	(375 , happyReduce_375),+	(376 , happyReduce_376),+	(377 , happyReduce_377),+	(378 , happyReduce_378),+	(379 , happyReduce_379),+	(380 , happyReduce_380),+	(381 , happyReduce_381),+	(382 , happyReduce_382),+	(383 , happyReduce_383),+	(384 , happyReduce_384),+	(385 , happyReduce_385),+	(386 , happyReduce_386),+	(387 , happyReduce_387),+	(388 , happyReduce_388),+	(389 , happyReduce_389),+	(390 , happyReduce_390),+	(391 , happyReduce_391),+	(392 , happyReduce_392),+	(393 , happyReduce_393),+	(394 , happyReduce_394),+	(395 , happyReduce_395),+	(396 , happyReduce_396),+	(397 , happyReduce_397),+	(398 , happyReduce_398),+	(399 , happyReduce_399),+	(400 , happyReduce_400),+	(401 , happyReduce_401),+	(402 , happyReduce_402),+	(403 , happyReduce_403),+	(404 , happyReduce_404),+	(405 , happyReduce_405),+	(406 , happyReduce_406),+	(407 , happyReduce_407),+	(408 , happyReduce_408),+	(409 , happyReduce_409),+	(410 , happyReduce_410),+	(411 , happyReduce_411),+	(412 , happyReduce_412),+	(413 , happyReduce_413),+	(414 , happyReduce_414),+	(415 , happyReduce_415),+	(416 , happyReduce_416),+	(417 , happyReduce_417),+	(418 , happyReduce_418),+	(419 , happyReduce_419),+	(420 , happyReduce_420),+	(421 , happyReduce_421),+	(422 , happyReduce_422),+	(423 , happyReduce_423),+	(424 , happyReduce_424),+	(425 , happyReduce_425)+	]++happy_n_terms = 223 :: Int+happy_n_nonterms = 126 :: Int++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_3 = happyMonadReduce 1# 0# happyReduction_3+happyReduction_3 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOutTok happy_x_1 of { (Lexeme _ (TStringLit happy_var_1)) -> +	(+        case TLEncoding.decodeUtf8' happy_var_1 of+            Right t -> Right t+            Left err -> Left "invalid utf8 string")})+	) (\r -> happyReturn (happyIn6 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_4 = happySpecReduce_1  1# happyReduction_4+happyReduction_4 happy_x_1+	 =  case happyOut6 happy_x_1 of { happy_var_1 -> +	happyIn7+		 (happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_5 = happySpecReduce_1  2# happyReduction_5+happyReduction_5 happy_x_1+	 =  case happyOutTok happy_x_1 of { (Lexeme _ (TId happy_var_1)) -> +	happyIn8+		 (Ident (TLEncoding.decodeUtf8 happy_var_1)+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_6 = happySpecReduce_1  3# happyReduction_6+happyReduction_6 happy_x_1+	 =  happyIn9+		 (I32+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_7 = happySpecReduce_1  3# happyReduction_7+happyReduction_7 happy_x_1+	 =  happyIn9+		 (I64+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_8 = happySpecReduce_1  3# happyReduction_8+happyReduction_8 happy_x_1+	 =  happyIn9+		 (F32+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_9 = happySpecReduce_1  3# happyReduction_9+happyReduction_9 happy_x_1+	 =  happyIn9+		 (F64+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_10 = happySpecReduce_1  4# happyReduction_10+happyReduction_10 happy_x_1+	 =  case happyOut12 happy_x_1 of { happy_var_1 -> +	happyIn10+		 (Index happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_11 = happySpecReduce_1  4# happyReduction_11+happyReduction_11 happy_x_1+	 =  case happyOut8 happy_x_1 of { happy_var_1 -> +	happyIn10+		 (Named happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_12 = happyMonadReduce 1# 5# happyReduction_12+happyReduction_12 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOutTok happy_x_1 of { (Lexeme _ (TIntLit happy_var_1)) -> +	(+        if happy_var_1 >= -(2^31) && happy_var_1 < 2^32+        then Right happy_var_1+        else Left ("Int literal value is out of signed int32 boundaries: " ++ show happy_var_1))})+	) (\r -> happyReturn (happyIn11 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_13 = happyMonadReduce 1# 6# happyReduction_13+happyReduction_13 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOutTok happy_x_1 of { (Lexeme _ (TIntLit happy_var_1)) -> +	(+        if happy_var_1 >= 0 && happy_var_1 < 2^32+        then Right (fromIntegral happy_var_1)+        else Left ("Int literal value is out of unsigned int32 boundaries: " ++ show happy_var_1))})+	) (\r -> happyReturn (happyIn12 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_14 = happyMonadReduce 1# 7# happyReduction_14+happyReduction_14 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOutTok happy_x_1 of { (Lexeme _ (TIntLit happy_var_1)) -> +	(+        if happy_var_1 >= -(2^63) && happy_var_1 < 2^64+        then Right happy_var_1+        else Left ("Int literal value is out of signed int64 boundaries: " ++ show happy_var_1))})+	) (\r -> happyReturn (happyIn13 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_15 = happyMonadReduce 1# 8# happyReduction_15+happyReduction_15 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOutTok happy_x_1 of { (Lexeme _ (TIntLit happy_var_1)) -> +	(+        let maxInt = 340282356779733623858607532500980858880 in+        if happy_var_1 <= maxInt && happy_var_1 >= -maxInt+        then return $ fromIntegral happy_var_1+        else Left "constant out of range")})+	) (\r -> happyReturn (happyIn14 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_16 = happyMonadReduce 1# 8# happyReduction_16+happyReduction_16 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOutTok happy_x_1 of { (Lexeme _ (TFloatLit happy_var_1)) -> +	( asFloat happy_var_1)})+	) (\r -> happyReturn (happyIn14 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_17 = happyMonadReduce 1# 9# happyReduction_17+happyReduction_17 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOutTok happy_x_1 of { (Lexeme _ (TIntLit happy_var_1)) -> +	(+        let maxInt = round (maxFinite :: Double) in+        if happy_var_1 <= maxInt && happy_var_1 >= -maxInt+        then return $ fromIntegral happy_var_1+        else Left "constant out of range")})+	) (\r -> happyReturn (happyIn15 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_18 = happyMonadReduce 1# 9# happyReduction_18+happyReduction_18 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOutTok happy_x_1 of { (Lexeme _ (TFloatLit happy_var_1)) -> +	( asDouble happy_var_1)})+	) (\r -> happyReturn (happyIn15 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_19 = happySpecReduce_1  10# happyReduction_19+happyReduction_19 happy_x_1+	 =  happyIn16+		 (Unreachable+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_20 = happySpecReduce_1  10# happyReduction_20+happyReduction_20 happy_x_1+	 =  happyIn16+		 (Nop+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_21 = happySpecReduce_2  10# happyReduction_21+happyReduction_21 happy_x_2+	happy_x_1+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (Br happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_22 = happySpecReduce_2  10# happyReduction_22+happyReduction_22 happy_x_2+	happy_x_1+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (BrIf happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_23 = happySpecReduce_2  10# happyReduction_23+happyReduction_23 happy_x_2+	happy_x_1+	 =  case happyOut123 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (BrTable (reverse $ tail happy_var_2) (head happy_var_2)+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_24 = happySpecReduce_1  10# happyReduction_24+happyReduction_24 happy_x_1+	 =  happyIn16+		 (Return+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_25 = happySpecReduce_2  10# happyReduction_25+happyReduction_25 happy_x_2+	happy_x_1+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (Call happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_26 = happySpecReduce_1  10# happyReduction_26+happyReduction_26 happy_x_1+	 =  happyIn16+		 (Drop+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_27 = happySpecReduce_1  10# happyReduction_27+happyReduction_27 happy_x_1+	 =  happyIn16+		 (Select+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_28 = happySpecReduce_2  10# happyReduction_28+happyReduction_28 happy_x_2+	happy_x_1+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (GetLocal happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_29 = happySpecReduce_2  10# happyReduction_29+happyReduction_29 happy_x_2+	happy_x_1+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (SetLocal happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_30 = happySpecReduce_2  10# happyReduction_30+happyReduction_30 happy_x_2+	happy_x_1+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (TeeLocal happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_31 = happySpecReduce_2  10# happyReduction_31+happyReduction_31 happy_x_2+	happy_x_1+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (GetGlobal happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_32 = happySpecReduce_2  10# happyReduction_32+happyReduction_32 happy_x_2+	happy_x_1+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (SetGlobal happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_33 = happySpecReduce_2  10# happyReduction_33+happyReduction_33 happy_x_2+	happy_x_1+	 =  case happyOut30 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I32Load happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_34 = happySpecReduce_2  10# happyReduction_34+happyReduction_34 happy_x_2+	happy_x_1+	 =  case happyOut31 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I64Load happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_35 = happySpecReduce_2  10# happyReduction_35+happyReduction_35 happy_x_2+	happy_x_1+	 =  case happyOut30 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (F32Load happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_36 = happySpecReduce_2  10# happyReduction_36+happyReduction_36 happy_x_2+	happy_x_1+	 =  case happyOut31 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (F64Load happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_37 = happySpecReduce_2  10# happyReduction_37+happyReduction_37 happy_x_2+	happy_x_1+	 =  case happyOut28 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I32Load8S happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_38 = happySpecReduce_2  10# happyReduction_38+happyReduction_38 happy_x_2+	happy_x_1+	 =  case happyOut28 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I32Load8U happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_39 = happySpecReduce_2  10# happyReduction_39+happyReduction_39 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I32Load16S happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_40 = happySpecReduce_2  10# happyReduction_40+happyReduction_40 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I32Load16U happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_41 = happySpecReduce_2  10# happyReduction_41+happyReduction_41 happy_x_2+	happy_x_1+	 =  case happyOut28 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I64Load8S happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_42 = happySpecReduce_2  10# happyReduction_42+happyReduction_42 happy_x_2+	happy_x_1+	 =  case happyOut28 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I64Load8U happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_43 = happySpecReduce_2  10# happyReduction_43+happyReduction_43 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I64Load16S happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_44 = happySpecReduce_2  10# happyReduction_44+happyReduction_44 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I64Load16U happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_45 = happySpecReduce_2  10# happyReduction_45+happyReduction_45 happy_x_2+	happy_x_1+	 =  case happyOut30 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I64Load32S happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_46 = happySpecReduce_2  10# happyReduction_46+happyReduction_46 happy_x_2+	happy_x_1+	 =  case happyOut30 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I64Load32U happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_47 = happySpecReduce_2  10# happyReduction_47+happyReduction_47 happy_x_2+	happy_x_1+	 =  case happyOut30 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I32Store happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_48 = happySpecReduce_2  10# happyReduction_48+happyReduction_48 happy_x_2+	happy_x_1+	 =  case happyOut31 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I64Store happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_49 = happySpecReduce_2  10# happyReduction_49+happyReduction_49 happy_x_2+	happy_x_1+	 =  case happyOut30 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (F32Store happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_50 = happySpecReduce_2  10# happyReduction_50+happyReduction_50 happy_x_2+	happy_x_1+	 =  case happyOut31 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (F64Store happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_51 = happySpecReduce_2  10# happyReduction_51+happyReduction_51 happy_x_2+	happy_x_1+	 =  case happyOut28 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I32Store8 happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_52 = happySpecReduce_2  10# happyReduction_52+happyReduction_52 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I32Store16 happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_53 = happySpecReduce_2  10# happyReduction_53+happyReduction_53 happy_x_2+	happy_x_1+	 =  case happyOut28 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I64Store8 happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_54 = happySpecReduce_2  10# happyReduction_54+happyReduction_54 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I64Store16 happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_55 = happySpecReduce_2  10# happyReduction_55+happyReduction_55 happy_x_2+	happy_x_1+	 =  case happyOut30 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I64Store32 happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_56 = happySpecReduce_1  10# happyReduction_56+happyReduction_56 happy_x_1+	 =  happyIn16+		 (CurrentMemory+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_57 = happySpecReduce_1  10# happyReduction_57+happyReduction_57 happy_x_1+	 =  happyIn16+		 (GrowMemory+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_58 = happySpecReduce_1  10# happyReduction_58+happyReduction_58 happy_x_1+	 =  happyIn16+		 (CurrentMemory+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_59 = happySpecReduce_1  10# happyReduction_59+happyReduction_59 happy_x_1+	 =  happyIn16+		 (GrowMemory+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_60 = happySpecReduce_2  10# happyReduction_60+happyReduction_60 happy_x_2+	happy_x_1+	 =  case happyOut11 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I32Const happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_61 = happySpecReduce_2  10# happyReduction_61+happyReduction_61 happy_x_2+	happy_x_1+	 =  case happyOut13 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (I64Const happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_62 = happySpecReduce_2  10# happyReduction_62+happyReduction_62 happy_x_2+	happy_x_1+	 =  case happyOut14 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (F32Const happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_63 = happySpecReduce_2  10# happyReduction_63+happyReduction_63 happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (F64Const happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_64 = happySpecReduce_1  10# happyReduction_64+happyReduction_64 happy_x_1+	 =  happyIn16+		 (IUnOp BS32 IClz+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_65 = happySpecReduce_1  10# happyReduction_65+happyReduction_65 happy_x_1+	 =  happyIn16+		 (IUnOp BS32 ICtz+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_66 = happySpecReduce_1  10# happyReduction_66+happyReduction_66 happy_x_1+	 =  happyIn16+		 (IUnOp BS32 IPopcnt+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_67 = happySpecReduce_1  10# happyReduction_67+happyReduction_67 happy_x_1+	 =  happyIn16+		 (IBinOp BS32 IAdd+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_68 = happySpecReduce_1  10# happyReduction_68+happyReduction_68 happy_x_1+	 =  happyIn16+		 (IBinOp BS32 ISub+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_69 = happySpecReduce_1  10# happyReduction_69+happyReduction_69 happy_x_1+	 =  happyIn16+		 (IBinOp BS32 IMul+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_70 = happySpecReduce_1  10# happyReduction_70+happyReduction_70 happy_x_1+	 =  happyIn16+		 (IBinOp BS32 IDivS+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_71 = happySpecReduce_1  10# happyReduction_71+happyReduction_71 happy_x_1+	 =  happyIn16+		 (IBinOp BS32 IDivU+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_72 = happySpecReduce_1  10# happyReduction_72+happyReduction_72 happy_x_1+	 =  happyIn16+		 (IBinOp BS32 IRemS+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_73 = happySpecReduce_1  10# happyReduction_73+happyReduction_73 happy_x_1+	 =  happyIn16+		 (IBinOp BS32 IRemU+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_74 = happySpecReduce_1  10# happyReduction_74+happyReduction_74 happy_x_1+	 =  happyIn16+		 (IBinOp BS32 IAnd+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_75 = happySpecReduce_1  10# happyReduction_75+happyReduction_75 happy_x_1+	 =  happyIn16+		 (IBinOp BS32 IOr+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_76 = happySpecReduce_1  10# happyReduction_76+happyReduction_76 happy_x_1+	 =  happyIn16+		 (IBinOp BS32 IXor+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_77 = happySpecReduce_1  10# happyReduction_77+happyReduction_77 happy_x_1+	 =  happyIn16+		 (IBinOp BS32 IShl+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_78 = happySpecReduce_1  10# happyReduction_78+happyReduction_78 happy_x_1+	 =  happyIn16+		 (IBinOp BS32 IShrS+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_79 = happySpecReduce_1  10# happyReduction_79+happyReduction_79 happy_x_1+	 =  happyIn16+		 (IBinOp BS32 IShrU+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_80 = happySpecReduce_1  10# happyReduction_80+happyReduction_80 happy_x_1+	 =  happyIn16+		 (IBinOp BS32 IRotl+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_81 = happySpecReduce_1  10# happyReduction_81+happyReduction_81 happy_x_1+	 =  happyIn16+		 (IBinOp BS32 IRotr+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_82 = happySpecReduce_1  10# happyReduction_82+happyReduction_82 happy_x_1+	 =  happyIn16+		 (IUnOp BS64 IClz+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_83 = happySpecReduce_1  10# happyReduction_83+happyReduction_83 happy_x_1+	 =  happyIn16+		 (IUnOp BS64 ICtz+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_84 = happySpecReduce_1  10# happyReduction_84+happyReduction_84 happy_x_1+	 =  happyIn16+		 (IUnOp BS64 IPopcnt+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_85 = happySpecReduce_1  10# happyReduction_85+happyReduction_85 happy_x_1+	 =  happyIn16+		 (IBinOp BS64 IAdd+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_86 = happySpecReduce_1  10# happyReduction_86+happyReduction_86 happy_x_1+	 =  happyIn16+		 (IBinOp BS64 ISub+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_87 = happySpecReduce_1  10# happyReduction_87+happyReduction_87 happy_x_1+	 =  happyIn16+		 (IBinOp BS64 IMul+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_88 = happySpecReduce_1  10# happyReduction_88+happyReduction_88 happy_x_1+	 =  happyIn16+		 (IBinOp BS64 IDivS+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_89 = happySpecReduce_1  10# happyReduction_89+happyReduction_89 happy_x_1+	 =  happyIn16+		 (IBinOp BS64 IDivU+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_90 = happySpecReduce_1  10# happyReduction_90+happyReduction_90 happy_x_1+	 =  happyIn16+		 (IBinOp BS64 IRemS+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_91 = happySpecReduce_1  10# happyReduction_91+happyReduction_91 happy_x_1+	 =  happyIn16+		 (IBinOp BS64 IRemU+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_92 = happySpecReduce_1  10# happyReduction_92+happyReduction_92 happy_x_1+	 =  happyIn16+		 (IBinOp BS64 IAnd+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_93 = happySpecReduce_1  10# happyReduction_93+happyReduction_93 happy_x_1+	 =  happyIn16+		 (IBinOp BS64 IOr+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_94 = happySpecReduce_1  10# happyReduction_94+happyReduction_94 happy_x_1+	 =  happyIn16+		 (IBinOp BS64 IXor+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_95 = happySpecReduce_1  10# happyReduction_95+happyReduction_95 happy_x_1+	 =  happyIn16+		 (IBinOp BS64 IShl+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_96 = happySpecReduce_1  10# happyReduction_96+happyReduction_96 happy_x_1+	 =  happyIn16+		 (IBinOp BS64 IShrS+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_97 = happySpecReduce_1  10# happyReduction_97+happyReduction_97 happy_x_1+	 =  happyIn16+		 (IBinOp BS64 IShrU+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_98 = happySpecReduce_1  10# happyReduction_98+happyReduction_98 happy_x_1+	 =  happyIn16+		 (IBinOp BS64 IRotl+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_99 = happySpecReduce_1  10# happyReduction_99+happyReduction_99 happy_x_1+	 =  happyIn16+		 (IBinOp BS64 IRotr+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_100 = happySpecReduce_1  10# happyReduction_100+happyReduction_100 happy_x_1+	 =  happyIn16+		 (FUnOp BS32 FAbs+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_101 = happySpecReduce_1  10# happyReduction_101+happyReduction_101 happy_x_1+	 =  happyIn16+		 (FUnOp BS32 FNeg+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_102 = happySpecReduce_1  10# happyReduction_102+happyReduction_102 happy_x_1+	 =  happyIn16+		 (FUnOp BS32 FCeil+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_103 = happySpecReduce_1  10# happyReduction_103+happyReduction_103 happy_x_1+	 =  happyIn16+		 (FUnOp BS32 FFloor+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_104 = happySpecReduce_1  10# happyReduction_104+happyReduction_104 happy_x_1+	 =  happyIn16+		 (FUnOp BS32 FTrunc+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_105 = happySpecReduce_1  10# happyReduction_105+happyReduction_105 happy_x_1+	 =  happyIn16+		 (FUnOp BS32 FNearest+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_106 = happySpecReduce_1  10# happyReduction_106+happyReduction_106 happy_x_1+	 =  happyIn16+		 (FUnOp BS32 FSqrt+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_107 = happySpecReduce_1  10# happyReduction_107+happyReduction_107 happy_x_1+	 =  happyIn16+		 (FBinOp BS32 FAdd+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_108 = happySpecReduce_1  10# happyReduction_108+happyReduction_108 happy_x_1+	 =  happyIn16+		 (FBinOp BS32 FSub+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_109 = happySpecReduce_1  10# happyReduction_109+happyReduction_109 happy_x_1+	 =  happyIn16+		 (FBinOp BS32 FMul+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_110 = happySpecReduce_1  10# happyReduction_110+happyReduction_110 happy_x_1+	 =  happyIn16+		 (FBinOp BS32 FDiv+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_111 = happySpecReduce_1  10# happyReduction_111+happyReduction_111 happy_x_1+	 =  happyIn16+		 (FBinOp BS32 FMin+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_112 = happySpecReduce_1  10# happyReduction_112+happyReduction_112 happy_x_1+	 =  happyIn16+		 (FBinOp BS32 FMax+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_113 = happySpecReduce_1  10# happyReduction_113+happyReduction_113 happy_x_1+	 =  happyIn16+		 (FBinOp BS32 FCopySign+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_114 = happySpecReduce_1  10# happyReduction_114+happyReduction_114 happy_x_1+	 =  happyIn16+		 (FUnOp BS64 FAbs+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_115 = happySpecReduce_1  10# happyReduction_115+happyReduction_115 happy_x_1+	 =  happyIn16+		 (FUnOp BS64 FNeg+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_116 = happySpecReduce_1  10# happyReduction_116+happyReduction_116 happy_x_1+	 =  happyIn16+		 (FUnOp BS64 FCeil+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_117 = happySpecReduce_1  10# happyReduction_117+happyReduction_117 happy_x_1+	 =  happyIn16+		 (FUnOp BS64 FFloor+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_118 = happySpecReduce_1  10# happyReduction_118+happyReduction_118 happy_x_1+	 =  happyIn16+		 (FUnOp BS64 FTrunc+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_119 = happySpecReduce_1  10# happyReduction_119+happyReduction_119 happy_x_1+	 =  happyIn16+		 (FUnOp BS64 FNearest+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_120 = happySpecReduce_1  10# happyReduction_120+happyReduction_120 happy_x_1+	 =  happyIn16+		 (FUnOp BS64 FSqrt+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_121 = happySpecReduce_1  10# happyReduction_121+happyReduction_121 happy_x_1+	 =  happyIn16+		 (FBinOp BS64 FAdd+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_122 = happySpecReduce_1  10# happyReduction_122+happyReduction_122 happy_x_1+	 =  happyIn16+		 (FBinOp BS64 FSub+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_123 = happySpecReduce_1  10# happyReduction_123+happyReduction_123 happy_x_1+	 =  happyIn16+		 (FBinOp BS64 FMul+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_124 = happySpecReduce_1  10# happyReduction_124+happyReduction_124 happy_x_1+	 =  happyIn16+		 (FBinOp BS64 FDiv+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_125 = happySpecReduce_1  10# happyReduction_125+happyReduction_125 happy_x_1+	 =  happyIn16+		 (FBinOp BS64 FMin+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_126 = happySpecReduce_1  10# happyReduction_126+happyReduction_126 happy_x_1+	 =  happyIn16+		 (FBinOp BS64 FMax+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_127 = happySpecReduce_1  10# happyReduction_127+happyReduction_127 happy_x_1+	 =  happyIn16+		 (FBinOp BS64 FCopySign+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_128 = happySpecReduce_1  10# happyReduction_128+happyReduction_128 happy_x_1+	 =  happyIn16+		 (I32Eqz+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_129 = happySpecReduce_1  10# happyReduction_129+happyReduction_129 happy_x_1+	 =  happyIn16+		 (IRelOp BS32 IEq+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_130 = happySpecReduce_1  10# happyReduction_130+happyReduction_130 happy_x_1+	 =  happyIn16+		 (IRelOp BS32 INe+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_131 = happySpecReduce_1  10# happyReduction_131+happyReduction_131 happy_x_1+	 =  happyIn16+		 (IRelOp BS32 ILtS+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_132 = happySpecReduce_1  10# happyReduction_132+happyReduction_132 happy_x_1+	 =  happyIn16+		 (IRelOp BS32 ILtU+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_133 = happySpecReduce_1  10# happyReduction_133+happyReduction_133 happy_x_1+	 =  happyIn16+		 (IRelOp BS32 IGtS+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_134 = happySpecReduce_1  10# happyReduction_134+happyReduction_134 happy_x_1+	 =  happyIn16+		 (IRelOp BS32 IGtU+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_135 = happySpecReduce_1  10# happyReduction_135+happyReduction_135 happy_x_1+	 =  happyIn16+		 (IRelOp BS32 ILeS+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_136 = happySpecReduce_1  10# happyReduction_136+happyReduction_136 happy_x_1+	 =  happyIn16+		 (IRelOp BS32 ILeU+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_137 = happySpecReduce_1  10# happyReduction_137+happyReduction_137 happy_x_1+	 =  happyIn16+		 (IRelOp BS32 IGeS+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_138 = happySpecReduce_1  10# happyReduction_138+happyReduction_138 happy_x_1+	 =  happyIn16+		 (IRelOp BS32 IGeU+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_139 = happySpecReduce_1  10# happyReduction_139+happyReduction_139 happy_x_1+	 =  happyIn16+		 (I64Eqz+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_140 = happySpecReduce_1  10# happyReduction_140+happyReduction_140 happy_x_1+	 =  happyIn16+		 (IRelOp BS64 IEq+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_141 = happySpecReduce_1  10# happyReduction_141+happyReduction_141 happy_x_1+	 =  happyIn16+		 (IRelOp BS64 INe+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_142 = happySpecReduce_1  10# happyReduction_142+happyReduction_142 happy_x_1+	 =  happyIn16+		 (IRelOp BS64 ILtS+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_143 = happySpecReduce_1  10# happyReduction_143+happyReduction_143 happy_x_1+	 =  happyIn16+		 (IRelOp BS64 ILtU+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_144 = happySpecReduce_1  10# happyReduction_144+happyReduction_144 happy_x_1+	 =  happyIn16+		 (IRelOp BS64 IGtS+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_145 = happySpecReduce_1  10# happyReduction_145+happyReduction_145 happy_x_1+	 =  happyIn16+		 (IRelOp BS64 IGtU+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_146 = happySpecReduce_1  10# happyReduction_146+happyReduction_146 happy_x_1+	 =  happyIn16+		 (IRelOp BS64 ILeS+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_147 = happySpecReduce_1  10# happyReduction_147+happyReduction_147 happy_x_1+	 =  happyIn16+		 (IRelOp BS64 ILeU+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_148 = happySpecReduce_1  10# happyReduction_148+happyReduction_148 happy_x_1+	 =  happyIn16+		 (IRelOp BS64 IGeS+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_149 = happySpecReduce_1  10# happyReduction_149+happyReduction_149 happy_x_1+	 =  happyIn16+		 (IRelOp BS64 IGeU+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_150 = happySpecReduce_1  10# happyReduction_150+happyReduction_150 happy_x_1+	 =  happyIn16+		 (FRelOp BS32 FEq+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_151 = happySpecReduce_1  10# happyReduction_151+happyReduction_151 happy_x_1+	 =  happyIn16+		 (FRelOp BS32 FNe+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_152 = happySpecReduce_1  10# happyReduction_152+happyReduction_152 happy_x_1+	 =  happyIn16+		 (FRelOp BS32 FLt+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_153 = happySpecReduce_1  10# happyReduction_153+happyReduction_153 happy_x_1+	 =  happyIn16+		 (FRelOp BS32 FGt+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_154 = happySpecReduce_1  10# happyReduction_154+happyReduction_154 happy_x_1+	 =  happyIn16+		 (FRelOp BS32 FLe+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_155 = happySpecReduce_1  10# happyReduction_155+happyReduction_155 happy_x_1+	 =  happyIn16+		 (FRelOp BS32 FGe+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_156 = happySpecReduce_1  10# happyReduction_156+happyReduction_156 happy_x_1+	 =  happyIn16+		 (FRelOp BS64 FEq+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_157 = happySpecReduce_1  10# happyReduction_157+happyReduction_157 happy_x_1+	 =  happyIn16+		 (FRelOp BS64 FNe+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_158 = happySpecReduce_1  10# happyReduction_158+happyReduction_158 happy_x_1+	 =  happyIn16+		 (FRelOp BS64 FLt+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_159 = happySpecReduce_1  10# happyReduction_159+happyReduction_159 happy_x_1+	 =  happyIn16+		 (FRelOp BS64 FGt+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_160 = happySpecReduce_1  10# happyReduction_160+happyReduction_160 happy_x_1+	 =  happyIn16+		 (FRelOp BS64 FLe+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_161 = happySpecReduce_1  10# happyReduction_161+happyReduction_161 happy_x_1+	 =  happyIn16+		 (FRelOp BS64 FGe+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_162 = happySpecReduce_1  10# happyReduction_162+happyReduction_162 happy_x_1+	 =  happyIn16+		 (I32WrapI64+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_163 = happySpecReduce_1  10# happyReduction_163+happyReduction_163 happy_x_1+	 =  happyIn16+		 (ITruncFS BS32 BS32+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_164 = happySpecReduce_1  10# happyReduction_164+happyReduction_164 happy_x_1+	 =  happyIn16+		 (ITruncFU BS32 BS32+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_165 = happySpecReduce_1  10# happyReduction_165+happyReduction_165 happy_x_1+	 =  happyIn16+		 (ITruncFS BS32 BS64+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_166 = happySpecReduce_1  10# happyReduction_166+happyReduction_166 happy_x_1+	 =  happyIn16+		 (ITruncFU BS32 BS64+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_167 = happySpecReduce_1  10# happyReduction_167+happyReduction_167 happy_x_1+	 =  happyIn16+		 (I64ExtendSI32+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_168 = happySpecReduce_1  10# happyReduction_168+happyReduction_168 happy_x_1+	 =  happyIn16+		 (I64ExtendUI32+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_169 = happySpecReduce_1  10# happyReduction_169+happyReduction_169 happy_x_1+	 =  happyIn16+		 (ITruncFS BS64 BS32+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_170 = happySpecReduce_1  10# happyReduction_170+happyReduction_170 happy_x_1+	 =  happyIn16+		 (ITruncFU BS64 BS32+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_171 = happySpecReduce_1  10# happyReduction_171+happyReduction_171 happy_x_1+	 =  happyIn16+		 (ITruncFS BS64 BS64+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_172 = happySpecReduce_1  10# happyReduction_172+happyReduction_172 happy_x_1+	 =  happyIn16+		 (ITruncFU BS64 BS64+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_173 = happySpecReduce_1  10# happyReduction_173+happyReduction_173 happy_x_1+	 =  happyIn16+		 (FConvertIS BS32 BS32+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_174 = happySpecReduce_1  10# happyReduction_174+happyReduction_174 happy_x_1+	 =  happyIn16+		 (FConvertIU BS32 BS32+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_175 = happySpecReduce_1  10# happyReduction_175+happyReduction_175 happy_x_1+	 =  happyIn16+		 (FConvertIS BS32 BS64+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_176 = happySpecReduce_1  10# happyReduction_176+happyReduction_176 happy_x_1+	 =  happyIn16+		 (FConvertIU BS32 BS64+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_177 = happySpecReduce_1  10# happyReduction_177+happyReduction_177 happy_x_1+	 =  happyIn16+		 (F32DemoteF64+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_178 = happySpecReduce_1  10# happyReduction_178+happyReduction_178 happy_x_1+	 =  happyIn16+		 (FConvertIS BS64 BS32+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_179 = happySpecReduce_1  10# happyReduction_179+happyReduction_179 happy_x_1+	 =  happyIn16+		 (FConvertIU BS64 BS32+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_180 = happySpecReduce_1  10# happyReduction_180+happyReduction_180 happy_x_1+	 =  happyIn16+		 (FConvertIS BS64 BS64+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_181 = happySpecReduce_1  10# happyReduction_181+happyReduction_181 happy_x_1+	 =  happyIn16+		 (FConvertIU BS64 BS64+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_182 = happySpecReduce_1  10# happyReduction_182+happyReduction_182 happy_x_1+	 =  happyIn16+		 (F64PromoteF32+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_183 = happySpecReduce_1  10# happyReduction_183+happyReduction_183 happy_x_1+	 =  happyIn16+		 (IReinterpretF BS32+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_184 = happySpecReduce_1  10# happyReduction_184+happyReduction_184 happy_x_1+	 =  happyIn16+		 (IReinterpretF BS64+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_185 = happySpecReduce_1  10# happyReduction_185+happyReduction_185 happy_x_1+	 =  happyIn16+		 (FReinterpretI BS32+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_186 = happySpecReduce_1  10# happyReduction_186+happyReduction_186 happy_x_1+	 =  happyIn16+		 (FReinterpretI BS64+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_187 = happySpecReduce_2  11# happyReduction_187+happyReduction_187 happy_x_2+	happy_x_1+	 =  case happyOut18 happy_x_2 of { happy_var_2 -> +	happyIn17+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_188 = happySpecReduce_0  11# happyReduction_188+happyReduction_188  =  happyIn17+		 (AnonimousTypeUse $ FuncType [] []+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_189 = happyReduce 4# 12# happyReduction_189+happyReduction_189 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut10 happy_x_2 of { happy_var_2 -> +	case happyOut19 happy_x_4 of { happy_var_4 -> +	happyIn18+		 (IndexedTypeUse happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_190 = happySpecReduce_1  12# happyReduction_190+happyReduction_190 happy_x_1+	 =  case happyOut26 happy_x_1 of { happy_var_1 -> +	happyIn18+		 (AnonimousTypeUse happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_191 = happySpecReduce_2  13# happyReduction_191+happyReduction_191 happy_x_2+	happy_x_1+	 =  case happyOut26 happy_x_2 of { happy_var_2 -> +	happyIn19+		 (Just happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_192 = happySpecReduce_0  13# happyReduction_192+happyReduction_192  =  happyIn19+		 (Nothing+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_193 = happyReduce 4# 14# happyReduction_193+happyReduction_193 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut21 happy_x_3 of { happy_var_3 -> +	happyIn20+		 (TypeDef happy_var_2 happy_var_3+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_194 = happySpecReduce_3  15# happyReduction_194+happyReduction_194 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut22 happy_x_3 of { happy_var_3 -> +	happyIn21+		 (happy_var_3+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_195 = happySpecReduce_1  16# happyReduction_195+happyReduction_195 happy_x_1+	 =  happyIn22+		 (emptyFuncType+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_196 = happySpecReduce_2  16# happyReduction_196+happyReduction_196 happy_x_2+	happy_x_1+	 =  case happyOut23 happy_x_2 of { happy_var_2 -> +	happyIn22+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_197 = happyReduce 4# 17# happyReduction_197+happyReduction_197 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut117 happy_x_2 of { happy_var_2 -> +	case happyOut22 happy_x_4 of { happy_var_4 -> +	happyIn23+		 (mergeFuncType (FuncType (map (ParamType Nothing) happy_var_2) []) happy_var_4+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_198 = happyReduce 5# 17# happyReduction_198+happyReduction_198 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut8 happy_x_2 of { happy_var_2 -> +	case happyOut9 happy_x_3 of { happy_var_3 -> +	case happyOut22 happy_x_5 of { happy_var_5 -> +	happyIn23+		 (mergeFuncType (FuncType [ParamType (Just happy_var_2) happy_var_3] []) happy_var_5+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_199 = happySpecReduce_1  17# happyReduction_199+happyReduction_199 happy_x_1+	 =  case happyOut25 happy_x_1 of { happy_var_1 -> +	happyIn23+		 (happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_200 = happySpecReduce_1  18# happyReduction_200+happyReduction_200 happy_x_1+	 =  happyIn24+		 (emptyFuncType+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_201 = happySpecReduce_2  18# happyReduction_201+happyReduction_201 happy_x_2+	happy_x_1+	 =  case happyOut25 happy_x_2 of { happy_var_2 -> +	happyIn24+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_202 = happyReduce 4# 19# happyReduction_202+happyReduction_202 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut117 happy_x_2 of { happy_var_2 -> +	case happyOut24 happy_x_4 of { happy_var_4 -> +	happyIn25+		 (mergeFuncType (FuncType [] happy_var_2) happy_var_4+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_203 = happySpecReduce_3  20# happyReduction_203+happyReduction_203 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut26 happy_x_1 of { happy_var_1 -> +	case happyOut27 happy_x_3 of { happy_var_3 -> +	happyIn26+		 (mergeFuncType happy_var_1 happy_var_3+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_204 = happySpecReduce_1  20# happyReduction_204+happyReduction_204 happy_x_1+	 =  case happyOut27 happy_x_1 of { happy_var_1 -> +	happyIn26+		 (happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_205 = happySpecReduce_3  21# happyReduction_205+happyReduction_205 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut117 happy_x_2 of { happy_var_2 -> +	happyIn27+		 (FuncType (map (ParamType Nothing) happy_var_2) []+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_206 = happyReduce 4# 21# happyReduction_206+happyReduction_206 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut8 happy_x_2 of { happy_var_2 -> +	case happyOut9 happy_x_3 of { happy_var_3 -> +	happyIn27+		 (FuncType [ParamType (Just happy_var_2) happy_var_3] []+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_207 = happySpecReduce_3  21# happyReduction_207+happyReduction_207 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut117 happy_x_2 of { happy_var_2 -> +	happyIn27+		 (FuncType [] happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_208 = happyMonadReduce 2# 22# happyReduction_208+happyReduction_208 (happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOut121 happy_x_1 of { happy_var_1 -> +	case happyOut118 happy_x_2 of { happy_var_2 -> +	( parseMemArg 1 happy_var_1 happy_var_2)}})+	) (\r -> happyReturn (happyIn28 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_209 = happyMonadReduce 2# 23# happyReduction_209+happyReduction_209 (happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOut121 happy_x_1 of { happy_var_1 -> +	case happyOut118 happy_x_2 of { happy_var_2 -> +	( parseMemArg 2 happy_var_1 happy_var_2)}})+	) (\r -> happyReturn (happyIn29 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_210 = happyMonadReduce 2# 24# happyReduction_210+happyReduction_210 (happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOut121 happy_x_1 of { happy_var_1 -> +	case happyOut118 happy_x_2 of { happy_var_2 -> +	( parseMemArg 4 happy_var_1 happy_var_2)}})+	) (\r -> happyReturn (happyIn30 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_211 = happyMonadReduce 2# 25# happyReduction_211+happyReduction_211 (happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOut121 happy_x_1 of { happy_var_1 -> +	case happyOut118 happy_x_2 of { happy_var_2 -> +	( parseMemArg 8 happy_var_1 happy_var_2)}})+	) (\r -> happyReturn (happyIn31 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_212 = happySpecReduce_1  26# happyReduction_212+happyReduction_212 happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	happyIn32+		 (happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_213 = happySpecReduce_1  26# happyReduction_213+happyReduction_213 happy_x_1+	 =  case happyOut47 happy_x_1 of { happy_var_1 -> +	happyIn32+		 (happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_214 = happySpecReduce_1  27# happyReduction_214+happyReduction_214 happy_x_1+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> +	happyIn33+		 ([PlainInstr happy_var_1]+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_215 = happySpecReduce_2  27# happyReduction_215+happyReduction_215 happy_x_2+	happy_x_1+	 =  case happyOut41 happy_x_2 of { happy_var_2 -> +	happyIn33+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_216 = happyMonadReduce 3# 27# happyReduction_216+happyReduction_216 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut34 happy_x_3 of { happy_var_3 -> +	( (: []) `fmap` happy_var_3 happy_var_2)}})+	) (\r -> happyReturn (happyIn33 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_217 = happyMonadReduce 3# 27# happyReduction_217+happyReduction_217 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut36 happy_x_3 of { happy_var_3 -> +	( (: []) `fmap` happy_var_3 happy_var_2)}})+	) (\r -> happyReturn (happyIn33 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_218 = happyMonadReduce 3# 27# happyReduction_218+happyReduction_218 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut38 happy_x_3 of { happy_var_3 -> +	( happy_var_3 happy_var_2)}})+	) (\r -> happyReturn (happyIn33 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_219 = happySpecReduce_2  28# happyReduction_219+happyReduction_219 happy_x_2+	happy_x_1+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> +	happyIn34+		 (\ident ->+            if ident == happy_var_2 || isNothing happy_var_2+            then Right $ BlockInstr ident [] []+            else Left "Block labels have to match"+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_220 = happyReduce 4# 28# happyReduction_220+happyReduction_220 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut33 happy_x_1 of { happy_var_1 -> +	case happyOut113 happy_x_2 of { happy_var_2 -> +	case happyOut119 happy_x_4 of { happy_var_4 -> +	happyIn34+		 (\ident ->+            if ident == happy_var_4 || isNothing happy_var_4+            then Right $ BlockInstr ident [] (happy_var_1 ++ concat happy_var_2)+            else Left "Block labels have to match"+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_221 = happySpecReduce_2  28# happyReduction_221+happyReduction_221 happy_x_2+	happy_x_1+	 =  case happyOut35 happy_x_2 of { happy_var_2 -> +	happyIn34+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_222 = happyReduce 6# 29# happyReduction_222+happyReduction_222 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut9 happy_x_2 of { happy_var_2 -> +	case happyOut113 happy_x_4 of { happy_var_4 -> +	case happyOut119 happy_x_6 of { happy_var_6 -> +	happyIn35+		 (\ident ->+            if ident == happy_var_6 || isNothing happy_var_6+            then Right $ BlockInstr ident [happy_var_2] (concat happy_var_4)+            else Left "Block labels have to match"+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_223 = happyReduce 4# 29# happyReduction_223+happyReduction_223 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut48 happy_x_1 of { happy_var_1 -> +	case happyOut113 happy_x_2 of { happy_var_2 -> +	case happyOut119 happy_x_4 of { happy_var_4 -> +	happyIn35+		 (\ident ->+            if ident == happy_var_4 || isNothing happy_var_4+            then Right $ BlockInstr ident [] (happy_var_1 ++ concat happy_var_2)+            else Left "Block labels have to match"+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_224 = happySpecReduce_2  30# happyReduction_224+happyReduction_224 happy_x_2+	happy_x_1+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> +	happyIn36+		 (\ident ->+            if ident == happy_var_2 || isNothing happy_var_2+            then Right $ LoopInstr ident [] []+            else Left "Loop labels have to match"+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_225 = happyReduce 4# 30# happyReduction_225+happyReduction_225 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut33 happy_x_1 of { happy_var_1 -> +	case happyOut113 happy_x_2 of { happy_var_2 -> +	case happyOut119 happy_x_4 of { happy_var_4 -> +	happyIn36+		 (\ident ->+            if ident == happy_var_4 || isNothing happy_var_4+            then Right $ LoopInstr ident [] (happy_var_1 ++ concat happy_var_2)+            else Left "Loop labels have to match"+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_226 = happySpecReduce_2  30# happyReduction_226+happyReduction_226 happy_x_2+	happy_x_1+	 =  case happyOut37 happy_x_2 of { happy_var_2 -> +	happyIn36+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_227 = happyReduce 6# 31# happyReduction_227+happyReduction_227 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut9 happy_x_2 of { happy_var_2 -> +	case happyOut113 happy_x_4 of { happy_var_4 -> +	case happyOut119 happy_x_6 of { happy_var_6 -> +	happyIn37+		 (\ident ->+            if ident == happy_var_6 || isNothing happy_var_6+            then Right $ LoopInstr ident [happy_var_2] (concat happy_var_4)+            else Left "Loop labels have to match"+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_228 = happyReduce 4# 31# happyReduction_228+happyReduction_228 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut48 happy_x_1 of { happy_var_1 -> +	case happyOut113 happy_x_2 of { happy_var_2 -> +	case happyOut119 happy_x_4 of { happy_var_4 -> +	happyIn37+		 (\ident ->+            if ident == happy_var_4 || isNothing happy_var_4+            then Right $ LoopInstr ident [] (happy_var_1 ++ concat happy_var_2)+            else Left "Loop labels have to match"+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_229 = happySpecReduce_1  32# happyReduction_229+happyReduction_229 happy_x_1+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> +	happyIn38+		 (\ident ->+            if ident == (snd happy_var_1) || isNothing (snd happy_var_1)+            then Right [IfInstr ident [] [] $ fst happy_var_1]+            else Left "If labels have to match"+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_230 = happySpecReduce_3  32# happyReduction_230+happyReduction_230 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	case happyOut113 happy_x_2 of { happy_var_2 -> +	case happyOut40 happy_x_3 of { happy_var_3 -> +	happyIn38+		 (\ident ->+            if ident == (snd happy_var_3) || isNothing (snd happy_var_3)+            then Right [IfInstr ident [] (happy_var_1 ++ concat happy_var_2) $ fst happy_var_3]+            else Left "If labels have to match"+	)}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_231 = happySpecReduce_2  32# happyReduction_231+happyReduction_231 happy_x_2+	happy_x_1+	 =  case happyOut39 happy_x_2 of { happy_var_2 -> +	happyIn38+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_232 = happyReduce 5# 33# happyReduction_232+happyReduction_232 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut9 happy_x_2 of { happy_var_2 -> +	case happyOut113 happy_x_4 of { happy_var_4 -> +	case happyOut40 happy_x_5 of { happy_var_5 -> +	happyIn39+		 (\ident ->+            if ident == (snd happy_var_5) || isNothing (snd happy_var_5)+            then Right [IfInstr ident [happy_var_2] (concat happy_var_4) $ fst happy_var_5]+            else Left "If labels have to match"+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_233 = happySpecReduce_3  33# happyReduction_233+happyReduction_233 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> +	case happyOut113 happy_x_2 of { happy_var_2 -> +	case happyOut40 happy_x_3 of { happy_var_3 -> +	happyIn39+		 (\ident ->+            if ident == (snd happy_var_3) || isNothing (snd happy_var_3)+            then Right [IfInstr ident [] (happy_var_1 ++ concat happy_var_2) $ fst happy_var_3]+            else Left "If labels have to match"+	)}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_234 = happySpecReduce_2  34# happyReduction_234+happyReduction_234 happy_x_2+	happy_x_1+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> +	happyIn40+		 (([], happy_var_2)+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_235 = happyMonadReduce 5# 34# happyReduction_235+happyReduction_235 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut113 happy_x_3 of { happy_var_3 -> +	case happyOut119 happy_x_5 of { happy_var_5 -> +	(+        if matchIdents happy_var_2 happy_var_5+        then Right (concat happy_var_3, if isNothing happy_var_2 then happy_var_5 else happy_var_2)+        else Left "If labels have to match")}}})+	) (\r -> happyReturn (happyIn40 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_236 = happySpecReduce_2  35# happyReduction_236+happyReduction_236 happy_x_2+	happy_x_1+	 =  case happyOut42 happy_x_2 of { happy_var_2 -> +	happyIn41+		 ((PlainInstr $ CallIndirect $ fst happy_var_2) : snd happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_237 = happySpecReduce_0  35# happyReduction_237+happyReduction_237  =  happyIn41+		 ([PlainInstr $ CallIndirect $ AnonimousTypeUse $ FuncType [] []]+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_238 = happyReduce 4# 36# happyReduction_238+happyReduction_238 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut10 happy_x_2 of { happy_var_2 -> +	case happyOut43 happy_x_4 of { happy_var_4 -> +	happyIn42+		 ((IndexedTypeUse happy_var_2 $ fst happy_var_4, snd happy_var_4)+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_239 = happySpecReduce_1  36# happyReduction_239+happyReduction_239 happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	happyIn42+		 ((AnonimousTypeUse $ fromMaybe (FuncType [] []) $ fst happy_var_1, snd happy_var_1)+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_240 = happySpecReduce_2  37# happyReduction_240+happyReduction_240 happy_x_2+	happy_x_1+	 =  case happyOut44 happy_x_2 of { happy_var_2 -> +	happyIn43+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_241 = happySpecReduce_0  37# happyReduction_241+happyReduction_241  =  happyIn43+		 ((Nothing, [])+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_242 = happyReduce 4# 38# happyReduction_242+happyReduction_242 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut117 happy_x_2 of { happy_var_2 -> +	case happyOut43 happy_x_4 of { happy_var_4 -> +	happyIn44+		 (let ft = fromMaybe emptyFuncType $ fst happy_var_4 in+        (Just $ ft { params = map (ParamType Nothing) happy_var_2 ++ params ft }, snd happy_var_4)+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_243 = happySpecReduce_1  38# happyReduction_243+happyReduction_243 happy_x_1+	 =  case happyOut46 happy_x_1 of { happy_var_1 -> +	happyIn44+		 (happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_244 = happySpecReduce_2  39# happyReduction_244+happyReduction_244 happy_x_2+	happy_x_1+	 =  case happyOut46 happy_x_2 of { happy_var_2 -> +	happyIn45+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_245 = happySpecReduce_0  39# happyReduction_245+happyReduction_245  =  happyIn45+		 ((Nothing, [])+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_246 = happyReduce 4# 40# happyReduction_246+happyReduction_246 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut117 happy_x_2 of { happy_var_2 -> +	case happyOut45 happy_x_4 of { happy_var_4 -> +	happyIn46+		 (let ft = fromMaybe emptyFuncType $ fst happy_var_4 in+        (Just $ ft { results = happy_var_2 ++ results ft }, snd happy_var_4)+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_247 = happySpecReduce_1  40# happyReduction_247+happyReduction_247 happy_x_1+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> +	happyIn46+		 ((Nothing, happy_var_1)+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_248 = happySpecReduce_2  41# happyReduction_248+happyReduction_248 happy_x_2+	happy_x_1+	 =  case happyOut48 happy_x_2 of { happy_var_2 -> +	happyIn47+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_249 = happySpecReduce_3  42# happyReduction_249+happyReduction_249 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> +	case happyOut111 happy_x_2 of { happy_var_2 -> +	happyIn48+		 (concat happy_var_2 ++ [PlainInstr happy_var_1]+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_250 = happySpecReduce_2  42# happyReduction_250+happyReduction_250 happy_x_2+	happy_x_1+	 =  case happyOut56 happy_x_2 of { happy_var_2 -> +	happyIn48+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_251 = happySpecReduce_3  42# happyReduction_251+happyReduction_251 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut49 happy_x_3 of { happy_var_3 -> +	happyIn48+		 ([happy_var_3 happy_var_2]+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_252 = happySpecReduce_3  42# happyReduction_252+happyReduction_252 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut51 happy_x_3 of { happy_var_3 -> +	happyIn48+		 ([happy_var_3 happy_var_2]+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_253 = happyReduce 4# 42# happyReduction_253+happyReduction_253 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut53 happy_x_4 of { happy_var_4 -> +	happyIn48+		 (happy_var_4 happy_var_2+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_254 = happySpecReduce_1  43# happyReduction_254+happyReduction_254 happy_x_1+	 =  happyIn49+		 (\ident -> BlockInstr ident [] []+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_255 = happySpecReduce_2  43# happyReduction_255+happyReduction_255 happy_x_2+	happy_x_1+	 =  case happyOut50 happy_x_2 of { happy_var_2 -> +	happyIn49+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_256 = happySpecReduce_3  43# happyReduction_256+happyReduction_256 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	case happyOut113 happy_x_2 of { happy_var_2 -> +	happyIn49+		 (\ident -> BlockInstr ident [] (happy_var_1 ++ concat happy_var_2)+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_257 = happyReduce 5# 44# happyReduction_257+happyReduction_257 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut9 happy_x_2 of { happy_var_2 -> +	case happyOut113 happy_x_4 of { happy_var_4 -> +	happyIn50+		 (\ident -> BlockInstr ident [happy_var_2] (concat happy_var_4)+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_258 = happySpecReduce_3  44# happyReduction_258+happyReduction_258 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> +	case happyOut113 happy_x_2 of { happy_var_2 -> +	happyIn50+		 (\ident -> BlockInstr ident [] (happy_var_1 ++ concat happy_var_2)+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_259 = happySpecReduce_1  45# happyReduction_259+happyReduction_259 happy_x_1+	 =  happyIn51+		 (\ident -> LoopInstr ident [] []+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_260 = happySpecReduce_2  45# happyReduction_260+happyReduction_260 happy_x_2+	happy_x_1+	 =  case happyOut52 happy_x_2 of { happy_var_2 -> +	happyIn51+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_261 = happySpecReduce_3  45# happyReduction_261+happyReduction_261 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	case happyOut113 happy_x_2 of { happy_var_2 -> +	happyIn51+		 (\ident -> LoopInstr ident [] (happy_var_1 ++ concat happy_var_2)+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_262 = happyReduce 5# 46# happyReduction_262+happyReduction_262 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut9 happy_x_2 of { happy_var_2 -> +	case happyOut113 happy_x_4 of { happy_var_4 -> +	happyIn52+		 (\ident -> LoopInstr ident [happy_var_2] (concat happy_var_4)+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_263 = happySpecReduce_3  46# happyReduction_263+happyReduction_263 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> +	case happyOut113 happy_x_2 of { happy_var_2 -> +	happyIn52+		 (\ident -> LoopInstr ident [] (happy_var_1 ++ concat happy_var_2)+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_264 = happyReduce 5# 47# happyReduction_264+happyReduction_264 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut9 happy_x_2 of { happy_var_2 -> +	case happyOut54 happy_x_5 of { happy_var_5 -> +	happyIn53+		 (\ident ->+            let (pred, (trueBranch, falseBranch)) = happy_var_5 in+            pred ++ [IfInstr ident [happy_var_2] trueBranch falseBranch]+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_265 = happySpecReduce_1  47# happyReduction_265+happyReduction_265 happy_x_1+	 =  case happyOut54 happy_x_1 of { happy_var_1 -> +	happyIn53+		 (\ident ->+            let (pred, (trueBranch, falseBranch)) = happy_var_1 in+            pred ++ [IfInstr ident [] trueBranch falseBranch]+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_266 = happyReduce 4# 48# happyReduction_266+happyReduction_266 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut113 happy_x_2 of { happy_var_2 -> +	case happyOut55 happy_x_4 of { happy_var_4 -> +	happyIn54+		 (([], (concat happy_var_2, happy_var_4))+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_267 = happySpecReduce_3  48# happyReduction_267+happyReduction_267 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> +	case happyOut54 happy_x_3 of { happy_var_3 -> +	happyIn54+		 (let (pred, branches) = happy_var_3 in+        (happy_var_1 ++ pred, branches)+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_268 = happySpecReduce_1  49# happyReduction_268+happyReduction_268 happy_x_1+	 =  happyIn55+		 ([]+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_269 = happyReduce 5# 49# happyReduction_269+happyReduction_269 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut113 happy_x_3 of { happy_var_3 -> +	happyIn55+		 (concat happy_var_3+	) `HappyStk` happyRest}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_270 = happySpecReduce_1  50# happyReduction_270+happyReduction_270 happy_x_1+	 =  happyIn56+		 ([PlainInstr $ CallIndirect $ AnonimousTypeUse $ FuncType [] []]+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_271 = happySpecReduce_2  50# happyReduction_271+happyReduction_271 happy_x_2+	happy_x_1+	 =  case happyOut57 happy_x_2 of { happy_var_2 -> +	happyIn56+		 (snd happy_var_2 ++ [PlainInstr $ CallIndirect $ fst happy_var_2]+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_272 = happyReduce 4# 51# happyReduction_272+happyReduction_272 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut10 happy_x_2 of { happy_var_2 -> +	case happyOut58 happy_x_4 of { happy_var_4 -> +	happyIn57+		 ((IndexedTypeUse happy_var_2 $ fst happy_var_4, snd happy_var_4)+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_273 = happySpecReduce_1  51# happyReduction_273+happyReduction_273 happy_x_1+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> +	happyIn57+		 ((AnonimousTypeUse $ fromMaybe (FuncType [] []) $ fst happy_var_1, snd happy_var_1)+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_274 = happySpecReduce_2  52# happyReduction_274+happyReduction_274 happy_x_2+	happy_x_1+	 =  case happyOut59 happy_x_2 of { happy_var_2 -> +	happyIn58+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_275 = happySpecReduce_1  52# happyReduction_275+happyReduction_275 happy_x_1+	 =  happyIn58+		 ((Nothing, [])+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_276 = happyReduce 4# 53# happyReduction_276+happyReduction_276 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut117 happy_x_2 of { happy_var_2 -> +	case happyOut58 happy_x_4 of { happy_var_4 -> +	happyIn59+		 (let ft = fromMaybe emptyFuncType $ fst happy_var_4 in+        (Just $ ft { params = map (ParamType Nothing) happy_var_2 ++ params ft }, snd happy_var_4)+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_277 = happySpecReduce_1  53# happyReduction_277+happyReduction_277 happy_x_1+	 =  case happyOut61 happy_x_1 of { happy_var_1 -> +	happyIn59+		 (happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_278 = happySpecReduce_2  54# happyReduction_278+happyReduction_278 happy_x_2+	happy_x_1+	 =  case happyOut61 happy_x_2 of { happy_var_2 -> +	happyIn60+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_279 = happySpecReduce_1  54# happyReduction_279+happyReduction_279 happy_x_1+	 =  happyIn60+		 ((Nothing, [])+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_280 = happyReduce 4# 55# happyReduction_280+happyReduction_280 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut117 happy_x_2 of { happy_var_2 -> +	case happyOut60 happy_x_4 of { happy_var_4 -> +	happyIn61+		 (let ft = fromMaybe emptyFuncType $ fst happy_var_4 in+        (Just $ ft { results = happy_var_2 ++ results ft }, snd happy_var_4)+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_281 = happySpecReduce_3  55# happyReduction_281+happyReduction_281 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> +	case happyOut111 happy_x_2 of { happy_var_2 -> +	happyIn61+		 ((Nothing, happy_var_1 ++ concat happy_var_2)+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_282 = happyReduce 4# 56# happyReduction_282+happyReduction_282 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut17 happy_x_3 of { happy_var_3 -> +	happyIn62+		 (ImportFunc happy_var_2 happy_var_3+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_283 = happyReduce 4# 56# happyReduction_283+happyReduction_283 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut86 happy_x_3 of { happy_var_3 -> +	happyIn62+		 (ImportTable happy_var_2 happy_var_3+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_284 = happyReduce 4# 56# happyReduction_284+happyReduction_284 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut84 happy_x_3 of { happy_var_3 -> +	happyIn62+		 (ImportMemory happy_var_2 happy_var_3+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_285 = happyReduce 4# 56# happyReduction_285+happyReduction_285 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut76 happy_x_3 of { happy_var_3 -> +	happyIn62+		 (ImportGlobal happy_var_2 happy_var_3+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_286 = happyReduce 6# 57# happyReduction_286+happyReduction_286 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut7 happy_x_2 of { happy_var_2 -> +	case happyOut7 happy_x_3 of { happy_var_3 -> +	case happyOut62 happy_x_5 of { happy_var_5 -> +	happyIn63+		 (Import [] happy_var_2 happy_var_3 happy_var_5+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_287 = happySpecReduce_3  58# happyReduction_287+happyReduction_287 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut65 happy_x_3 of { happy_var_3 -> +	happyIn64+		 (happy_var_3 happy_var_2+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_288 = happySpecReduce_1  59# happyReduction_288+happyReduction_288 happy_x_1+	 =  happyIn65+		 (\i -> MFFunc emptyFunction { ident = i }+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_289 = happySpecReduce_3  59# happyReduction_289+happyReduction_289 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	case happyOut113 happy_x_2 of { happy_var_2 -> +	happyIn65+		 (\i -> MFFunc emptyFunction { ident = i, body = happy_var_1 ++ concat happy_var_2 }+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_290 = happySpecReduce_2  59# happyReduction_290+happyReduction_290 happy_x_2+	happy_x_1+	 =  case happyOut66 happy_x_2 of { happy_var_2 -> +	happyIn65+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_291 = happyReduce 4# 60# happyReduction_291+happyReduction_291 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut7 happy_x_2 of { happy_var_2 -> +	case happyOut65 happy_x_4 of { happy_var_4 -> +	happyIn66+		 (\ident ->+            case happy_var_4 ident of+                MFImport imp -> MFImport imp { reExportAs = happy_var_2 : reExportAs imp }+                MFFunc func -> MFFunc func { exportFuncAs = happy_var_2 : exportFuncAs func }+                _ -> error "unexpected field"+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_292 = happySpecReduce_1  60# happyReduction_292+happyReduction_292 happy_x_1+	 =  case happyOut67 happy_x_1 of { happy_var_1 -> +	happyIn66+		 (happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_293 = happyReduce 6# 61# happyReduction_293+happyReduction_293 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut7 happy_x_2 of { happy_var_2 -> +	case happyOut7 happy_x_3 of { happy_var_3 -> +	case happyOut17 happy_x_5 of { happy_var_5 -> +	happyIn67+		 (\ident -> MFImport $ Import [] happy_var_2 happy_var_3 $ ImportFunc ident happy_var_5+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_294 = happySpecReduce_1  61# happyReduction_294+happyReduction_294 happy_x_1+	 =  case happyOut68 happy_x_1 of { happy_var_1 -> +	happyIn67+		 (MFFunc . happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_295 = happyReduce 4# 62# happyReduction_295+happyReduction_295 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut10 happy_x_2 of { happy_var_2 -> +	case happyOut69 happy_x_4 of { happy_var_4 -> +	happyIn68+		 (\i ->+            let (AnonimousTypeUse signature) = funcType happy_var_4 in+            let typeSign = if signature == emptyFuncType then Nothing else Just signature in+            happy_var_4 { funcType = IndexedTypeUse happy_var_2 typeSign, ident = i }+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_296 = happySpecReduce_1  62# happyReduction_296+happyReduction_296 happy_x_1+	 =  case happyOut70 happy_x_1 of { happy_var_1 -> +	happyIn68+		 (\i -> happy_var_1 { ident = i }+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_297 = happySpecReduce_1  63# happyReduction_297+happyReduction_297 happy_x_1+	 =  happyIn69+		 (emptyFunction+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_298 = happySpecReduce_2  63# happyReduction_298+happyReduction_298 happy_x_2+	happy_x_1+	 =  case happyOut70 happy_x_2 of { happy_var_2 -> +	happyIn69+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_299 = happyReduce 4# 64# happyReduction_299+happyReduction_299 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut117 happy_x_2 of { happy_var_2 -> +	case happyOut69 happy_x_4 of { happy_var_4 -> +	happyIn70+		 (prependFuncParams (map (ParamType Nothing) happy_var_2) happy_var_4+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_300 = happyReduce 5# 64# happyReduction_300+happyReduction_300 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut8 happy_x_2 of { happy_var_2 -> +	case happyOut9 happy_x_3 of { happy_var_3 -> +	case happyOut69 happy_x_5 of { happy_var_5 -> +	happyIn70+		 (prependFuncParams [ParamType (Just happy_var_2) happy_var_3] happy_var_5+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_301 = happySpecReduce_1  64# happyReduction_301+happyReduction_301 happy_x_1+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> +	happyIn70+		 (happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_302 = happySpecReduce_1  65# happyReduction_302+happyReduction_302 happy_x_1+	 =  happyIn71+		 (emptyFunction+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_303 = happySpecReduce_2  65# happyReduction_303+happyReduction_303 happy_x_2+	happy_x_1+	 =  case happyOut72 happy_x_2 of { happy_var_2 -> +	happyIn71+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_304 = happySpecReduce_3  65# happyReduction_304+happyReduction_304 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	case happyOut113 happy_x_2 of { happy_var_2 -> +	happyIn71+		 (emptyFunction { body = happy_var_1 ++ concat happy_var_2 }+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_305 = happyReduce 4# 66# happyReduction_305+happyReduction_305 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut117 happy_x_2 of { happy_var_2 -> +	case happyOut71 happy_x_4 of { happy_var_4 -> +	happyIn72+		 (prependFuncResults happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_306 = happySpecReduce_1  66# happyReduction_306+happyReduction_306 happy_x_1+	 =  case happyOut74 happy_x_1 of { happy_var_1 -> +	happyIn72+		 (emptyFunction { locals = fst happy_var_1, body = snd happy_var_1 }+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_307 = happySpecReduce_1  67# happyReduction_307+happyReduction_307 happy_x_1+	 =  happyIn73+		 (([], [])+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_308 = happySpecReduce_3  67# happyReduction_308+happyReduction_308 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	case happyOut113 happy_x_2 of { happy_var_2 -> +	happyIn73+		 (([], happy_var_1 ++ concat happy_var_2)+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_309 = happySpecReduce_2  67# happyReduction_309+happyReduction_309 happy_x_2+	happy_x_1+	 =  case happyOut74 happy_x_2 of { happy_var_2 -> +	happyIn73+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_310 = happyReduce 4# 68# happyReduction_310+happyReduction_310 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut117 happy_x_2 of { happy_var_2 -> +	case happyOut73 happy_x_4 of { happy_var_4 -> +	happyIn74+		 ((map (LocalType Nothing) happy_var_2 ++ fst happy_var_4, snd happy_var_4)+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_311 = happyReduce 5# 68# happyReduction_311+happyReduction_311 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut8 happy_x_2 of { happy_var_2 -> +	case happyOut9 happy_x_3 of { happy_var_3 -> +	case happyOut73 happy_x_5 of { happy_var_5 -> +	happyIn74+		 ((LocalType (Just happy_var_2) happy_var_3 : fst happy_var_5, snd happy_var_5)+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_312 = happySpecReduce_3  68# happyReduction_312+happyReduction_312 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> +	case happyOut113 happy_x_2 of { happy_var_2 -> +	happyIn74+		 (([], happy_var_1 ++ concat happy_var_2)+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_313 = happySpecReduce_3  69# happyReduction_313+happyReduction_313 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut77 happy_x_3 of { happy_var_3 -> +	happyIn75+		 (happy_var_3 happy_var_2+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_314 = happySpecReduce_1  70# happyReduction_314+happyReduction_314 happy_x_1+	 =  case happyOut9 happy_x_1 of { happy_var_1 -> +	happyIn76+		 (Const happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_315 = happyReduce 4# 70# happyReduction_315+happyReduction_315 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut9 happy_x_3 of { happy_var_3 -> +	happyIn76+		 (Mut happy_var_3+	) `HappyStk` happyRest}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_316 = happySpecReduce_3  71# happyReduction_316+happyReduction_316 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut9 happy_x_1 of { happy_var_1 -> +	case happyOut113 happy_x_2 of { happy_var_2 -> +	happyIn77+		 (\ident -> MFGlobal $ Global [] ident (Const happy_var_1) $ concat happy_var_2+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_317 = happySpecReduce_2  71# happyReduction_317+happyReduction_317 happy_x_2+	happy_x_1+	 =  case happyOut78 happy_x_2 of { happy_var_2 -> +	happyIn77+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_318 = happyReduce 5# 72# happyReduction_318+happyReduction_318 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut9 happy_x_2 of { happy_var_2 -> +	case happyOut113 happy_x_4 of { happy_var_4 -> +	happyIn78+		 (\ident -> MFGlobal $ Global [] ident (Mut happy_var_2) $ concat happy_var_4+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_319 = happyReduce 4# 72# happyReduction_319+happyReduction_319 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut7 happy_x_2 of { happy_var_2 -> +	case happyOut77 happy_x_4 of { happy_var_4 -> +	happyIn78+		 (\ident ->+            case happy_var_4 ident of+                MFImport imp -> MFImport imp { reExportAs = happy_var_2 : reExportAs imp }+                MFGlobal global -> MFGlobal global { exportGlobalAs = happy_var_2 : exportGlobalAs global }+                _ -> error "unexpected field"+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_320 = happyReduce 6# 72# happyReduction_320+happyReduction_320 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut7 happy_x_2 of { happy_var_2 -> +	case happyOut7 happy_x_3 of { happy_var_3 -> +	case happyOut76 happy_x_5 of { happy_var_5 -> +	happyIn78+		 (\ident -> MFImport $ Import [] happy_var_2 happy_var_3 $ ImportGlobal ident happy_var_5+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_321 = happySpecReduce_3  73# happyReduction_321+happyReduction_321 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut80 happy_x_3 of { happy_var_3 -> +	happyIn79+		 (happy_var_3 happy_var_2+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_322 = happySpecReduce_1  74# happyReduction_322+happyReduction_322 happy_x_1+	 =  case happyOut83 happy_x_1 of { happy_var_1 -> +	happyIn80+		 (happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_323 = happySpecReduce_2  74# happyReduction_323+happyReduction_323 happy_x_2+	happy_x_1+	 =  case happyOut82 happy_x_2 of { happy_var_2 -> +	happyIn80+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_324 = happySpecReduce_1  75# happyReduction_324+happyReduction_324 happy_x_1+	 =  case happyOut115 happy_x_1 of { happy_var_1 -> +	happyIn81+		 (LBS.concat happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_325 = happyReduce 4# 76# happyReduction_325+happyReduction_325 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut7 happy_x_2 of { happy_var_2 -> +	case happyOut80 happy_x_4 of { happy_var_4 -> +	happyIn82+		 (\ident ->+            case happy_var_4 ident of+                [MFImport imp] -> [MFImport imp { reExportAs = happy_var_2 : reExportAs imp }]+                (MFMem (Memory exps i l)):rest -> (MFMem (Memory (happy_var_2:exps) i l)):rest+                _ -> error "unexpected field"+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_326 = happyReduce 6# 76# happyReduction_326+happyReduction_326 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut7 happy_x_2 of { happy_var_2 -> +	case happyOut7 happy_x_3 of { happy_var_3 -> +	case happyOut84 happy_x_5 of { happy_var_5 -> +	happyIn82+		 (\ident -> [MFImport $ Import [] happy_var_2 happy_var_3 $ ImportMemory ident happy_var_5]+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_327 = happyReduce 4# 76# happyReduction_327+happyReduction_327 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut81 happy_x_2 of { happy_var_2 -> +	happyIn82+		 (\ident ->+            let m = fromIntegral $ LBS.length happy_var_2 in+            [+                MFMem $ Memory [] ident $ Limit m $ Just m,+                MFData $ DataSegment (fromMaybe (Index 0) $ Named `fmap` ident) [PlainInstr $ I32Const 0] happy_var_2+            ]+	) `HappyStk` happyRest}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_328 = happySpecReduce_2  77# happyReduction_328+happyReduction_328 happy_x_2+	happy_x_1+	 =  case happyOut84 happy_x_1 of { happy_var_1 -> +	happyIn83+		 (\ident -> [MFMem $ Memory [] ident happy_var_1]+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_329 = happySpecReduce_2  78# happyReduction_329+happyReduction_329 happy_x_2+	happy_x_1+	 =  case happyOut12 happy_x_1 of { happy_var_1 -> +	case happyOut122 happy_x_2 of { happy_var_2 -> +	happyIn84+		 (Limit (fromIntegral happy_var_1) (fromIntegral `fmap` happy_var_2)+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_330 = happySpecReduce_1  79# happyReduction_330+happyReduction_330 happy_x_1+	 =  happyIn85+		 (AnyFunc+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_331 = happySpecReduce_2  80# happyReduction_331+happyReduction_331 happy_x_2+	happy_x_1+	 =  case happyOut84 happy_x_1 of { happy_var_1 -> +	case happyOut85 happy_x_2 of { happy_var_2 -> +	happyIn86+		 (TableType happy_var_1 happy_var_2+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_332 = happySpecReduce_3  81# happyReduction_332+happyReduction_332 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut88 happy_x_3 of { happy_var_3 -> +	happyIn87+		 (happy_var_3 happy_var_2+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_333 = happySpecReduce_2  82# happyReduction_333+happyReduction_333 happy_x_2+	happy_x_1+	 =  case happyOut86 happy_x_1 of { happy_var_1 -> +	happyIn88+		 (\ident -> [MFTable $ Table [] ident happy_var_1]+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_334 = happyReduce 6# 82# happyReduction_334+happyReduction_334 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut85 happy_x_1 of { happy_var_1 -> +	case happyOut112 happy_x_4 of { happy_var_4 -> +	happyIn88+		 (\ident ->+            let funcsLen = fromIntegral $ length happy_var_4 in [+                MFTable $ Table [] ident $ TableType (Limit funcsLen (Just funcsLen)) happy_var_1,+                MFElem $ ElemSegment (fromMaybe (Index 0) $ Named `fmap` ident) [PlainInstr $ I32Const 0] happy_var_4+            ]+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_335 = happySpecReduce_2  82# happyReduction_335+happyReduction_335 happy_x_2+	happy_x_1+	 =  case happyOut89 happy_x_2 of { happy_var_2 -> +	happyIn88+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_336 = happyReduce 6# 83# happyReduction_336+happyReduction_336 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut7 happy_x_2 of { happy_var_2 -> +	case happyOut7 happy_x_3 of { happy_var_3 -> +	case happyOut86 happy_x_5 of { happy_var_5 -> +	happyIn89+		 (\ident -> [MFImport $ Import [] happy_var_2 happy_var_3 $ ImportTable ident happy_var_5]+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_337 = happyReduce 4# 83# happyReduction_337+happyReduction_337 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut7 happy_x_2 of { happy_var_2 -> +	case happyOut88 happy_x_4 of { happy_var_4 -> +	happyIn89+		 (\ident ->+            case happy_var_4 ident of+                [MFImport imp] -> [MFImport imp { reExportAs = happy_var_2 : reExportAs imp }]+                (MFTable (Table exps i t)):rest -> (MFTable (Table (happy_var_2:exps) i t)):rest+                _ -> error "unexpected field"+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_338 = happySpecReduce_3  84# happyReduction_338+happyReduction_338 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn90+		 (ExportFunc happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_339 = happySpecReduce_3  84# happyReduction_339+happyReduction_339 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn90+		 (ExportTable happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_340 = happySpecReduce_3  84# happyReduction_340+happyReduction_340 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn90+		 (ExportMemory happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_341 = happySpecReduce_3  84# happyReduction_341+happyReduction_341 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn90+		 (ExportGlobal happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_342 = happyReduce 5# 85# happyReduction_342+happyReduction_342 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut7 happy_x_2 of { happy_var_2 -> +	case happyOut90 happy_x_4 of { happy_var_4 -> +	happyIn91+		 (Export happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_343 = happySpecReduce_3  86# happyReduction_343+happyReduction_343 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn92+		 (StartFunction happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_344 = happySpecReduce_3  87# happyReduction_344+happyReduction_344 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut111 happy_x_2 of { happy_var_2 -> +	happyIn93+		 (concat happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_345 = happySpecReduce_1  87# happyReduction_345+happyReduction_345 happy_x_1+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> +	happyIn93+		 (happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_346 = happyReduce 6# 88# happyReduction_346+happyReduction_346 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut120 happy_x_2 of { happy_var_2 -> +	case happyOut93 happy_x_4 of { happy_var_4 -> +	case happyOut112 happy_x_5 of { happy_var_5 -> +	happyIn94+		 (ElemSegment (fromMaybe (Index 0) happy_var_2) happy_var_4 happy_var_5+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_347 = happyReduce 6# 89# happyReduction_347+happyReduction_347 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut120 happy_x_2 of { happy_var_2 -> +	case happyOut93 happy_x_4 of { happy_var_4 -> +	case happyOut81 happy_x_5 of { happy_var_5 -> +	happyIn95+		 (DataSegment (fromMaybe (Index 0) happy_var_2) happy_var_4 happy_var_5+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_348 = happySpecReduce_1  90# happyReduction_348+happyReduction_348 happy_x_1+	 =  case happyOut20 happy_x_1 of { happy_var_1 -> +	happyIn96+		 (MFType happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_349 = happySpecReduce_1  90# happyReduction_349+happyReduction_349 happy_x_1+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> +	happyIn96+		 (MFImport happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_350 = happySpecReduce_1  90# happyReduction_350+happyReduction_350 happy_x_1+	 =  case happyOut91 happy_x_1 of { happy_var_1 -> +	happyIn96+		 (MFExport happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_351 = happySpecReduce_1  90# happyReduction_351+happyReduction_351 happy_x_1+	 =  case happyOut92 happy_x_1 of { happy_var_1 -> +	happyIn96+		 (MFStart happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_352 = happySpecReduce_1  90# happyReduction_352+happyReduction_352 happy_x_1+	 =  case happyOut94 happy_x_1 of { happy_var_1 -> +	happyIn96+		 (MFElem happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_353 = happySpecReduce_1  90# happyReduction_353+happyReduction_353 happy_x_1+	 =  case happyOut95 happy_x_1 of { happy_var_1 -> +	happyIn96+		 (MFData happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_354 = happySpecReduce_1  90# happyReduction_354+happyReduction_354 happy_x_1+	 =  case happyOut64 happy_x_1 of { happy_var_1 -> +	happyIn96+		 (happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_355 = happySpecReduce_1  90# happyReduction_355+happyReduction_355 happy_x_1+	 =  case happyOut75 happy_x_1 of { happy_var_1 -> +	happyIn96+		 (happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_356 = happySpecReduce_1  91# happyReduction_356+happyReduction_356 happy_x_1+	 =  case happyOut87 happy_x_1 of { happy_var_1 -> +	happyIn97+		 (happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_357 = happySpecReduce_1  91# happyReduction_357+happyReduction_357 happy_x_1+	 =  case happyOut79 happy_x_1 of { happy_var_1 -> +	happyIn97+		 (happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_358 = happySpecReduce_1  92# happyReduction_358+happyReduction_358 happy_x_1+	 =  case happyOut96 happy_x_1 of { happy_var_1 -> +	happyIn98+		 ([happy_var_1]+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_359 = happySpecReduce_1  92# happyReduction_359+happyReduction_359 happy_x_1+	 =  case happyOut97 happy_x_1 of { happy_var_1 -> +	happyIn98+		 (happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_360 = happySpecReduce_2  93# happyReduction_360+happyReduction_360 happy_x_2+	happy_x_1+	 =  case happyOut98 happy_x_2 of { happy_var_2 -> +	happyIn99+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_361 = happyReduce 5# 94# happyReduction_361+happyReduction_361 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut114 happy_x_3 of { happy_var_3 -> +	happyIn100+		 (concat happy_var_3+	) `HappyStk` happyRest}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_362 = happyReduce 4# 94# happyReduction_362+happyReduction_362 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut98 happy_x_2 of { happy_var_2 -> +	case happyOut114 happy_x_3 of { happy_var_3 -> +	happyIn100+		 (happy_var_2 ++ concat happy_var_3+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_363 = happyMonadReduce 1# 95# happyReduction_363+happyReduction_363 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOut100 happy_x_1 of { happy_var_1 -> +	( desugarize happy_var_1)})+	) (\r -> happyReturn (happyIn101 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_364 = happySpecReduce_2  96# happyReduction_364+happyReduction_364 happy_x_2+	happy_x_1+	 =  case happyOut110 happy_x_1 of { happy_var_1 -> +	happyIn102+		 (happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_365 = happySpecReduce_2  97# happyReduction_365+happyReduction_365 happy_x_2+	happy_x_1+	 =  case happyOut104 happy_x_2 of { happy_var_2 -> +	happyIn103+		 (happy_var_2+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_366 = happySpecReduce_1  98# happyReduction_366+happyReduction_366 happy_x_1+	 =  case happyOut105 happy_x_1 of { happy_var_1 -> +	happyIn104+		 (ModuleDef happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_367 = happyReduce 4# 98# happyReduction_367+happyReduction_367 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut6 happy_x_2 of { happy_var_2 -> +	case happyOut119 happy_x_3 of { happy_var_3 -> +	happyIn104+		 (Register happy_var_2 happy_var_3+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_368 = happySpecReduce_1  98# happyReduction_368+happyReduction_368 happy_x_1+	 =  case happyOut106 happy_x_1 of { happy_var_1 -> +	happyIn104+		 (Action happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_369 = happySpecReduce_1  98# happyReduction_369+happyReduction_369 happy_x_1+	 =  case happyOut107 happy_x_1 of { happy_var_1 -> +	happyIn104+		 (Assertion happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_370 = happySpecReduce_1  98# happyReduction_370+happyReduction_370 happy_x_1+	 =  case happyOut109 happy_x_1 of { happy_var_1 -> +	happyIn104+		 (Meta happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_371 = happyReduce 5# 99# happyReduction_371+happyReduction_371 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut81 happy_x_4 of { happy_var_4 -> +	happyIn105+		 (BinaryModDef happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_372 = happyReduce 5# 99# happyReduction_372+happyReduction_372 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut116 happy_x_4 of { happy_var_4 -> +	happyIn105+		 (TextModDef happy_var_2 (TL.concat happy_var_4)+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_373 = happyMonadReduce 4# 99# happyReduction_373+happyReduction_373 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut114 happy_x_3 of { happy_var_3 -> +	( RawModDef happy_var_2 `fmap` (desugarize $ concat happy_var_3))}})+	) (\r -> happyReturn (happyIn105 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_374 = happyMonadReduce 2# 99# happyReduction_374+happyReduction_374 (happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen ((case happyOut98 happy_x_1 of { happy_var_1 -> +	case happyOut114 happy_x_2 of { happy_var_2 -> +	( RawModDef Nothing `fmap` (desugarize $ happy_var_1 ++ concat happy_var_2))}})+	) (\r -> happyReturn (happyIn105 r))++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_375 = happyReduce 5# 100# happyReduction_375+happyReduction_375 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut6 happy_x_3 of { happy_var_3 -> +	case happyOut111 happy_x_4 of { happy_var_4 -> +	happyIn106+		 (Invoke happy_var_2 happy_var_3 (map (map constInstructionToValue) happy_var_4)+	) `HappyStk` happyRest}}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_376 = happyReduce 4# 100# happyReduction_376+happyReduction_376 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut6 happy_x_3 of { happy_var_3 -> +	happyIn106+		 (Get happy_var_2 happy_var_3+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_377 = happyReduce 5# 101# happyReduction_377+happyReduction_377 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut106 happy_x_3 of { happy_var_3 -> +	case happyOut111 happy_x_4 of { happy_var_4 -> +	happyIn107+		 (AssertReturn happy_var_3 (map (map constInstructionToValue) happy_var_4)+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_378 = happyReduce 4# 101# happyReduction_378+happyReduction_378 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut106 happy_x_3 of { happy_var_3 -> +	happyIn107+		 (AssertReturnCanonicalNaN happy_var_3+	) `HappyStk` happyRest}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_379 = happyReduce 4# 101# happyReduction_379+happyReduction_379 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut106 happy_x_3 of { happy_var_3 -> +	happyIn107+		 (AssertReturnArithmeticNaN happy_var_3+	) `HappyStk` happyRest}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_380 = happyReduce 5# 101# happyReduction_380+happyReduction_380 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut108 happy_x_3 of { happy_var_3 -> +	case happyOut6 happy_x_4 of { happy_var_4 -> +	happyIn107+		 (AssertTrap happy_var_3 happy_var_4+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_381 = happyReduce 5# 101# happyReduction_381+happyReduction_381 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut105 happy_x_3 of { happy_var_3 -> +	case happyOut6 happy_x_4 of { happy_var_4 -> +	happyIn107+		 (AssertMalformed happy_var_3 happy_var_4+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_382 = happyReduce 5# 101# happyReduction_382+happyReduction_382 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut105 happy_x_3 of { happy_var_3 -> +	case happyOut6 happy_x_4 of { happy_var_4 -> +	happyIn107+		 (AssertInvalid happy_var_3 happy_var_4+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_383 = happyReduce 5# 101# happyReduction_383+happyReduction_383 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut105 happy_x_3 of { happy_var_3 -> +	case happyOut6 happy_x_4 of { happy_var_4 -> +	happyIn107+		 (AssertUnlinkable happy_var_3 happy_var_4+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_384 = happyReduce 5# 101# happyReduction_384+happyReduction_384 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut106 happy_x_3 of { happy_var_3 -> +	case happyOut6 happy_x_4 of { happy_var_4 -> +	happyIn107+		 (AssertExhaustion happy_var_3 happy_var_4+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_385 = happySpecReduce_1  102# happyReduction_385+happyReduction_385 happy_x_1+	 =  case happyOut106 happy_x_1 of { happy_var_1 -> +	happyIn108+		 (Left happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_386 = happySpecReduce_1  102# happyReduction_386+happyReduction_386 happy_x_1+	 =  case happyOut105 happy_x_1 of { happy_var_1 -> +	happyIn108+		 (Right happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_387 = happyReduce 4# 103# happyReduction_387+happyReduction_387 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut102 happy_x_3 of { happy_var_3 -> +	happyIn109+		 (Script happy_var_2 happy_var_3+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_388 = happyReduce 4# 103# happyReduction_388+happyReduction_388 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut6 happy_x_3 of { happy_var_3 -> +	happyIn109+		 (Input happy_var_2 happy_var_3+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_389 = happyReduce 4# 103# happyReduction_389+happyReduction_389 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut119 happy_x_2 of { happy_var_2 -> +	case happyOut6 happy_x_3 of { happy_var_3 -> +	happyIn109+		 (Output happy_var_2 happy_var_3+	) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_390 = happySpecReduce_1  104# happyReduction_390+happyReduction_390 happy_x_1+	 =  case happyOut124 happy_x_1 of { happy_var_1 -> +	happyIn110+		 (reverse happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_391 = happySpecReduce_1  105# happyReduction_391+happyReduction_391 happy_x_1+	 =  case happyOut125 happy_x_1 of { happy_var_1 -> +	happyIn111+		 (reverse happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_392 = happySpecReduce_1  106# happyReduction_392+happyReduction_392 happy_x_1+	 =  case happyOut126 happy_x_1 of { happy_var_1 -> +	happyIn112+		 (reverse happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_393 = happySpecReduce_1  107# happyReduction_393+happyReduction_393 happy_x_1+	 =  case happyOut127 happy_x_1 of { happy_var_1 -> +	happyIn113+		 (reverse happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_394 = happySpecReduce_1  108# happyReduction_394+happyReduction_394 happy_x_1+	 =  case happyOut128 happy_x_1 of { happy_var_1 -> +	happyIn114+		 (reverse happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_395 = happySpecReduce_1  109# happyReduction_395+happyReduction_395 happy_x_1+	 =  case happyOut129 happy_x_1 of { happy_var_1 -> +	happyIn115+		 (reverse happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_396 = happySpecReduce_1  110# happyReduction_396+happyReduction_396 happy_x_1+	 =  case happyOut130 happy_x_1 of { happy_var_1 -> +	happyIn116+		 (reverse happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_397 = happySpecReduce_1  111# happyReduction_397+happyReduction_397 happy_x_1+	 =  case happyOut131 happy_x_1 of { happy_var_1 -> +	happyIn117+		 (reverse happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_398 = happySpecReduce_1  112# happyReduction_398+happyReduction_398 happy_x_1+	 =  case happyOutTok happy_x_1 of { (Lexeme _ (TKeyword (asAlign -> Just happy_var_1))) -> +	happyIn118+		 (Just happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_399 = happySpecReduce_0  112# happyReduction_399+happyReduction_399  =  happyIn118+		 (Nothing+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_400 = happySpecReduce_1  113# happyReduction_400+happyReduction_400 happy_x_1+	 =  case happyOut8 happy_x_1 of { happy_var_1 -> +	happyIn119+		 (Just happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_401 = happySpecReduce_0  113# happyReduction_401+happyReduction_401  =  happyIn119+		 (Nothing+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_402 = happySpecReduce_1  114# happyReduction_402+happyReduction_402 happy_x_1+	 =  case happyOut10 happy_x_1 of { happy_var_1 -> +	happyIn120+		 (Just happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_403 = happySpecReduce_0  114# happyReduction_403+happyReduction_403  =  happyIn120+		 (Nothing+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_404 = happySpecReduce_1  115# happyReduction_404+happyReduction_404 happy_x_1+	 =  case happyOutTok happy_x_1 of { (Lexeme _ (TKeyword (asOffset -> Just happy_var_1))) -> +	happyIn121+		 (Just happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_405 = happySpecReduce_0  115# happyReduction_405+happyReduction_405  =  happyIn121+		 (Nothing+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_406 = happySpecReduce_1  116# happyReduction_406+happyReduction_406 happy_x_1+	 =  case happyOut12 happy_x_1 of { happy_var_1 -> +	happyIn122+		 (Just happy_var_1+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_407 = happySpecReduce_0  116# happyReduction_407+happyReduction_407  =  happyIn122+		 (Nothing+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_408 = happySpecReduce_2  117# happyReduction_408+happyReduction_408 happy_x_2+	happy_x_1+	 =  case happyOut123 happy_x_1 of { happy_var_1 -> +	case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn123+		 (happy_var_2 : happy_var_1+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_409 = happySpecReduce_1  117# happyReduction_409+happyReduction_409 happy_x_1+	 =  case happyOut10 happy_x_1 of { happy_var_1 -> +	happyIn123+		 ([happy_var_1]+	)}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_410 = happySpecReduce_2  118# happyReduction_410+happyReduction_410 happy_x_2+	happy_x_1+	 =  case happyOut124 happy_x_1 of { happy_var_1 -> +	case happyOut103 happy_x_2 of { happy_var_2 -> +	happyIn124+		 (happy_var_2 : happy_var_1+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_411 = happySpecReduce_0  118# happyReduction_411+happyReduction_411  =  happyIn124+		 ([]+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_412 = happySpecReduce_2  119# happyReduction_412+happyReduction_412 happy_x_2+	happy_x_1+	 =  case happyOut125 happy_x_1 of { happy_var_1 -> +	case happyOut47 happy_x_2 of { happy_var_2 -> +	happyIn125+		 (happy_var_2 : happy_var_1+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_413 = happySpecReduce_0  119# happyReduction_413+happyReduction_413  =  happyIn125+		 ([]+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_414 = happySpecReduce_2  120# happyReduction_414+happyReduction_414 happy_x_2+	happy_x_1+	 =  case happyOut126 happy_x_1 of { happy_var_1 -> +	case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn126+		 (happy_var_2 : happy_var_1+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_415 = happySpecReduce_0  120# happyReduction_415+happyReduction_415  =  happyIn126+		 ([]+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_416 = happySpecReduce_2  121# happyReduction_416+happyReduction_416 happy_x_2+	happy_x_1+	 =  case happyOut127 happy_x_1 of { happy_var_1 -> +	case happyOut32 happy_x_2 of { happy_var_2 -> +	happyIn127+		 (happy_var_2 : happy_var_1+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_417 = happySpecReduce_0  121# happyReduction_417+happyReduction_417  =  happyIn127+		 ([]+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_418 = happySpecReduce_2  122# happyReduction_418+happyReduction_418 happy_x_2+	happy_x_1+	 =  case happyOut128 happy_x_1 of { happy_var_1 -> +	case happyOut99 happy_x_2 of { happy_var_2 -> +	happyIn128+		 (happy_var_2 : happy_var_1+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_419 = happySpecReduce_0  122# happyReduction_419+happyReduction_419  =  happyIn128+		 ([]+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_420 = happySpecReduce_2  123# happyReduction_420+happyReduction_420 happy_x_2+	happy_x_1+	 =  case happyOut129 happy_x_1 of { happy_var_1 -> +	case happyOutTok happy_x_2 of { (Lexeme _ (TStringLit happy_var_2)) -> +	happyIn129+		 (happy_var_2 : happy_var_1+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_421 = happySpecReduce_0  123# happyReduction_421+happyReduction_421  =  happyIn129+		 ([]+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_422 = happySpecReduce_2  124# happyReduction_422+happyReduction_422 happy_x_2+	happy_x_1+	 =  case happyOut130 happy_x_1 of { happy_var_1 -> +	case happyOut6 happy_x_2 of { happy_var_2 -> +	happyIn130+		 (happy_var_2 : happy_var_1+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_423 = happySpecReduce_0  124# happyReduction_423+happyReduction_423  =  happyIn130+		 ([]+	)++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_424 = happySpecReduce_2  125# happyReduction_424+happyReduction_424 happy_x_2+	happy_x_1+	 =  case happyOut131 happy_x_1 of { happy_var_1 -> +	case happyOut9 happy_x_2 of { happy_var_2 -> +	happyIn131+		 (happy_var_2 : happy_var_1+	)}}++#if __GLASGOW_HASKELL__ >= 710+#endif+happyReduce_425 = happySpecReduce_0  125# happyReduction_425+happyReduction_425  =  happyIn131+		 ([]+	)++happyNewToken action sts stk [] =+	happyDoAction 222# notHappyAtAll action sts stk []++happyNewToken action sts stk (tk:tks) =+	let cont i = happyDoAction i tk action sts stk tks in+	case tk of {+	Lexeme _ TOpenBracket -> cont 1#;+	Lexeme _ TCloseBracket -> cont 2#;+	Lexeme _ (TKeyword "func") -> cont 3#;+	Lexeme _ (TKeyword "param") -> cont 4#;+	Lexeme _ (TKeyword "result") -> cont 5#;+	Lexeme _ (TKeyword "i32") -> cont 6#;+	Lexeme _ (TKeyword "i64") -> cont 7#;+	Lexeme _ (TKeyword "f32") -> cont 8#;+	Lexeme _ (TKeyword "f64") -> cont 9#;+	Lexeme _ (TKeyword "mut") -> cont 10#;+	Lexeme _ (TKeyword "anyfunc") -> cont 11#;+	Lexeme _ (TKeyword "type") -> cont 12#;+	Lexeme _ (TKeyword "unreachable") -> cont 13#;+	Lexeme _ (TKeyword "nop") -> cont 14#;+	Lexeme _ (TKeyword "br") -> cont 15#;+	Lexeme _ (TKeyword "br_if") -> cont 16#;+	Lexeme _ (TKeyword "br_table") -> cont 17#;+	Lexeme _ (TKeyword "return") -> cont 18#;+	Lexeme _ (TKeyword "call") -> cont 19#;+	Lexeme _ (TKeyword "call_indirect") -> cont 20#;+	Lexeme _ (TKeyword "drop") -> cont 21#;+	Lexeme _ (TKeyword "select") -> cont 22#;+	Lexeme _ (TKeyword "get_local") -> cont 23#;+	Lexeme _ (TKeyword "set_local") -> cont 24#;+	Lexeme _ (TKeyword "tee_local") -> cont 25#;+	Lexeme _ (TKeyword "get_global") -> cont 26#;+	Lexeme _ (TKeyword "set_global") -> cont 27#;+	Lexeme _ (TKeyword "i32.load") -> cont 28#;+	Lexeme _ (TKeyword "i64.load") -> cont 29#;+	Lexeme _ (TKeyword "f32.load") -> cont 30#;+	Lexeme _ (TKeyword "f64.load") -> cont 31#;+	Lexeme _ (TKeyword "i32.load8_s") -> cont 32#;+	Lexeme _ (TKeyword "i32.load8_u") -> cont 33#;+	Lexeme _ (TKeyword "i32.load16_s") -> cont 34#;+	Lexeme _ (TKeyword "i32.load16_u") -> cont 35#;+	Lexeme _ (TKeyword "i64.load8_s") -> cont 36#;+	Lexeme _ (TKeyword "i64.load8_u") -> cont 37#;+	Lexeme _ (TKeyword "i64.load16_s") -> cont 38#;+	Lexeme _ (TKeyword "i64.load16_u") -> cont 39#;+	Lexeme _ (TKeyword "i64.load32_s") -> cont 40#;+	Lexeme _ (TKeyword "i64.load32_u") -> cont 41#;+	Lexeme _ (TKeyword "i32.store") -> cont 42#;+	Lexeme _ (TKeyword "i64.store") -> cont 43#;+	Lexeme _ (TKeyword "f32.store") -> cont 44#;+	Lexeme _ (TKeyword "f64.store") -> cont 45#;+	Lexeme _ (TKeyword "i32.store8") -> cont 46#;+	Lexeme _ (TKeyword "i32.store16") -> cont 47#;+	Lexeme _ (TKeyword "i64.store8") -> cont 48#;+	Lexeme _ (TKeyword "i64.store16") -> cont 49#;+	Lexeme _ (TKeyword "i64.store32") -> cont 50#;+	Lexeme _ (TKeyword "current_memory") -> cont 51#;+	Lexeme _ (TKeyword "grow_memory") -> cont 52#;+	Lexeme _ (TKeyword "memory.size") -> cont 53#;+	Lexeme _ (TKeyword "memory.grow") -> cont 54#;+	Lexeme _ (TKeyword "i32.const") -> cont 55#;+	Lexeme _ (TKeyword "i64.const") -> cont 56#;+	Lexeme _ (TKeyword "f32.const") -> cont 57#;+	Lexeme _ (TKeyword "f64.const") -> cont 58#;+	Lexeme _ (TKeyword "i32.clz") -> cont 59#;+	Lexeme _ (TKeyword "i32.ctz") -> cont 60#;+	Lexeme _ (TKeyword "i32.popcnt") -> cont 61#;+	Lexeme _ (TKeyword "i32.add") -> cont 62#;+	Lexeme _ (TKeyword "i32.sub") -> cont 63#;+	Lexeme _ (TKeyword "i32.mul") -> cont 64#;+	Lexeme _ (TKeyword "i32.div_s") -> cont 65#;+	Lexeme _ (TKeyword "i32.div_u") -> cont 66#;+	Lexeme _ (TKeyword "i32.rem_s") -> cont 67#;+	Lexeme _ (TKeyword "i32.rem_u") -> cont 68#;+	Lexeme _ (TKeyword "i32.and") -> cont 69#;+	Lexeme _ (TKeyword "i32.or") -> cont 70#;+	Lexeme _ (TKeyword "i32.xor") -> cont 71#;+	Lexeme _ (TKeyword "i32.shl") -> cont 72#;+	Lexeme _ (TKeyword "i32.shr_s") -> cont 73#;+	Lexeme _ (TKeyword "i32.shr_u") -> cont 74#;+	Lexeme _ (TKeyword "i32.rotl") -> cont 75#;+	Lexeme _ (TKeyword "i32.rotr") -> cont 76#;+	Lexeme _ (TKeyword "i64.clz") -> cont 77#;+	Lexeme _ (TKeyword "i64.ctz") -> cont 78#;+	Lexeme _ (TKeyword "i64.popcnt") -> cont 79#;+	Lexeme _ (TKeyword "i64.add") -> cont 80#;+	Lexeme _ (TKeyword "i64.sub") -> cont 81#;+	Lexeme _ (TKeyword "i64.mul") -> cont 82#;+	Lexeme _ (TKeyword "i64.div_s") -> cont 83#;+	Lexeme _ (TKeyword "i64.div_u") -> cont 84#;+	Lexeme _ (TKeyword "i64.rem_s") -> cont 85#;+	Lexeme _ (TKeyword "i64.rem_u") -> cont 86#;+	Lexeme _ (TKeyword "i64.and") -> cont 87#;+	Lexeme _ (TKeyword "i64.or") -> cont 88#;+	Lexeme _ (TKeyword "i64.xor") -> cont 89#;+	Lexeme _ (TKeyword "i64.shl") -> cont 90#;+	Lexeme _ (TKeyword "i64.shr_s") -> cont 91#;+	Lexeme _ (TKeyword "i64.shr_u") -> cont 92#;+	Lexeme _ (TKeyword "i64.rotl") -> cont 93#;+	Lexeme _ (TKeyword "i64.rotr") -> cont 94#;+	Lexeme _ (TKeyword "f32.abs") -> cont 95#;+	Lexeme _ (TKeyword "f32.neg") -> cont 96#;+	Lexeme _ (TKeyword "f32.ceil") -> cont 97#;+	Lexeme _ (TKeyword "f32.floor") -> cont 98#;+	Lexeme _ (TKeyword "f32.trunc") -> cont 99#;+	Lexeme _ (TKeyword "f32.nearest") -> cont 100#;+	Lexeme _ (TKeyword "f32.sqrt") -> cont 101#;+	Lexeme _ (TKeyword "f32.add") -> cont 102#;+	Lexeme _ (TKeyword "f32.sub") -> cont 103#;+	Lexeme _ (TKeyword "f32.mul") -> cont 104#;+	Lexeme _ (TKeyword "f32.div") -> cont 105#;+	Lexeme _ (TKeyword "f32.min") -> cont 106#;+	Lexeme _ (TKeyword "f32.max") -> cont 107#;+	Lexeme _ (TKeyword "f32.copysign") -> cont 108#;+	Lexeme _ (TKeyword "f64.abs") -> cont 109#;+	Lexeme _ (TKeyword "f64.neg") -> cont 110#;+	Lexeme _ (TKeyword "f64.ceil") -> cont 111#;+	Lexeme _ (TKeyword "f64.floor") -> cont 112#;+	Lexeme _ (TKeyword "f64.trunc") -> cont 113#;+	Lexeme _ (TKeyword "f64.nearest") -> cont 114#;+	Lexeme _ (TKeyword "f64.sqrt") -> cont 115#;+	Lexeme _ (TKeyword "f64.add") -> cont 116#;+	Lexeme _ (TKeyword "f64.sub") -> cont 117#;+	Lexeme _ (TKeyword "f64.mul") -> cont 118#;+	Lexeme _ (TKeyword "f64.div") -> cont 119#;+	Lexeme _ (TKeyword "f64.min") -> cont 120#;+	Lexeme _ (TKeyword "f64.max") -> cont 121#;+	Lexeme _ (TKeyword "f64.copysign") -> cont 122#;+	Lexeme _ (TKeyword "i32.eqz") -> cont 123#;+	Lexeme _ (TKeyword "i32.eq") -> cont 124#;+	Lexeme _ (TKeyword "i32.ne") -> cont 125#;+	Lexeme _ (TKeyword "i32.lt_s") -> cont 126#;+	Lexeme _ (TKeyword "i32.lt_u") -> cont 127#;+	Lexeme _ (TKeyword "i32.gt_s") -> cont 128#;+	Lexeme _ (TKeyword "i32.gt_u") -> cont 129#;+	Lexeme _ (TKeyword "i32.le_s") -> cont 130#;+	Lexeme _ (TKeyword "i32.le_u") -> cont 131#;+	Lexeme _ (TKeyword "i32.ge_s") -> cont 132#;+	Lexeme _ (TKeyword "i32.ge_u") -> cont 133#;+	Lexeme _ (TKeyword "i64.eqz") -> cont 134#;+	Lexeme _ (TKeyword "i64.eq") -> cont 135#;+	Lexeme _ (TKeyword "i64.ne") -> cont 136#;+	Lexeme _ (TKeyword "i64.lt_s") -> cont 137#;+	Lexeme _ (TKeyword "i64.lt_u") -> cont 138#;+	Lexeme _ (TKeyword "i64.gt_s") -> cont 139#;+	Lexeme _ (TKeyword "i64.gt_u") -> cont 140#;+	Lexeme _ (TKeyword "i64.le_s") -> cont 141#;+	Lexeme _ (TKeyword "i64.le_u") -> cont 142#;+	Lexeme _ (TKeyword "i64.ge_s") -> cont 143#;+	Lexeme _ (TKeyword "i64.ge_u") -> cont 144#;+	Lexeme _ (TKeyword "f32.eq") -> cont 145#;+	Lexeme _ (TKeyword "f32.ne") -> cont 146#;+	Lexeme _ (TKeyword "f32.lt") -> cont 147#;+	Lexeme _ (TKeyword "f32.gt") -> cont 148#;+	Lexeme _ (TKeyword "f32.le") -> cont 149#;+	Lexeme _ (TKeyword "f32.ge") -> cont 150#;+	Lexeme _ (TKeyword "f64.eq") -> cont 151#;+	Lexeme _ (TKeyword "f64.ne") -> cont 152#;+	Lexeme _ (TKeyword "f64.lt") -> cont 153#;+	Lexeme _ (TKeyword "f64.gt") -> cont 154#;+	Lexeme _ (TKeyword "f64.le") -> cont 155#;+	Lexeme _ (TKeyword "f64.ge") -> cont 156#;+	Lexeme _ (TKeyword "i32.wrap/i64") -> cont 157#;+	Lexeme _ (TKeyword "i32.trunc_s/f32") -> cont 158#;+	Lexeme _ (TKeyword "i32.trunc_u/f32") -> cont 159#;+	Lexeme _ (TKeyword "i32.trunc_s/f64") -> cont 160#;+	Lexeme _ (TKeyword "i32.trunc_u/f64") -> cont 161#;+	Lexeme _ (TKeyword "i64.extend_s/i32") -> cont 162#;+	Lexeme _ (TKeyword "i64.extend_u/i32") -> cont 163#;+	Lexeme _ (TKeyword "i64.trunc_s/f32") -> cont 164#;+	Lexeme _ (TKeyword "i64.trunc_u/f32") -> cont 165#;+	Lexeme _ (TKeyword "i64.trunc_s/f64") -> cont 166#;+	Lexeme _ (TKeyword "i64.trunc_u/f64") -> cont 167#;+	Lexeme _ (TKeyword "f32.convert_s/i32") -> cont 168#;+	Lexeme _ (TKeyword "f32.convert_u/i32") -> cont 169#;+	Lexeme _ (TKeyword "f32.convert_s/i64") -> cont 170#;+	Lexeme _ (TKeyword "f32.convert_u/i64") -> cont 171#;+	Lexeme _ (TKeyword "f32.demote/f64") -> cont 172#;+	Lexeme _ (TKeyword "f64.convert_s/i32") -> cont 173#;+	Lexeme _ (TKeyword "f64.convert_u/i32") -> cont 174#;+	Lexeme _ (TKeyword "f64.convert_s/i64") -> cont 175#;+	Lexeme _ (TKeyword "f64.convert_u/i64") -> cont 176#;+	Lexeme _ (TKeyword "f64.promote/f32") -> cont 177#;+	Lexeme _ (TKeyword "i32.reinterpret/f32") -> cont 178#;+	Lexeme _ (TKeyword "i64.reinterpret/f64") -> cont 179#;+	Lexeme _ (TKeyword "f32.reinterpret/i32") -> cont 180#;+	Lexeme _ (TKeyword "f64.reinterpret/i64") -> cont 181#;+	Lexeme _ (TKeyword "block") -> cont 182#;+	Lexeme _ (TKeyword "loop") -> cont 183#;+	Lexeme _ (TKeyword "if") -> cont 184#;+	Lexeme _ (TKeyword "else") -> cont 185#;+	Lexeme _ (TKeyword "end") -> cont 186#;+	Lexeme _ (TKeyword "then") -> cont 187#;+	Lexeme _ (TKeyword "table") -> cont 188#;+	Lexeme _ (TKeyword "memory") -> cont 189#;+	Lexeme _ (TKeyword "global") -> cont 190#;+	Lexeme _ (TKeyword "import") -> cont 191#;+	Lexeme _ (TKeyword "export") -> cont 192#;+	Lexeme _ (TKeyword "local") -> cont 193#;+	Lexeme _ (TKeyword "elem") -> cont 194#;+	Lexeme _ (TKeyword "data") -> cont 195#;+	Lexeme _ (TKeyword "offset") -> cont 196#;+	Lexeme _ (TKeyword "start") -> cont 197#;+	Lexeme _ (TKeyword "module") -> cont 198#;+	Lexeme _ (TKeyword "binary") -> cont 199#;+	Lexeme _ (TKeyword "quote") -> cont 200#;+	Lexeme _ (TKeyword "register") -> cont 201#;+	Lexeme _ (TKeyword "invoke") -> cont 202#;+	Lexeme _ (TKeyword "get") -> cont 203#;+	Lexeme _ (TKeyword "assert_return") -> cont 204#;+	Lexeme _ (TKeyword "assert_return_canonical_nan") -> cont 205#;+	Lexeme _ (TKeyword "assert_return_arithmetic_nan") -> cont 206#;+	Lexeme _ (TKeyword "assert_trap") -> cont 207#;+	Lexeme _ (TKeyword "assert_malformed") -> cont 208#;+	Lexeme _ (TKeyword "assert_invalid") -> cont 209#;+	Lexeme _ (TKeyword "assert_unlinkable") -> cont 210#;+	Lexeme _ (TKeyword "assert_exhaustion") -> cont 211#;+	Lexeme _ (TKeyword "script") -> cont 212#;+	Lexeme _ (TKeyword "input") -> cont 213#;+	Lexeme _ (TKeyword "output") -> cont 214#;+	Lexeme _ (TId happy_dollar_dollar) -> cont 215#;+	Lexeme _ (TIntLit happy_dollar_dollar) -> cont 216#;+	Lexeme _ (TFloatLit happy_dollar_dollar) -> cont 217#;+	Lexeme _ (TKeyword (asOffset -> Just happy_dollar_dollar)) -> cont 218#;+	Lexeme _ (TKeyword (asAlign -> Just happy_dollar_dollar)) -> cont 219#;+	Lexeme _ (TStringLit happy_dollar_dollar) -> cont 220#;+	Lexeme _ EOF -> cont 221#;+	_ -> happyError' ((tk:tks), [])+	}++happyError_ explist 222# tk tks = happyError' (tks, explist)+happyError_ explist _ tk tks = happyError' ((tk:tks), explist)++happyThen :: () => Either String a -> (a -> Either String b) -> Either String b+happyThen = (>>=)+happyReturn :: () => a -> Either String a+happyReturn = (return)+happyThen1 m k tks = (>>=) m (\a -> k a tks)+happyReturn1 :: () => a -> b -> Either String a+happyReturn1 = \a tks -> (return) a+happyError' :: () => ([(Lexeme)], [String]) -> Either String a+happyError' = (\(tokens, _) -> happyError tokens)+parseModule tks = happySomeParser where+ happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut101 x))++parseModuleFields tks = happySomeParser where+ happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut100 x))++parseScript tks = happySomeParser where+ happySomeParser = happyThen (happyParse 2# tks) (\x -> happyReturn (happyOut102 x))++happySeq = happyDontSeq+++-- partial function by intention+prependFuncParams :: [ParamType] -> Function -> Function+prependFuncParams prep f@(Function { funcType = AnonimousTypeUse ft }) =+    f { funcType = AnonimousTypeUse $ ft { params = prep ++ params ft } }++prependFuncResults :: [ValueType] -> Function -> Function+prependFuncResults prep f@(Function { funcType = AnonimousTypeUse ft }) =+    f { funcType = AnonimousTypeUse $ ft { results = prep ++ results ft } }++mergeFuncType :: FuncType -> FuncType -> FuncType+mergeFuncType (FuncType lps lrs) (FuncType rps rrs) = FuncType (lps ++ rps) (lrs ++ rrs)++matchIdents :: Maybe Ident -> Maybe Ident -> Bool+matchIdents Nothing _ = True+matchIdents _ Nothing = True+matchIdents a b = a == b++asOffset :: LBS.ByteString -> Maybe Natural+asOffset str = do+    num <- TL.stripPrefix "offset=" $ TLEncoding.decodeUtf8 str+    fromIntegral . fst <$> eitherToMaybe (TLRead.decimal num)++asAlign :: LBS.ByteString -> Maybe Natural+asAlign str = do+    num <- TL.stripPrefix "align=" $ TLEncoding.decodeUtf8 str+    fromIntegral . fst <$> eitherToMaybe (TLRead.decimal num)++parseMemArg :: Natural -> Maybe Natural -> Maybe Natural -> Either String MemArg+parseMemArg defAlign optOffset optAlign = do+    let offset = fromMaybe 0 optOffset+    let parsedAlign = fromIntegral $ fromMaybe defAlign optAlign+    if parsedAlign == 0 then Left "alignment" else return ()+    let align = fromIntegral $ round $ logBase 2 parsedAlign+    if 2 ^ align /= parsedAlign then Left "alignment" else return ()+    if offset >= 2 ^ 32 || align >= 2 ^ 32+    then Left "u32 is out of boundaries"+    else return $ MemArg offset align++eitherToMaybe :: Either left right -> Maybe right+eitherToMaybe = either (const Nothing) Just++integerToWord32 :: Integer -> Word32+integerToWord32 i+    | i >= 0 && i <= 2 ^ 32 = fromIntegral i+    | i < 0 && i >= -(2 ^ 31) = 0xFFFFFFFF - (fromIntegral (abs i)) + 1+    | otherwise = error "I32 is out of bounds."++integerToWord64 :: Integer -> Word64+integerToWord64 i+    | i >= 0 && i <= 2 ^ 64 = fromIntegral i+    | i < 0 && i >= -(2 ^ 63) = 0xFFFFFFFFFFFFFFFF - (fromIntegral (abs i)) + 1+    | otherwise = error "I64 is out of bounds."++data FuncType = FuncType { params :: [ParamType], results :: [ValueType] } deriving (Show, Eq, Generic, NFData)++emptyFuncType :: FuncType+emptyFuncType = FuncType [] []++data ParamType = ParamType {+        ident :: Maybe Ident,+        paramType :: ValueType+    } deriving (Show, Eq, Generic, NFData)++newtype Ident = Ident TL.Text deriving (Show, Eq, Generic, NFData)++data Index = Named Ident | Index Natural deriving (Show, Eq, Generic, NFData)++type LabelIndex = Index+type FuncIndex = Index+type TypeIndex = Index+type LocalIndex = Index+type GlobalIndex = Index+type TableIndex = Index+type MemoryIndex = Index++data PlainInstr =+    -- Control instructions+    Unreachable+    | Nop+    | Br LabelIndex+    | BrIf LabelIndex+    | BrTable [LabelIndex] LabelIndex+    | Return+    | Call FuncIndex+    | CallIndirect TypeUse+    -- Parametric instructions+    | Drop+    | Select+    -- Variable instructions+    | GetLocal LocalIndex+    | SetLocal LocalIndex+    | TeeLocal LocalIndex+    | GetGlobal GlobalIndex+    | SetGlobal GlobalIndex+    -- Memory instructions+    | I32Load MemArg+    | I64Load MemArg+    | F32Load MemArg+    | F64Load MemArg+    | I32Load8S MemArg+    | I32Load8U MemArg+    | I32Load16S MemArg+    | I32Load16U MemArg+    | I64Load8S MemArg+    | I64Load8U MemArg+    | I64Load16S MemArg+    | I64Load16U MemArg+    | I64Load32S MemArg+    | I64Load32U MemArg+    | I32Store MemArg+    | I64Store MemArg+    | F32Store MemArg+    | F64Store MemArg+    | I32Store8 MemArg+    | I32Store16 MemArg+    | I64Store8 MemArg+    | I64Store16 MemArg+    | I64Store32 MemArg+    | CurrentMemory+    | GrowMemory+    -- Numeric instructions+    | I32Const Integer+    | I64Const Integer+    | F32Const Float+    | F64Const Double+    | IUnOp BitSize IUnOp+    | IBinOp BitSize IBinOp+    | I32Eqz+    | I64Eqz+    | IRelOp BitSize IRelOp+    | FUnOp BitSize FUnOp+    | FBinOp BitSize FBinOp+    | FRelOp BitSize FRelOp+    | I32WrapI64+    | ITruncFU {- Int Size -} BitSize {- Float Size -} BitSize+    | ITruncFS {- Int Size -} BitSize {- Float Size -} BitSize+    | I64ExtendSI32+    | I64ExtendUI32+    | FConvertIU {- Float Size -} BitSize {- Int Size -} BitSize+    | FConvertIS {- Float Size -} BitSize {- Int Size -} BitSize+    | F32DemoteF64+    | F64PromoteF32+    | IReinterpretF BitSize+    | FReinterpretI BitSize+    deriving (Show, Eq, Generic, NFData)++data TypeDef = TypeDef (Maybe Ident) FuncType deriving (Show, Eq, Generic, NFData)++data TypeUse =+    IndexedTypeUse TypeIndex (Maybe FuncType)+    | AnonimousTypeUse FuncType+    deriving (Show, Eq, Generic, NFData)++data Instruction =+    PlainInstr PlainInstr+    | BlockInstr {+        label :: Maybe Ident,+        resultType :: [ValueType],+        body :: [Instruction]+    }+    | LoopInstr {+        label :: Maybe Ident,+        resultType :: [ValueType],+        body :: [Instruction]+    }+    | IfInstr {+        label :: Maybe Ident,+        resultType :: [ValueType],+        trueBranch :: [Instruction],+        falseBranch :: [Instruction]+    }+    deriving (Show, Eq, Generic, NFData)++data Import = Import {+        reExportAs :: [TL.Text],+        sourceModule :: TL.Text,+        name :: TL.Text,+        desc :: ImportDesc+    } deriving (Show, Eq, Generic, NFData)++data ImportDesc =+    ImportFunc (Maybe Ident) TypeUse+    | ImportTable (Maybe Ident) TableType+    | ImportMemory (Maybe Ident) Limit+    | ImportGlobal (Maybe Ident) GlobalType+    deriving (Show, Eq, Generic, NFData)++data LocalType = LocalType {+        ident :: Maybe Ident,+        localType :: ValueType+    } deriving (Show, Eq, Generic, NFData)++data Function = Function {+        exportFuncAs :: [TL.Text],+        ident :: Maybe Ident,+        funcType :: TypeUse,+        locals :: [LocalType],+        body :: [Instruction]+    }+    deriving (Show, Eq, Generic, NFData)++emptyFunction :: Function+emptyFunction =+    Function {+        exportFuncAs = [],+        ident = Nothing,+        funcType = AnonimousTypeUse emptyFuncType,+        locals = [],+        body = []+    }++data Global = Global {+        exportGlobalAs :: [TL.Text],+        ident :: Maybe Ident,+        globalType :: GlobalType,+        initializer :: [Instruction]+    }+    deriving (Show, Eq, Generic, NFData)++data Memory = Memory [TL.Text] (Maybe Ident) Limit deriving (Show, Eq, Generic, NFData)++data Table = Table [TL.Text] (Maybe Ident) TableType deriving (Show, Eq, Generic, NFData)++data ExportDesc =+    ExportFunc FuncIndex+    | ExportTable TableIndex+    | ExportMemory MemoryIndex+    | ExportGlobal GlobalIndex+    deriving (Show, Eq, Generic, NFData)++data Export = Export {+        name :: TL.Text,+        desc :: ExportDesc+    }+    deriving (Show, Eq, Generic, NFData)++data StartFunction = StartFunction FuncIndex deriving (Show, Eq, Generic, NFData)++data ElemSegment = ElemSegment {+        tableIndex :: TableIndex,+        offset :: [Instruction],+        funcIndexes :: [FuncIndex]+    }+    deriving (Show, Eq, Generic, NFData)++data DataSegment = DataSegment {+        memIndex :: MemoryIndex,+        offset :: [Instruction],+        datastring :: LBS.ByteString+    }+    deriving (Show, Eq, Generic, NFData)++data ModuleField =+    MFType TypeDef+    | MFImport Import+    | MFFunc Function+    | MFTable Table+    | MFMem Memory+    | MFGlobal Global+    | MFExport Export+    | MFStart StartFunction+    | MFElem ElemSegment+    | MFData DataSegment+    deriving(Show, Eq, Generic, NFData)++happyError (Lexeme _ EOF : []) = Left $ "Error occuried during parsing phase at the end of file"+happyError (Lexeme Nothing tok : tokens) = Left $ "Error occuried during parsing phase at the end of file"+happyError (Lexeme (Just (AlexPn abs line col)) tok : tokens) = Left $+    "Error occuried during parsing phase. " +++    "Line " ++ show line ++ ", " +++    "Column " ++ show col ++ ", " +++    "Token " ++ show tok ++ ". " +++    "Token lookahed: " ++ show (take 3 tokens)++data Module = Module {+    types :: [TypeDef],+    functions :: [Function],+    tables :: [Table],+    mems :: [Memory],+    globals :: [Global],+    elems :: [ElemSegment],+    datas :: [DataSegment],+    start :: Maybe StartFunction,+    imports :: [Import],+    exports :: [Export]+} deriving (Show, Eq)++type Script = [Command]++data ModuleDef+    = RawModDef (Maybe Ident) S.Module+    | TextModDef (Maybe Ident) TL.Text+    | BinaryModDef (Maybe Ident) LBS.ByteString+    deriving (Show, Eq)++data Command+    = ModuleDef ModuleDef+    | Register TL.Text (Maybe Ident)+    | Action Action+    | Assertion Assertion+    | Meta Meta+    deriving (Show, Eq)++data Action+    = Invoke (Maybe Ident) TL.Text [S.Expression]+    | Get (Maybe Ident) TL.Text+    deriving (Show, Eq)++type FailureString = TL.Text++data Assertion+    = AssertReturn Action [S.Expression]+    | AssertReturnCanonicalNaN Action+    | AssertReturnArithmeticNaN Action+    | AssertTrap (Either Action ModuleDef) FailureString+    | AssertMalformed ModuleDef FailureString+    | AssertInvalid ModuleDef FailureString+    | AssertUnlinkable ModuleDef FailureString+    | AssertExhaustion Action FailureString+    deriving (Show, Eq)++data Meta+    = Script (Maybe Ident) Script+    | Input (Maybe Ident) TL.Text+    | Output (Maybe Ident) TL.Text+    deriving (Show, Eq)++type Labels = [Maybe Ident]++data FunCtx = FunCtx {+    ctxMod :: Module,+    ctxLabels :: Labels,+    ctxLocals :: [LocalType],+    ctxParams :: [ParamType]+} deriving (Eq, Show)++constInstructionToValue :: Instruction -> S.Instruction Natural+constInstructionToValue (PlainInstr (I32Const v)) = S.I32Const $ integerToWord32 v+constInstructionToValue (PlainInstr (F32Const v)) = S.F32Const v+constInstructionToValue (PlainInstr (I64Const v)) = S.I64Const $ integerToWord64 v+constInstructionToValue (PlainInstr (F64Const v)) = S.F64Const v+constInstructionToValue _ = error "Only const instructions supported as arguments for actions"++desugarize :: [ModuleField] -> Either String S.Module+desugarize fields = do+    checkImportsOrder fields+    let mod = Module {+        types = reverse $ foldl' extractTypeDef (reverse $ explicitTypeDefs fields) fields,+        functions = extract extractFunction fields,+        tables = extract extractTable fields,+        imports = extract extractImport fields,+        mems = extract extractMemory fields,+        globals = extract extractGlobal fields,+        elems = extract extractElemSegment fields,+        datas = extract extractDataSegment fields,+        start = extractStart fields,+        exports = []+    }+    funs <- mapM (synFunctionToStruct mod) $ functions mod+    elements <- mapM (synElemToStruct mod) $ elems mod+    segments <- mapM (synDataToStruct mod) $ datas mod+    globs <- mapM (synGlobalToStruct mod) $ globals mod+    return S.Module {+        S.types = map synTypeDefToStruct $ types mod,+        S.functions = funs,+        S.tables = map synTableToStruct $ tables mod,+        S.imports = map (synImportToStruct $ types mod) $ imports mod,+        S.elems = elements,+        S.datas = segments,+        S.mems = map synMemoryToStruct $ mems mod,+        S.globals = globs,+        S.start = fmap (synStartToStruct mod) $ start mod,+        S.exports = synExportsToStruct mod $ extractExports mod fields+    }+    where+        -- utils+        extract :: ([a] -> ModuleField -> [a]) -> [ModuleField] -> [a]+        extract extractor = reverse . foldl' extractor []++        findWithIndex :: (a -> Bool) -> [a] -> Maybe (a, Int)+        findWithIndex pred l = find (pred . fst) $ zip l [0..]++        -- types+        synTypeDefToStruct :: TypeDef -> S.FuncType+        synTypeDefToStruct (TypeDef _ FuncType { params, results }) =+            S.FuncType (map paramType params) results++        explicitTypeDefs :: [ModuleField] -> [TypeDef]+        explicitTypeDefs = map (\(MFType def) -> def) . filter isTypeDef+            where+                isTypeDef (MFType _) = True+                isTypeDef _ = False+        +        checkImportsOrder :: [ModuleField] -> Either String ()+        checkImportsOrder fields = foldM checkDef False fields >> return ()+            where+                checkDef nonImportOccured (MFImport _) =+                    if nonImportOccured+                    then Left "Import sections have to be before any definition"+                    else Right False+                checkDef _ (MFFunc _) = return True+                checkDef _ (MFGlobal _) = return True+                checkDef _ (MFMem _) = return True+                checkDef _ (MFTable _) = return True+                checkDef nonImportOccured _ = return nonImportOccured++        extractTypeDef :: [TypeDef] -> ModuleField -> [TypeDef]+        extractTypeDef defs (MFType _) = defs -- should be extracted before implicit defs+        extractTypeDef defs (MFImport Import { desc = ImportFunc _ typeUse }) =+            matchTypeUse defs typeUse+        extractTypeDef defs (MFFunc Function { funcType, body }) =+            extractTypeDefFromInstructions (matchTypeUse defs funcType) body+        extractTypeDef defs (MFGlobal Global { initializer }) =+            extractTypeDefFromInstructions defs initializer+        extractTypeDef defs (MFElem ElemSegment { offset }) =+            extractTypeDefFromInstructions defs offset+        extractTypeDef defs (MFData DataSegment { offset }) =+            extractTypeDefFromInstructions defs offset+        extractTypeDef defs _ = defs++        extractTypeDefFromInstructions :: [TypeDef] -> [Instruction] -> [TypeDef]+        extractTypeDefFromInstructions = foldl' extractTypeDefFromInstruction++        extractTypeDefFromInstruction :: [TypeDef] -> Instruction -> [TypeDef]+        extractTypeDefFromInstruction defs (PlainInstr (CallIndirect typeUse)) =+            matchTypeUse defs typeUse+        extractTypeDefFromInstruction defs (BlockInstr { body }) =+            extractTypeDefFromInstructions defs body+        extractTypeDefFromInstruction defs (LoopInstr { body }) =+            extractTypeDefFromInstructions defs body+        extractTypeDefFromInstruction defs (IfInstr { trueBranch, falseBranch }) =+            extractTypeDefFromInstructions defs $ trueBranch ++ falseBranch+        extractTypeDefFromInstruction defs _ = defs++        funcTypesEq :: FuncType -> FuncType -> Bool+        funcTypesEq l r =+            let paramTypes = map paramType . params in+            paramTypes l == paramTypes r && results l == results r++        matchTypeFunc :: FuncType -> TypeDef -> Bool+        matchTypeFunc funcType (TypeDef _ ft) = funcTypesEq ft funcType++        matchTypeUse :: [TypeDef] -> TypeUse -> [TypeDef]+        matchTypeUse defs (AnonimousTypeUse funcType) =+            if any (matchTypeFunc funcType) defs+            then defs+            else (TypeDef Nothing funcType) : defs+        matchTypeUse defs _ = defs++        getTypeIndex :: [TypeDef] -> TypeUse -> Maybe Natural+        getTypeIndex defs (AnonimousTypeUse funcType) =+            fromIntegral <$> findIndex (matchTypeFunc funcType) defs+        getTypeIndex defs (IndexedTypeUse (Named ident) (Just funcType)) = do+            (def, idx) <- findWithIndex (\(TypeDef i _) -> i == Just ident) defs+            guard $ matchTypeFunc funcType def+            return $ fromIntegral idx+        getTypeIndex defs (IndexedTypeUse (Named ident) Nothing) =+            fromIntegral <$> findIndex (\(TypeDef i _) -> i == Just ident) defs+        getTypeIndex defs (IndexedTypeUse (Index n) (Just funcType)) = do+            guard $ matchTypeFunc funcType $ defs !! fromIntegral n+            return n+        getTypeIndex defs (IndexedTypeUse (Index n) Nothing) = return n+        +        -- imports+        synImportToStruct :: [TypeDef] -> Import -> S.Import+        synImportToStruct defs (Import _ mod name (ImportFunc _ typeUse)) =+            case getTypeIndex defs typeUse of+                Just idx -> S.Import mod name $ S.ImportFunc idx+                Nothing -> error $ "cannot find type index for function import: " ++ show typeUse+        synImportToStruct _ (Import _ mod name (ImportTable _ tableType)) =+            S.Import mod name $ S.ImportTable tableType+        synImportToStruct _ (Import _ mod name (ImportMemory _ limit)) =+            S.Import mod name $ S.ImportMemory limit+        synImportToStruct _ (Import _ mod name (ImportGlobal _ globalType)) =+            S.Import mod name $ S.ImportGlobal globalType++        extractImport :: [Import] -> ModuleField -> [Import]+        extractImport imports (MFImport imp) = imp : imports+        extractImport imports _ = imports++        unwrapLabel ctx labelIdx =+            case getLabelIdx ctx labelIdx of+                Just i -> Right i+                Nothing -> Left "unknown label"++        -- functions+        synInstrToStruct :: FunCtx -> Instruction -> Either String (S.Instruction Natural)+        synInstrToStruct _ (PlainInstr Unreachable) = return S.Unreachable+        synInstrToStruct _ (PlainInstr Nop) = return S.Nop+        synInstrToStruct ctx (PlainInstr (Br labelIdx)) =+            S.Br <$> unwrapLabel ctx labelIdx+        synInstrToStruct ctx (PlainInstr (BrIf labelIdx)) =+            S.BrIf <$> unwrapLabel ctx labelIdx+        synInstrToStruct ctx (PlainInstr (BrTable lbls lbl)) = do+            labels <- mapM (unwrapLabel ctx) lbls+            S.BrTable labels <$> unwrapLabel ctx lbl+        synInstrToStruct _ (PlainInstr Return) = return S.Return+        synInstrToStruct FunCtx { ctxMod } (PlainInstr (Call funIdx)) =+            case getFuncIndex ctxMod funIdx of+                Just idx -> return $ S.Call idx+                Nothing -> Left "unknown function"+        synInstrToStruct FunCtx { ctxMod = Module { types } } (PlainInstr (CallIndirect typeUse)) =+            case getTypeIndex types typeUse of+                Just idx -> return $ S.CallIndirect idx+                Nothing -> Left "unknown type"+        synInstrToStruct _ (PlainInstr Drop) = return $ S.Drop+        synInstrToStruct _ (PlainInstr Select) = return $ S.Select+        synInstrToStruct ctx (PlainInstr (GetLocal localIdx)) =+            case getLocalIndex ctx localIdx of+                Just idx -> return $ S.GetLocal idx+                Nothing -> Left "unknown local"+        synInstrToStruct ctx (PlainInstr (SetLocal localIdx)) =+            case getLocalIndex ctx localIdx of+                Just idx -> return $ S.SetLocal idx+                Nothing -> Left "unknown local"+        synInstrToStruct ctx (PlainInstr (TeeLocal localIdx)) =+            case getLocalIndex ctx localIdx of+                Just idx -> return $ S.TeeLocal idx+                Nothing -> Left "unknown local"+        synInstrToStruct FunCtx { ctxMod } (PlainInstr (GetGlobal globalIdx)) =+            case getGlobalIndex ctxMod globalIdx of+                Just idx -> return $ S.GetGlobal idx+                Nothing -> Left "unknown global"+        synInstrToStruct FunCtx { ctxMod } (PlainInstr (SetGlobal globalIdx)) =+            case getGlobalIndex ctxMod globalIdx of+                Just idx -> return $ S.SetGlobal idx+                Nothing -> Left "unknown global"+        synInstrToStruct _ (PlainInstr (I32Load memArg)) = return $ S.I32Load memArg+        synInstrToStruct _ (PlainInstr (I64Load memArg)) = return $ S.I64Load memArg+        synInstrToStruct _ (PlainInstr (F32Load memArg)) = return $ S.F32Load memArg+        synInstrToStruct _ (PlainInstr (F64Load memArg)) = return $ S.F64Load memArg+        synInstrToStruct _ (PlainInstr (I32Load8S memArg)) = return $ S.I32Load8S memArg+        synInstrToStruct _ (PlainInstr (I32Load8U memArg)) = return $ S.I32Load8U memArg+        synInstrToStruct _ (PlainInstr (I32Load16S memArg)) = return $ S.I32Load16S memArg+        synInstrToStruct _ (PlainInstr (I32Load16U memArg)) = return $ S.I32Load16U memArg+        synInstrToStruct _ (PlainInstr (I64Load8S memArg)) = return $ S.I64Load8S memArg+        synInstrToStruct _ (PlainInstr (I64Load8U memArg)) = return $ S.I64Load8U memArg+        synInstrToStruct _ (PlainInstr (I64Load16S memArg)) = return $ S.I64Load16S memArg+        synInstrToStruct _ (PlainInstr (I64Load16U memArg)) = return $ S.I64Load16U memArg+        synInstrToStruct _ (PlainInstr (I64Load32S memArg)) = return $ S.I64Load32S memArg+        synInstrToStruct _ (PlainInstr (I64Load32U memArg)) = return $ S.I64Load32U memArg+        synInstrToStruct _ (PlainInstr (I32Store memArg)) = return $ S.I32Store memArg+        synInstrToStruct _ (PlainInstr (I64Store memArg)) = return $ S.I64Store memArg+        synInstrToStruct _ (PlainInstr (F32Store memArg)) = return $ S.F32Store memArg+        synInstrToStruct _ (PlainInstr (F64Store memArg)) = return $ S.F64Store memArg+        synInstrToStruct _ (PlainInstr (I32Store8 memArg)) = return $ S.I32Store8 memArg+        synInstrToStruct _ (PlainInstr (I32Store16 memArg)) = return $ S.I32Store16 memArg+        synInstrToStruct _ (PlainInstr (I64Store8 memArg)) = return $ S.I64Store8 memArg+        synInstrToStruct _ (PlainInstr (I64Store16 memArg)) = return $ S.I64Store16 memArg+        synInstrToStruct _ (PlainInstr (I64Store32 memArg)) = return $ S.I64Store32 memArg+        synInstrToStruct _ (PlainInstr CurrentMemory) = return $ S.CurrentMemory+        synInstrToStruct _ (PlainInstr GrowMemory) = return $ S.GrowMemory+        synInstrToStruct _ (PlainInstr (I32Const val)) = return $ S.I32Const $ integerToWord32 val+        synInstrToStruct _ (PlainInstr (I64Const val)) = return $ S.I64Const $ integerToWord64 val+        synInstrToStruct _ (PlainInstr (F32Const val)) = return $ S.F32Const val+        synInstrToStruct _ (PlainInstr (F64Const val)) = return $ S.F64Const val+        synInstrToStruct _ (PlainInstr (IUnOp sz op)) = return $ S.IUnOp sz op+        synInstrToStruct _ (PlainInstr (IBinOp sz op)) = return $ S.IBinOp sz op+        synInstrToStruct _ (PlainInstr I32Eqz) = return $ S.I32Eqz+        synInstrToStruct _ (PlainInstr I64Eqz) = return $ S.I64Eqz+        synInstrToStruct _ (PlainInstr (IRelOp sz op)) = return $ S.IRelOp sz op+        synInstrToStruct _ (PlainInstr (FUnOp sz op)) = return $ S.FUnOp sz op+        synInstrToStruct _ (PlainInstr (FBinOp sz op)) = return $ S.FBinOp sz op+        synInstrToStruct _ (PlainInstr (FRelOp sz op)) = return $ S.FRelOp sz op+        synInstrToStruct _ (PlainInstr I32WrapI64) = return $ S.I32WrapI64+        synInstrToStruct _ (PlainInstr (ITruncFU sz sz')) = return $ S.ITruncFU sz sz'+        synInstrToStruct _ (PlainInstr (ITruncFS sz sz')) = return $ S.ITruncFS sz sz'+        synInstrToStruct _ (PlainInstr I64ExtendSI32) = return $ S.I64ExtendSI32+        synInstrToStruct _ (PlainInstr I64ExtendUI32) = return $ S.I64ExtendUI32+        synInstrToStruct _ (PlainInstr (FConvertIU sz sz')) = return $ S.FConvertIU sz sz'+        synInstrToStruct _ (PlainInstr (FConvertIS sz sz')) = return $ S.FConvertIS sz sz'+        synInstrToStruct _ (PlainInstr F32DemoteF64) = return $ S.F32DemoteF64+        synInstrToStruct _ (PlainInstr F64PromoteF32) = return $ S.F64PromoteF32+        synInstrToStruct _ (PlainInstr (IReinterpretF sz)) = return $ S.IReinterpretF sz+        synInstrToStruct _ (PlainInstr (FReinterpretI sz)) = return $ S.FReinterpretI sz+        synInstrToStruct ctx BlockInstr {label, resultType, body} =+            let ctx' = ctx { ctxLabels = label : ctxLabels ctx } in+            S.Block resultType <$> mapM (synInstrToStruct ctx') body+        synInstrToStruct ctx LoopInstr {label, resultType, body} =+            let ctx' = ctx { ctxLabels = label : ctxLabels ctx } in+            S.Loop resultType <$> mapM (synInstrToStruct ctx') body+        synInstrToStruct ctx IfInstr {label, resultType, trueBranch, falseBranch} = do+            let ctx' = ctx { ctxLabels = label : ctxLabels ctx }+            trueBranch' <- mapM (synInstrToStruct ctx') trueBranch+            falseBranch' <- mapM (synInstrToStruct ctx') falseBranch+            return $ S.If resultType trueBranch' falseBranch'+        +        synFunctionToStruct :: Module -> Function -> Either String S.Function+        synFunctionToStruct mod Function { funcType, locals, body } = do+            typeIdx <- (+                    case getTypeIndex (types mod) funcType of+                        Just idx -> Right idx+                        Nothing -> Left "Type was not found or type signature doesn't match with type"+                )+            -- we have to use local func params declaration,+            -- coz it can contain own names for them+            let+                params = case funcType of+                    IndexedTypeUse _ (Just FuncType { params }) -> params+                    AnonimousTypeUse FuncType { params } -> params+                    _ ->+                        if fromIntegral typeIdx < length (types mod)+                        then let TypeDef _ FuncType { params } = types mod !! fromIntegral typeIdx in params+                        else []+            let ctx = FunCtx mod [] locals params+            instructions <- mapM (synInstrToStruct ctx) body+            return S.Function {+                S.funcType = typeIdx,+                S.localTypes = map localType locals,+                S.body = instructions+            }++        extractFunction :: [Function] -> ModuleField -> [Function]+        extractFunction funcs (MFFunc fun) = fun : funcs+        extractFunction funcs _ = funcs++        getLabelIdx :: FunCtx -> LabelIndex -> Maybe Natural+        getLabelIdx FunCtx { ctxLabels } (Named id) =+            fromIntegral <$> findIndex (\ident -> ident == Just id) ctxLabels+        getLabelIdx FunCtx { ctxLabels } (Index idx) =+            Just idx+        +        getLocalIndex :: FunCtx -> LabelIndex -> Maybe Natural+        getLocalIndex FunCtx {ctxParams, ctxLocals} (Named id) =+            case findIndex (\(ParamType ident _) -> ident == Just id) ctxParams of+                Just idx -> return $ fromIntegral idx+                Nothing ->+                    let isIdent (LocalType ident _) = ident == Just id in+                    fromIntegral . (+ length ctxParams) <$> findIndex isIdent ctxLocals+        getLocalIndex FunCtx {ctxParams, ctxLocals} (Index idx) = Just idx+        +        isFuncImport :: Import -> Bool+        isFuncImport Import { desc = ImportFunc _ _ } = True+        isFuncImport _ = False++        getFuncIndex :: Module -> FuncIndex -> Maybe Natural+        getFuncIndex Module { imports, functions } (Named id) =+            let funImports = filter isFuncImport imports in+            case findIndex (\(Import { desc = ImportFunc ident _ }) -> ident == Just id) funImports of+                Just idx -> return $ fromIntegral idx+                Nothing ->+                    let isIdent (Function { ident }) = ident == Just id in+                    fromIntegral . (+ length funImports) <$> findIndex isIdent functions+        getFuncIndex Module { imports, functions } (Index idx) = Just idx++        -- tables+        synTableToStruct :: Table -> S.Table+        synTableToStruct (Table _ _ tableType) = S.Table tableType++        extractTable :: [Table] -> ModuleField -> [Table]+        extractTable tables (MFTable table) = table : tables+        extractTable tables _ = tables++        isTableImport :: Import -> Bool+        isTableImport Import { desc = ImportTable _ _ } = True+        isTableImport _ = False++        getTableIndex :: Module -> TableIndex -> Maybe Natural+        getTableIndex Module { imports, tables } (Named id) =+            let tableImports = filter isTableImport imports in+            case findIndex (\(Import { desc = ImportTable ident _ }) -> ident == Just id) tableImports of+                Just idx -> return $ fromIntegral idx+                Nothing ->+                    let isIdent (Table _ (Just id) _) = True in+                    fromIntegral . (+ length tableImports) <$> findIndex isIdent tables+        getTableIndex Module { imports, tables } (Index idx) = Just idx++        -- memory+        synMemoryToStruct :: Memory -> S.Memory+        synMemoryToStruct (Memory _ _ limits) = S.Memory limits++        extractMemory :: [Memory] -> ModuleField -> [Memory]+        extractMemory mems (MFMem mem) = mem : mems+        extractMemory mems _ = mems++        isMemImport :: Import -> Bool+        isMemImport Import { desc = ImportMemory _ _ } = True+        isMemImport _ = False++        getMemIndex :: Module -> MemoryIndex -> Maybe Natural+        getMemIndex Module { imports, mems } (Named id) =+            let memImports = filter isMemImport imports in+            case findIndex (\(Import { desc = ImportMemory ident _ }) -> ident == Just id) memImports of+                Just idx -> return $ fromIntegral idx+                Nothing ->+                    let isIdent (Memory _ (Just id) _) = True in+                    fromIntegral . (+ length memImports) <$> findIndex isIdent mems+        getMemIndex Module { imports, mems } (Index idx) = Just idx++        -- global+        synGlobalToStruct :: Module -> Global -> Either String S.Global+        synGlobalToStruct mod Global { globalType, initializer } =+            let ctx = FunCtx mod [] [] [] in+            S.Global globalType <$> mapM (synInstrToStruct ctx) initializer++        extractGlobal :: [Global] -> ModuleField -> [Global]+        extractGlobal globals (MFGlobal global) = global : globals+        extractGlobal globals _ = globals++        isGlobalImport :: Import -> Bool+        isGlobalImport Import { desc = ImportGlobal _ _ } = True+        isGlobalImport _ = False++        getGlobalIndex :: Module -> GlobalIndex -> Maybe Natural+        getGlobalIndex Module { imports, globals } (Named id) =+            let globalImports = filter isGlobalImport imports in+            case findIndex (\(Import { desc = ImportGlobal ident _ }) -> ident == Just id) globalImports of+                Just idx -> return $ fromIntegral idx+                Nothing ->+                    let isIdent (Global { ident }) = ident == Just id in+                    fromIntegral . (+ length globalImports) <$> findIndex isIdent globals+        getGlobalIndex Module { imports, globals } (Index idx) = Just idx++        -- elem segment+        synElemToStruct :: Module -> ElemSegment -> Either String S.ElemSegment+        synElemToStruct mod ElemSegment { tableIndex, offset, funcIndexes } =+            let ctx = FunCtx mod [] [] [] in+            let offsetInstrs = mapM (synInstrToStruct ctx) offset in+            let idx = fromJust $ getTableIndex mod tableIndex in+            let indexes = map (fromJust . getFuncIndex mod) funcIndexes in+            S.ElemSegment idx <$> offsetInstrs <*> return indexes++        extractElemSegment :: [ElemSegment] -> ModuleField -> [ElemSegment]+        extractElemSegment elems (MFElem elem) = elem : elems+        extractElemSegment elems _ = elems++        -- data segment+        synDataToStruct :: Module -> DataSegment -> Either String S.DataSegment+        synDataToStruct mod DataSegment { memIndex, offset, datastring } =+            let ctx = FunCtx mod [] [] [] in+            let offsetInstrs = mapM (synInstrToStruct ctx) offset in+            let idx = fromJust $ getMemIndex mod memIndex in+            S.DataSegment idx <$> offsetInstrs <*> return datastring++        extractDataSegment :: [DataSegment] -> ModuleField -> [DataSegment]+        extractDataSegment datas (MFData dataSegment) = dataSegment : datas+        extractDataSegment datas _ = datas++        -- start+        synStartToStruct :: Module -> StartFunction -> S.StartFunction+        synStartToStruct mod (StartFunction funIdx) =+            S.StartFunction $ fromJust $ getFuncIndex mod funIdx+        +        extractStart :: [ModuleField] -> Maybe StartFunction+        extractStart = foldl' extractStart' Nothing++        extractStart' :: Maybe StartFunction -> ModuleField -> Maybe StartFunction+        extractStart' _ (MFStart start) = Just start+        extractStart' start _ = start++        -- exports+        extractExports :: Module -> [ModuleField] -> [ModuleField]+        extractExports mod mf =+            let initial = (funcImportLength, globImportLength, memImportLength, tableImportLength, []) in+            let (_, _, _, _, result) = foldl' extractExport initial mf in+            reverse result+            where+                funcImportLength = fromIntegral $ length $ filter isFuncImport $ imports mod+                globImportLength = fromIntegral $ length $ filter isGlobalImport $ imports mod+                memImportLength = fromIntegral $ length $ filter isMemImport $ imports mod+                tableImportLength = fromIntegral $ length $ filter isTableImport $ imports mod++                extractExport (fidx, gidx, midx, tidx, mf) (MFFunc fun@Function{ exportFuncAs }) =+                    let exports = map (\name -> MFExport $ Export name $ ExportFunc $ Index fidx) exportFuncAs in+                    (fidx + 1, gidx, midx, tidx, [MFFunc fun] ++ exports ++ mf)+                extractExport (fidx, gidx, midx, tidx, mf) (MFGlobal glob@Global{ exportGlobalAs }) =+                    let exports = map (\name -> MFExport $ Export name $ ExportGlobal $ Index gidx) exportGlobalAs in+                    (fidx, gidx + 1, midx, tidx, [MFGlobal glob] ++ exports ++ mf)+                extractExport (fidx, gidx, midx, tidx, mf) (MFMem (Memory exps i l)) =+                    let exports = map (\name -> MFExport $ Export name $ ExportMemory $ Index midx) exps in+                    (fidx, gidx, midx + 1, tidx, [MFMem (Memory exps i l)] ++ exports ++ mf)+                extractExport (fidx, gidx, midx, tidx, mf) (MFTable (Table exps i t)) =+                    let exports = map (\name -> MFExport $ Export name $ ExportTable $ Index tidx) exps in+                    (fidx, gidx, midx, tidx + 1, [MFTable (Table exps i t)] ++ exports ++ mf)+                extractExport (fidx, gidx, midx, tidx, mf) f = (fidx, gidx, midx, tidx, f:mf)+ +        synExportsToStruct :: Module -> [ModuleField] -> [S.Export]+        synExportsToStruct mod (MFExport Export { name, desc = ExportFunc idx } : rest) =+            let exp = S.Export name $ S.ExportFunc $ fromJust $ getFuncIndex mod idx in+            exp : synExportsToStruct mod rest+        synExportsToStruct mod (MFExport Export { name, desc = ExportTable idx } : rest) =+            let exp = S.Export name $ S.ExportTable $ fromJust $ getTableIndex mod idx in+            exp : synExportsToStruct mod rest+        synExportsToStruct mod (MFExport Export { name, desc = ExportMemory idx } : rest) =+            let exp = S.Export name $ S.ExportMemory $ fromJust $ getMemIndex mod idx in+            exp : synExportsToStruct mod rest+        synExportsToStruct mod (MFExport Export { name, desc = ExportGlobal idx } : rest) =+            let exp = S.Export name $ S.ExportGlobal $ fromJust $ getGlobalIndex mod idx in+            exp : synExportsToStruct mod rest+        synExportsToStruct mod (_ : rest) = synExportsToStruct mod rest+        synExportsToStruct _ [] = []+{-# LINE 1 "templates/GenericTemplate.hs" #-}++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp ++++++++++++++-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#if __GLASGOW_HASKELL__ > 706+#define LT(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.<# m)) :: Bool)+#define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Bool)+#define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: Bool)+#else+#define LT(n,m) (n Happy_GHC_Exts.<# m)+#define GTE(n,m) (n Happy_GHC_Exts.>=# m)+#define EQ(n,m) (n Happy_GHC_Exts.==# m)+#endif+++data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList+++++++++++++++++++++infixr 9 `HappyStk`+data HappyStk a = HappyStk a (HappyStk a)++-----------------------------------------------------------------------------+-- starting the parse++happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll++-----------------------------------------------------------------------------+-- Accepting the parse++-- If the current token is 0#, it means we've just accepted a partial+-- parse (a %partial parser).  We must ignore the saved token on the top of+-- the stack in this case.+happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =+        happyReturn1 ans+happyAccept j tk st sts (HappyStk ans _) = +        (happyTcHack j (happyTcHack st)) (happyReturn1 ans)++-----------------------------------------------------------------------------+-- Arrays only: do the next action++++happyDoAction i tk st+        = {- nothing -}+          ++          case action of+                0#           -> {- nothing -}+                                     happyFail (happyExpListPerState ((Happy_GHC_Exts.I# (st)) :: Int)) i tk st+                -1#          -> {- nothing -}+                                     happyAccept i tk st+                n | LT(n,(0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}+                                                   +                                                   (happyReduceArr Happy_Data_Array.! rule) i tk st+                                                   where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))+                n                 -> {- nothing -}+                                     ++                                     happyShift new_state i tk st+                                     where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))+   where off    = happyAdjustOffset (indexShortOffAddr happyActOffsets st)+         off_i  = (off Happy_GHC_Exts.+#  i)+         check  = if GTE(off_i,(0# :: Happy_GHC_Exts.Int#))+                  then EQ(indexShortOffAddr happyCheck off_i, i)+                  else False+         action+          | check     = indexShortOffAddr happyTable off_i+          | otherwise = indexShortOffAddr happyDefActions st+++++indexShortOffAddr (HappyA# arr) off =+        Happy_GHC_Exts.narrow16Int# i+  where+        i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)+        high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))+        low  = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))+        off' = off Happy_GHC_Exts.*# 2#+++++{-# INLINE happyLt #-}+happyLt x y = LT(x,y)+++readArrayBit arr bit =+    Bits.testBit (Happy_GHC_Exts.I# (indexShortOffAddr arr ((unbox_int bit) `Happy_GHC_Exts.iShiftRA#` 4#))) (bit `mod` 16)+  where unbox_int (Happy_GHC_Exts.I# x) = x+++++++data HappyAddr = HappyA# Happy_GHC_Exts.Addr#+++-----------------------------------------------------------------------------+-- HappyState data type (not arrays)++++-----------------------------------------------------------------------------+-- Shifting a token++happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =+     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+--     trace "shifting the error token" $+     happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)++happyShift new_state i tk st sts stk =+     happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)++-- happyReduce is specialised for the common cases.++happySpecReduce_0 i fn 0# tk st sts stk+     = happyFail [] 0# tk st sts stk+happySpecReduce_0 nt fn j tk st@((action)) sts stk+     = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)++happySpecReduce_1 i fn 0# tk st sts stk+     = happyFail [] 0# tk st sts stk+happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')+     = let r = fn v1 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_2 i fn 0# tk st sts stk+     = happyFail [] 0# tk st sts stk+happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')+     = let r = fn v1 v2 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_3 i fn 0# tk st sts stk+     = happyFail [] 0# tk st sts stk+happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')+     = let r = fn v1 v2 v3 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happyReduce k i fn 0# tk st sts stk+     = happyFail [] 0# tk st sts stk+happyReduce k nt fn j tk st sts stk+     = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of+         sts1@((HappyCons (st1@(action)) (_))) ->+                let r = fn stk in  -- it doesn't hurt to always seq here...+                happyDoSeq r (happyGoto nt j tk st1 sts1 r)++happyMonadReduce k nt fn 0# tk st sts stk+     = happyFail [] 0# tk st sts stk+happyMonadReduce k nt fn j tk st sts stk =+      case happyDrop k (HappyCons (st) (sts)) of+        sts1@((HappyCons (st1@(action)) (_))) ->+          let drop_stk = happyDropStk k stk in+          happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))++happyMonad2Reduce k nt fn 0# tk st sts stk+     = happyFail [] 0# tk st sts stk+happyMonad2Reduce k nt fn j tk st sts stk =+      case happyDrop k (HappyCons (st) (sts)) of+        sts1@((HappyCons (st1@(action)) (_))) ->+         let drop_stk = happyDropStk k stk++             off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st1)+             off_i = (off Happy_GHC_Exts.+#  nt)+             new_state = indexShortOffAddr happyTable off_i+++++          in+          happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))++happyDrop 0# l = l+happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t++happyDropStk 0# l = l+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs++-----------------------------------------------------------------------------+-- Moving to a new state after a reduction+++happyGoto nt j tk st = +   {- nothing -}+   happyDoAction j tk new_state+   where off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st)+         off_i = (off Happy_GHC_Exts.+#  nt)+         new_state = indexShortOffAddr happyTable off_i+++++-----------------------------------------------------------------------------+-- Error recovery (0# is the error token)++-- parse error if we are in recovery and we fail again+happyFail explist 0# tk old_st _ stk@(x `HappyStk` _) =+     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+--      trace "failing" $ +        happyError_ explist i tk++{-  We don't need state discarding for our restricted implementation of+    "error".  In fact, it can cause some bogus parses, so I've disabled it+    for now --SDM++-- discard a state+happyFail  0# tk old_st (HappyCons ((action)) (sts)) +                                                (saved_tok `HappyStk` _ `HappyStk` stk) =+--      trace ("discarding state, depth " ++ show (length stk))  $+        happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))+-}++-- Enter error recovery: generate an error token,+--                       save the old token and carry on.+happyFail explist i tk (action) sts stk =+--      trace "entering error recovery" $+        happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)++-- Internal happy errors:++notHappyAtAll :: a+notHappyAtAll = error "Internal Happy error\n"++-----------------------------------------------------------------------------+-- Hack to get the typechecker to accept our action functions+++happyTcHack :: Happy_GHC_Exts.Int# -> a -> a+happyTcHack x y = y+{-# INLINE happyTcHack #-}+++-----------------------------------------------------------------------------+-- Seq-ing.  If the --strict flag is given, then Happy emits +--      happySeq = happyDoSeq+-- otherwise it emits+--      happySeq = happyDontSeq++happyDoSeq, happyDontSeq :: a -> b -> b+happyDoSeq   a b = a `seq` b+happyDontSeq a b = b++-----------------------------------------------------------------------------+-- Don't inline any functions from the template.  GHC has a nasty habit+-- of deciding to inline happyGoto everywhere, which increases the size of+-- the generated parser quite a bit.+++{-# NOINLINE happyDoAction #-}+{-# NOINLINE happyTable #-}+{-# NOINLINE happyCheck #-}+{-# NOINLINE happyActOffsets #-}+{-# NOINLINE happyGotoOffsets #-}+{-# NOINLINE happyDefActions #-}++{-# NOINLINE happyShift #-}+{-# NOINLINE happySpecReduce_0 #-}+{-# NOINLINE happySpecReduce_1 #-}+{-# NOINLINE happySpecReduce_2 #-}+{-# NOINLINE happySpecReduce_3 #-}+{-# NOINLINE happyReduce #-}+{-# NOINLINE happyMonadReduce #-}+{-# NOINLINE happyGoto #-}+{-# NOINLINE happyFail #-}++-- end of Happy Template.+
+ exec/Main.hs view
@@ -0,0 +1,148 @@+{-# LANGUAGE OverloadedStrings #-}+module Main where++import qualified Data.ByteString.Lazy as LBS+import qualified Data.ByteString.Base64.Lazy as Base64+import Data.Maybe (fromMaybe)++import qualified Language.Wasm as Wasm++import Options.Applicative+import Data.Semigroup ((<>))++{-+wasm compile INPUT -o output -f js -f binary+wasm exec --script INPUT+wasm validate INPUT -f binary -f text+wasm link +-}++data CompileOutFormat = OutJS | OutBinary | OutHTML deriving (Eq)+data ExecMod = Plain | Script deriving (Show, Eq)+data Input = InpText | InpBinary deriving (Eq)++instance Read CompileOutFormat where+  readsPrec _ "js" = [(OutJS, "")]+  readsPrec _ "binary" = [(OutBinary, "")]+  readsPrec _ "html" = [(OutHTML, "")]+  readsPrec _ _ = error "Unknown compilation output foramt"++instance Show CompileOutFormat where+  show OutJS = "js"+  show OutBinary = "binary"+  show OutHTML = "html"++instance Read Input where+  readsPrec _ "text" = [(InpText, "")]+  readsPrec _ "binary" = [(InpBinary, "")]+  readsPrec _ _ = error "Unknown validation input foramt"++instance Show Input where+  show InpText = "text"+  show InpBinary = "binary"++data WasmCommand+  = Compile {+    input :: String,+    output :: String,+    outFormat :: CompileOutFormat+  }+  | Exec {+    input :: String,+    mode :: ExecMod,+    inpFormat :: Input+  }+  | Validate {+    input :: String,+    inpFormat :: Input+  }+  deriving (Show, Eq)++compileArgs = Compile+  <$> argument str (metavar "FILE")+  <*> strOption (+      long "out"+      <> short 'o'+      <> metavar "FILE"+      <> help "Distination for compilation"+    )+  <*> option auto (+      long "format"+      <> short 'f'+      <> help "Output file format"+      <> showDefault+      <> value OutBinary+    )++execArgs = Exec+  <$> argument str (metavar "FILE")+  <*> flag Plain Script (long "script" <> help "Execute file in script mode")+  <*> option auto (+    long "format"+    <> short 'f'+    <> help "Input file format"+    <> showDefault+    <> value InpText+  )++validateArgs = Validate+  <$> argument str (metavar "FILE")+  <*> option auto (+      long "format"+      <> short 'f'+      <> help "Input file format"+      <> showDefault+      <> value InpText+    )++config :: Parser WasmCommand+config = subparser (+    command "compile" (info compileArgs (progDesc "Compile WebAssembly file from text representation"))+    <> command "exec" (info execArgs (progDesc "Compile WebAssembly file if needed and execute"))+    <> command "validate" (info validateArgs (progDesc "Validate WebAssembly file"))+  )++toBinary :: LBS.ByteString -> Either String LBS.ByteString+toBinary = fmap Wasm.encodeLazy . Wasm.parse++compileAs :: (LBS.ByteString -> LBS.ByteString) -> String -> String -> IO ()+compileAs transform input output = do+  content <- LBS.readFile input+  case toBinary content of+    Right binary ->+      LBS.writeFile output $ transform binary+    Left reason ->+      putStrLn $ "Cannot complie module: " ++ reason++binary :: LBS.ByteString -> LBS.ByteString+binary = id++js :: LBS.ByteString -> LBS.ByteString+js binary =+    let asBase64 = Base64.encode binary in+    LBS.concat [+      "const bytes = Uint8Array.from(atob('" <> asBase64 <> "'), c => c.charCodeAt(0));\n",+      "WebAssembly.instantiate(bytes, {}).then(res => console.log(res.instance))\n"+    ]++html :: LBS.ByteString -> LBS.ByteString+html binary =+    LBS.concat [+      "<script>\n",+      js binary,+      "</script>\n"+    ]++exec :: WasmCommand -> IO ()+exec (Compile inp out OutBinary) = compileAs binary inp out+exec (Compile inp out OutJS) = compileAs js inp out+exec (Compile inp out OutHTML) = compileAs html inp out+exec command = putStrLn $ "command is not implemented yet: " ++ show command++main :: IO ()+main = execParser opts >>= exec+  where+    opts = info (config <**> helper)+      (fullDesc+        <> progDesc "WebAssembly Toolkit"+        <> header "This tool can compile text representation to binary format, validate module in text or binary representation and so on.")
+ src/Language/Wasm.hs view
@@ -0,0 +1,48 @@+module Language.Wasm (+    Module,+    ValidModule,+    ValidationError(..),+    parse,+    validate,+    Language.Wasm.parseScript,+    encode,+    encodeLazy,+    decode,+    decodeLazy,+    Script,+    runScript+) where++import qualified Data.ByteString as BS+import qualified Data.ByteString.Lazy as LBS++import Language.Wasm.Structure as Struct+import Language.Wasm.Script as Script+import Language.Wasm.Lexer as Lexer+import Language.Wasm.Parser as Parser+import Language.Wasm.Validate as Valid+import Language.Wasm.Binary as Binary++-- | Parse WebAssembly text representation to `Module`+parse :: LBS.ByteString -> Either String Module+parse content = Lexer.scanner content >>= Parser.parseModule++-- | Parse WebAssembly extended scipt grammar+parseScript :: LBS.ByteString -> Either String Script+parseScript content = Lexer.scanner content >>= Parser.parseScript++-- | Dump `Module` to binary representation+encode :: Module -> BS.ByteString+encode = dumpModule++-- | Dump `Module` to binary representation lazily+encodeLazy :: Module -> LBS.ByteString+encodeLazy = dumpModuleLazy++-- | Decode `Module` from binary representation+decode :: BS.ByteString -> Either String Module+decode = decodeModule++-- | Decode `Module` from binary representation lazily+decodeLazy :: LBS.ByteString -> Either String Module+decodeLazy = decodeModuleLazy
+ src/Language/Wasm/Binary.hs view
@@ -0,0 +1,841 @@+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE FlexibleInstances #-}++module Language.Wasm.Binary (+    dumpModule,+    dumpModuleLazy,+    decodeModule,+    decodeModuleLazy+) where++import Language.Wasm.Structure++import Numeric.Natural (Natural)+import Data.Bits+import Data.Word (Word8, Word32, Word64)+import Data.Int (Int8, Int32, Int64)+import Data.Serialize+import qualified Data.ByteString as BS+import qualified Data.ByteString.Lazy as LBS+import qualified Data.Text.Lazy as TL+import qualified Data.Text.Lazy.Encoding as TLEncoding++asInt32 :: Word32 -> Int32+asInt32 w =+    if w < 0x80000000+    then fromIntegral w+    else -1 * fromIntegral (0xFFFFFFFF - w + 1)++asInt64 :: Word64 -> Int64+asInt64 w =+    if w < 0x8000000000000000+    then fromIntegral w+    else -1 * fromIntegral (0xFFFFFFFFFFFFFFFF - w + 1)++getULEB128 :: (Integral a, Bits a) => Int -> Get a+getULEB128 bitsBudget = do+    if bitsBudget > 0 then return () else fail "integer representation too long"+    val <- getWord8+    if bitsBudget >= 7 || val .&. 0x7F < 1 `shiftL` bitsBudget then return () else fail "integer too large"+    if not (testBit val 7)+    then return $ fromIntegral val+    else do+        rest <- getULEB128 (bitsBudget - 7)+        return $ (fromIntegral $ val .&. 0x7F) .|. (rest `shiftL` 7)++putULEB128 :: (Integral a, Bits a) => a -> Put+putULEB128 val =+    if val < 128+    then putWord8 $ fromIntegral val+    else do+        putWord8 $ 0x80 + (0x7F .&. fromIntegral val)+        putULEB128 $ val `shiftR` 7++getSLEB128 :: (Integral a, Bits a) => Int -> Get a+getSLEB128 bitsBudget = do+    if bitsBudget > 0 then return () else fail "integer representation too long"+    let toInt8 :: Word8 -> Int8+        toInt8 = fromIntegral+    a <- getWord8+    let mask = (0xFF `shiftL` (bitsBudget - 1)) .&. 0x7F+    if bitsBudget >= 7 || a .&. mask == 0 || a .&. mask == mask then return () else fail "integer too large"+    if not (testBit a 7)+    then return . fromIntegral . toInt8 $ (a .&. 0x7f) .|. ((a .&. 0x40) `shiftL` 1)+    else do+        b <- getSLEB128 (bitsBudget - 7)+        return $ (b `shiftL` 7) .|. (fromIntegral (a .&. 0x7f))++putSLEB128 :: (Integral a, Bits a) => a -> Put+putSLEB128 a = go a+    where+        ext = if a >= 0 then 0 else complement 0+        go x = do+            let +                r = x `shiftR` 7+                w = x .&. 0x7f+            if r /= ext+            then do+                putWord8 (fromIntegral w .|. 0x80)+                go r+            else+                if (testBit w 6 && a < 0) || (not (testBit w 6) && a >= 0)+                then putWord8 (fromIntegral w)+                else do+                    putWord8 (fromIntegral w .|. 0x80)+                    putWord8 (fromIntegral ext .&. 0x7F)++putVec :: Serialize a => [a] -> Put+putVec list = do+    putULEB128 $ length list+    mapM put list+    return ()++getVec :: Serialize a => Get [a]+getVec = do+    len <- getULEB128 32+    sequence $ replicate len get++byteGuard :: Word8 -> Get ()+byteGuard expected = do+    byte <- getWord8+    if byte == expected+    then return ()+    else fail $ "Expected " ++ show expected ++ ", but encountered " ++ show byte++putSection :: SectionType -> Put -> Put+putSection section content = do+    put section+    let payload = runPut content+    putULEB128 $ BS.length payload+    putByteString payload++skipCustomSection :: Get ()+skipCustomSection = do+    byteGuard 0x00+    size <- getULEB128 32+    content <- getByteString size+    case runGet getName content of+        Right _name -> return ()+        Left _ -> fail "invalid UTF-8 encoding"++getSection :: SectionType -> Get a -> a -> Get a+getSection sectionType parser def = do+    empty <- isEmpty+    if empty+    then return def+    else do+        nextByte <- lookAhead getWord8+        parseSection $ fromIntegral nextByte+    where+        parseSection op+            | op == 0 = skipCustomSection >> getSection sectionType parser def+            | op == fromEnum sectionType = getWord8 >> (getULEB128 32 :: Get Natural) >> parser+            | op > fromEnum DataSection = fail "invalid section id"+            | op > fromEnum sectionType = return def+            | otherwise =+                fail $ "Incorrect order of sections. Expected " ++ show sectionType+                    ++ ", but found " ++ show (toEnum op :: SectionType)++putName :: TL.Text -> Put+putName txt = do+    let bs = TLEncoding.encodeUtf8 txt+    putULEB128 $ LBS.length bs+    putLazyByteString bs++getName :: Get TL.Text+getName = do+    len <- getULEB128 32+    bytes <- getLazyByteString len+    case TLEncoding.decodeUtf8' bytes of+        Right name -> return name+        Left _ -> fail "invalid UTF-8 encoding"++putResultType :: ResultType -> Put+putResultType [] = putWord8 0x40+putResultType [valType] = put valType+putResultType _ = fail "Current WebAssembly spec does not support returning more then one value"++getResultType :: Get ResultType+getResultType = do+    op <- getWord8+    case op of+        0x40 -> return []+        0x7F -> return [I32]+        0x7E -> return [I64]+        0x7D -> return [F32]+        0x7C -> return [F64]+        _ -> fail "unexpected byte in result type position"++data SectionType =+    CustomSection+    | TypeSection+    | ImportSection+    | FunctionSection+    | TableSection+    | MemorySection+    | GlobalSection+    | ExportSection+    | StartSection+    | ElementSection+    | CodeSection+    | DataSection+    deriving (Eq, Show, Enum)++instance Serialize SectionType where+    put section = putWord8 $ fromIntegral $ fromEnum section+    get = do+        op <- fromIntegral `fmap` getWord8+        if op <= fromEnum DataSection+        then return $ toEnum op+        else fail "Unexpected byte in section type position"++instance Serialize ValueType where+    put I32 = putWord8 0x7F+    put I64 = putWord8 0x7E+    put F32 = putWord8 0x7D+    put F64 = putWord8 0x7C++    get = do+        op <- getWord8+        case op of+            0x7F -> return I32+            0x7E -> return I64+            0x7D -> return F32+            0x7C -> return F64+            _ -> fail "unexpected byte in value type position"++instance Serialize FuncType where+    put FuncType {params, results} = do+        putWord8 0x60+        putVec params+        putVec results+    get = do+        byteGuard 0x60+        params <- getVec+        results <- getVec+        return $ FuncType { params, results }++instance Serialize ElemType where+    put AnyFunc = putWord8 0x70+    get = byteGuard 0x70 >> return AnyFunc++instance Serialize Limit where+    put (Limit min Nothing) = putWord8 0x00 >> putULEB128 min+    put (Limit min (Just max)) = putWord8 0x01 >> putULEB128 min >> putULEB128 max+    get = do+        op <- getWord8+        case op of+            0x00 -> do+                min <- getULEB128 32+                return $ Limit min Nothing+            0x01 -> do+                min <- getULEB128 32+                max <- getULEB128 32+                return $ Limit min (Just max)+            _ -> fail "Unexpected byte in place of Limit opcode"++instance Serialize TableType where+    put (TableType limit elemType) = do+        put elemType+        put limit+    get = do+        elemType <- get+        limit <- get+        return $ TableType limit elemType++instance Serialize GlobalType where+    put (Const valType) = put valType >> putWord8 0x00+    put (Mut valType) = put valType >> putWord8 0x01+    get = do+        valType <- get+        op <- getWord8+        case op of+            0x00 -> return $ Const valType+            0x01 -> return $ Mut valType+            _ -> fail "invalid mutability"++instance Serialize ImportDesc where+    put (ImportFunc typeIdx) = putWord8 0x00 >> putULEB128 typeIdx+    put (ImportTable tableType) = putWord8 0x01 >> put tableType+    put (ImportMemory memType) = putWord8 0x02 >> put memType+    put (ImportGlobal globalType) = putWord8 0x03 >> put globalType+    get = do+        op <- getWord8+        case op of+            0x00 -> ImportFunc <$> getULEB128 32+            0x01 -> ImportTable <$> get+            0x02 -> ImportMemory <$> get+            0x03 -> ImportGlobal <$> get+            _ -> fail "Unexpected byte in place of Import Declaration opcode"++instance Serialize Import where+    put (Import sourceModule name desc) = do+        putName sourceModule+        putName name+        put desc+    get = do+        sourceModule <- getName+        name <- getName+        desc <- get+        return $ Import sourceModule name desc++instance Serialize Table where+    put (Table tableType) = put tableType+    get = Table <$> get++instance Serialize Memory where+    put (Memory limit) = put limit+    get = Memory <$> get++newtype Index = Index { unIndex :: Natural } deriving (Show, Eq)++instance Serialize Index where+    put (Index idx) = putULEB128 idx+    get = Index <$> getULEB128 32++instance Serialize MemArg where+    put MemArg { align, offset } = putULEB128 align >> putULEB128 offset+    get = do+        align <- getULEB128 32+        offset <- getULEB128 32+        return $ MemArg { align, offset }++instance Serialize (Instruction Natural) where+    put Unreachable = putWord8 0x00+    put Nop = putWord8 0x01+    put (Block result body) = do+        putWord8 0x02+        putResultType result+        putExpression body+    put (Loop result body) = do+        putWord8 0x03+        putResultType result+        putExpression body+    put If {resultType, true, false = []} = do+        putWord8 0x04+        putResultType resultType+        putExpression true+    put If {resultType, true, false} = do+        putWord8 0x04+        putResultType resultType+        mapM_ put true+        putWord8 0x05 -- ELSE+        putExpression false+    put (Br labelIdx) = putWord8 0x0C >> putULEB128 labelIdx+    put (BrIf labelIdx) = putWord8 0x0D >> putULEB128 labelIdx+    put (BrTable labels label) = putWord8 0x0E >> putVec (map Index labels) >> putULEB128 label+    put Return = putWord8 0x0F+    put (Call funcIdx) = putWord8 0x10 >> putULEB128 funcIdx+    put (CallIndirect typeIdx) = putWord8 0x11 >> putULEB128 typeIdx >> putWord8 0x00+    -- Parametric instructions+    put Drop = putWord8 0x1A+    put Select = putWord8 0x1B+    -- Variable instructions+    put (GetLocal idx) = putWord8 0x20 >> putULEB128 idx+    put (SetLocal idx) = putWord8 0x21 >> putULEB128 idx+    put (TeeLocal idx) = putWord8 0x22 >> putULEB128 idx+    put (GetGlobal idx) = putWord8 0x23 >> putULEB128 idx+    put (SetGlobal idx) = putWord8 0x24 >> putULEB128 idx+    -- Memory instructions+    put (I32Load memArg) = putWord8 0x28 >> put memArg+    put (I64Load memArg) = putWord8 0x29 >> put memArg+    put (F32Load memArg) = putWord8 0x2A >> put memArg+    put (F64Load memArg) = putWord8 0x2B >> put memArg+    put (I32Load8S memArg) = putWord8 0x2C >> put memArg+    put (I32Load8U memArg) = putWord8 0x2D >> put memArg+    put (I32Load16S memArg) = putWord8 0x2E >> put memArg+    put (I32Load16U memArg) = putWord8 0x2F >> put memArg+    put (I64Load8S memArg) = putWord8 0x30 >> put memArg+    put (I64Load8U memArg) = putWord8 0x31 >> put memArg+    put (I64Load16S memArg) = putWord8 0x32 >> put memArg+    put (I64Load16U memArg) = putWord8 0x33 >> put memArg+    put (I64Load32S memArg) = putWord8 0x34 >> put memArg+    put (I64Load32U memArg) = putWord8 0x35 >> put memArg+    put (I32Store memArg) = putWord8 0x36 >> put memArg+    put (I64Store memArg) = putWord8 0x37 >> put memArg+    put (F32Store memArg) = putWord8 0x38 >> put memArg+    put (F64Store memArg) = putWord8 0x39 >> put memArg+    put (I32Store8 memArg) = putWord8 0x3A >> put memArg+    put (I32Store16 memArg) = putWord8 0x3B >> put memArg+    put (I64Store8 memArg) = putWord8 0x3C >> put memArg+    put (I64Store16 memArg) = putWord8 0x3D >> put memArg+    put (I64Store32 memArg) = putWord8 0x3E >> put memArg+    put CurrentMemory = putWord8 0x3F >> putWord8 0x00+    put GrowMemory = putWord8 0x40 >> putWord8 0x00+    -- Numeric instructions+    put (I32Const val) = putWord8 0x41 >> putSLEB128 (asInt32 val)+    put (I64Const val) = putWord8 0x42 >> putSLEB128 (asInt64 val)+    put (F32Const val) = putWord8 0x43 >> putFloat32le val+    put (F64Const val) = putWord8 0x44 >> putFloat64le val+    put I32Eqz = putWord8 0x45+    put (IRelOp BS32 IEq) = putWord8 0x46+    put (IRelOp BS32 INe) = putWord8 0x47+    put (IRelOp BS32 ILtS) = putWord8 0x48+    put (IRelOp BS32 ILtU) = putWord8 0x49+    put (IRelOp BS32 IGtS) = putWord8 0x4A+    put (IRelOp BS32 IGtU) = putWord8 0x4B+    put (IRelOp BS32 ILeS) = putWord8 0x4C+    put (IRelOp BS32 ILeU) = putWord8 0x4D+    put (IRelOp BS32 IGeS) = putWord8 0x4E+    put (IRelOp BS32 IGeU) = putWord8 0x4F+    put I64Eqz = putWord8 0x50+    put (IRelOp BS64 IEq) = putWord8 0x51+    put (IRelOp BS64 INe) = putWord8 0x52+    put (IRelOp BS64 ILtS) = putWord8 0x53+    put (IRelOp BS64 ILtU) = putWord8 0x54+    put (IRelOp BS64 IGtS) = putWord8 0x55+    put (IRelOp BS64 IGtU) = putWord8 0x56+    put (IRelOp BS64 ILeS) = putWord8 0x57+    put (IRelOp BS64 ILeU) = putWord8 0x58+    put (IRelOp BS64 IGeS) = putWord8 0x59+    put (IRelOp BS64 IGeU) = putWord8 0x5A+    put (FRelOp BS32 FEq) = putWord8 0x5B+    put (FRelOp BS32 FNe) = putWord8 0x5C+    put (FRelOp BS32 FLt) = putWord8 0x5D+    put (FRelOp BS32 FGt) = putWord8 0x5E+    put (FRelOp BS32 FLe) = putWord8 0x5F+    put (FRelOp BS32 FGe) = putWord8 0x60+    put (FRelOp BS64 FEq) = putWord8 0x61+    put (FRelOp BS64 FNe) = putWord8 0x62+    put (FRelOp BS64 FLt) = putWord8 0x63+    put (FRelOp BS64 FGt) = putWord8 0x64+    put (FRelOp BS64 FLe) = putWord8 0x65+    put (FRelOp BS64 FGe) = putWord8 0x66+    put (IUnOp BS32 IClz) = putWord8 0x67+    put (IUnOp BS32 ICtz) = putWord8 0x68+    put (IUnOp BS32 IPopcnt) = putWord8 0x69+    put (IBinOp BS32 IAdd) = putWord8 0x6A+    put (IBinOp BS32 ISub) = putWord8 0x6B+    put (IBinOp BS32 IMul) = putWord8 0x6C+    put (IBinOp BS32 IDivS) = putWord8 0x6D+    put (IBinOp BS32 IDivU) = putWord8 0x6E+    put (IBinOp BS32 IRemS) = putWord8 0x6F+    put (IBinOp BS32 IRemU) = putWord8 0x70+    put (IBinOp BS32 IAnd) = putWord8 0x71+    put (IBinOp BS32 IOr) = putWord8 0x72+    put (IBinOp BS32 IXor) = putWord8 0x73+    put (IBinOp BS32 IShl) = putWord8 0x74+    put (IBinOp BS32 IShrS) = putWord8 0x75+    put (IBinOp BS32 IShrU) = putWord8 0x76+    put (IBinOp BS32 IRotl) = putWord8 0x77+    put (IBinOp BS32 IRotr) = putWord8 0x78+    put (IUnOp BS64 IClz) = putWord8 0x79+    put (IUnOp BS64 ICtz) = putWord8 0x7A+    put (IUnOp BS64 IPopcnt) = putWord8 0x7B+    put (IBinOp BS64 IAdd) = putWord8 0x7C+    put (IBinOp BS64 ISub) = putWord8 0x7D+    put (IBinOp BS64 IMul) = putWord8 0x7E+    put (IBinOp BS64 IDivS) = putWord8 0x7F+    put (IBinOp BS64 IDivU) = putWord8 0x80+    put (IBinOp BS64 IRemS) = putWord8 0x81+    put (IBinOp BS64 IRemU) = putWord8 0x82+    put (IBinOp BS64 IAnd) = putWord8 0x83+    put (IBinOp BS64 IOr) = putWord8 0x84+    put (IBinOp BS64 IXor) = putWord8 0x85+    put (IBinOp BS64 IShl) = putWord8 0x86+    put (IBinOp BS64 IShrS) = putWord8 0x87+    put (IBinOp BS64 IShrU) = putWord8 0x88+    put (IBinOp BS64 IRotl) = putWord8 0x89+    put (IBinOp BS64 IRotr) = putWord8 0x8A+    put (FUnOp BS32 FAbs) = putWord8 0x8B+    put (FUnOp BS32 FNeg) = putWord8 0x8C+    put (FUnOp BS32 FCeil) = putWord8 0x8D+    put (FUnOp BS32 FFloor) = putWord8 0x8E+    put (FUnOp BS32 FTrunc) = putWord8 0x8F+    put (FUnOp BS32 FNearest) = putWord8 0x90+    put (FUnOp BS32 FSqrt) = putWord8 0x91+    put (FBinOp BS32 FAdd) = putWord8 0x92+    put (FBinOp BS32 FSub) = putWord8 0x93+    put (FBinOp BS32 FMul) = putWord8 0x94+    put (FBinOp BS32 FDiv) = putWord8 0x95+    put (FBinOp BS32 FMin) = putWord8 0x96+    put (FBinOp BS32 FMax) = putWord8 0x97+    put (FBinOp BS32 FCopySign) = putWord8 0x98+    put (FUnOp BS64 FAbs) = putWord8 0x99+    put (FUnOp BS64 FNeg) = putWord8 0x9A+    put (FUnOp BS64 FCeil) = putWord8 0x9B+    put (FUnOp BS64 FFloor) = putWord8 0x9C+    put (FUnOp BS64 FTrunc) = putWord8 0x9D+    put (FUnOp BS64 FNearest) = putWord8 0x9E+    put (FUnOp BS64 FSqrt) = putWord8 0x9F+    put (FBinOp BS64 FAdd) = putWord8 0xA0+    put (FBinOp BS64 FSub) = putWord8 0xA1+    put (FBinOp BS64 FMul) = putWord8 0xA2+    put (FBinOp BS64 FDiv) = putWord8 0xA3+    put (FBinOp BS64 FMin) = putWord8 0xA4+    put (FBinOp BS64 FMax) = putWord8 0xA5+    put (FBinOp BS64 FCopySign) = putWord8 0xA6+    put I32WrapI64 = putWord8 0xA7+    put (ITruncFS BS32 BS32) = putWord8 0xA8+    put (ITruncFU BS32 BS32) = putWord8 0xA9+    put (ITruncFS BS32 BS64) = putWord8 0xAA+    put (ITruncFU BS32 BS64) = putWord8 0xAB+    put I64ExtendSI32 = putWord8 0xAC+    put I64ExtendUI32 = putWord8 0xAD+    put (ITruncFS BS64 BS32) = putWord8 0xAE+    put (ITruncFU BS64 BS32) = putWord8 0xAF+    put (ITruncFS BS64 BS64) = putWord8 0xB0+    put (ITruncFU BS64 BS64) = putWord8 0xB1+    put (FConvertIS BS32 BS32) = putWord8 0xB2+    put (FConvertIU BS32 BS32) = putWord8 0xB3+    put (FConvertIS BS32 BS64) = putWord8 0xB4+    put (FConvertIU BS32 BS64) = putWord8 0xB5+    put F32DemoteF64 = putWord8 0xB6+    put (FConvertIS BS64 BS32) = putWord8 0xB7+    put (FConvertIU BS64 BS32) = putWord8 0xB8+    put (FConvertIS BS64 BS64) = putWord8 0xB9+    put (FConvertIU BS64 BS64) = putWord8 0xBA+    put F64PromoteF32 = putWord8 0xBB+    put (IReinterpretF BS32) = putWord8 0xBC+    put (IReinterpretF BS64) = putWord8 0xBD+    put (FReinterpretI BS32) = putWord8 0xBE+    put (FReinterpretI BS64) = putWord8 0xBF++    get = do+        op <- getWord8+        case op of+            0x00 -> return Unreachable+            0x01 -> return Nop+            0x02 -> Block <$> getResultType <*> getExpression+            0x03 -> Loop <$> getResultType <*> getExpression+            0x04 -> do+                resultType <- getResultType+                (true, hasElse) <- getTrueBranch+                false <- if hasElse then getExpression else return []+                return $ If resultType true false+            0x0C -> Br <$> getULEB128 32+            0x0D -> BrIf <$> getULEB128 32+            0x0E -> BrTable <$> (map unIndex <$> getVec) <*> getULEB128 32+            0x0F -> return $ Return+            0x10 -> Call <$> getULEB128 32+            0x11 -> do+                typeIdx <- getULEB128 32+                byteGuard 0x00+                return $ CallIndirect typeIdx+            -- Parametric instructions+            0x1A -> return $ Drop+            0x1B -> return $ Select+            -- Variable instructions+            0x20 -> GetLocal <$> getULEB128 32+            0x21 -> SetLocal <$> getULEB128 32+            0x22 -> TeeLocal <$> getULEB128 32+            0x23 -> GetGlobal <$> getULEB128 32+            0x24 -> SetGlobal <$> getULEB128 32+            -- Memory instructions+            0x28 -> I32Load <$> get+            0x29 -> I64Load <$> get+            0x2A -> F32Load <$> get+            0x2B -> F64Load <$> get+            0x2C -> I32Load8S <$> get+            0x2D -> I32Load8U <$> get+            0x2E -> I32Load16S <$> get+            0x2F -> I32Load16U <$> get+            0x30 -> I64Load8S <$> get+            0x31 -> I64Load8U <$> get+            0x32 -> I64Load16S <$> get+            0x33 -> I64Load16U <$> get+            0x34 -> I64Load32S <$> get+            0x35 -> I64Load32U <$> get+            0x36 -> I32Store <$> get+            0x37 -> I64Store <$> get+            0x38 -> F32Store <$> get+            0x39 -> F64Store <$> get+            0x3A -> I32Store8 <$> get+            0x3B -> I32Store16 <$> get+            0x3C -> I64Store8 <$> get+            0x3D -> I64Store16 <$> get+            0x3E -> I64Store32 <$> get+            0x3F -> byteGuard 0x00 >> (return $ CurrentMemory)+            0x40 -> byteGuard 0x00 >> (return $ GrowMemory)+            -- Numeric instructions+            0x41 -> I32Const <$> getSLEB128 32+            0x42 -> I64Const <$> getSLEB128 64+            0x43 -> F32Const <$> getFloat32le+            0x44 -> F64Const <$> getFloat64le+            0x45 -> return $ I32Eqz+            0x46 -> return $ IRelOp BS32 IEq+            0x47 -> return $ IRelOp BS32 INe+            0x48 -> return $ IRelOp BS32 ILtS+            0x49 -> return $ IRelOp BS32 ILtU+            0x4A -> return $ IRelOp BS32 IGtS+            0x4B -> return $ IRelOp BS32 IGtU+            0x4C -> return $ IRelOp BS32 ILeS+            0x4D -> return $ IRelOp BS32 ILeU+            0x4E -> return $ IRelOp BS32 IGeS+            0x4F -> return $ IRelOp BS32 IGeU+            0x50 -> return $ I64Eqz+            0x51 -> return $ IRelOp BS64 IEq+            0x52 -> return $ IRelOp BS64 INe+            0x53 -> return $ IRelOp BS64 ILtS+            0x54 -> return $ IRelOp BS64 ILtU+            0x55 -> return $ IRelOp BS64 IGtS+            0x56 -> return $ IRelOp BS64 IGtU+            0x57 -> return $ IRelOp BS64 ILeS+            0x58 -> return $ IRelOp BS64 ILeU+            0x59 -> return $ IRelOp BS64 IGeS+            0x5A -> return $ IRelOp BS64 IGeU+            0x5B -> return $ FRelOp BS32 FEq+            0x5C -> return $ FRelOp BS32 FNe+            0x5D -> return $ FRelOp BS32 FLt+            0x5E -> return $ FRelOp BS32 FGt+            0x5F -> return $ FRelOp BS32 FLe+            0x60 -> return $ FRelOp BS32 FGe+            0x61 -> return $ FRelOp BS64 FEq+            0x62 -> return $ FRelOp BS64 FNe+            0x63 -> return $ FRelOp BS64 FLt+            0x64 -> return $ FRelOp BS64 FGt+            0x65 -> return $ FRelOp BS64 FLe+            0x66 -> return $ FRelOp BS64 FGe+            0x67 -> return $ IUnOp BS32 IClz+            0x68 -> return $ IUnOp BS32 ICtz+            0x69 -> return $ IUnOp BS32 IPopcnt+            0x6A -> return $ IBinOp BS32 IAdd+            0x6B -> return $ IBinOp BS32 ISub+            0x6C -> return $ IBinOp BS32 IMul+            0x6D -> return $ IBinOp BS32 IDivS+            0x6E -> return $ IBinOp BS32 IDivU+            0x6F -> return $ IBinOp BS32 IRemS+            0x70 -> return $ IBinOp BS32 IRemU+            0x71 -> return $ IBinOp BS32 IAnd+            0x72 -> return $ IBinOp BS32 IOr+            0x73 -> return $ IBinOp BS32 IXor+            0x74 -> return $ IBinOp BS32 IShl+            0x75 -> return $ IBinOp BS32 IShrS+            0x76 -> return $ IBinOp BS32 IShrU+            0x77 -> return $ IBinOp BS32 IRotl+            0x78 -> return $ IBinOp BS32 IRotr+            0x79 -> return $ IUnOp BS64 IClz+            0x7A -> return $ IUnOp BS64 ICtz+            0x7B -> return $ IUnOp BS64 IPopcnt+            0x7C -> return $ IBinOp BS64 IAdd+            0x7D -> return $ IBinOp BS64 ISub+            0x7E -> return $ IBinOp BS64 IMul+            0x7F -> return $ IBinOp BS64 IDivS+            0x80 -> return $ IBinOp BS64 IDivU+            0x81 -> return $ IBinOp BS64 IRemS+            0x82 -> return $ IBinOp BS64 IRemU+            0x83 -> return $ IBinOp BS64 IAnd+            0x84 -> return $ IBinOp BS64 IOr+            0x85 -> return $ IBinOp BS64 IXor+            0x86 -> return $ IBinOp BS64 IShl+            0x87 -> return $ IBinOp BS64 IShrS+            0x88 -> return $ IBinOp BS64 IShrU+            0x89 -> return $ IBinOp BS64 IRotl+            0x8A -> return $ IBinOp BS64 IRotr+            0x8B -> return $ FUnOp BS32 FAbs+            0x8C -> return $ FUnOp BS32 FNeg+            0x8D -> return $ FUnOp BS32 FCeil+            0x8E -> return $ FUnOp BS32 FFloor+            0x8F -> return $ FUnOp BS32 FTrunc+            0x90 -> return $ FUnOp BS32 FNearest+            0x91 -> return $ FUnOp BS32 FSqrt+            0x92 -> return $ FBinOp BS32 FAdd+            0x93 -> return $ FBinOp BS32 FSub+            0x94 -> return $ FBinOp BS32 FMul+            0x95 -> return $ FBinOp BS32 FDiv+            0x96 -> return $ FBinOp BS32 FMin+            0x97 -> return $ FBinOp BS32 FMax+            0x98 -> return $ FBinOp BS32 FCopySign+            0x99 -> return $ FUnOp BS64 FAbs+            0x9A -> return $ FUnOp BS64 FNeg+            0x9B -> return $ FUnOp BS64 FCeil+            0x9C -> return $ FUnOp BS64 FFloor+            0x9D -> return $ FUnOp BS64 FTrunc+            0x9E -> return $ FUnOp BS64 FNearest+            0x9F -> return $ FUnOp BS64 FSqrt+            0xA0 -> return $ FBinOp BS64 FAdd+            0xA1 -> return $ FBinOp BS64 FSub+            0xA2 -> return $ FBinOp BS64 FMul+            0xA3 -> return $ FBinOp BS64 FDiv+            0xA4 -> return $ FBinOp BS64 FMin+            0xA5 -> return $ FBinOp BS64 FMax+            0xA6 -> return $ FBinOp BS64 FCopySign+            0xA7 -> return $ I32WrapI64+            0xA8 -> return $ ITruncFS BS32 BS32+            0xA9 -> return $ ITruncFU BS32 BS32+            0xAA -> return $ ITruncFS BS32 BS64+            0xAB -> return $ ITruncFU BS32 BS64+            0xAC -> return $ I64ExtendSI32+            0xAD -> return $ I64ExtendUI32+            0xAE -> return $ ITruncFS BS64 BS32+            0xAF -> return $ ITruncFU BS64 BS32+            0xB0 -> return $ ITruncFS BS64 BS64+            0xB1 -> return $ ITruncFU BS64 BS64+            0xB2 -> return $ FConvertIS BS32 BS32+            0xB3 -> return $ FConvertIU BS32 BS32+            0xB4 -> return $ FConvertIS BS32 BS64+            0xB5 -> return $ FConvertIU BS32 BS64+            0xB6 -> return $ F32DemoteF64+            0xB7 -> return $ FConvertIS BS64 BS32+            0xB8 -> return $ FConvertIU BS64 BS32+            0xB9 -> return $ FConvertIS BS64 BS64+            0xBA -> return $ FConvertIU BS64 BS64+            0xBB -> return $ F64PromoteF32+            0xBC -> return $ IReinterpretF BS32+            0xBD -> return $ IReinterpretF BS64+            0xBE -> return $ FReinterpretI BS32+            0xBF -> return $ FReinterpretI BS64+            _ -> fail "Unknown byte value in place of instruction opcode"++putExpression :: Expression -> Put+putExpression expr = do+    mapM_ put expr+    putWord8 0x0B -- END++getExpression :: Get Expression+getExpression = go []+    where+        go :: Expression -> Get Expression+        go acc = do+            nextByte <- lookAhead getWord8+            if nextByte == 0x0B -- END OF EXPR+            then getWord8 >> (return $ reverse acc)+            else get >>= \instr -> go (instr : acc)++getTrueBranch :: Get (Expression, Bool)+getTrueBranch = go []+    where+        go :: Expression -> Get (Expression, Bool)+        go acc = do+            nextByte <- lookAhead getWord8+            case nextByte of+                -- END OF EXPR+                0x0B -> getWord8 >> (return $ (reverse acc, False))+                -- ELSE +                0x05 -> getWord8 >> (return $ (reverse acc, True))+                _ -> get >>= \instr -> go (instr : acc)++instance Serialize Global where+    put (Global globalType expr) = do+        put globalType+        putExpression expr+    get = Global <$> get <*> getExpression++instance Serialize ExportDesc where+    put (ExportFunc idx) = putWord8 0x00 >> putULEB128 idx+    put (ExportTable idx) = putWord8 0x01 >> putULEB128 idx+    put (ExportMemory idx) = putWord8 0x02 >> putULEB128 idx+    put (ExportGlobal idx) = putWord8 0x03 >> putULEB128 idx+    get = do+        op <- getWord8+        idx <- getULEB128 32+        case op of+            0x00 -> return $ ExportFunc idx+            0x01 -> return $ ExportTable idx+            0x02 -> return $ ExportMemory idx+            0x03 -> return $ ExportGlobal idx+            _ -> fail "Unexpected byte value in position of Export Description opcode"++instance Serialize Export where+    put (Export name desc) = do+        putName name+        put desc+    get = Export <$> getName <*> get++instance Serialize ElemSegment where+    put (ElemSegment tableIndex offset funcIndexes) = do+        putULEB128 tableIndex+        putExpression offset+        putVec $ map Index funcIndexes+    get = ElemSegment <$> getULEB128 32 <*> getExpression <*> (map unIndex <$> getVec)++data LocalTypeRange = LocalTypeRange Natural ValueType deriving (Show, Eq)++instance Serialize LocalTypeRange where+    put (LocalTypeRange len valType) = do+        putULEB128 len+        put valType+    get = LocalTypeRange <$> getULEB128 32 <*> get++instance Serialize Function where+    put Function {localTypes = locals, body} = do+        let bs = runPut $ do+                putVec $ map (LocalTypeRange 1) locals+                putExpression body+        putULEB128 $ BS.length bs+        putByteString bs+    get = do+        _size <- getULEB128 32 :: Get Natural+        locals <- concat . map (\(LocalTypeRange n val) -> replicate (fromIntegral n) val) <$> getVec+        body <- getExpression+        return $ Function 0 locals body++instance Serialize DataSegment where+    put (DataSegment memIdx offset init) = do+        putULEB128 memIdx+        putExpression offset+        putULEB128 $ LBS.length init+        putLazyByteString init+    get = do+        memIdx <- getULEB128 32+        offset <- getExpression+        len <- getULEB128 32+        init <- getLazyByteString len+        return $ DataSegment memIdx offset init++instance Serialize Module where+    put mod = do+        -- magic+        mapM_ putWord8 [0x00, 0x61, 0x73, 0x6D]+        -- version+        mapM_ putWord8 [0x01, 0x00, 0x00, 0x00]++        putSection TypeSection $ putVec $ types mod+        putSection ImportSection $ putVec $ imports mod+        putSection FunctionSection $ putVec $ map (Index . funcType) $ functions mod+        putSection TableSection $ putVec $ tables mod+        putSection MemorySection $ putVec $ mems mod+        putSection GlobalSection $ putVec $ globals mod+        putSection ExportSection $ putVec $ exports mod+        case start mod of+            Just (StartFunction idx) -> putSection StartSection $ putULEB128 idx+            Nothing -> return ()+        putSection ElementSection $ putVec $ elems mod+        putSection CodeSection $ putVec $ functions mod+        putSection DataSection $ putVec $ datas mod+        +    get = do+        magic <- getWord32be+        if magic == 0x0061736D then return () else fail "magic header not detected"+        version <- getWord32be+        if version == 0x01000000 then return () else fail "unknown binary version"+        types <- getSection TypeSection getVec []+        imports <- getSection ImportSection getVec []+        funcTypes <- getSection FunctionSection getVec []+        tables <- getSection TableSection getVec []+        mems <- getSection MemorySection getVec []+        globals <- getSection GlobalSection getVec []+        exports <- getSection ExportSection getVec []+        start <- getSection StartSection (Just . StartFunction <$> getULEB128 32) Nothing+        elems <- getSection ElementSection getVec []+        functions <- getSection CodeSection getVec []+        datas <- getSection DataSection getVec []+        if length funcTypes /= length functions+        then fail "function and code section have inconsistent lengths"+        else return ()+        return $ emptyModule {+            types,+            imports,+            tables,+            mems,+            globals,+            exports,+            start,+            elems,+            functions = zipWith (\(Index funcType) fun -> fun { funcType }) funcTypes functions,+            datas+        }+++dumpModule :: Module -> BS.ByteString+dumpModule = encode++dumpModuleLazy :: Module -> LBS.ByteString+dumpModuleLazy = encodeLazy++decodeModule :: BS.ByteString -> Either String Module+decodeModule = decode++decodeModuleLazy :: LBS.ByteString -> Either String Module+decodeModuleLazy = decodeLazy
+ src/Language/Wasm/Builder.hs view
@@ -0,0 +1,1026 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE TypeInType #-}+{-# LANGUAGE TypeSynonymInstances #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE ScopedTypeVariables #-}++module Language.Wasm.Builder (+    GenMod,+    genMod,+    global, typedef, fun, funRec, declare, implement, table, memory, dataSegment,+    importFunction, importGlobal, importMemory, importTable,+    export,+    nextFuncIndex, setGlobalInitializer,+    GenFun,+    Glob, Loc, Fn(..), Mem, Tbl, Label,+    param, local, label,+    ret,+    arg,+    i32, i64, f32, f64,+    i32c, i64c, f32c, f64c,+    add, inc, sub, dec, mul, div_u, div_s, rem_u, rem_s, and, or, xor, shl, shr_u, shr_s, rotl, rotr,+    clz, ctz, popcnt,+    eq, ne, lt_s, lt_u, gt_s, gt_u, le_s, le_u, ge_s, ge_u,+    eqz,+    div_f, min_f, max_f, copySign,+    abs_f, neg_f, ceil_f, floor_f, trunc_f, nearest_f, sqrt_f,+    lt_f, gt_f, le_f, ge_f,+    wrap, trunc_s, trunc_u, extend_s, extend_u, convert_s, convert_u, demote, promote, reinterpret,+    load, load8_u, load8_s, load16_u, load16_s, load32_u, load32_s,+    store, store8, store16, store32,+    memorySize, growMemory,+    nop, Language.Wasm.Builder.drop, select,+    call, callIndirect, finish, br, brIf, brTable,+    if', loop, block, when, for, while,+    trap, unreachable,+    appendExpr, after,+    Producer, OutType, produce, Consumer, (.=)+) where++import Prelude hiding (and, or)+import qualified Data.List as List+import qualified Data.Maybe as Maybe+import Control.Monad.State (State, execState, get, gets, put, modify)+import Control.Monad.Reader (ReaderT, ask, runReaderT)+import Numeric.Natural+import Data.Word (Word32, Word64)+import Data.Int (Int32, Int64)+import Data.Proxy++import qualified Data.Text.Lazy as TL+import qualified Data.ByteString.Lazy as LBS++import Language.Wasm.Structure++data FuncDef = FuncDef {+    args :: [ValueType],+    returns :: [ValueType],+    locals :: [ValueType],+    instrs :: Expression+} deriving (Show, Eq)++type GenFun = ReaderT Natural (State FuncDef)++genExpr :: Natural -> GenFun a -> Expression+genExpr deep gen = instrs $ flip execState (FuncDef [] [] [] []) $ runReaderT gen deep++newtype Loc t = Loc Natural deriving (Show, Eq)++param :: (ValueTypeable t) => Proxy t -> GenFun (Loc t)+param t = do+    f@FuncDef { args } <- get+    put $ f { args = args ++ [getValueType t] }+    return $ Loc $ fromIntegral $ length args++local :: (ValueTypeable t) => Proxy t -> GenFun (Loc t)+local t = do+    f@FuncDef { args, locals } <- get+    put $ f { locals = locals ++ [getValueType t]}+    return $ Loc $ fromIntegral $ length args + length locals++appendExpr :: Expression -> GenFun ()+appendExpr expr = do+    modify $ \def -> def { instrs = instrs def ++ expr }+    return ()++after :: Expression -> GenFun a -> GenFun a+after instr expr = do+    res <- expr+    modify $ \def -> def { instrs = instrs def ++ instr }+    return res++data TypedExpr+    = ExprI32 (GenFun (Proxy I32))+    | ExprI64 (GenFun (Proxy I64))+    | ExprF32 (GenFun (Proxy F32))+    | ExprF64 (GenFun (Proxy F64))++class Producer expr where+    type OutType expr+    asTypedExpr :: expr -> TypedExpr+    asValueType :: expr -> ValueType+    produce :: expr -> GenFun (OutType expr)++instance (ValueTypeable t) => Producer (Loc t) where+    type OutType (Loc t) = Proxy t+    asTypedExpr e = case getValueType (t e) of+        I32 -> ExprI32 (produce e >> return Proxy)+        I64 -> ExprI64 (produce e >> return Proxy)+        F32 -> ExprF32 (produce e >> return Proxy)+        F64 -> ExprF64 (produce e >> return Proxy)+        where+            t :: Loc t -> Proxy t+            t _ = Proxy+    asValueType e = getValueType (t e)+        where+            t :: Loc t -> Proxy t+            t _ = Proxy+    produce (Loc i) = appendExpr [GetLocal i] >> return Proxy++instance (ValueTypeable t) => Producer (Glob t) where+    type OutType (Glob t) = Proxy t+    asTypedExpr e = case getValueType (t e) of+        I32 -> ExprI32 (produce e >> return Proxy)+        I64 -> ExprI64 (produce e >> return Proxy)+        F32 -> ExprF32 (produce e >> return Proxy)+        F64 -> ExprF64 (produce e >> return Proxy)+        where+            t :: Glob t -> Proxy t+            t _ = Proxy+    asValueType e = getValueType (t e)+        where+            t :: Glob t -> Proxy t+            t _ = Proxy+    produce (Glob i) = appendExpr [GetGlobal i] >> return Proxy++instance (ValueTypeable t) => Producer (GenFun (Proxy t)) where+    type OutType (GenFun (Proxy t)) = Proxy t+    asTypedExpr e = case getValueType (t e) of+        I32 -> ExprI32 (produce e >> return Proxy)+        I64 -> ExprI64 (produce e >> return Proxy)+        F32 -> ExprF32 (produce e >> return Proxy)+        F64 -> ExprF64 (produce e >> return Proxy)+        where+            t :: GenFun (Proxy t) -> Proxy t+            t _ = Proxy+    asValueType e = getValueType (t e)+        where+            t :: GenFun (Proxy t) -> Proxy t+            t _ = Proxy+    produce = id++ret :: (Producer expr) => expr -> GenFun (OutType expr)+ret = produce++arg :: (Producer expr) => expr -> GenFun ()+arg e = produce e >> return ()++getSize :: ValueType -> BitSize+getSize I32 = BS32+getSize I64 = BS64+getSize F32 = BS32+getSize F64 = BS64++type family IsInt i :: Bool where+    IsInt (Proxy I32) = True+    IsInt (Proxy I64) = True+    IsInt any         = False++type family IsFloat i :: Bool where+    IsFloat (Proxy F32) = True+    IsFloat (Proxy F64) = True+    IsFloat any         = False++nop :: GenFun ()+nop = appendExpr [Nop]++drop :: (Producer val) => val -> GenFun ()+drop val = do+    produce val+    appendExpr [Drop]++select :: (Producer a, Producer b, OutType a ~ OutType b, Producer pred, OutType pred ~ Proxy I32) => pred -> a -> b -> GenFun (OutType a)+select pred a b = select' (produce pred) (produce a) (produce b)+    where+        select' :: GenFun pred -> GenFun val -> GenFun val -> GenFun val+        select' pred a b = do+            a+            res <- b+            pred+            appendExpr [Select]+            return res++iBinOp :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => IBinOp -> a -> b -> GenFun (OutType a)+iBinOp op a b = produce a >> after [IBinOp (getSize $ asValueType a) op] (produce b)++iUnOp :: (Producer a, IsInt (OutType a) ~ True) => IUnOp -> a -> GenFun (OutType a)+iUnOp op a = after [IUnOp (getSize $ asValueType a) op] (produce a)++iRelOp :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => IRelOp -> a -> b -> GenFun (Proxy I32)+iRelOp op a b = do+    produce a+    produce b+    appendExpr [IRelOp (getSize $ asValueType a) op]+    return Proxy++add :: (Producer a, Producer b, OutType a ~ OutType b) => a -> b -> GenFun (OutType a)+add a b = do+    produce a+    case asValueType a of+        I32 -> after [IBinOp BS32 IAdd] (produce b)+        I64 -> after [IBinOp BS64 IAdd] (produce b)+        F32 -> after [FBinOp BS32 FAdd] (produce b)+        F64 -> after [FBinOp BS64 FAdd] (produce b)++inc :: (Consumer a, Producer a, Integral i) => i -> a -> GenFun ()+inc i a = case asTypedExpr a of+    ExprI32 e -> a .= (e `add` i32c i)+    ExprI64 e -> a .= (e `add` i64c i)+    ExprF32 e -> a .= (e `add` f32c (fromIntegral i))+    ExprF64 e -> a .= (e `add` f64c (fromIntegral i))++sub :: (Producer a, Producer b, OutType a ~ OutType b) => a -> b -> GenFun (OutType a)+sub a b = do+    produce a+    case asValueType a of+        I32 -> after [IBinOp BS32 ISub] (produce b)+        I64 -> after [IBinOp BS64 ISub] (produce b)+        F32 -> after [FBinOp BS32 FSub] (produce b)+        F64 -> after [FBinOp BS64 FSub] (produce b)++dec :: (Consumer a, Producer a, Integral i) => i -> a -> GenFun ()+dec i a = case asTypedExpr a of+    ExprI32 e -> a .= (e `sub` i32c i)+    ExprI64 e -> a .= (e `sub` i64c i)+    ExprF32 e -> a .= (e `sub` f32c (fromIntegral i))+    ExprF64 e -> a .= (e `sub` f64c (fromIntegral i))++mul :: (Producer a, Producer b, OutType a ~ OutType b) => a -> b -> GenFun (OutType a)+mul a b = do+    produce a+    case asValueType a of+        I32 -> after [IBinOp BS32 IMul] (produce b)+        I64 -> after [IBinOp BS64 IMul] (produce b)+        F32 -> after [FBinOp BS32 FMul] (produce b)+        F64 -> after [FBinOp BS64 FMul] (produce b)++div_u :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)+div_u = iBinOp IDivU++div_s :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)+div_s = iBinOp IDivS++rem_u :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)+rem_u = iBinOp IRemU++rem_s :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)+rem_s = iBinOp IRemS++and :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)+and = iBinOp IAnd++or :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)+or = iBinOp IOr++xor :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)+xor = iBinOp IXor++shl :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)+shl = iBinOp IShl++shr_u :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)+shr_u = iBinOp IShrU++shr_s :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)+shr_s = iBinOp IShrS++rotl :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)+rotl = iBinOp IRotl++rotr :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)+rotr = iBinOp IRotr ++clz :: (Producer a, IsInt (OutType a) ~ True) => a -> GenFun (OutType a)+clz = iUnOp IClz++ctz :: (Producer a, IsInt (OutType a) ~ True) => a -> GenFun (OutType a)+ctz = iUnOp ICtz++popcnt :: (Producer a, IsInt (OutType a) ~ True) => a -> GenFun (OutType a)+popcnt = iUnOp IPopcnt++eq :: (Producer a, Producer b, OutType a ~ OutType b) => a -> b -> GenFun (Proxy I32)+eq a b = do+    produce a+    produce b+    case asValueType a of+        I32 -> appendExpr [IRelOp BS32 IEq]+        I64 -> appendExpr [IRelOp BS64 IEq]+        F32 -> appendExpr [FRelOp BS32 FEq]+        F64 -> appendExpr [FRelOp BS64 FEq]+    return Proxy++ne :: (Producer a, Producer b, OutType a ~ OutType b) => a -> b -> GenFun (Proxy I32)+ne a b = do+    produce a+    produce b+    case asValueType a of+        I32 -> appendExpr [IRelOp BS32 INe]+        I64 -> appendExpr [IRelOp BS64 INe]+        F32 -> appendExpr [FRelOp BS32 FNe]+        F64 -> appendExpr [FRelOp BS64 FNe]+    return Proxy++lt_s :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)+lt_s = iRelOp ILtS++lt_u :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)+lt_u = iRelOp ILtU++gt_s :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)+gt_s = iRelOp IGtS++gt_u :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)+gt_u = iRelOp IGtU++le_s :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)+le_s = iRelOp ILeS++le_u :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)+le_u = iRelOp ILeU++ge_s :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)+ge_s = iRelOp IGeS++ge_u :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)+ge_u = iRelOp IGeU++eqz :: (Producer a, IsInt (OutType a) ~ True) => a -> GenFun (Proxy I32)+eqz a = do+    produce a+    case asValueType a of+        I32 -> appendExpr [I32Eqz]+        I64 -> appendExpr [I64Eqz]+        _ -> error "Impossible by type constraint"+    return Proxy++fBinOp :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => FBinOp -> a -> b -> GenFun (OutType a)+fBinOp op a b = produce a >> after [FBinOp (getSize $ asValueType a) op] (produce b)++fUnOp :: (Producer a, IsFloat (OutType a) ~ True) => FUnOp -> a -> GenFun (OutType a)+fUnOp op a = after [FUnOp (getSize $ asValueType a) op] (produce a)++fRelOp :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => FRelOp -> a -> b -> GenFun (Proxy I32)+fRelOp op a b = do+    produce a+    produce b+    appendExpr [FRelOp (getSize $ asValueType a) op]+    return Proxy++div_f :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => a -> b -> GenFun (OutType a)+div_f = fBinOp FDiv++min_f :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => a -> b -> GenFun (OutType a)+min_f = fBinOp FMin++max_f :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => a -> b -> GenFun (OutType a)+max_f = fBinOp FMax++copySign :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => a -> b -> GenFun (OutType a)+copySign = fBinOp FCopySign++abs_f :: (Producer a, IsFloat (OutType a) ~ True) => a -> GenFun (OutType a)+abs_f = fUnOp FAbs++neg_f :: (Producer a, IsFloat (OutType a) ~ True) => a -> GenFun (OutType a)+neg_f = fUnOp FNeg++ceil_f :: (Producer a, IsFloat (OutType a) ~ True) => a -> GenFun (OutType a)+ceil_f = fUnOp FCeil++floor_f :: (Producer a, IsFloat (OutType a) ~ True) => a -> GenFun (OutType a)+floor_f = fUnOp FFloor++trunc_f :: (Producer a, IsFloat (OutType a) ~ True) => a -> GenFun (OutType a)+trunc_f = fUnOp FTrunc++nearest_f :: (Producer a, IsFloat (OutType a) ~ True) => a -> GenFun (OutType a)+nearest_f = fUnOp FAbs++sqrt_f :: (Producer a, IsFloat (OutType a) ~ True) => a -> GenFun (OutType a)+sqrt_f = fUnOp FAbs++lt_f :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)+lt_f = fRelOp FLt++gt_f :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)+gt_f = fRelOp FGt++le_f :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)+le_f = fRelOp FLe++ge_f :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)+ge_f = fRelOp FGe++i32c :: (Integral i) => i -> GenFun (Proxy I32)+i32c i = appendExpr [I32Const $ asWord32 $ fromIntegral i] >> return Proxy++i64c :: (Integral i) => i -> GenFun (Proxy I64)+i64c i = appendExpr [I64Const $ asWord64 $ fromIntegral i] >> return Proxy++f32c :: Float -> GenFun (Proxy F32)+f32c f = appendExpr [F32Const f] >> return Proxy++f64c :: Double -> GenFun (Proxy F64)+f64c d = appendExpr [F64Const d] >> return Proxy++wrap :: (Producer i, OutType i ~ Proxy I64) => i -> GenFun (Proxy I32)+wrap big = do+    produce big+    appendExpr [I32WrapI64]+    return Proxy++trunc_u :: (Producer f, IsFloat (OutType f) ~ True, IsInt (Proxy t) ~ True, ValueTypeable t) => Proxy t -> f -> GenFun (Proxy t)+trunc_u t float = do+    produce float+    appendExpr [ITruncFU (getSize $ getValueType t) (getSize $ asValueType float)]+    return Proxy++trunc_s :: (Producer f, IsFloat (OutType f) ~ True, IsInt (Proxy t) ~ True, ValueTypeable t) => Proxy t -> f -> GenFun (Proxy t)+trunc_s t float = do+    produce float+    appendExpr [ITruncFS (getSize $ getValueType t) (getSize $ asValueType float)]+    return Proxy++extend_u :: (Producer i, OutType i ~ Proxy I32) => i -> GenFun (Proxy I64)+extend_u small = do+    produce small+    appendExpr [I64ExtendUI32]+    return Proxy++extend_s :: (Producer i, OutType i ~ Proxy I32) => i -> GenFun (Proxy I64)+extend_s small = do+    produce small+    appendExpr [I64ExtendSI32]+    return Proxy++convert_u :: (Producer i, IsInt (OutType i) ~ True, IsFloat (Proxy t) ~ True, ValueTypeable t) => Proxy t -> i -> GenFun (Proxy t)+convert_u t int = do+    produce int+    appendExpr [FConvertIU (getSize $ getValueType t) (getSize $ asValueType int)]+    return Proxy++convert_s :: (Producer i, IsInt (OutType i) ~ True, IsFloat (Proxy t) ~ True, ValueTypeable t) => Proxy t -> i -> GenFun (Proxy t)+convert_s t int = do+    produce int+    appendExpr [FConvertIS (getSize $ getValueType t) (getSize $ asValueType int)]+    return Proxy++demote :: (Producer f, OutType f ~ Proxy F64) => f -> GenFun (Proxy F32)+demote f = do+    produce f+    appendExpr [F32DemoteF64]+    return Proxy++promote :: (Producer f, OutType f ~ Proxy F32) => f -> GenFun (Proxy F64)+promote f = do+    produce f+    appendExpr [F64PromoteF32]+    return Proxy++type family SameSize a b where+    SameSize (Proxy I32) (Proxy F32) = True+    SameSize (Proxy I64) (Proxy F64) = True+    SameSize (Proxy F32) (Proxy I32) = True+    SameSize (Proxy F64) (Proxy I64) = True+    SameSize a           b           = False++reinterpret :: (ValueTypeable t, Producer val, SameSize (Proxy t) (OutType val) ~ True) => Proxy t -> val -> GenFun (Proxy t)+reinterpret t val = do+    case (getValueType t, asValueType val) of+        (I32, F32) -> appendExpr [IReinterpretF BS32]+        (I64, F64) -> appendExpr [IReinterpretF BS64]+        (F32, I32) -> appendExpr [FReinterpretI BS32]+        (F64, I64) -> appendExpr [FReinterpretI BS64]+        _ -> error "Impossible by type constraint"+    return Proxy++load :: (ValueTypeable t, Producer addr, OutType addr ~ Proxy I32, Integral offset, Integral align)+    => Proxy t+    -> addr+    -> offset+    -> align+    -> GenFun (Proxy t)+load t addr offset align = do+    produce addr+    case getValueType t of+        I32 -> appendExpr [I32Load $ MemArg (fromIntegral offset) (fromIntegral align)]+        I64 -> appendExpr [I64Load $ MemArg (fromIntegral offset) (fromIntegral align)]+        F32 -> appendExpr [F32Load $ MemArg (fromIntegral offset) (fromIntegral align)]+        F64 -> appendExpr [F64Load $ MemArg (fromIntegral offset) (fromIntegral align)]+    return Proxy++load8_u :: (ValueTypeable t, IsInt (Proxy t) ~ True, Producer addr, OutType addr ~ Proxy I32, Integral offset, Integral align)+    => Proxy t+    -> addr+    -> offset+    -> align+    -> GenFun (Proxy t)+load8_u t addr offset align = do+    produce addr+    case getValueType t of+        I32 -> appendExpr [I32Load8U $ MemArg (fromIntegral offset) (fromIntegral align)]+        I64 -> appendExpr [I64Load8U $ MemArg (fromIntegral offset) (fromIntegral align)]+        _ -> error "Impossible by type constraint"+    return Proxy++load8_s :: (ValueTypeable t, IsInt (Proxy t) ~ True, Producer addr, OutType addr ~ Proxy I32, Integral offset, Integral align)+    => Proxy t+    -> addr+    -> offset+    -> align+    -> GenFun (Proxy t)+load8_s t addr offset align = do+    produce addr+    case getValueType t of+        I32 -> appendExpr [I32Load8S $ MemArg (fromIntegral offset) (fromIntegral align)]+        I64 -> appendExpr [I64Load8S $ MemArg (fromIntegral offset) (fromIntegral align)]+        _ -> error "Impossible by type constraint"+    return Proxy++load16_u :: (ValueTypeable t, IsInt (Proxy t) ~ True, Producer addr, OutType addr ~ Proxy I32, Integral offset, Integral align)+    => Proxy t+    -> addr+    -> offset+    -> align+    -> GenFun (Proxy t)+load16_u t addr offset align = do+    produce addr+    case getValueType t of+        I32 -> appendExpr [I32Load16U $ MemArg (fromIntegral offset) (fromIntegral align)]+        I64 -> appendExpr [I64Load16U $ MemArg (fromIntegral offset) (fromIntegral align)]+        _ -> error "Impossible by type constraint"+    return Proxy++load16_s :: (ValueTypeable t, IsInt (Proxy t) ~ True, Producer addr, OutType addr ~ Proxy I32, Integral offset, Integral align)+    => Proxy t+    -> addr+    -> offset+    -> align+    -> GenFun (Proxy t)+load16_s t addr offset align = do+    produce addr+    case getValueType t of+        I32 -> appendExpr [I32Load16S $ MemArg (fromIntegral offset) (fromIntegral align)]+        I64 -> appendExpr [I64Load16S $ MemArg (fromIntegral offset) (fromIntegral align)]+        _ -> error "Impossible by type constraint"+    return Proxy++load32_u :: (ValueTypeable t, IsInt (Proxy t) ~ True, Producer addr, OutType addr ~ Proxy I32, Integral offset, Integral align)+    => Proxy t+    -> addr+    -> offset+    -> align+    -> GenFun (Proxy t)+load32_u t addr offset align = do+    produce addr+    appendExpr [I64Load32U $ MemArg (fromIntegral offset) (fromIntegral align)]+    return Proxy++load32_s :: (ValueTypeable t, IsInt (Proxy t) ~ True, Producer addr, OutType addr ~ Proxy I32, Integral offset, Integral align)+    => Proxy t+    -> addr+    -> offset+    -> align+    -> GenFun (Proxy t)+load32_s t addr offset align = do+    produce addr+    appendExpr [I64Load32S $ MemArg (fromIntegral offset) (fromIntegral align)]+    return Proxy++store :: (Producer addr, OutType addr ~ Proxy I32, Producer val, Integral offset, Integral align)+    => addr+    -> val+    -> offset+    -> align+    -> GenFun ()+store addr val offset align = do+    produce addr+    produce val+    case asValueType val of+        I32 -> appendExpr [I32Store $ MemArg (fromIntegral offset) (fromIntegral align)]+        I64 -> appendExpr [I64Store $ MemArg (fromIntegral offset) (fromIntegral align)]+        F32 -> appendExpr [F32Store $ MemArg (fromIntegral offset) (fromIntegral align)]+        F64 -> appendExpr [F64Store $ MemArg (fromIntegral offset) (fromIntegral align)]++store8 :: (Producer addr, OutType addr ~ Proxy I32, Producer val, IsInt (OutType val) ~ True, Integral offset, Integral align)+    => addr+    -> val+    -> offset+    -> align+    -> GenFun ()+store8 addr val offset align = do+    produce addr+    produce val+    case asValueType val of+        I32 -> appendExpr [I32Store8 $ MemArg (fromIntegral offset) (fromIntegral align)]+        I64 -> appendExpr [I64Store8 $ MemArg (fromIntegral offset) (fromIntegral align)]+        _ -> error "Impossible by type constraint"++store16 :: (Producer addr, OutType addr ~ Proxy I32, Producer val, IsInt (OutType val) ~ True, Integral offset, Integral align)+    => addr+    -> val+    -> offset+    -> align+    -> GenFun ()+store16 addr val offset align = do+    produce addr+    produce val+    case asValueType val of+        I32 -> appendExpr [I32Store16 $ MemArg (fromIntegral offset) (fromIntegral align)]+        I64 -> appendExpr [I64Store16 $ MemArg (fromIntegral offset) (fromIntegral align)]+        _ -> error "Impossible by type constraint"++store32 :: (Producer addr, OutType addr ~ Proxy I32, Producer val, OutType val ~ Proxy I64, Integral offset, Integral align)+    => addr+    -> val+    -> offset+    -> align+    -> GenFun ()+store32 addr val offset align = do+    produce addr+    produce val+    appendExpr [I64Store32 $ MemArg (fromIntegral offset) (fromIntegral align)]++memorySize :: GenFun (Proxy I32)+memorySize = appendExpr [CurrentMemory] >> return Proxy++growMemory :: (Producer size, OutType size ~ Proxy I32) => size -> GenFun ()+growMemory size = produce size >> appendExpr [GrowMemory]++call :: (Returnable res) => Fn res -> [GenFun a] -> GenFun res+call (Fn idx) args = sequence_ args >> appendExpr [Call idx] >> return returnableValue++callIndirect :: (Producer index, OutType index ~ Proxy I32, Returnable res) => TypeDef res -> index -> [GenFun a] -> GenFun res+callIndirect (TypeDef idx) index args = do+    sequence_ args+    produce index+    appendExpr [CallIndirect idx]+    return returnableValue++br :: Label t -> GenFun ()+br (Label labelDeep) = do+    deep <- ask+    appendExpr [Br $ deep - labelDeep]++brIf :: (Producer pred, OutType pred ~ Proxy I32) => pred -> Label t -> GenFun ()+brIf pred (Label labelDeep) = do+    produce pred+    deep <- ask+    appendExpr [BrIf $ deep - labelDeep]++brTable :: (Producer selector, OutType selector ~ Proxy I32) => selector -> [Label t] -> Label t -> GenFun ()+brTable selector labels (Label labelDeep) = do+    produce selector+    deep <- ask+    appendExpr [BrTable (map (\(Label d) -> deep - d) labels) $ deep - labelDeep]++finish :: (Producer val) => val -> GenFun ()+finish val = do+    produce val+    appendExpr [Return]++newtype Label i = Label Natural deriving (Show, Eq)++when :: (Producer pred, OutType pred ~ Proxy I32)+    => pred+    -> GenFun ()+    -> GenFun ()+when pred body = if' () pred body (return ())++for :: (Producer pred, OutType pred ~ Proxy I32) => GenFun () -> pred -> GenFun () -> GenFun () -> GenFun ()+for initer pred after body = do+    initer+    let loopBody = do+            body+            after+            loopLabel <- label+            if' () pred (br loopLabel) (return ())+    if' () pred (loop () loopBody) (return ())++while :: (Producer pred, OutType pred ~ Proxy I32) => pred -> GenFun () -> GenFun ()+while pred body = do+    let loopBody = do+            body+            loopLabel <- label+            if' () pred (br loopLabel) (return ())+    if' () pred (loop () loopBody) (return ())++label :: GenFun (Label t)+label = Label <$> ask++if' :: (Producer pred, OutType pred ~ Proxy I32, Returnable res)+    => res+    -> pred+    -> GenFun res+    -> GenFun res+    -> GenFun res+if' res pred true false = do+    produce pred+    deep <- (+1) <$> ask+    appendExpr [If (asResultValue res) (genExpr deep $ true) (genExpr deep $ false)]+    return returnableValue++loop :: (Returnable res) => res -> GenFun res -> GenFun res+loop res body = do+    deep <- (+1) <$> ask+    appendExpr [Loop (asResultValue res) (genExpr deep $ body)]+    return returnableValue++block :: (Returnable res) => res -> GenFun res -> GenFun res+block res body = do+    deep <- (+1) <$> ask+    appendExpr [Block (asResultValue res) (genExpr deep $ body)]+    return returnableValue++trap :: Proxy t -> GenFun (Proxy t)+trap t = do+    appendExpr [Unreachable]+    return t++unreachable :: GenFun ()+unreachable = appendExpr [Unreachable]++class Consumer loc where+    infixr 2 .=+    (.=) :: (Producer expr) => loc -> expr -> GenFun ()++instance Consumer (Loc t) where+    (.=) (Loc i) expr = produce expr >> appendExpr [SetLocal i]++instance Consumer (Glob t) where+    (.=) (Glob i) expr = produce expr >> appendExpr [SetGlobal i]++newtype TypeDef t = TypeDef Natural deriving (Show, Eq)++typedef :: (Returnable res) => res -> [ValueType] -> GenMod (TypeDef res)+typedef res args = do+    let t = FuncType args (asResultValue res)+    st@GenModState { target = m@Module { types } } <- get+    let (idx, inserted) = Maybe.fromMaybe (length types, types ++ [t]) $ (\i -> (i, types)) <$> List.findIndex (== t) types+    put $ st { target = m { types = inserted } }+    return $ TypeDef $ fromIntegral idx++newtype Fn a = Fn Natural deriving (Show, Eq)++class Returnable a where+    asResultValue :: a -> [ValueType]+    returnableValue :: a++instance (ValueTypeable t) => Returnable (Proxy t) where+    asResultValue t = [getValueType t]+    returnableValue = Proxy++instance Returnable () where+    asResultValue _ = []+    returnableValue = ()++funRec :: (Returnable res) => res -> (Fn res -> GenFun res) -> GenMod (Fn res)+funRec res generator = do+    st@GenModState { target = m@Module { types, functions }, funcIdx } <- get+    let FuncDef { args, locals, instrs } = execState (runReaderT (generator (Fn funcIdx)) 0) $ FuncDef [] [] [] []+    let t = FuncType args (asResultValue res)+    let (idx, inserted) = Maybe.fromMaybe (length types, types ++ [t]) $ (\i -> (i, types)) <$> List.findIndex (== t) types+    put $ st {+        target = m { functions = functions ++ [Function (fromIntegral idx) locals instrs], types = inserted },+        funcIdx = funcIdx + 1+    }+    return $ Fn funcIdx++fun :: (Returnable res) => res -> GenFun res -> GenMod (Fn res)+fun res = funRec res . const++declare :: (Returnable res) => res -> [ValueType] -> GenMod (Fn res)+declare res args = do+    st@GenModState { target = m@Module { types, functions }, funcIdx } <- get+    let t = FuncType args (asResultValue res)+    let (idx, inserted) = Maybe.fromMaybe (length types, types ++ [t]) $ (\i -> (i, types)) <$> List.findIndex (== t) types+    let err = error "Declared function doesn't have implementation"+    put $ st {+        target = m { functions = functions ++ [Function (fromIntegral idx) err err], types = inserted },+        funcIdx = funcIdx + 1+    }+    return $ Fn funcIdx++implement :: (Returnable res) => Fn res -> GenFun res -> GenMod (Fn res)+implement (Fn funcIdx) generator = do+    st@GenModState { target = m@Module { types, functions, imports } } <- get+    let FuncDef { args, locals, instrs } = execState (runReaderT generator 0) $ FuncDef [] [] [] []+    let locIdx = fromIntegral funcIdx - (length $ filter isFuncImport imports)+    let (l, inst : r) = splitAt locIdx functions+    let typeIdx = funcType inst+    let FuncType ps _ = types !! fromIntegral typeIdx+    if args /= ps then error "Arguments list in implementation doesn't match with declared type" else return ()+    put $ st { target = m { functions = l ++ [Function typeIdx locals instrs] ++ r } }+    return $ Fn funcIdx++nextFuncIndex :: GenMod Natural+nextFuncIndex = gets funcIdx++data GenModState = GenModState {+    funcIdx :: Natural,+    globIdx :: Natural,+    target :: Module+} deriving (Show, Eq)++type GenMod = State GenModState++genMod :: GenMod a -> Module+genMod = target . flip execState (GenModState 0 0 emptyModule)++importFunction :: (Returnable res) => TL.Text -> TL.Text -> res -> [ValueType] -> GenMod (Fn res)+importFunction mod name res params = do+    st@GenModState { target = m@Module { types, imports }, funcIdx } <- get+    let t = FuncType params (asResultValue res)+    let (idx, inserted) = Maybe.fromMaybe (length types, types ++ [t]) $ (\i -> (i, types)) <$> List.findIndex (== t) types+    put $ st {+        target = m { imports = imports ++ [Import mod name $ ImportFunc $ fromIntegral idx], types = inserted },+        funcIdx = funcIdx + 1+    }+    return (Fn funcIdx)++importGlobal :: (ValueTypeable t) => TL.Text -> TL.Text -> Proxy t -> GenMod (Glob t)+importGlobal mod name t = do+    st@GenModState { target = m@Module { imports }, globIdx } <- get+    put $ st {+        target = m { imports = imports ++ [Import mod name $ ImportGlobal $ Const $ getValueType t] },+        globIdx = globIdx + 1+    }+    return $ Glob globIdx++importMemory :: TL.Text -> TL.Text -> Natural -> Maybe Natural -> GenMod Mem+importMemory mod name min max = do+    modify $ \(st@GenModState { target = m }) -> st {+        target = m { imports = imports m ++ [Import mod name $ ImportMemory $ Limit min max] }+    }+    return $ Mem 0++importTable :: TL.Text -> TL.Text -> Natural -> Maybe Natural -> GenMod Tbl+importTable mod name min max = do+    modify $ \(st@GenModState { target = m }) -> st {+        target = m { imports = imports m ++ [Import mod name $ ImportTable $ TableType (Limit min max) AnyFunc] }+    }+    return $ Tbl 0++class Exportable e where+    type AfterExport e+    export :: TL.Text -> e -> GenMod (AfterExport e)++instance (Exportable e) => Exportable (GenMod e) where+    type AfterExport (GenMod e) = AfterExport e+    export name def = do+        ent <- def+        export name ent++instance Exportable (Fn t) where+    type AfterExport (Fn t) = Fn t+    export name (Fn funIdx) = do+        modify $ \(st@GenModState { target = m }) -> st {+            target = m { exports = exports m ++ [Export name $ ExportFunc funIdx] }+        }+        return (Fn funIdx)++instance Exportable (Glob t) where+    type AfterExport (Glob t) = Glob t+    export name g@(Glob idx) = do+        modify $ \(st@GenModState { target = m }) -> st {+            target = m { exports = exports m ++ [Export name $ ExportGlobal idx] }+        }+        return g++instance Exportable Mem where+    type AfterExport Mem = Mem+    export name (Mem memIdx) = do+        modify $ \(st@GenModState { target = m }) -> st {+            target = m { exports = exports m ++ [Export name $ ExportMemory memIdx] }+        }+        return (Mem memIdx)++instance Exportable Tbl where+    type AfterExport Tbl = Tbl+    export name (Tbl tableIdx) = do+        modify $ \(st@GenModState { target = m }) -> st {+            target = m { exports = exports m ++ [Export name $ ExportTable tableIdx] }+        }+        return (Tbl tableIdx)++class ValueTypeable a where+    type ValType a+    getValueType :: (Proxy a) -> ValueType+    initWith :: (Proxy a) -> (ValType a) -> Expression++instance ValueTypeable I32 where+    type ValType I32 = Word32+    getValueType _ = I32+    initWith _ w = [I32Const w]++instance ValueTypeable I64 where+    type ValType I64 = Word64+    getValueType _ = I64+    initWith _ w = [I64Const w]++instance ValueTypeable F32 where+    type ValType F32 = Float+    getValueType _ = F32+    initWith _ f = [F32Const f]++instance ValueTypeable F64 where+    type ValType F64 = Double+    getValueType _ = F64+    initWith _ d = [F64Const d]++i32 = Proxy @I32+i64 = Proxy @I64+f32 = Proxy @F32+f64 = Proxy @F64++newtype Glob t = Glob Natural deriving (Show, Eq)++global :: (ValueTypeable t) => (ValueType -> GlobalType) -> Proxy t -> (ValType t) -> GenMod (Glob t)+global mkType t val = do+    idx <- gets globIdx+    modify $ \(st@GenModState { target = m }) -> st {+        target = m { globals = globals m ++ [Global (mkType $ getValueType t) (initWith t val)] },+        globIdx = idx + 1+    }+    return $ Glob idx++setGlobalInitializer :: forall t . (ValueTypeable t) => Glob t -> (ValType t) -> GenMod ()+setGlobalInitializer (Glob idx) val = do+    modify $ \(st@GenModState { target = m }) ->+        let globImpsLen = length $ filter isGlobalImport $ imports m in+        let (h, glob:t) = splitAt (fromIntegral idx - globImpsLen) $ globals m in+        st {+            target = m { globals = h ++ [glob { initializer = initWith (Proxy @t) val }] ++ t }+        }++newtype Mem = Mem Natural deriving (Show, Eq)++memory :: Natural -> Maybe Natural -> GenMod Mem+memory min max = do+    modify $ \(st@GenModState { target = m }) -> st {+        target = m { mems = mems m ++ [Memory $ Limit min max] }+    }+    return $ Mem 0++newtype Tbl = Tbl Natural deriving (Show, Eq)++table :: Natural -> Maybe Natural -> GenMod Tbl+table min max = do+    modify $ \(st@GenModState { target = m }) -> st {+        target = m { tables = tables m ++ [Table $ TableType (Limit min max) AnyFunc] }+    }+    return $ Tbl 0++dataSegment :: (Producer offset, OutType offset ~ Proxy I32) => offset -> LBS.ByteString -> GenMod ()+dataSegment offset bytes =+    modify $ \(st@GenModState { target = m }) -> st {+        target = m { datas = datas m ++ [DataSegment 0 (genExpr 0 (produce offset)) bytes] }+    }++asWord32 :: Int32 -> Word32+asWord32 i+    | i >= 0 = fromIntegral i+    | otherwise = 0xFFFFFFFF - (fromIntegral (abs i)) + 1++asWord64 :: Int64 -> Word64+asWord64 i+    | i >= 0 = fromIntegral i+    | otherwise = 0xFFFFFFFFFFFFFFFF - (fromIntegral (abs i)) + 1++rts :: Module+rts = genMod $ do+    gc <- importFunction "rts" "gc" () [I32]+    memory 10 Nothing++    stackStart <- global Const i32 0+    stackEnd <- global Const i32 0+    stackBase <- global Mut i32 0+    stackTop <- global Mut i32 0++    retReg <- global Mut i32 0+    tmpReg <- global Mut i32 0++    heapStart <- global Mut i32 0+    heapNext <- global Mut i32 0+    heapEnd <- global Mut i32 0++    aligned <- fun i32 $ do+        size <- param i32+        (size `add` i32c 3) `and` i32c 0xFFFFFFFC+    alloc <- funRec i32 $ \self -> do+        size <- param i32+        alignedSize <- local i32+        addr <- local i32+        alignedSize .= call aligned [arg size]+        if' i32 ((heapNext `add` alignedSize) `lt_u` heapEnd)+            (do+                addr .= heapNext+                heapNext .= heapNext `add` alignedSize+                ret addr+            )+            (do+                call gc []+                call self [arg size]+            )+    return ()
+ src/Language/Wasm/FloatUtils.hs view
@@ -0,0 +1,44 @@+{-# LANGUAGE FlexibleContexts #-}++module Language.Wasm.FloatUtils (+    wordToFloat,+    floatToWord,+    wordToDouble,+    doubleToWord,+    makeNaN,+    doubleToFloat+) where++import Data.Word (Word32, Word64)+import Data.Bits ((.|.), (.&.), shiftR)+import Data.Array.ST (newArray, readArray, MArray, STUArray)+import Data.Array.Unsafe (castSTUArray)+import GHC.ST (runST, ST)++-- brough from https://stackoverflow.com/questions/6976684/converting-ieee-754-floating-point-in-haskell-word32-64-to-and-from-haskell-floa+wordToFloat :: Word32 -> Float+wordToFloat x = runST (cast x)++floatToWord :: Float -> Word32+floatToWord x = runST (cast x)++wordToDouble :: Word64 -> Double+wordToDouble x = runST (cast x)++doubleToWord :: Double -> Word64+doubleToWord x = runST (cast x)++{-# INLINE cast #-}+cast :: (MArray (STUArray s) a (ST s),+         MArray (STUArray s) b (ST s)) => a -> ST s b+cast x = newArray (0 :: Int, 0) x >>= castSTUArray >>= flip readArray 0++makeNaN :: Word64 -> Double+makeNaN w = wordToDouble $ 0x7FF0000000000000 .|. (0x000FFFFFFFFFFFFF .&. w)++doubleToFloat :: Double -> Float+doubleToFloat d =+    let w = doubleToWord d in+    if 0x7FF0000000000000 == (w .&. 0x7FF0000000000000) && (w .&. 0x0007FFFFFFFFFFFF) /= 0+    then wordToFloat $ fromIntegral $ ((0x8000000000000000 .&. w) `shiftR` 32) .|. 0x7F800000 .|. (0x7FFFFF .&. w)+    else realToFrac d
+ src/Language/Wasm/Interpreter.hs view
@@ -0,0 +1,1109 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE TypeFamilies #-}++module Language.Wasm.Interpreter (+    Value(..),+    Store,+    ModuleInstance(..),+    ExternalValue(..),+    ExportInstance(..),+    GlobalInstance(..),+    Imports,+    HostItem(..),+    instantiate,+    invoke,+    invokeExport,+    getGlobalValueByName,+    emptyStore,+    emptyImports,+    makeHostModule,+    makeMutGlobal+) where++import qualified Data.Map as Map+import qualified Data.Text.Lazy as TL+import qualified Data.ByteString.Lazy as LBS+import Data.Maybe (fromMaybe, isNothing)++import Data.Vector (Vector, (!), (!?), (//))+import Data.Vector.Storable.Mutable (IOVector)+import qualified Data.Vector as Vector+import qualified Data.Vector.Storable.Mutable as IOVector+import Data.IORef (IORef, newIORef, readIORef, writeIORef)+import Data.Word (Word8, Word16, Word32, Word64)+import Data.Int (Int32, Int64)+import Numeric.Natural (Natural)+import qualified Control.Monad as Monad+import Data.Monoid ((<>))+import Data.Bits (+        Bits,+        (.|.),+        (.&.),+        xor,+        shiftL,+        shiftR,+        rotateL,+        rotateR,+        popCount,+        countLeadingZeros,+        countTrailingZeros+    )+import Numeric.IEEE (IEEE, copySign, minNum, maxNum, identicalIEEE)+import Control.Monad.Except (ExceptT, runExceptT, throwError)+import Control.Monad.IO.Class (liftIO)++import Language.Wasm.Structure as Struct+import Language.Wasm.Validate as Valid+import Language.Wasm.FloatUtils (+        wordToFloat,+        floatToWord,+        wordToDouble,+        doubleToWord+    )++data Value =+    VI32 Word32+    | VI64 Word64+    | VF32 Float+    | VF64 Double+    deriving (Eq, Show)++asInt32 :: Word32 -> Int32+asInt32 w =+    if w < 0x80000000+    then fromIntegral w+    else -1 * fromIntegral (0xFFFFFFFF - w + 1)++asInt64 :: Word64 -> Int64+asInt64 w =+    if w < 0x8000000000000000+    then fromIntegral w+    else -1 * fromIntegral (0xFFFFFFFFFFFFFFFF - w + 1)++asWord32 :: Int32 -> Word32+asWord32 i+    | i >= 0 = fromIntegral i+    | otherwise = 0xFFFFFFFF - (fromIntegral (abs i)) + 1++asWord64 :: Int64 -> Word64+asWord64 i+    | i >= 0 = fromIntegral i+    | otherwise = 0xFFFFFFFFFFFFFFFF - (fromIntegral (abs i)) + 1++nearest :: (IEEE a) => a -> a+nearest f+    | isNaN f = f+    | f >= 0 && f <= 0.5 = copySign 0 f+    | f < 0 && f >= -0.5 = -0+    | otherwise =+        let i = floor f :: Integer in+        let fi = fromIntegral i in+        let r = abs f - abs fi in+        flip copySign f $ (+            if r == 0.5+            then (+                case (even i, f < 0) of+                    (True, _) -> fi+                    (_, True) -> fi - 1.0+                    (_, False) -> fi + 1.0+            )+            else fromIntegral (round f :: Integer)+        )++zeroAwareMin :: IEEE a => a -> a -> a+zeroAwareMin a b+    | identicalIEEE a 0 && identicalIEEE b (-0) = b+    | isNaN a = a+    | isNaN b = b+    | otherwise = minNum a b++zeroAwareMax :: IEEE a => a -> a -> a+zeroAwareMax a b+    | identicalIEEE a (-0) && identicalIEEE b 0 = b+    | isNaN a = a+    | isNaN b = b+    | otherwise = maxNum a b++floatFloor :: Float -> Float+floatFloor a+    | isNaN a = a+    | otherwise = copySign (fromIntegral (floor a :: Integer)) a++doubleFloor :: Double -> Double+doubleFloor a+    | isNaN a = a+    | otherwise = copySign (fromIntegral (floor a :: Integer)) a++floatCeil :: Float -> Float+floatCeil a+    | isNaN a = a+    | otherwise = copySign (fromIntegral (ceiling a :: Integer)) a++doubleCeil :: Double -> Double+doubleCeil a+    | isNaN a = a+    | otherwise = copySign (fromIntegral (ceiling a :: Integer)) a++floatTrunc :: Float -> Float+floatTrunc a+    | isNaN a = a+    | otherwise = copySign (fromIntegral (truncate a :: Integer)) a++doubleTrunc :: Double -> Double+doubleTrunc a+    | isNaN a = a+    | otherwise = copySign (fromIntegral (truncate a :: Integer)) a++data Label = Label ResultType deriving (Show, Eq)++type Address = Int++data TableInstance = TableInstance {+    lim :: Limit,+    elements :: Vector (Maybe Address)+}++data MemoryInstance = MemoryInstance {+    lim :: Limit,+    memory :: IORef (IOVector Word8)+}++data GlobalInstance = GIConst ValueType Value | GIMut ValueType (IORef Value)++makeMutGlobal :: Value -> IO GlobalInstance+makeMutGlobal val = GIMut (getValueType val) <$> newIORef val++getValueType :: Value -> ValueType+getValueType (VI32 _) = I32+getValueType (VI64 _) = I64+getValueType (VF32 _) = F32+getValueType (VF64 _) = F64++data ExportInstance = ExportInstance TL.Text ExternalValue deriving (Eq, Show)++data ExternalValue =+    ExternFunction Address+    | ExternTable Address+    | ExternMemory Address+    | ExternGlobal Address+    deriving (Eq, Show)++data FunctionInstance =+    FunctionInstance {+        funcType :: FuncType,+        moduleInstance :: ModuleInstance,+        code :: Function+    }+    | HostInstance {+        funcType :: FuncType,+        hostCode :: HostFunction+    }++data Store = Store {+    funcInstances :: Vector FunctionInstance,+    tableInstances :: Vector TableInstance,+    memInstances :: Vector MemoryInstance,+    globalInstances :: Vector GlobalInstance+}++emptyStore :: Store+emptyStore = Store {+    funcInstances = Vector.empty,+    tableInstances = Vector.empty,+    memInstances = Vector.empty,+    globalInstances = Vector.empty+}++type HostFunction = [Value] -> IO [Value]++data HostItem+    = HostFunction FuncType HostFunction+    | HostGlobal GlobalInstance+    | HostMemory Limit+    | HostTable Limit++makeHostModule :: Store -> [(TL.Text, HostItem)] -> IO (Store, ModuleInstance)+makeHostModule st items = do+    (st, emptyModInstance)+        |> makeHostFunctions+        |> makeHostGlobals+        |> makeHostMems+        >>= makeHostTables+    where+        (|>) = flip ($)++        isHostFunction :: (TL.Text, HostItem) -> Bool+        isHostFunction (_, (HostFunction _ _)) = True+        isHostFunction _ = False++        makeHostFunctions :: (Store, ModuleInstance) -> (Store, ModuleInstance)+        makeHostFunctions (st, inst) =+            let funcLen = Vector.length $ funcInstances st in+            let hostFunctions = filter isHostFunction items in+            let instances = map (\(_, (HostFunction t c)) -> HostInstance t c) hostFunctions in+            let types = map (\(_, (HostFunction t _)) -> t) hostFunctions in+            let exps = Vector.fromList $ zipWith (\(name, _) i -> ExportInstance name (ExternFunction i)) hostFunctions [funcLen..] in+            let inst' = inst {+                    funcTypes = Vector.fromList types,+                    funcaddrs = Vector.fromList [funcLen..funcLen + length instances - 1],+                    exports = Language.Wasm.Interpreter.exports inst <> exps+                }+            in+            let st' = st { funcInstances = funcInstances st <> Vector.fromList instances } in+            (st', inst')++        isHostGlobal :: (TL.Text, HostItem) -> Bool+        isHostGlobal (_, (HostGlobal _)) = True+        isHostGlobal _ = False+        +        makeHostGlobals :: (Store, ModuleInstance) -> (Store, ModuleInstance)+        makeHostGlobals (st, inst) =+            let globLen = Vector.length $ globalInstances st in+            let hostGlobals = filter isHostGlobal items in+            let instances = map (\(_, (HostGlobal g)) -> g) hostGlobals in+            let exps = Vector.fromList $ zipWith (\(name, _) i -> ExportInstance name (ExternGlobal i)) hostGlobals [globLen..] in+            let inst' = inst {+                    globaladdrs = Vector.fromList [globLen..globLen + length instances - 1],+                    exports = Language.Wasm.Interpreter.exports inst <> exps+                }+            in+            let st' = st { globalInstances = globalInstances st <> Vector.fromList instances } in+            (st', inst')++        isHostMem :: (TL.Text, HostItem) -> Bool+        isHostMem (_, (HostMemory _)) = True+        isHostMem _ = False+            +        makeHostMems :: (Store, ModuleInstance) -> IO (Store, ModuleInstance)+        makeHostMems (st, inst) = do+            let memLen = Vector.length $ memInstances st+            let hostMems = filter isHostMem items+            instances <- allocMems $ map (\(_, (HostMemory lim)) -> Memory lim) hostMems+            let exps = Vector.fromList $ zipWith (\(name, _) i -> ExportInstance name (ExternMemory i)) hostMems [memLen..]+            let inst' = inst {+                    memaddrs = Vector.fromList [memLen..memLen + length instances - 1],+                    exports = Language.Wasm.Interpreter.exports inst <> exps+                }+            let st' = st { memInstances = memInstances st <> instances }+            return (st', inst')++        isHostTable :: (TL.Text, HostItem) -> Bool+        isHostTable (_, (HostTable _)) = True+        isHostTable _ = False+            +        makeHostTables :: (Store, ModuleInstance) -> IO (Store, ModuleInstance)+        makeHostTables (st, inst) = do+            let tableLen = Vector.length $ tableInstances st+            let hostTables = filter isHostTable items+            let instances = allocTables $ map (\(_, (HostTable lim)) -> Table (TableType lim AnyFunc)) hostTables+            let exps = Vector.fromList $ zipWith (\(name, _) i -> ExportInstance name (ExternTable i)) hostTables [tableLen..]+            let inst' = inst {+                    tableaddrs = Vector.fromList [tableLen..tableLen + length instances - 1],+                    exports = Language.Wasm.Interpreter.exports inst <> exps+                }+            let st' = st { tableInstances = tableInstances st <> instances }+            return (st', inst')++data ModuleInstance = ModuleInstance {+    funcTypes :: Vector FuncType,+    funcaddrs :: Vector Address,+    tableaddrs :: Vector Address,+    memaddrs :: Vector Address,+    globaladdrs :: Vector Address,+    exports :: Vector ExportInstance+} deriving (Eq, Show)++emptyModInstance :: ModuleInstance+emptyModInstance = ModuleInstance {+    funcTypes = Vector.empty,+    funcaddrs = Vector.empty,+    tableaddrs = Vector.empty,+    memaddrs = Vector.empty,+    globaladdrs = Vector.empty,+    exports = Vector.empty+}++calcInstance :: Store -> Imports -> Module -> Initialize ModuleInstance+calcInstance (Store fs ts ms gs) imps Module {functions, types, tables, mems, globals, exports, imports} = do+    let funLen = length fs+    let tableLen = length ts+    let memLen = length ms+    let globalLen = length gs+    funImps <- mapM checkImportType $ filter isFuncImport imports+    tableImps <- mapM checkImportType $ filter isTableImport imports+    memImps <- mapM checkImportType $ filter isMemImport imports+    globalImps <- mapM checkImportType $ filter isGlobalImport imports+    let funs = Vector.fromList $ map (\(ExternFunction i) -> i) funImps ++ [funLen..funLen + length functions - 1]+    let tbls = Vector.fromList $ map (\(ExternTable i) -> i) tableImps ++ [tableLen..tableLen + length tables - 1]+    let memories = Vector.fromList $ map (\(ExternMemory i) -> i) memImps ++ [memLen..memLen + length mems - 1]+    let globs = Vector.fromList $ map (\(ExternGlobal i) -> i) globalImps ++ [globalLen..globalLen + length globals - 1]+    let+        refExport (Export name (ExportFunc idx)) =+            ExportInstance name $ ExternFunction $ funs ! fromIntegral idx+        refExport (Export name (ExportTable idx)) =+            ExportInstance name $ ExternTable $ tbls ! fromIntegral idx+        refExport (Export name (ExportMemory idx)) =+            ExportInstance name $ ExternMemory $ memories ! fromIntegral idx+        refExport (Export name (ExportGlobal idx)) =+            ExportInstance name $ ExternGlobal $ globs ! fromIntegral idx+    return $ ModuleInstance {+        funcTypes = Vector.fromList types,+        funcaddrs = funs,+        tableaddrs = tbls,+        memaddrs = memories,+        globaladdrs = globs,+        exports = Vector.fromList $ map refExport exports+    }+    where+        getImpIdx :: Import -> Initialize ExternalValue+        getImpIdx (Import m n _) =+            case Map.lookup (m, n) imps of+                Just idx -> return idx+                Nothing -> throwError $ "Cannot find import from module " ++ show m ++ " with name " ++ show n++        checkImportType :: Import -> Initialize ExternalValue+        checkImportType imp@(Import _ _ (ImportFunc typeIdx)) = do+            idx <- getImpIdx imp+            funcAddr <- case idx of+                ExternFunction funcAddr -> return funcAddr+                other -> throwError "incompatible import type"+            let expectedType = types !! fromIntegral typeIdx+            let actualType = Language.Wasm.Interpreter.funcType $ fs ! funcAddr+            if expectedType == actualType+            then return idx+            else throwError "incompatible import type"+        checkImportType imp@(Import _ _ (ImportGlobal globalType)) = do+            let err = throwError "incompatible import type"+            idx <- getImpIdx imp+            globalAddr <- case idx of+                ExternGlobal globalAddr -> return globalAddr+                _ -> err+            let globalInst = gs ! globalAddr+            let vt = case globalType of+                    Const vt -> vt+                    Mut vt -> vt+            let vt' = case globalInst of+                    GIConst vt _ -> vt+                    GIMut vt _ -> vt+            if vt == vt' then return idx else err+        checkImportType imp@(Import _ _ (ImportMemory limit)) = do+            idx <- getImpIdx imp+            memAddr <- case idx of+                ExternMemory memAddr -> return memAddr+                _ -> throwError "incompatible import type"+            let MemoryInstance { lim } = ms ! memAddr+            if limitMatch lim limit+            then return idx+            else throwError "incompatible import type"+        checkImportType imp@(Import _ _ (ImportTable (TableType limit _))) = do+            idx <- getImpIdx imp+            tableAddr <- case idx of+                ExternTable tableAddr -> return tableAddr+                _ -> throwError "incompatible import type"+            let TableInstance { lim } = ts ! tableAddr+            if limitMatch lim limit+            then return idx+            else throwError "incompatible import type"+    +        limitMatch :: Limit -> Limit -> Bool+        limitMatch (Limit n1 m1) (Limit n2 m2) = n1 >= n2 && (isNothing m2 || fromMaybe False ((<=) <$> m1 <*> m2))++type Imports = Map.Map (TL.Text, TL.Text) ExternalValue++emptyImports :: Imports+emptyImports = Map.empty++allocFunctions :: ModuleInstance -> [Function] -> Vector FunctionInstance+allocFunctions inst@ModuleInstance {funcTypes} funs =+    let mkFuncInst f@Function {funcType} = FunctionInstance (funcTypes ! (fromIntegral funcType)) inst f in+    Vector.fromList $ map mkFuncInst funs++getGlobalValue :: ModuleInstance -> Store -> Natural -> IO Value+getGlobalValue inst store idx =+    let addr = case globaladdrs inst !? fromIntegral idx of+            Just a -> a+            Nothing -> error "Global index is out of range. It can happen if initializer refs non-import global."+    in+    case globalInstances store ! addr of+        GIConst _ v -> return v+        GIMut _ ref -> readIORef ref++-- due the validation there can be only these instructions+evalConstExpr :: ModuleInstance -> Store -> Expression -> IO Value+evalConstExpr _ _ [I32Const v] = return $ VI32 v+evalConstExpr _ _ [I64Const v] = return $ VI64 v+evalConstExpr _ _ [F32Const v] = return $ VF32 v+evalConstExpr _ _ [F64Const v] = return $ VF64 v+evalConstExpr inst store [GetGlobal i] = getGlobalValue inst store i+evalConstExpr _ _ instrs = error $ "Global initializer contains unsupported instructions: " ++ show instrs++allocAndInitGlobals :: ModuleInstance -> Store -> [Global] -> IO (Vector GlobalInstance)+allocAndInitGlobals inst store globs = Vector.fromList <$> mapM allocGlob globs+    where+        runIniter :: Expression -> IO Value+        -- the spec says get global can ref only imported globals+        -- only they are in store for this moment+        runIniter = evalConstExpr inst store++        allocGlob :: Global -> IO GlobalInstance+        allocGlob (Global (Const vt) initer) = GIConst vt <$> runIniter initer+        allocGlob (Global (Mut vt) initer) = do+            val <- runIniter initer+            GIMut vt <$> newIORef val++allocTables :: [Table] -> Vector TableInstance+allocTables tables = Vector.fromList $ map allocTable tables+    where+        allocTable :: Table -> TableInstance+        allocTable (Table (TableType lim@(Limit from to) _)) =+            TableInstance {+                lim,+                elements = Vector.fromList $ replicate (fromIntegral from) Nothing+            }++defaultBudget :: Natural+defaultBudget = 300++pageSize :: Int+pageSize = 64 * 1024++allocMems :: [Memory] -> IO (Vector MemoryInstance)+allocMems mems = Vector.fromList <$> mapM allocMem mems+    where+        allocMem :: Memory -> IO MemoryInstance+        allocMem (Memory lim@(Limit from to)) = do+            mem <- IOVector.replicate (fromIntegral from * pageSize) 0+            memory <- newIORef mem+            return MemoryInstance {+                lim,+                memory+            }++type Initialize = ExceptT String IO++initialize :: ModuleInstance -> Module -> Store -> Initialize Store+initialize inst Module {elems, datas, start} store = do+    checkedMems <- mapM (checkData store) datas+    checkedTables <- mapM (checkElem store) elems+    mapM_ initData checkedMems+    st <- Monad.foldM initElem store checkedTables+    case start of+        Just (StartFunction idx) -> do+            let funInst = funcInstances store ! (funcaddrs inst ! fromIntegral idx)+            mainRes <- liftIO $ eval defaultBudget st funInst []+            case mainRes of+                Just [] -> return st+                _ -> throwError "Start function terminated with trap"+        Nothing -> return st+    where+        checkElem :: Store -> ElemSegment -> Initialize (Address, Int, [Address])+        checkElem st ElemSegment {tableIndex, offset, funcIndexes} = do+            VI32 val <- liftIO $ evalConstExpr inst st offset+            let from = fromIntegral val+            let funcs = map ((funcaddrs inst !) . fromIntegral) funcIndexes+            let idx = tableaddrs inst ! fromIntegral tableIndex+            let last = from + length funcs+            let TableInstance lim elems = tableInstances st ! idx+            let len = Vector.length elems+            Monad.when (last > len) $ throwError "elements segment does not fit"+            return (idx, from, funcs)++        initElem :: Store -> (Address, Int, [Address]) -> Initialize Store+        initElem st (idx, from, funcs) = do+            let TableInstance lim elems = tableInstances st ! idx+            let table = TableInstance lim (elems // zip [from..] (map Just funcs))+            return st { tableInstances = tableInstances st Vector.// [(idx, table)] }++        checkData :: Store -> DataSegment -> Initialize (Int, IOVector Word8, LBS.ByteString)+        checkData st DataSegment {memIndex, offset, chunk} = do+            VI32 val <- liftIO $ evalConstExpr inst st offset+            let from = fromIntegral val+            let idx = memaddrs inst ! fromIntegral memIndex+            let last = from + (fromIntegral $ LBS.length chunk)+            let MemoryInstance _ memory = memInstances st ! idx+            mem <- liftIO $ readIORef memory+            let len = IOVector.length mem+            Monad.when (last > len) $ throwError "data segment does not fit"+            return (from, mem, chunk)+        +        initData :: (Int, IOVector Word8, LBS.ByteString) -> Initialize ()+        initData (from, mem, chunk) =+            mapM_ (\(i,b) -> IOVector.write mem i b) $ zip [from..] $ LBS.unpack chunk++instantiate :: Store -> Imports -> Valid.ValidModule -> IO (Either String (ModuleInstance, Store))+instantiate st imps mod = runExceptT $ do+    let m = Valid.getModule mod+    inst <- calcInstance st imps m+    let functions = funcInstances st <> (allocFunctions inst $ Struct.functions m)+    globals <- liftIO $ (globalInstances st <>) <$> (allocAndInitGlobals inst st $ Struct.globals m)+    let tables = tableInstances st <> (allocTables $ Struct.tables m)+    mems <- liftIO $ (memInstances st <>) <$> (allocMems $ Struct.mems m)+    st' <- initialize inst m $ st {+        funcInstances = functions,+        tableInstances = tables,+        memInstances = mems,+        globalInstances = globals+    }+    return $ (inst, st')++type Stack = [Value]++data EvalCtx = EvalCtx {+    locals :: Vector Value,+    labels :: [Label],+    stack :: Stack+} deriving (Show, Eq)++data EvalResult =+    Done EvalCtx+    | Break Int [Value] EvalCtx+    | Trap+    | ReturnFn [Value]+    deriving (Show, Eq)++eval :: Natural -> Store -> FunctionInstance -> [Value] -> IO (Maybe [Value])+eval 0 _ _ _ = return Nothing+eval budget store FunctionInstance { funcType, moduleInstance, code = Function { localTypes, body} } args = do+    case sequence $ zipWith checkValType (params funcType) args of+        Just checkedArgs -> do+            let initialContext = EvalCtx {+                    locals = Vector.fromList $ checkedArgs ++ map initLocal localTypes,+                    labels = [Label $ results funcType],+                    stack = []+                }+            res <- go initialContext body+            case res of+                Done ctx -> return $ Just $ reverse $ stack ctx+                ReturnFn r -> return $ Just r+                Break 0 r _ -> return $ Just $ reverse r+                Break _ _ _ -> error "Break is out of range"+                Trap -> return Nothing+        Nothing -> return Nothing+    where+        checkValType :: ValueType -> Value -> Maybe Value+        checkValType I32 (VI32 v) = Just $ VI32 v+        checkValType I64 (VI64 v) = Just $ VI64 v+        checkValType F32 (VF32 v) = Just $ VF32 v+        checkValType F64 (VF64 v) = Just $ VF64 v+        checkValType _   _        = Nothing++        initLocal :: ValueType -> Value+        initLocal I32 = VI32 0+        initLocal I64 = VI64 0+        initLocal F32 = VF32 0+        initLocal F64 = VF64 0++        go :: EvalCtx -> Expression -> IO EvalResult+        go ctx [] = return $ Done ctx+        go ctx (instr:rest) = do+            res <- step ctx instr+            case res of+                Done ctx' -> go ctx' rest+                command -> return command+        +        makeLoadInstr :: (Bits i, Integral i) => EvalCtx -> Natural -> Int -> ([Value] -> i -> EvalResult) -> IO EvalResult+        makeLoadInstr ctx@EvalCtx{ stack = (VI32 v:rest) } offset byteWidth cont = do+            let MemoryInstance { memory = memoryRef } = memInstances store ! (memaddrs moduleInstance ! 0)+            memory <- readIORef memoryRef+            let addr = fromIntegral v + fromIntegral offset+            let readByte idx = do+                    byte <- IOVector.read memory $ addr + idx+                    return $ fromIntegral byte `shiftL` (idx * 8)+            if addr + byteWidth > IOVector.length memory+            then return Trap+            else cont rest . sum <$> mapM readByte [0..byteWidth-1]+        makeLoadInstr _ _ _ _ = error "Incorrect value on top of stack for memory instruction"++        makeStoreInstr :: (Bits i, Integral i) => EvalCtx -> Natural -> Int -> i -> IO EvalResult+        makeStoreInstr ctx@EvalCtx{ stack = (VI32 va:rest) } offset byteWidth v = do+            let MemoryInstance { memory = memoryRef } = memInstances store ! (memaddrs moduleInstance ! 0)+            memory <- readIORef memoryRef+            let addr = fromIntegral $ va + fromIntegral offset+            let writeByte idx = do+                    let byte = fromIntegral $ v `shiftR` (idx * 8) .&. 0xFF+                    IOVector.write memory (addr + idx) byte+            if addr + byteWidth > IOVector.length memory+            then return Trap+            else do+                mapM_ writeByte [0..byteWidth-1]+                return $ Done ctx { stack = rest }+        makeStoreInstr _ _ _ _ = error "Incorrect value on top of stack for memory instruction"++        step :: EvalCtx -> Instruction Natural -> IO EvalResult+        step _ Unreachable = return Trap+        step ctx Nop = return $ Done ctx+        step ctx (Block resType expr) = do+            res <- go ctx { labels = Label resType : labels ctx } expr+            case res of+                Break 0 r EvalCtx{ locals = ls } -> return $ Done ctx { locals = ls, stack = r ++ stack ctx }+                Break n r ctx' -> return $ Break (n - 1) r ctx'+                Done ctx'@EvalCtx{ labels = (_:rest) } -> return $ Done ctx' { labels = rest }+                command -> return command+        step ctx loop@(Loop resType expr) = do+            res <- go ctx { labels = Label resType : labels ctx } expr+            case res of+                Break 0 r EvalCtx{ locals = ls } -> step ctx { locals = ls, stack = r ++ stack ctx } loop+                Break n r ctx' -> return $ Break (n - 1) r ctx'+                Done ctx'@EvalCtx{ labels = (_:rest) } -> return $ Done ctx' { labels = rest }+                command -> return command+        step ctx@EvalCtx{ stack = (VI32 v): rest } (If resType true false) = do+            let expr = if v /= 0 then true else false+            res <- go ctx { labels = Label resType : labels ctx, stack = rest } expr+            case res of+                Break 0 r EvalCtx{ locals = ls } -> return $ Done ctx { locals = ls, stack = r ++ rest }+                Break n r ctx' -> return $ Break (n - 1) r ctx'+                Done ctx'@EvalCtx{ labels = (_:rest) } -> return $ Done ctx' { labels = rest }+                command -> return command+        step ctx@EvalCtx{ stack, labels } (Br label) = do+            let idx = fromIntegral label+            let Label resType = labels !! idx+            case sequence $ zipWith checkValType resType $ take (length resType) stack of+                Just result -> return $ Break idx result ctx+                Nothing -> return Trap+        step ctx@EvalCtx{ stack = (VI32 v): rest } (BrIf label) =+            if v == 0+            then return $ Done ctx { stack = rest }+            else step ctx { stack = rest } (Br label)+        step ctx@EvalCtx{ stack = (VI32 v): rest } (BrTable labels label) =+            let idx = fromIntegral v in+            let lbl = fromIntegral $ if idx < length labels then labels !! idx else label in+            step ctx { stack = rest } (Br lbl)+        step EvalCtx{ stack } Return =+            let resType = results funcType in+            case sequence $ zipWith checkValType resType $ take (length resType) stack of+                Just result -> return $ ReturnFn $ reverse result+                Nothing -> return Trap+        step ctx (Call fun) = do+            let funInst = funcInstances store ! (funcaddrs moduleInstance ! fromIntegral fun)+            let ft = Language.Wasm.Interpreter.funcType funInst +            let args = params ft+            case sequence $ zipWith checkValType args $ reverse $ take (length args) $ stack ctx of+                Just params -> do+                    res <- eval (budget - 1) store funInst params+                    case res of+                        Just res -> return $ Done ctx { stack = reverse res ++ (drop (length args) $ stack ctx) }+                        Nothing -> return Trap+                Nothing -> return Trap+        step ctx@EvalCtx{ stack = (VI32 v): rest } (CallIndirect typeIdx) = do+            let funcType = funcTypes moduleInstance ! fromIntegral typeIdx+            let TableInstance { elements } = tableInstances store ! (tableaddrs moduleInstance ! 0)+            let checks = do+                    addr <- Monad.join $ elements !? fromIntegral v+                    let funcInst = funcInstances store ! addr+                    let targetType = Language.Wasm.Interpreter.funcType funcInst+                    Monad.guard $ targetType == funcType+                    let args = params targetType+                    Monad.guard $ length args <= length rest+                    params <- sequence $ zipWith checkValType args $ reverse $ take (length args) rest+                    return (funcInst, params)+            case checks of+                Just (funcInst, params) -> do+                    res <- eval (budget - 1) store funcInst params+                    case res of+                        Just res -> return $ Done ctx { stack = reverse res ++ (drop (length params) rest) }+                        Nothing -> return Trap+                Nothing -> return Trap+        step ctx@EvalCtx{ stack = (_:rest) } Drop = return $ Done ctx { stack = rest }+        step ctx@EvalCtx{ stack = (VI32 test:val2:val1:rest) } Select =+            if test == 0+            then return $ Done ctx { stack = val2 : rest }+            else return $ Done ctx { stack = val1 : rest }+        step ctx (GetLocal i) = return $ Done ctx { stack = (locals ctx ! fromIntegral i) : stack ctx }+        step ctx@EvalCtx{ stack = (v:rest) } (SetLocal i) =+            return $ Done ctx { stack = rest, locals = locals ctx // [(fromIntegral i, v)] }+        step ctx@EvalCtx{ locals = ls, stack = (v:rest) } (TeeLocal i) =+            return $ Done ctx {+                stack = v : rest,+                locals = locals ctx // [(fromIntegral i, v)]+            }+        step ctx (GetGlobal i) = do+            let globalInst = globalInstances store ! (globaladdrs moduleInstance ! fromIntegral i)+            val <- case globalInst of+                GIConst _ v -> return v+                GIMut _ ref -> readIORef ref+            return $ Done ctx { stack = val : stack ctx }+        step ctx@EvalCtx{ stack = (v:rest) } (SetGlobal i) = do+            let globalInst = globalInstances store ! (globaladdrs moduleInstance ! fromIntegral i)+            case globalInst of+                GIConst _ v -> error "Attempt of mutation of constant global"+                GIMut _ ref -> writeIORef ref v+            return $ Done ctx { stack = rest }+        step ctx (I32Load MemArg { offset }) =+            makeLoadInstr ctx offset 4 $ (\rest val -> Done ctx { stack = VI32 val : rest })+        step ctx (I64Load MemArg { offset }) =+            makeLoadInstr ctx offset 8 $ (\rest val -> Done ctx { stack = VI64 val : rest })+        step ctx (F32Load MemArg { offset }) =+            makeLoadInstr ctx offset 4 $ (\rest val -> Done ctx { stack = VF32 (wordToFloat val) : rest })+        step ctx (F64Load MemArg { offset }) =+            makeLoadInstr ctx offset 8 $ (\rest val -> Done ctx { stack = VF64 (wordToDouble val) : rest })+        step ctx (I32Load8U MemArg { offset }) =+            makeLoadInstr ctx offset 1 $ (\rest val -> Done ctx { stack = VI32 val : rest })+        step ctx (I32Load8S MemArg { offset }) =+            makeLoadInstr ctx offset 1 $ (\rest byte ->+                let val = asWord32 $ if (byte :: Word8) >= 128 then -1 * fromIntegral (0xFF - byte + 1) else fromIntegral byte in+                Done ctx { stack = VI32 val : rest })+        step ctx (I32Load16U MemArg { offset }) = do+            makeLoadInstr ctx offset 2 $ (\rest val -> Done ctx { stack = VI32 val : rest })+        step ctx (I32Load16S MemArg { offset }) =+            makeLoadInstr ctx offset 2 $ (\rest val ->+                let signed = asWord32 $ if (val :: Word16) >= 2 ^ 15 then -1 * fromIntegral (0xFFFF - val + 1) else fromIntegral val in+                Done ctx { stack = VI32 signed : rest })+        step ctx (I64Load8U MemArg { offset }) =+            makeLoadInstr ctx offset 1 $ (\rest val -> Done ctx { stack = VI64 val : rest })+        step ctx (I64Load8S MemArg { offset }) =+            makeLoadInstr ctx offset 1 $ (\rest byte ->+                let val = asWord64 $ if (byte :: Word8) >= 128 then -1 * fromIntegral (0xFF - byte + 1) else fromIntegral byte in+                Done ctx { stack = VI64 val : rest })+        step ctx (I64Load16U MemArg { offset }) =+            makeLoadInstr ctx offset 2 $ (\rest val -> Done ctx { stack = VI64 val : rest })+        step ctx (I64Load16S MemArg { offset }) =+            makeLoadInstr ctx offset 2 $ (\rest val ->+                let signed = asWord64 $ if (val :: Word16) >= 2 ^ 15 then -1 * fromIntegral (0xFFFF - val + 1) else fromIntegral val in+                Done ctx { stack = VI64 signed : rest })+        step ctx (I64Load32U MemArg { offset }) =+            makeLoadInstr ctx offset 4 $ (\rest val -> Done ctx { stack = VI64 val : rest })+        step ctx (I64Load32S MemArg { offset }) =+            makeLoadInstr ctx offset 4 $ (\rest val ->+                let signed = asWord64 $ fromIntegral $ asInt32 val in+                Done ctx { stack = VI64 signed : rest })+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (I32Store MemArg { offset }) =+            makeStoreInstr ctx { stack = rest } offset 4 v+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (I64Store MemArg { offset }) =+            makeStoreInstr ctx { stack = rest } offset 8 v+        step ctx@EvalCtx{ stack = (VF32 f:rest) } (F32Store MemArg { offset }) =+            makeStoreInstr ctx { stack = rest } offset 4 $ floatToWord f+        step ctx@EvalCtx{ stack = (VF64 f:rest) } (F64Store MemArg { offset }) =+            makeStoreInstr ctx { stack = rest } offset 8 $ doubleToWord f+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (I32Store8 MemArg { offset }) =+            makeStoreInstr ctx { stack = rest } offset 1 v+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (I32Store16 MemArg { offset }) =+            makeStoreInstr ctx { stack = rest } offset 2 v+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (I64Store8 MemArg { offset }) =+            makeStoreInstr ctx { stack = rest } offset 1 v+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (I64Store16 MemArg { offset }) =+            makeStoreInstr ctx { stack = rest } offset 2 v+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (I64Store32 MemArg { offset }) =+            makeStoreInstr ctx { stack = rest } offset 4 v+        step ctx@EvalCtx{ stack = st } CurrentMemory = do+            let MemoryInstance { memory = memoryRef } = memInstances store ! (memaddrs moduleInstance ! 0)+            memory <- readIORef memoryRef+            let size = fromIntegral $ IOVector.length memory `div` pageSize+            return $ Done ctx { stack = VI32 size : st }+        step ctx@EvalCtx{ stack = (VI32 n:rest) } GrowMemory = do+            let MemoryInstance { lim = limit@(Limit _ maxLen), memory = memoryRef } = memInstances store ! (memaddrs moduleInstance ! 0)+            memory <- readIORef memoryRef+            let size = fromIntegral $ IOVector.length memory `quot` pageSize+            let growTo = size + fromIntegral n+            result <- (+                    if fromMaybe True ((growTo <=) . fromIntegral <$> maxLen) && growTo <= 0xFFFF+                    then do+                        mem' <- IOVector.grow memory $ fromIntegral n * pageSize+                        writeIORef memoryRef mem'+                        return size+                    else return $ -1+                )+            return $ Done ctx { stack = VI32 (asWord32 $ fromIntegral result) : rest }+        step ctx (I32Const v) = return $ Done ctx { stack = VI32 v : stack ctx }+        step ctx (I64Const v) = return $ Done ctx { stack = VI64 v : stack ctx }+        step ctx (F32Const v) = return $ Done ctx { stack = VF32 v : stack ctx }+        step ctx (F64Const v) = return $ Done ctx { stack = VF64 v : stack ctx }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IAdd) =+            return $ Done ctx { stack = VI32 (v1 + v2) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 ISub) =+            return $ Done ctx { stack = VI32 (v1 - v2) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IMul) =+            return $ Done ctx { stack = VI32 (v1 * v2) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IDivU) =+            if v2 == 0+            then return Trap+            else return $ Done ctx { stack = VI32 (v1 `quot` v2) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IDivS) =+            if v2 == 0 || (v1 == 0x80000000 && v2 == 0xFFFFFFFF)+            then return Trap+            else return $ Done ctx { stack = VI32 (asWord32 $ asInt32 v1 `quot` asInt32 v2) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IRemU) =+            if v2 == 0+            then return Trap+            else return $ Done ctx { stack = VI32 (v1 `rem` v2) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IRemS) =+            if v2 == 0+            then return Trap+            else return $ Done ctx { stack = VI32 (asWord32 $ asInt32 v1 `rem` asInt32 v2) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IAnd) =+            return $ Done ctx { stack = VI32 (v1 .&. v2) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IOr) =+            return $ Done ctx { stack = VI32 (v1 .|. v2) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IXor) =+            return $ Done ctx { stack = VI32 (v1 `xor` v2) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IShl) =+            return $ Done ctx { stack = VI32 (v1 `shiftL` (fromIntegral v2 `rem` 32)) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IShrU) =+            return $ Done ctx { stack = VI32 (v1 `shiftR` (fromIntegral v2 `rem` 32)) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IShrS) =+            return $ Done ctx { stack = VI32 (asWord32 $ asInt32 v1 `shiftR` (fromIntegral v2 `rem` 32)) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IRotl) =+            return $ Done ctx { stack = VI32 (v1 `rotateL` fromIntegral v2) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IRotr) =+            return $ Done ctx { stack = VI32 (v1 `rotateR` fromIntegral v2) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 IEq) =+            return $ Done ctx { stack = VI32 (if v1 == v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 INe) =+            return $ Done ctx { stack = VI32 (if v1 /= v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 ILtU) =+            return $ Done ctx { stack = VI32 (if v1 < v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 ILtS) =+            return $ Done ctx { stack = VI32 (if asInt32 v1 < asInt32 v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 IGtU) =+            return $ Done ctx { stack = VI32 (if v1 > v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 IGtS) =+            return $ Done ctx { stack = VI32 (if asInt32 v1 > asInt32 v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 ILeU) =+            return $ Done ctx { stack = VI32 (if v1 <= v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 ILeS) =+            return $ Done ctx { stack = VI32 (if asInt32 v1 <= asInt32 v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 IGeU) =+            return $ Done ctx { stack = VI32 (if v1 >= v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 IGeS) =+            return $ Done ctx { stack = VI32 (if asInt32 v1 >= asInt32 v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI32 v:rest) } I32Eqz =+            return $ Done ctx { stack = VI32 (if v == 0 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (IUnOp BS32 IClz) =+            return $ Done ctx { stack = VI32 (fromIntegral $ countLeadingZeros v) : rest }+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (IUnOp BS32 ICtz) =+            return $ Done ctx { stack = VI32 (fromIntegral $ countTrailingZeros v) : rest }+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (IUnOp BS32 IPopcnt) =+            return $ Done ctx { stack = VI32 (fromIntegral $ popCount v) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IAdd) =+            return $ Done ctx { stack = VI64 (v1 + v2) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 ISub) =+            return $ Done ctx { stack = VI64 (v1 - v2) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IMul) =+            return $ Done ctx { stack = VI64 (v1 * v2) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IDivU) =+            if v2 == 0+            then return Trap+            else return $ Done ctx { stack = VI64 (v1 `quot` v2) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IDivS) =+            if v2 == 0 || (v1 == 0x8000000000000000 && v2 == 0xFFFFFFFFFFFFFFFF)+            then return Trap+            else return $ Done ctx { stack = VI64 (asWord64 $ asInt64 v1 `quot` asInt64 v2) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IRemU) =+            if v2 == 0+            then return Trap+            else return $ Done ctx { stack = VI64 (v1 `rem` v2) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IRemS) =+            if v2 == 0+            then return Trap+            else return $ Done ctx { stack = VI64 (asWord64 $ asInt64 v1 `rem` asInt64 v2) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IAnd) =+            return $ Done ctx { stack = VI64 (v1 .&. v2) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IOr) =+            return $ Done ctx { stack = VI64 (v1 .|. v2) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IXor) =+            return $ Done ctx { stack = VI64 (v1 `xor` v2) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IShl) =+            return $ Done ctx { stack = VI64 (v1 `shiftL` (fromIntegral v2 `rem` 64)) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IShrU) =+            return $ Done ctx { stack = VI64 (v1 `shiftR` (fromIntegral v2 `rem` 64)) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IShrS) =+            return $ Done ctx { stack = VI64 (asWord64 $ asInt64 v1 `shiftR` (fromIntegral v2 `rem` 64)) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IRotl) =+            return $ Done ctx { stack = VI64 (v1 `rotateL` fromIntegral v2) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IRotr) =+            return $ Done ctx { stack = VI64 (v1 `rotateR` fromIntegral v2) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 IEq) =+            return $ Done ctx { stack = VI32 (if v1 == v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 INe) =+            return $ Done ctx { stack = VI32 (if v1 /= v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 ILtU) =+            return $ Done ctx { stack = VI32 (if v1 < v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 ILtS) =+            return $ Done ctx { stack = VI32 (if asInt64 v1 < asInt64 v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 IGtU) =+            return $ Done ctx { stack = VI32 (if v1 > v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 IGtS) =+            return $ Done ctx { stack = VI32 (if asInt64 v1 > asInt64 v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 ILeU) =+            return $ Done ctx { stack = VI32 (if v1 <= v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 ILeS) =+            return $ Done ctx { stack = VI32 (if asInt64 v1 <= asInt64 v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 IGeU) =+            return $ Done ctx { stack = VI32 (if v1 >= v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 IGeS) =+            return $ Done ctx { stack = VI32 (if asInt64 v1 >= asInt64 v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI64 v:rest) } I64Eqz =+            return $ Done ctx { stack = VI32 (if v == 0 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (IUnOp BS64 IClz) =+            return $ Done ctx { stack = VI64 (fromIntegral $ countLeadingZeros v) : rest }+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (IUnOp BS64 ICtz) =+            return $ Done ctx { stack = VI64 (fromIntegral $ countTrailingZeros v) : rest }+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (IUnOp BS64 IPopcnt) =+            return $ Done ctx { stack = VI64 (fromIntegral $ popCount v) : rest }+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (FUnOp BS32 FAbs) =+            return $ Done ctx { stack = VF32 (abs v) : rest }+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (FUnOp BS32 FNeg) =+            return $ Done ctx { stack = VF32 (negate v) : rest }+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (FUnOp BS32 FCeil) =+            return $ Done ctx { stack = VF32 (floatCeil v) : rest }+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (FUnOp BS32 FFloor) =+            return $ Done ctx { stack = VF32 (floatFloor v) : rest }+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (FUnOp BS32 FTrunc) =+            return $ Done ctx { stack = VF32 (floatTrunc v) : rest }+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (FUnOp BS32 FNearest) =+            return $ Done ctx { stack = VF32 (nearest v) : rest }+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (FUnOp BS32 FSqrt) =+            return $ Done ctx { stack = VF32 (sqrt v) : rest }+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (FUnOp BS64 FAbs) =+            return $ Done ctx { stack = VF64 (abs v) : rest }+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (FUnOp BS64 FNeg) =+            return $ Done ctx { stack = VF64 (negate v) : rest }+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (FUnOp BS64 FCeil) =+            return $ Done ctx { stack = VF64 (doubleCeil v) : rest }+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (FUnOp BS64 FFloor) =+            return $ Done ctx { stack = VF64 (doubleFloor v) : rest }+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (FUnOp BS64 FTrunc) =+            return $ Done ctx { stack = VF64 (doubleTrunc v) : rest }+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (FUnOp BS64 FNearest) =+            return $ Done ctx { stack = VF64 (nearest v) : rest }+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (FUnOp BS64 FSqrt) =+            return $ Done ctx { stack = VF64 (sqrt v) : rest }+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FBinOp BS32 FAdd) =+            return $ Done ctx { stack = VF32 (v1 + v2) : rest }+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FBinOp BS32 FSub) =+            return $ Done ctx { stack = VF32 (v1 - v2) : rest }+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FBinOp BS32 FMul) =+            return $ Done ctx { stack = VF32 (v1 * v2) : rest }+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FBinOp BS32 FDiv) =+            return $ Done ctx { stack = VF32 (v1 / v2) : rest }+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FBinOp BS32 FMin) =+            return $ Done ctx { stack = VF32 (zeroAwareMin v1 v2) : rest }+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FBinOp BS32 FMax) =+            return $ Done ctx { stack = VF32 (zeroAwareMax v1 v2) : rest }+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FBinOp BS32 FCopySign) =+            return $ Done ctx { stack = VF32 (copySign v1 v2) : rest }+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FBinOp BS64 FAdd) =+            return $ Done ctx { stack = VF64 (v1 + v2) : rest }+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FBinOp BS64 FSub) =+            return $ Done ctx { stack = VF64 (v1 - v2) : rest }+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FBinOp BS64 FMul) =+            return $ Done ctx { stack = VF64 (v1 * v2) : rest }+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FBinOp BS64 FDiv) =+            return $ Done ctx { stack = VF64 (v1 / v2) : rest }+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FBinOp BS64 FMin) =+            return $ Done ctx { stack = VF64 (zeroAwareMin v1 v2) : rest }+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FBinOp BS64 FMax) =+            return $ Done ctx { stack = VF64 (zeroAwareMax v1 v2) : rest }+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FBinOp BS64 FCopySign) =+            return $ Done ctx { stack = VF64 (copySign v1 v2) : rest }+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FRelOp BS32 FEq) =+            return $ Done ctx { stack = VI32 (if v1 == v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FRelOp BS32 FNe) =+            return $ Done ctx { stack = VI32 (if v1 /= v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FRelOp BS32 FLt) =+            return $ Done ctx { stack = VI32 (if v1 < v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FRelOp BS32 FGt) =+            return $ Done ctx { stack = VI32 (if v1 > v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FRelOp BS32 FLe) =+            return $ Done ctx { stack = VI32 (if v1 <= v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FRelOp BS32 FGe) =+            return $ Done ctx { stack = VI32 (if v1 >= v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FRelOp BS64 FEq) =+            return $ Done ctx { stack = VI32 (if v1 == v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FRelOp BS64 FNe) =+            return $ Done ctx { stack = VI32 (if v1 /= v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FRelOp BS64 FLt) =+            return $ Done ctx { stack = VI32 (if v1 < v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FRelOp BS64 FGt) =+            return $ Done ctx { stack = VI32 (if v1 > v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FRelOp BS64 FLe) =+            return $ Done ctx { stack = VI32 (if v1 <= v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FRelOp BS64 FGe) =+            return $ Done ctx { stack = VI32 (if v1 >= v2 then 1 else 0) : rest }+        step ctx@EvalCtx{ stack = (VI64 v:rest) } I32WrapI64 =+            return $ Done ctx { stack = VI32 (fromIntegral $ v .&. 0xFFFFFFFF) : rest }+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (ITruncFU BS32 BS32) =+            if isNaN v || isInfinite v || v >= 2^32 || v <= -1+            then return Trap+            else return $ Done ctx { stack = VI32 (truncate v) : rest }+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (ITruncFU BS32 BS64) =+            if isNaN v || isInfinite v || v >= 2^32 || v <= -1+            then return Trap+            else return $ Done ctx { stack = VI32 (truncate v) : rest }+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (ITruncFU BS64 BS32) =+            if isNaN v || isInfinite v || v >= 2^64 || v <= -1+            then return Trap+            else return $ Done ctx { stack = VI64 (truncate v) : rest }+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (ITruncFU BS64 BS64) =+            if isNaN v || isInfinite v || v >= 2^64 || v <= -1+            then return Trap+            else return $ Done ctx { stack = VI64 (truncate v) : rest }+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (ITruncFS BS32 BS32) =+            if isNaN v || isInfinite v || v >= 2^31 || v < -2^31+            then return Trap+            else return $ Done ctx { stack = VI32 (asWord32 $ truncate v) : rest }+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (ITruncFS BS32 BS64) =+            if isNaN v || isInfinite v || v >= 2^31 || v < -2^31+            then return Trap+            else return $ Done ctx { stack = VI32 (asWord32 $ truncate v) : rest }+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (ITruncFS BS64 BS32) =+            if isNaN v || isInfinite v || v >= 2^63 || v < -2^63+            then return Trap+            else return $ Done ctx { stack = VI64 (asWord64 $ truncate v) : rest }+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (ITruncFS BS64 BS64) =+            if isNaN v || isInfinite v || v >= 2^63 || v < -2^63+            then return Trap+            else return $ Done ctx { stack = VI64 (asWord64 $ truncate v) : rest }+        step ctx@EvalCtx{ stack = (VI32 v:rest) } I64ExtendUI32 =+            return $ Done ctx { stack = VI64 (fromIntegral v) : rest }+        step ctx@EvalCtx{ stack = (VI32 v:rest) } I64ExtendSI32 =+            return $ Done ctx { stack = VI64 (asWord64 $ fromIntegral $ asInt32 v) : rest }+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (FConvertIU BS32 BS32) =+            return $ Done ctx { stack = VF32 (realToFrac v) : rest }+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (FConvertIU BS32 BS64) =+            return $ Done ctx { stack = VF32 (realToFrac v) : rest }+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (FConvertIU BS64 BS32) =+            return $ Done ctx { stack = VF64 (realToFrac v) : rest }+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (FConvertIU BS64 BS64) =+            return $ Done ctx { stack = VF64 (realToFrac v) : rest }+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (FConvertIS BS32 BS32) =+            return $ Done ctx { stack = VF32 (realToFrac $ asInt32 v) : rest }+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (FConvertIS BS32 BS64) =+            return $ Done ctx { stack = VF32 (realToFrac $ asInt64 v) : rest }+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (FConvertIS BS64 BS32) =+            return $ Done ctx { stack = VF64 (realToFrac $ asInt32 v) : rest }+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (FConvertIS BS64 BS64) =+            return $ Done ctx { stack = VF64 (realToFrac $ asInt64 v) : rest }+        step ctx@EvalCtx{ stack = (VF64 v:rest) } F32DemoteF64 =+            return $ Done ctx { stack = VF32 (realToFrac v) : rest }+        step ctx@EvalCtx{ stack = (VF32 v:rest) } F64PromoteF32 =+            return $ Done ctx { stack = VF64 (realToFrac v) : rest }+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (IReinterpretF BS32) =+            return $ Done ctx { stack = VI32 (floatToWord v) : rest }+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (IReinterpretF BS64) =+            return $ Done ctx { stack = VI64 (doubleToWord v) : rest }+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (FReinterpretI BS32) =+            return $ Done ctx { stack = VF32 (wordToFloat v) : rest }+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (FReinterpretI BS64) =+            return $ Done ctx { stack = VF64 (wordToDouble v) : rest }+        step EvalCtx{ stack } instr = error $ "Error during evaluation of instruction: " ++ show instr ++ ". Stack " ++ show stack+eval _ _ HostInstance { funcType, hostCode } args = Just <$> hostCode args++invoke :: Store -> Address -> [Value] -> IO (Maybe [Value])+invoke st funcIdx = eval defaultBudget st $ funcInstances st ! funcIdx++invokeExport :: Store -> ModuleInstance -> TL.Text -> [Value] -> IO (Maybe [Value])+invokeExport st ModuleInstance { exports } name args =+    case Vector.find (\(ExportInstance n _) -> n == name) exports of+        Just (ExportInstance _ (ExternFunction addr)) -> invoke st addr args+        _ -> error $ "Function with name " ++ show name ++ " was not found in module's exports"++getGlobalValueByName :: Store -> ModuleInstance -> TL.Text -> IO Value+getGlobalValueByName store ModuleInstance { exports } name =+    case Vector.find (\(ExportInstance n _) -> n == name) exports of+        Just (ExportInstance _ (ExternGlobal addr)) ->+            let globalInst = globalInstances store ! addr in+            case globalInst of+                GIConst _ v -> return v+                GIMut _ ref -> readIORef ref+        _ -> error $ "Function with name " ++ show name ++ " was not found in module's exports"
+ src/Language/Wasm/Lexer.x view
@@ -0,0 +1,437 @@+{+{-# LANGUAGE FlexibleContexts #-}++module Language.Wasm.Lexer (+    Lexeme(..),+    Token(..),+    AlexPosn(..),+    scanner,+    asFloat,+    asDouble+) where++import qualified Data.ByteString.Lazy as LBS+import qualified Data.Char as Char+import qualified Data.ByteString.Lazy.UTF8 as LBSUtf8+import Control.Applicative ((<$>))+import Control.Monad (when)+import Numeric.IEEE (infinity, nan)+import Language.Wasm.FloatUtils (makeNaN, doubleToFloat)+import Data.Word (Word8)+import Data.List (isPrefixOf)+import Text.Read (readEither)++}++%wrapper "monadUserState-bytestring"++$digit     = [0-9]+$hexdigit  = [$digit a-f A-F]+$lower     = [a-z]+$upper     = [A-Z]+$alpha     = [$lower $upper]+$namepunct = [\! \# \$ \% \& \' \* \+ \- \. \/ \: \< \= \> \? \@ \∖ \^ \_ \` \| \~]+$idchar    = [$digit $alpha $namepunct]+$space     = [\  \x09 \x0A \x0D]+$linechar  = [^ \x09]+$sign      = [\+ \-]+$doublequote = \"++@keyword     = $lower $idchar*+@reserved    = $idchar++@linecomment = ";;" $linechar* \x0A+@startblockcomment = "(;"+@endblockcomment = ";)"+@num = $digit (\_? $digit+)*+@hexnum = $hexdigit (\_? $hexdigit+)*+@id = "$" $idchar++@floatfrac = @num "." (@num)?+@exp = [Ee] $sign? @num+@scientificint = @num @exp+@scientificfloat = @floatfrac @exp+@float = @floatfrac | @scientificint | @scientificfloat+@hexfloatfrac = "0x" @hexnum "." (@hexnum)?+@hexexp = [Pp] $sign? @num+@hexscientificint = "0x" @hexnum @hexexp+@hexscientificfloat = @hexfloatfrac @hexexp+@hexfloat = @hexfloatfrac | @hexscientificint | @hexscientificfloat+@nanhex = "nan:0x" @hexnum++tokens :-++<0> $space                                ;+<0> "nan"                                 { constToken $ TFloatLit $ BinRep (abs nan) }+<0> "+nan"                                { constToken $ TFloatLit $ BinRep (abs nan) }+<0> "-nan"                                { constToken $ TFloatLit $ BinRep nan }+<0> $sign? @nanhex                        { parseNanSigned }+<0> "inf"                                 { constToken $ TFloatLit $ BinRep inf }+<0> "+inf"                                { constToken $ TFloatLit $ BinRep inf }+<0> "-inf"                                { constToken $ TFloatLit $ BinRep minusInf }+<0> @keyword                              { tokenStr TKeyword }+<0> @linecomment                          ;+<0> @id                                   { tokenStr TId }+<0> "("                                   { constToken TOpenBracket }+<0> ")"                                   { constToken TCloseBracket }+<0> $sign? @num                           { parseDecimalSignedInt }+<0> $sign? "0x" @hexnum                   { parseHexalSignedInt }+<0> $sign? @float                         { parseDecFloat }+<0> $sign? @hexfloat                      { parseHexFloat }+<0, blockComment> @startblockcomment      { startBlockComment }+<blockComment> [.\n]                      ;+<blockComment> @endblockcomment           { endBlockComment }+<0> $doublequote                          { startStringLiteral }+<stringLiteral> \\ $hexdigit $hexdigit    { appendDoubleHexChar }+<stringLiteral> \\t                       { appendCharToStringLiteral '\x09' }+<stringLiteral> \\n                       { appendCharToStringLiteral '\x0A' }+<stringLiteral> \\r                       { appendCharToStringLiteral '\x0D' }+<stringLiteral> \\\"                      { appendCharToStringLiteral '\x22' }+<stringLiteral> \\\'                      { appendCharToStringLiteral '\x27' }+<stringLiteral> \\\\                      { appendCharToStringLiteral '\x5C' }+<stringLiteral> \\n\{ @hexnum \}          { appendHexEscapedChar }+<stringLiteral> $doublequote              { endStringLiteral }+<stringLiteral> . / {isAllowedStringChar} { appendFromHead }+<0> @reserved                             { tokenStr TReserved }++{++{- Lexem Helpers -}++defaultStartCode :: Int+defaultStartCode = 0++-- inner string literal character predicate+isAllowedStringChar :: user -> AlexInput -> Int -> AlexInput -> Bool+isAllowedStringChar _userState (_pos, _rest, inp, _) _len _nextInp =+    let Just (char, _) = LBSUtf8.decode inp in+    let code = Char.ord char in+    code >= 0x20 && code /= 0x7f && char /= '"' && char /= '\\'++minusNaN, inf, minusInf :: Double+minusNaN = negate nan+inf = infinity+minusInf = -infinity++parseSign :: (Num a) => LBS.ByteString -> ((a -> a), Int64)+parseSign str =+    let Just (ch, _) = LBSUtf8.decode str in+    case ch of+        '-' -> (negate, 1)+        '+' -> (abs, 1)+        otherwise -> (abs, 0)++{-# SPECIALIZE parseSign :: LBS.ByteString -> ((Integer -> Integer), Int64) #-}+{-# SPECIALIZE parseSign :: LBS.ByteString -> ((Double -> Double), Int64) #-}++parseHexalSignedInt :: AlexAction Lexeme+parseHexalSignedInt = token $ \(pos, _, s, _) len -> +    let (sign, slen) = parseSign s in+    let num = readHexFromPrefix (len - 2 - slen) $ LBSUtf8.drop (2 + slen) s in+    Lexeme (Just pos) $ TIntLit $ sign num++parseNanSigned :: AlexAction Lexeme+parseNanSigned = token $ \(pos, _, s, _) len -> +    let (sign, slen) = parseSign s in+    let num = readHexFromPrefix (len - 6 - slen) $ LBSUtf8.drop (6 + slen) s in+    Lexeme (Just pos) $ TFloatLit $ BinRep $ sign $ makeNaN $ fromIntegral num++parseDecimalSignedInt :: AlexAction Lexeme+parseDecimalSignedInt = token $ \(pos, _, s, _) len ->+    let (sign, slen) = parseSign s in+    let num = readDecFromPrefix (len - slen) $ LBSUtf8.drop slen s in+    Lexeme (Just pos) $ TIntLit $ sign num++parseDecFloat :: AlexAction Lexeme+parseDecFloat = token $ \(pos, _, s, _) len ->+    Lexeme (Just pos) $ TFloatLit $ DecRep $ filter (/= '_') $ takeChars len s++expAsInt :: String -> Int+expAsInt [] = 0+expAsInt ('+' : rest) = expAsInt rest+expAsInt ('-' : rest) = negate $ expAsInt rest+expAsInt str = read str++readDecFloat :: String -> Either String Float+readDecFloat str =+    let (sign, rest) = case str of+            ('+':rest) -> (abs, rest)+            ('-':rest) -> (negate, rest)+            rest -> (abs, rest)+    in+    let (val, exp) = splitBy (\c -> c == 'E' || c == 'e') rest in+    let (int, frac) = splitBy (== '.') val in+    let nullIfEmpty str = if null str then "0" else str in+    let expInt = expAsInt $ nullIfEmpty exp in+    if expInt > 38+    then Left $ "constant out of range"+    else fmap sign $ readEither $ nullIfEmpty int ++ "." ++ nullIfEmpty frac ++ "e" ++ nullIfEmpty exp++readDecDouble :: String -> Either String Double+readDecDouble str =+    let (sign, rest) = case str of+            ('+':rest) -> (abs, rest)+            ('-':rest) -> (negate, rest)+            rest -> (abs, rest)+    in+    let (val, exp) = splitBy (\c -> c == 'E' || c == 'e') rest in+    let (int, frac) = splitBy (== '.') val in+    let nullIfEmpty str = if null str then "0" else str in+    let expInt = expAsInt $ nullIfEmpty exp in+    if expInt > 308+    then Left $ "constant out of range"+    else fmap sign $ readEither $ nullIfEmpty int ++ "." ++ nullIfEmpty frac ++ "e" ++ nullIfEmpty exp++parseHexFloat :: AlexAction Lexeme+parseHexFloat = token $ \(pos, _, s, _) len ->+    Lexeme (Just pos) $ TFloatLit $ HexRep $ filter (/= '_') $ takeChars len s++readHexFloat :: Int -> String -> String -> Either String Double+readHexFloat expLimit restrictedPrefix str =+    let (sign, '0':'x':rest) = case str of+            ('+':rest) -> (abs, rest)+            ('-':rest) -> (negate, rest)+            rest -> (abs, rest)+    in+    let (val, exp) = splitBy (\c -> c == 'P' || c == 'p') rest in+    let (int, frac) = splitBy (== '.') val in+    let intLen = length int in+    let expInt = expAsInt exp in+    if int == "1" && ((restrictedPrefix `isPrefixOf` frac && expInt == expLimit - 1) || expInt >= expLimit)+    then Left $ "constant out of range"+    else+        let intVal = sum $ zipWith (\i c -> readHexFromChar c * (16 ^ (intLen - i))) [1..] int in+        Right $ sign $ (intVal + readHexFrac frac) * readHexExp exp+    where+        readHexExp :: String -> Double+        readHexExp [] = 1+        readHexExp ('+' : rest) = readHexExp rest+        readHexExp ('-' : rest) = 1 / readHexExp rest+        readHexExp expStr = 2 ^ read expStr++        readHexFrac :: String -> Double+        readHexFrac [] = 0+        readHexFrac val =+            let len = length val in+            sum $ zipWith (\i c -> readHexFromChar c / (16 ^ i)) [1..] val++asFloat :: FloatRep -> Either String Float+asFloat (BinRep d) = Right $ doubleToFloat d+asFloat (HexRep s) = doubleToFloat <$> readHexFloat 128 "ffffff" s+asFloat (DecRep s) = readDecFloat s++asDouble :: FloatRep -> Either String Double+asDouble (BinRep d) = Right d+asDouble (HexRep s) = readHexFloat 1024 "fffffffffffff8" s+asDouble (DecRep s) = readDecDouble s++startBlockComment :: AlexAction Lexeme+startBlockComment _inp _len = do+    depth <- getLexerCommentDepth+    if depth <= 0+    then do+        alexSetStartCode blockComment+        setLexerCommentDepth 1+    else+        setLexerCommentDepth (depth + 1)+    alexMonadScan++endBlockComment :: AlexAction Lexeme+endBlockComment _inp _len = do+    depth <- getLexerCommentDepth+    if depth == 1+    then do+        alexSetStartCode defaultStartCode+        setLexerCommentDepth 0+    else+        setLexerCommentDepth (depth - 1)+    alexMonadScan++startStringLiteral :: AlexAction Lexeme+startStringLiteral _inp _len = do+    alexSetStartCode stringLiteral+    setLexerStringFlag True+    alexMonadScan++appendCharToStringLiteral :: Char -> AlexAction Lexeme+appendCharToStringLiteral chr _inp _len = do+    addCharToLexerStringValue chr+    alexMonadScan++appendFromHead :: AlexAction Lexeme+appendFromHead (_pos, _rest, inp, _) _len = do+    let Just (first, _) = LBSUtf8.decode inp+    addCharToLexerStringValue first+    alexMonadScan++appendDoubleHexChar :: AlexAction Lexeme+appendDoubleHexChar (_pos, _rest, inp, _) _len = do+    addCharCodeToLexerStringValue $ fromIntegral $ readHexFromPrefix 2 $ LBSUtf8.drop 1 inp+    alexMonadScan++-- TODO: add a predicate with code ranges check+-- if 𝑛 < 0xD800 ∨ 0xE000 ≤ 𝑛 < 0x110000+appendHexEscapedChar :: AlexAction Lexeme+appendHexEscapedChar (pos, _rest, inp, _) len = do+    let code = readHexFromPrefix (len - 3) $ LBSUtf8.drop 2 inp+    if code < 0xD800 || (code >= 0xE000 && code < 0x110000)+    then do+        addCharToLexerStringValue $ Char.chr $ fromIntegral code+        alexMonadScan+    else+        alexError $ "Character code should be in valid UTF range (code < 0xD800 || (code >= 0xE000 && code < 0x110000)): " ++ show pos++endStringLiteral :: AlexAction Lexeme+endStringLiteral (pos, _, _inp, _) _len = do+    alexSetStartCode defaultStartCode+    setLexerStringFlag False+    str <- LBS.pack . reverse <$> getLexerStringValue+    setLexerStringValue []+    return $ Lexeme (Just pos) $ TStringLit str++tokenStr :: (LBS.ByteString -> Token) -> AlexAction Lexeme+tokenStr f = token $ \(pos, _, s, _) len -> (Lexeme (Just pos) $ f $ LBS.take len s)++constToken :: Token -> AlexAction Lexeme+constToken tok = token $ \(pos, _, _, _) _len -> (Lexeme (Just pos) tok)++{- End Lexem Helpers -}++data FloatRep+    = BinRep Double+    | DecRep String+    | HexRep String+    deriving (Show, Eq)++data Token = TKeyword LBS.ByteString+    | TIntLit Integer+    | TFloatLit FloatRep+    | TStringLit LBS.ByteString+    | TId LBS.ByteString+    | TOpenBracket+    | TCloseBracket+    | TReserved LBS.ByteString+    | EOF+    deriving (Show, Eq)++data Lexeme = Lexeme { pos :: Maybe AlexPosn, tok :: Token } deriving (Show, Eq)++data AlexUserState = AlexUserState {+        lexerCommentDepth :: Int,+        lexerStringValue  :: [Word8],+        lexerIsString     :: Bool+    }++alexInitUserState :: AlexUserState+alexInitUserState = AlexUserState {+        lexerCommentDepth  = 0,+        lexerIsString      = False,+        lexerStringValue   = []+    }++getLexerCommentDepth :: Alex Int+getLexerCommentDepth = Alex $ \s@AlexState{alex_ust=ust} ->+    Right (s, lexerCommentDepth ust)++setLexerCommentDepth :: Int -> Alex ()+setLexerCommentDepth ss = Alex $ \s ->+    Right (s{ alex_ust=(alex_ust s){ lexerCommentDepth = ss } }, ())++getLexerStringFlag :: Alex Bool+getLexerStringFlag = Alex $ \s@AlexState{alex_ust=ust} -> Right (s, lexerIsString ust)++setLexerStringFlag :: Bool -> Alex ()+setLexerStringFlag isString = Alex $ \s ->+    Right (s{ alex_ust=(alex_ust s){ lexerIsString = isString } }, ())++getLexerStringValue :: Alex [Word8]+getLexerStringValue = Alex $ \s@AlexState{alex_ust=ust} -> Right (s, lexerStringValue ust)++setLexerStringValue :: [Word8] -> Alex ()+setLexerStringValue ss = Alex $ \s ->+    Right (s{ alex_ust=(alex_ust s){ lexerStringValue = ss } }, ())++addCharToLexerStringValue :: Char -> Alex ()+addCharToLexerStringValue c = Alex $ \s ->+    let ust = alex_ust s in+    Right (s{ alex_ust = ust{ lexerStringValue = (reverse $ LBS.unpack $ LBSUtf8.fromString [c]) ++ lexerStringValue ust } }, ())++addCharCodeToLexerStringValue :: Word8 -> Alex ()+addCharCodeToLexerStringValue c = Alex $ \s ->+    let ust = alex_ust s in+    Right (s{ alex_ust = ust{ lexerStringValue = c : lexerStringValue ust } }, ())++alexEOF = return $ Lexeme Nothing EOF++takeChars :: Int64 -> LBS.ByteString -> String+takeChars n str = reverse $ go n str []+    where+        go :: Int64 -> LBS.ByteString -> String -> String+        go 0 _ acc = acc+        go n str acc = case LBSUtf8.uncons str of+            Just (c, rest) -> go (n - 1) rest (c : acc)+            Nothing -> acc++readHexFromChar :: (Num a) => Char -> a+readHexFromChar chr =+    case chr of +        '0' -> 0 +        '1' -> 1 +        '2' -> 2 +        '3' -> 3 +        '4' -> 4 +        '5' -> 5 +        '6' -> 6 +        '7' -> 7 +        '8' -> 8 +        '9' -> 9 +        'A' -> 10 +        'B' -> 11 +        'C' -> 12 +        'D' -> 13 +        'E' -> 14 +        'F' -> 15+        'a' -> 10 +        'b' -> 11 +        'c' -> 12 +        'd' -> 13 +        'e' -> 14 +        'f' -> 15+        otherwise -> 0++{-# SPECIALIZE readHexFromChar :: Char -> Integer #-}+{-# SPECIALIZE readHexFromChar :: Char -> Double #-}++readFromPrefix :: Int -> Int64 -> LBS.ByteString -> Integer+readFromPrefix base n bstr+    | base <= 16 =+        let str = filter (/= '_') $ takeChars n bstr in+        let len = length str in+        sum $ zipWith (\i c -> readHexFromChar c * (fromIntegral base ^ fromIntegral (len - i))) [1..] str+    | otherwise = error "base has to be less than or equal 16"++readHexFromPrefix :: Int64 -> LBS.ByteString -> Integer+readHexFromPrefix = readFromPrefix 16++readDecFromPrefix :: Int64 -> LBS.ByteString -> Integer+readDecFromPrefix = readFromPrefix 10++splitBy :: (Char -> Bool) -> String -> (String, String)+splitBy pred str =+    case break pred str of+        (left, (_ : rest)) -> (left, rest)+        res -> res++scanner :: LBS.ByteString -> Either String [Lexeme]+scanner str = runAlex str loop+    where+        loop :: Alex [Lexeme]+        loop = do+            lex <- alexMonadScan+            case lex of+                Lexeme _ EOF -> do+                    strFlag <- getLexerStringFlag+                    when strFlag $ alexError "End of file reached before string literal end"+                    commentDepth <- getLexerCommentDepth+                    when (commentDepth > 0) $ alexError "End of file reached before block comment end"+                    return [lex]+                otherwise -> (lex :) <$> loop+}
+ src/Language/Wasm/Parser.y view
@@ -0,0 +1,1943 @@+{+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ViewPatterns #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveAnyClass #-}++module Language.Wasm.Parser (+    parseModule,+    parseModuleFields,+    parseScript,+    desugarize,+    ModuleField(..),+    DataSegment(..),+    ElemSegment(..),+    StartFunction(..),+    Export(..),+    ExportDesc(..),+    Table(..),+    Memory(..),+    Global(..),+    Function(..),+    LocalType(..),+    Import(..),+    ImportDesc(..),+    Instruction(..),+    TypeUse(..),+    TypeDef(..),+    PlainInstr(..),+    Index(..),+    Ident(..),+    ParamType(..),+    FuncType(..),+    -- script+    Script,+    ModuleDef(..),+    Command(..),+    Action(..),+    Assertion(..),+    Meta(..)+) where++import Language.Wasm.Structure (+        MemArg(..),+        IUnOp(..),+        IBinOp(..),+        IRelOp(..),+        FUnOp(..),+        FBinOp(..),+        FRelOp(..),+        BitSize(..),+        TableType(..),+        ElemType(..),+        Limit(..),+        GlobalType(..),+        ValueType(..)+    )++import qualified Language.Wasm.Structure as S++import qualified Data.Text as T+import qualified Data.Text.Lazy as TL+import qualified Data.Text.Lazy.Encoding as TLEncoding+import qualified Data.Text.Lazy.Read as TLRead++import qualified Data.ByteString.Lazy as LBS+import qualified Data.ByteString.Lazy.Char8 as LBSChar8+import Data.Maybe (fromMaybe, fromJust, isNothing)+import Data.List (foldl', findIndex, find)+import Control.Monad (guard, foldM)++import Numeric.Natural (Natural)+import Data.Word (Word32, Word64)+import Data.Bits ((.|.))+import Numeric.IEEE (infinity, nan, maxFinite)+import Language.Wasm.FloatUtils (doubleToFloat)+import Control.DeepSeq (NFData)+import GHC.Generics (Generic)++import Language.Wasm.Lexer (+        Token (+            TKeyword,+            TIntLit,+            TFloatLit,+            TStringLit,+            TId,+            TOpenBracket,+            TCloseBracket,+            TReserved,+            EOF+        ),+        Lexeme(..),+        AlexPosn(..),+        asFloat,+        asDouble+    )++}++%name parseModule mod+%name parseModuleFields modAsFields+%name parseScript script+%monad { Either String }+%tokentype { Lexeme }++%token++'('                   { Lexeme _ TOpenBracket }+')'                   { Lexeme _ TCloseBracket }+'func'                { Lexeme _ (TKeyword "func") }+'param'               { Lexeme _ (TKeyword "param") }+'result'              { Lexeme _ (TKeyword "result") }+'i32'                 { Lexeme _ (TKeyword "i32") }+'i64'                 { Lexeme _ (TKeyword "i64") }+'f32'                 { Lexeme _ (TKeyword "f32") }+'f64'                 { Lexeme _ (TKeyword "f64") }+'mut'                 { Lexeme _ (TKeyword "mut") }+'anyfunc'             { Lexeme _ (TKeyword "anyfunc") }+'type'                { Lexeme _ (TKeyword "type") }+'unreachable'         { Lexeme _ (TKeyword "unreachable") }+'nop'                 { Lexeme _ (TKeyword "nop") }+'br'                  { Lexeme _ (TKeyword "br") }+'br_if'               { Lexeme _ (TKeyword "br_if") }+'br_table'            { Lexeme _ (TKeyword "br_table") }+'return'              { Lexeme _ (TKeyword "return") }+'call'                { Lexeme _ (TKeyword "call") }+'call_indirect'       { Lexeme _ (TKeyword "call_indirect") }+'drop'                { Lexeme _ (TKeyword "drop") }+'select'              { Lexeme _ (TKeyword "select") }+'get_local'           { Lexeme _ (TKeyword "get_local") }+'set_local'           { Lexeme _ (TKeyword "set_local") }+'tee_local'           { Lexeme _ (TKeyword "tee_local") }+'get_global'          { Lexeme _ (TKeyword "get_global") }+'set_global'          { Lexeme _ (TKeyword "set_global") }+'i32.load'            { Lexeme _ (TKeyword "i32.load") }+'i64.load'            { Lexeme _ (TKeyword "i64.load") }+'f32.load'            { Lexeme _ (TKeyword "f32.load") }+'f64.load'            { Lexeme _ (TKeyword "f64.load") }+'i32.load8_s'         { Lexeme _ (TKeyword "i32.load8_s") }+'i32.load8_u'         { Lexeme _ (TKeyword "i32.load8_u") }+'i32.load16_s'        { Lexeme _ (TKeyword "i32.load16_s") }+'i32.load16_u'        { Lexeme _ (TKeyword "i32.load16_u") }+'i64.load8_s'         { Lexeme _ (TKeyword "i64.load8_s") }+'i64.load8_u'         { Lexeme _ (TKeyword "i64.load8_u") }+'i64.load16_s'        { Lexeme _ (TKeyword "i64.load16_s") }+'i64.load16_u'        { Lexeme _ (TKeyword "i64.load16_u") }+'i64.load32_s'        { Lexeme _ (TKeyword "i64.load32_s") }+'i64.load32_u'        { Lexeme _ (TKeyword "i64.load32_u") }+'i32.store'           { Lexeme _ (TKeyword "i32.store") }+'i64.store'           { Lexeme _ (TKeyword "i64.store") }+'f32.store'           { Lexeme _ (TKeyword "f32.store") }+'f64.store'           { Lexeme _ (TKeyword "f64.store") }+'i32.store8'          { Lexeme _ (TKeyword "i32.store8") }+'i32.store16'         { Lexeme _ (TKeyword "i32.store16") }+'i64.store8'          { Lexeme _ (TKeyword "i64.store8") }+'i64.store16'         { Lexeme _ (TKeyword "i64.store16") }+'i64.store32'         { Lexeme _ (TKeyword "i64.store32") }+'current_memory'      { Lexeme _ (TKeyword "current_memory") }+'grow_memory'         { Lexeme _ (TKeyword "grow_memory") }+'memory.size'         { Lexeme _ (TKeyword "memory.size") }+'memory.grow'         { Lexeme _ (TKeyword "memory.grow") }+'i32.const'           { Lexeme _ (TKeyword "i32.const") }+'i64.const'           { Lexeme _ (TKeyword "i64.const") }+'f32.const'           { Lexeme _ (TKeyword "f32.const") }+'f64.const'           { Lexeme _ (TKeyword "f64.const") }+'i32.clz'             { Lexeme _ (TKeyword "i32.clz") }+'i32.ctz'             { Lexeme _ (TKeyword "i32.ctz") }+'i32.popcnt'          { Lexeme _ (TKeyword "i32.popcnt") }+'i32.add'             { Lexeme _ (TKeyword "i32.add") }+'i32.sub'             { Lexeme _ (TKeyword "i32.sub") }+'i32.mul'             { Lexeme _ (TKeyword "i32.mul") }+'i32.div_s'           { Lexeme _ (TKeyword "i32.div_s") }+'i32.div_u'           { Lexeme _ (TKeyword "i32.div_u") }+'i32.rem_s'           { Lexeme _ (TKeyword "i32.rem_s") }+'i32.rem_u'           { Lexeme _ (TKeyword "i32.rem_u") }+'i32.and'             { Lexeme _ (TKeyword "i32.and") }+'i32.or'              { Lexeme _ (TKeyword "i32.or") }+'i32.xor'             { Lexeme _ (TKeyword "i32.xor") }+'i32.shl'             { Lexeme _ (TKeyword "i32.shl") }+'i32.shr_s'           { Lexeme _ (TKeyword "i32.shr_s") }+'i32.shr_u'           { Lexeme _ (TKeyword "i32.shr_u") }+'i32.rotl'            { Lexeme _ (TKeyword "i32.rotl") }+'i32.rotr'            { Lexeme _ (TKeyword "i32.rotr") }+'i64.clz'             { Lexeme _ (TKeyword "i64.clz") }+'i64.ctz'             { Lexeme _ (TKeyword "i64.ctz") }+'i64.popcnt'          { Lexeme _ (TKeyword "i64.popcnt") }+'i64.add'             { Lexeme _ (TKeyword "i64.add") }+'i64.sub'             { Lexeme _ (TKeyword "i64.sub") }+'i64.mul'             { Lexeme _ (TKeyword "i64.mul") }+'i64.div_s'           { Lexeme _ (TKeyword "i64.div_s") }+'i64.div_u'           { Lexeme _ (TKeyword "i64.div_u") }+'i64.rem_s'           { Lexeme _ (TKeyword "i64.rem_s") }+'i64.rem_u'           { Lexeme _ (TKeyword "i64.rem_u") }+'i64.and'             { Lexeme _ (TKeyword "i64.and") }+'i64.or'              { Lexeme _ (TKeyword "i64.or") }+'i64.xor'             { Lexeme _ (TKeyword "i64.xor") }+'i64.shl'             { Lexeme _ (TKeyword "i64.shl") }+'i64.shr_s'           { Lexeme _ (TKeyword "i64.shr_s") }+'i64.shr_u'           { Lexeme _ (TKeyword "i64.shr_u") }+'i64.rotl'            { Lexeme _ (TKeyword "i64.rotl") }+'i64.rotr'            { Lexeme _ (TKeyword "i64.rotr") }+'f32.abs'             { Lexeme _ (TKeyword "f32.abs") }+'f32.neg'             { Lexeme _ (TKeyword "f32.neg") }+'f32.ceil'            { Lexeme _ (TKeyword "f32.ceil") }+'f32.floor'           { Lexeme _ (TKeyword "f32.floor") }+'f32.trunc'           { Lexeme _ (TKeyword "f32.trunc") }+'f32.nearest'         { Lexeme _ (TKeyword "f32.nearest") }+'f32.sqrt'            { Lexeme _ (TKeyword "f32.sqrt") }+'f32.add'             { Lexeme _ (TKeyword "f32.add") }+'f32.sub'             { Lexeme _ (TKeyword "f32.sub") }+'f32.mul'             { Lexeme _ (TKeyword "f32.mul") }+'f32.div'             { Lexeme _ (TKeyword "f32.div") }+'f32.min'             { Lexeme _ (TKeyword "f32.min") }+'f32.max'             { Lexeme _ (TKeyword "f32.max") }+'f32.copysign'        { Lexeme _ (TKeyword "f32.copysign") }+'f64.abs'             { Lexeme _ (TKeyword "f64.abs") }+'f64.neg'             { Lexeme _ (TKeyword "f64.neg") }+'f64.ceil'            { Lexeme _ (TKeyword "f64.ceil") }+'f64.floor'           { Lexeme _ (TKeyword "f64.floor") }+'f64.trunc'           { Lexeme _ (TKeyword "f64.trunc") }+'f64.nearest'         { Lexeme _ (TKeyword "f64.nearest") }+'f64.sqrt'            { Lexeme _ (TKeyword "f64.sqrt") }+'f64.add'             { Lexeme _ (TKeyword "f64.add") }+'f64.sub'             { Lexeme _ (TKeyword "f64.sub") }+'f64.mul'             { Lexeme _ (TKeyword "f64.mul") }+'f64.div'             { Lexeme _ (TKeyword "f64.div") }+'f64.min'             { Lexeme _ (TKeyword "f64.min") }+'f64.max'             { Lexeme _ (TKeyword "f64.max") }+'f64.copysign'        { Lexeme _ (TKeyword "f64.copysign") }+'i32.eqz'             { Lexeme _ (TKeyword "i32.eqz") }+'i32.eq'              { Lexeme _ (TKeyword "i32.eq") }+'i32.ne'              { Lexeme _ (TKeyword "i32.ne") }+'i32.lt_s'            { Lexeme _ (TKeyword "i32.lt_s") }+'i32.lt_u'            { Lexeme _ (TKeyword "i32.lt_u") }+'i32.gt_s'            { Lexeme _ (TKeyword "i32.gt_s") }+'i32.gt_u'            { Lexeme _ (TKeyword "i32.gt_u") }+'i32.le_s'            { Lexeme _ (TKeyword "i32.le_s") }+'i32.le_u'            { Lexeme _ (TKeyword "i32.le_u") }+'i32.ge_s'            { Lexeme _ (TKeyword "i32.ge_s") }+'i32.ge_u'            { Lexeme _ (TKeyword "i32.ge_u") }+'i64.eqz'             { Lexeme _ (TKeyword "i64.eqz") }+'i64.eq'              { Lexeme _ (TKeyword "i64.eq") }+'i64.ne'              { Lexeme _ (TKeyword "i64.ne") }+'i64.lt_s'            { Lexeme _ (TKeyword "i64.lt_s") }+'i64.lt_u'            { Lexeme _ (TKeyword "i64.lt_u") }+'i64.gt_s'            { Lexeme _ (TKeyword "i64.gt_s") }+'i64.gt_u'            { Lexeme _ (TKeyword "i64.gt_u") }+'i64.le_s'            { Lexeme _ (TKeyword "i64.le_s") }+'i64.le_u'            { Lexeme _ (TKeyword "i64.le_u") }+'i64.ge_s'            { Lexeme _ (TKeyword "i64.ge_s") }+'i64.ge_u'            { Lexeme _ (TKeyword "i64.ge_u") }+'f32.eq'              { Lexeme _ (TKeyword "f32.eq") }+'f32.ne'              { Lexeme _ (TKeyword "f32.ne") }+'f32.lt'              { Lexeme _ (TKeyword "f32.lt") }+'f32.gt'              { Lexeme _ (TKeyword "f32.gt") }+'f32.le'              { Lexeme _ (TKeyword "f32.le") }+'f32.ge'              { Lexeme _ (TKeyword "f32.ge") }+'f64.eq'              { Lexeme _ (TKeyword "f64.eq") }+'f64.ne'              { Lexeme _ (TKeyword "f64.ne") }+'f64.lt'              { Lexeme _ (TKeyword "f64.lt") }+'f64.gt'              { Lexeme _ (TKeyword "f64.gt") }+'f64.le'              { Lexeme _ (TKeyword "f64.le") }+'f64.ge'              { Lexeme _ (TKeyword "f64.ge") }+'i32.wrap/i64'        { Lexeme _ (TKeyword "i32.wrap/i64") }+'i32.trunc_s/f32'     { Lexeme _ (TKeyword "i32.trunc_s/f32") }+'i32.trunc_u/f32'     { Lexeme _ (TKeyword "i32.trunc_u/f32") }+'i32.trunc_s/f64'     { Lexeme _ (TKeyword "i32.trunc_s/f64") }+'i32.trunc_u/f64'     { Lexeme _ (TKeyword "i32.trunc_u/f64") }+'i64.extend_s/i32'    { Lexeme _ (TKeyword "i64.extend_s/i32") }+'i64.extend_u/i32'    { Lexeme _ (TKeyword "i64.extend_u/i32") }+'i64.trunc_s/f32'     { Lexeme _ (TKeyword "i64.trunc_s/f32") }+'i64.trunc_u/f32'     { Lexeme _ (TKeyword "i64.trunc_u/f32") }+'i64.trunc_s/f64'     { Lexeme _ (TKeyword "i64.trunc_s/f64") }+'i64.trunc_u/f64'     { Lexeme _ (TKeyword "i64.trunc_u/f64") }+'f32.convert_s/i32'   { Lexeme _ (TKeyword "f32.convert_s/i32") }+'f32.convert_u/i32'   { Lexeme _ (TKeyword "f32.convert_u/i32") }+'f32.convert_s/i64'   { Lexeme _ (TKeyword "f32.convert_s/i64") }+'f32.convert_u/i64'   { Lexeme _ (TKeyword "f32.convert_u/i64") }+'f32.demote/f64'      { Lexeme _ (TKeyword "f32.demote/f64") }+'f64.convert_s/i32'   { Lexeme _ (TKeyword "f64.convert_s/i32") }+'f64.convert_u/i32'   { Lexeme _ (TKeyword "f64.convert_u/i32") }+'f64.convert_s/i64'   { Lexeme _ (TKeyword "f64.convert_s/i64") }+'f64.convert_u/i64'   { Lexeme _ (TKeyword "f64.convert_u/i64") }+'f64.promote/f32'     { Lexeme _ (TKeyword "f64.promote/f32") }+'i32.reinterpret/f32' { Lexeme _ (TKeyword "i32.reinterpret/f32") }+'i64.reinterpret/f64' { Lexeme _ (TKeyword "i64.reinterpret/f64") }+'f32.reinterpret/i32' { Lexeme _ (TKeyword "f32.reinterpret/i32") }+'f64.reinterpret/i64' { Lexeme _ (TKeyword "f64.reinterpret/i64") }+'block'               { Lexeme _ (TKeyword "block") }+'loop'                { Lexeme _ (TKeyword "loop") }+'if'                  { Lexeme _ (TKeyword "if") }+'else'                { Lexeme _ (TKeyword "else") }+'end'                 { Lexeme _ (TKeyword "end") }+'then'                { Lexeme _ (TKeyword "then") }+'table'               { Lexeme _ (TKeyword "table") }+'memory'              { Lexeme _ (TKeyword "memory") }+'global'              { Lexeme _ (TKeyword "global") }+'import'              { Lexeme _ (TKeyword "import") }+'export'              { Lexeme _ (TKeyword "export") }+'local'               { Lexeme _ (TKeyword "local") }+'elem'                { Lexeme _ (TKeyword "elem") }+'data'                { Lexeme _ (TKeyword "data") }+'offset'              { Lexeme _ (TKeyword "offset") }+'start'               { Lexeme _ (TKeyword "start") }+'module'              { Lexeme _ (TKeyword "module") }+-- script extension+'binary'              { Lexeme _ (TKeyword "binary") }+'quote'               { Lexeme _ (TKeyword "quote") }+'register'            { Lexeme _ (TKeyword "register") }+'invoke'              { Lexeme _ (TKeyword "invoke") }+'get'                 { Lexeme _ (TKeyword "get") }+'assert_return'       { Lexeme _ (TKeyword "assert_return") }+'assert_return_canonical_nan' { Lexeme _ (TKeyword "assert_return_canonical_nan") }+'assert_return_arithmetic_nan' { Lexeme _ (TKeyword "assert_return_arithmetic_nan") }+'assert_trap'         { Lexeme _ (TKeyword "assert_trap") }+'assert_malformed'    { Lexeme _ (TKeyword "assert_malformed") }+'assert_invalid'      { Lexeme _ (TKeyword "assert_invalid") }+'assert_unlinkable'   { Lexeme _ (TKeyword "assert_unlinkable") }+'assert_exhaustion'   { Lexeme _ (TKeyword "assert_exhaustion") }+'script'              { Lexeme _ (TKeyword "script") }+'input'               { Lexeme _ (TKeyword "input") }+'output'              { Lexeme _ (TKeyword "output") }+-- script extension end+id                    { Lexeme _ (TId $$) }+int                   { Lexeme _ (TIntLit $$) }+f64                   { Lexeme _ (TFloatLit $$) }+offset                { Lexeme _ (TKeyword (asOffset -> Just $$)) }+align                 { Lexeme _ (TKeyword (asAlign -> Just $$)) }+str                   { Lexeme _ (TStringLit $$) }+EOF                   { Lexeme _ EOF }++%%++string :: { TL.Text }+    : str {%+        case TLEncoding.decodeUtf8' $1 of+            Right t -> Right t+            Left err -> Left "invalid utf8 string"+    }++name :: { TL.Text }+    : string { $1 }++ident :: { Ident }+    : id { Ident (TLEncoding.decodeUtf8 $1) }++valtype :: { ValueType }+    : 'i32' { I32 }+    | 'i64' { I64 }+    | 'f32' { F32 }+    | 'f64' { F64 }++index :: { Index }+    : u32 { Index $1 }+    | ident { Named $1 }++int32 :: { Integer }+    : int {%+        if $1 >= -(2^31) && $1 < 2^32+        then Right $1+        else Left ("Int literal value is out of signed int32 boundaries: " ++ show $1)+    }++u32 :: { Natural }+    : int {%+        if $1 >= 0 && $1 < 2^32+        then Right (fromIntegral $1)+        else Left ("Int literal value is out of unsigned int32 boundaries: " ++ show $1)+    }++int64 :: { Integer }+    : int {%+        if $1 >= -(2^63) && $1 < 2^64+        then Right $1+        else Left ("Int literal value is out of signed int64 boundaries: " ++ show $1)+    }++float32 :: { Float }+    : int {%+        let maxInt = 340282356779733623858607532500980858880 in+        if $1 <= maxInt && $1 >= -maxInt+        then return $ fromIntegral $1+        else Left "constant out of range"+    }+    | f64 {% asFloat $1 }++float64 :: { Double }+    : int {%+        let maxInt = round (maxFinite :: Double) in+        if $1 <= maxInt && $1 >= -maxInt+        then return $ fromIntegral $1+        else Left "constant out of range"+    }+    | f64 {% asDouble $1 }++plaininstr :: { PlainInstr }+    -- control instructions+    : 'unreachable'                  { Unreachable }+    | 'nop'                          { Nop }+    | 'br' index                     { Br $2 }+    | 'br_if' index                  { BrIf $2 }+    | 'br_table' rev_list1(index)    { BrTable (reverse $ tail $2) (head $2) }+    | 'return'                       { Return }+    | 'call' index                   { Call $2 }+    | 'drop'                         { Drop }+    | 'select'                       { Select }+    -- variable instructions+    | 'get_local' index              { GetLocal $2 }+    | 'set_local' index              { SetLocal $2 }+    | 'tee_local' index              { TeeLocal $2 }+    | 'get_global' index             { GetGlobal $2 }+    | 'set_global' index             { SetGlobal $2 }+    -- memory instructions+    | 'i32.load' memarg4             { I32Load $2 }+    | 'i64.load' memarg8             { I64Load $2 }+    | 'f32.load' memarg4             { F32Load $2 }+    | 'f64.load' memarg8             { F64Load $2 }+    | 'i32.load8_s' memarg1          { I32Load8S $2 }+    | 'i32.load8_u' memarg1          { I32Load8U $2 }+    | 'i32.load16_s' memarg2         { I32Load16S $2 }+    | 'i32.load16_u' memarg2         { I32Load16U $2 }+    | 'i64.load8_s' memarg1          { I64Load8S $2 }+    | 'i64.load8_u' memarg1          { I64Load8U $2 }+    | 'i64.load16_s' memarg2         { I64Load16S $2 }+    | 'i64.load16_u' memarg2         { I64Load16U $2 }+    | 'i64.load32_s' memarg4         { I64Load32S $2 }+    | 'i64.load32_u' memarg4         { I64Load32U $2 }+    | 'i32.store' memarg4            { I32Store $2 }+    | 'i64.store' memarg8            { I64Store $2 }+    | 'f32.store' memarg4            { F32Store $2 }+    | 'f64.store' memarg8            { F64Store $2 }+    | 'i32.store8' memarg1           { I32Store8 $2 }+    | 'i32.store16' memarg2          { I32Store16 $2 }+    | 'i64.store8' memarg1           { I64Store8 $2 }+    | 'i64.store16' memarg2          { I64Store16 $2 }+    | 'i64.store32' memarg4          { I64Store32 $2 }+    | 'current_memory'               { CurrentMemory }+    | 'grow_memory'                  { GrowMemory }+    | 'memory.size'                  { CurrentMemory }+    | 'memory.grow'                  { GrowMemory }+    -- numeric instructions+    | 'i32.const' int32              { I32Const $2 }+    | 'i64.const' int64              { I64Const $2 }+    | 'f32.const' float32            { F32Const $2 }+    | 'f64.const' float64            { F64Const $2 }+    | 'i32.clz'                      { IUnOp BS32 IClz }+    | 'i32.ctz'                      { IUnOp BS32 ICtz }+    | 'i32.popcnt'                   { IUnOp BS32 IPopcnt }+    | 'i32.add'                      { IBinOp BS32 IAdd }+    | 'i32.sub'                      { IBinOp BS32 ISub }+    | 'i32.mul'                      { IBinOp BS32 IMul }+    | 'i32.div_s'                    { IBinOp BS32 IDivS }+    | 'i32.div_u'                    { IBinOp BS32 IDivU }+    | 'i32.rem_s'                    { IBinOp BS32 IRemS }+    | 'i32.rem_u'                    { IBinOp BS32 IRemU }+    | 'i32.and'                      { IBinOp BS32 IAnd }+    | 'i32.or'                       { IBinOp BS32 IOr }+    | 'i32.xor'                      { IBinOp BS32 IXor }+    | 'i32.shl'                      { IBinOp BS32 IShl }+    | 'i32.shr_s'                    { IBinOp BS32 IShrS }+    | 'i32.shr_u'                    { IBinOp BS32 IShrU }+    | 'i32.rotl'                     { IBinOp BS32 IRotl }+    | 'i32.rotr'                     { IBinOp BS32 IRotr }+    | 'i64.clz'                      { IUnOp BS64 IClz }+    | 'i64.ctz'                      { IUnOp BS64 ICtz }+    | 'i64.popcnt'                   { IUnOp BS64 IPopcnt }+    | 'i64.add'                      { IBinOp BS64 IAdd }+    | 'i64.sub'                      { IBinOp BS64 ISub }+    | 'i64.mul'                      { IBinOp BS64 IMul }+    | 'i64.div_s'                    { IBinOp BS64 IDivS }+    | 'i64.div_u'                    { IBinOp BS64 IDivU }+    | 'i64.rem_s'                    { IBinOp BS64 IRemS }+    | 'i64.rem_u'                    { IBinOp BS64 IRemU }+    | 'i64.and'                      { IBinOp BS64 IAnd }+    | 'i64.or'                       { IBinOp BS64 IOr }+    | 'i64.xor'                      { IBinOp BS64 IXor }+    | 'i64.shl'                      { IBinOp BS64 IShl }+    | 'i64.shr_s'                    { IBinOp BS64 IShrS }+    | 'i64.shr_u'                    { IBinOp BS64 IShrU }+    | 'i64.rotl'                     { IBinOp BS64 IRotl }+    | 'i64.rotr'                     { IBinOp BS64 IRotr }+    | 'f32.abs'                      { FUnOp BS32 FAbs }+    | 'f32.neg'                      { FUnOp BS32 FNeg }+    | 'f32.ceil'                     { FUnOp BS32 FCeil }+    | 'f32.floor'                    { FUnOp BS32 FFloor }+    | 'f32.trunc'                    { FUnOp BS32 FTrunc }+    | 'f32.nearest'                  { FUnOp BS32 FNearest }+    | 'f32.sqrt'                     { FUnOp BS32 FSqrt }+    | 'f32.add'                      { FBinOp BS32 FAdd }+    | 'f32.sub'                      { FBinOp BS32 FSub }+    | 'f32.mul'                      { FBinOp BS32 FMul }+    | 'f32.div'                      { FBinOp BS32 FDiv }+    | 'f32.min'                      { FBinOp BS32 FMin }+    | 'f32.max'                      { FBinOp BS32 FMax }+    | 'f32.copysign'                 { FBinOp BS32 FCopySign }+    | 'f64.abs'                      { FUnOp BS64 FAbs }+    | 'f64.neg'                      { FUnOp BS64 FNeg }+    | 'f64.ceil'                     { FUnOp BS64 FCeil }+    | 'f64.floor'                    { FUnOp BS64 FFloor }+    | 'f64.trunc'                    { FUnOp BS64 FTrunc }+    | 'f64.nearest'                  { FUnOp BS64 FNearest }+    | 'f64.sqrt'                     { FUnOp BS64 FSqrt }+    | 'f64.add'                      { FBinOp BS64 FAdd }+    | 'f64.sub'                      { FBinOp BS64 FSub }+    | 'f64.mul'                      { FBinOp BS64 FMul }+    | 'f64.div'                      { FBinOp BS64 FDiv }+    | 'f64.min'                      { FBinOp BS64 FMin }+    | 'f64.max'                      { FBinOp BS64 FMax }+    | 'f64.copysign'                 { FBinOp BS64 FCopySign }+    | 'i32.eqz'                      { I32Eqz }+    | 'i32.eq'                       { IRelOp BS32 IEq }+    | 'i32.ne'                       { IRelOp BS32 INe }+    | 'i32.lt_s'                     { IRelOp BS32 ILtS }+    | 'i32.lt_u'                     { IRelOp BS32 ILtU }+    | 'i32.gt_s'                     { IRelOp BS32 IGtS }+    | 'i32.gt_u'                     { IRelOp BS32 IGtU }+    | 'i32.le_s'                     { IRelOp BS32 ILeS }+    | 'i32.le_u'                     { IRelOp BS32 ILeU }+    | 'i32.ge_s'                     { IRelOp BS32 IGeS }+    | 'i32.ge_u'                     { IRelOp BS32 IGeU }+    | 'i64.eqz'                      { I64Eqz }+    | 'i64.eq'                       { IRelOp BS64 IEq }+    | 'i64.ne'                       { IRelOp BS64 INe }+    | 'i64.lt_s'                     { IRelOp BS64 ILtS }+    | 'i64.lt_u'                     { IRelOp BS64 ILtU }+    | 'i64.gt_s'                     { IRelOp BS64 IGtS }+    | 'i64.gt_u'                     { IRelOp BS64 IGtU }+    | 'i64.le_s'                     { IRelOp BS64 ILeS }+    | 'i64.le_u'                     { IRelOp BS64 ILeU }+    | 'i64.ge_s'                     { IRelOp BS64 IGeS }+    | 'i64.ge_u'                     { IRelOp BS64 IGeU }+    | 'f32.eq'                       { FRelOp BS32 FEq }+    | 'f32.ne'                       { FRelOp BS32 FNe }+    | 'f32.lt'                       { FRelOp BS32 FLt }+    | 'f32.gt'                       { FRelOp BS32 FGt }+    | 'f32.le'                       { FRelOp BS32 FLe }+    | 'f32.ge'                       { FRelOp BS32 FGe }+    | 'f64.eq'                       { FRelOp BS64 FEq }+    | 'f64.ne'                       { FRelOp BS64 FNe }+    | 'f64.lt'                       { FRelOp BS64 FLt }+    | 'f64.gt'                       { FRelOp BS64 FGt }+    | 'f64.le'                       { FRelOp BS64 FLe }+    | 'f64.ge'                       { FRelOp BS64 FGe }+    | 'i32.wrap/i64'                 { I32WrapI64 }+    | 'i32.trunc_s/f32'              { ITruncFS BS32 BS32 }+    | 'i32.trunc_u/f32'              { ITruncFU BS32 BS32 }+    | 'i32.trunc_s/f64'              { ITruncFS BS32 BS64 }+    | 'i32.trunc_u/f64'              { ITruncFU BS32 BS64 }+    | 'i64.extend_s/i32'             { I64ExtendSI32 }+    | 'i64.extend_u/i32'             { I64ExtendUI32 }+    | 'i64.trunc_s/f32'              { ITruncFS BS64 BS32 }+    | 'i64.trunc_u/f32'              { ITruncFU BS64 BS32 }+    | 'i64.trunc_s/f64'              { ITruncFS BS64 BS64 }+    | 'i64.trunc_u/f64'              { ITruncFU BS64 BS64 }+    | 'f32.convert_s/i32'            { FConvertIS BS32 BS32 }+    | 'f32.convert_u/i32'            { FConvertIU BS32 BS32 }+    | 'f32.convert_s/i64'            { FConvertIS BS32 BS64 }+    | 'f32.convert_u/i64'            { FConvertIU BS32 BS64 }+    | 'f32.demote/f64'               { F32DemoteF64 }+    | 'f64.convert_s/i32'            { FConvertIS BS64 BS32 }+    | 'f64.convert_u/i32'            { FConvertIU BS64 BS32 }+    | 'f64.convert_s/i64'            { FConvertIS BS64 BS64 }+    | 'f64.convert_u/i64'            { FConvertIU BS64 BS64 }+    | 'f64.promote/f32'              { F64PromoteF32 }+    | 'i32.reinterpret/f32'          { IReinterpretF BS32 }+    | 'i64.reinterpret/f64'          { IReinterpretF BS64 }+    | 'f32.reinterpret/i32'          { FReinterpretI BS32 }+    | 'f64.reinterpret/i64'          { FReinterpretI BS64 }++typeuse :: { TypeUse }+    : '(' typeuse1 { $2 }+    | {- empty -} { AnonimousTypeUse $ FuncType [] [] }++typeuse1 :: { TypeUse }+    : 'type' index ')' typedtypeuse { IndexedTypeUse $2 $4 }+    | paramsresultstypeuse { AnonimousTypeUse $1 }++typedtypeuse :: { Maybe FuncType }+    : '(' paramsresultstypeuse { Just $2 }+    | {- empty -} { Nothing }++typedef :: { TypeDef }+    : 'type' opt(ident) functype ')' { TypeDef $2 $3 }++functype :: { FuncType }+    : '(' 'func' params_results { $3 }++params_results :: { FuncType }+    : ')' { emptyFuncType }+    | '(' params_results1 { $2 }++params_results1 :: { FuncType }+    : 'param' list(valtype) ')' params_results { mergeFuncType (FuncType (map (ParamType Nothing) $2) []) $4 }+    | 'param' ident valtype ')' params_results { mergeFuncType (FuncType [ParamType (Just $2) $3] []) $5 }+    | results1 { $1 }++results :: { FuncType }+    : ')' { emptyFuncType }+    | '(' results1 { $2 }++results1 :: { FuncType }+    : 'result' list(valtype) ')' results { mergeFuncType (FuncType [] $2) $4 }++paramsresultstypeuse :: { FuncType }+    : paramsresultstypeuse '(' paramsresulttypeuse { mergeFuncType $1 $3 }+    | paramsresulttypeuse { $1 }++paramsresulttypeuse :: { FuncType }+    : 'param' list(valtype) ')' { FuncType (map (ParamType Nothing) $2) [] }+    | 'param' ident valtype ')' { FuncType [ParamType (Just $2) $3] [] }+    | 'result' list(valtype) ')' { FuncType [] $2 }++memarg1 :: { MemArg }+    : opt(offset) opt(align) {% parseMemArg 1 $1 $2 }++memarg2 :: { MemArg }+    : opt(offset) opt(align) {% parseMemArg 2 $1 $2 }++memarg4 :: { MemArg }+    : opt(offset) opt(align) {% parseMemArg 4 $1 $2 }++memarg8 :: { MemArg }+    : opt(offset) opt(align) {% parseMemArg 8 $1 $2 }++instruction :: { [Instruction] }+    : raw_instr { $1 }+    | folded_instr { $1 }++raw_instr :: { [Instruction] }+    : plaininstr { [PlainInstr $1] }+    | 'call_indirect' raw_call_indirect { $2 }+    | 'block' opt(ident) raw_block {% (: []) `fmap` $3 $2 }+    | 'loop' opt(ident) raw_loop {% (: []) `fmap` $3 $2 }+    | 'if' opt(ident) raw_if_result {% $3 $2 }++raw_block :: { Maybe Ident -> Either String Instruction }+    : 'end' opt(ident) {+        \ident ->+            if ident == $2 || isNothing $2+            then Right $ BlockInstr ident [] []+            else Left "Block labels have to match"+    }+    | raw_instr list(instruction) 'end' opt(ident) {+        \ident ->+            if ident == $4 || isNothing $4+            then Right $ BlockInstr ident [] ($1 ++ concat $2)+            else Left "Block labels have to match"+    }+    | '(' raw_block1 { $2 }++raw_block1 :: { Maybe Ident -> Either String Instruction }+    : 'result' valtype ')' list(instruction) 'end' opt(ident) {+        \ident ->+            if ident == $6 || isNothing $6+            then Right $ BlockInstr ident [$2] (concat $4)+            else Left "Block labels have to match"+    }+    | folded_instr1 list(instruction) 'end' opt(ident) {+        \ident ->+            if ident == $4 || isNothing $4+            then Right $ BlockInstr ident [] ($1 ++ concat $2)+            else Left "Block labels have to match"+    }++raw_loop :: { Maybe Ident -> Either String Instruction }+    : 'end' opt(ident) {+        \ident ->+            if ident == $2 || isNothing $2+            then Right $ LoopInstr ident [] []+            else Left "Loop labels have to match"+    }+    | raw_instr list(instruction) 'end' opt(ident) {+        \ident ->+            if ident == $4 || isNothing $4+            then Right $ LoopInstr ident [] ($1 ++ concat $2)+            else Left "Loop labels have to match"+    }+    | '(' raw_loop1 { $2 }++raw_loop1 :: { Maybe Ident -> Either String Instruction }+    : 'result' valtype ')' list(instruction) 'end' opt(ident) {+        \ident ->+            if ident == $6 || isNothing $6+            then Right $ LoopInstr ident [$2] (concat $4)+            else Left "Loop labels have to match"+    }+    | folded_instr1 list(instruction) 'end' opt(ident) {+        \ident ->+            if ident == $4 || isNothing $4+            then Right $ LoopInstr ident [] ($1 ++ concat $2)+            else Left "Loop labels have to match"+    }++raw_if_result :: { Maybe Ident -> Either String [Instruction] }+    : raw_else {+        \ident ->+            if ident == (snd $1) || isNothing (snd $1)+            then Right [IfInstr ident [] [] $ fst $1]+            else Left "If labels have to match"+    }+    | raw_instr list(instruction) raw_else {+        \ident ->+            if ident == (snd $3) || isNothing (snd $3)+            then Right [IfInstr ident [] ($1 ++ concat $2) $ fst $3]+            else Left "If labels have to match"+    }+    | '(' raw_if_result1 { $2 }++raw_if_result1 :: { Maybe Ident -> Either String [Instruction] }+    : 'result' valtype ')' list(instruction) raw_else {+        \ident ->+            if ident == (snd $5) || isNothing (snd $5)+            then Right [IfInstr ident [$2] (concat $4) $ fst $5]+            else Left "If labels have to match"+    }+    | folded_instr1 list(instruction) raw_else {+        \ident ->+            if ident == (snd $3) || isNothing (snd $3)+            then Right [IfInstr ident [] ($1 ++ concat $2) $ fst $3]+            else Left "If labels have to match"+    }++raw_else :: { ([Instruction], Maybe Ident) }+    : 'end' opt(ident) { ([], $2) }+    | 'else' opt(ident) list(instruction) 'end' opt(ident) {%+        if matchIdents $2 $5+        then Right (concat $3, if isNothing $2 then $5 else $2)+        else Left "If labels have to match"+    }++raw_call_indirect :: { [Instruction] }+    : '(' raw_call_indirect_typeuse { (PlainInstr $ CallIndirect $ fst $2) : snd $2 }+    | {- empty -} { [PlainInstr $ CallIndirect $ AnonimousTypeUse $ FuncType [] []] }++raw_call_indirect_typeuse :: { (TypeUse, [Instruction]) }+    : 'type' index ')' raw_call_indirect_functype {+        (IndexedTypeUse $2 $ fst $4, snd $4)+    }+    | raw_call_indirect_functype1 {+        (AnonimousTypeUse $ fromMaybe (FuncType [] []) $ fst $1, snd $1)+    }++raw_call_indirect_functype :: { (Maybe FuncType, [Instruction]) }+    : '(' raw_call_indirect_functype1 { $2 }+    | {- empty -} { (Nothing, []) }++raw_call_indirect_functype1 :: { (Maybe FuncType, [Instruction]) }+    : 'param' list(valtype) ')' raw_call_indirect_functype {+        let ft = fromMaybe emptyFuncType $ fst $4 in+        (Just $ ft { params = map (ParamType Nothing) $2 ++ params ft }, snd $4)+    }+    | raw_call_indirect_return_functype1 { $1 }++raw_call_indirect_return_functype :: { (Maybe FuncType, [Instruction]) }+    : '(' raw_call_indirect_return_functype1 { $2 }+    | {- empty -} { (Nothing, []) }++raw_call_indirect_return_functype1 :: { (Maybe FuncType, [Instruction]) }+    : 'result' list(valtype) ')' raw_call_indirect_return_functype {+        let ft = fromMaybe emptyFuncType $ fst $4 in+        (Just $ ft { results = $2 ++ results ft }, snd $4)+    }+    | folded_instr1 { (Nothing, $1) }++folded_instr :: { [Instruction] }+    : '(' folded_instr1 { $2 }++folded_instr1 :: { [Instruction] }+    : plaininstr list(folded_instr) ')' { concat $2 ++ [PlainInstr $1] }+    | 'call_indirect' folded_call_indirect { $2 }+    | 'block' opt(ident) folded_block { [$3 $2] }+    | 'loop' opt(ident) folded_loop { [$3 $2] }+    | 'if' opt(ident) '(' folded_if_result { $4 $2 }++folded_block :: { Maybe Ident -> Instruction }+    : ')' { \ident -> BlockInstr ident [] [] }+    | '(' folded_block1 { $2 }+    | raw_instr list(instruction) ')' { \ident -> BlockInstr ident [] ($1 ++ concat $2) }++folded_block1 :: { Maybe Ident -> Instruction }+    : 'result' valtype ')' list(instruction) ')' { \ident -> BlockInstr ident [$2] (concat $4) }+    | folded_instr1 list(instruction) ')' { \ident -> BlockInstr ident [] ($1 ++ concat $2) }++folded_loop :: { Maybe Ident -> Instruction }+    : ')' { \ident -> LoopInstr ident [] [] }+    | '(' folded_loop1 { $2 }+    | raw_instr list(instruction) ')' { \ident -> LoopInstr ident [] ($1 ++ concat $2) }++folded_loop1 :: { Maybe Ident -> Instruction }+    : 'result' valtype ')' list(instruction) ')' { \ident -> LoopInstr ident [$2] (concat $4) }+    | folded_instr1 list(instruction) ')' { \ident -> LoopInstr ident [] ($1 ++ concat $2) }++folded_if_result :: { Maybe Ident -> [Instruction] }+    : 'result' valtype ')' '(' folded_then_else {+        \ident ->+            let (pred, (trueBranch, falseBranch)) = $5 in+            pred ++ [IfInstr ident [$2] trueBranch falseBranch]+    }+    | folded_then_else {+        \ident ->+            let (pred, (trueBranch, falseBranch)) = $1 in+            pred ++ [IfInstr ident [] trueBranch falseBranch]+    }++folded_then_else :: { ([Instruction], ([Instruction], [Instruction])) }+    : 'then' list(instruction) ')' folded_else { ([], (concat $2, $4)) }+    | folded_instr1 '(' folded_then_else {+        let (pred, branches) = $3 in+        ($1 ++ pred, branches)+    }++folded_else :: { [Instruction] }+    : ')' { [] }+    | '(' 'else' list(instruction) ')' ')' { concat $3 }++folded_call_indirect :: { [Instruction] }+    : ')' { [PlainInstr $ CallIndirect $ AnonimousTypeUse $ FuncType [] []] }+    | '(' folded_call_indirect_typeuse { snd $2 ++ [PlainInstr $ CallIndirect $ fst $2] }++folded_call_indirect_typeuse :: { (TypeUse, [Instruction]) }+    : 'type' index ')' folded_call_indirect_functype {+        (IndexedTypeUse $2 $ fst $4, snd $4)+    }+    | folded_call_indirect_functype1 {+        (AnonimousTypeUse $ fromMaybe (FuncType [] []) $ fst $1, snd $1)+    }++folded_call_indirect_functype :: { (Maybe FuncType, [Instruction]) }+    : '(' folded_call_indirect_functype1 { $2 }+    | ')' { (Nothing, []) }++folded_call_indirect_functype1 :: { (Maybe FuncType, [Instruction]) }+    : 'param' list(valtype) ')' folded_call_indirect_functype {+        let ft = fromMaybe emptyFuncType $ fst $4 in+        (Just $ ft { params = map (ParamType Nothing) $2 ++ params ft }, snd $4)+    }+    | folded_call_indirect_return_functype1 { $1 }++folded_call_indirect_return_functype :: { (Maybe FuncType, [Instruction]) }+    : '(' folded_call_indirect_return_functype1 { $2 }+    | ')' { (Nothing, []) }++folded_call_indirect_return_functype1 :: { (Maybe FuncType, [Instruction]) }+    : 'result' list(valtype) ')' folded_call_indirect_return_functype {+        let ft = fromMaybe emptyFuncType $ fst $4 in+        (Just $ ft { results = $2 ++ results ft }, snd $4)+    }+    | folded_instr1 list(folded_instr) ')' { (Nothing, $1 ++ concat $2) }++importdesc :: { ImportDesc }+    : 'func' opt(ident) typeuse ')' { ImportFunc $2 $3 }+    | 'table' opt(ident) tabletype ')' { ImportTable $2 $3 }+    | 'memory' opt(ident) limits ')' { ImportMemory $2 $3 }+    | 'global' opt(ident) globaltype ')' { ImportGlobal $2 $3 }++import :: { Import }+    : 'import' name name '(' importdesc ')' { Import [] $2 $3 $5 }++-- FUNCTION --+function :: { ModuleField }+    : 'func' opt(ident) export_import_typeuse_locals_body { $3 $2 }++export_import_typeuse_locals_body :: { Maybe Ident -> ModuleField }+    : ')' { \i -> MFFunc emptyFunction { ident = i } }+    | raw_instr list(instruction) ')' {+        \i -> MFFunc emptyFunction { ident = i, body = $1 ++ concat $2 }+    }+    | '(' export_import_typeuse_locals_body1 { $2 }++export_import_typeuse_locals_body1 :: { Maybe Ident -> ModuleField }+    : 'export' name ')' export_import_typeuse_locals_body {+        \ident ->+            case $4 ident of+                MFImport imp -> MFImport imp { reExportAs = $2 : reExportAs imp }+                MFFunc func -> MFFunc func { exportFuncAs = $2 : exportFuncAs func }+                _ -> error "unexpected field"+    }+    | import_typeuse_locals_body1 { $1 }++import_typeuse_locals_body1 :: { Maybe Ident -> ModuleField }+    : 'import' name name ')' typeuse ')' {+        \ident -> MFImport $ Import [] $2 $3 $ ImportFunc ident $5+    }+    | typeuse_locals_body1 { MFFunc . $1 }++typeuse_locals_body1 :: { Maybe Ident -> Function }+    : 'type' index ')' signature_locals_body {+        \i ->+            let (AnonimousTypeUse signature) = funcType $4 in+            let typeSign = if signature == emptyFuncType then Nothing else Just signature in+            $4 { funcType = IndexedTypeUse $2 typeSign, ident = i }+    }+    | signature_locals_body1 { \i -> $1 { ident = i } }++signature_locals_body :: { Function }+    : ')' { emptyFunction }+    | '(' signature_locals_body1 { $2 }++signature_locals_body1 :: { Function }+    : 'param' list(valtype) ')' signature_locals_body {+        prependFuncParams (map (ParamType Nothing) $2) $4+    }+    | 'param' ident valtype ')' signature_locals_body {+        prependFuncParams [ParamType (Just $2) $3] $5+    }+    | result_locals_body1 { $1 }++result_locals_body :: { Function }+    : ')' { emptyFunction }+    | '(' result_locals_body1 { $2 }+    | raw_instr list(instruction) ')' { emptyFunction { body = $1 ++ concat $2 } }++result_locals_body1 :: { Function }+    : 'result' list(valtype) ')' result_locals_body {+        prependFuncResults $2 $4+    }+    | locals_body1 {+        emptyFunction { locals = fst $1, body = snd $1 }+    }++locals_body :: { ([LocalType], [Instruction]) }+    : ')' { ([], []) }+    | raw_instr list(instruction) ')' { ([], $1 ++ concat $2)}+    | '(' locals_body1 { $2 }++locals_body1 :: { ([LocalType], [Instruction]) }+    : 'local' list(valtype) ')' locals_body { (map (LocalType Nothing) $2 ++ fst $4, snd $4) }+    | 'local' ident valtype ')' locals_body { (LocalType (Just $2) $3 : fst $5, snd $5) }+    | folded_instr1 list(instruction) ')' { ([], $1 ++ concat $2) }++-- FUNCTION END --++-- GLOBAL --++global :: { ModuleField }+    : 'global' opt(ident) global_type_export_import { $3 $2 }++globaltype :: { GlobalType }+    : valtype { Const $1 }+    | '(' 'mut' valtype ')' { Mut $3 }++global_type_export_import :: { Maybe Ident -> ModuleField }+    : valtype list(instruction) ')' { \ident -> MFGlobal $ Global [] ident (Const $1) $ concat $2 }+    | '(' global_mut_export_import { $2 }++global_mut_export_import :: { Maybe Ident -> ModuleField }+    : 'mut' valtype ')' list(instruction) ')' { \ident -> MFGlobal $ Global [] ident (Mut $2) $ concat $4 }+    | 'export' name ')' global_type_export_import {+        \ident ->+            case $4 ident of+                MFImport imp -> MFImport imp { reExportAs = $2 : reExportAs imp }+                MFGlobal global -> MFGlobal global { exportGlobalAs = $2 : exportGlobalAs global }+                _ -> error "unexpected field"+    }+    | 'import' name name ')' globaltype ')' {+        \ident -> MFImport $ Import [] $2 $3 $ ImportGlobal ident $5+    }++-- GLOBAL END --++-- MEMORY --++memory :: { [ModuleField] }+    : 'memory' opt(ident) memory_limits_export_import { $3 $2 }++memory_limits_export_import :: { Maybe Ident -> [ModuleField] }+    : memory_limits { $1 }+    | '(' memory_limits_export_import1 { $2 }++datastring :: { LBS.ByteString }+    : list(str) { LBS.concat $1 }++memory_limits_export_import1 :: { Maybe Ident -> [ModuleField] }+    : 'export' name ')' memory_limits_export_import {+        \ident ->+            case $4 ident of+                [MFImport imp] -> [MFImport imp { reExportAs = $2 : reExportAs imp }]+                (MFMem (Memory exps i l)):rest -> (MFMem (Memory ($2:exps) i l)):rest+                _ -> error "unexpected field"+    }+    | 'import' name name ')' limits ')' {+        \ident -> [MFImport $ Import [] $2 $3 $ ImportMemory ident $5]+    }+    | 'data' datastring ')' ')' {+        \ident ->+            let m = fromIntegral $ LBS.length $2 in+            [+                MFMem $ Memory [] ident $ Limit m $ Just m,+                MFData $ DataSegment (fromMaybe (Index 0) $ Named `fmap` ident) [PlainInstr $ I32Const 0] $2+            ]+    }++memory_limits :: { Maybe Ident -> [ModuleField] }+    : limits ')' { \ident -> [MFMem $ Memory [] ident $1] }++-- MEMOTY END --++-- TABLE --+limits :: { Limit }+    : u32 opt(u32) { Limit (fromIntegral $1) (fromIntegral `fmap` $2) }++elemtype :: { ElemType }+    : 'anyfunc' { AnyFunc }++tabletype :: { TableType }+    : limits elemtype { TableType $1 $2 }++table :: { [ModuleField] }+    : 'table' opt(ident) limits_elemtype_elem { $3 $2 }++limits_elemtype_elem :: { Maybe Ident -> [ModuleField] }+    : tabletype ')' { \ident -> [MFTable $ Table [] ident $1] }+    | elemtype '(' 'elem' list(index) ')' ')' {+        \ident ->+            let funcsLen = fromIntegral $ length $4 in [+                MFTable $ Table [] ident $ TableType (Limit funcsLen (Just funcsLen)) $1,+                MFElem $ ElemSegment (fromMaybe (Index 0) $ Named `fmap` ident) [PlainInstr $ I32Const 0] $4+            ]+    }+    | '(' import_export_table { $2 }++import_export_table :: { Maybe Ident -> [ModuleField] }+    : 'import' name name ')' tabletype ')' {+        \ident -> [MFImport $ Import [] $2 $3 $ ImportTable ident $5]+    }+    | 'export' name ')' limits_elemtype_elem {+        \ident ->+            case $4 ident of+                [MFImport imp] -> [MFImport imp { reExportAs = $2 : reExportAs imp }]+                (MFTable (Table exps i t)):rest -> (MFTable (Table ($2:exps) i t)):rest+                _ -> error "unexpected field"+    }++-- TABLE END --++exportdesc :: { ExportDesc }+    : 'func' index ')' { ExportFunc $2 }+    | 'table' index ')' { ExportTable $2 }+    | 'memory' index ')' { ExportMemory $2 }+    | 'global' index ')' { ExportGlobal $2 }++export :: { Export }+    : 'export' name '(' exportdesc ')' { Export $2 $4 }++start :: { StartFunction }+    : 'start' index ')' { StartFunction $2 }++-- TODO: Spec from 09 Jan 2018 declares 'offset' keyword as mandatory,+-- but collection of testcases omits 'offset' in this position+-- I am going to support both options for now, but maybe it has to be updated in future.+offsetexpr :: { [Instruction] }+    : 'offset' list(folded_instr) ')' { concat $2 }+    | folded_instr1 { $1 }++elemsegment :: { ElemSegment }+    : 'elem' opt(index) '(' offsetexpr list(index) ')' { ElemSegment (fromMaybe (Index 0) $2) $4 $5 }++datasegment :: { DataSegment }+    : 'data' opt(index) '(' offsetexpr datastring ')' { DataSegment (fromMaybe (Index 0) $2) $4 $5 }++modulefield1_single :: { ModuleField }+    : typedef { MFType $1 }+    | import { MFImport $1 }+    | export { MFExport $1 }+    | start { MFStart $1 }+    | elemsegment { MFElem $1 }+    | datasegment { MFData $1 }+    | function { $1 }+    | global { $1 }++modulefield1_multi :: { [ModuleField] }+    : table { $1 }+    | memory { $1 }++modulefield1 :: { [ModuleField] }+    : modulefield1_single { [$1] }+    | modulefield1_multi { $1 }++modulefield :: { [ModuleField] }+    : '(' modulefield1 { $2 }++modAsFields :: { [ModuleField] }+    : '(' 'module' list(modulefield) ')' EOF { concat $3 }+    | '(' modulefield1 list(modulefield) EOF { $2 ++ concat $3}++mod :: { S.Module }+    : modAsFields {% desugarize $1 }++-- Wasm Script Extended Grammar+script :: { Script }+    : list(command) EOF { $1 }++command :: { Command }+    : '(' command1 { $2 }++command1 :: { Command }+    : module1 { ModuleDef $1 }+    | 'register' string opt(ident) ')' { Register $2 $3 }+    | action1 { Action $1 }+    | assertion1 { Assertion $1 }+    | meta1 { Meta $1 }++module1 :: { ModuleDef }+    : 'module' opt(ident) 'binary' datastring ')' { BinaryModDef $2 $4 }+    | 'module' opt(ident) 'quote' list(string) ')' { TextModDef $2 (TL.concat $4) }+    | 'module' opt(ident) list(modulefield) ')' {% RawModDef $2 `fmap` (desugarize $ concat $3) }+    | modulefield1 list(modulefield) {% RawModDef Nothing `fmap` (desugarize $ $1 ++ concat $2) }++action1 :: { Action }+    : 'invoke' opt(ident) string list(folded_instr) ')' { Invoke $2 $3 (map (map constInstructionToValue) $4) }+    | 'get' opt(ident) string ')' { Get $2 $3 }++assertion1 :: { Assertion }+    : 'assert_return' '(' action1 list(folded_instr) ')' { AssertReturn $3 (map (map constInstructionToValue) $4) }+    | 'assert_return_canonical_nan' '(' action1 ')' { AssertReturnCanonicalNaN $3 }+    | 'assert_return_arithmetic_nan' '(' action1 ')' { AssertReturnArithmeticNaN $3 }+    | 'assert_trap' '(' assertion_trap string ')' { AssertTrap $3 $4 }+    | 'assert_malformed' '(' module1 string ')' { AssertMalformed $3 $4 }+    | 'assert_invalid' '(' module1 string ')' { AssertInvalid $3 $4 }+    | 'assert_unlinkable' '(' module1 string ')' { AssertUnlinkable $3 $4 }+    | 'assert_exhaustion' '(' action1 string ')' { AssertExhaustion $3 $4 }++assertion_trap :: { Either Action ModuleDef }+    : action1 { Left $1 }+    | module1 { Right $1 }++meta1 :: { Meta }+    : 'script' opt(ident) script ')' { Script $2 $3 }+    | 'input' opt(ident) string ')' { Input $2 $3 }+    | 'output' opt(ident) string ')' { Output $2 $3 }++-- utils++rev_list(p)+    : rev_list(p) p  { $2 : $1 }+    | {- empty -}    { [] }++rev_list1(p)+    : rev_list1(p) p { $2 : $1 }+    | p              { [$1] }++list(p)+    : rev_list(p)    { reverse $1 }++opt(p)+    : p { Just $1 }+    | {- empty -} { Nothing }++{++-- partial function by intention+prependFuncParams :: [ParamType] -> Function -> Function+prependFuncParams prep f@(Function { funcType = AnonimousTypeUse ft }) =+    f { funcType = AnonimousTypeUse $ ft { params = prep ++ params ft } }++prependFuncResults :: [ValueType] -> Function -> Function+prependFuncResults prep f@(Function { funcType = AnonimousTypeUse ft }) =+    f { funcType = AnonimousTypeUse $ ft { results = prep ++ results ft } }++mergeFuncType :: FuncType -> FuncType -> FuncType+mergeFuncType (FuncType lps lrs) (FuncType rps rrs) = FuncType (lps ++ rps) (lrs ++ rrs)++matchIdents :: Maybe Ident -> Maybe Ident -> Bool+matchIdents Nothing _ = True+matchIdents _ Nothing = True+matchIdents a b = a == b++asOffset :: LBS.ByteString -> Maybe Natural+asOffset str = do+    num <- TL.stripPrefix "offset=" $ TLEncoding.decodeUtf8 str+    fromIntegral . fst <$> eitherToMaybe (TLRead.decimal num)++asAlign :: LBS.ByteString -> Maybe Natural+asAlign str = do+    num <- TL.stripPrefix "align=" $ TLEncoding.decodeUtf8 str+    fromIntegral . fst <$> eitherToMaybe (TLRead.decimal num)++parseMemArg :: Natural -> Maybe Natural -> Maybe Natural -> Either String MemArg+parseMemArg defAlign optOffset optAlign = do+    let offset = fromMaybe 0 optOffset+    let parsedAlign = fromIntegral $ fromMaybe defAlign optAlign+    if parsedAlign == 0 then Left "alignment" else return ()+    let align = fromIntegral $ round $ logBase 2 parsedAlign+    if 2 ^ align /= parsedAlign then Left "alignment" else return ()+    if offset >= 2 ^ 32 || align >= 2 ^ 32+    then Left "u32 is out of boundaries"+    else return $ MemArg offset align++eitherToMaybe :: Either left right -> Maybe right+eitherToMaybe = either (const Nothing) Just++integerToWord32 :: Integer -> Word32+integerToWord32 i+    | i >= 0 && i <= 2 ^ 32 = fromIntegral i+    | i < 0 && i >= -(2 ^ 31) = 0xFFFFFFFF - (fromIntegral (abs i)) + 1+    | otherwise = error "I32 is out of bounds."++integerToWord64 :: Integer -> Word64+integerToWord64 i+    | i >= 0 && i <= 2 ^ 64 = fromIntegral i+    | i < 0 && i >= -(2 ^ 63) = 0xFFFFFFFFFFFFFFFF - (fromIntegral (abs i)) + 1+    | otherwise = error "I64 is out of bounds."++data FuncType = FuncType { params :: [ParamType], results :: [ValueType] } deriving (Show, Eq, Generic, NFData)++emptyFuncType :: FuncType+emptyFuncType = FuncType [] []++data ParamType = ParamType {+        ident :: Maybe Ident,+        paramType :: ValueType+    } deriving (Show, Eq, Generic, NFData)++newtype Ident = Ident TL.Text deriving (Show, Eq, Generic, NFData)++data Index = Named Ident | Index Natural deriving (Show, Eq, Generic, NFData)++type LabelIndex = Index+type FuncIndex = Index+type TypeIndex = Index+type LocalIndex = Index+type GlobalIndex = Index+type TableIndex = Index+type MemoryIndex = Index++data PlainInstr =+    -- Control instructions+    Unreachable+    | Nop+    | Br LabelIndex+    | BrIf LabelIndex+    | BrTable [LabelIndex] LabelIndex+    | Return+    | Call FuncIndex+    | CallIndirect TypeUse+    -- Parametric instructions+    | Drop+    | Select+    -- Variable instructions+    | GetLocal LocalIndex+    | SetLocal LocalIndex+    | TeeLocal LocalIndex+    | GetGlobal GlobalIndex+    | SetGlobal GlobalIndex+    -- Memory instructions+    | I32Load MemArg+    | I64Load MemArg+    | F32Load MemArg+    | F64Load MemArg+    | I32Load8S MemArg+    | I32Load8U MemArg+    | I32Load16S MemArg+    | I32Load16U MemArg+    | I64Load8S MemArg+    | I64Load8U MemArg+    | I64Load16S MemArg+    | I64Load16U MemArg+    | I64Load32S MemArg+    | I64Load32U MemArg+    | I32Store MemArg+    | I64Store MemArg+    | F32Store MemArg+    | F64Store MemArg+    | I32Store8 MemArg+    | I32Store16 MemArg+    | I64Store8 MemArg+    | I64Store16 MemArg+    | I64Store32 MemArg+    | CurrentMemory+    | GrowMemory+    -- Numeric instructions+    | I32Const Integer+    | I64Const Integer+    | F32Const Float+    | F64Const Double+    | IUnOp BitSize IUnOp+    | IBinOp BitSize IBinOp+    | I32Eqz+    | I64Eqz+    | IRelOp BitSize IRelOp+    | FUnOp BitSize FUnOp+    | FBinOp BitSize FBinOp+    | FRelOp BitSize FRelOp+    | I32WrapI64+    | ITruncFU {- Int Size -} BitSize {- Float Size -} BitSize+    | ITruncFS {- Int Size -} BitSize {- Float Size -} BitSize+    | I64ExtendSI32+    | I64ExtendUI32+    | FConvertIU {- Float Size -} BitSize {- Int Size -} BitSize+    | FConvertIS {- Float Size -} BitSize {- Int Size -} BitSize+    | F32DemoteF64+    | F64PromoteF32+    | IReinterpretF BitSize+    | FReinterpretI BitSize+    deriving (Show, Eq, Generic, NFData)++data TypeDef = TypeDef (Maybe Ident) FuncType deriving (Show, Eq, Generic, NFData)++data TypeUse =+    IndexedTypeUse TypeIndex (Maybe FuncType)+    | AnonimousTypeUse FuncType+    deriving (Show, Eq, Generic, NFData)++data Instruction =+    PlainInstr PlainInstr+    | BlockInstr {+        label :: Maybe Ident,+        resultType :: [ValueType],+        body :: [Instruction]+    }+    | LoopInstr {+        label :: Maybe Ident,+        resultType :: [ValueType],+        body :: [Instruction]+    }+    | IfInstr {+        label :: Maybe Ident,+        resultType :: [ValueType],+        trueBranch :: [Instruction],+        falseBranch :: [Instruction]+    }+    deriving (Show, Eq, Generic, NFData)++data Import = Import {+        reExportAs :: [TL.Text],+        sourceModule :: TL.Text,+        name :: TL.Text,+        desc :: ImportDesc+    } deriving (Show, Eq, Generic, NFData)++data ImportDesc =+    ImportFunc (Maybe Ident) TypeUse+    | ImportTable (Maybe Ident) TableType+    | ImportMemory (Maybe Ident) Limit+    | ImportGlobal (Maybe Ident) GlobalType+    deriving (Show, Eq, Generic, NFData)++data LocalType = LocalType {+        ident :: Maybe Ident,+        localType :: ValueType+    } deriving (Show, Eq, Generic, NFData)++data Function = Function {+        exportFuncAs :: [TL.Text],+        ident :: Maybe Ident,+        funcType :: TypeUse,+        locals :: [LocalType],+        body :: [Instruction]+    }+    deriving (Show, Eq, Generic, NFData)++emptyFunction :: Function+emptyFunction =+    Function {+        exportFuncAs = [],+        ident = Nothing,+        funcType = AnonimousTypeUse emptyFuncType,+        locals = [],+        body = []+    }++data Global = Global {+        exportGlobalAs :: [TL.Text],+        ident :: Maybe Ident,+        globalType :: GlobalType,+        initializer :: [Instruction]+    }+    deriving (Show, Eq, Generic, NFData)++data Memory = Memory [TL.Text] (Maybe Ident) Limit deriving (Show, Eq, Generic, NFData)++data Table = Table [TL.Text] (Maybe Ident) TableType deriving (Show, Eq, Generic, NFData)++data ExportDesc =+    ExportFunc FuncIndex+    | ExportTable TableIndex+    | ExportMemory MemoryIndex+    | ExportGlobal GlobalIndex+    deriving (Show, Eq, Generic, NFData)++data Export = Export {+        name :: TL.Text,+        desc :: ExportDesc+    }+    deriving (Show, Eq, Generic, NFData)++data StartFunction = StartFunction FuncIndex deriving (Show, Eq, Generic, NFData)++data ElemSegment = ElemSegment {+        tableIndex :: TableIndex,+        offset :: [Instruction],+        funcIndexes :: [FuncIndex]+    }+    deriving (Show, Eq, Generic, NFData)++data DataSegment = DataSegment {+        memIndex :: MemoryIndex,+        offset :: [Instruction],+        datastring :: LBS.ByteString+    }+    deriving (Show, Eq, Generic, NFData)++data ModuleField =+    MFType TypeDef+    | MFImport Import+    | MFFunc Function+    | MFTable Table+    | MFMem Memory+    | MFGlobal Global+    | MFExport Export+    | MFStart StartFunction+    | MFElem ElemSegment+    | MFData DataSegment+    deriving(Show, Eq, Generic, NFData)++happyError (Lexeme _ EOF : []) = Left $ "Error occuried during parsing phase at the end of file"+happyError (Lexeme Nothing tok : tokens) = Left $ "Error occuried during parsing phase at the end of file"+happyError (Lexeme (Just (AlexPn abs line col)) tok : tokens) = Left $+    "Error occuried during parsing phase. " +++    "Line " ++ show line ++ ", " +++    "Column " ++ show col ++ ", " +++    "Token " ++ show tok ++ ". " +++    "Token lookahed: " ++ show (take 3 tokens)++data Module = Module {+    types :: [TypeDef],+    functions :: [Function],+    tables :: [Table],+    mems :: [Memory],+    globals :: [Global],+    elems :: [ElemSegment],+    datas :: [DataSegment],+    start :: Maybe StartFunction,+    imports :: [Import],+    exports :: [Export]+} deriving (Show, Eq)++type Script = [Command]++data ModuleDef+    = RawModDef (Maybe Ident) S.Module+    | TextModDef (Maybe Ident) TL.Text+    | BinaryModDef (Maybe Ident) LBS.ByteString+    deriving (Show, Eq)++data Command+    = ModuleDef ModuleDef+    | Register TL.Text (Maybe Ident)+    | Action Action+    | Assertion Assertion+    | Meta Meta+    deriving (Show, Eq)++data Action+    = Invoke (Maybe Ident) TL.Text [S.Expression]+    | Get (Maybe Ident) TL.Text+    deriving (Show, Eq)++type FailureString = TL.Text++data Assertion+    = AssertReturn Action [S.Expression]+    | AssertReturnCanonicalNaN Action+    | AssertReturnArithmeticNaN Action+    | AssertTrap (Either Action ModuleDef) FailureString+    | AssertMalformed ModuleDef FailureString+    | AssertInvalid ModuleDef FailureString+    | AssertUnlinkable ModuleDef FailureString+    | AssertExhaustion Action FailureString+    deriving (Show, Eq)++data Meta+    = Script (Maybe Ident) Script+    | Input (Maybe Ident) TL.Text+    | Output (Maybe Ident) TL.Text+    deriving (Show, Eq)++type Labels = [Maybe Ident]++data FunCtx = FunCtx {+    ctxMod :: Module,+    ctxLabels :: Labels,+    ctxLocals :: [LocalType],+    ctxParams :: [ParamType]+} deriving (Eq, Show)++constInstructionToValue :: Instruction -> S.Instruction Natural+constInstructionToValue (PlainInstr (I32Const v)) = S.I32Const $ integerToWord32 v+constInstructionToValue (PlainInstr (F32Const v)) = S.F32Const v+constInstructionToValue (PlainInstr (I64Const v)) = S.I64Const $ integerToWord64 v+constInstructionToValue (PlainInstr (F64Const v)) = S.F64Const v+constInstructionToValue _ = error "Only const instructions supported as arguments for actions"++desugarize :: [ModuleField] -> Either String S.Module+desugarize fields = do+    checkImportsOrder fields+    let mod = Module {+        types = reverse $ foldl' extractTypeDef (reverse $ explicitTypeDefs fields) fields,+        functions = extract extractFunction fields,+        tables = extract extractTable fields,+        imports = extract extractImport fields,+        mems = extract extractMemory fields,+        globals = extract extractGlobal fields,+        elems = extract extractElemSegment fields,+        datas = extract extractDataSegment fields,+        start = extractStart fields,+        exports = []+    }+    funs <- mapM (synFunctionToStruct mod) $ functions mod+    elements <- mapM (synElemToStruct mod) $ elems mod+    segments <- mapM (synDataToStruct mod) $ datas mod+    globs <- mapM (synGlobalToStruct mod) $ globals mod+    return S.Module {+        S.types = map synTypeDefToStruct $ types mod,+        S.functions = funs,+        S.tables = map synTableToStruct $ tables mod,+        S.imports = map (synImportToStruct $ types mod) $ imports mod,+        S.elems = elements,+        S.datas = segments,+        S.mems = map synMemoryToStruct $ mems mod,+        S.globals = globs,+        S.start = fmap (synStartToStruct mod) $ start mod,+        S.exports = synExportsToStruct mod $ extractExports mod fields+    }+    where+        -- utils+        extract :: ([a] -> ModuleField -> [a]) -> [ModuleField] -> [a]+        extract extractor = reverse . foldl' extractor []++        findWithIndex :: (a -> Bool) -> [a] -> Maybe (a, Int)+        findWithIndex pred l = find (pred . fst) $ zip l [0..]++        -- types+        synTypeDefToStruct :: TypeDef -> S.FuncType+        synTypeDefToStruct (TypeDef _ FuncType { params, results }) =+            S.FuncType (map paramType params) results++        explicitTypeDefs :: [ModuleField] -> [TypeDef]+        explicitTypeDefs = map (\(MFType def) -> def) . filter isTypeDef+            where+                isTypeDef (MFType _) = True+                isTypeDef _ = False+        +        checkImportsOrder :: [ModuleField] -> Either String ()+        checkImportsOrder fields = foldM checkDef False fields >> return ()+            where+                checkDef nonImportOccured (MFImport _) =+                    if nonImportOccured+                    then Left "Import sections have to be before any definition"+                    else Right False+                checkDef _ (MFFunc _) = return True+                checkDef _ (MFGlobal _) = return True+                checkDef _ (MFMem _) = return True+                checkDef _ (MFTable _) = return True+                checkDef nonImportOccured _ = return nonImportOccured++        extractTypeDef :: [TypeDef] -> ModuleField -> [TypeDef]+        extractTypeDef defs (MFType _) = defs -- should be extracted before implicit defs+        extractTypeDef defs (MFImport Import { desc = ImportFunc _ typeUse }) =+            matchTypeUse defs typeUse+        extractTypeDef defs (MFFunc Function { funcType, body }) =+            extractTypeDefFromInstructions (matchTypeUse defs funcType) body+        extractTypeDef defs (MFGlobal Global { initializer }) =+            extractTypeDefFromInstructions defs initializer+        extractTypeDef defs (MFElem ElemSegment { offset }) =+            extractTypeDefFromInstructions defs offset+        extractTypeDef defs (MFData DataSegment { offset }) =+            extractTypeDefFromInstructions defs offset+        extractTypeDef defs _ = defs++        extractTypeDefFromInstructions :: [TypeDef] -> [Instruction] -> [TypeDef]+        extractTypeDefFromInstructions = foldl' extractTypeDefFromInstruction++        extractTypeDefFromInstruction :: [TypeDef] -> Instruction -> [TypeDef]+        extractTypeDefFromInstruction defs (PlainInstr (CallIndirect typeUse)) =+            matchTypeUse defs typeUse+        extractTypeDefFromInstruction defs (BlockInstr { body }) =+            extractTypeDefFromInstructions defs body+        extractTypeDefFromInstruction defs (LoopInstr { body }) =+            extractTypeDefFromInstructions defs body+        extractTypeDefFromInstruction defs (IfInstr { trueBranch, falseBranch }) =+            extractTypeDefFromInstructions defs $ trueBranch ++ falseBranch+        extractTypeDefFromInstruction defs _ = defs++        funcTypesEq :: FuncType -> FuncType -> Bool+        funcTypesEq l r =+            let paramTypes = map paramType . params in+            paramTypes l == paramTypes r && results l == results r++        matchTypeFunc :: FuncType -> TypeDef -> Bool+        matchTypeFunc funcType (TypeDef _ ft) = funcTypesEq ft funcType++        matchTypeUse :: [TypeDef] -> TypeUse -> [TypeDef]+        matchTypeUse defs (AnonimousTypeUse funcType) =+            if any (matchTypeFunc funcType) defs+            then defs+            else (TypeDef Nothing funcType) : defs+        matchTypeUse defs _ = defs++        getTypeIndex :: [TypeDef] -> TypeUse -> Maybe Natural+        getTypeIndex defs (AnonimousTypeUse funcType) =+            fromIntegral <$> findIndex (matchTypeFunc funcType) defs+        getTypeIndex defs (IndexedTypeUse (Named ident) (Just funcType)) = do+            (def, idx) <- findWithIndex (\(TypeDef i _) -> i == Just ident) defs+            guard $ matchTypeFunc funcType def+            return $ fromIntegral idx+        getTypeIndex defs (IndexedTypeUse (Named ident) Nothing) =+            fromIntegral <$> findIndex (\(TypeDef i _) -> i == Just ident) defs+        getTypeIndex defs (IndexedTypeUse (Index n) (Just funcType)) = do+            guard $ matchTypeFunc funcType $ defs !! fromIntegral n+            return n+        getTypeIndex defs (IndexedTypeUse (Index n) Nothing) = return n+        +        -- imports+        synImportToStruct :: [TypeDef] -> Import -> S.Import+        synImportToStruct defs (Import _ mod name (ImportFunc _ typeUse)) =+            case getTypeIndex defs typeUse of+                Just idx -> S.Import mod name $ S.ImportFunc idx+                Nothing -> error $ "cannot find type index for function import: " ++ show typeUse+        synImportToStruct _ (Import _ mod name (ImportTable _ tableType)) =+            S.Import mod name $ S.ImportTable tableType+        synImportToStruct _ (Import _ mod name (ImportMemory _ limit)) =+            S.Import mod name $ S.ImportMemory limit+        synImportToStruct _ (Import _ mod name (ImportGlobal _ globalType)) =+            S.Import mod name $ S.ImportGlobal globalType++        extractImport :: [Import] -> ModuleField -> [Import]+        extractImport imports (MFImport imp) = imp : imports+        extractImport imports _ = imports++        unwrapLabel ctx labelIdx =+            case getLabelIdx ctx labelIdx of+                Just i -> Right i+                Nothing -> Left "unknown label"++        -- functions+        synInstrToStruct :: FunCtx -> Instruction -> Either String (S.Instruction Natural)+        synInstrToStruct _ (PlainInstr Unreachable) = return S.Unreachable+        synInstrToStruct _ (PlainInstr Nop) = return S.Nop+        synInstrToStruct ctx (PlainInstr (Br labelIdx)) =+            S.Br <$> unwrapLabel ctx labelIdx+        synInstrToStruct ctx (PlainInstr (BrIf labelIdx)) =+            S.BrIf <$> unwrapLabel ctx labelIdx+        synInstrToStruct ctx (PlainInstr (BrTable lbls lbl)) = do+            labels <- mapM (unwrapLabel ctx) lbls+            S.BrTable labels <$> unwrapLabel ctx lbl+        synInstrToStruct _ (PlainInstr Return) = return S.Return+        synInstrToStruct FunCtx { ctxMod } (PlainInstr (Call funIdx)) =+            case getFuncIndex ctxMod funIdx of+                Just idx -> return $ S.Call idx+                Nothing -> Left "unknown function"+        synInstrToStruct FunCtx { ctxMod = Module { types } } (PlainInstr (CallIndirect typeUse)) =+            case getTypeIndex types typeUse of+                Just idx -> return $ S.CallIndirect idx+                Nothing -> Left "unknown type"+        synInstrToStruct _ (PlainInstr Drop) = return $ S.Drop+        synInstrToStruct _ (PlainInstr Select) = return $ S.Select+        synInstrToStruct ctx (PlainInstr (GetLocal localIdx)) =+            case getLocalIndex ctx localIdx of+                Just idx -> return $ S.GetLocal idx+                Nothing -> Left "unknown local"+        synInstrToStruct ctx (PlainInstr (SetLocal localIdx)) =+            case getLocalIndex ctx localIdx of+                Just idx -> return $ S.SetLocal idx+                Nothing -> Left "unknown local"+        synInstrToStruct ctx (PlainInstr (TeeLocal localIdx)) =+            case getLocalIndex ctx localIdx of+                Just idx -> return $ S.TeeLocal idx+                Nothing -> Left "unknown local"+        synInstrToStruct FunCtx { ctxMod } (PlainInstr (GetGlobal globalIdx)) =+            case getGlobalIndex ctxMod globalIdx of+                Just idx -> return $ S.GetGlobal idx+                Nothing -> Left "unknown global"+        synInstrToStruct FunCtx { ctxMod } (PlainInstr (SetGlobal globalIdx)) =+            case getGlobalIndex ctxMod globalIdx of+                Just idx -> return $ S.SetGlobal idx+                Nothing -> Left "unknown global"+        synInstrToStruct _ (PlainInstr (I32Load memArg)) = return $ S.I32Load memArg+        synInstrToStruct _ (PlainInstr (I64Load memArg)) = return $ S.I64Load memArg+        synInstrToStruct _ (PlainInstr (F32Load memArg)) = return $ S.F32Load memArg+        synInstrToStruct _ (PlainInstr (F64Load memArg)) = return $ S.F64Load memArg+        synInstrToStruct _ (PlainInstr (I32Load8S memArg)) = return $ S.I32Load8S memArg+        synInstrToStruct _ (PlainInstr (I32Load8U memArg)) = return $ S.I32Load8U memArg+        synInstrToStruct _ (PlainInstr (I32Load16S memArg)) = return $ S.I32Load16S memArg+        synInstrToStruct _ (PlainInstr (I32Load16U memArg)) = return $ S.I32Load16U memArg+        synInstrToStruct _ (PlainInstr (I64Load8S memArg)) = return $ S.I64Load8S memArg+        synInstrToStruct _ (PlainInstr (I64Load8U memArg)) = return $ S.I64Load8U memArg+        synInstrToStruct _ (PlainInstr (I64Load16S memArg)) = return $ S.I64Load16S memArg+        synInstrToStruct _ (PlainInstr (I64Load16U memArg)) = return $ S.I64Load16U memArg+        synInstrToStruct _ (PlainInstr (I64Load32S memArg)) = return $ S.I64Load32S memArg+        synInstrToStruct _ (PlainInstr (I64Load32U memArg)) = return $ S.I64Load32U memArg+        synInstrToStruct _ (PlainInstr (I32Store memArg)) = return $ S.I32Store memArg+        synInstrToStruct _ (PlainInstr (I64Store memArg)) = return $ S.I64Store memArg+        synInstrToStruct _ (PlainInstr (F32Store memArg)) = return $ S.F32Store memArg+        synInstrToStruct _ (PlainInstr (F64Store memArg)) = return $ S.F64Store memArg+        synInstrToStruct _ (PlainInstr (I32Store8 memArg)) = return $ S.I32Store8 memArg+        synInstrToStruct _ (PlainInstr (I32Store16 memArg)) = return $ S.I32Store16 memArg+        synInstrToStruct _ (PlainInstr (I64Store8 memArg)) = return $ S.I64Store8 memArg+        synInstrToStruct _ (PlainInstr (I64Store16 memArg)) = return $ S.I64Store16 memArg+        synInstrToStruct _ (PlainInstr (I64Store32 memArg)) = return $ S.I64Store32 memArg+        synInstrToStruct _ (PlainInstr CurrentMemory) = return $ S.CurrentMemory+        synInstrToStruct _ (PlainInstr GrowMemory) = return $ S.GrowMemory+        synInstrToStruct _ (PlainInstr (I32Const val)) = return $ S.I32Const $ integerToWord32 val+        synInstrToStruct _ (PlainInstr (I64Const val)) = return $ S.I64Const $ integerToWord64 val+        synInstrToStruct _ (PlainInstr (F32Const val)) = return $ S.F32Const val+        synInstrToStruct _ (PlainInstr (F64Const val)) = return $ S.F64Const val+        synInstrToStruct _ (PlainInstr (IUnOp sz op)) = return $ S.IUnOp sz op+        synInstrToStruct _ (PlainInstr (IBinOp sz op)) = return $ S.IBinOp sz op+        synInstrToStruct _ (PlainInstr I32Eqz) = return $ S.I32Eqz+        synInstrToStruct _ (PlainInstr I64Eqz) = return $ S.I64Eqz+        synInstrToStruct _ (PlainInstr (IRelOp sz op)) = return $ S.IRelOp sz op+        synInstrToStruct _ (PlainInstr (FUnOp sz op)) = return $ S.FUnOp sz op+        synInstrToStruct _ (PlainInstr (FBinOp sz op)) = return $ S.FBinOp sz op+        synInstrToStruct _ (PlainInstr (FRelOp sz op)) = return $ S.FRelOp sz op+        synInstrToStruct _ (PlainInstr I32WrapI64) = return $ S.I32WrapI64+        synInstrToStruct _ (PlainInstr (ITruncFU sz sz')) = return $ S.ITruncFU sz sz'+        synInstrToStruct _ (PlainInstr (ITruncFS sz sz')) = return $ S.ITruncFS sz sz'+        synInstrToStruct _ (PlainInstr I64ExtendSI32) = return $ S.I64ExtendSI32+        synInstrToStruct _ (PlainInstr I64ExtendUI32) = return $ S.I64ExtendUI32+        synInstrToStruct _ (PlainInstr (FConvertIU sz sz')) = return $ S.FConvertIU sz sz'+        synInstrToStruct _ (PlainInstr (FConvertIS sz sz')) = return $ S.FConvertIS sz sz'+        synInstrToStruct _ (PlainInstr F32DemoteF64) = return $ S.F32DemoteF64+        synInstrToStruct _ (PlainInstr F64PromoteF32) = return $ S.F64PromoteF32+        synInstrToStruct _ (PlainInstr (IReinterpretF sz)) = return $ S.IReinterpretF sz+        synInstrToStruct _ (PlainInstr (FReinterpretI sz)) = return $ S.FReinterpretI sz+        synInstrToStruct ctx BlockInstr {label, resultType, body} =+            let ctx' = ctx { ctxLabels = label : ctxLabels ctx } in+            S.Block resultType <$> mapM (synInstrToStruct ctx') body+        synInstrToStruct ctx LoopInstr {label, resultType, body} =+            let ctx' = ctx { ctxLabels = label : ctxLabels ctx } in+            S.Loop resultType <$> mapM (synInstrToStruct ctx') body+        synInstrToStruct ctx IfInstr {label, resultType, trueBranch, falseBranch} = do+            let ctx' = ctx { ctxLabels = label : ctxLabels ctx }+            trueBranch' <- mapM (synInstrToStruct ctx') trueBranch+            falseBranch' <- mapM (synInstrToStruct ctx') falseBranch+            return $ S.If resultType trueBranch' falseBranch'+        +        synFunctionToStruct :: Module -> Function -> Either String S.Function+        synFunctionToStruct mod Function { funcType, locals, body } = do+            typeIdx <- (+                    case getTypeIndex (types mod) funcType of+                        Just idx -> Right idx+                        Nothing -> Left "Type was not found or type signature doesn't match with type"+                )+            -- we have to use local func params declaration,+            -- coz it can contain own names for them+            let+                params = case funcType of+                    IndexedTypeUse _ (Just FuncType { params }) -> params+                    AnonimousTypeUse FuncType { params } -> params+                    _ ->+                        if fromIntegral typeIdx < length (types mod)+                        then let TypeDef _ FuncType { params } = types mod !! fromIntegral typeIdx in params+                        else []+            let ctx = FunCtx mod [] locals params+            instructions <- mapM (synInstrToStruct ctx) body+            return S.Function {+                S.funcType = typeIdx,+                S.localTypes = map localType locals,+                S.body = instructions+            }++        extractFunction :: [Function] -> ModuleField -> [Function]+        extractFunction funcs (MFFunc fun) = fun : funcs+        extractFunction funcs _ = funcs++        getLabelIdx :: FunCtx -> LabelIndex -> Maybe Natural+        getLabelIdx FunCtx { ctxLabels } (Named id) =+            fromIntegral <$> findIndex (\ident -> ident == Just id) ctxLabels+        getLabelIdx FunCtx { ctxLabels } (Index idx) =+            Just idx+        +        getLocalIndex :: FunCtx -> LabelIndex -> Maybe Natural+        getLocalIndex FunCtx {ctxParams, ctxLocals} (Named id) =+            case findIndex (\(ParamType ident _) -> ident == Just id) ctxParams of+                Just idx -> return $ fromIntegral idx+                Nothing ->+                    let isIdent (LocalType ident _) = ident == Just id in+                    fromIntegral . (+ length ctxParams) <$> findIndex isIdent ctxLocals+        getLocalIndex FunCtx {ctxParams, ctxLocals} (Index idx) = Just idx+        +        isFuncImport :: Import -> Bool+        isFuncImport Import { desc = ImportFunc _ _ } = True+        isFuncImport _ = False++        getFuncIndex :: Module -> FuncIndex -> Maybe Natural+        getFuncIndex Module { imports, functions } (Named id) =+            let funImports = filter isFuncImport imports in+            case findIndex (\(Import { desc = ImportFunc ident _ }) -> ident == Just id) funImports of+                Just idx -> return $ fromIntegral idx+                Nothing ->+                    let isIdent (Function { ident }) = ident == Just id in+                    fromIntegral . (+ length funImports) <$> findIndex isIdent functions+        getFuncIndex Module { imports, functions } (Index idx) = Just idx++        -- tables+        synTableToStruct :: Table -> S.Table+        synTableToStruct (Table _ _ tableType) = S.Table tableType++        extractTable :: [Table] -> ModuleField -> [Table]+        extractTable tables (MFTable table) = table : tables+        extractTable tables _ = tables++        isTableImport :: Import -> Bool+        isTableImport Import { desc = ImportTable _ _ } = True+        isTableImport _ = False++        getTableIndex :: Module -> TableIndex -> Maybe Natural+        getTableIndex Module { imports, tables } (Named id) =+            let tableImports = filter isTableImport imports in+            case findIndex (\(Import { desc = ImportTable ident _ }) -> ident == Just id) tableImports of+                Just idx -> return $ fromIntegral idx+                Nothing ->+                    let isIdent (Table _ (Just id) _) = True in+                    fromIntegral . (+ length tableImports) <$> findIndex isIdent tables+        getTableIndex Module { imports, tables } (Index idx) = Just idx++        -- memory+        synMemoryToStruct :: Memory -> S.Memory+        synMemoryToStruct (Memory _ _ limits) = S.Memory limits++        extractMemory :: [Memory] -> ModuleField -> [Memory]+        extractMemory mems (MFMem mem) = mem : mems+        extractMemory mems _ = mems++        isMemImport :: Import -> Bool+        isMemImport Import { desc = ImportMemory _ _ } = True+        isMemImport _ = False++        getMemIndex :: Module -> MemoryIndex -> Maybe Natural+        getMemIndex Module { imports, mems } (Named id) =+            let memImports = filter isMemImport imports in+            case findIndex (\(Import { desc = ImportMemory ident _ }) -> ident == Just id) memImports of+                Just idx -> return $ fromIntegral idx+                Nothing ->+                    let isIdent (Memory _ (Just id) _) = True in+                    fromIntegral . (+ length memImports) <$> findIndex isIdent mems+        getMemIndex Module { imports, mems } (Index idx) = Just idx++        -- global+        synGlobalToStruct :: Module -> Global -> Either String S.Global+        synGlobalToStruct mod Global { globalType, initializer } =+            let ctx = FunCtx mod [] [] [] in+            S.Global globalType <$> mapM (synInstrToStruct ctx) initializer++        extractGlobal :: [Global] -> ModuleField -> [Global]+        extractGlobal globals (MFGlobal global) = global : globals+        extractGlobal globals _ = globals++        isGlobalImport :: Import -> Bool+        isGlobalImport Import { desc = ImportGlobal _ _ } = True+        isGlobalImport _ = False++        getGlobalIndex :: Module -> GlobalIndex -> Maybe Natural+        getGlobalIndex Module { imports, globals } (Named id) =+            let globalImports = filter isGlobalImport imports in+            case findIndex (\(Import { desc = ImportGlobal ident _ }) -> ident == Just id) globalImports of+                Just idx -> return $ fromIntegral idx+                Nothing ->+                    let isIdent (Global { ident }) = ident == Just id in+                    fromIntegral . (+ length globalImports) <$> findIndex isIdent globals+        getGlobalIndex Module { imports, globals } (Index idx) = Just idx++        -- elem segment+        synElemToStruct :: Module -> ElemSegment -> Either String S.ElemSegment+        synElemToStruct mod ElemSegment { tableIndex, offset, funcIndexes } =+            let ctx = FunCtx mod [] [] [] in+            let offsetInstrs = mapM (synInstrToStruct ctx) offset in+            let idx = fromJust $ getTableIndex mod tableIndex in+            let indexes = map (fromJust . getFuncIndex mod) funcIndexes in+            S.ElemSegment idx <$> offsetInstrs <*> return indexes++        extractElemSegment :: [ElemSegment] -> ModuleField -> [ElemSegment]+        extractElemSegment elems (MFElem elem) = elem : elems+        extractElemSegment elems _ = elems++        -- data segment+        synDataToStruct :: Module -> DataSegment -> Either String S.DataSegment+        synDataToStruct mod DataSegment { memIndex, offset, datastring } =+            let ctx = FunCtx mod [] [] [] in+            let offsetInstrs = mapM (synInstrToStruct ctx) offset in+            let idx = fromJust $ getMemIndex mod memIndex in+            S.DataSegment idx <$> offsetInstrs <*> return datastring++        extractDataSegment :: [DataSegment] -> ModuleField -> [DataSegment]+        extractDataSegment datas (MFData dataSegment) = dataSegment : datas+        extractDataSegment datas _ = datas++        -- start+        synStartToStruct :: Module -> StartFunction -> S.StartFunction+        synStartToStruct mod (StartFunction funIdx) =+            S.StartFunction $ fromJust $ getFuncIndex mod funIdx+        +        extractStart :: [ModuleField] -> Maybe StartFunction+        extractStart = foldl' extractStart' Nothing++        extractStart' :: Maybe StartFunction -> ModuleField -> Maybe StartFunction+        extractStart' _ (MFStart start) = Just start+        extractStart' start _ = start++        -- exports+        extractExports :: Module -> [ModuleField] -> [ModuleField]+        extractExports mod mf =+            let initial = (funcImportLength, globImportLength, memImportLength, tableImportLength, []) in+            let (_, _, _, _, result) = foldl' extractExport initial mf in+            reverse result+            where+                funcImportLength = fromIntegral $ length $ filter isFuncImport $ imports mod+                globImportLength = fromIntegral $ length $ filter isGlobalImport $ imports mod+                memImportLength = fromIntegral $ length $ filter isMemImport $ imports mod+                tableImportLength = fromIntegral $ length $ filter isTableImport $ imports mod++                extractExport (fidx, gidx, midx, tidx, mf) (MFFunc fun@Function{ exportFuncAs }) =+                    let exports = map (\name -> MFExport $ Export name $ ExportFunc $ Index fidx) exportFuncAs in+                    (fidx + 1, gidx, midx, tidx, [MFFunc fun] ++ exports ++ mf)+                extractExport (fidx, gidx, midx, tidx, mf) (MFGlobal glob@Global{ exportGlobalAs }) =+                    let exports = map (\name -> MFExport $ Export name $ ExportGlobal $ Index gidx) exportGlobalAs in+                    (fidx, gidx + 1, midx, tidx, [MFGlobal glob] ++ exports ++ mf)+                extractExport (fidx, gidx, midx, tidx, mf) (MFMem (Memory exps i l)) =+                    let exports = map (\name -> MFExport $ Export name $ ExportMemory $ Index midx) exps in+                    (fidx, gidx, midx + 1, tidx, [MFMem (Memory exps i l)] ++ exports ++ mf)+                extractExport (fidx, gidx, midx, tidx, mf) (MFTable (Table exps i t)) =+                    let exports = map (\name -> MFExport $ Export name $ ExportTable $ Index tidx) exps in+                    (fidx, gidx, midx, tidx + 1, [MFTable (Table exps i t)] ++ exports ++ mf)+                extractExport (fidx, gidx, midx, tidx, mf) f = (fidx, gidx, midx, tidx, f:mf)+ +        synExportsToStruct :: Module -> [ModuleField] -> [S.Export]+        synExportsToStruct mod (MFExport Export { name, desc = ExportFunc idx } : rest) =+            let exp = S.Export name $ S.ExportFunc $ fromJust $ getFuncIndex mod idx in+            exp : synExportsToStruct mod rest+        synExportsToStruct mod (MFExport Export { name, desc = ExportTable idx } : rest) =+            let exp = S.Export name $ S.ExportTable $ fromJust $ getTableIndex mod idx in+            exp : synExportsToStruct mod rest+        synExportsToStruct mod (MFExport Export { name, desc = ExportMemory idx } : rest) =+            let exp = S.Export name $ S.ExportMemory $ fromJust $ getMemIndex mod idx in+            exp : synExportsToStruct mod rest+        synExportsToStruct mod (MFExport Export { name, desc = ExportGlobal idx } : rest) =+            let exp = S.Export name $ S.ExportGlobal $ fromJust $ getGlobalIndex mod idx in+            exp : synExportsToStruct mod rest+        synExportsToStruct mod (_ : rest) = synExportsToStruct mod rest+        synExportsToStruct _ [] = []+}
+ src/Language/Wasm/Script.hs view
@@ -0,0 +1,252 @@+{-# LANGUAGE OverloadedStrings #-}+module Language.Wasm.Script (+    runScript,+    OnAssertFail+) where++import qualified Data.Map as Map+import qualified Data.Vector as Vector+import qualified Data.Text.Lazy as TL+import qualified Data.Text.Lazy.Encoding as TLEncoding+import Numeric.IEEE (identicalIEEE)+import qualified Control.DeepSeq as DeepSeq+import Data.Maybe (fromJust, isNothing)++import Language.Wasm.Parser (+        Ident(..),+        Script,+        ModuleDef(..),+        Command(..),+        Action(..),+        Assertion(..)+    )++import qualified Language.Wasm.Interpreter as Interpreter+import qualified Language.Wasm.Validate as Validate+import qualified Language.Wasm.Structure as Struct+import qualified Language.Wasm.Parser as Parser+import qualified Language.Wasm.Lexer as Lexer+import qualified Language.Wasm.Binary as Binary++type OnAssertFail = String -> Assertion -> IO ()++data ScriptState = ScriptState {+    store :: Interpreter.Store,+    lastModule :: Maybe Interpreter.ModuleInstance,+    modules :: Map.Map TL.Text Interpreter.ModuleInstance,+    moduleRegistery :: Map.Map TL.Text Interpreter.ModuleInstance+}++emptyState :: ScriptState+emptyState = ScriptState {+    store = Interpreter.emptyStore,+    lastModule = Nothing,+    modules = Map.empty,+    moduleRegistery = Map.empty+}++runScript :: OnAssertFail -> Script -> IO ()+runScript onAssertFail script = do+    (globI32, globF32, globF64) <- hostGlobals+    (st, inst) <- Interpreter.makeHostModule Interpreter.emptyStore [+            ("print", hostPrint []),+            ("print_i32", hostPrint [Struct.I32]),+            ("print_i32_f32", hostPrint [Struct.I32, Struct.F32]),+            ("print_f64_f64", hostPrint [Struct.F64, Struct.F64]),+            ("print_f32", hostPrint [Struct.F32]),+            ("print_f64", hostPrint [Struct.F64]),+            ("global_i32", globI32),+            ("global_f32", globF32),+            ("global_f64", globF64),+            ("memory", Interpreter.HostMemory $ Struct.Limit 1 (Just 2)),+            ("table", Interpreter.HostTable $ Struct.Limit 10 (Just 20))+        ]+    go script $ emptyState { store = st, moduleRegistery = Map.singleton "spectest" inst }+    where+        hostPrint paramTypes = Interpreter.HostFunction (Struct.FuncType paramTypes []) (\args -> return [])+        hostGlobals = do+            globI32 <- Interpreter.makeMutGlobal $ Interpreter.VI32 666+            globF32 <- Interpreter.makeMutGlobal $ Interpreter.VF32 666+            globF64 <- Interpreter.makeMutGlobal $ Interpreter.VF64 666+            return (Interpreter.HostGlobal globI32, Interpreter.HostGlobal globF32, Interpreter.HostGlobal globF64)++        go [] _ = return ()+        go (c:cs) st = runCommand st c >>= go cs+        +        addToRegistery :: TL.Text -> Maybe Ident -> ScriptState -> ScriptState+        addToRegistery name i st =+            case getModule st i of+                Just m -> st { moduleRegistery = Map.insert name m $ moduleRegistery st }+                Nothing -> error $ "Cannot register module with identifier '" ++ show i  ++ "'. No such module"++        addToStore :: Maybe Ident -> Interpreter.ModuleInstance -> ScriptState -> ScriptState+        addToStore (Just (Ident ident)) m st = st { modules = Map.insert ident m $ modules st }+        addToStore Nothing _ st = st++        buildImports :: ScriptState -> Interpreter.Imports+        buildImports st =+            Map.fromList $ concat $ map toImports $ Map.toList $ moduleRegistery st+            where+                toImports :: (TL.Text, Interpreter.ModuleInstance) -> [((TL.Text, TL.Text), Interpreter.ExternalValue)]+                toImports (modName, mod) = map (asImport modName) $ Vector.toList $ Interpreter.exports mod+                asImport :: TL.Text -> Interpreter.ExportInstance -> ((TL.Text, TL.Text), Interpreter.ExternalValue)+                asImport modName (Interpreter.ExportInstance name val) = ((modName, name), val)++        addModule :: Maybe Ident -> Struct.Module -> ScriptState -> IO ScriptState+        addModule ident m st =+            case Validate.validate m of+                Right m -> do+                    res <- Interpreter.instantiate (store st) (buildImports st) m+                    case res of+                        Right (modInst, store') -> return $ addToStore ident modInst $ st { lastModule = Just modInst, store = store' }+                        Left reason -> error $ "Module instantiation failed dut to invalid module with reason: " ++ show reason+                Left reason -> error $ "Module instantiation failed dut to invalid module with reason: " ++ show reason+        +        getModule :: ScriptState -> Maybe Ident -> Maybe Interpreter.ModuleInstance+        getModule st (Just (Ident i)) = Map.lookup i (modules st)+        getModule st Nothing = lastModule st++        asArg :: Struct.Expression -> Interpreter.Value+        asArg [Struct.I32Const v] = Interpreter.VI32 v+        asArg [Struct.F32Const v] = Interpreter.VF32 v+        asArg [Struct.I64Const v] = Interpreter.VI64 v+        asArg [Struct.F64Const v] = Interpreter.VF64 v+        asArg _                   = error "Only const instructions supported as arguments for actions"++        runAction :: ScriptState -> Action -> IO (Maybe [Interpreter.Value])+        runAction st (Invoke ident name args) = do+            case getModule st ident of+                Just m -> Interpreter.invokeExport (store st) m name $ map asArg args+                Nothing -> error $ "Cannot invoke function on module with identifier '" ++ show ident  ++ "'. No such module"+        runAction st (Get ident name) = do+            case getModule st ident of+                Just m -> Interpreter.getGlobalValueByName (store st) m name >>= return . Just . (: [])+                Nothing -> error $ "Cannot invoke function on module with identifier '" ++ show ident  ++ "'. No such module"++        isValueEqual :: Interpreter.Value -> Interpreter.Value -> Bool+        isValueEqual (Interpreter.VI32 v1) (Interpreter.VI32 v2) = v1 == v2+        isValueEqual (Interpreter.VI64 v1) (Interpreter.VI64 v2) = v1 == v2+        isValueEqual (Interpreter.VF32 v1) (Interpreter.VF32 v2) = identicalIEEE v1 v2+        isValueEqual (Interpreter.VF64 v1) (Interpreter.VF64 v2) = identicalIEEE v1 v2+        isValueEqual _ _ = False++        isNaNReturned :: ScriptState -> Action -> Assertion -> IO ()+        isNaNReturned st action assert = do+            result <- runAction st action+            case result of+                Just [Interpreter.VF32 v] ->+                    if isNaN v+                    then return ()+                    else onAssertFail ("Expected NaN, but action returned " ++ show v) assert+                Just [Interpreter.VF64 v] ->+                    if isNaN v+                    then return ()+                    else onAssertFail ("Expected NaN, but action returned " ++ show v) assert+                _ -> onAssertFail ("Expected NaN, but action returned " ++ show result) assert+        +        buildModule :: ModuleDef -> (Maybe Ident, Struct.Module)+        buildModule (RawModDef ident m) = (ident, m)+        buildModule (TextModDef ident textRep) =+            let Right m = Lexer.scanner (TLEncoding.encodeUtf8 textRep) >>= Parser.parseModule in+            (ident, m)+        buildModule (BinaryModDef ident binaryRep) =+            let Right m = Binary.decodeModuleLazy binaryRep in+            (ident, m)++        checkModuleInvalid :: Struct.Module -> IO ()+        checkModuleInvalid _ = return ()++        getFailureString :: Validate.ValidationError -> [TL.Text]+        getFailureString (Validate.TypeMismatch _ _) = ["type mismatch"]+        getFailureString Validate.ResultTypeDoesntMatch = ["type mismatch"]+        getFailureString Validate.MoreThanOneMemory = ["multiple memories"]+        getFailureString Validate.MoreThanOneTable = ["multiple tables"]+        getFailureString Validate.LocalIndexOutOfRange = ["unknown local"]+        getFailureString Validate.MemoryIndexOutOfRange = ["unknown memory", "unknown memory 0"]+        getFailureString Validate.TableIndexOutOfRange = ["unknown table", "unknown table 0"]+        getFailureString Validate.FunctionIndexOutOfRange = ["unknown function", "unknown function 0"]+        getFailureString Validate.GlobalIndexOutOfRange = ["unknown global"]+        getFailureString Validate.LabelIndexOutOfRange = ["unknown label"]+        getFailureString Validate.TypeIndexOutOfRange = ["unknown type"]+        getFailureString Validate.MinMoreThanMaxInMemoryLimit = ["size minimum must not be greater than maximum"]+        getFailureString Validate.MemoryLimitExceeded = ["memory size must be at most 65536 pages (4GiB)"]+        getFailureString Validate.AlignmentOverflow = ["alignment", "alignment must not be larger than natural"]+        getFailureString (Validate.DuplicatedExportNames _) = ["duplicate export name"]+        getFailureString Validate.InvalidConstantExpr = ["constant expression required"]+        getFailureString Validate.InvalidResultArity = ["invalid result arity"]+        getFailureString Validate.GlobalIsImmutable = ["global is immutable"]+        getFailureString Validate.ImportedGlobalIsNotConst = ["mutable globals cannot be imported"]+        getFailureString Validate.ExportedGlobalIsNotConst = ["mutable globals cannot be exported"]+        getFailureString Validate.InvalidStartFunctionType = ["start function"]+        getFailureString r = [TL.concat ["not implemented ", (TL.pack $ show r)]]++        runAssert :: ScriptState -> Assertion -> IO ()+        runAssert st assert@(AssertReturn action expected) = do+            result <- runAction st action+            case result of+                Just result -> do+                    if length result == length expected && (all id $ zipWith isValueEqual result (map asArg expected))+                    then return ()+                    else onAssertFail ("Expected " ++ show (map asArg expected) ++ ", but action returned " ++ show result) assert+                Nothing -> onAssertFail ("Expected " ++ show (map asArg expected) ++ ", but action returned Trap") assert+        runAssert st assert@(AssertReturnCanonicalNaN action) = isNaNReturned st action assert+        runAssert st assert@(AssertReturnArithmeticNaN action) = isNaNReturned st action assert+        runAssert st assert@(AssertInvalid moduleDef failureString) =+            let (_, m) = buildModule moduleDef in+            case Validate.validate m of+                Right _ -> onAssertFail "Invalid module pass validation" assert+                Left reason ->+                    if failureString `elem` getFailureString reason+                    then return ()+                    else+                        let msg = "Module invalid for other reason. Expected "+                                ++ show failureString+                                ++ ", but actual is "+                                ++ show (getFailureString reason)+                        in onAssertFail msg assert+        runAssert st assert@(AssertMalformed (TextModDef _ textRep) failureString) =+            case DeepSeq.force $ Lexer.scanner (TLEncoding.encodeUtf8 textRep) >>= Parser.parseModule of+                Right _ -> onAssertFail ("Module parsing should fail with failure string " ++ show failureString) assert+                Left _ -> return ()+        runAssert st assert@(AssertMalformed (BinaryModDef ident binaryRep) failureString) =+            case Binary.decodeModuleLazy binaryRep of+                Right _ -> onAssertFail ("Module decoding should fail with failure string " ++ show failureString) assert+                Left _ -> return ()+        runAssert st assert@(AssertMalformed (RawModDef _ _) failureString) = return ()+        runAssert st assert@(AssertUnlinkable moduleDef failureString) =+            let (_, m) = buildModule moduleDef in+            case Validate.validate m of+                Right m -> do+                    res <- Interpreter.instantiate (store st) (buildImports st) m+                    case res of+                        Left err -> return ()+                        Right _ -> onAssertFail ("Module linking should fail with failure string " ++ show failureString) assert+                Left reason -> error $ "Module linking failed dut to invalid module with reason: " ++ show reason+        runAssert st assert@(AssertTrap (Left action) failureString) = do+            result <- runAction st action+            if isNothing result+            then return ()+            else onAssertFail ("Expected trap, but action returned " ++ show (fromJust result)) assert+        runAssert st assert@(AssertTrap (Right moduleDef) failureString) =+            let (_, m) = buildModule moduleDef in+            case Validate.validate m of+                Right m -> do+                    res <- Interpreter.instantiate (store st) (buildImports st) m+                    case res of+                        Left "Start function terminated with trap" -> return ()+                        _ -> onAssertFail ("Module linking should fail with trap during execution of a start function") assert+                Left reason -> error $ "Module linking failed dut to invalid module with reason: " ++ show reason+        runAssert st assert@(AssertExhaustion action failureString) = do+            result <- runAction st action+            if isNothing result+            then return ()+            else onAssertFail ("Expected exhaustion, but action returned " ++ show (fromJust result)) assert++        runCommand :: ScriptState -> Command -> IO ScriptState+        runCommand st (ModuleDef moduleDef) =+            let (ident, m) = buildModule moduleDef in+            addModule ident m st+        runCommand st (Register name i) = return $ addToRegistery name i st+        runCommand st (Action action) = runAction st action >> return st+        runCommand st (Assertion assertion) = runAssert st assertion >> return st+        runCommand st _ = return st
+ src/Language/Wasm/Structure.hs view
@@ -0,0 +1,284 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveAnyClass #-}++module Language.Wasm.Structure (+    Module(..),+    DataSegment(..),+    ElemSegment(..),+    StartFunction(..),+    Export(..),+    ExportDesc(..),+    Table(..),+    Memory(..),+    Global(..),+    Function(..),+    Import(..),+    ImportDesc(..),+    Instruction(..),+    MemArg(..),+    IUnOp(..),+    IBinOp(..),+    IRelOp(..),+    FUnOp(..),+    FBinOp(..),+    FRelOp(..),+    BitSize(..),+    TableType(..),+    ElemType(..),+    Limit(..),+    GlobalType(..),+    FuncType(..),+    ValueType(..),+    ResultType,+    Expression,+    LabelIndex,+    LocalIndex,+    GlobalIndex,+    emptyModule,+    isFuncImport,+    isTableImport,+    isMemImport,+    isGlobalImport+) where++import Numeric.Natural (Natural)+import Data.Word (Word32, Word64)+import qualified Data.ByteString.Lazy as LBS+import qualified Data.Text.Lazy as TL+import Control.DeepSeq (NFData)+import GHC.Generics (Generic)++data BitSize = BS32 | BS64 deriving (Show, Eq, Generic, NFData)++data IUnOp = IClz | ICtz | IPopcnt deriving (Show, Eq, Generic, NFData)++data IBinOp =+    IAdd+    | ISub+    | IMul+    | IDivU+    | IDivS+    | IRemU+    | IRemS+    | IAnd+    | IOr+    | IXor+    | IShl+    | IShrU+    | IShrS+    | IRotl+    | IRotr+    deriving (Show, Eq, Generic, NFData)++data IRelOp = IEq | INe | ILtU | ILtS | IGtU | IGtS | ILeU | ILeS | IGeU | IGeS deriving (Show, Eq, Generic, NFData)++data FUnOp = FAbs | FNeg | FCeil | FFloor | FTrunc | FNearest | FSqrt deriving (Show, Eq, Generic, NFData)++data FBinOp = FAdd | FSub | FMul | FDiv | FMin | FMax | FCopySign deriving (Show, Eq, Generic, NFData)++data FRelOp = FEq | FNe | FLt | FGt | FLe | FGe deriving (Show, Eq, Generic, NFData)++data MemArg = MemArg { offset :: Natural, align :: Natural } deriving (Show, Eq, Generic, NFData)++type LabelIndex = Natural+type FuncIndex = Natural+type TypeIndex = Natural+type LocalIndex = Natural+type GlobalIndex = Natural+type MemoryIndex = Natural+type TableIndex = Natural++data ValueType =+    I32+    | I64+    | F32+    | F64+    deriving (Show, Eq, Generic, NFData)++type ResultType = [ValueType]+type ParamsType = [ValueType]+type LocalsType = [ValueType]++data FuncType = FuncType { params :: ParamsType, results :: ResultType } deriving (Show, Eq, Generic, NFData)++data Instruction index =+    -- Control instructions+    Unreachable+    | Nop+    | Block { resultType :: ResultType, body :: Expression }+    | Loop { resultType :: ResultType, body :: Expression }+    | If { resultType :: ResultType, true :: Expression, false :: Expression }+    | Br index+    | BrIf index+    | BrTable [index] index+    | Return+    | Call index+    | CallIndirect index+    -- Parametric instructions+    | Drop+    | Select+    -- Variable instructions+    | GetLocal index+    | SetLocal index+    | TeeLocal index+    | GetGlobal index+    | SetGlobal index+    -- Memory instructions+    | I32Load MemArg+    | I64Load MemArg+    | F32Load MemArg+    | F64Load MemArg+    | I32Load8S MemArg+    | I32Load8U MemArg+    | I32Load16S MemArg+    | I32Load16U MemArg+    | I64Load8S MemArg+    | I64Load8U MemArg+    | I64Load16S MemArg+    | I64Load16U MemArg+    | I64Load32S MemArg+    | I64Load32U MemArg+    | I32Store MemArg+    | I64Store MemArg+    | F32Store MemArg+    | F64Store MemArg+    | I32Store8 MemArg+    | I32Store16 MemArg+    | I64Store8 MemArg+    | I64Store16 MemArg+    | I64Store32 MemArg+    | CurrentMemory+    | GrowMemory+    -- Numeric instructions+    | I32Const Word32+    | I64Const Word64+    | F32Const Float+    | F64Const Double+    | IUnOp BitSize IUnOp+    | IBinOp BitSize IBinOp+    | I32Eqz+    | I64Eqz+    | IRelOp BitSize IRelOp+    | FUnOp BitSize FUnOp+    | FBinOp BitSize FBinOp+    | FRelOp BitSize FRelOp+    | I32WrapI64+    | ITruncFU {- Int Size -} BitSize {- Float Size -} BitSize+    | ITruncFS {- Int Size -} BitSize {- Float Size -} BitSize+    | I64ExtendSI32+    | I64ExtendUI32+    | FConvertIU {- Float Size -} BitSize {- Int Size -} BitSize+    | FConvertIS {- Float Size -} BitSize {- Int Size -} BitSize+    | F32DemoteF64+    | F64PromoteF32+    | IReinterpretF BitSize+    | FReinterpretI BitSize+    deriving (Show, Eq, Generic, NFData)++type Expression = [Instruction Natural]++data Function = Function {+    funcType :: TypeIndex,+    localTypes :: LocalsType,+    body :: Expression+} deriving (Show, Eq, Generic, NFData)++data Limit = Limit Natural (Maybe Natural) deriving (Show, Eq, Generic, NFData)++data ElemType = AnyFunc deriving (Show, Eq, Generic, NFData)++data TableType = TableType Limit ElemType deriving (Show, Eq, Generic, NFData)++data Table = Table TableType deriving (Show, Eq, Generic, NFData)++data Memory = Memory Limit deriving (Show, Eq, Generic, NFData)++data GlobalType = Const ValueType | Mut ValueType deriving (Show, Eq, Generic, NFData)++data Global = Global {+    globalType :: GlobalType,+    initializer :: Expression+} deriving (Show, Eq, Generic, NFData)++data ElemSegment = ElemSegment {+    tableIndex :: TableIndex,+    offset :: Expression,+    funcIndexes :: [FuncIndex]+} deriving (Show, Eq, Generic, NFData)++data DataSegment = DataSegment {+    memIndex :: MemoryIndex,+    offset :: Expression,+    chunk :: LBS.ByteString+} deriving (Show, Eq, Generic, NFData)++data StartFunction = StartFunction FuncIndex deriving (Show, Eq, Generic, NFData)++data ExportDesc =+    ExportFunc FuncIndex+    | ExportTable TableIndex+    | ExportMemory MemoryIndex+    | ExportGlobal GlobalIndex+    deriving (Show, Eq, Generic, NFData)++data Export = Export {+    name :: TL.Text,+    desc :: ExportDesc+} deriving (Show, Eq, Generic, NFData)++data ImportDesc =+    ImportFunc TypeIndex+    | ImportTable TableType+    | ImportMemory Limit+    | ImportGlobal GlobalType+    deriving (Show, Eq, Generic, NFData)++data Import = Import {+    sourceModule :: TL.Text,+    name :: TL.Text,+    desc :: ImportDesc+} deriving (Show, Eq, Generic, NFData)++isFuncImport :: Import -> Bool+isFuncImport (Import _ _ (ImportFunc _)) = True+isFuncImport _ = False++isTableImport :: Import -> Bool+isTableImport (Import _ _ (ImportTable _)) = True+isTableImport _ = False++isMemImport :: Import -> Bool+isMemImport (Import _ _ (ImportMemory _)) = True+isMemImport _ = False++isGlobalImport :: Import -> Bool+isGlobalImport (Import _ _ (ImportGlobal _)) = True+isGlobalImport _ = False++data Module = Module {+    types :: [FuncType],+    functions :: [Function],+    tables :: [Table],+    mems :: [Memory],+    globals :: [Global],+    elems :: [ElemSegment],+    datas :: [DataSegment],+    start :: Maybe StartFunction,+    imports :: [Import],+    exports :: [Export]+} deriving (Show, Eq, Generic, NFData)++emptyModule :: Module+emptyModule = Module {+    types = [],+    functions = [],+    tables = [],+    mems = [],+    globals = [],+    elems = [],+    datas = [],+    start = Nothing,+    imports = [],+    exports = []+}
+ src/Language/Wasm/Validate.hs view
@@ -0,0 +1,651 @@+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE FlexibleInstances #-}++module Language.Wasm.Validate (+    ValidationError(..),+    ValidationResult(..),+    validate,+    isValid,+    ValidModule,+    getModule+) where++import Language.Wasm.Structure+import qualified Data.Set as Set+import Data.List (foldl')+import qualified Data.Text.Lazy as TL+import Data.Maybe (fromMaybe, maybeToList, catMaybes)+import Data.Monoid ((<>))+import Numeric.Natural (Natural)++import Control.Monad (foldM)+import Control.Monad.Reader (ReaderT, runReaderT, withReaderT, ask)+import Control.Monad.Except (Except, runExcept, throwError)++import Debug.Trace as Debug++data ValidationError =+    DuplicatedExportNames [String]+    | InvalidTableType+    | MinMoreThanMaxInMemoryLimit+    | MemoryLimitExceeded+    | AlignmentOverflow+    | MoreThanOneMemory+    | MoreThanOneTable+    | FunctionIndexOutOfRange+    | TableIndexOutOfRange+    | MemoryIndexOutOfRange+    | LocalIndexOutOfRange+    | GlobalIndexOutOfRange+    | LabelIndexOutOfRange+    | TypeIndexOutOfRange+    | ResultTypeDoesntMatch+    | TypeMismatch { actual :: Arrow, expected :: Arrow }+    | InvalidResultArity+    | InvalidConstantExpr+    | InvalidStartFunctionType+    | ImportedGlobalIsNotConst+    | ExportedGlobalIsNotConst+    | GlobalIsImmutable+    deriving (Show, Eq)++type ValidationResult = Either ValidationError ()++instance Monoid ValidationResult where+    mempty = Right ()+    mappend (Right ()) vr = vr+    mappend vr (Right ()) = vr+    mappend vr _ = vr++isValid :: ValidationResult -> Bool+isValid (Right ()) = True+isValid (Left reason) = Debug.trace ("Module mismatched with reason " ++ show reason) $ False++type Validator = Module -> ValidationResult++data VType =+    Val ValueType+    | Var+    | Any+    deriving (Show, Eq)++type End = [VType]++empty :: [ValueType]+empty = []++class ToEnd a where+    toEnd :: a -> [VType]++instance ToEnd VType where+    toEnd val = [val]++instance ToEnd ValueType where+    toEnd val = [Val val]++instance ToEnd [ValueType] where+    toEnd = map Val++instance ToEnd [VType] where+    toEnd = id++data Arrow = Arrow End End deriving (Show, Eq)++(==>) :: (ToEnd a, ToEnd b) => a -> b -> Arrow+(==>) a b = Arrow (toEnd a) (toEnd b)++asArrow :: FuncType -> Arrow+asArrow (FuncType params results) = Arrow (map Val params) (map Val results)++isArrowMatch :: Arrow -> Arrow -> Bool+isArrowMatch (f `Arrow` t) ( f' `Arrow` t') = isEndMatch f f' && isEndMatch t t'+    where+        isEndMatch :: End -> End -> Bool+        isEndMatch (Any:l) (Any:r) =+            let (leftTail, rightTail) = unzip $ zip (takeWhile (/= Any) $ reverse l) (takeWhile (/= Any) $ reverse r) in+            isEndMatch (reverse leftTail) (reverse rightTail)+        isEndMatch (Any:l) r =+            let (leftTail, rightTail) = unzip $ zip (takeWhile (/= Any) $ reverse l) (takeWhile (/= Any) $ reverse r) in+            isEndMatch (reverse leftTail) (reverse rightTail)+        isEndMatch l (Any:r) =+            let (leftTail, rightTail) = unzip $ zip (takeWhile (/= Any) $ reverse l) (takeWhile (/= Any) $ reverse r) in+            isEndMatch (reverse leftTail) (reverse rightTail)+        isEndMatch (Var:l) (x:r) =+            let subst = replace Var x in+            isEndMatch (subst l) (subst r)+        isEndMatch (x:l) (Var:r) =+            let subst = replace Var x in+            isEndMatch (subst l) (subst r)+        isEndMatch (Val v:l) (Val v':r) = v == v' && isEndMatch l r+        isEndMatch [] [] = True+        isEndMatch _ _ = False++data Ctx = Ctx {+    types :: [FuncType],+    funcs :: [FuncType],+    tables :: [TableType],+    mems :: [Limit],+    globals :: [GlobalType],+    locals :: [ValueType],+    labels :: [Maybe ValueType],+    returns :: Maybe ValueType,+    importedGlobals :: Natural+} deriving (Show, Eq)++type Checker = ReaderT Ctx (Except ValidationError)++freshVar :: Checker VType+freshVar = return Var++runChecker :: Ctx -> Checker a -> Either ValidationError a+runChecker ctx = runExcept . flip runReaderT ctx++(!?) :: [a] -> Natural -> Maybe a+(!?) (x:_) 0 = Just x+(!?) (_:rest) n = rest !? (n - 1)+(!?) [] _ = Nothing++safeHead :: [a] -> Maybe a+safeHead (x: _) = Just x+safeHead [] = Nothing++maybeToEither :: ValidationError -> Maybe a -> Checker a+maybeToEither _ (Just a) = return a+maybeToEither l Nothing = throwError l++asType :: GlobalType -> VType+asType (Const v) = Val v+asType (Mut v) = Val v++shouldBeMut :: GlobalType -> Checker ()+shouldBeMut (Mut _) = return ()+shouldBeMut (Const v) = throwError GlobalIsImmutable++getLabel :: LabelIndex -> Checker (Maybe ValueType)+getLabel lbl = do+    Ctx { labels } <- ask+    case labels !? lbl of+        Nothing -> throwError LabelIndexOutOfRange+        Just v -> return v++withLabel :: [ValueType] -> Checker a -> Checker a+withLabel result = withReaderT (\ctx -> ctx { labels = safeHead result : labels ctx })++isMemArgValid :: Int -> MemArg -> Checker ()+isMemArgValid sizeInBytes MemArg { align } = if 2 ^ align <= sizeInBytes then return () else throwError AlignmentOverflow++checkMemoryInstr :: Int -> MemArg -> Checker ()+checkMemoryInstr size memarg = do+    isMemArgValid size memarg+    Ctx { mems } <- ask +    if length mems < 1 then throwError MemoryIndexOutOfRange else return ()++getInstrType :: Instruction Natural -> Checker Arrow+getInstrType Unreachable = return $ Any ==> Any+getInstrType Nop = return $ empty ==> empty+getInstrType Block { resultType, body } = do+    let blockType = empty ==> resultType+    t <- withLabel resultType $ getExpressionType body+    if isArrowMatch t blockType+    then return $ empty ==> resultType+    else throwError $ TypeMismatch t blockType+getInstrType Loop { resultType, body } = do+    let blockType = empty ==> resultType+    t <- withLabel [] $ getExpressionType body+    if isArrowMatch t blockType+    then return $ empty ==> resultType+    else throwError $ TypeMismatch t blockType+getInstrType If { resultType, true, false } = do+    let blockType = empty ==> resultType+    l <- withLabel resultType $ getExpressionType true+    r <- withLabel resultType $ getExpressionType false+    if isArrowMatch l blockType+    then (if isArrowMatch r blockType then (return $ I32 ==> resultType) else (throwError $ TypeMismatch r blockType))+    else throwError $ TypeMismatch l blockType+getInstrType (Br lbl) = do+    r <- map Val . maybeToList <$> getLabel lbl+    return $ (Any : r) ==> Any+getInstrType (BrIf lbl) = do+    r <- map Val . maybeToList <$> getLabel lbl+    return $ (r ++ [Val I32]) ==> r+getInstrType (BrTable lbls lbl) = do+    r <- getLabel lbl+    rs <- mapM getLabel lbls+    if all (== r) rs+    then return $ ([Any] ++ (map Val $ maybeToList r) ++ [Val I32]) ==> Any+    else throwError ResultTypeDoesntMatch+getInstrType Return = do+    Ctx { returns } <- ask+    return $ (Any : (map Val $ maybeToList returns)) ==> Any+getInstrType (Call fun) = do+    Ctx { funcs } <- ask+    maybeToEither FunctionIndexOutOfRange $ asArrow <$> funcs !? fun+getInstrType (CallIndirect sign) = do+    Ctx { types, tables } <- ask+    if length tables < 1+    then throwError TableIndexOutOfRange+    else do+        Arrow from to <- maybeToEither TypeIndexOutOfRange $ asArrow <$> types !? sign+        return $ (from ++ [Val I32]) ==> to+getInstrType Drop = do+    var <- freshVar+    return $ var ==> empty+getInstrType Select = do+    var <- freshVar+    return $ [var, var, Val I32] ==> var+getInstrType (GetLocal local) = do+    Ctx { locals }  <- ask+    t <- maybeToEither LocalIndexOutOfRange $ locals !? local+    return $ empty ==> Val t+getInstrType (SetLocal local) = do+    Ctx { locals } <- ask+    t <- maybeToEither LocalIndexOutOfRange $ locals !? local+    return $ Val t ==> empty+getInstrType (TeeLocal local) = do+    Ctx { locals } <- ask+    t <- maybeToEither LocalIndexOutOfRange $ locals !? local+    return $ Val t ==> Val t+getInstrType (GetGlobal global) = do+    Ctx { globals } <- ask+    t <- maybeToEither GlobalIndexOutOfRange $ asType <$> globals !? global+    return $ empty ==> t+getInstrType (SetGlobal global) = do+    Ctx { globals } <- ask+    t <- maybeToEither GlobalIndexOutOfRange $ asType <$> globals !? global+    shouldBeMut $ globals !! fromIntegral global+    return $ t ==> empty+getInstrType (I32Load memarg) = do+    checkMemoryInstr 4 memarg+    return $ I32 ==> I32+getInstrType (I64Load memarg) = do+    checkMemoryInstr 8 memarg+    return $ I32 ==> I64+getInstrType (F32Load memarg) = do+    checkMemoryInstr 4 memarg+    return $ I32 ==> F32+getInstrType (F64Load memarg) = do+    checkMemoryInstr 8 memarg+    return $ I32 ==> F64+getInstrType (I32Load8S memarg) = do+    checkMemoryInstr 1 memarg+    return $ I32 ==> I32+getInstrType (I32Load8U memarg) = do+    checkMemoryInstr 1 memarg+    return $ I32 ==> I32+getInstrType (I32Load16S memarg) = do+    checkMemoryInstr 2 memarg+    return $ I32 ==> I32+getInstrType (I32Load16U memarg) = do+    checkMemoryInstr 2 memarg+    return $ I32 ==> I32+getInstrType (I64Load8S memarg) = do+    checkMemoryInstr 1 memarg+    return $ I32 ==> I64+getInstrType (I64Load8U memarg) = do+    checkMemoryInstr 1 memarg+    return $ I32 ==> I64+getInstrType (I64Load16S memarg) = do+    checkMemoryInstr 2 memarg+    return $ I32 ==> I64+getInstrType (I64Load16U memarg) = do+    checkMemoryInstr 2 memarg+    return $ I32 ==> I64+getInstrType (I64Load32S memarg) = do+    checkMemoryInstr 4 memarg+    return $ I32 ==> I64+getInstrType (I64Load32U memarg) = do+    checkMemoryInstr 8 memarg+    return $ I32 ==> I64+getInstrType (I32Store memarg) = do+    checkMemoryInstr 4 memarg+    return $ [I32, I32] ==> empty+getInstrType (I64Store memarg) = do+    checkMemoryInstr 8 memarg+    return $ [I32, I64] ==> empty+getInstrType (F32Store memarg) = do+    checkMemoryInstr 4 memarg+    return $ [I32, F32] ==> empty+getInstrType (F64Store memarg) = do+    checkMemoryInstr 8 memarg+    return $ [I32, F64] ==> empty+getInstrType (I32Store8 memarg) = do+    checkMemoryInstr 1 memarg+    return $ [I32, I32] ==> empty+getInstrType (I32Store16 memarg) = do+    checkMemoryInstr 2 memarg+    return $ [I32, I32] ==> empty+getInstrType (I64Store8 memarg) = do+    checkMemoryInstr 1 memarg+    return $ [I32, I64] ==> empty+getInstrType (I64Store16 memarg) = do+    checkMemoryInstr 2 memarg+    return $ [I32, I64] ==> empty+getInstrType (I64Store32 memarg) = do+    checkMemoryInstr 4 memarg+    return $ [I32, I64] ==> empty+getInstrType CurrentMemory = do+    Ctx { mems } <- ask +    if length mems < 1 then throwError MemoryIndexOutOfRange else return $ empty ==> I32+getInstrType GrowMemory = do+    Ctx { mems } <- ask +    if length mems < 1 then throwError MemoryIndexOutOfRange else return $ I32 ==> I32+getInstrType (I32Const _) = return $ empty ==> I32+getInstrType (I64Const _) = return $ empty ==> I64+getInstrType (F32Const _) = return $ empty ==> F32+getInstrType (F64Const _) = return $ empty ==> F64+getInstrType (IUnOp BS32 _) = return $ I32 ==> I32+getInstrType (IUnOp BS64 _) = return $ I64 ==> I64+getInstrType (IBinOp BS32 _) = return $ [I32, I32] ==> I32+getInstrType (IBinOp BS64 _) = return $ [I64, I64] ==> I64+getInstrType I32Eqz = return $ I32 ==> I32+getInstrType I64Eqz = return $ I64 ==> I32+getInstrType (IRelOp BS32 _) = return $ [I32, I32] ==> I32+getInstrType (IRelOp BS64 _) = return $ [I64, I64] ==> I32+getInstrType (FUnOp BS32 _) = return $ F32 ==> F32+getInstrType (FUnOp BS64 _) = return $ F64 ==> F64+getInstrType (FBinOp BS32 _) = return $ [F32, F32] ==> F32+getInstrType (FBinOp BS64 _) = return $ [F64, F64] ==> F64+getInstrType (FRelOp BS32 _) = return $ [F32, F32] ==> I32+getInstrType (FRelOp BS64 _) = return $ [F64, F64] ==> I32+getInstrType I32WrapI64 = return $ I64 ==> I32+getInstrType (ITruncFU BS32 BS32) = return $ F32 ==> I32+getInstrType (ITruncFU BS32 BS64) = return $ F64 ==> I32+getInstrType (ITruncFU BS64 BS32) = return $ F32 ==> I64+getInstrType (ITruncFU BS64 BS64) = return $ F64 ==> I64+getInstrType (ITruncFS BS32 BS32) = return $ F32 ==> I32+getInstrType (ITruncFS BS32 BS64) = return $ F64 ==> I32+getInstrType (ITruncFS BS64 BS32) = return $ F32 ==> I64+getInstrType (ITruncFS BS64 BS64) = return $ F64 ==> I64+getInstrType I64ExtendSI32 = return $ I32 ==> I64+getInstrType I64ExtendUI32 = return $ I32 ==> I64+getInstrType (FConvertIU BS32 BS32) = return $ I32 ==> F32+getInstrType (FConvertIU BS32 BS64) = return $ I64 ==> F32+getInstrType (FConvertIU BS64 BS32) = return $ I32 ==> F64+getInstrType (FConvertIU BS64 BS64) = return $ I64 ==> F64+getInstrType (FConvertIS BS32 BS32) = return $ I32 ==> F32+getInstrType (FConvertIS BS32 BS64) = return $ I64 ==> F32+getInstrType (FConvertIS BS64 BS32) = return $ I32 ==> F64+getInstrType (FConvertIS BS64 BS64) = return $ I64 ==> F64+getInstrType F32DemoteF64 = return $ F64 ==> F32+getInstrType F64PromoteF32 = return $ F32 ==> F64+getInstrType (IReinterpretF BS32) = return $ F32 ==> I32+getInstrType (IReinterpretF BS64) = return $ F64 ==> I64+getInstrType (FReinterpretI BS32) = return $ I32 ==> F32+getInstrType (FReinterpretI BS64) = return $ I64 ==> F64+++replace :: (Eq a) => a -> a -> [a] -> [a]+replace _ _ [] = []+replace x y (v:r) = (if x == v then y else v) : replace x y r++getExpressionType :: Expression -> Checker Arrow+getExpressionType = fmap ([] `Arrow`) . foldM go []+    where+        go :: [VType] -> Instruction Natural -> Checker [VType]+        go stack instr = do+            (f `Arrow` t) <- getInstrType instr+            matchStack stack (reverse f) t+        +        matchStack :: [VType] -> [VType] -> [VType] -> Checker [VType]+        matchStack stack@(Any:_) _arg res = return $ res ++ stack+        matchStack (Val v:stack) (Val v':args) res =+            if v == v'+            then matchStack stack args res+            else throwError $ TypeMismatch ((reverse $ Val v':args) `Arrow` res) ([] `Arrow` (Val v:stack))+        matchStack _ (Any:_) res = return $ res+        matchStack (Val v:stack) (Var:args) res =+            let subst = replace Var (Val v) in+            matchStack stack (subst args) (subst res)+        matchStack stack [] res = return $ res ++ stack+        matchStack [] args res = throwError $ TypeMismatch ((reverse args) `Arrow` res) ([] `Arrow` [])+        matchStack _ _ _ = error "inconsistent checker state"++isConstExpression :: Expression -> Checker ()+isConstExpression [] = return ()+isConstExpression ((I32Const _):rest) = isConstExpression rest+isConstExpression ((I64Const _):rest) = isConstExpression rest+isConstExpression ((F32Const _):rest) = isConstExpression rest+isConstExpression ((F64Const _):rest) = isConstExpression rest+isConstExpression ((GetGlobal idx):rest) = do+    Ctx {globals, importedGlobals} <- ask+    if importedGlobals <= idx+        then throwError GlobalIndexOutOfRange+        else return ()+    case globals !! fromIntegral idx of+        Const _ -> isConstExpression rest+        Mut _ -> throwError InvalidConstantExpr+isConstExpression _ = throwError InvalidConstantExpr++getFuncTypes :: Module -> [FuncType]+getFuncTypes Module {types, functions, imports} =+    let funImports = catMaybes $ map getFuncType imports in+    funImports ++ map ((types !!) . fromIntegral . funcType) functions+    where+        getFuncType (Import _ _ (ImportFunc typeIdx)) = Just $ types !! (fromIntegral typeIdx)+        getFuncType _ = Nothing++ctxFromModule :: [ValueType] -> [Maybe ValueType] -> Maybe ValueType -> Module -> Ctx+ctxFromModule locals labels returns m@Module {types, tables, mems, globals, imports} =+    let tableImports = catMaybes $ map getTableType imports in+    let memsImports = catMaybes $ map getMemType imports in+    let globalImports = catMaybes $ map getGlobalType imports in+    Ctx {+        types,+        funcs = getFuncTypes m,+        tables = tableImports ++ map (\(Table t) -> t) tables,+        mems = memsImports ++ map (\(Memory l) -> l) mems,+        globals = globalImports ++ map (\(Global g _) -> g) globals,+        locals,+        labels,+        returns,+        importedGlobals = fromIntegral $ length globalImports+    }+    where+        getTableType (Import _ _ (ImportTable tableType)) = Just tableType+        getTableType _ = Nothing++        getMemType (Import _ _ (ImportMemory lim)) = Just lim+        getMemType _ = Nothing++        getGlobalType (Import _ _ (ImportGlobal gl)) = Just gl+        getGlobalType _ = Nothing++isFunctionValid :: Function -> Validator+isFunctionValid Function {funcType, localTypes = locals, body} mod@Module {types} =+    if fromIntegral funcType < length types+    then+        let FuncType params results = types !! fromIntegral funcType in+        if length results > 1+        then Left InvalidResultArity+        else do+            let r = safeHead results+            let ctx = ctxFromModule (params ++ locals) [r] r mod+            arr <- runChecker ctx $ getExpressionType body+            if isArrowMatch arr (empty ==> results)+            then return ()+            else Left $ TypeMismatch arr (empty ==> results)+    else Left TypeIndexOutOfRange++functionsShouldBeValid :: Validator+functionsShouldBeValid mod@Module {functions} =+    foldMap (flip isFunctionValid mod) functions++tablesShouldBeValid :: Validator+tablesShouldBeValid Module { imports, tables } =+    let tableImports = filter isTableImport imports in+    let res = foldMap (\Import { desc = ImportTable t } -> isValidTableType t) tableImports in+    let res' = foldl' (\r (Table t) -> r <> isValidTableType t) res tables in+    if length tableImports + length tables <= 1+        then res'+        else Left MoreThanOneTable+    where+        isValidTableType :: TableType -> ValidationResult+        isValidTableType (TableType (Limit min max) _) =+            if min <= fromMaybe min max+            then return ()+            else Left InvalidTableType++memoryShouldBeValid :: Validator+memoryShouldBeValid Module { imports, mems } =+    let memImports = filter isMemImport imports in+    let res = foldMap (\Import { desc = ImportMemory l } -> isValidLimit l) memImports in+    let res' = foldl' (\r (Memory l) -> r <> isValidLimit l) res mems in+    if length memImports + length mems <= 1+        then res'+        else Left MoreThanOneMemory+    where+        isValidLimit :: Limit -> ValidationResult+        isValidLimit (Limit min max) =+            let minMax = if min <= fromMaybe min max then return () else Left MinMoreThanMaxInMemoryLimit in+            let maxLim = if fromMaybe min max <= 65536 then return () else Left MemoryLimitExceeded in+            minMax <> maxLim++globalsShouldBeValid :: Validator+globalsShouldBeValid m@Module { imports, globals } =+    let ctx = ctxFromModule [] [] Nothing m in+    foldMap (isGlobalValid ctx) globals+    where+        getGlobalType :: GlobalType -> ValueType+        getGlobalType (Const vt) = vt+        getGlobalType (Mut vt) = vt++        isGlobalValid :: Ctx -> Global -> ValidationResult+        isGlobalValid ctx (Global gt init) = runChecker ctx $ do+            isConstExpression init+            t <- getExpressionType init+            let expected = empty ==> getGlobalType gt+            if isArrowMatch expected t then return () else throwError $ TypeMismatch t expected++elemsShouldBeValid :: Validator+elemsShouldBeValid m@Module { elems, functions, tables, imports } =+    let ctx = ctxFromModule [] [] Nothing m in+    foldMap (isElemValid ctx) elems+    where+        isElemValid :: Ctx -> ElemSegment -> ValidationResult+        isElemValid ctx (ElemSegment tableIdx offset funs) =+            let check = runChecker ctx $ do+                    isConstExpression offset+                    t <- getExpressionType offset+                    if isArrowMatch (empty ==> I32) t+                    then return ()+                    else throwError $ TypeMismatch t (empty ==> I32) +            in+            let tableImports = filter isTableImport imports in+            let isTableIndexValid =+                    if tableIdx < (fromIntegral $ length tableImports + length tables)+                    then return ()+                    else Left TableIndexOutOfRange+            in+            let funImports = filter isFuncImport imports in+            let funsLength = fromIntegral $ length functions + length funImports in+            let isFunsValid = foldMap (\i -> if i < funsLength then return () else Left FunctionIndexOutOfRange) funs in+            check <> isFunsValid <> isTableIndexValid++datasShouldBeValid :: Validator+datasShouldBeValid m@Module { datas, mems, imports } =+    let ctx = ctxFromModule [] [] Nothing m in+    foldMap (isDataValid ctx) datas+    where+        isDataValid :: Ctx -> DataSegment -> ValidationResult+        isDataValid ctx (DataSegment memIdx offset _) =+            let check = runChecker ctx $ do+                    isConstExpression offset+                    t <- getExpressionType offset+                    if isArrowMatch (empty ==> I32) t+                    then return ()+                    else throwError $ TypeMismatch t (empty ==> I32) +            in+            let memImports = filter isMemImport imports in+            if memIdx < (fromIntegral $ length memImports + length mems)+            then check+            else Left MemoryIndexOutOfRange++startShouldBeValid :: Validator+startShouldBeValid Module { start = Nothing } = return ()+startShouldBeValid m@Module { start = Just (StartFunction idx) } =+    let types = getFuncTypes m in+    let i = fromIntegral idx in+    if length types > i+    then if FuncType [] [] == types !! i then return () else Left InvalidStartFunctionType+    else Left FunctionIndexOutOfRange++exportsShouldBeValid :: Validator+exportsShouldBeValid Module { exports, imports, functions, mems, tables, globals } =+    areExportNamesUnique <> foldMap isExportValid exports+    where+        funcImports = filter isFuncImport imports+        tableImports = filter isTableImport imports+        memImports = filter isMemImport imports+        globalImports = filter isGlobalImport imports++        isExportValid :: Export -> ValidationResult+        isExportValid (Export _ (ExportFunc funIdx)) =+            if fromIntegral funIdx < length funcImports + length functions then return () else Left FunctionIndexOutOfRange+        isExportValid (Export _ (ExportTable tableIdx)) =+            if fromIntegral tableIdx < length tableImports + length tables then return () else Left TableIndexOutOfRange+        isExportValid (Export _ (ExportMemory memIdx)) =+            if fromIntegral memIdx < length memImports + length mems then return () else Left MemoryIndexOutOfRange+        isExportValid (Export _ (ExportGlobal globalIdx)) =+            if fromIntegral globalIdx < length globalImports + length globals+            then (+                if fromIntegral globalIdx >= length globalImports+                then (+                    case globals !! (fromIntegral globalIdx - length globalImports) of+                        (Global (Mut _) _) -> Left ExportedGlobalIsNotConst+                        _ -> return ()+                )+                else return ()+            )+            else Left GlobalIndexOutOfRange++        areExportNamesUnique :: ValidationResult+        areExportNamesUnique =+            case foldl' go (Set.empty, []) exports of+                (_, []) -> return ()+                (_, dup) -> Left $ DuplicatedExportNames dup+            where+                go :: (Set.Set TL.Text, [String]) -> Export -> (Set.Set TL.Text, [String])+                go (set, dup) (Export name _) =+                    if Set.member name set+                    then (set, show name : dup)+                    else (Set.insert name set, dup)++importsShouldBeValid :: Validator+importsShouldBeValid Module { imports, types } =+    foldMap isImportValid imports+    where+        isImportValid :: Import -> ValidationResult+        isImportValid (Import _ _ (ImportFunc typeIdx)) =+            if fromIntegral typeIdx < length types+            then return ()+            else Left TypeIndexOutOfRange+        isImportValid (Import _ _ (ImportTable _)) = return () -- checked in tables section+        isImportValid (Import _ _ (ImportMemory _)) = return () -- checked in mems section+        isImportValid (Import _ _ (ImportGlobal (Const _))) = return ()+        isImportValid (Import _ _ (ImportGlobal (Mut _))) = Left ImportedGlobalIsNotConst++typesShouldBeValid :: Validator+typesShouldBeValid Module { types } = foldMap isTypeValid types+    where+        isTypeValid :: FuncType -> ValidationResult+        isTypeValid FuncType { results } = if length results <= 1 then return () else Left InvalidResultArity++newtype ValidModule = ValidModule { getModule :: Module } deriving (Show, Eq)++validate :: Module -> Either ValidationError ValidModule+validate mod = const (ValidModule mod) <$> foldMap ($ mod) validators+    where+        validators :: [Validator]+        validators = [+                typesShouldBeValid,+                functionsShouldBeValid,+                tablesShouldBeValid,+                memoryShouldBeValid,+                globalsShouldBeValid,+                elemsShouldBeValid,+                datasShouldBeValid,+                startShouldBeValid,+                exportsShouldBeValid,+                importsShouldBeValid+            ]
+ tests/Test.hs view
@@ -0,0 +1,23 @@+{-# LANGUAGE OverloadedStrings #-}+module Main (+  main+) where++import Test.Tasty+import Test.Tasty.HUnit++import qualified System.Directory as Directory++import qualified Data.ByteString.Lazy as LBS++import qualified Language.Wasm as Wasm+import qualified Language.Wasm.Script as Script++main :: IO ()+main = do+  files <- Directory.listDirectory "tests/samples"+  scriptTestCases <- (`mapM` files) $ \file -> do+    Right script <- Wasm.parseScript <$> LBS.readFile ("tests/samples/" ++ file)+    return $ testCase file $ do+      Script.runScript (\msg assert -> assertFailure ("Failed assert: " ++ msg ++ ". Assert " ++ show assert)) script+  defaultMain $ testGroup "Wasm Core Test Suit" scriptTestCases
+ wasm.cabal view
@@ -0,0 +1,98 @@+name:           wasm+version:        1.0.0+author:         Ilya Rezvov+maintainer:     Ilya Rezvov <rezvov.ilya@gmail.com>+license:        MIT+license-file:   LICENSE+category:       Compilers/Interpreters+homepage:       https://github.com/SPY/haskell-wasm/+bug-reports:    https://github.com/SPY/haskell-wasm/issues+synopsis:       WebAssembly Language Toolkit and Interpreter+description:    This package contains fully spec-compatible tooling for WebAssembly.+                Features include:+                .+                * WebAssembly Text Representation Parser+                .+                * WebAssembly Binary Representation encoder and decoder+                .+                * Spec-compatible Module validator (checked with Spec Core Test Suite)+                .+                * Spec-compatible Interpreter (checked with Spec Core Test Suite)+                .+                * Extended scipting grammar parser and executor+                .+                * WebAssembly Module building eDSL+build-type:     Simple+cabal-version:  >= 1.10++extra-source-files:+    src/Language/Wasm/Lexer.x+    src/Language/Wasm/Parser.y++library+  hs-source-dirs:+      src+  ghc-options: -Wwarn -fwarn-incomplete-patterns -fwarn-unused-imports+  build-depends:+      array >=0.5 && <0.6+    , base >=4.6 && <5.0+    , bytestring >=0.10+    , containers >=0.5 && <0.6+    , mtl >=2.2 && <3.0+    , text >=1.1+    , transformers >=0.4 && <0.6+    , utf8-string >=1.0+    , cereal >= 0.5+    , vector >= 0.12+    , ieee754 >= 0.8+    , deepseq >= 1.4+  build-tools:+      alex >=3.1.3+    , happy >=1.9.4+  exposed-modules:+      Language.Wasm.Lexer+      Language.Wasm.Parser+      Language.Wasm.Structure+      Language.Wasm.Binary+      Language.Wasm.Validate+      Language.Wasm.Interpreter+      Language.Wasm.Script+      Language.Wasm.FloatUtils+      Language.Wasm.Builder+      Language.Wasm+  other-modules:+      Paths_wasm+  default-language: Haskell2010++executable wasm+  main-is: Main.hs+  hs-source-dirs: exec+  build-depends:+      base >=4.6 && <5.0+    , wasm+    , optparse-applicative >= 0.14+    , bytestring >=0.10 && <0.11+    , base64-bytestring >= 1.0+  default-language: Haskell2010++test-suite test+  type: exitcode-stdio-1.0+  main-is: Test.hs+  hs-source-dirs:+      tests+  build-depends:+      base >=4.6 && <5.0+    , bytestring >=0.10 && <0.11+    , filepath >=1.3 && <1.5+    , directory >= 1.3+    , mtl ==2.2.1+    , tasty >=0.7+    , tasty-hunit >=0.4.1 && <0.10+    , text >=1.1 && <1.3+    , wasm+  build-tools:+      alex >=3.1.3+    , happy >=1.9.4+  other-modules:+      Paths_wasm+  default-language: Haskell2010