From ccb780361f8dead147ebeece032adf83bfd22ad8 Mon Sep 17 00:00:00 2001 From: bringert Date: Mon, 5 Dec 2005 16:44:56 +0000 Subject: [PATCH] Added tuple expressions and patterns. --- src/Transfer/Syntax/Abs.hs | 156 ++++++----- src/Transfer/Syntax/Doc.tex | 16 +- src/Transfer/Syntax/Par.hs | 470 ++++++++++++++++++---------------- src/Transfer/Syntax/Par.y | 20 +- src/Transfer/Syntax/Print.hs | 12 +- src/Transfer/Syntax/Skel.hs | 20 +- src/Transfer/Syntax/Syntax.cf | 19 +- src/Transfer/SyntaxToCore.hs | 14 +- transfer/TODO | 2 - 9 files changed, 407 insertions(+), 322 deletions(-) diff --git a/src/Transfer/Syntax/Abs.hs b/src/Transfer/Syntax/Abs.hs index 334a1d469..d8307eaa0 100644 --- a/src/Transfer/Syntax/Abs.hs +++ b/src/Transfer/Syntax/Abs.hs @@ -18,8 +18,8 @@ data Guard_ type Guard = Tree Guard_ data Pattern_ type Pattern = Tree Pattern_ -data PListElem_ -type PListElem = Tree PListElem_ +data CommaPattern_ +type CommaPattern = Tree CommaPattern_ data FieldPattern_ type FieldPattern = Tree FieldPattern_ data Exp_ @@ -54,13 +54,15 @@ data Tree :: * -> * where PConsTop :: Ident -> Pattern -> [Pattern] -> Tree Pattern_ PCons :: Ident -> [Pattern] -> Tree Pattern_ PRec :: [FieldPattern] -> Tree Pattern_ - PList :: [PListElem] -> Tree Pattern_ + PEmptyList :: Tree Pattern_ + PList :: [CommaPattern] -> Tree Pattern_ + PTuple :: CommaPattern -> [CommaPattern] -> Tree Pattern_ PType :: Tree Pattern_ PStr :: String -> Tree Pattern_ PInt :: Integer -> Tree Pattern_ PVar :: Ident -> Tree Pattern_ PWild :: Tree Pattern_ - PListElem :: Pattern -> Tree PListElem_ + CommaPattern :: Pattern -> Tree CommaPattern_ FieldPattern :: Ident -> Pattern -> Tree FieldPattern_ EPi :: VarOrWild -> Exp -> Exp -> Tree Exp_ EPiNoVar :: Exp -> Exp -> Tree Exp_ @@ -90,7 +92,9 @@ data Tree :: * -> * where EProj :: Exp -> Ident -> Tree Exp_ ERecType :: [FieldType] -> Tree Exp_ ERec :: [FieldValue] -> Tree Exp_ + EEmptyList :: Tree Exp_ EList :: [Exp] -> Tree Exp_ + ETuple :: Exp -> [Exp] -> Tree Exp_ EVar :: Ident -> Tree Exp_ EType :: Tree Exp_ EStr :: String -> Tree Exp_ @@ -134,9 +138,10 @@ composOpM f t = case t of PConsTop i pattern patterns -> return PConsTop `ap` f i `ap` f pattern `ap` mapM f patterns PCons i patterns -> return PCons `ap` f i `ap` mapM f patterns PRec fieldpatterns -> return PRec `ap` mapM f fieldpatterns - PList plistelems -> return PList `ap` mapM f plistelems + PList commapatterns -> return PList `ap` mapM f commapatterns + PTuple commapattern commapatterns -> return PTuple `ap` f commapattern `ap` mapM f commapatterns PVar i -> return PVar `ap` f i - PListElem pattern -> return PListElem `ap` f pattern + CommaPattern pattern -> return CommaPattern `ap` f pattern FieldPattern i pattern -> return FieldPattern `ap` f i `ap` f pattern EPi varorwild exp0 exp1 -> return EPi `ap` f varorwild `ap` f exp0 `ap` f exp1 EPiNoVar exp0 exp1 -> return EPiNoVar `ap` f exp0 `ap` f exp1 @@ -167,6 +172,7 @@ composOpM f t = case t of ERecType fieldtypes -> return ERecType `ap` mapM f fieldtypes ERec fieldvalues -> return ERec `ap` mapM f fieldvalues EList exps -> return EList `ap` mapM f exps + ETuple exp exps -> return ETuple `ap` f exp `ap` mapM f exps EVar i -> return EVar `ap` f i VVar i -> return VVar `ap` f i LetDef i exp0 exp1 -> return LetDef `ap` f i `ap` f exp0 `ap` f exp1 @@ -192,9 +198,10 @@ composOpFold zero combine f t = case t of PConsTop i pattern patterns -> f i `combine` f pattern `combine` foldr combine zero (map f patterns) PCons i patterns -> f i `combine` foldr combine zero (map f patterns) PRec fieldpatterns -> foldr combine zero (map f fieldpatterns) - PList plistelems -> foldr combine zero (map f plistelems) + PList commapatterns -> foldr combine zero (map f commapatterns) + PTuple commapattern commapatterns -> f commapattern `combine` foldr combine zero (map f commapatterns) PVar i -> f i - PListElem pattern -> f pattern + CommaPattern pattern -> f pattern FieldPattern i pattern -> f i `combine` f pattern EPi varorwild exp0 exp1 -> f varorwild `combine` f exp0 `combine` f exp1 EPiNoVar exp0 exp1 -> f exp0 `combine` f exp1 @@ -225,6 +232,7 @@ composOpFold zero combine f t = case t of ERecType fieldtypes -> foldr combine zero (map f fieldtypes) ERec fieldvalues -> foldr combine zero (map f fieldvalues) EList exps -> foldr combine zero (map f exps) + ETuple exp exps -> f exp `combine` foldr combine zero (map f exps) EVar i -> f i VVar i -> f i LetDef i exp0 exp1 -> f i `combine` f exp0 `combine` f exp1 @@ -251,13 +259,15 @@ instance Show (Tree c) where PConsTop i pattern patterns -> opar n . showString "PConsTop" . showChar ' ' . showsPrec 1 i . showChar ' ' . showsPrec 1 pattern . showChar ' ' . showsPrec 1 patterns . cpar n PCons i patterns -> opar n . showString "PCons" . showChar ' ' . showsPrec 1 i . showChar ' ' . showsPrec 1 patterns . cpar n PRec fieldpatterns -> opar n . showString "PRec" . showChar ' ' . showsPrec 1 fieldpatterns . cpar n - PList plistelems -> opar n . showString "PList" . showChar ' ' . showsPrec 1 plistelems . cpar n + PEmptyList -> showString "PEmptyList" + PList commapatterns -> opar n . showString "PList" . showChar ' ' . showsPrec 1 commapatterns . cpar n + PTuple commapattern commapatterns -> opar n . showString "PTuple" . showChar ' ' . showsPrec 1 commapattern . showChar ' ' . showsPrec 1 commapatterns . cpar n PType -> showString "PType" PStr str -> opar n . showString "PStr" . showChar ' ' . showsPrec 1 str . cpar n PInt n -> opar n . showString "PInt" . showChar ' ' . showsPrec 1 n . cpar n PVar i -> opar n . showString "PVar" . showChar ' ' . showsPrec 1 i . cpar n PWild -> showString "PWild" - PListElem pattern -> opar n . showString "PListElem" . showChar ' ' . showsPrec 1 pattern . cpar n + CommaPattern pattern -> opar n . showString "CommaPattern" . showChar ' ' . showsPrec 1 pattern . cpar n FieldPattern i pattern -> opar n . showString "FieldPattern" . showChar ' ' . showsPrec 1 i . showChar ' ' . showsPrec 1 pattern . cpar n EPi varorwild exp0 exp1 -> opar n . showString "EPi" . showChar ' ' . showsPrec 1 varorwild . showChar ' ' . showsPrec 1 exp0 . showChar ' ' . showsPrec 1 exp1 . cpar n EPiNoVar exp0 exp1 -> opar n . showString "EPiNoVar" . showChar ' ' . showsPrec 1 exp0 . showChar ' ' . showsPrec 1 exp1 . cpar n @@ -287,7 +297,9 @@ instance Show (Tree c) where EProj exp i -> opar n . showString "EProj" . showChar ' ' . showsPrec 1 exp . showChar ' ' . showsPrec 1 i . cpar n ERecType fieldtypes -> opar n . showString "ERecType" . showChar ' ' . showsPrec 1 fieldtypes . cpar n ERec fieldvalues -> opar n . showString "ERec" . showChar ' ' . showsPrec 1 fieldvalues . cpar n + EEmptyList -> showString "EEmptyList" EList exps -> opar n . showString "EList" . showChar ' ' . showsPrec 1 exps . cpar n + ETuple exp exps -> opar n . showString "ETuple" . showChar ' ' . showsPrec 1 exp . showChar ' ' . showsPrec 1 exps . cpar n EVar i -> opar n . showString "EVar" . showChar ' ' . showsPrec 1 i . cpar n EType -> showString "EType" EStr str -> opar n . showString "EStr" . showChar ' ' . showsPrec 1 str . cpar n @@ -323,13 +335,15 @@ johnMajorEq (PListCons pattern0 pattern1) (PListCons pattern0_ pattern1_) = patt johnMajorEq (PConsTop i pattern patterns) (PConsTop i_ pattern_ patterns_) = i == i_ && pattern == pattern_ && patterns == patterns_ johnMajorEq (PCons i patterns) (PCons i_ patterns_) = i == i_ && patterns == patterns_ johnMajorEq (PRec fieldpatterns) (PRec fieldpatterns_) = fieldpatterns == fieldpatterns_ -johnMajorEq (PList plistelems) (PList plistelems_) = plistelems == plistelems_ +johnMajorEq PEmptyList PEmptyList = True +johnMajorEq (PList commapatterns) (PList commapatterns_) = commapatterns == commapatterns_ +johnMajorEq (PTuple commapattern commapatterns) (PTuple commapattern_ commapatterns_) = commapattern == commapattern_ && commapatterns == commapatterns_ johnMajorEq PType PType = True johnMajorEq (PStr str) (PStr str_) = str == str_ johnMajorEq (PInt n) (PInt n_) = n == n_ johnMajorEq (PVar i) (PVar i_) = i == i_ johnMajorEq PWild PWild = True -johnMajorEq (PListElem pattern) (PListElem pattern_) = pattern == pattern_ +johnMajorEq (CommaPattern pattern) (CommaPattern pattern_) = pattern == pattern_ johnMajorEq (FieldPattern i pattern) (FieldPattern i_ pattern_) = i == i_ && pattern == pattern_ johnMajorEq (EPi varorwild exp0 exp1) (EPi varorwild_ exp0_ exp1_) = varorwild == varorwild_ && exp0 == exp0_ && exp1 == exp1_ johnMajorEq (EPiNoVar exp0 exp1) (EPiNoVar exp0_ exp1_) = exp0 == exp0_ && exp1 == exp1_ @@ -359,7 +373,9 @@ johnMajorEq (EApp exp0 exp1) (EApp exp0_ exp1_) = exp0 == exp0_ && exp1 == exp1_ johnMajorEq (EProj exp i) (EProj exp_ i_) = exp == exp_ && i == i_ johnMajorEq (ERecType fieldtypes) (ERecType fieldtypes_) = fieldtypes == fieldtypes_ johnMajorEq (ERec fieldvalues) (ERec fieldvalues_) = fieldvalues == fieldvalues_ +johnMajorEq EEmptyList EEmptyList = True johnMajorEq (EList exps) (EList exps_) = exps == exps_ +johnMajorEq (ETuple exp exps) (ETuple exp_ exps_) = exp == exp_ && exps == exps_ johnMajorEq (EVar i) (EVar i_) = i == i_ johnMajorEq EType EType = True johnMajorEq (EStr str) (EStr str_) = str == str_ @@ -394,58 +410,62 @@ instance Ord (Tree c) where index (PConsTop _ _ _) = 11 index (PCons _ _) = 12 index (PRec _) = 13 - index (PList _) = 14 - index (PType ) = 15 - index (PStr _) = 16 - index (PInt _) = 17 - index (PVar _) = 18 - index (PWild ) = 19 - index (PListElem _) = 20 - index (FieldPattern _ _) = 21 - index (EPi _ _ _) = 22 - index (EPiNoVar _ _) = 23 - index (EAbs _ _) = 24 - index (ELet _ _) = 25 - index (ECase _ _) = 26 - index (EIf _ _ _) = 27 - index (EDo _ _) = 28 - index (EBind _ _) = 29 - index (EBindC _ _) = 30 - index (EOr _ _) = 31 - index (EAnd _ _) = 32 - index (EEq _ _) = 33 - index (ENe _ _) = 34 - index (ELt _ _) = 35 - index (ELe _ _) = 36 - index (EGt _ _) = 37 - index (EGe _ _) = 38 - index (EListCons _ _) = 39 - index (EAdd _ _) = 40 - index (ESub _ _) = 41 - index (EMul _ _) = 42 - index (EDiv _ _) = 43 - index (EMod _ _) = 44 - index (ENeg _) = 45 - index (EApp _ _) = 46 - index (EProj _ _) = 47 - index (ERecType _) = 48 - index (ERec _) = 49 - index (EList _) = 50 - index (EVar _) = 51 - index (EType ) = 52 - index (EStr _) = 53 - index (EInteger _) = 54 - index (EDouble _) = 55 - index (EMeta ) = 56 - index (VVar _) = 57 - index (VWild ) = 58 - index (LetDef _ _ _) = 59 - index (Case _ _ _) = 60 - index (BindVar _ _) = 61 - index (BindNoVar _) = 62 - index (FieldType _ _) = 63 - index (FieldValue _ _) = 64 - index (Ident _) = 65 + index (PEmptyList ) = 14 + index (PList _) = 15 + index (PTuple _ _) = 16 + index (PType ) = 17 + index (PStr _) = 18 + index (PInt _) = 19 + index (PVar _) = 20 + index (PWild ) = 21 + index (CommaPattern _) = 22 + index (FieldPattern _ _) = 23 + index (EPi _ _ _) = 24 + index (EPiNoVar _ _) = 25 + index (EAbs _ _) = 26 + index (ELet _ _) = 27 + index (ECase _ _) = 28 + index (EIf _ _ _) = 29 + index (EDo _ _) = 30 + index (EBind _ _) = 31 + index (EBindC _ _) = 32 + index (EOr _ _) = 33 + index (EAnd _ _) = 34 + index (EEq _ _) = 35 + index (ENe _ _) = 36 + index (ELt _ _) = 37 + index (ELe _ _) = 38 + index (EGt _ _) = 39 + index (EGe _ _) = 40 + index (EListCons _ _) = 41 + index (EAdd _ _) = 42 + index (ESub _ _) = 43 + index (EMul _ _) = 44 + index (EDiv _ _) = 45 + index (EMod _ _) = 46 + index (ENeg _) = 47 + index (EApp _ _) = 48 + index (EProj _ _) = 49 + index (ERecType _) = 50 + index (ERec _) = 51 + index (EEmptyList ) = 52 + index (EList _) = 53 + index (ETuple _ _) = 54 + index (EVar _) = 55 + index (EType ) = 56 + index (EStr _) = 57 + index (EInteger _) = 58 + index (EDouble _) = 59 + index (EMeta ) = 60 + index (VVar _) = 61 + index (VWild ) = 62 + index (LetDef _ _ _) = 63 + index (Case _ _ _) = 64 + index (BindVar _ _) = 65 + index (BindNoVar _) = 66 + index (FieldType _ _) = 67 + index (FieldValue _ _) = 68 + index (Ident _) = 69 compareSame (Module imports decls) (Module imports_ decls_) = mappend (compare imports imports_) (compare decls decls_) compareSame (Import i) (Import i_) = compare i i_ compareSame (DataDecl i exp consdecls) (DataDecl i_ exp_ consdecls_) = mappend (compare i i_) (mappend (compare exp exp_) (compare consdecls consdecls_)) @@ -460,13 +480,15 @@ instance Ord (Tree c) where compareSame (PConsTop i pattern patterns) (PConsTop i_ pattern_ patterns_) = mappend (compare i i_) (mappend (compare pattern pattern_) (compare patterns patterns_)) compareSame (PCons i patterns) (PCons i_ patterns_) = mappend (compare i i_) (compare patterns patterns_) compareSame (PRec fieldpatterns) (PRec fieldpatterns_) = compare fieldpatterns fieldpatterns_ - compareSame (PList plistelems) (PList plistelems_) = compare plistelems plistelems_ + compareSame PEmptyList PEmptyList = EQ + compareSame (PList commapatterns) (PList commapatterns_) = compare commapatterns commapatterns_ + compareSame (PTuple commapattern commapatterns) (PTuple commapattern_ commapatterns_) = mappend (compare commapattern commapattern_) (compare commapatterns commapatterns_) compareSame PType PType = EQ compareSame (PStr str) (PStr str_) = compare str str_ compareSame (PInt n) (PInt n_) = compare n n_ compareSame (PVar i) (PVar i_) = compare i i_ compareSame PWild PWild = EQ - compareSame (PListElem pattern) (PListElem pattern_) = compare pattern pattern_ + compareSame (CommaPattern pattern) (CommaPattern pattern_) = compare pattern pattern_ compareSame (FieldPattern i pattern) (FieldPattern i_ pattern_) = mappend (compare i i_) (compare pattern pattern_) compareSame (EPi varorwild exp0 exp1) (EPi varorwild_ exp0_ exp1_) = mappend (compare varorwild varorwild_) (mappend (compare exp0 exp0_) (compare exp1 exp1_)) compareSame (EPiNoVar exp0 exp1) (EPiNoVar exp0_ exp1_) = mappend (compare exp0 exp0_) (compare exp1 exp1_) @@ -496,7 +518,9 @@ instance Ord (Tree c) where compareSame (EProj exp i) (EProj exp_ i_) = mappend (compare exp exp_) (compare i i_) compareSame (ERecType fieldtypes) (ERecType fieldtypes_) = compare fieldtypes fieldtypes_ compareSame (ERec fieldvalues) (ERec fieldvalues_) = compare fieldvalues fieldvalues_ + compareSame EEmptyList EEmptyList = EQ compareSame (EList exps) (EList exps_) = compare exps exps_ + compareSame (ETuple exp exps) (ETuple exp_ exps_) = mappend (compare exp exp_) (compare exps exps_) compareSame (EVar i) (EVar i_) = compare i i_ compareSame EType EType = EQ compareSame (EStr str) (EStr str_) = compare str str_ diff --git a/src/Transfer/Syntax/Doc.tex b/src/Transfer/Syntax/Doc.tex index c9d98bced..9005ffcd0 100644 --- a/src/Transfer/Syntax/Doc.tex +++ b/src/Transfer/Syntax/Doc.tex @@ -142,7 +142,9 @@ All other symbols are terminals.\\ \begin{tabular}{lll} {\nonterminal{Pattern3}} & {\arrow} &{\terminal{rec}} {\terminal{\{}} {\nonterminal{ListFieldPattern}} {\terminal{\}}} \\ - & {\delimit} &{\terminal{[}} {\nonterminal{ListPListElem}} {\terminal{]}} \\ + & {\delimit} &{\terminal{[}} {\terminal{]}} \\ + & {\delimit} &{\terminal{[}} {\nonterminal{ListCommaPattern}} {\terminal{]}} \\ + & {\delimit} &{\terminal{(}} {\nonterminal{CommaPattern}} {\terminal{,}} {\nonterminal{ListCommaPattern}} {\terminal{)}} \\ & {\delimit} &{\terminal{Type}} \\ & {\delimit} &{\nonterminal{String}} \\ & {\delimit} &{\nonterminal{Integer}} \\ @@ -152,13 +154,12 @@ All other symbols are terminals.\\ \end{tabular}\\ \begin{tabular}{lll} -{\nonterminal{PListElem}} & {\arrow} &{\nonterminal{Pattern}} \\ +{\nonterminal{CommaPattern}} & {\arrow} &{\nonterminal{Pattern}} \\ \end{tabular}\\ \begin{tabular}{lll} -{\nonterminal{ListPListElem}} & {\arrow} &{\emptyP} \\ - & {\delimit} &{\nonterminal{PListElem}} \\ - & {\delimit} &{\nonterminal{PListElem}} {\terminal{,}} {\nonterminal{ListPListElem}} \\ +{\nonterminal{ListCommaPattern}} & {\arrow} &{\nonterminal{CommaPattern}} \\ + & {\delimit} &{\nonterminal{CommaPattern}} {\terminal{,}} {\nonterminal{ListCommaPattern}} \\ \end{tabular}\\ \begin{tabular}{lll} @@ -288,7 +289,9 @@ All other symbols are terminals.\\ \begin{tabular}{lll} {\nonterminal{Exp13}} & {\arrow} &{\terminal{sig}} {\terminal{\{}} {\nonterminal{ListFieldType}} {\terminal{\}}} \\ & {\delimit} &{\terminal{rec}} {\terminal{\{}} {\nonterminal{ListFieldValue}} {\terminal{\}}} \\ + & {\delimit} &{\terminal{[}} {\terminal{]}} \\ & {\delimit} &{\terminal{[}} {\nonterminal{ListExp}} {\terminal{]}} \\ + & {\delimit} &{\terminal{(}} {\nonterminal{Exp}} {\terminal{,}} {\nonterminal{ListExp}} {\terminal{)}} \\ & {\delimit} &{\nonterminal{Ident}} \\ & {\delimit} &{\terminal{Type}} \\ & {\delimit} &{\nonterminal{String}} \\ @@ -323,8 +326,7 @@ All other symbols are terminals.\\ \end{tabular}\\ \begin{tabular}{lll} -{\nonterminal{ListExp}} & {\arrow} &{\emptyP} \\ - & {\delimit} &{\nonterminal{Exp}} \\ +{\nonterminal{ListExp}} & {\arrow} &{\nonterminal{Exp}} \\ & {\delimit} &{\nonterminal{Exp}} {\terminal{,}} {\nonterminal{ListExp}} \\ \end{tabular}\\ diff --git a/src/Transfer/Syntax/Par.hs b/src/Transfer/Syntax/Par.hs index cc47a4c0b..455d63676 100644 --- a/src/Transfer/Syntax/Par.hs +++ b/src/Transfer/Syntax/Par.hs @@ -109,16 +109,16 @@ happyIn20 x = unsafeCoerce# x happyOut20 :: (HappyAbsSyn ) -> (Pattern) happyOut20 x = unsafeCoerce# x {-# INLINE happyOut20 #-} -happyIn21 :: (PListElem) -> (HappyAbsSyn ) +happyIn21 :: (CommaPattern) -> (HappyAbsSyn ) happyIn21 x = unsafeCoerce# x {-# INLINE happyIn21 #-} -happyOut21 :: (HappyAbsSyn ) -> (PListElem) +happyOut21 :: (HappyAbsSyn ) -> (CommaPattern) happyOut21 x = unsafeCoerce# x {-# INLINE happyOut21 #-} -happyIn22 :: ([PListElem]) -> (HappyAbsSyn ) +happyIn22 :: ([CommaPattern]) -> (HappyAbsSyn ) happyIn22 x = unsafeCoerce# x {-# INLINE happyIn22 #-} -happyOut22 :: (HappyAbsSyn ) -> ([PListElem]) +happyOut22 :: (HappyAbsSyn ) -> ([CommaPattern]) happyOut22 x = unsafeCoerce# x {-# INLINE happyOut22 #-} happyIn23 :: ([Pattern]) -> (HappyAbsSyn ) @@ -303,21 +303,21 @@ happyOutTok x = unsafeCoerce# x {-# INLINE happyOutTok #-} happyActOffsets :: HappyAddr -happyActOffsets = HappyA# "\x92\x01\x4c\x03\x88\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\xa6\x01\xc0\x00\x00\x00\xac\x01\xa0\x01\x9c\x02\x85\x00\x9c\x00\x00\x00\x68\x03\x7c\x01\x00\x00\x00\x00\xa0\x02\x4c\x03\xf9\xff\x38\x03\x00\x00\x00\x00\x4c\x03\xa4\x01\x4c\x03\x9f\x01\x9d\x01\x9a\x01\x00\x00\x00\x00\x00\x00\x65\x01\x99\x01\x63\x00\x5d\x01\x00\x00\x87\x01\x83\x01\x00\x00\x56\x01\x56\x01\x5a\x01\x51\x01\x51\x01\x51\x01\x52\x01\x00\x00\x49\x01\x00\x00\x4c\x03\x00\x00\x61\x01\x00\x00\x5e\x01\x62\x01\x03\x00\x5f\x01\x66\x01\x39\x01\x3c\x01\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x4c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\x00\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x03\x00\x00\x00\x00\x4c\x03\x30\x03\x54\x01\xa0\x02\x1c\x03\x53\x01\x4f\x01\x4e\x01\x4c\x01\x42\x01\x4b\x01\x37\x01\x3d\x01\x38\x01\x00\x00\x07\x01\x35\x01\x63\x00\x8d\x02\x1c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x25\x01\x00\x00\x00\x03\x7d\x03\x7d\x03\x00\x00\x00\x00\x22\x01\x00\x00\xec\x02\x00\x00\x00\x00\x05\x01\xec\x02\x00\x00\x05\x01\xec\x02\xf9\x00\xef\x00\xec\x02\xf8\x00\x1a\x01\x0c\x01\x10\x01\x7d\x03\x00\x00\x00\x00\x02\x01\xfb\x00\x7d\x03\x01\x01\xff\x00\xfd\x00\x00\x00\xf7\x00\x00\x01\x00\x00\xec\x02\x00\x00\xd0\x02\xe9\x00\x00\x00\xd0\x02\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x00\xbc\x00\x00\x00\xe4\x00\xe0\x00\xe1\x00\x00\x00\xbc\x02\x00\x00\x00\x00\x00\x00\x7d\x03\xda\x00\xd9\x00\xd4\x00\xd2\x00\x00\x00\xbc\x02\x00\x00\x00\x00\x00\x00\x7d\x03\x7d\x03\x7d\x03\xc5\x00\x00\x00\xbc\x02\x00\x00\x7d\x03\xbc\x02\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x00\x00\x95\x00\x7d\x03\x00\x00\x00\x00\x00\x00\xbf\x00\xbe\x00\xb8\x00\x00\x00\x00\x00\x7c\x00\xbc\x02\x00\x00\x00\x00\x00\x00"# +happyActOffsets = HappyA# "\xbf\x01\xa6\x03\xa9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x01\xc4\x01\xf3\x00\x00\x00\xc9\x01\xbb\x01\x6c\x00\x9f\x00\xd0\x00\x00\x00\xc2\x03\xae\x01\x00\x00\x00\x00\x02\x03\xe6\x02\xf9\xff\xae\x03\x00\x00\x00\x00\xa6\x03\xca\x01\xa6\x03\xbe\x01\xb7\x01\xb4\x01\x00\x00\x00\x00\x00\x00\x86\x01\xb3\x01\x7d\x00\x85\x01\x00\x00\xa1\x01\x9d\x01\x00\x00\x84\x01\x84\x01\x78\x01\x77\x01\x77\x01\x77\x01\x6e\x01\x00\x00\x70\x01\x00\x00\xa6\x03\x00\x00\x8c\x01\x00\x00\x7d\x01\x7c\x01\x00\x00\x03\x00\xb3\x00\x83\x01\x5e\x01\x63\x01\xae\x03\xae\x03\xae\x03\xae\x03\xae\x03\xae\x03\xae\x03\xae\x03\xae\x03\xae\x03\xae\x03\xae\x03\xae\x03\xae\x03\xae\x03\xae\x03\xa6\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x00\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x03\x00\x00\xa6\x03\x00\x00\xa6\x03\x92\x03\x81\x01\xba\x02\x76\x03\x80\x01\x75\x01\x6d\x01\x6a\x01\x6b\x01\x67\x01\x68\x01\x57\x01\x65\x01\x00\x00\x2c\x01\x54\x01\x7d\x00\xa7\x02\x76\x03\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x01\x00\x00\x62\x03\xdc\x03\xc7\x02\x00\x00\x00\x00\x4e\x01\x00\x00\x46\x03\x00\x00\x00\x00\x22\x01\x46\x03\x00\x00\x22\x01\x46\x03\x26\x01\x13\x01\x46\x03\x18\x01\x39\x01\x29\x01\x38\x01\xdc\x03\x00\x00\x00\x00\x2e\x01\x21\x01\x28\x01\x00\x00\xdc\x03\x20\x01\x1a\x01\x1c\x01\x00\x00\x1f\x01\x1b\x01\x00\x00\x46\x03\x00\x00\x32\x03\x19\x01\x00\x00\x32\x03\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\xe1\x00\x00\x00\xfe\x00\xfc\x00\x00\x00\xfd\x00\xec\x00\x00\x00\x16\x03\x00\x00\xdc\x03\x00\x00\x00\x00\xdc\x03\xef\x00\xf1\x00\xe8\x00\xd8\x00\x00\x00\x16\x03\x00\x00\x00\x00\x00\x00\xdc\x03\xdc\x03\xdc\x03\xd1\x00\x00\x00\x16\x03\x00\x00\xdc\x03\x16\x03\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x00\x00\x00\xa8\x00\xdc\x03\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00\xc5\x00\xc1\x00\xa5\x00\x00\x00\x00\x00\x8b\x00\x16\x03\x00\x00\x00\x00\x00\x00"# happyGotoOffsets :: HappyAddr -happyGotoOffsets = HappyA# "\x65\x00\x20\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x04\x00\x00\x00\x00\x00\x00\x5e\x00\x1b\x00\x17\x00\x4e\x04\x00\x00\x00\x00\x07\x02\x00\x00\xee\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\xa8\x00\x00\x00\x94\x00\x00\x00\x00\x00\x8f\x00\x52\x00\x9d\x00\xac\x02\x19\x00\x4d\x00\x00\x00\x4a\x00\x00\x00\x00\x00\xd5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x4a\x04\x46\x04\x42\x04\x39\x04\x3e\x04\x91\x03\x10\x04\x09\x04\x02\x04\xfb\x03\xf4\x03\xcb\x03\xc4\x03\xbb\x03\xb1\x03\x81\x03\xbc\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\xa3\x01\x00\x00\x00\x00\x01\x00\x80\x02\x00\x00\x35\x00\x8a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x0a\x00\xc8\x04\x71\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x02\xb5\x04\x9b\x04\x00\x00\x00\x00\x00\x00\x00\x00\x58\x01\x00\x00\x00\x00\x46\x00\x3f\x01\x00\x00\x08\x00\x26\x01\x00\x00\x13\x00\x0d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x04\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x00\x00\x00\x50\x02\x00\x00\x00\x00\x38\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x00\x00\x00\x00\x00\x00\x83\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x00\x00\x00\x00\x00\x00\x00\x7b\x04\xb8\x04\xb1\x04\x00\x00\xf7\xff\xa9\x00\x00\x00\x0b\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x50\x00\xa1\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x77\x00\x00\x00\x00\x00\x00\x00"# +happyGotoOffsets = HappyA# "\xcf\x00\x3a\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\x46\x04\x00\x00\x00\x00\x00\x00\x78\x00\x35\x00\x17\x00\xc2\x04\x00\x00\x00\x00\x21\x02\x00\x00\x08\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x95\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x61\x00\x4b\x00\x86\x00\x60\x00\x19\x00\x67\x00\x00\x00\x2a\x00\x00\x00\x00\x00\xef\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\xb8\x04\xb4\x04\xb0\x04\x83\x04\xac\x04\x99\x04\x7c\x04\x70\x04\x69\x04\x53\x04\x40\x04\x39\x04\x2a\x04\x10\x04\x01\x04\xf7\x03\xd6\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\xbd\x01\x00\x00\x1b\x00\x00\x00\x01\x00\x9a\x02\x00\x00\x4f\x00\xa4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x0a\x00\xfb\x02\x8b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x02\x1f\x05\x0d\x05\x00\x00\x00\x00\x00\x00\x00\x00\x72\x01\x00\x00\x00\x00\x5e\x00\x59\x01\x00\x00\x08\x00\x40\x01\x00\x00\x13\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\x03\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x01\x00\x00\x6a\x02\x00\x00\x00\x00\x52\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf5\x00\x00\x00\x07\x05\x00\x00\x00\x00\xf5\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x00\x00\x00\x00\x00\x00\x00\xe1\x04\x38\x05\x28\x05\x00\x00\xf7\xff\xc3\x00\x00\x00\x0b\x00\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x6a\x00\x24\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x91\x00\x00\x00\x00\x00\x00\x00"# happyDefActions :: HappyAddr -happyDefActions = HappyA# "\xf7\xff\x00\x00\x00\x00\xfd\xff\x98\xff\x96\xff\x95\xff\x94\xff\x00\x00\xcd\xff\x89\xff\xb6\xff\xb4\xff\xb2\xff\xab\xff\xa9\xff\xa6\xff\xa2\xff\xa0\xff\x9e\xff\x9c\xff\xc5\xff\x00\x00\x88\xff\x00\x00\x00\x00\x93\xff\x97\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xfb\xff\xfa\xff\x00\x00\xf6\xff\xf0\xff\x00\x00\xf8\xff\xd5\xff\xef\xff\xf9\xff\x00\x00\x00\x00\xf7\xff\x90\xff\x8c\xff\xc3\xff\x00\x00\xba\xff\x00\x00\xa1\xff\x00\x00\xcc\xff\x00\x00\xcb\xff\x87\xff\x00\x00\x98\xff\x00\x00\x00\x00\x00\x00\x9f\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\xff\xb7\xff\xb8\xff\xb5\xff\xb3\xff\xac\xff\xad\xff\xae\xff\xaf\xff\xb0\xff\xb1\xff\xa7\xff\xa8\xff\xaa\xff\xa3\xff\xa4\xff\xa5\xff\x9d\xff\x00\x00\x92\xff\x99\xff\x88\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xff\x00\x00\x00\x00\x8b\xff\x00\x00\x00\x00\x8f\xff\x00\x00\xf5\xff\x00\x00\x00\x00\xf0\xff\xe8\xff\x00\x00\xf3\xff\xdc\xff\xde\xff\xdd\xff\x00\x00\xd4\xff\x00\x00\x00\x00\xd8\xff\xdb\xff\xdf\xff\x00\x00\xee\xff\x00\x00\xf1\xff\x9b\xff\x90\xff\x00\x00\x9a\xff\x8c\xff\x00\x00\x00\x00\xc3\xff\x00\x00\x00\x00\xbb\xff\x00\x00\x00\x00\xbf\xff\xca\xff\x86\xff\x00\x00\x00\x00\xdc\xff\xe8\xff\xe6\xff\xe4\xff\xe2\xff\xbe\xff\x00\x00\xb9\xff\x00\x00\xc6\xff\x00\x00\x00\x00\xc1\xff\x00\x00\x8d\xff\x8a\xff\x91\xff\x8e\xff\x00\x00\xd2\xff\xd9\xff\xd7\xff\x00\x00\x00\x00\xe9\xff\x00\x00\xf2\xff\xda\xff\xe0\xff\xd8\xff\x00\x00\xd1\xff\x00\x00\x00\x00\xc9\xff\x00\x00\xc7\xff\xbc\xff\xc8\xff\xbf\xff\x00\x00\x00\x00\x00\x00\xd5\xff\x00\x00\xcf\xff\xe3\xff\x00\x00\xe7\xff\xe5\xff\xbd\xff\xc4\xff\xec\xff\xe1\xff\xd2\xff\x00\x00\xd6\xff\xd3\xff\xd0\xff\x00\x00\xeb\xff\x00\x00\xc0\xff\xf4\xff\xec\xff\x00\x00\xed\xff\xea\xff"# +happyDefActions = HappyA# "\xf7\xff\x00\x00\x00\x00\xfd\xff\x95\xff\x93\xff\x92\xff\x91\xff\x00\x00\xcc\xff\x86\xff\xb5\xff\xb3\xff\xb1\xff\xaa\xff\xa8\xff\xa5\xff\xa1\xff\x9f\xff\x9d\xff\x9b\xff\xc4\xff\x00\x00\x00\x00\x00\x00\x00\x00\x90\xff\x94\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xfb\xff\xfa\xff\x00\x00\xf6\xff\xf0\xff\x00\x00\xf8\xff\xd4\xff\xef\xff\xf9\xff\x00\x00\x00\x00\xf7\xff\x8d\xff\x89\xff\xc2\xff\x00\x00\xb9\xff\x00\x00\xa0\xff\x00\x00\xcb\xff\x00\x00\xca\xff\x85\xff\x00\x00\x98\xff\x95\xff\x00\x00\x00\x00\x00\x00\x9e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\xff\xb6\xff\xb7\xff\xb4\xff\xb2\xff\xab\xff\xac\xff\xad\xff\xae\xff\xaf\xff\xb0\xff\xa6\xff\xa7\xff\xa9\xff\xa2\xff\xa3\xff\xa4\xff\x9c\xff\x00\x00\x8f\xff\x00\x00\x97\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\xff\x00\x00\x00\x00\x88\xff\x00\x00\x00\x00\x8c\xff\x00\x00\xf5\xff\x00\x00\x00\x00\xf0\xff\xe8\xff\x00\x00\xf3\xff\xda\xff\xdc\xff\xdb\xff\x00\x00\xd3\xff\x00\x00\x00\x00\x00\x00\xd9\xff\xdd\xff\x00\x00\xee\xff\x00\x00\xf1\xff\x9a\xff\x8d\xff\x00\x00\x99\xff\x89\xff\x00\x00\x00\x00\xc2\xff\x00\x00\x00\x00\xba\xff\x00\x00\x00\x00\xbe\xff\xc9\xff\x84\xff\x00\x00\x00\x00\x00\x00\x96\xff\xda\xff\xe8\xff\xe6\xff\xe4\xff\xe2\xff\xbd\xff\x00\x00\xb8\xff\x00\x00\xc5\xff\x00\x00\x00\x00\xc0\xff\x00\x00\x8a\xff\x87\xff\x8e\xff\x8b\xff\x00\x00\xd1\xff\xd7\xff\xd6\xff\x00\x00\xe0\xff\xd7\xff\x00\x00\xe9\xff\x00\x00\xf2\xff\x00\x00\xd8\xff\xdf\xff\x00\x00\x00\x00\xd0\xff\x00\x00\x00\x00\xc8\xff\x00\x00\xc6\xff\xbb\xff\xc7\xff\xbe\xff\x00\x00\x00\x00\x00\x00\xd4\xff\x00\x00\xce\xff\xe3\xff\x00\x00\xe7\xff\xe5\xff\xbc\xff\xc3\xff\xec\xff\xe1\xff\xd1\xff\x00\x00\xd5\xff\x00\x00\xde\xff\xd2\xff\xcf\xff\x00\x00\xeb\xff\x00\x00\xbf\xff\xf4\xff\xec\xff\x00\x00\xed\xff\xea\xff"# happyCheck :: HappyAddr -happyCheck = HappyA# "\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x02\x00\x00\x00\x09\x00\x0a\x00\x07\x00\x08\x00\x00\x00\x11\x00\x00\x00\x15\x00\x00\x00\x17\x00\x00\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x31\x00\x18\x00\x19\x00\x16\x00\x2d\x00\x2e\x00\x15\x00\x0b\x00\x17\x00\x2b\x00\x2c\x00\x00\x00\x01\x00\x02\x00\x03\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x15\x00\x16\x00\x17\x00\x00\x00\x07\x00\x08\x00\x00\x00\x1c\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x01\x00\x02\x00\x03\x00\x2d\x00\x13\x00\x14\x00\x18\x00\x19\x00\x1d\x00\x00\x00\x04\x00\x05\x00\x06\x00\x00\x00\x01\x00\x02\x00\x29\x00\x2a\x00\x09\x00\x0a\x00\x15\x00\x16\x00\x17\x00\x00\x00\x00\x00\x01\x00\x02\x00\x03\x00\x0f\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x24\x00\x25\x00\x13\x00\x14\x00\x2d\x00\x15\x00\x08\x00\x17\x00\x00\x00\x00\x00\x01\x00\x02\x00\x03\x00\x31\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x1b\x00\x1c\x00\x05\x00\x06\x00\x2d\x00\x15\x00\x12\x00\x17\x00\x00\x00\x00\x00\x01\x00\x02\x00\x03\x00\x31\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x1d\x00\x1e\x00\x1f\x00\x04\x00\x2d\x00\x15\x00\x01\x00\x17\x00\x02\x00\x00\x00\x01\x00\x02\x00\x03\x00\x31\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x12\x00\x13\x00\x0f\x00\x03\x00\x2d\x00\x15\x00\x04\x00\x17\x00\x01\x00\x00\x00\x01\x00\x02\x00\x03\x00\x05\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0a\x00\x0c\x00\x31\x00\x05\x00\x2d\x00\x15\x00\x0d\x00\x17\x00\x30\x00\x00\x00\x01\x00\x02\x00\x03\x00\x01\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x04\x00\x08\x00\x07\x00\x06\x00\x2d\x00\x15\x00\x0f\x00\x17\x00\x0a\x00\x00\x00\x01\x00\x02\x00\x03\x00\x01\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x11\x00\x04\x00\x27\x00\x31\x00\x2d\x00\x15\x00\x2a\x00\x17\x00\x03\x00\x00\x00\x01\x00\x02\x00\x03\x00\x05\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x31\x00\x02\x00\x31\x00\x02\x00\x2d\x00\x15\x00\x04\x00\x17\x00\x01\x00\x00\x00\x01\x00\x02\x00\x03\x00\x01\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x04\x00\x01\x00\x05\x00\x04\x00\x2d\x00\x15\x00\x02\x00\x17\x00\x03\x00\x00\x00\x01\x00\x02\x00\x03\x00\x20\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x02\x00\x0a\x00\x31\x00\x0d\x00\x2d\x00\x15\x00\x0c\x00\x17\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x2c\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x2f\x00\x31\x00\x29\x00\x01\x00\x2d\x00\x15\x00\x31\x00\x17\x00\x02\x00\x00\x00\x01\x00\x02\x00\x03\x00\x31\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x01\x00\x36\x00\x20\x00\x03\x00\x2d\x00\x15\x00\x03\x00\x17\x00\x03\x00\x00\x00\x01\x00\x02\x00\x03\x00\x03\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x07\x00\x14\x00\x0f\x00\x36\x00\x2d\x00\x15\x00\x31\x00\x17\x00\x29\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x15\x00\xff\xff\x17\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x15\x00\xff\xff\x17\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x15\x00\xff\xff\x17\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x15\x00\xff\xff\x17\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x15\x00\xff\xff\x17\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x17\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x17\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x17\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x06\x00\xff\xff\x2d\x00\x09\x00\x17\x00\x0b\x00\xff\xff\xff\xff\x0e\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x09\x00\xff\xff\x0b\x00\x00\x00\x2d\x00\x0e\x00\x22\x00\x10\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x1c\x00\xff\xff\x31\x00\x32\x00\x33\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\x26\x00\x0b\x00\x28\x00\xff\xff\xff\xff\x2b\x00\x10\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\x29\x00\x2a\x00\xff\xff\x1c\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x21\x00\x22\x00\x23\x00\x10\x00\xff\xff\x26\x00\xff\xff\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\x2d\x00\x2e\x00\xff\xff\x1c\x00\x31\x00\x32\x00\x33\x00\x34\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\x26\x00\x0b\x00\x28\x00\xff\xff\xff\xff\x2b\x00\x10\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\xff\xff\x1c\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x21\x00\x22\x00\x23\x00\x10\x00\xff\xff\x26\x00\xff\xff\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\x2d\x00\x2e\x00\xff\xff\x1c\x00\x31\x00\x32\x00\x33\x00\x34\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\x26\x00\x0b\x00\x28\x00\xff\xff\xff\xff\x2b\x00\x10\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\xff\xff\x1c\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x21\x00\x22\x00\x23\x00\x10\x00\x09\x00\x26\x00\x0b\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\x2d\x00\x2e\x00\xff\xff\x1c\x00\x31\x00\x32\x00\x33\x00\x34\x00\x21\x00\x22\x00\x23\x00\x1c\x00\x09\x00\x26\x00\x0b\x00\x28\x00\x21\x00\x22\x00\x2b\x00\x10\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\x2d\x00\x2e\x00\xff\xff\x1c\x00\x31\x00\x32\x00\x33\x00\x34\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\x26\x00\x0b\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\x2d\x00\x2e\x00\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x09\x00\xff\xff\x0b\x00\x21\x00\x22\x00\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\x22\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x2d\x00\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x00\x00\x01\x00\x02\x00\x03\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x00\x00\x01\x00\x02\x00\x03\x00\x00\x00\x01\x00\x02\x00\x03\x00\x00\x00\x01\x00\x02\x00\x03\x00\x00\x00\x01\x00\x02\x00\x03\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x25\x00\x26\x00\x27\x00\x28\x00\x25\x00\x26\x00\x27\x00\x28\x00\x25\x00\x26\x00\x27\x00\x28\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x27\x00\x28\x00\x00\x00\x01\x00\x02\x00\xff\xff\x00\x00\x01\x00\x02\x00\xff\xff\x00\x00\x01\x00\x02\x00\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x1a\x00\x1b\x00\xff\xff\xff\xff\x1a\x00\x1b\x00\x00\x00\x01\x00\x02\x00\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\xff\xff\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# +happyCheck = HappyA# "\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x02\x00\x00\x00\x09\x00\x0a\x00\x07\x00\x08\x00\x00\x00\x11\x00\x00\x00\x15\x00\x00\x00\x17\x00\x00\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x31\x00\x18\x00\x19\x00\x16\x00\x2d\x00\x2e\x00\x15\x00\x0b\x00\x17\x00\x2b\x00\x2c\x00\x00\x00\x01\x00\x02\x00\x03\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x2b\x00\x2c\x00\x00\x00\x1d\x00\x2d\x00\x2e\x00\x15\x00\x00\x00\x17\x00\x07\x00\x08\x00\x00\x00\x01\x00\x02\x00\x03\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x15\x00\x16\x00\x17\x00\x00\x00\x09\x00\x0a\x00\x00\x00\x1c\x00\x12\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x01\x00\x02\x00\x03\x00\x2d\x00\x13\x00\x14\x00\x18\x00\x19\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x29\x00\x2a\x00\x29\x00\x2a\x00\x05\x00\x06\x00\x15\x00\x16\x00\x17\x00\x00\x00\x00\x00\x01\x00\x02\x00\x03\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x24\x00\x25\x00\x13\x00\x14\x00\x2d\x00\x15\x00\x08\x00\x17\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x31\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x1b\x00\x1c\x00\x31\x00\x0a\x00\x2d\x00\x15\x00\x0d\x00\x17\x00\x01\x00\x00\x00\x01\x00\x02\x00\x03\x00\x02\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x04\x00\x05\x00\x06\x00\x0a\x00\x2d\x00\x15\x00\x31\x00\x17\x00\x03\x00\x00\x00\x01\x00\x02\x00\x03\x00\x0f\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x04\x00\x1d\x00\x1e\x00\x1f\x00\x2d\x00\x15\x00\x01\x00\x17\x00\x05\x00\x00\x00\x01\x00\x02\x00\x03\x00\x0d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x12\x00\x13\x00\x0a\x00\x0c\x00\x2d\x00\x15\x00\x0d\x00\x17\x00\x30\x00\x00\x00\x01\x00\x02\x00\x03\x00\x31\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x05\x00\x04\x00\x01\x00\x07\x00\x2d\x00\x15\x00\x08\x00\x17\x00\x06\x00\x00\x00\x01\x00\x02\x00\x03\x00\x0a\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0f\x00\x0a\x00\x01\x00\x11\x00\x2d\x00\x15\x00\x04\x00\x17\x00\x27\x00\x00\x00\x01\x00\x02\x00\x03\x00\x31\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x2a\x00\x03\x00\x05\x00\x31\x00\x2d\x00\x15\x00\x02\x00\x17\x00\x01\x00\x00\x00\x01\x00\x02\x00\x03\x00\x31\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x04\x00\x02\x00\x04\x00\x01\x00\x2d\x00\x15\x00\x05\x00\x17\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x01\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x02\x00\x20\x00\x03\x00\x02\x00\x2d\x00\x15\x00\x0c\x00\x17\x00\x0d\x00\x00\x00\x01\x00\x02\x00\x03\x00\x31\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0f\x00\x2c\x00\x2f\x00\x01\x00\x2d\x00\x15\x00\x29\x00\x17\x00\x02\x00\x00\x00\x01\x00\x02\x00\x03\x00\x31\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x01\x00\x31\x00\x31\x00\x03\x00\x2d\x00\x15\x00\x03\x00\x17\x00\x36\x00\x00\x00\x01\x00\x02\x00\x03\x00\x03\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x03\x00\x20\x00\x14\x00\x07\x00\x2d\x00\x15\x00\x0f\x00\x17\x00\x36\x00\x00\x00\x01\x00\x02\x00\x03\x00\x31\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x29\x00\xff\xff\x2d\x00\x15\x00\xff\xff\x17\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x15\x00\xff\xff\x17\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x15\x00\xff\xff\x17\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x15\x00\xff\xff\x17\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x15\x00\xff\xff\x17\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x17\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x17\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x17\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x06\x00\xff\xff\x2d\x00\x09\x00\x17\x00\x0b\x00\xff\xff\xff\xff\x0e\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x2d\x00\x0e\x00\x22\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\xff\xff\x0b\x00\x0c\x00\x2d\x00\x0e\x00\x1c\x00\xff\xff\x31\x00\x32\x00\x33\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\x26\x00\xff\xff\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\x2d\x00\x2e\x00\x22\x00\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x2d\x00\xff\xff\x10\x00\xff\xff\x31\x00\x32\x00\x33\x00\x00\x00\x01\x00\x02\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\x0b\x00\x21\x00\x22\x00\x23\x00\x0f\x00\x09\x00\x26\x00\x0b\x00\x28\x00\xff\xff\x0e\x00\x2b\x00\x10\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\xff\xff\x1c\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x21\x00\x22\x00\x23\x00\x10\x00\xff\xff\x26\x00\xff\xff\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\x2d\x00\x2e\x00\xff\xff\x1c\x00\x31\x00\x32\x00\x33\x00\x34\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\x26\x00\x0b\x00\x28\x00\xff\xff\xff\xff\x2b\x00\x10\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\xff\xff\x1c\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x21\x00\x22\x00\x23\x00\x10\x00\xff\xff\x26\x00\xff\xff\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\x2d\x00\x2e\x00\xff\xff\x1c\x00\x31\x00\x32\x00\x33\x00\x34\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\x26\x00\x0b\x00\x28\x00\xff\xff\xff\xff\x2b\x00\x10\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\xff\xff\x1c\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x21\x00\x22\x00\x23\x00\x10\x00\xff\xff\x26\x00\xff\xff\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\x2d\x00\x2e\x00\xff\xff\x1c\x00\x31\x00\x32\x00\x33\x00\x34\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\x26\x00\x0b\x00\x28\x00\xff\xff\xff\xff\x2b\x00\x10\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\xff\xff\x1c\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x21\x00\x22\x00\x23\x00\x10\x00\x09\x00\x26\x00\x0b\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\x2d\x00\x2e\x00\xff\xff\x1c\x00\x31\x00\x32\x00\x33\x00\x34\x00\x21\x00\x22\x00\x23\x00\x1c\x00\x09\x00\x26\x00\x0b\x00\x28\x00\x21\x00\x22\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\x21\x00\x22\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\x0e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\x00\x00\x01\x00\x02\x00\x03\x00\x0f\x00\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x01\x00\x02\x00\x03\x00\x27\x00\x28\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x01\x00\x02\x00\x03\x00\x00\x00\x01\x00\x02\x00\x03\x00\x00\x00\x01\x00\x02\x00\x03\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x25\x00\x26\x00\x27\x00\x28\x00\x25\x00\x26\x00\x27\x00\x28\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x01\x00\x02\x00\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\xff\xff\x00\x00\x01\x00\x02\x00\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\xff\xff\x1a\x00\x1b\x00\x00\x00\x01\x00\x02\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x00\x00\x01\x00\x02\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\xff\xff\x00\x00\x01\x00\x02\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x04\x00\x05\x00\x06\x00\x07\x00\xcc\xff\xd8\x00\x3b\x00\x70\x00\xcb\x00\x2a\x00\x7d\x00\x7e\x00\x7f\x00\x8a\x00\xd9\x00\xe0\x00\x2b\x00\x88\x00\x6d\x00\xcc\xff\x64\x00\x3b\x00\x38\x00\x09\x00\x70\x00\x81\x00\x04\x00\x05\x00\x06\x00\x07\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x04\x00\x6e\x00\xa9\x00\x39\x00\x15\x00\x9a\x00\x3b\x00\xc7\x00\x09\x00\x71\x00\xac\x00\x3d\x00\x05\x00\x06\x00\x07\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x71\x00\x72\x00\x73\x00\x2a\x00\x15\x00\x3c\x00\x95\x00\x96\x00\x09\x00\x6d\x00\x2b\x00\x2c\x00\xbb\x00\x97\x00\x77\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x3d\x00\x05\x00\x06\x00\x07\x00\x15\x00\xbc\x00\xd7\x00\x6e\x00\x6f\x00\x6b\x00\xd8\x00\x25\x00\x26\x00\x27\x00\x7d\x00\x7e\x00\x7f\x00\x74\x00\xae\x00\xd9\x00\xda\x00\x3e\x00\x3f\x00\x09\x00\xbb\x00\x04\x00\x05\x00\x06\x00\x07\x00\xc8\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x2e\x00\x2f\x00\xbc\x00\xbd\x00\x15\x00\xdf\x00\x46\x00\x09\x00\x78\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x47\x00\x48\x00\x26\x00\x76\x00\x15\x00\xdb\x00\x7a\x00\x09\x00\x29\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x43\x00\x44\x00\x45\x00\xdd\x00\x15\x00\xca\x00\xde\x00\x09\x00\xdf\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x51\x00\x52\x00\xcd\x00\xd2\x00\x15\x00\xd0\x00\xd3\x00\x09\x00\xd4\x00\x04\x00\x05\x00\x06\x00\x07\x00\xd5\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\xb9\x00\xba\x00\x04\x00\xc1\x00\x15\x00\xb7\x00\xbb\x00\x09\x00\xbf\x00\x04\x00\x05\x00\x06\x00\x07\x00\xc5\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\xc4\x00\xc6\x00\xc7\x00\x83\x00\x15\x00\xc2\x00\xca\x00\x09\x00\x9d\x00\x04\x00\x05\x00\x06\x00\x07\x00\xa5\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\xa6\x00\xa7\x00\xa8\x00\x04\x00\x15\x00\xa8\x00\xab\x00\x09\x00\xb1\x00\x04\x00\x05\x00\x06\x00\x07\x00\xb7\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x04\x00\x8a\x00\x04\x00\x8e\x00\x15\x00\xab\x00\x8c\x00\x09\x00\x8d\x00\x04\x00\x05\x00\x06\x00\x07\x00\x90\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x8f\x00\x93\x00\x91\x00\x92\x00\x15\x00\xad\x00\x94\x00\x09\x00\x99\x00\x04\x00\x05\x00\x06\x00\x07\x00\x41\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x66\x00\x67\x00\x04\x00\x69\x00\x15\x00\xaf\x00\x68\x00\x09\x00\x6a\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6b\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x6d\x00\x04\x00\x29\x00\x7a\x00\x15\x00\x7c\x00\x04\x00\x09\x00\x7c\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x30\x00\xff\xff\x41\x00\x31\x00\x15\x00\x94\x00\x32\x00\x09\x00\x33\x00\x04\x00\x05\x00\x06\x00\x07\x00\x35\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x50\x00\x4f\x00\x53\x00\xff\xff\x15\x00\x9b\x00\x04\x00\x09\x00\x29\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x53\x00\x00\x00\x09\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x3e\x00\x00\x00\x09\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x33\x00\x00\x00\x09\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x35\x00\x00\x00\x09\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x08\x00\x00\x00\x09\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\xbf\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\xc1\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\xb5\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x83\x00\x00\x00\x15\x00\x84\x00\x99\x00\x85\x00\x00\x00\x00\x00\x86\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x17\x00\x00\x00\x18\x00\x73\x00\x15\x00\x3b\x00\x87\x00\x19\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x1a\x00\x00\x00\x04\x00\x23\x00\x24\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x17\x00\x1e\x00\x18\x00\x1f\x00\x00\x00\x00\x00\x20\x00\x19\x00\x21\x00\x22\x00\x00\x00\x00\x00\x04\x00\x23\x00\x24\x00\x25\x00\x74\x00\x75\x00\x00\x00\x1a\x00\x38\x00\x00\x00\x18\x00\x00\x00\x1b\x00\x1c\x00\x1d\x00\x19\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x00\x00\x1a\x00\x04\x00\x23\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x17\x00\x1e\x00\x18\x00\x1f\x00\x00\x00\x00\x00\x20\x00\x19\x00\x21\x00\x22\x00\x00\x00\x00\x00\x04\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x38\x00\x00\x00\x18\x00\x00\x00\x1b\x00\x1c\x00\x1d\x00\x19\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x00\x00\x1a\x00\x04\x00\x23\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x17\x00\x1e\x00\x18\x00\x1f\x00\x00\x00\x00\x00\x20\x00\x19\x00\x21\x00\x22\x00\x00\x00\x00\x00\x04\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x38\x00\x00\x00\x18\x00\x00\x00\x1b\x00\x1c\x00\x1d\x00\x19\x00\x38\x00\x1e\x00\x18\x00\x1f\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x00\x00\x1a\x00\x04\x00\x23\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1d\x00\x1a\x00\x17\x00\x1e\x00\x18\x00\x1f\x00\x1b\x00\x1c\x00\x20\x00\x19\x00\x21\x00\x22\x00\x00\x00\x00\x00\x04\x00\x23\x00\x24\x00\x25\x00\x21\x00\x22\x00\x00\x00\x1a\x00\x04\x00\x23\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x38\x00\x1e\x00\x18\x00\x1f\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x00\x00\x00\x00\x04\x00\x23\x00\x24\x00\x25\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x84\x00\x00\x00\x85\x00\x1b\x00\x1c\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x21\x00\x22\x00\x00\x00\x00\x00\x04\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x87\x00\x54\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x88\x00\x00\x00\x00\x00\x00\x00\x04\x00\x23\x00\x24\x00\x04\x00\x05\x00\x06\x00\x07\x00\x5e\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x55\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x56\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x57\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x58\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x59\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x5a\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x5b\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x5c\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x5d\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x5f\x00\x11\x00\x12\x00\x13\x00\x14\x00\x61\x00\x12\x00\x13\x00\x14\x00\x62\x00\x12\x00\x13\x00\x14\x00\x63\x00\x12\x00\x13\x00\x14\x00\x36\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x41\x00\x14\x00\x9d\x00\x7e\x00\x7f\x00\x00\x00\x9d\x00\x7e\x00\x7f\x00\x00\x00\x9d\x00\x7e\x00\x7f\x00\x00\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xb1\x00\x9f\x00\xa0\x00\xa1\x00\xb2\x00\xd5\x00\xa2\x00\xcf\x00\x00\x00\x00\x00\xa2\x00\xa3\x00\x9d\x00\x7e\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x7e\x00\x7f\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x9f\x00\xa0\x00\xa1\x00\xb2\x00\xb3\x00\xd6\x00\x9f\x00\xa0\x00\xa1\x00\x9d\x00\x7e\x00\x7f\x00\x00\x00\x9d\x00\x7e\x00\x7f\x00\x9d\x00\x7e\x00\x7f\x00\x00\x00\x00\x00\xcd\x00\x9f\x00\xa0\x00\xa1\x00\xb4\x00\x9f\x00\xa0\x00\xa1\x00\xce\x00\xa0\x00\xa1\x00\x7d\x00\x7e\x00\x7f\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\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# +happyTable = HappyA# "\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\xcb\xff\xe1\x00\x3b\x00\x72\x00\xd2\x00\x2a\x00\x7f\x00\x80\x00\x81\x00\x8c\x00\xe2\x00\xe9\x00\x2b\x00\x8a\x00\x6f\x00\xcb\xff\x65\x00\x3b\x00\x38\x00\x09\x00\x72\x00\x83\x00\x04\x00\x05\x00\x06\x00\x07\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x04\x00\x70\x00\xad\x00\x39\x00\x15\x00\x9c\x00\x3b\x00\xce\x00\x09\x00\x73\x00\xb0\x00\x04\x00\x05\x00\x06\x00\x07\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x73\x00\x74\x00\x2a\x00\x6d\x00\x15\x00\x9d\x00\x3b\x00\x79\x00\x09\x00\x2b\x00\x2c\x00\x3e\x00\x05\x00\x06\x00\x07\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x75\x00\xe1\x00\x75\x00\x7a\x00\x15\x00\x3c\x00\x97\x00\x98\x00\x09\x00\x6f\x00\xe2\x00\xe3\x00\xc2\x00\x99\x00\x7c\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x3e\x00\x05\x00\x06\x00\x07\x00\x15\x00\xc3\x00\xe0\x00\x70\x00\x71\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x76\x00\xb2\x00\x76\x00\x77\x00\x26\x00\x78\x00\x3f\x00\x40\x00\x09\x00\xc2\x00\x04\x00\x05\x00\x06\x00\x07\x00\x29\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x2e\x00\x2f\x00\xc3\x00\xc4\x00\x15\x00\xe8\x00\x47\x00\x09\x00\xe6\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x48\x00\x49\x00\x04\x00\x68\x00\x15\x00\xe4\x00\x69\x00\x09\x00\xe7\x00\x04\x00\x05\x00\x06\x00\x07\x00\xe8\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x25\x00\x26\x00\x27\x00\xdf\x00\x15\x00\xd1\x00\x04\x00\x09\x00\xd9\x00\x04\x00\x05\x00\x06\x00\x07\x00\xd4\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\xda\x00\x44\x00\x45\x00\x46\x00\x15\x00\xd7\x00\xdb\x00\x09\x00\xdc\x00\x04\x00\x05\x00\x06\x00\x07\x00\xbf\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x52\x00\x53\x00\xc0\x00\xc1\x00\x15\x00\xbd\x00\xc2\x00\x09\x00\xc6\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\xc8\x00\xcb\x00\xcc\x00\xce\x00\x15\x00\xc9\x00\xcd\x00\x09\x00\x85\x00\x04\x00\x05\x00\x06\x00\x07\x00\xa0\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\xd1\x00\xa1\x00\xa9\x00\xaa\x00\x15\x00\xac\x00\xab\x00\x09\x00\xac\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\xaf\x00\xb5\x00\xbd\x00\x04\x00\x15\x00\xaf\x00\x8c\x00\x09\x00\x8f\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x8e\x00\x90\x00\x91\x00\x92\x00\x15\x00\xb1\x00\x93\x00\x09\x00\x94\x00\x04\x00\x05\x00\x06\x00\x07\x00\x95\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x96\x00\x42\x00\x9b\x00\x67\x00\x15\x00\xb3\x00\x6a\x00\x09\x00\x6b\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x6c\x00\x6d\x00\x6f\x00\x7c\x00\x15\x00\x7e\x00\x29\x00\x09\x00\x7e\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x30\x00\x04\x00\x04\x00\x31\x00\x15\x00\x96\x00\x32\x00\x09\x00\xff\xff\x04\x00\x05\x00\x06\x00\x07\x00\x33\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x35\x00\x42\x00\x50\x00\x51\x00\x15\x00\x9e\x00\x54\x00\x09\x00\xff\xff\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x29\x00\x00\x00\x15\x00\x54\x00\x00\x00\x09\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x3f\x00\x00\x00\x09\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x33\x00\x00\x00\x09\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x35\x00\x00\x00\x09\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x08\x00\x00\x00\x09\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\xc6\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\xc8\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\xbb\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x85\x00\x00\x00\x15\x00\x86\x00\x9b\x00\x87\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x17\x00\x00\x00\x18\x00\x00\x00\x15\x00\x3b\x00\x89\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x87\x00\xb9\x00\x8a\x00\x88\x00\x1a\x00\x00\x00\x04\x00\x23\x00\x24\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x89\x00\x00\x00\x04\x00\x23\x00\x24\x00\x25\x00\x17\x00\x00\x00\x18\x00\x3e\x00\x00\x00\x8a\x00\x00\x00\x19\x00\x00\x00\x04\x00\x23\x00\x24\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x82\x00\x1b\x00\x1c\x00\x1d\x00\x83\x00\x17\x00\x1e\x00\x18\x00\x1f\x00\x00\x00\x3b\x00\x20\x00\x19\x00\x21\x00\x22\x00\x00\x00\x00\x00\x04\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x17\x00\x00\x00\x18\x00\x00\x00\x1b\x00\x1c\x00\x1d\x00\x19\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x00\x00\x1a\x00\x04\x00\x23\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x38\x00\x1e\x00\x18\x00\x1f\x00\x00\x00\x00\x00\x20\x00\x19\x00\x21\x00\x22\x00\x00\x00\x00\x00\x04\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x17\x00\x00\x00\x18\x00\x00\x00\x1b\x00\x1c\x00\x1d\x00\x19\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x00\x00\x1a\x00\x04\x00\x23\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x38\x00\x1e\x00\x18\x00\x1f\x00\x00\x00\x00\x00\x20\x00\x19\x00\x21\x00\x22\x00\x00\x00\x00\x00\x04\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x17\x00\x00\x00\x18\x00\x00\x00\x1b\x00\x1c\x00\x1d\x00\x19\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x00\x00\x1a\x00\x04\x00\x23\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x38\x00\x1e\x00\x18\x00\x1f\x00\x00\x00\x00\x00\x20\x00\x19\x00\x21\x00\x22\x00\x00\x00\x00\x00\x04\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x17\x00\x00\x00\x18\x00\x00\x00\x1b\x00\x1c\x00\x1d\x00\x19\x00\x38\x00\x1e\x00\x18\x00\x1f\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x00\x00\x1a\x00\x04\x00\x23\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1d\x00\x1a\x00\x38\x00\x1e\x00\x18\x00\x1f\x00\x1b\x00\x1c\x00\x20\x00\x00\x00\x21\x00\x22\x00\x00\x00\x00\x00\x04\x00\x23\x00\x24\x00\x25\x00\x21\x00\x22\x00\x00\x00\x00\x00\x04\x00\x23\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x86\x00\x00\x00\x87\x00\x00\x00\x00\x00\x88\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x21\x00\x22\x00\x00\x00\x00\x00\x04\x00\x23\x00\x24\x00\x25\x00\x04\x00\x05\x00\x06\x00\x07\x00\xcf\x00\x00\x00\x00\x00\x89\x00\x00\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x04\x00\x23\x00\x24\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x55\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x56\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x57\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x58\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x5a\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x04\x00\x05\x00\x06\x00\x07\x00\x42\x00\x14\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x5b\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x00\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x5d\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x5e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x61\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x05\x00\x06\x00\x07\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x5f\x00\x11\x00\x12\x00\x13\x00\x14\x00\x04\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x11\x00\x12\x00\x13\x00\x14\x00\x62\x00\x12\x00\x13\x00\x14\x00\x63\x00\x12\x00\x13\x00\x14\x00\x64\x00\x12\x00\x13\x00\x14\x00\xa1\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x36\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa1\x00\x80\x00\x81\x00\x00\x00\xa1\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\xa6\x00\xd6\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xb5\x00\xa3\x00\xa4\x00\xa5\x00\xb6\x00\xdc\x00\xa1\x00\x80\x00\x81\x00\x00\x00\xa6\x00\xa7\x00\xa1\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xa3\x00\xa4\x00\xa5\x00\xb6\x00\xdd\x00\xb5\x00\xa3\x00\xa4\x00\xa5\x00\xb6\x00\xb7\x00\xa1\x00\x80\x00\x81\x00\x00\x00\x00\x00\xa1\x00\x80\x00\x81\x00\x00\x00\xa1\x00\x80\x00\x81\x00\xb9\x00\xa3\x00\xa4\x00\xa5\x00\xba\x00\xdf\x00\xa3\x00\xa4\x00\xa5\x00\xd4\x00\xa3\x00\xa4\x00\xa5\x00\xa1\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x00\xa4\x00\xa5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# -happyReduceArr = array (2, 121) [ +happyReduceArr = array (2, 123) [ (2 , happyReduce_2), (3 , happyReduce_3), (4 , happyReduce_4), @@ -437,7 +437,9 @@ happyReduceArr = array (2, 121) [ (118 , happyReduce_118), (119 , happyReduce_119), (120 , happyReduce_120), - (121 , happyReduce_121) + (121 , happyReduce_121), + (122 , happyReduce_122), + (123 , happyReduce_123) ] happy_n_terms = 55 :: Int @@ -692,8 +694,15 @@ happyReduction_30 (happy_x_4 `HappyStk` (PRec happy_var_3 ) `HappyStk` happyRest} -happyReduce_31 = happySpecReduce_3 15# happyReduction_31 -happyReduction_31 happy_x_3 +happyReduce_31 = happySpecReduce_2 15# happyReduction_31 +happyReduction_31 happy_x_2 + happy_x_1 + = happyIn20 + (PEmptyList + ) + +happyReduce_32 = happySpecReduce_3 15# happyReduction_32 +happyReduction_32 happy_x_3 happy_x_2 happy_x_1 = case happyOut22 happy_x_2 of { happy_var_2 -> @@ -701,41 +710,54 @@ happyReduction_31 happy_x_3 (PList happy_var_2 )} -happyReduce_32 = happySpecReduce_1 15# happyReduction_32 -happyReduction_32 happy_x_1 +happyReduce_33 = happyReduce 5# 15# happyReduction_33 +happyReduction_33 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut21 happy_x_2 of { happy_var_2 -> + case happyOut22 happy_x_4 of { happy_var_4 -> + happyIn20 + (PTuple happy_var_2 happy_var_4 + ) `HappyStk` happyRest}} + +happyReduce_34 = happySpecReduce_1 15# happyReduction_34 +happyReduction_34 happy_x_1 = happyIn20 (PType ) -happyReduce_33 = happySpecReduce_1 15# happyReduction_33 -happyReduction_33 happy_x_1 +happyReduce_35 = happySpecReduce_1 15# happyReduction_35 +happyReduction_35 happy_x_1 = case happyOut6 happy_x_1 of { happy_var_1 -> happyIn20 (PStr happy_var_1 )} -happyReduce_34 = happySpecReduce_1 15# happyReduction_34 -happyReduction_34 happy_x_1 +happyReduce_36 = happySpecReduce_1 15# happyReduction_36 +happyReduction_36 happy_x_1 = case happyOut7 happy_x_1 of { happy_var_1 -> happyIn20 (PInt happy_var_1 )} -happyReduce_35 = happySpecReduce_1 15# happyReduction_35 -happyReduction_35 happy_x_1 +happyReduce_37 = happySpecReduce_1 15# happyReduction_37 +happyReduction_37 happy_x_1 = case happyOut5 happy_x_1 of { happy_var_1 -> happyIn20 (PVar happy_var_1 )} -happyReduce_36 = happySpecReduce_1 15# happyReduction_36 -happyReduction_36 happy_x_1 +happyReduce_38 = happySpecReduce_1 15# happyReduction_38 +happyReduction_38 happy_x_1 = happyIn20 (PWild ) -happyReduce_37 = happySpecReduce_3 15# happyReduction_37 -happyReduction_37 happy_x_3 +happyReduce_39 = happySpecReduce_3 15# happyReduction_39 +happyReduction_39 happy_x_3 happy_x_2 happy_x_1 = case happyOut17 happy_x_2 of { happy_var_2 -> @@ -743,27 +765,22 @@ happyReduction_37 happy_x_3 (happy_var_2 )} -happyReduce_38 = happySpecReduce_1 16# happyReduction_38 -happyReduction_38 happy_x_1 +happyReduce_40 = happySpecReduce_1 16# happyReduction_40 +happyReduction_40 happy_x_1 = case happyOut17 happy_x_1 of { happy_var_1 -> happyIn21 - (PListElem happy_var_1 + (CommaPattern happy_var_1 )} -happyReduce_39 = happySpecReduce_0 17# happyReduction_39 -happyReduction_39 = happyIn22 - ([] - ) - -happyReduce_40 = happySpecReduce_1 17# happyReduction_40 -happyReduction_40 happy_x_1 +happyReduce_41 = happySpecReduce_1 17# happyReduction_41 +happyReduction_41 happy_x_1 = case happyOut21 happy_x_1 of { happy_var_1 -> happyIn22 ((:[]) happy_var_1 )} -happyReduce_41 = happySpecReduce_3 17# happyReduction_41 -happyReduction_41 happy_x_3 +happyReduce_42 = happySpecReduce_3 17# happyReduction_42 +happyReduction_42 happy_x_3 happy_x_2 happy_x_1 = case happyOut21 happy_x_1 of { happy_var_1 -> @@ -772,13 +789,13 @@ happyReduction_41 happy_x_3 ((:) happy_var_1 happy_var_3 )}} -happyReduce_42 = happySpecReduce_0 18# happyReduction_42 -happyReduction_42 = happyIn23 +happyReduce_43 = happySpecReduce_0 18# happyReduction_43 +happyReduction_43 = happyIn23 ([] ) -happyReduce_43 = happySpecReduce_2 18# happyReduction_43 -happyReduction_43 happy_x_2 +happyReduce_44 = happySpecReduce_2 18# happyReduction_44 +happyReduction_44 happy_x_2 happy_x_1 = case happyOut23 happy_x_1 of { happy_var_1 -> case happyOut20 happy_x_2 of { happy_var_2 -> @@ -786,8 +803,8 @@ happyReduction_43 happy_x_2 (flip (:) happy_var_1 happy_var_2 )}} -happyReduce_44 = happySpecReduce_3 19# happyReduction_44 -happyReduction_44 happy_x_3 +happyReduce_45 = happySpecReduce_3 19# happyReduction_45 +happyReduction_45 happy_x_3 happy_x_2 happy_x_1 = case happyOut5 happy_x_1 of { happy_var_1 -> @@ -796,20 +813,20 @@ happyReduction_44 happy_x_3 (FieldPattern happy_var_1 happy_var_3 )}} -happyReduce_45 = happySpecReduce_0 20# happyReduction_45 -happyReduction_45 = happyIn25 +happyReduce_46 = happySpecReduce_0 20# happyReduction_46 +happyReduction_46 = happyIn25 ([] ) -happyReduce_46 = happySpecReduce_1 20# happyReduction_46 -happyReduction_46 happy_x_1 +happyReduce_47 = happySpecReduce_1 20# happyReduction_47 +happyReduction_47 happy_x_1 = case happyOut24 happy_x_1 of { happy_var_1 -> happyIn25 ((:[]) happy_var_1 )} -happyReduce_47 = happySpecReduce_3 20# happyReduction_47 -happyReduction_47 happy_x_3 +happyReduce_48 = happySpecReduce_3 20# happyReduction_48 +happyReduction_48 happy_x_3 happy_x_2 happy_x_1 = case happyOut24 happy_x_1 of { happy_var_1 -> @@ -818,8 +835,8 @@ happyReduction_47 happy_x_3 ((:) happy_var_1 happy_var_3 )}} -happyReduce_48 = happyReduce 7# 21# happyReduction_48 -happyReduction_48 (happy_x_7 `HappyStk` +happyReduce_49 = happyReduce 7# 21# happyReduction_49 +happyReduction_49 (happy_x_7 `HappyStk` happy_x_6 `HappyStk` happy_x_5 `HappyStk` happy_x_4 `HappyStk` @@ -834,8 +851,8 @@ happyReduction_48 (happy_x_7 `HappyStk` (EPi happy_var_2 happy_var_4 happy_var_7 ) `HappyStk` happyRest}}} -happyReduce_49 = happySpecReduce_3 21# happyReduction_49 -happyReduction_49 happy_x_3 +happyReduce_50 = happySpecReduce_3 21# happyReduction_50 +happyReduction_50 happy_x_3 happy_x_2 happy_x_1 = case happyOut28 happy_x_1 of { happy_var_1 -> @@ -844,28 +861,28 @@ happyReduction_49 happy_x_3 (EPiNoVar happy_var_1 happy_var_3 )}} -happyReduce_50 = happySpecReduce_1 21# happyReduction_50 -happyReduction_50 happy_x_1 +happyReduce_51 = happySpecReduce_1 21# happyReduction_51 +happyReduction_51 happy_x_1 = case happyOut28 happy_x_1 of { happy_var_1 -> happyIn26 (happy_var_1 )} -happyReduce_51 = happySpecReduce_1 22# happyReduction_51 -happyReduction_51 happy_x_1 +happyReduce_52 = happySpecReduce_1 22# happyReduction_52 +happyReduction_52 happy_x_1 = case happyOut5 happy_x_1 of { happy_var_1 -> happyIn27 (VVar happy_var_1 )} -happyReduce_52 = happySpecReduce_1 22# happyReduction_52 -happyReduction_52 happy_x_1 +happyReduce_53 = happySpecReduce_1 22# happyReduction_53 +happyReduction_53 happy_x_1 = happyIn27 (VWild ) -happyReduce_53 = happyReduce 4# 23# happyReduction_53 -happyReduction_53 (happy_x_4 `HappyStk` +happyReduce_54 = happyReduce 4# 23# happyReduction_54 +happyReduction_54 (happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk` @@ -876,8 +893,8 @@ happyReduction_53 (happy_x_4 `HappyStk` (EAbs happy_var_2 happy_var_4 ) `HappyStk` happyRest}} -happyReduce_54 = happyReduce 6# 23# happyReduction_54 -happyReduction_54 (happy_x_6 `HappyStk` +happyReduce_55 = happyReduce 6# 23# happyReduction_55 +happyReduction_55 (happy_x_6 `HappyStk` happy_x_5 `HappyStk` happy_x_4 `HappyStk` happy_x_3 `HappyStk` @@ -890,8 +907,8 @@ happyReduction_54 (happy_x_6 `HappyStk` (ELet happy_var_3 happy_var_6 ) `HappyStk` happyRest}} -happyReduce_55 = happyReduce 6# 23# happyReduction_55 -happyReduction_55 (happy_x_6 `HappyStk` +happyReduce_56 = happyReduce 6# 23# happyReduction_56 +happyReduction_56 (happy_x_6 `HappyStk` happy_x_5 `HappyStk` happy_x_4 `HappyStk` happy_x_3 `HappyStk` @@ -904,8 +921,8 @@ happyReduction_55 (happy_x_6 `HappyStk` (ECase happy_var_2 happy_var_5 ) `HappyStk` happyRest}} -happyReduce_56 = happyReduce 6# 23# happyReduction_56 -happyReduction_56 (happy_x_6 `HappyStk` +happyReduce_57 = happyReduce 6# 23# happyReduction_57 +happyReduction_57 (happy_x_6 `HappyStk` happy_x_5 `HappyStk` happy_x_4 `HappyStk` happy_x_3 `HappyStk` @@ -919,8 +936,8 @@ happyReduction_56 (happy_x_6 `HappyStk` (EIf happy_var_2 happy_var_4 happy_var_6 ) `HappyStk` happyRest}}} -happyReduce_57 = happyReduce 5# 23# happyReduction_57 -happyReduction_57 (happy_x_5 `HappyStk` +happyReduce_58 = happyReduce 5# 23# happyReduction_58 +happyReduction_58 (happy_x_5 `HappyStk` happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk` @@ -932,15 +949,15 @@ happyReduction_57 (happy_x_5 `HappyStk` (EDo (reverse happy_var_3) happy_var_4 ) `HappyStk` happyRest}} -happyReduce_58 = happySpecReduce_1 23# happyReduction_58 -happyReduction_58 happy_x_1 +happyReduce_59 = happySpecReduce_1 23# happyReduction_59 +happyReduction_59 happy_x_1 = case happyOut50 happy_x_1 of { happy_var_1 -> happyIn28 (happy_var_1 )} -happyReduce_59 = happyReduce 5# 24# happyReduction_59 -happyReduction_59 (happy_x_5 `HappyStk` +happyReduce_60 = happyReduce 5# 24# happyReduction_60 +happyReduction_60 (happy_x_5 `HappyStk` happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk` @@ -953,20 +970,20 @@ happyReduction_59 (happy_x_5 `HappyStk` (LetDef happy_var_1 happy_var_3 happy_var_5 ) `HappyStk` happyRest}}} -happyReduce_60 = happySpecReduce_0 25# happyReduction_60 -happyReduction_60 = happyIn30 +happyReduce_61 = happySpecReduce_0 25# happyReduction_61 +happyReduction_61 = happyIn30 ([] ) -happyReduce_61 = happySpecReduce_1 25# happyReduction_61 -happyReduction_61 happy_x_1 +happyReduce_62 = happySpecReduce_1 25# happyReduction_62 +happyReduction_62 happy_x_1 = case happyOut29 happy_x_1 of { happy_var_1 -> happyIn30 ((:[]) happy_var_1 )} -happyReduce_62 = happySpecReduce_3 25# happyReduction_62 -happyReduction_62 happy_x_3 +happyReduce_63 = happySpecReduce_3 25# happyReduction_63 +happyReduction_63 happy_x_3 happy_x_2 happy_x_1 = case happyOut29 happy_x_1 of { happy_var_1 -> @@ -975,8 +992,8 @@ happyReduction_62 happy_x_3 ((:) happy_var_1 happy_var_3 )}} -happyReduce_63 = happyReduce 4# 26# happyReduction_63 -happyReduction_63 (happy_x_4 `HappyStk` +happyReduce_64 = happyReduce 4# 26# happyReduction_64 +happyReduction_64 (happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk` @@ -988,20 +1005,20 @@ happyReduction_63 (happy_x_4 `HappyStk` (Case happy_var_1 happy_var_2 happy_var_4 ) `HappyStk` happyRest}}} -happyReduce_64 = happySpecReduce_0 27# happyReduction_64 -happyReduction_64 = happyIn32 +happyReduce_65 = happySpecReduce_0 27# happyReduction_65 +happyReduction_65 = happyIn32 ([] ) -happyReduce_65 = happySpecReduce_1 27# happyReduction_65 -happyReduction_65 happy_x_1 +happyReduce_66 = happySpecReduce_1 27# happyReduction_66 +happyReduction_66 happy_x_1 = case happyOut31 happy_x_1 of { happy_var_1 -> happyIn32 ((:[]) happy_var_1 )} -happyReduce_66 = happySpecReduce_3 27# happyReduction_66 -happyReduction_66 happy_x_3 +happyReduce_67 = happySpecReduce_3 27# happyReduction_67 +happyReduction_67 happy_x_3 happy_x_2 happy_x_1 = case happyOut31 happy_x_1 of { happy_var_1 -> @@ -1010,8 +1027,8 @@ happyReduction_66 happy_x_3 ((:) happy_var_1 happy_var_3 )}} -happyReduce_67 = happySpecReduce_3 28# happyReduction_67 -happyReduction_67 happy_x_3 +happyReduce_68 = happySpecReduce_3 28# happyReduction_68 +happyReduction_68 happy_x_3 happy_x_2 happy_x_1 = case happyOut27 happy_x_1 of { happy_var_1 -> @@ -1020,20 +1037,20 @@ happyReduction_67 happy_x_3 (BindVar happy_var_1 happy_var_3 )}} -happyReduce_68 = happySpecReduce_1 28# happyReduction_68 -happyReduction_68 happy_x_1 +happyReduce_69 = happySpecReduce_1 28# happyReduction_69 +happyReduction_69 happy_x_1 = case happyOut26 happy_x_1 of { happy_var_1 -> happyIn33 (BindNoVar happy_var_1 )} -happyReduce_69 = happySpecReduce_0 29# happyReduction_69 -happyReduction_69 = happyIn34 +happyReduce_70 = happySpecReduce_0 29# happyReduction_70 +happyReduction_70 = happyIn34 ([] ) -happyReduce_70 = happySpecReduce_3 29# happyReduction_70 -happyReduction_70 happy_x_3 +happyReduce_71 = happySpecReduce_3 29# happyReduction_71 +happyReduction_71 happy_x_3 happy_x_2 happy_x_1 = case happyOut34 happy_x_1 of { happy_var_1 -> @@ -1042,18 +1059,18 @@ happyReduction_70 happy_x_3 (flip (:) happy_var_1 happy_var_2 )}} -happyReduce_71 = happySpecReduce_3 30# happyReduction_71 -happyReduction_71 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut35 happy_x_1 of { happy_var_1 -> - case happyOut36 happy_x_3 of { happy_var_3 -> - happyIn35 - (EBind happy_var_1 happy_var_3 - )}} - happyReduce_72 = happySpecReduce_3 30# happyReduction_72 happyReduction_72 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut35 happy_x_1 of { happy_var_1 -> + case happyOut36 happy_x_3 of { happy_var_3 -> + happyIn35 + (EBind happy_var_1 happy_var_3 + )}} + +happyReduce_73 = happySpecReduce_3 30# happyReduction_73 +happyReduction_73 happy_x_3 happy_x_2 happy_x_1 = case happyOut35 happy_x_1 of { happy_var_1 -> @@ -1062,15 +1079,15 @@ happyReduction_72 happy_x_3 (EBindC happy_var_1 happy_var_3 )}} -happyReduce_73 = happySpecReduce_1 30# happyReduction_73 -happyReduction_73 happy_x_1 +happyReduce_74 = happySpecReduce_1 30# happyReduction_74 +happyReduction_74 happy_x_1 = case happyOut36 happy_x_1 of { happy_var_1 -> happyIn35 (happy_var_1 )} -happyReduce_74 = happySpecReduce_3 31# happyReduction_74 -happyReduction_74 happy_x_3 +happyReduce_75 = happySpecReduce_3 31# happyReduction_75 +happyReduction_75 happy_x_3 happy_x_2 happy_x_1 = case happyOut37 happy_x_1 of { happy_var_1 -> @@ -1079,15 +1096,15 @@ happyReduction_74 happy_x_3 (EOr happy_var_1 happy_var_3 )}} -happyReduce_75 = happySpecReduce_1 31# happyReduction_75 -happyReduction_75 happy_x_1 +happyReduce_76 = happySpecReduce_1 31# happyReduction_76 +happyReduction_76 happy_x_1 = case happyOut37 happy_x_1 of { happy_var_1 -> happyIn36 (happy_var_1 )} -happyReduce_76 = happySpecReduce_3 32# happyReduction_76 -happyReduction_76 happy_x_3 +happyReduce_77 = happySpecReduce_3 32# happyReduction_77 +happyReduction_77 happy_x_3 happy_x_2 happy_x_1 = case happyOut38 happy_x_1 of { happy_var_1 -> @@ -1096,23 +1113,13 @@ happyReduction_76 happy_x_3 (EAnd happy_var_1 happy_var_3 )}} -happyReduce_77 = happySpecReduce_1 32# happyReduction_77 -happyReduction_77 happy_x_1 +happyReduce_78 = happySpecReduce_1 32# happyReduction_78 +happyReduction_78 happy_x_1 = case happyOut38 happy_x_1 of { happy_var_1 -> happyIn37 (happy_var_1 )} -happyReduce_78 = happySpecReduce_3 33# happyReduction_78 -happyReduction_78 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut39 happy_x_1 of { happy_var_1 -> - case happyOut39 happy_x_3 of { happy_var_3 -> - happyIn38 - (EEq happy_var_1 happy_var_3 - )}} - happyReduce_79 = happySpecReduce_3 33# happyReduction_79 happyReduction_79 happy_x_3 happy_x_2 @@ -1120,7 +1127,7 @@ happyReduction_79 happy_x_3 = case happyOut39 happy_x_1 of { happy_var_1 -> case happyOut39 happy_x_3 of { happy_var_3 -> happyIn38 - (ENe happy_var_1 happy_var_3 + (EEq happy_var_1 happy_var_3 )}} happyReduce_80 = happySpecReduce_3 33# happyReduction_80 @@ -1130,7 +1137,7 @@ happyReduction_80 happy_x_3 = case happyOut39 happy_x_1 of { happy_var_1 -> case happyOut39 happy_x_3 of { happy_var_3 -> happyIn38 - (ELt happy_var_1 happy_var_3 + (ENe happy_var_1 happy_var_3 )}} happyReduce_81 = happySpecReduce_3 33# happyReduction_81 @@ -1140,7 +1147,7 @@ happyReduction_81 happy_x_3 = case happyOut39 happy_x_1 of { happy_var_1 -> case happyOut39 happy_x_3 of { happy_var_3 -> happyIn38 - (ELe happy_var_1 happy_var_3 + (ELt happy_var_1 happy_var_3 )}} happyReduce_82 = happySpecReduce_3 33# happyReduction_82 @@ -1150,11 +1157,21 @@ happyReduction_82 happy_x_3 = case happyOut39 happy_x_1 of { happy_var_1 -> case happyOut39 happy_x_3 of { happy_var_3 -> happyIn38 - (EGt happy_var_1 happy_var_3 + (ELe happy_var_1 happy_var_3 )}} happyReduce_83 = happySpecReduce_3 33# happyReduction_83 happyReduction_83 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut39 happy_x_1 of { happy_var_1 -> + case happyOut39 happy_x_3 of { happy_var_3 -> + happyIn38 + (EGt happy_var_1 happy_var_3 + )}} + +happyReduce_84 = happySpecReduce_3 33# happyReduction_84 +happyReduction_84 happy_x_3 happy_x_2 happy_x_1 = case happyOut39 happy_x_1 of { happy_var_1 -> @@ -1163,15 +1180,15 @@ happyReduction_83 happy_x_3 (EGe happy_var_1 happy_var_3 )}} -happyReduce_84 = happySpecReduce_1 33# happyReduction_84 -happyReduction_84 happy_x_1 +happyReduce_85 = happySpecReduce_1 33# happyReduction_85 +happyReduction_85 happy_x_1 = case happyOut39 happy_x_1 of { happy_var_1 -> happyIn38 (happy_var_1 )} -happyReduce_85 = happySpecReduce_3 34# happyReduction_85 -happyReduction_85 happy_x_3 +happyReduce_86 = happySpecReduce_3 34# happyReduction_86 +happyReduction_86 happy_x_3 happy_x_2 happy_x_1 = case happyOut40 happy_x_1 of { happy_var_1 -> @@ -1180,25 +1197,25 @@ happyReduction_85 happy_x_3 (EListCons happy_var_1 happy_var_3 )}} -happyReduce_86 = happySpecReduce_1 34# happyReduction_86 -happyReduction_86 happy_x_1 +happyReduce_87 = happySpecReduce_1 34# happyReduction_87 +happyReduction_87 happy_x_1 = case happyOut40 happy_x_1 of { happy_var_1 -> happyIn39 (happy_var_1 )} -happyReduce_87 = happySpecReduce_3 35# happyReduction_87 -happyReduction_87 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut40 happy_x_1 of { happy_var_1 -> - case happyOut41 happy_x_3 of { happy_var_3 -> - happyIn40 - (EAdd happy_var_1 happy_var_3 - )}} - happyReduce_88 = happySpecReduce_3 35# happyReduction_88 happyReduction_88 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut40 happy_x_1 of { happy_var_1 -> + case happyOut41 happy_x_3 of { happy_var_3 -> + happyIn40 + (EAdd happy_var_1 happy_var_3 + )}} + +happyReduce_89 = happySpecReduce_3 35# happyReduction_89 +happyReduction_89 happy_x_3 happy_x_2 happy_x_1 = case happyOut40 happy_x_1 of { happy_var_1 -> @@ -1207,23 +1224,13 @@ happyReduction_88 happy_x_3 (ESub happy_var_1 happy_var_3 )}} -happyReduce_89 = happySpecReduce_1 35# happyReduction_89 -happyReduction_89 happy_x_1 +happyReduce_90 = happySpecReduce_1 35# happyReduction_90 +happyReduction_90 happy_x_1 = case happyOut41 happy_x_1 of { happy_var_1 -> happyIn40 (happy_var_1 )} -happyReduce_90 = happySpecReduce_3 36# happyReduction_90 -happyReduction_90 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut41 happy_x_1 of { happy_var_1 -> - case happyOut42 happy_x_3 of { happy_var_3 -> - happyIn41 - (EMul happy_var_1 happy_var_3 - )}} - happyReduce_91 = happySpecReduce_3 36# happyReduction_91 happyReduction_91 happy_x_3 happy_x_2 @@ -1231,11 +1238,21 @@ happyReduction_91 happy_x_3 = case happyOut41 happy_x_1 of { happy_var_1 -> case happyOut42 happy_x_3 of { happy_var_3 -> happyIn41 - (EDiv happy_var_1 happy_var_3 + (EMul happy_var_1 happy_var_3 )}} happyReduce_92 = happySpecReduce_3 36# happyReduction_92 happyReduction_92 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut41 happy_x_1 of { happy_var_1 -> + case happyOut42 happy_x_3 of { happy_var_3 -> + happyIn41 + (EDiv happy_var_1 happy_var_3 + )}} + +happyReduce_93 = happySpecReduce_3 36# happyReduction_93 +happyReduction_93 happy_x_3 happy_x_2 happy_x_1 = case happyOut41 happy_x_1 of { happy_var_1 -> @@ -1244,30 +1261,30 @@ happyReduction_92 happy_x_3 (EMod happy_var_1 happy_var_3 )}} -happyReduce_93 = happySpecReduce_1 36# happyReduction_93 -happyReduction_93 happy_x_1 +happyReduce_94 = happySpecReduce_1 36# happyReduction_94 +happyReduction_94 happy_x_1 = case happyOut42 happy_x_1 of { happy_var_1 -> happyIn41 (happy_var_1 )} -happyReduce_94 = happySpecReduce_2 37# happyReduction_94 -happyReduction_94 happy_x_2 +happyReduce_95 = happySpecReduce_2 37# happyReduction_95 +happyReduction_95 happy_x_2 happy_x_1 = case happyOut42 happy_x_2 of { happy_var_2 -> happyIn42 (ENeg happy_var_2 )} -happyReduce_95 = happySpecReduce_1 37# happyReduction_95 -happyReduction_95 happy_x_1 +happyReduce_96 = happySpecReduce_1 37# happyReduction_96 +happyReduction_96 happy_x_1 = case happyOut43 happy_x_1 of { happy_var_1 -> happyIn42 (happy_var_1 )} -happyReduce_96 = happySpecReduce_2 38# happyReduction_96 -happyReduction_96 happy_x_2 +happyReduce_97 = happySpecReduce_2 38# happyReduction_97 +happyReduction_97 happy_x_2 happy_x_1 = case happyOut43 happy_x_1 of { happy_var_1 -> case happyOut44 happy_x_2 of { happy_var_2 -> @@ -1275,15 +1292,15 @@ happyReduction_96 happy_x_2 (EApp happy_var_1 happy_var_2 )}} -happyReduce_97 = happySpecReduce_1 38# happyReduction_97 -happyReduction_97 happy_x_1 +happyReduce_98 = happySpecReduce_1 38# happyReduction_98 +happyReduction_98 happy_x_1 = case happyOut44 happy_x_1 of { happy_var_1 -> happyIn43 (happy_var_1 )} -happyReduce_98 = happySpecReduce_3 39# happyReduction_98 -happyReduction_98 happy_x_3 +happyReduce_99 = happySpecReduce_3 39# happyReduction_99 +happyReduction_99 happy_x_3 happy_x_2 happy_x_1 = case happyOut44 happy_x_1 of { happy_var_1 -> @@ -1292,15 +1309,15 @@ happyReduction_98 happy_x_3 (EProj happy_var_1 happy_var_3 )}} -happyReduce_99 = happySpecReduce_1 39# happyReduction_99 -happyReduction_99 happy_x_1 +happyReduce_100 = happySpecReduce_1 39# happyReduction_100 +happyReduction_100 happy_x_1 = case happyOut45 happy_x_1 of { happy_var_1 -> happyIn44 (happy_var_1 )} -happyReduce_100 = happyReduce 4# 40# happyReduction_100 -happyReduction_100 (happy_x_4 `HappyStk` +happyReduce_101 = happyReduce 4# 40# happyReduction_101 +happyReduction_101 (happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk` @@ -1310,8 +1327,8 @@ happyReduction_100 (happy_x_4 `HappyStk` (ERecType happy_var_3 ) `HappyStk` happyRest} -happyReduce_101 = happyReduce 4# 40# happyReduction_101 -happyReduction_101 (happy_x_4 `HappyStk` +happyReduce_102 = happyReduce 4# 40# happyReduction_102 +happyReduction_102 (happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk` @@ -1321,8 +1338,15 @@ happyReduction_101 (happy_x_4 `HappyStk` (ERec happy_var_3 ) `HappyStk` happyRest} -happyReduce_102 = happySpecReduce_3 40# happyReduction_102 -happyReduction_102 happy_x_3 +happyReduce_103 = happySpecReduce_2 40# happyReduction_103 +happyReduction_103 happy_x_2 + happy_x_1 + = happyIn45 + (EEmptyList + ) + +happyReduce_104 = happySpecReduce_3 40# happyReduction_104 +happyReduction_104 happy_x_3 happy_x_2 happy_x_1 = case happyOut51 happy_x_2 of { happy_var_2 -> @@ -1330,48 +1354,61 @@ happyReduction_102 happy_x_3 (EList happy_var_2 )} -happyReduce_103 = happySpecReduce_1 40# happyReduction_103 -happyReduction_103 happy_x_1 +happyReduce_105 = happyReduce 5# 40# happyReduction_105 +happyReduction_105 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut26 happy_x_2 of { happy_var_2 -> + case happyOut51 happy_x_4 of { happy_var_4 -> + happyIn45 + (ETuple happy_var_2 happy_var_4 + ) `HappyStk` happyRest}} + +happyReduce_106 = happySpecReduce_1 40# happyReduction_106 +happyReduction_106 happy_x_1 = case happyOut5 happy_x_1 of { happy_var_1 -> happyIn45 (EVar happy_var_1 )} -happyReduce_104 = happySpecReduce_1 40# happyReduction_104 -happyReduction_104 happy_x_1 +happyReduce_107 = happySpecReduce_1 40# happyReduction_107 +happyReduction_107 happy_x_1 = happyIn45 (EType ) -happyReduce_105 = happySpecReduce_1 40# happyReduction_105 -happyReduction_105 happy_x_1 +happyReduce_108 = happySpecReduce_1 40# happyReduction_108 +happyReduction_108 happy_x_1 = case happyOut6 happy_x_1 of { happy_var_1 -> happyIn45 (EStr happy_var_1 )} -happyReduce_106 = happySpecReduce_1 40# happyReduction_106 -happyReduction_106 happy_x_1 +happyReduce_109 = happySpecReduce_1 40# happyReduction_109 +happyReduction_109 happy_x_1 = case happyOut7 happy_x_1 of { happy_var_1 -> happyIn45 (EInteger happy_var_1 )} -happyReduce_107 = happySpecReduce_1 40# happyReduction_107 -happyReduction_107 happy_x_1 +happyReduce_110 = happySpecReduce_1 40# happyReduction_110 +happyReduction_110 happy_x_1 = case happyOut8 happy_x_1 of { happy_var_1 -> happyIn45 (EDouble happy_var_1 )} -happyReduce_108 = happySpecReduce_1 40# happyReduction_108 -happyReduction_108 happy_x_1 +happyReduce_111 = happySpecReduce_1 40# happyReduction_111 +happyReduction_111 happy_x_1 = happyIn45 (EMeta ) -happyReduce_109 = happySpecReduce_3 40# happyReduction_109 -happyReduction_109 happy_x_3 +happyReduce_112 = happySpecReduce_3 40# happyReduction_112 +happyReduction_112 happy_x_3 happy_x_2 happy_x_1 = case happyOut26 happy_x_2 of { happy_var_2 -> @@ -1379,8 +1416,8 @@ happyReduction_109 happy_x_3 (happy_var_2 )} -happyReduce_110 = happySpecReduce_3 41# happyReduction_110 -happyReduction_110 happy_x_3 +happyReduce_113 = happySpecReduce_3 41# happyReduction_113 +happyReduction_113 happy_x_3 happy_x_2 happy_x_1 = case happyOut5 happy_x_1 of { happy_var_1 -> @@ -1389,20 +1426,20 @@ happyReduction_110 happy_x_3 (FieldType happy_var_1 happy_var_3 )}} -happyReduce_111 = happySpecReduce_0 42# happyReduction_111 -happyReduction_111 = happyIn47 +happyReduce_114 = happySpecReduce_0 42# happyReduction_114 +happyReduction_114 = happyIn47 ([] ) -happyReduce_112 = happySpecReduce_1 42# happyReduction_112 -happyReduction_112 happy_x_1 +happyReduce_115 = happySpecReduce_1 42# happyReduction_115 +happyReduction_115 happy_x_1 = case happyOut46 happy_x_1 of { happy_var_1 -> happyIn47 ((:[]) happy_var_1 )} -happyReduce_113 = happySpecReduce_3 42# happyReduction_113 -happyReduction_113 happy_x_3 +happyReduce_116 = happySpecReduce_3 42# happyReduction_116 +happyReduction_116 happy_x_3 happy_x_2 happy_x_1 = case happyOut46 happy_x_1 of { happy_var_1 -> @@ -1411,8 +1448,8 @@ happyReduction_113 happy_x_3 ((:) happy_var_1 happy_var_3 )}} -happyReduce_114 = happySpecReduce_3 43# happyReduction_114 -happyReduction_114 happy_x_3 +happyReduce_117 = happySpecReduce_3 43# happyReduction_117 +happyReduction_117 happy_x_3 happy_x_2 happy_x_1 = case happyOut5 happy_x_1 of { happy_var_1 -> @@ -1421,20 +1458,20 @@ happyReduction_114 happy_x_3 (FieldValue happy_var_1 happy_var_3 )}} -happyReduce_115 = happySpecReduce_0 44# happyReduction_115 -happyReduction_115 = happyIn49 +happyReduce_118 = happySpecReduce_0 44# happyReduction_118 +happyReduction_118 = happyIn49 ([] ) -happyReduce_116 = happySpecReduce_1 44# happyReduction_116 -happyReduction_116 happy_x_1 +happyReduce_119 = happySpecReduce_1 44# happyReduction_119 +happyReduction_119 happy_x_1 = case happyOut48 happy_x_1 of { happy_var_1 -> happyIn49 ((:[]) happy_var_1 )} -happyReduce_117 = happySpecReduce_3 44# happyReduction_117 -happyReduction_117 happy_x_3 +happyReduce_120 = happySpecReduce_3 44# happyReduction_120 +happyReduction_120 happy_x_3 happy_x_2 happy_x_1 = case happyOut48 happy_x_1 of { happy_var_1 -> @@ -1443,27 +1480,22 @@ happyReduction_117 happy_x_3 ((:) happy_var_1 happy_var_3 )}} -happyReduce_118 = happySpecReduce_1 45# happyReduction_118 -happyReduction_118 happy_x_1 +happyReduce_121 = happySpecReduce_1 45# happyReduction_121 +happyReduction_121 happy_x_1 = case happyOut35 happy_x_1 of { happy_var_1 -> happyIn50 (happy_var_1 )} -happyReduce_119 = happySpecReduce_0 46# happyReduction_119 -happyReduction_119 = happyIn51 - ([] - ) - -happyReduce_120 = happySpecReduce_1 46# happyReduction_120 -happyReduction_120 happy_x_1 +happyReduce_122 = happySpecReduce_1 46# happyReduction_122 +happyReduction_122 happy_x_1 = case happyOut26 happy_x_1 of { happy_var_1 -> happyIn51 ((:[]) happy_var_1 )} -happyReduce_121 = happySpecReduce_3 46# happyReduction_121 -happyReduction_121 happy_x_3 +happyReduce_123 = happySpecReduce_3 46# happyReduction_123 +happyReduction_123 happy_x_3 happy_x_2 happy_x_1 = case happyOut26 happy_x_1 of { happy_var_1 -> diff --git a/src/Transfer/Syntax/Par.y b/src/Transfer/Syntax/Par.y index 9b66dccd1..61a2788ef 100644 --- a/src/Transfer/Syntax/Par.y +++ b/src/Transfer/Syntax/Par.y @@ -136,7 +136,9 @@ Pattern2 : Ident Pattern3 ListPattern { PConsTop $1 $2 (reverse $3) } Pattern3 :: { Pattern } Pattern3 : 'rec' '{' ListFieldPattern '}' { PRec $3 } - | '[' ListPListElem ']' { PList $2 } + | '[' ']' { PEmptyList } + | '[' ListCommaPattern ']' { PList $2 } + | '(' CommaPattern ',' ListCommaPattern ')' { PTuple $2 $4 } | 'Type' { PType } | String { PStr $1 } | Integer { PInt $1 } @@ -145,14 +147,13 @@ Pattern3 : 'rec' '{' ListFieldPattern '}' { PRec $3 } | '(' Pattern ')' { $2 } -PListElem :: { PListElem } -PListElem : Pattern { PListElem $1 } +CommaPattern :: { CommaPattern } +CommaPattern : Pattern { CommaPattern $1 } -ListPListElem :: { [PListElem] } -ListPListElem : {- empty -} { [] } - | PListElem { (:[]) $1 } - | PListElem ',' ListPListElem { (:) $1 $3 } +ListCommaPattern :: { [CommaPattern] } +ListCommaPattern : CommaPattern { (:[]) $1 } + | CommaPattern ',' ListCommaPattern { (:) $1 $3 } ListPattern :: { [Pattern] } @@ -282,7 +283,9 @@ Exp12 : Exp12 '.' Ident { EProj $1 $3 } Exp13 :: { Exp } Exp13 : 'sig' '{' ListFieldType '}' { ERecType $3 } | 'rec' '{' ListFieldValue '}' { ERec $3 } + | '[' ']' { EEmptyList } | '[' ListExp ']' { EList $2 } + | '(' Exp ',' ListExp ')' { ETuple $2 $4 } | Ident { EVar $1 } | 'Type' { EType } | String { EStr $1 } @@ -317,8 +320,7 @@ Exp2 : Exp3 { $1 } ListExp :: { [Exp] } -ListExp : {- empty -} { [] } - | Exp { (:[]) $1 } +ListExp : Exp { (:[]) $1 } | Exp ',' ListExp { (:) $1 $3 } diff --git a/src/Transfer/Syntax/Print.hs b/src/Transfer/Syntax/Print.hs index 5b614c6e2..101ec29eb 100644 --- a/src/Transfer/Syntax/Print.hs +++ b/src/Transfer/Syntax/Print.hs @@ -94,13 +94,15 @@ instance Print (Tree c) where PConsTop i pattern patterns -> prPrec _i 2 (concatD [prt 0 i , prt 3 pattern , prt 0 patterns]) PCons i patterns -> prPrec _i 3 (concatD [doc (showString "(") , prt 0 i , prt 0 patterns , doc (showString ")")]) PRec fieldpatterns -> prPrec _i 3 (concatD [doc (showString "rec") , doc (showString "{") , prt 0 fieldpatterns , doc (showString "}")]) - PList plistelems -> prPrec _i 3 (concatD [doc (showString "[") , prt 0 plistelems , doc (showString "]")]) + PEmptyList -> prPrec _i 3 (concatD [doc (showString "[") , doc (showString "]")]) + PList commapatterns -> prPrec _i 3 (concatD [doc (showString "[") , prt 0 commapatterns , doc (showString "]")]) + PTuple commapattern commapatterns -> prPrec _i 3 (concatD [doc (showString "(") , prt 0 commapattern , doc (showString ",") , prt 0 commapatterns , doc (showString ")")]) PType -> prPrec _i 3 (concatD [doc (showString "Type")]) PStr str -> prPrec _i 3 (concatD [prt 0 str]) PInt n -> prPrec _i 3 (concatD [prt 0 n]) PVar i -> prPrec _i 3 (concatD [prt 0 i]) PWild -> prPrec _i 3 (concatD [doc (showString "_")]) - PListElem pattern -> prPrec _i 0 (concatD [prt 0 pattern]) + CommaPattern pattern -> prPrec _i 0 (concatD [prt 0 pattern]) FieldPattern i pattern -> prPrec _i 0 (concatD [prt 0 i , doc (showString "=") , prt 0 pattern]) EPi varorwild exp0 exp1 -> prPrec _i 0 (concatD [doc (showString "(") , prt 0 varorwild , doc (showString ":") , prt 0 exp0 , doc (showString ")") , doc (showString "->") , prt 0 exp1]) EPiNoVar exp0 exp1 -> prPrec _i 0 (concatD [prt 1 exp0 , doc (showString "->") , prt 0 exp1]) @@ -130,7 +132,9 @@ instance Print (Tree c) where EProj exp i -> prPrec _i 12 (concatD [prt 12 exp , doc (showString ".") , prt 0 i]) ERecType fieldtypes -> prPrec _i 13 (concatD [doc (showString "sig") , doc (showString "{") , prt 0 fieldtypes , doc (showString "}")]) ERec fieldvalues -> prPrec _i 13 (concatD [doc (showString "rec") , doc (showString "{") , prt 0 fieldvalues , doc (showString "}")]) + EEmptyList -> prPrec _i 13 (concatD [doc (showString "[") , doc (showString "]")]) EList exps -> prPrec _i 13 (concatD [doc (showString "[") , prt 0 exps , doc (showString "]")]) + ETuple exp exps -> prPrec _i 13 (concatD [doc (showString "(") , prt 0 exp , doc (showString ",") , prt 0 exps , doc (showString ")")]) EVar i -> prPrec _i 13 (concatD [prt 0 i]) EType -> prPrec _i 13 (concatD [doc (showString "Type")]) EStr str -> prPrec _i 13 (concatD [prt 0 str]) @@ -162,9 +166,8 @@ instance Print [ConsDecl] where [] -> (concatD []) [x] -> (concatD [prt 0 x]) x:xs -> (concatD [prt 0 x , doc (showString ";") , prt 0 xs]) -instance Print [PListElem] where +instance Print [CommaPattern] where prt _ es = case es of - [] -> (concatD []) [x] -> (concatD [prt 0 x]) x:xs -> (concatD [prt 0 x , doc (showString ",") , prt 0 xs]) instance Print [Pattern] where @@ -202,6 +205,5 @@ instance Print [FieldValue] where x:xs -> (concatD [prt 0 x , doc (showString ";") , prt 0 xs]) instance Print [Exp] where prt _ es = case es of - [] -> (concatD []) [x] -> (concatD [prt 0 x]) x:xs -> (concatD [prt 0 x , doc (showString ",") , prt 0 xs]) diff --git a/src/Transfer/Syntax/Skel.hs b/src/Transfer/Syntax/Skel.hs index 6262da7f9..7a847f2f3 100644 --- a/src/Transfer/Syntax/Skel.hs +++ b/src/Transfer/Syntax/Skel.hs @@ -25,13 +25,15 @@ transTree t = case t of PConsTop i pattern patterns -> failure t PCons i patterns -> failure t PRec fieldpatterns -> failure t - PList plistelems -> failure t + PEmptyList -> failure t + PList commapatterns -> failure t + PTuple commapattern commapatterns -> failure t PType -> failure t PStr str -> failure t PInt n -> failure t PVar i -> failure t PWild -> failure t - PListElem pattern -> failure t + CommaPattern pattern -> failure t FieldPattern i pattern -> failure t EPi varorwild exp0 exp1 -> failure t EPiNoVar exp0 exp1 -> failure t @@ -61,7 +63,9 @@ transTree t = case t of EProj exp i -> failure t ERecType fieldtypes -> failure t ERec fieldvalues -> failure t + EEmptyList -> failure t EList exps -> failure t + ETuple exp exps -> failure t EVar i -> failure t EType -> failure t EStr str -> failure t @@ -109,16 +113,18 @@ transPattern t = case t of PConsTop i pattern patterns -> failure t PCons i patterns -> failure t PRec fieldpatterns -> failure t - PList plistelems -> failure t + PEmptyList -> failure t + PList commapatterns -> failure t + PTuple commapattern commapatterns -> failure t PType -> failure t PStr str -> failure t PInt n -> failure t PVar i -> failure t PWild -> failure t -transPListElem :: PListElem -> Result -transPListElem t = case t of - PListElem pattern -> failure t +transCommaPattern :: CommaPattern -> Result +transCommaPattern t = case t of + CommaPattern pattern -> failure t transFieldPattern :: FieldPattern -> Result transFieldPattern t = case t of @@ -154,7 +160,9 @@ transExp t = case t of EProj exp i -> failure t ERecType fieldtypes -> failure t ERec fieldvalues -> failure t + EEmptyList -> failure t EList exps -> failure t + ETuple exp exps -> failure t EVar i -> failure t EType -> failure t EStr str -> failure t diff --git a/src/Transfer/Syntax/Syntax.cf b/src/Transfer/Syntax/Syntax.cf index 50812d2f1..b38dd115f 100644 --- a/src/Transfer/Syntax/Syntax.cf +++ b/src/Transfer/Syntax/Syntax.cf @@ -41,9 +41,16 @@ internal PCons. Pattern3 ::= "(" Ident [Pattern] ")" ; PRec. Pattern3 ::= "rec" "{" [FieldPattern] "}"; -- List patterns -PList. Pattern3 ::= "[" [PListElem] "]" ; -PListElem. PListElem ::= Pattern ; -separator PListElem "," ; +PEmptyList. Pattern3 ::= "[" "]" ; +PList. Pattern3 ::= "[" [CommaPattern] "]" ; + +-- Tuple patterns +PTuple. Pattern3 ::= "(" CommaPattern "," [CommaPattern] ")" ; + +-- hack to allow a different [Pattern] from the one defined +-- for constructor patterns +CommaPattern. CommaPattern ::= Pattern ; +separator nonempty CommaPattern "," ; -- The pattern matching the Type constant PType. Pattern3 ::= "Type" ; @@ -121,8 +128,12 @@ ERec. Exp13 ::= "rec" "{" [FieldValue] "}" ; FieldValue.FieldValue ::= Ident "=" Exp ; separator FieldValue ";" ; +EEmptyList.Exp13 ::= "[" "]" ; EList. Exp13 ::= "[" [Exp] "]" ; +-- n-tuple, where n>=2 +ETuple. Exp13 ::= "(" Exp "," [Exp] ")" ; + EVar. Exp13 ::= Ident ; EType. Exp13 ::= "Type" ; EStr. Exp13 ::= String ; @@ -132,4 +143,4 @@ EMeta. Exp13 ::= "?" ; coercions Exp 13 ; -separator Exp "," ; +separator nonempty Exp "," ; diff --git a/src/Transfer/SyntaxToCore.hs b/src/Transfer/SyntaxToCore.hs index 10c4e36c2..ce2ac19c6 100644 --- a/src/Transfer/SyntaxToCore.hs +++ b/src/Transfer/SyntaxToCore.hs @@ -110,7 +110,7 @@ deriveDecls ds = liftM concat (mapM der ds) Just d -> d t k cs _ -> fail $ "Don't know how to derive " ++ f where (k,cs) = getDataType ts t - der d = return [d] + der d = return [d] type Derivator = Ident -> Exp -> [(Ident,Exp)] -> C [Decl] @@ -446,7 +446,9 @@ desugar = return . map f f :: Tree a -> Tree a f x = case x of PListCons p1 p2 -> pListCons <| p1 <| p2 - PList xs -> pList (map f [p | PListElem p <- xs]) + PEmptyList -> pList [] + PList xs -> pList [f p | CommaPattern p <- xs] + PTuple x xs -> mkPTuple [f p | CommaPattern p <- (x:xs)] GuardNo -> gtrue EIf exp0 exp1 exp2 -> ifBool <| exp0 <| exp1 <| exp2 EDo bs e -> mkDo (map f bs) (f e) @@ -469,7 +471,9 @@ desugar = return . map f EDiv exp0 exp1 -> overlBin "div" <| exp0 <| exp1 EMod exp0 exp1 -> overlBin "mod" <| exp0 <| exp1 ENeg exp0 -> overlUn "neg" <| exp0 + EEmptyList -> mkList [] EList exps -> mkList (map f exps) + ETuple exp1 exps -> mkETuple (map f (exp1:exps)) _ -> composOp f x where g <| x = g (f x) @@ -687,8 +691,10 @@ dataTypes ds = Map.fromList [ (i,(t,[(c,ct) | ConsDecl c ct <- cs])) | DataDecl getDataType :: DataTypes -> Ident -> (Exp,[(Ident,Exp)]) getDataType ts i = - fromMaybe (error $ "Data type " ++ printTree i ++ " not found") - (Map.lookup i ts) + case Map.lookup i ts of + Just t -> t + Nothing -> error $ "Data type " ++ printTree i ++ " not found." + ++ " Known types: " ++ show (Map.keysSet ts) -- -- * Utilities diff --git a/transfer/TODO b/transfer/TODO index b6eb8eda9..0fc09067a 100644 --- a/transfer/TODO +++ b/transfer/TODO @@ -1,7 +1,5 @@ * Improve front-end language -- Tuple syntax in expressions, types and patterns? Implemented with records. - - implicit arguments? - show generation