CCA (empty) → 0.1
raw patch · 21 files changed
+8214/−0 lines, 21 filesdep +arraydep +basedep +containerssetup-changed
Dependencies added: array, base, containers, ghc-prim, haskell-src, syb, template-haskell
Files
- CCA.cabal +39/−0
- LICENSE +19/−0
- LICENSE.arrowp +5/−0
- README +20/−0
- README.arrowp +97/−0
- Setup.hs +5/−0
- dist/build/ccap/ccap-tmp/Parser.hs +4834/−0
- preprocessor/ArrCode.lhs +239/−0
- preprocessor/ArrSyn.lhs +302/−0
- preprocessor/Lexer.hs +579/−0
- preprocessor/Main.lhs +114/−0
- preprocessor/Parser.ly +994/−0
- preprocessor/State.hs +15/−0
- preprocessor/Utils.lhs +225/−0
- src/Control/CCA.lhs +26/−0
- src/Control/CCA/CCNF.lhs +321/−0
- src/Control/CCA/Types.lhs +26/−0
- src/Language/Haskell/TH/Instances.hs +159/−0
- test/Main.hs +140/−0
- test/Makefile +13/−0
- test/Sample.as +42/−0
+ CCA.cabal view
@@ -0,0 +1,39 @@+Name: CCA+Version: 0.1+Cabal-Version: >= 1.2+Build-Type: Simple+License: BSD3+License-File: LICENSE+Author: Paul H Liu <paul@thev.net>, Eric Cheng <eric.cheng@yale.edu>+Maintainer: Paul H Liu <paul@thev.net>+Homepage: not available+Category: Development+Stability: Experimental+Synopsis: preprocessor and library for Causal Communtative Arrows (CCA)+Description: A library that provides normalization support via Template + Haskell for CCAs, and a modified preprocessor based on+ Ross Patterson's arrowp that reads Haskell with arrow notation + and outputs Haskell 98 + Template Haskell sources for+ use with CCA library.+Extra-Source-Files: + README, LICENSE.arrowp, README.arrowp, + test/Makefile+ test/Main.hs+ test/Sample.as+++library+ build-depends: base >= 3 && < 5, template-haskell+ exposed-modules: Control.CCA Control.CCA.Types Control.CCA.CCNF Language.Haskell.TH.Instances+ ghc-options: -O2 + Hs-Source-Dirs: src + if (impl(ghc >= 6.10))+ build-depends: base >= 4 && < 5, syb, ghc-prim++Executable ccap+ Main-is: Main.lhs+ Other-Modules: ArrCode ArrSyn Lexer Parser Parser State Utils+ Build-Depends: base >= 3 && < 5, array, containers, haskell-src+ Hs-Source-Dirs: preprocessor++
+ LICENSE view
@@ -0,0 +1,19 @@+Copyright (c) 2009 Paul H. Liu <paul@thev.net>++This software is provided 'as-is', without any express or implied+warranty. In no event will the authors be held liable for any damages+arising from the use of this software.++Permission is granted to anyone to use this software for any purpose,+including commercial applications, and to alter it and redistribute it+freely, subject to the following restrictions:++1. The origin of this software must not be misrepresented; you must not+ claim that you wrote the original software. If you use this software+ in a product, an acknowledgment in the product documentation would+ be appreciated but is not required.++2. Altered source versions must be plainly marked as such, and must not+ be misrepresented as being the original software.++3. This notice may not be removed or altered from any source distribution.
+ LICENSE.arrowp view
@@ -0,0 +1,5 @@+LICENSE++ArrSyn and ArrCode are released under the GNU General Public License.+The rest is licenced under the BSD-style license of the base package+in the Haskell hierarchical libraries.
+ README view
@@ -0,0 +1,20 @@+A Library and Preprocessor for Causal Commutative Arrows (CCA)+==============================================================++This library implements the CCA normalization described in the paper [1].+It uses Template Haskell as a staged compilation for arrow programs written+in arrow syntax. A modified arrow preprocesor based on Paterson's arrowp+program, now called ccap, is provided to help preparing proper input to +Template Haskell. ++Note that this is a preliminary release, and still very experiment. Please+send your feedbacks directly to Paul H. Liu <paul@thev.net>, as well as+Eric Cheng <eric.cheng@yale.edu>. All suggestions are welcome.++----+Last Modified: Wed Sep 09 EDT 2009++[1]: Hai Liu, Eric Cheng, and Paul Hudak. Causal Commutative Arrows and Their+Optimization. Proceedings of the 14th ACM SIGPLAN International Conference on+Functional Programming (ICFP 2009). Edinburgh, Scotland. August 2009 +
+ README.arrowp view
@@ -0,0 +1,97 @@+A prototype preprocessor for arrow notation.++Ross Paterson <ross@soi.city.ac.uk>++Note that recent versions of GHC support this notation directly, and+give better error messages to boot.++RUNNING THE ARROW PREPROCESSOR++The program supports the following options:++ --pretty=STYLE pretty print in STYLE+ [offside|semicolon|inline|none] (default = offside)+ --help display usage information++Typically you create a Haskell module using the extended syntax, and+call it Foo.as (for arrow script). To convert this into a corresponding+Haskell module, you say++ arrowp Foo.as >Foo.hs+or+ arrowp Foo.as Foo.hs++and then use Foo.hs with your favourite Haskell implementation.+You can also run it with no arguments at all:++ arrowp <Foo.as >Foo.hs++but then it won't have a file name to put in the error messages.+Sometimes the input has already been preprocessed, e.g. with unlit+(from the GHC distribution). For this situation, you can specify both+the original file name (for error messages) and the input file name, as+well as the output file name (which is obligatory in this situation), e.g.++ unlit Foo.las Foo.as+ arrowp Foo.las Foo.as Foo.hs++or equivalently as++ unlit Foo.las - | arrowp Foo.las - Foo.hs++(both unlit and arrowp allow filename arguments of "-", meaning standard+input or output as appropriate.)++WARNING: if you give the program 2 (or 3) arguments, the last one will+be overwritten.++DIAGNOSING ERRORS IN YOUR CODE++Syntax errors will be detected by the preprocessor, and the position in+the source where they were detected is reported. (As usual, the actual+error may occur earlier.) The preprocessor understands Haskell 98 plus+multiparameter type classes and the arrow extensions, but not some of+the other extensions supported by various Haskell implementations.+The preprocessor doesn't handle operator precedence, so it may copy+some erroneous expressions like `x == y == z'. Otherwise, the output+of the preprocessor should not generate any syntax errors -- if it does,+please report it.++Semantic errors are more difficult for simple preprocessors like this one.+They will be detected by your Haskell implementation, whether they occur+in the Haskell part or the arrows part, and are thus rather hard to+trace back to the original source. If you use --pretty=none and feed+the output to GHC, the error it reports will refer to the first line+of the declaration containing the error. But if you need to read the+preprocessor output to find the problem, omit the --pretty option.++You can reduce the above problems by putting the parts of your program+that need arrow syntax (and thus the preprocessor) in separate modules.++BUGS++- there is no type checking until the output is compiled,+ resulting in incomprehensible error messages.+- failable patterns are not handled as promised yet.+ (And I'm starting to think they shouldn't be.)++SOURCE NOTES++This is based on hsparser, by Sven Panne, Simon Marlow and Noel Winstanley.+It is now the haskell-src package distributed with GHC.++My changes are++ Lexer -- a few lines adding extra symbols (all marked)+ Parser -- a few marked lines and several rules at the end,+ mostly modified versions of existing rules.+ ArrSyn, ArrCode, Utils -- new modules for arrow syntax.++The parser gives 2 shift/reduce conflicts, inherited from the original.++There was a reduce/reduce conflict:++ qual -> 'let' declist .+ qualA -> 'let' declist .++but I've kludged the grammar (see stmtA) to avoid it.
+ Setup.hs view
@@ -0,0 +1,5 @@+module Main (main) where+import Distribution.Simple+main :: IO ()+main = defaultMain +
+ dist/build/ccap/ccap-tmp/Parser.hs view
@@ -0,0 +1,4834 @@+{-# OPTIONS_GHC -fno-warn-overlapping-patterns #-}+{-# OPTIONS -fglasgow-exts -cpp #-}+-----------------------------------------------------------------------------+-- |+-- Module : Parser+-- Copyright : (c) Simon Marlow, Sven Panne 1997-2000+-- License : BSD-style (see the file libraries/base/LICENSE)+--+-- Maintainer : libraries@haskell.org+-- Stability : experimental+-- Portability : portable+--+-- Haskell parser.+--+-----------------------------------------------------------------------------+module Parser (+ parseModule, parseModuleWithMode,+ ParseMode(..), defaultParseMode, ParseResult(..), hsQuote) where++import Language.Haskell.Syntax+import Language.Haskell.ParseMonad+import Lexer+import Utils (hsQuote, hsSplice) +import Language.Haskell.ParseUtils++import qualified ArrSyn -- added for arrows+#if __GLASGOW_HASKELL__ >= 503+import qualified Data.Array as Happy_Data_Array+#else+import qualified Array as Happy_Data_Array+#endif+#if __GLASGOW_HASKELL__ >= 503+import qualified GHC.Exts as Happy_GHC_Exts+#else+import qualified GlaExts as Happy_GHC_Exts+#endif++-- parser produced by Happy Version 1.18.4++newtype HappyAbsSyn = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = Happy_GHC_Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn4 :: (HsModule) -> (HappyAbsSyn )+happyIn4 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn4 #-}+happyOut4 :: (HappyAbsSyn ) -> (HsModule)+happyOut4 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut4 #-}+happyIn5 :: (([HsImportDecl],[HsDecl])) -> (HappyAbsSyn )+happyIn5 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn5 #-}+happyOut5 :: (HappyAbsSyn ) -> (([HsImportDecl],[HsDecl]))+happyOut5 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut5 #-}+happyIn6 :: (([HsImportDecl],[HsDecl])) -> (HappyAbsSyn )+happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn6 #-}+happyOut6 :: (HappyAbsSyn ) -> (([HsImportDecl],[HsDecl]))+happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut6 #-}+happyIn7 :: (()) -> (HappyAbsSyn )+happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn ) -> (())+happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: (()) -> (HappyAbsSyn )+happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn ) -> (())+happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: (Maybe [HsExportSpec]) -> (HappyAbsSyn )+happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn ) -> (Maybe [HsExportSpec])+happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: ([HsExportSpec]) -> (HappyAbsSyn )+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn ) -> ([HsExportSpec])+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: (()) -> (HappyAbsSyn )+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn ) -> (())+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: ([HsExportSpec]) -> (HappyAbsSyn )+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn ) -> ([HsExportSpec])+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: (HsExportSpec) -> (HappyAbsSyn )+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn ) -> (HsExportSpec)+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: ([HsImportDecl]) -> (HappyAbsSyn )+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn ) -> ([HsImportDecl])+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: (HsImportDecl) -> (HappyAbsSyn )+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn ) -> (HsImportDecl)+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: (Bool) -> (HappyAbsSyn )+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn ) -> (Bool)+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: (Maybe Module) -> (HappyAbsSyn )+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn ) -> (Maybe Module)+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: (Maybe (Bool, [HsImportSpec])) -> (HappyAbsSyn )+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn ) -> (Maybe (Bool, [HsImportSpec]))+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: ((Bool, [HsImportSpec])) -> (HappyAbsSyn )+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn ) -> ((Bool, [HsImportSpec]))+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: (Bool) -> (HappyAbsSyn )+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn ) -> (Bool)+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: ([HsImportSpec]) -> (HappyAbsSyn )+happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn ) -> ([HsImportSpec])+happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: (HsImportSpec) -> (HappyAbsSyn )+happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn ) -> (HsImportSpec)+happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyIn23 :: ([HsCName]) -> (HappyAbsSyn )+happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn23 #-}+happyOut23 :: (HappyAbsSyn ) -> ([HsCName])+happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut23 #-}+happyIn24 :: (HsCName) -> (HappyAbsSyn )+happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn24 #-}+happyOut24 :: (HappyAbsSyn ) -> (HsCName)+happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut24 #-}+happyIn25 :: (HsDecl) -> (HappyAbsSyn )+happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn25 #-}+happyOut25 :: (HappyAbsSyn ) -> (HsDecl)+happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut25 #-}+happyIn26 :: (Int) -> (HappyAbsSyn )+happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn26 #-}+happyOut26 :: (HappyAbsSyn ) -> (Int)+happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut26 #-}+happyIn27 :: (HsAssoc) -> (HappyAbsSyn )+happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn27 #-}+happyOut27 :: (HappyAbsSyn ) -> (HsAssoc)+happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut27 #-}+happyIn28 :: ([HsOp]) -> (HappyAbsSyn )+happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn28 #-}+happyOut28 :: (HappyAbsSyn ) -> ([HsOp])+happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut28 #-}+happyIn29 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn29 #-}+happyOut29 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut29 #-}+happyIn30 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn30 #-}+happyOut30 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut30 #-}+happyIn31 :: (HsDecl) -> (HappyAbsSyn )+happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn31 #-}+happyOut31 :: (HappyAbsSyn ) -> (HsDecl)+happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut31 #-}+happyIn32 :: ([HsType]) -> (HappyAbsSyn )+happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn32 #-}+happyOut32 :: (HappyAbsSyn ) -> ([HsType])+happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut32 #-}+happyIn33 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn33 #-}+happyOut33 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut33 #-}+happyIn34 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn34 #-}+happyOut34 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut34 #-}+happyIn35 :: (HsDecl) -> (HappyAbsSyn )+happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn35 #-}+happyOut35 :: (HappyAbsSyn ) -> (HsDecl)+happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut35 #-}+happyIn36 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn36 #-}+happyOut36 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut36 #-}+happyIn37 :: (HsDecl) -> (HappyAbsSyn )+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn37 #-}+happyOut37 :: (HappyAbsSyn ) -> (HsDecl)+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut37 #-}+happyIn38 :: ([HsName]) -> (HappyAbsSyn )+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn38 #-}+happyOut38 :: (HappyAbsSyn ) -> ([HsName])+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut38 #-}+happyIn39 :: (HsDecl) -> (HappyAbsSyn )+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn39 #-}+happyOut39 :: (HappyAbsSyn ) -> (HsDecl)+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut39 #-}+happyIn40 :: (HsSafety) -> (HappyAbsSyn )+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn40 #-}+happyOut40 :: (HappyAbsSyn ) -> (HsSafety)+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut40 #-}+happyIn41 :: (String) -> (HappyAbsSyn )+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn41 #-}+happyOut41 :: (HappyAbsSyn ) -> (String)+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut41 #-}+happyIn42 :: (HsName) -> (HappyAbsSyn )+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn42 #-}+happyOut42 :: (HappyAbsSyn ) -> (HsName)+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut42 #-}+happyIn43 :: (HsType) -> (HappyAbsSyn )+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn43 #-}+happyOut43 :: (HappyAbsSyn ) -> (HsType)+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut43 #-}+happyIn44 :: (HsType) -> (HappyAbsSyn )+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn44 #-}+happyOut44 :: (HappyAbsSyn ) -> (HsType)+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut44 #-}+happyIn45 :: (HsType) -> (HappyAbsSyn )+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn45 #-}+happyOut45 :: (HappyAbsSyn ) -> (HsType)+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut45 #-}+happyIn46 :: (HsQName) -> (HappyAbsSyn )+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn46 #-}+happyOut46 :: (HappyAbsSyn ) -> (HsQName)+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut46 #-}+happyIn47 :: (HsQualType) -> (HappyAbsSyn )+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn47 #-}+happyOut47 :: (HappyAbsSyn ) -> (HsQualType)+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut47 #-}+happyIn48 :: (HsContext) -> (HappyAbsSyn )+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn48 #-}+happyOut48 :: (HappyAbsSyn ) -> (HsContext)+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut48 #-}+happyIn49 :: ([HsType]) -> (HappyAbsSyn )+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn49 #-}+happyOut49 :: (HappyAbsSyn ) -> ([HsType])+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut49 #-}+happyIn50 :: ((HsName, [HsName])) -> (HappyAbsSyn )+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn50 #-}+happyOut50 :: (HappyAbsSyn ) -> ((HsName, [HsName]))+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut50 #-}+happyIn51 :: ([HsName]) -> (HappyAbsSyn )+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn51 #-}+happyOut51 :: (HappyAbsSyn ) -> ([HsName])+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut51 #-}+happyIn52 :: ([HsConDecl]) -> (HappyAbsSyn )+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn52 #-}+happyOut52 :: (HappyAbsSyn ) -> ([HsConDecl])+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut52 #-}+happyIn53 :: (HsConDecl) -> (HappyAbsSyn )+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn53 #-}+happyOut53 :: (HappyAbsSyn ) -> (HsConDecl)+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut53 #-}+happyIn54 :: ((HsName, [HsBangType])) -> (HappyAbsSyn )+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn54 #-}+happyOut54 :: (HappyAbsSyn ) -> ((HsName, [HsBangType]))+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut54 #-}+happyIn55 :: ((HsName, [HsBangType])) -> (HappyAbsSyn )+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn55 #-}+happyOut55 :: (HappyAbsSyn ) -> ((HsName, [HsBangType]))+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut55 #-}+happyIn56 :: (HsBangType) -> (HappyAbsSyn )+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn56 #-}+happyOut56 :: (HappyAbsSyn ) -> (HsBangType)+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut56 #-}+happyIn57 :: (HsBangType) -> (HappyAbsSyn )+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn57 #-}+happyOut57 :: (HappyAbsSyn ) -> (HsBangType)+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut57 #-}+happyIn58 :: ([([HsName],HsBangType)]) -> (HappyAbsSyn )+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn58 #-}+happyOut58 :: (HappyAbsSyn ) -> ([([HsName],HsBangType)])+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut58 #-}+happyIn59 :: (([HsName],HsBangType)) -> (HappyAbsSyn )+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn59 #-}+happyOut59 :: (HappyAbsSyn ) -> (([HsName],HsBangType))+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut59 #-}+happyIn60 :: (HsBangType) -> (HappyAbsSyn )+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn60 #-}+happyOut60 :: (HappyAbsSyn ) -> (HsBangType)+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut60 #-}+happyIn61 :: ([HsQName]) -> (HappyAbsSyn )+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn61 #-}+happyOut61 :: (HappyAbsSyn ) -> ([HsQName])+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut61 #-}+happyIn62 :: ([HsQName]) -> (HappyAbsSyn )+happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn62 #-}+happyOut62 :: (HappyAbsSyn ) -> ([HsQName])+happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut62 #-}+happyIn63 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn63 #-}+happyOut63 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut63 #-}+happyIn64 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn64 #-}+happyOut64 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut64 #-}+happyIn65 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn65 #-}+happyOut65 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut65 #-}+happyIn66 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn66 #-}+happyOut66 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut66 #-}+happyIn67 :: (HsDecl) -> (HappyAbsSyn )+happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn67 #-}+happyOut67 :: (HappyAbsSyn ) -> (HsDecl)+happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut67 #-}+happyIn68 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn68 #-}+happyOut68 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut68 #-}+happyIn69 :: (HsRhs) -> (HappyAbsSyn )+happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn69 #-}+happyOut69 :: (HappyAbsSyn ) -> (HsRhs)+happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut69 #-}+happyIn70 :: ([HsGuardedRhs]) -> (HappyAbsSyn )+happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn70 #-}+happyOut70 :: (HappyAbsSyn ) -> ([HsGuardedRhs])+happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut70 #-}+happyIn71 :: (HsGuardedRhs) -> (HappyAbsSyn )+happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn71 #-}+happyOut71 :: (HappyAbsSyn ) -> (HsGuardedRhs)+happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut71 #-}+happyIn72 :: (HsExp) -> (HappyAbsSyn )+happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn72 #-}+happyOut72 :: (HappyAbsSyn ) -> (HsExp)+happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut72 #-}+happyIn73 :: (HsExp) -> (HappyAbsSyn )+happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn73 #-}+happyOut73 :: (HappyAbsSyn ) -> (HsExp)+happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut73 #-}+happyIn74 :: (HsExp) -> (HappyAbsSyn )+happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn74 #-}+happyOut74 :: (HappyAbsSyn ) -> (HsExp)+happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut74 #-}+happyIn75 :: (HsExp) -> (HappyAbsSyn )+happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn75 #-}+happyOut75 :: (HappyAbsSyn ) -> (HsExp)+happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut75 #-}+happyIn76 :: (HsExp) -> (HappyAbsSyn )+happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn76 #-}+happyOut76 :: (HappyAbsSyn ) -> (HsExp)+happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut76 #-}+happyIn77 :: (HsExp) -> (HappyAbsSyn )+happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn77 #-}+happyOut77 :: (HappyAbsSyn ) -> (HsExp)+happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut77 #-}+happyIn78 :: (HsExp) -> (HappyAbsSyn )+happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn78 #-}+happyOut78 :: (HappyAbsSyn ) -> (HsExp)+happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut78 #-}+happyIn79 :: ([HsPat]) -> (HappyAbsSyn )+happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn79 #-}+happyOut79 :: (HappyAbsSyn ) -> ([HsPat])+happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut79 #-}+happyIn80 :: (HsPat) -> (HappyAbsSyn )+happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn80 #-}+happyOut80 :: (HappyAbsSyn ) -> (HsPat)+happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut80 #-}+happyIn81 :: (HsExp) -> (HappyAbsSyn )+happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn81 #-}+happyOut81 :: (HappyAbsSyn ) -> (HsExp)+happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut81 #-}+happyIn82 :: (HsExp) -> (HappyAbsSyn )+happyIn82 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn82 #-}+happyOut82 :: (HappyAbsSyn ) -> (HsExp)+happyOut82 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut82 #-}+happyIn83 :: (HsExp) -> (HappyAbsSyn )+happyIn83 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn83 #-}+happyOut83 :: (HappyAbsSyn ) -> (HsExp)+happyOut83 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut83 #-}+happyIn84 :: (Int) -> (HappyAbsSyn )+happyIn84 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn84 #-}+happyOut84 :: (HappyAbsSyn ) -> (Int)+happyOut84 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut84 #-}+happyIn85 :: ([HsExp]) -> (HappyAbsSyn )+happyIn85 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn85 #-}+happyOut85 :: (HappyAbsSyn ) -> ([HsExp])+happyOut85 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut85 #-}+happyIn86 :: (HsExp) -> (HappyAbsSyn )+happyIn86 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn86 #-}+happyOut86 :: (HappyAbsSyn ) -> (HsExp)+happyOut86 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut86 #-}+happyIn87 :: ([HsExp]) -> (HappyAbsSyn )+happyIn87 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn87 #-}+happyOut87 :: (HappyAbsSyn ) -> ([HsExp])+happyOut87 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut87 #-}+happyIn88 :: ([HsStmt]) -> (HappyAbsSyn )+happyIn88 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn88 #-}+happyOut88 :: (HappyAbsSyn ) -> ([HsStmt])+happyOut88 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut88 #-}+happyIn89 :: (HsStmt) -> (HappyAbsSyn )+happyIn89 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn89 #-}+happyOut89 :: (HappyAbsSyn ) -> (HsStmt)+happyOut89 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut89 #-}+happyIn90 :: ([HsAlt]) -> (HappyAbsSyn )+happyIn90 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn90 #-}+happyOut90 :: (HappyAbsSyn ) -> ([HsAlt])+happyOut90 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut90 #-}+happyIn91 :: ([HsAlt]) -> (HappyAbsSyn )+happyIn91 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn91 #-}+happyOut91 :: (HappyAbsSyn ) -> ([HsAlt])+happyOut91 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut91 #-}+happyIn92 :: ([HsAlt]) -> (HappyAbsSyn )+happyIn92 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn92 #-}+happyOut92 :: (HappyAbsSyn ) -> ([HsAlt])+happyOut92 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut92 #-}+happyIn93 :: (HsAlt) -> (HappyAbsSyn )+happyIn93 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn93 #-}+happyOut93 :: (HappyAbsSyn ) -> (HsAlt)+happyOut93 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut93 #-}+happyIn94 :: (HsGuardedAlts) -> (HappyAbsSyn )+happyIn94 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn94 #-}+happyOut94 :: (HappyAbsSyn ) -> (HsGuardedAlts)+happyOut94 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut94 #-}+happyIn95 :: ([HsGuardedAlt]) -> (HappyAbsSyn )+happyIn95 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn95 #-}+happyOut95 :: (HappyAbsSyn ) -> ([HsGuardedAlt])+happyOut95 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut95 #-}+happyIn96 :: (HsGuardedAlt) -> (HappyAbsSyn )+happyIn96 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn96 #-}+happyOut96 :: (HappyAbsSyn ) -> (HsGuardedAlt)+happyOut96 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut96 #-}+happyIn97 :: (HsPat) -> (HappyAbsSyn )+happyIn97 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn97 #-}+happyOut97 :: (HappyAbsSyn ) -> (HsPat)+happyOut97 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut97 #-}+happyIn98 :: ([HsStmt]) -> (HappyAbsSyn )+happyIn98 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn98 #-}+happyOut98 :: (HappyAbsSyn ) -> ([HsStmt])+happyOut98 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut98 #-}+happyIn99 :: ([HsStmt]) -> (HappyAbsSyn )+happyIn99 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn99 #-}+happyOut99 :: (HappyAbsSyn ) -> ([HsStmt])+happyOut99 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut99 #-}+happyIn100 :: ([HsFieldUpdate]) -> (HappyAbsSyn )+happyIn100 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn100 #-}+happyOut100 :: (HappyAbsSyn ) -> ([HsFieldUpdate])+happyOut100 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut100 #-}+happyIn101 :: (HsFieldUpdate) -> (HappyAbsSyn )+happyIn101 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn101 #-}+happyOut101 :: (HappyAbsSyn ) -> (HsFieldUpdate)+happyOut101 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut101 #-}+happyIn102 :: (ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn102 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn102 #-}+happyOut102 :: (HappyAbsSyn ) -> (ArrSyn.Cmd)+happyOut102 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut102 #-}+happyIn103 :: (ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn103 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn103 #-}+happyOut103 :: (HappyAbsSyn ) -> (ArrSyn.Cmd)+happyOut103 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut103 #-}+happyIn104 :: (ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn104 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn104 #-}+happyOut104 :: (HappyAbsSyn ) -> (ArrSyn.Cmd)+happyOut104 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut104 #-}+happyIn105 :: (ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn105 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn105 #-}+happyOut105 :: (HappyAbsSyn ) -> (ArrSyn.Cmd)+happyOut105 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut105 #-}+happyIn106 :: (ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn106 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn106 #-}+happyOut106 :: (HappyAbsSyn ) -> (ArrSyn.Cmd)+happyOut106 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut106 #-}+happyIn107 :: (ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn107 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn107 #-}+happyOut107 :: (HappyAbsSyn ) -> (ArrSyn.Cmd)+happyOut107 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut107 #-}+happyIn108 :: (ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn108 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn108 #-}+happyOut108 :: (HappyAbsSyn ) -> (ArrSyn.Cmd)+happyOut108 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut108 #-}+happyIn109 :: (ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn109 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn109 #-}+happyOut109 :: (HappyAbsSyn ) -> (ArrSyn.Cmd)+happyOut109 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut109 #-}+happyIn110 :: ([ArrSyn.Cmd]) -> (HappyAbsSyn )+happyIn110 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn110 #-}+happyOut110 :: (HappyAbsSyn ) -> ([ArrSyn.Cmd])+happyOut110 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut110 #-}+happyIn111 :: ([ArrSyn.Alt]) -> (HappyAbsSyn )+happyIn111 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn111 #-}+happyOut111 :: (HappyAbsSyn ) -> ([ArrSyn.Alt])+happyOut111 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut111 #-}+happyIn112 :: ([ArrSyn.Alt]) -> (HappyAbsSyn )+happyIn112 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn112 #-}+happyOut112 :: (HappyAbsSyn ) -> ([ArrSyn.Alt])+happyOut112 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut112 #-}+happyIn113 :: ([ArrSyn.Alt]) -> (HappyAbsSyn )+happyIn113 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn113 #-}+happyOut113 :: (HappyAbsSyn ) -> ([ArrSyn.Alt])+happyOut113 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut113 #-}+happyIn114 :: (ArrSyn.Alt) -> (HappyAbsSyn )+happyIn114 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn114 #-}+happyOut114 :: (HappyAbsSyn ) -> (ArrSyn.Alt)+happyOut114 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut114 #-}+happyIn115 :: (ArrSyn.GuardedAlts) -> (HappyAbsSyn )+happyIn115 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn115 #-}+happyOut115 :: (HappyAbsSyn ) -> (ArrSyn.GuardedAlts)+happyOut115 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut115 #-}+happyIn116 :: ([ArrSyn.GuardedAlt]) -> (HappyAbsSyn )+happyIn116 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn116 #-}+happyOut116 :: (HappyAbsSyn ) -> ([ArrSyn.GuardedAlt])+happyOut116 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut116 #-}+happyIn117 :: (ArrSyn.GuardedAlt) -> (HappyAbsSyn )+happyIn117 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn117 #-}+happyOut117 :: (HappyAbsSyn ) -> (ArrSyn.GuardedAlt)+happyOut117 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut117 #-}+happyIn118 :: (ArrSyn.Stmts) -> (HappyAbsSyn )+happyIn118 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn118 #-}+happyOut118 :: (HappyAbsSyn ) -> (ArrSyn.Stmts)+happyOut118 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut118 #-}+happyIn119 :: (ArrSyn.Stmts) -> (HappyAbsSyn )+happyIn119 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn119 #-}+happyOut119 :: (HappyAbsSyn ) -> (ArrSyn.Stmts)+happyOut119 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut119 #-}+happyIn120 :: (ArrSyn.Stmt) -> (HappyAbsSyn )+happyIn120 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn120 #-}+happyOut120 :: (HappyAbsSyn ) -> (ArrSyn.Stmt)+happyOut120 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut120 #-}+happyIn121 :: (ArrSyn.VarDecl ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn121 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn121 #-}+happyOut121 :: (HappyAbsSyn ) -> (ArrSyn.VarDecl ArrSyn.Cmd)+happyOut121 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut121 #-}+happyIn122 :: ([ArrSyn.Stmt]) -> (HappyAbsSyn )+happyIn122 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn122 #-}+happyOut122 :: (HappyAbsSyn ) -> ([ArrSyn.Stmt])+happyOut122 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut122 #-}+happyIn123 :: ([ArrSyn.Stmt]) -> (HappyAbsSyn )+happyIn123 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn123 #-}+happyOut123 :: (HappyAbsSyn ) -> ([ArrSyn.Stmt])+happyOut123 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut123 #-}+happyIn124 :: (ArrSyn.Stmt) -> (HappyAbsSyn )+happyIn124 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn124 #-}+happyOut124 :: (HappyAbsSyn ) -> (ArrSyn.Stmt)+happyOut124 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut124 #-}+happyIn125 :: (HsExp) -> (HappyAbsSyn )+happyIn125 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn125 #-}+happyOut125 :: (HappyAbsSyn ) -> (HsExp)+happyOut125 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut125 #-}+happyIn126 :: (HsName) -> (HappyAbsSyn )+happyIn126 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn126 #-}+happyOut126 :: (HappyAbsSyn ) -> (HsName)+happyOut126 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut126 #-}+happyIn127 :: (HsQName) -> (HappyAbsSyn )+happyIn127 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn127 #-}+happyOut127 :: (HappyAbsSyn ) -> (HsQName)+happyOut127 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut127 #-}+happyIn128 :: (HsName) -> (HappyAbsSyn )+happyIn128 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn128 #-}+happyOut128 :: (HappyAbsSyn ) -> (HsName)+happyOut128 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut128 #-}+happyIn129 :: (HsQName) -> (HappyAbsSyn )+happyIn129 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn129 #-}+happyOut129 :: (HappyAbsSyn ) -> (HsQName)+happyOut129 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut129 #-}+happyIn130 :: (HsName) -> (HappyAbsSyn )+happyIn130 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn130 #-}+happyOut130 :: (HappyAbsSyn ) -> (HsName)+happyOut130 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut130 #-}+happyIn131 :: (HsQName) -> (HappyAbsSyn )+happyIn131 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn131 #-}+happyOut131 :: (HappyAbsSyn ) -> (HsQName)+happyOut131 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut131 #-}+happyIn132 :: (HsQName) -> (HappyAbsSyn )+happyIn132 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn132 #-}+happyOut132 :: (HappyAbsSyn ) -> (HsQName)+happyOut132 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut132 #-}+happyIn133 :: (HsName) -> (HappyAbsSyn )+happyIn133 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn133 #-}+happyOut133 :: (HappyAbsSyn ) -> (HsName)+happyOut133 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut133 #-}+happyIn134 :: (HsQName) -> (HappyAbsSyn )+happyIn134 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn134 #-}+happyOut134 :: (HappyAbsSyn ) -> (HsQName)+happyOut134 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut134 #-}+happyIn135 :: (HsOp) -> (HappyAbsSyn )+happyIn135 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn135 #-}+happyOut135 :: (HappyAbsSyn ) -> (HsOp)+happyOut135 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut135 #-}+happyIn136 :: (HsQOp) -> (HappyAbsSyn )+happyIn136 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn136 #-}+happyOut136 :: (HappyAbsSyn ) -> (HsQOp)+happyOut136 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut136 #-}+happyIn137 :: (HsQOp) -> (HappyAbsSyn )+happyIn137 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn137 #-}+happyOut137 :: (HappyAbsSyn ) -> (HsQOp)+happyOut137 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut137 #-}+happyIn138 :: (HsQName) -> (HappyAbsSyn )+happyIn138 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn138 #-}+happyOut138 :: (HappyAbsSyn ) -> (HsQName)+happyOut138 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut138 #-}+happyIn139 :: (HsQName) -> (HappyAbsSyn )+happyIn139 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn139 #-}+happyOut139 :: (HappyAbsSyn ) -> (HsQName)+happyOut139 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut139 #-}+happyIn140 :: (HsName) -> (HappyAbsSyn )+happyIn140 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn140 #-}+happyOut140 :: (HappyAbsSyn ) -> (HsName)+happyOut140 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut140 #-}+happyIn141 :: (HsQName) -> (HappyAbsSyn )+happyIn141 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn141 #-}+happyOut141 :: (HappyAbsSyn ) -> (HsQName)+happyOut141 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut141 #-}+happyIn142 :: (HsName) -> (HappyAbsSyn )+happyIn142 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn142 #-}+happyOut142 :: (HappyAbsSyn ) -> (HsName)+happyOut142 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut142 #-}+happyIn143 :: (HsQName) -> (HappyAbsSyn )+happyIn143 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn143 #-}+happyOut143 :: (HappyAbsSyn ) -> (HsQName)+happyOut143 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut143 #-}+happyIn144 :: (HsName) -> (HappyAbsSyn )+happyIn144 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn144 #-}+happyOut144 :: (HappyAbsSyn ) -> (HsName)+happyOut144 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut144 #-}+happyIn145 :: (HsQName) -> (HappyAbsSyn )+happyIn145 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn145 #-}+happyOut145 :: (HappyAbsSyn ) -> (HsQName)+happyOut145 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut145 #-}+happyIn146 :: (HsQName) -> (HappyAbsSyn )+happyIn146 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn146 #-}+happyOut146 :: (HappyAbsSyn ) -> (HsQName)+happyOut146 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut146 #-}+happyIn147 :: (HsName) -> (HappyAbsSyn )+happyIn147 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn147 #-}+happyOut147 :: (HappyAbsSyn ) -> (HsName)+happyOut147 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut147 #-}+happyIn148 :: (HsName) -> (HappyAbsSyn )+happyIn148 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn148 #-}+happyOut148 :: (HappyAbsSyn ) -> (HsName)+happyOut148 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut148 #-}+happyIn149 :: (HsQName) -> (HappyAbsSyn )+happyIn149 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn149 #-}+happyOut149 :: (HappyAbsSyn ) -> (HsQName)+happyOut149 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut149 #-}+happyIn150 :: (HsLiteral) -> (HappyAbsSyn )+happyIn150 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn150 #-}+happyOut150 :: (HappyAbsSyn ) -> (HsLiteral)+happyOut150 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut150 #-}+happyIn151 :: (SrcLoc) -> (HappyAbsSyn )+happyIn151 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn151 #-}+happyOut151 :: (HappyAbsSyn ) -> (SrcLoc)+happyOut151 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut151 #-}+happyIn152 :: (()) -> (HappyAbsSyn )+happyIn152 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn152 #-}+happyOut152 :: (HappyAbsSyn ) -> (())+happyOut152 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut152 #-}+happyIn153 :: (()) -> (HappyAbsSyn )+happyIn153 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn153 #-}+happyOut153 :: (HappyAbsSyn ) -> (())+happyOut153 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut153 #-}+happyIn154 :: (Module) -> (HappyAbsSyn )+happyIn154 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn154 #-}+happyOut154 :: (HappyAbsSyn ) -> (Module)+happyOut154 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut154 #-}+happyIn155 :: (HsName) -> (HappyAbsSyn )+happyIn155 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn155 #-}+happyOut155 :: (HappyAbsSyn ) -> (HsName)+happyOut155 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut155 #-}+happyIn156 :: (HsName) -> (HappyAbsSyn )+happyIn156 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn156 #-}+happyOut156 :: (HappyAbsSyn ) -> (HsName)+happyOut156 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut156 #-}+happyIn157 :: (HsQName) -> (HappyAbsSyn )+happyIn157 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn157 #-}+happyOut157 :: (HappyAbsSyn ) -> (HsQName)+happyOut157 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut157 #-}+happyIn158 :: (HsQName) -> (HappyAbsSyn )+happyIn158 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn158 #-}+happyOut158 :: (HappyAbsSyn ) -> (HsQName)+happyOut158 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut158 #-}+happyIn159 :: (HsName) -> (HappyAbsSyn )+happyIn159 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn159 #-}+happyOut159 :: (HappyAbsSyn ) -> (HsName)+happyOut159 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut159 #-}+happyInTok :: (Token) -> (HappyAbsSyn )+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn ) -> (Token)+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x00\x00\x00\x00\x5d\x05\x40\x05\x3b\x00\x00\x00\x00\x00\x00\x00\xfe\x03\x7e\x05\x00\x00\x00\x00\x7d\x05\x00\x00\x60\x15\xe6\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\xf2\x15\x00\x00\x00\x00\x47\x05\x00\x00\xb1\x04\x7a\x05\x74\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x05\x00\x00\x00\x00\x00\x00\x00\x00\x89\x02\x00\x00\xfe\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x05\x7b\x05\xed\x02\x25\x08\x00\x00\xdf\x19\x00\x00\x72\x05\x00\x00\x00\x00\x2c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x12\xa4\x13\x16\x15\x16\x15\x00\x00\xdf\x19\xdf\x19\x16\x15\xb9\x0f\xb9\x0f\x73\x05\x6c\x05\x28\x02\x38\x05\x00\x00\x00\x00\x00\x00\xb9\x0f\xb9\x0f\x78\x05\x84\x16\x6b\x05\xa9\x15\x6b\x05\x00\x00\x00\x00\x00\x00\x3b\x16\x5b\x05\x00\x00\x00\x00\x00\x00\x23\x04\x00\x00\x00\x00\x57\x05\x3f\x05\x00\x00\x00\x00\x00\x00\x95\x03\x71\x0e\x25\x05\xfe\x03\x00\x00\x62\x05\x61\x05\x00\x00\x5a\x13\x5a\x13\xb9\x0f\x42\x05\x23\x05\x21\x05\x00\x00\x00\x00\xde\x07\x00\x00\x3b\x05\x00\x00\x16\x15\x4c\x05\xdf\x19\xdf\x19\x00\x00\x43\x05\x4b\x05\xc9\x02\x44\x05\x3c\x05\x00\x00\xec\x02\xde\x07\xca\x02\xc7\x02\x00\x00\x00\x00\x16\x15\x45\x05\x00\x00\x00\x00\x35\x05\x00\x00\x00\x00\x00\x00\x34\x05\x31\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x02\x00\x00\xdf\x19\x30\x05\xdf\x19\xc9\x04\x00\x00\xfe\x04\x20\x05\x00\x00\x00\x00\x00\x00\x15\x19\x00\x00\x00\x00\x00\x00\x1d\x05\x00\x00\xba\x02\x16\x15\x00\x00\x00\x00\x98\x06\xb9\x0f\x15\x03\x00\x00\x00\x00\x00\x00\xd2\x03\x2e\x05\x01\x12\x00\x00\x00\x00\x00\x00\xac\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x01\x00\x00\x2d\x05\x22\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x03\x00\x00\x00\x00\xc8\x01\x00\x00\x1f\x05\x18\x05\x16\x15\x00\x00\x00\x00\x00\x00\x1e\x05\x4b\x03\x00\x00\x03\x05\x00\x00\x00\x00\x06\x05\x00\x00\x00\x00\x11\x05\x6c\x08\x00\x00\x16\x15\x00\x00\x00\x00\x10\x13\x00\x00\x00\x00\x16\x15\x16\x15\x00\x00\x16\x15\x16\x15\xcc\x14\x00\x00\x00\x00\xfc\x04\x00\x00\xe5\x04\x00\x00\x00\x00\xdb\x04\xdf\x19\x82\x14\x0b\x05\x00\x00\x0a\x05\x00\x00\x09\x05\x01\x05\x03\x0e\xfd\x04\x04\x05\x97\x07\x00\x00\xfb\x04\xc6\x12\xeb\x04\xe6\x01\xff\x04\xb7\x03\xb0\x04\x00\x00\xe3\x04\xdd\x04\x00\x00\xa9\x02\x7b\x02\x0b\x02\x00\x00\xde\x04\x4d\x0f\x00\x00\x00\x00\x4d\x0f\x3f\x02\x4d\x0f\x00\x00\x00\x00\x00\x00\xbb\x04\x79\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x0f\x00\x00\x4d\x0f\x00\x00\x00\x00\x00\x00\x20\x00\xfa\x03\xdf\x04\x00\x00\x00\x00\x2d\x02\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\xc6\x04\xc6\x12\x00\x00\xb9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x19\x00\x00\x82\x14\xcd\x16\xc8\x04\xcc\x01\x82\x14\x7e\x0d\x00\x00\xc0\x04\x00\x00\x00\x00\xc5\x04\x00\x00\xbc\x04\x00\x00\x00\x00\x4d\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x82\x14\x00\x00\xc5\x05\x00\x00\xb5\x04\x00\x00\x00\x00\xbe\x04\xb8\x04\xb6\x04\x15\x03\x00\x00\xba\x04\x00\x00\xef\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x14\x00\x00\x00\x00\x00\x00\x82\x14\x8f\x04\xa5\x04\x38\x14\x51\x07\x00\x00\x00\x00\x00\x00\x6c\x08\x00\x00\x00\x00\xdf\x19\x00\x00\x6a\x0b\x00\x00\xdf\x19\xee\x13\xb3\x04\xee\x13\x5f\x00\x3f\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x17\x8c\x04\x00\x00\xee\x13\xb2\x04\xae\x04\xcc\x01\x00\x00\x00\x00\xcc\x02\x00\x00\xee\x13\xc6\x12\x94\x04\x00\x00\xc8\x01\x2d\x02\x00\x00\x00\x00\x00\x00\xa2\x04\x00\x00\xa8\x17\x9f\x04\xcc\x01\x00\x00\x00\x00\x38\x15\x00\x00\xc1\x04\x16\x02\x9e\x04\x9d\x04\xed\x19\x4d\x0f\x00\x00\x00\x00\xad\x03\x37\x04\xa9\x04\x00\x00\x00\x00\x4d\x0f\x4d\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x15\x19\xfe\x01\x8e\x04\x9c\x04\x4d\x0f\x00\x00\x91\x04\x00\x00\x00\x00\xb5\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x19\x00\x00\xee\x13\x16\x17\x83\x04\x00\x00\x59\x04\x57\x04\x41\x04\x4b\x04\x00\x00\xb6\x0b\xb6\x0b\x4e\x04\x5e\x01\xdf\x19\x0a\x07\x7d\x04\x00\x00\xee\x13\x5f\x00\x00\x00\x21\x12\xee\x13\xee\x13\xee\x13\xee\x13\x00\x00\xee\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x0d\xee\x13\x79\x04\x4c\x04\x42\x04\xdf\x19\x00\x00\x7a\x19\x00\x00\xe1\x00\x71\x04\x1f\x17\x00\x00\x42\x01\x69\x04\x6a\x04\xb6\x0b\x5f\x00\x67\x04\xcc\x01\x7e\x0d\x3f\x02\x7e\x0d\x7e\x0d\x00\x00\x00\x00\x6c\x08\x56\x04\xcc\x18\x5f\x04\x47\x01\x00\x00\x00\x00\xc6\x12\x00\x00\x00\x00\x4d\x0f\x58\x04\x4d\x04\x00\x00\x00\x00\x00\x00\x55\x04\xcc\x18\x51\x04\x00\x00\x00\x00\x4d\x0f\x00\x00\xde\x02\x35\x03\x00\x00\x00\x00\x00\x00\x00\x00\x04\x02\xd0\x02\x00\x00\x44\x03\x50\x04\x60\x04\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x03\x00\x00\x1c\x04\x3d\x04\x00\x00\x39\x04\xee\x13\x00\x00\x00\x00\x2b\x04\x18\x04\x00\x00\x00\x00\x32\x0d\x32\x0d\xa2\x00\x13\x04\x00\x00\x02\x0c\x00\x00\x02\x0c\x00\x00\x26\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x0d\x31\x19\xe6\x0c\xe6\x0c\x02\x0c\x02\x0c\x06\x04\x32\x04\x51\x07\x00\x00\x02\x0c\x5f\x00\x0a\x07\xe6\x0c\x00\x00\x31\x04\x2d\x04\xcc\x01\xe6\x0c\x83\x18\x00\x00\x00\x00\xb6\x0b\x1b\x04\x00\x00\x13\x03\x00\x00\x5f\x00\x60\x02\x7e\x0d\x7e\x0d\x00\x00\xee\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x01\x00\x00\x2e\x04\x00\x00\x00\x00\xdf\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x15\x04\x00\x00\x00\x00\x00\x00\x9a\x0c\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x18\x76\x00\x14\x04\x00\x00\x00\x00\x25\x04\x7e\x0d\x02\x0c\x10\x04\x3a\x18\x24\x04\x00\x00\xee\x13\x00\x00\x00\x00\xf1\x17\xdd\x03\x11\x04\x00\x00\x05\x04\x4e\x0c\x00\x00\xee\x13\x00\x00\x03\x04\x00\x00\x00\x04\x7e\x0d\xee\x13\xff\x03\x4e\x0c\xfd\x03\x7e\x0d\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x04\x00\x8a\x03\x00\x00\x00\x00\x02\x00\x00\x00\xb9\x03\x90\x03\x88\x03\xe9\x03\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x87\x03\x00\x00\x00\x00\x00\x00\xe6\x03\x00\x00\x00\x00\x00\x00\xd3\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x0b\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x01\x00\x00\x6f\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xee\x03\x00\x00\x9e\x01\x00\x00\x2a\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x02\x45\x06\x27\x0a\x06\x0a\x00\x00\xe0\x13\xa1\x0b\xe0\x09\xde\x00\xd8\x00\x00\x00\x64\x00\x00\x00\xf7\x03\x00\x00\x00\x00\x00\x00\xd2\x00\xca\x00\xdf\xff\x1a\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\xcc\x03\x00\x00\x8b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x24\x01\x8f\x03\x63\x03\x00\x00\x00\x00\x00\x00\x00\x00\xfe\x05\xdd\x05\x0a\x00\x00\x00\xbc\x03\x00\x00\x00\x00\x00\x00\xea\x0b\x00\x00\x00\x00\x5d\x03\xbf\x09\x23\x00\x6e\x12\x96\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x0a\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x03\x00\x00\xa1\x0b\x00\x00\x4c\x13\x53\x02\x00\x00\x72\x03\xd5\xff\x00\x00\x00\x00\x00\x00\xba\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x03\x99\x09\x00\x00\x00\x00\x9d\x01\xb4\x00\xf2\xff\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x02\x00\x00\x00\x00\x27\x03\x00\x00\x00\x00\x00\x00\xb3\x0a\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x09\x00\x00\x78\x09\x00\x00\x00\x00\xea\x11\x45\x03\x00\x00\x52\x09\x31\x09\x00\x00\x0b\x09\xea\x08\x29\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x02\xcd\x01\x00\x00\x8e\x0c\xea\x11\xb3\xff\x00\x00\xfc\xff\xe5\xff\x00\x00\x00\x00\x8b\x01\x00\x00\x00\x00\xb3\x09\x41\x03\x00\x00\xb7\x05\xf7\xff\x1f\x03\x8b\x03\x60\x03\x6a\x03\x00\x00\xd2\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x01\x0d\x00\x00\x00\x10\x01\xb9\xff\x0c\x01\x00\x00\x00\x00\x00\x00\x24\x03\x69\x01\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x00\x00\x00\xf2\x00\x00\x00\xbd\x01\x7d\x01\x3c\x03\xcb\x02\x23\x03\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x05\x00\x00\x04\x03\x00\x00\x00\x00\x00\x00\x4f\x00\x4b\x00\x00\x00\xda\x0c\x00\x00\xc4\x08\x21\x00\x00\x00\x87\x02\xa3\x08\x6e\x11\x00\x00\x00\x00\x00\x00\x78\x02\xef\xff\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x08\x00\x00\x10\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x04\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x08\x00\x00\x00\x00\x00\x00\x36\x08\x00\x00\x00\x00\x70\x05\x6c\x09\x00\x00\x00\x00\x00\x00\x25\x09\x00\x00\x00\x00\x02\x13\x00\x00\xee\x01\x69\x02\xb8\x12\x15\x08\xba\x01\xef\x07\x30\x01\x4a\x02\x00\x00\x00\x00\x00\x00\xb5\x03\x00\x00\x5a\x00\x00\x00\x00\x00\xce\x07\xd6\x00\x00\x00\x38\x02\x00\x00\xec\xff\x25\x02\x00\x00\xa8\x07\x4f\x05\x00\x00\x00\x00\xfd\x01\x29\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\xff\x00\x00\xd7\x01\x00\x00\x00\x00\x8b\x01\x00\x00\x4e\x01\x09\x02\x00\x00\x00\x00\xa0\x00\x86\x01\x00\x00\x00\x00\x7b\x01\x2e\x01\xaf\x01\x00\x00\x00\x00\x7f\x01\x65\x01\x00\x00\x00\x00\xa6\x03\x00\x00\x55\x0b\xfa\xff\x00\x00\x00\x00\xec\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xff\x00\x00\x00\x00\x00\x00\x6c\x03\x00\x00\xd8\x11\x00\x00\x87\x07\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x03\xf1\x02\x00\x00\x05\x01\x42\x0c\xde\x08\x00\x00\x77\x01\x61\x07\xf7\x00\x00\x00\x28\x03\x40\x07\x1a\x07\xf9\x06\xd3\x06\x00\x00\xb2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x11\x8c\x06\x49\x01\x00\x00\x00\x00\xf6\x0b\x00\x00\xda\x0c\x00\x00\x94\x01\x44\x00\x97\x08\x66\x01\x00\x00\x00\x00\x00\x00\xaa\x02\xb6\x00\x63\x00\x57\x01\x04\x11\x17\x01\xcf\x10\x9a\x10\x00\x00\x00\x00\x50\x08\x88\x01\xd7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x08\x05\x00\x00\x00\x00\xa8\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\xff\x00\x00\x00\x00\x00\x00\x34\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x01\xe8\x00\x00\x00\x36\x00\x00\x00\xf3\xff\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x01\x00\x00\x5d\x00\xb1\x00\x00\x00\x00\x00\x6b\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x0d\x6f\x0d\x00\x00\x00\x00\x00\x00\x27\x0f\x00\x00\xf0\x0e\x2f\x01\x00\x00\x00\x00\xa0\x01\x53\x00\x00\x00\x00\x00\x65\x10\xda\x0c\xe2\x04\x9b\x04\xb9\x0e\x82\x0e\x00\x00\xd1\xff\x50\x08\x32\x00\x4b\x0e\x56\x00\xdc\x02\x54\x04\x00\x00\x7a\x01\x00\x00\xc0\xff\x0d\x04\x92\x11\x00\x00\x00\x00\x63\x02\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\xaf\xff\x30\x10\xfb\x0f\x00\x00\x92\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x01\x00\x00\x80\x11\x00\x00\x00\x00\x68\x00\x60\x00\x5d\x01\xc6\x0f\xdd\x0d\x6b\x01\xd7\x00\x00\x00\x00\x00\x24\x06\x00\x00\x00\x00\x52\x0d\x11\x00\x35\x01\x00\x00\x00\x00\xc6\x03\x00\x00\x6d\x0a\x00\x00\x00\x00\x00\x00\xb0\x02\x91\x0f\x4c\x0a\x00\x00\x7f\x03\x00\x00\x5c\x0f\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\xa1\xfe\x00\x00\x00\x00\x00\x00\xa0\xfe\xfd\xff\xf4\xff\xf4\xff\x00\x00\xf2\xff\x9d\xfe\x9c\xfe\x00\x00\xf5\xff\xf7\xff\x00\x00\xfb\xff\x9e\xfe\x9f\xfe\xf4\xff\xe4\xff\xb2\xff\xf9\xff\xf4\xff\xc3\xff\xbb\xff\xb3\xff\xbc\xff\xb1\xff\x00\x00\xf6\xff\xfc\xff\x00\x00\xf3\xff\xee\xff\x00\x00\xee\xff\xec\xff\xeb\xff\xd6\xfe\xbe\xfe\x99\xfe\xb5\xfe\xea\xff\xbc\xfe\xbd\xfe\xb3\xfe\xb4\xfe\x00\x00\xef\xff\x00\x00\xbb\xfe\xba\xfe\xb9\xfe\xb8\xfe\xb7\xfe\xb6\xfe\xa0\xfe\xcc\xff\x00\x00\xa1\xfe\x5b\xff\x53\xff\x51\xff\x4b\xff\x48\xff\x46\xff\x47\xff\xd9\xfe\xd2\xfe\x45\xff\xa5\xfe\xa3\xfe\xa4\xfe\xa2\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x3d\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\xfe\x00\x00\xe1\xff\xca\xff\xc9\xff\xc8\xff\x00\x00\x00\x00\x00\x00\xf5\xff\xc5\xff\xf5\xff\xf8\xff\xe5\xff\xfa\xff\xc4\xff\x00\x00\x00\x00\x9a\xfe\x8d\xff\x93\xff\xa1\xff\x9f\xff\x9e\xff\x00\x00\x00\x00\x97\xfe\x99\xff\x9d\xff\x00\x00\x00\x00\x6f\xff\x00\x00\xe2\xff\x00\x00\x00\x00\x54\xff\x00\x00\x00\x00\xb8\xff\x00\x00\x72\xff\x00\x00\x61\xff\x60\xff\x5f\xff\x5d\xff\x47\xff\xa1\xfe\x00\x00\xa0\xfe\x00\x00\x55\xff\x4c\xff\x00\x00\x00\x00\x38\xff\x00\x00\x37\xff\xdb\xfe\x00\x00\x5f\xff\x00\x00\x00\x00\xc2\xfe\xc1\xfe\x00\x00\xc8\xfe\xbf\xfe\xb2\xfe\x00\x00\xcc\xfe\xaf\xfe\xad\xfe\xac\xfe\xa8\xfe\xb0\xfe\xa6\xfe\xb1\xfe\xdc\xfe\x3b\xff\x00\x00\xc0\xfe\xaa\xfe\xa7\xfe\x00\x00\x00\x00\x52\xff\x68\xff\x66\xff\x64\xff\xc4\xfe\xc3\xfe\x00\x00\xc8\xfe\xce\xfe\xae\xfe\x00\x00\xab\xfe\x00\x00\x00\x00\xaa\xfe\xa9\xfe\x00\x00\x00\x00\x00\x00\xcb\xff\xfe\xff\xe6\xff\x00\x00\x00\x00\xef\xff\xf0\xff\xed\xff\xf1\xff\x00\x00\xd0\xff\xcf\xff\xce\xff\xd8\xfe\xd4\xfe\x00\x00\xe8\xff\x00\x00\xcd\xff\xc6\xfe\xc5\xfe\xc6\xff\xca\xfe\xd0\xfe\x00\x00\xae\xff\xad\xff\x00\x00\x67\xff\x00\x00\x00\x00\x00\x00\x5c\xff\x65\xff\x6a\xff\xa0\xfe\x00\x00\x15\xff\x00\x00\x4a\xff\x4d\xff\x00\x00\xd5\xfe\xd1\xfe\x00\x00\x5f\xff\x41\xff\x00\x00\xda\xfe\x3c\xff\x00\x00\xa1\xfe\x42\xff\x00\x00\x00\x00\x40\xff\x00\x00\x36\xff\x00\x00\x43\xff\x44\xff\x00\x00\x4e\xff\x00\x00\xf4\xff\xf4\xff\x00\x00\x00\x00\x00\x00\xa0\xfe\xbf\xff\xa0\xfe\xa1\xfe\x00\x00\xb9\xff\xa1\xff\xba\xff\x17\xff\x5f\xff\xa1\xfe\x00\x00\x00\x00\xa0\xfe\x00\x00\xa5\xff\xa7\xff\xdf\xff\xbe\xff\xa0\xfe\x00\x00\x96\xff\x00\x00\x00\x00\x00\x00\x98\xff\x00\x00\x00\x00\xa1\xfe\xa0\xff\x00\x00\x8f\xff\x00\x00\xc2\xff\x8e\xff\xa2\xff\x79\xff\x00\x00\x94\xff\x97\xff\x95\xff\x9c\xff\x00\x00\x9a\xff\x00\x00\x9b\xff\xf4\xff\xf4\xff\xdd\xff\x00\x00\xa5\xff\xa9\xff\xa8\xff\x00\x00\xa6\xff\x1d\xff\x00\x00\x19\xff\x1e\xff\x00\x00\x18\xff\xbd\xff\x79\xff\x8b\xff\x73\xff\x56\xff\xf4\xff\xf4\xff\x5e\xff\x00\x00\x4f\xff\x00\x00\xb6\xff\x00\x00\x00\x00\x00\x00\x00\x00\x2c\xff\x32\xff\x2e\xff\xa1\xfe\xa0\xfe\x34\xff\x30\xff\x31\xff\x39\xff\x00\x00\x3f\xff\x3a\xff\x3e\xff\xcb\xfe\x00\x00\x49\xff\x00\x00\x69\xff\x00\x00\xc7\xfe\xcd\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xe9\xff\x00\x00\xe7\xff\x00\x00\xd1\xff\xd3\xfe\xc7\xff\xc9\xfe\xcf\xfe\xd7\xfe\x00\x00\x16\xff\x14\xff\x62\xff\x35\xff\x2b\xff\x00\x00\x00\x00\x00\x00\x57\xff\x0f\xff\x0e\xff\x0d\xff\x0b\xff\x09\xff\x02\xff\x00\xff\x00\x00\xa1\xfe\x00\x00\x00\x00\xa0\xfe\x00\x00\xa0\xfe\x00\x00\x59\xff\xaf\xff\xb0\xff\xf4\xff\xb4\xff\x00\x00\x00\x00\x50\xff\x00\x00\xa1\xfe\x00\x00\x00\x00\xc1\xff\xa1\xfe\x00\x00\x1a\xff\x00\x00\x00\x00\x00\x00\xa4\xff\x00\x00\x00\x00\xe0\xff\xe3\xff\xde\xff\x00\x00\xda\xff\x6d\xff\x00\x00\x00\x00\x90\xff\x91\xff\x86\xff\x8a\xff\x85\xff\x00\x00\x00\x00\xb5\xfe\x00\x00\x00\x00\xc0\xff\x7f\xff\x00\x00\x00\x00\x00\x00\x82\xff\x83\xff\x00\x00\x00\x00\x70\xff\x71\xff\xf4\xff\x6b\xff\x00\x00\xee\xff\x00\x00\x00\x00\x00\x00\x1c\xff\x00\x00\x98\xfe\x78\xff\x00\x00\x8c\xff\x29\xff\x2a\xff\xf4\xff\x26\xff\x00\x00\x5a\xff\x00\x00\xf5\xff\xb7\xff\xfd\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x03\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\xff\x00\x00\xa1\xfe\x00\x00\xa0\xfe\x01\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\xff\x00\x00\x33\xff\x63\xff\x2d\xff\x10\xff\x12\xff\x11\xff\x13\xff\x0c\xff\x0a\xff\x00\x00\x00\x00\xa0\xfe\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\xfb\xfe\x00\x00\xa0\xfe\x5f\xff\xa1\xfe\xe8\xfe\x00\x00\x00\x00\x00\x00\xa0\xfe\xa0\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\xff\x58\xff\x1f\xff\xa1\xfe\xf5\xff\x28\xff\x00\x00\x74\xff\x77\xff\x00\x00\xaa\xff\xa3\xff\x00\x00\x00\x00\xee\xff\xd7\xff\xd6\xff\x9b\xfe\xd5\xff\xf5\xff\x6e\xff\x84\xff\x81\xff\x80\xff\x89\xff\x00\x00\x00\x00\x7d\xff\xac\xff\x88\xff\x87\xff\x00\x00\x00\x00\x6c\xff\x00\x00\x00\x00\xef\xff\xdb\xff\xab\xff\x1b\xff\x76\xff\x00\x00\x27\xff\x68\xff\x23\xff\x21\xff\x00\x00\x00\x00\x07\xff\x06\xff\x00\x00\x00\x00\xee\xfe\xe5\xfe\x00\x00\x00\x00\x00\x00\xe4\xfe\xea\xfe\x00\x00\xef\xfe\xe9\xfe\xa1\xfe\x00\x00\x04\xff\xf4\xff\xf4\xff\xfc\xfe\xfe\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\xfe\x1f\xff\xa1\xfe\x00\x00\xa0\xfe\x5f\xff\x00\x00\x08\xff\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xec\xfe\xed\xfe\x00\x00\x00\x00\xde\xfe\x00\x00\xdf\xfe\xa0\xfe\x00\x00\x00\x00\x00\x00\x24\xff\x00\x00\x22\xff\x25\xff\x75\xff\xd8\xff\xdc\xff\x00\x00\xd3\xff\x00\x00\x7b\xff\x7c\xff\x00\x00\x7e\xff\x7a\xff\xd4\xff\xd2\xff\x00\x00\xe3\xfe\x05\xff\xe1\xfe\x00\x00\xdd\xfe\xe2\xfe\xeb\xfe\xe6\xfe\xe7\xfe\xf9\xfe\xfa\xfe\xf4\xff\xf6\xfe\x00\x00\x00\x00\x00\x00\xf4\xff\xf4\xff\xa1\xfe\x00\x00\x00\x00\xa1\xfe\xf5\xff\xf8\xfe\xe0\xfe\x00\x00\x20\xff\xf7\xfe\x00\x00\x68\xff\xf3\xfe\xf1\xfe\x00\x00\x00\x00\xf4\xfe\x00\x00\xf2\xfe\x00\x00\xf5\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xfe"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x07\x00\x01\x00\x01\x00\x00\x00\x12\x00\x07\x00\x08\x00\x09\x00\x56\x00\x18\x00\x11\x00\x12\x00\x2e\x00\x09\x00\x20\x00\x0a\x00\x0b\x00\x3a\x00\x3f\x00\x0b\x00\x30\x00\x31\x00\x20\x00\x43\x00\x3e\x00\x3f\x00\x15\x00\x20\x00\x31\x00\x15\x00\x19\x00\x1a\x00\x1b\x00\x19\x00\x1a\x00\x1b\x00\x1f\x00\x1c\x00\x21\x00\x1f\x00\x23\x00\x21\x00\x20\x00\x23\x00\x0d\x00\x15\x00\x15\x00\x59\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x1b\x00\x15\x00\x2d\x00\x1f\x00\x1f\x00\x21\x00\x21\x00\x6b\x00\x23\x00\x31\x00\x1e\x00\x1f\x00\x88\x00\x21\x00\x20\x00\x95\x00\x3f\x00\x20\x00\x94\x00\x3f\x00\x13\x00\x14\x00\x10\x00\x13\x00\x14\x00\x03\x00\x04\x00\x14\x00\x40\x00\x03\x00\x04\x00\x9b\x00\x95\x00\x03\x00\x04\x00\x3f\x00\x3f\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x3f\x00\x89\x00\x8a\x00\x03\x00\x04\x00\x94\x00\x46\x00\x93\x00\x93\x00\x8a\x00\x93\x00\x03\x00\x04\x00\x7a\x00\x93\x00\x10\x00\x7e\x00\x17\x00\x9a\x00\x81\x00\x7a\x00\x83\x00\x20\x00\x98\x00\x93\x00\x3e\x00\x7b\x00\x88\x00\x22\x00\x8a\x00\x8c\x00\x93\x00\x7b\x00\x8f\x00\x88\x00\x94\x00\x8a\x00\x0f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x97\x00\x94\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x94\x00\x97\x00\x88\x00\x89\x00\x8a\x00\x94\x00\x94\x00\x93\x00\x99\x00\x93\x00\x56\x00\x75\x00\x93\x00\x40\x00\x99\x00\x94\x00\x93\x00\x47\x00\x57\x00\x49\x00\x4a\x00\x9b\x00\x57\x00\x4d\x00\x4e\x00\x4f\x00\x57\x00\x4c\x00\x93\x00\x93\x00\x38\x00\x6b\x00\x7a\x00\x0f\x00\x7c\x00\x7a\x00\x93\x00\x7c\x00\x7a\x00\x94\x00\x7c\x00\x93\x00\x94\x00\x88\x00\x89\x00\x8a\x00\x88\x00\x6c\x00\x8a\x00\x88\x00\x5e\x00\x8a\x00\x88\x00\x93\x00\x8a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x75\x00\x6c\x00\x2d\x00\x9b\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x79\x00\x6c\x00\x7b\x00\x20\x00\x7d\x00\x94\x00\x76\x00\x38\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x93\x00\x94\x00\x2d\x00\x92\x00\x07\x00\x0d\x00\x0f\x00\x50\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x94\x00\x94\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2a\x00\x2b\x00\x5c\x00\x50\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x20\x00\x38\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0e\x00\x29\x00\x2a\x00\x38\x00\x03\x00\x04\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x18\x00\x88\x00\x89\x00\x8a\x00\x75\x00\x8c\x00\x4c\x00\x58\x00\x59\x00\x88\x00\x89\x00\x8a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x9b\x00\x88\x00\x89\x00\x8a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x9b\x00\x93\x00\x6e\x00\x88\x00\x89\x00\x8a\x00\x93\x00\x94\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x9b\x00\x20\x00\x0f\x00\x88\x00\x89\x00\x8a\x00\x0e\x00\x28\x00\x29\x00\x2a\x00\x9b\x00\x88\x00\x89\x00\x8a\x00\x29\x00\x2a\x00\x18\x00\x88\x00\x89\x00\x8a\x00\x35\x00\x22\x00\x9b\x00\x88\x00\x89\x00\x8a\x00\x93\x00\x93\x00\x0d\x00\x75\x00\x9b\x00\x69\x00\x6a\x00\x88\x00\x89\x00\x8a\x00\x9b\x00\x88\x00\x89\x00\x8a\x00\x29\x00\x2a\x00\x9b\x00\x88\x00\x89\x00\x8a\x00\x88\x00\x89\x00\x8a\x00\x03\x00\x04\x00\x34\x00\x9b\x00\x88\x00\x89\x00\x8a\x00\x9b\x00\x2a\x00\x8c\x00\x93\x00\x94\x00\x8f\x00\x9b\x00\x29\x00\x2a\x00\x9b\x00\x28\x00\x29\x00\x2a\x00\x88\x00\x89\x00\x8a\x00\x9b\x00\x88\x00\x89\x00\x8a\x00\x32\x00\x33\x00\x22\x00\x35\x00\x88\x00\x88\x00\x89\x00\x8a\x00\x03\x00\x04\x00\x75\x00\x71\x00\x9b\x00\x29\x00\x2a\x00\x4c\x00\x9b\x00\x88\x00\x89\x00\x8a\x00\x29\x00\x2a\x00\x36\x00\x37\x00\x9b\x00\x29\x00\x2a\x00\x88\x00\x89\x00\x8a\x00\x22\x00\x3d\x00\x72\x00\x88\x00\x89\x00\x8a\x00\x9b\x00\x03\x00\x04\x00\x93\x00\x93\x00\x94\x00\x5a\x00\x5b\x00\x5c\x00\x93\x00\x9b\x00\x6d\x00\x6e\x00\x00\x00\x05\x00\x37\x00\x9b\x00\x03\x00\x04\x00\x58\x00\x59\x00\x05\x00\x06\x00\x88\x00\x89\x00\x8a\x00\x20\x00\x6f\x00\x70\x00\x71\x00\x94\x00\x12\x00\x41\x00\x42\x00\x43\x00\x5a\x00\x5b\x00\x5c\x00\x7c\x00\x00\x00\x6d\x00\x6e\x00\x9b\x00\x1d\x00\x32\x00\x95\x00\x88\x00\x89\x00\x8a\x00\x93\x00\x88\x00\x89\x00\x8a\x00\x2c\x00\x2d\x00\x7b\x00\x57\x00\x12\x00\x93\x00\x3d\x00\x2c\x00\x2d\x00\x69\x00\x93\x00\x01\x00\x9b\x00\x03\x00\x87\x00\x88\x00\x9b\x00\x01\x00\x02\x00\x88\x00\x89\x00\x8a\x00\x93\x00\x0d\x00\x6c\x00\x93\x00\x88\x00\x89\x00\x8a\x00\x0d\x00\x7b\x00\x88\x00\x89\x00\x8a\x00\x18\x00\x7a\x00\x5e\x00\x0e\x00\x9b\x00\x93\x00\x06\x00\x7f\x00\x87\x00\x88\x00\x82\x00\x9b\x00\x84\x00\x18\x00\x86\x00\x88\x00\x9b\x00\x03\x00\x04\x00\x8b\x00\x8c\x00\x8d\x00\x72\x00\x8f\x00\x01\x00\x91\x00\x1a\x00\x93\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x8a\x00\x0d\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x01\x00\x1d\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x94\x00\x26\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x37\x00\x00\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x8d\x00\x79\x00\x8f\x00\x7b\x00\x91\x00\x7d\x00\x95\x00\x45\x00\x80\x00\x0f\x00\x82\x00\x61\x00\x12\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x0e\x00\x81\x00\x7b\x00\x8f\x00\x79\x00\x05\x00\x7b\x00\x07\x00\x7d\x00\x9a\x00\x18\x00\x80\x00\x8c\x00\x82\x00\x87\x00\x88\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x89\x00\x8a\x00\x4d\x00\x4e\x00\x4f\x00\x60\x00\x61\x00\x2c\x00\x2d\x00\x0e\x00\x03\x00\x04\x00\x0e\x00\x01\x00\x02\x00\x03\x00\x04\x00\x9a\x00\x5d\x00\x18\x00\x5f\x00\x0e\x00\x18\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x95\x00\x7b\x00\x03\x00\x04\x00\x01\x00\x88\x00\x03\x00\x04\x00\x0e\x00\x73\x00\x74\x00\x0e\x00\x0d\x00\x87\x00\x88\x00\x79\x00\x0d\x00\x7b\x00\x18\x00\x7d\x00\x18\x00\x18\x00\x13\x00\x1b\x00\x01\x00\x02\x00\x03\x00\x04\x00\x20\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x18\x00\x4d\x00\x4e\x00\x4f\x00\x0e\x00\x1d\x00\x93\x00\x2d\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x18\x00\x18\x00\x88\x00\x5d\x00\x8a\x00\x5f\x00\x1d\x00\x93\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x05\x00\x06\x00\x95\x00\x73\x00\x74\x00\x6f\x00\x70\x00\x71\x00\x0f\x00\x79\x00\x11\x00\x7b\x00\x26\x00\x7d\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x1a\x00\x03\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x39\x00\x4d\x00\x4e\x00\x4f\x00\x2c\x00\x2d\x00\x93\x00\x18\x00\x01\x00\x11\x00\x03\x00\x25\x00\x1d\x00\x0e\x00\x0f\x00\x10\x00\x18\x00\x5d\x00\x23\x00\x5f\x00\x0d\x00\x0e\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x7f\x00\x11\x00\x39\x00\x82\x00\x1b\x00\x84\x00\x96\x00\x86\x00\x18\x00\x73\x00\x74\x00\x94\x00\x8b\x00\x8c\x00\x8d\x00\x79\x00\x8f\x00\x7b\x00\x91\x00\x7d\x00\x03\x00\x04\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x0d\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x24\x00\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x66\x00\x67\x00\x68\x00\x69\x00\x02\x00\x03\x00\x04\x00\x5d\x00\x01\x00\x5f\x00\x03\x00\x04\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x0d\x00\x0e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x13\x00\x03\x00\x04\x00\x73\x00\x74\x00\x18\x00\x01\x00\x02\x00\x25\x00\x79\x00\x40\x00\x7b\x00\x95\x00\x7d\x00\x8f\x00\x22\x00\x03\x00\x04\x00\x0d\x00\x02\x00\x03\x00\x04\x00\x11\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x3c\x00\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x01\x00\x93\x00\x03\x00\x03\x00\x04\x00\x93\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x0d\x00\x0e\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x03\x00\x04\x00\x03\x00\x04\x00\x1b\x00\x05\x00\x06\x00\x93\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x3b\x00\x79\x00\x96\x00\x7b\x00\x2f\x00\x7d\x00\x03\x00\x04\x00\x48\x00\x49\x00\x03\x00\x04\x00\x0c\x00\x16\x00\x96\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x07\x00\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x95\x00\x93\x00\x96\x00\x22\x00\x43\x00\x22\x00\x22\x00\x20\x00\x01\x00\x20\x00\x03\x00\x04\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x0d\x00\x20\x00\x22\x00\x0f\x00\x0f\x00\x21\x00\x13\x00\x22\x00\x01\x00\x38\x00\x03\x00\x04\x00\x0e\x00\x22\x00\x11\x00\x79\x00\x0f\x00\x7b\x00\x10\x00\x7d\x00\x0d\x00\x22\x00\x40\x00\x21\x00\x25\x00\x1e\x00\x13\x00\x38\x00\x34\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x20\x00\x4d\x00\x4e\x00\x4f\x00\x20\x00\x0e\x00\x43\x00\x0f\x00\x01\x00\x0d\x00\x03\x00\x2d\x00\x18\x00\x0e\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x0d\x00\x0f\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x10\x00\x22\x00\x0f\x00\x11\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x10\x00\x7e\x00\x41\x00\x38\x00\x81\x00\x79\x00\x83\x00\x7b\x00\x10\x00\x7d\x00\x0e\x00\x41\x00\x4c\x00\x40\x00\x38\x00\x8c\x00\x38\x00\x0f\x00\x8f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x0f\x00\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x0e\x00\x1d\x00\x03\x00\x10\x00\x10\x00\x0d\x00\x11\x00\x1d\x00\x01\x00\x02\x00\x03\x00\x04\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x0d\x00\x11\x00\x34\x00\x0f\x00\x01\x00\x10\x00\x03\x00\x04\x00\x21\x00\x38\x00\x0e\x00\x18\x00\x01\x00\x02\x00\x0e\x00\x79\x00\x0d\x00\x7b\x00\x1a\x00\x7d\x00\x1a\x00\x1e\x00\x13\x00\x10\x00\x0d\x00\x1b\x00\x18\x00\x11\x00\x11\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x21\x00\x4d\x00\x4e\x00\x4f\x00\x0c\x00\x0e\x00\x32\x00\x2d\x00\x3e\x00\x01\x00\x14\x00\x03\x00\x10\x00\x44\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x10\x00\x0d\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x0c\x00\x11\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x0f\x00\x79\x00\x18\x00\x7b\x00\x0e\x00\x7d\x00\x18\x00\x10\x00\x10\x00\x41\x00\x38\x00\x22\x00\x0e\x00\x1a\x00\x1e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x10\x00\x4d\x00\x4e\x00\x4f\x00\x1a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x1a\x00\x18\x00\x0e\x00\x0e\x00\x20\x00\x0e\x00\x0e\x00\x20\x00\x43\x00\x0e\x00\x0e\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x0e\x00\x18\x00\x4d\x00\x4e\x00\x4f\x00\x14\x00\x0e\x00\x17\x00\x79\x00\x10\x00\x7b\x00\x23\x00\x7d\x00\x1e\x00\x40\x00\x01\x00\x01\x00\x25\x00\x5d\x00\x43\x00\x5f\x00\x43\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x1e\x00\x4d\x00\x4e\x00\x4f\x00\x1e\x00\x0f\x00\x03\x00\x10\x00\x54\x00\x55\x00\x47\x00\x0d\x00\x79\x00\x10\x00\x7b\x00\x09\x00\x7d\x00\x5d\x00\x10\x00\x0e\x00\x0d\x00\x43\x00\x0d\x00\x18\x00\x4d\x00\x11\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x3e\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x01\x00\x02\x00\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x5d\x00\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x5d\x00\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x52\x00\x53\x00\x01\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x07\x00\x08\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\x1a\x00\xff\xff\x1c\x00\x1d\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x26\x00\x27\x00\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\x2d\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x07\x00\x08\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\x1a\x00\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x26\x00\x27\x00\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\x2d\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\x1a\x00\xff\xff\x1c\x00\x1d\x00\xff\xff\xff\xff\xff\xff\x21\x00\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x2d\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\x1a\x00\xff\xff\x1c\x00\x1d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x2d\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\x1a\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x2d\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\x1a\x00\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x2d\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\x82\x00\xff\xff\x84\x00\x79\x00\x86\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\x8b\x00\x8c\x00\x8d\x00\xff\xff\x8f\x00\xff\xff\x91\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\x82\x00\xff\xff\x84\x00\x79\x00\x86\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\x8b\x00\x8c\x00\x8d\x00\xff\xff\x8f\x00\xff\xff\x91\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\x82\x00\xff\xff\x84\x00\x79\x00\x86\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\x8b\x00\x8c\x00\x8d\x00\xff\xff\x8f\x00\xff\xff\x91\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\x82\x00\xff\xff\x84\x00\x79\x00\x86\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\x8b\x00\x8c\x00\x8d\x00\xff\xff\x8f\x00\xff\xff\x91\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\x82\x00\xff\xff\x84\x00\x79\x00\x86\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\x8b\x00\x8c\x00\x8d\x00\xff\xff\x8f\x00\xff\xff\x91\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\x82\x00\xff\xff\x84\x00\x79\x00\x86\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\x8b\x00\x8c\x00\x8d\x00\xff\xff\x8f\x00\xff\xff\x91\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x03\x00\x04\x00\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x92\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x92\x00\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x92\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x92\x00\x4d\x00\x4e\x00\x4f\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x92\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x92\x00\xff\xff\x82\x00\xff\xff\x84\x00\x79\x00\x86\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\x8b\x00\x8c\x00\x8d\x00\xff\xff\x8f\x00\xff\xff\x91\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\x18\x00\x19\x00\x1a\x00\xff\xff\x1c\x00\xff\xff\xff\xff\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x47\x00\x33\x00\x49\x00\x4a\x00\x36\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x4c\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\x79\x00\x19\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x2a\x00\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\x92\x00\xff\xff\x33\x00\xff\xff\x4a\x00\x36\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\x79\x00\x19\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x2a\x00\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\x92\x00\xff\xff\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\xff\xff\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\x4b\x00\x4c\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\x7f\x00\xff\xff\xff\xff\x82\x00\x1f\x00\x84\x00\x79\x00\x86\x00\x7b\x00\x24\x00\x7d\x00\xff\xff\x8b\x00\x8c\x00\x8d\x00\x2a\x00\x8f\x00\x2c\x00\x91\x00\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x4c\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\x4b\x00\x4c\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\xff\xff\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x4c\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\x4b\x00\x4c\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\x47\x00\xff\xff\x49\x00\x4a\x00\x1f\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\x5d\x00\xff\xff\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\x3d\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\x4c\x00\x79\x00\x5d\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\x92\x00\xff\xff\x77\x00\x78\x00\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\x5d\x00\x01\x00\xff\xff\x03\x00\x04\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x77\x00\x78\x00\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x47\x00\x22\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\xff\xff\x73\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\x5d\x00\x01\x00\xff\xff\x03\x00\x04\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\x78\x00\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\xff\xff\x73\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\x5d\x00\x01\x00\xff\xff\x03\x00\x04\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\x73\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\xff\xff\x73\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\x5d\x00\x01\x00\xff\xff\x03\x00\x04\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\x73\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\xff\xff\x73\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\x01\x00\xff\xff\x03\x00\x04\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\x47\x00\xff\xff\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\xff\xff\x47\x00\xff\xff\x49\x00\x4a\x00\x5d\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\x92\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x79\x00\xff\xff\x7b\x00\x0d\x00\x7d\x00\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\x92\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\x4a\x00\x5d\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x33\x00\x7d\x00\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\x18\x00\x19\x00\x1a\x00\xff\xff\x1c\x00\xff\xff\xff\xff\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\xff\xff\xff\xff\x01\x00\x24\x00\x03\x00\x04\x00\xff\xff\x06\x00\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\x13\x00\x36\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x2d\x00\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\xff\xff\x33\x00\xff\xff\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\x42\x00\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\xff\xff\x33\x00\xff\xff\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\x42\x00\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\xff\xff\x33\x00\xff\xff\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\x42\x00\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\xff\xff\x33\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\x42\x00\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\xff\xff\x33\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\x42\x00\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x39\x00\x3a\x00\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x24\x00\x1c\x00\x1d\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x2c\x00\xff\xff\x2e\x00\x26\x00\x27\x00\x28\x00\x29\x00\x33\x00\xff\xff\x2c\x00\x2d\x00\xff\xff\xff\xff\x39\x00\x3a\x00\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x39\x00\x3a\x00\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\x24\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x13\x00\xff\xff\x15\x00\x16\x00\x33\x00\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x22\x00\xff\xff\x24\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x01\x00\xff\xff\x03\x00\x04\x00\x13\x00\x06\x00\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\x24\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x1d\x02\xc1\x00\x05\x00\x03\x00\x79\x02\x23\x00\x24\x00\x25\x00\x46\x01\xd2\x00\x1e\x02\x1f\x02\x67\x00\xc7\x00\x7a\x01\x13\x00\x14\x00\x16\x02\x31\x02\x63\x00\x43\x01\x44\x01\x3d\x01\xe1\x00\xc1\x01\xc2\x01\x15\x00\x45\x01\xcd\x01\x15\x00\x16\x00\x17\x00\x18\x00\x64\x00\x17\x00\x18\x00\x19\x00\x09\x01\x1a\x00\x19\x00\x1b\x00\x1a\x00\x63\x01\x1b\x00\xd9\xff\x15\x00\x15\x00\x3a\x02\x0a\x01\x0b\x01\x6c\x00\x6d\x00\x65\x00\x15\x00\x0c\x01\x10\x02\x19\x00\x1a\x00\x1a\x00\x50\x02\x1b\x00\x29\x01\x91\x01\x92\x01\x70\x00\x1a\x00\xff\x00\x88\x02\x1c\x00\x8a\x02\x47\x01\x1c\x00\x7b\x02\xca\x00\x08\x00\xc9\x00\xca\x00\x0d\x00\x97\x01\x6f\x01\xac\x02\x0d\x00\x97\x01\x27\x01\x8f\x02\x0d\x00\x64\x02\x1c\x00\x1c\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x78\x01\x6f\x00\x1c\x00\xca\x01\x2a\x00\x0d\x00\x98\x02\x96\x02\xa9\x01\xc3\x01\xb7\x00\x68\x00\xd2\x01\x0d\x00\x98\x02\x20\x02\xc3\x01\x02\x01\xd3\x00\x3a\x00\x17\x02\xd4\x00\x20\x02\xd5\x00\x94\x02\x69\x00\x2a\x01\x09\x00\x26\x00\xcd\x00\x3b\x00\x21\x02\xd6\x00\x2a\x01\x26\x00\xd7\x00\xcd\x00\x00\x01\x21\x02\x9b\x02\x27\x00\x28\x00\x29\x00\x2a\x00\x22\x02\x00\x01\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x01\x22\x02\x70\x00\x71\x00\x2a\x00\x06\x00\x06\x00\x04\x00\x2b\x00\x1d\x00\x46\x01\x49\x02\x1d\x00\x77\x02\x2b\x00\x00\x01\x2a\x01\x3c\x00\x98\x01\x3d\x00\x3e\x00\x72\x00\x99\x01\x3f\x00\x40\x00\x41\x00\x98\x01\xa1\xfe\x93\x01\x66\x00\x10\x02\x50\x02\xcb\x00\x6c\x02\xcc\x00\xcb\x00\x93\x01\xcc\x00\xcb\x00\x00\x01\xcc\x00\xda\x01\x00\x01\x70\x00\x71\x00\x2a\x00\xcd\x00\x65\x02\xce\x00\xcd\x00\x7a\x00\xce\x00\xcd\x00\x95\x02\xce\x00\x1b\x01\x0b\x01\x6c\x00\x6d\x00\x49\x02\x65\x02\x1c\x01\x72\x00\x36\x02\x0b\x01\x6c\x00\x6d\x00\x42\x00\x66\x02\x43\x00\x48\x02\x44\x00\x51\x02\x45\x02\x59\x02\x6a\x00\x6b\x00\x6c\x00\x6d\x00\xd9\x00\x6f\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x1b\x01\x0b\x01\x6c\x00\x6d\x00\xda\x01\x00\x01\x1c\x01\x46\x00\x33\x02\xf9\x01\xa0\x01\x1d\x01\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x46\x02\x7b\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x75\x00\x6f\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x7e\x00\x6f\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x7f\x00\x6f\x00\x89\x01\x55\x02\x76\x02\x1d\x01\x7e\x02\x0b\x01\x6c\x00\x6d\x00\x1a\x02\x0b\x01\x6c\x00\x6d\x00\xfb\x01\x51\x01\xac\x01\x0b\x01\x6c\x00\x6d\x00\x85\x02\x82\x02\x6d\x00\x7f\x02\x9c\x02\x9d\x02\xad\x01\x0b\x01\x6c\x00\x6d\x00\x6f\x01\x70\x00\x71\x00\x2a\x00\x49\x02\x6c\x01\x8e\x01\xd0\x01\xd1\x01\x70\x00\x71\x00\x2a\x00\x26\x01\x0b\x01\x6c\x00\x6d\x00\x28\x01\x0b\x01\x6c\x00\x6d\x00\x72\x00\x70\x00\x71\x00\x2a\x00\x2b\x01\x0b\x01\x6c\x00\x6d\x00\x72\x00\x3e\x02\xa1\x02\x70\x00\x71\x00\x2a\x00\xda\x01\x00\x01\x19\x01\x0b\x01\x6c\x00\x6d\x00\x72\x00\xd8\x01\x4e\x02\x70\x00\x71\x00\x2a\x00\x39\x02\x27\x02\x6c\x00\x6d\x00\x72\x00\x70\x00\x71\x00\x2a\x00\x22\x01\x6d\x00\x3a\x02\x70\x00\x71\x00\x2a\x00\x28\x02\x4f\x02\x72\x00\x70\x00\x71\x00\x2a\x00\xd2\x01\xa2\x02\xf9\x01\xd9\x01\x72\x00\x00\x02\x01\x02\x70\x00\x71\x00\x2a\x00\x72\x00\x70\x00\x71\x00\x2a\x00\xbb\x01\x6d\x00\x72\x00\x70\x00\x71\x00\x2a\x00\x70\x00\x71\x00\x2a\x00\x0d\x00\xa9\x01\xbc\x01\x72\x00\x70\x00\x71\x00\x2a\x00\x72\x00\x89\x01\x6c\x01\xda\x01\x00\x01\x67\x01\x72\x00\x25\x02\x6d\x00\x72\x00\xae\x01\x6c\x00\x6d\x00\x70\x00\x71\x00\x2a\x00\x72\x00\x70\x00\x71\x00\x2a\x00\xaf\x01\xb0\x01\x29\x02\xb1\x01\x42\x02\x70\x00\x71\x00\x2a\x00\x0d\x00\x64\x02\xd9\x01\xaa\x02\x72\x00\x26\x02\x6d\x00\x8e\x01\x72\x00\x70\x00\x71\x00\x2a\x00\xb7\x01\x6d\x00\x2a\x02\x2b\x02\x72\x00\x22\x01\x6d\x00\x70\x00\x71\x00\x2a\x00\x29\x02\xaa\x01\xdc\x01\x70\x00\x71\x00\x2a\x00\x72\x00\x0d\x00\xa9\x01\x68\x02\xda\x01\x00\x01\x3b\x02\x3c\x02\x3d\x02\xab\x02\x72\x00\x91\x02\x92\x02\x12\x00\xb9\x00\x81\x02\x72\x00\x0d\x00\x4d\x01\xd0\x01\xd1\x01\xb9\x00\xa3\x00\x70\x00\x71\x00\x2a\x00\x9c\x01\xa3\x02\xa4\x02\xa5\x02\x59\x02\x13\x00\xae\x00\xaf\x00\xb0\x00\x3b\x02\x3c\x02\x3d\x02\xb2\x01\x12\x00\x91\x02\x92\x02\x72\x00\x4e\x01\x9d\x01\x44\x02\x70\x00\x71\x00\x2a\x00\xa2\x02\x70\x00\x71\x00\xb3\x01\xbc\x00\xbd\x00\x2c\x02\x99\x01\x13\x00\x4f\x02\xab\x01\xbc\x00\xbd\x00\x53\x02\xa6\x02\x2d\x00\x72\x00\x2f\x00\x27\x00\x28\x00\x72\x00\x2d\x00\x2e\x00\x70\x00\x71\x00\x2a\x00\xfd\x01\xdc\x00\x66\x02\x93\x02\x70\x00\x71\x00\x2a\x00\x31\x00\x2c\x02\x70\x00\x71\x00\x2a\x00\x32\x00\xda\x00\x7a\x00\x2e\x01\x72\x00\x3e\x02\xa3\x00\xb1\x00\x27\x00\x28\x00\xb2\x00\x72\x00\xb3\x00\xf2\x00\xb4\x00\xcd\x00\x72\x00\x0d\x00\x4d\x01\x9a\x00\x9b\x00\xb5\x00\xdc\x01\x9e\x00\xa2\x01\xb6\x00\xbb\x01\xb7\x00\x92\x00\x81\x00\x82\x00\xe2\x01\x84\x00\x3d\x00\x3e\x00\x69\x01\xa3\x01\x3f\x00\x40\x00\x41\x00\x94\x00\x95\x00\x2d\x00\x4f\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xdd\x01\xc5\x01\xe3\x01\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x92\x00\x81\x00\x82\x00\x93\x00\x84\x00\x3d\x00\x3e\x00\x79\x00\x12\x00\x3f\x00\x40\x00\x41\x00\x94\x00\x95\x00\x9c\x00\x42\x00\x9e\x00\x85\x00\xb6\x00\x44\x00\xbf\x01\x7a\x00\x96\x00\x8a\x02\x97\x00\x76\x01\x13\x00\x98\x00\x99\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\x46\x00\xca\x01\x2a\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2f\x01\xb9\x01\xe6\x00\xc6\x01\x42\x00\xb9\x00\x85\x00\xa4\x00\x44\x00\x78\x02\x30\x01\x96\x00\xd6\x00\x97\x00\x27\x00\x28\x00\x98\x00\x99\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\x46\x00\x0d\x01\x81\x00\x82\x00\x03\x02\x84\x00\x3d\x00\x3e\x00\xca\x01\x2a\x00\x3f\x00\x40\x00\x41\x00\xe4\x00\xe5\x00\xbc\x00\xbd\x00\x31\x01\x2f\x00\x30\x00\x6e\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\xcb\x01\x04\x02\x32\x01\xc8\x01\x19\x02\x6f\x01\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\xce\x01\xe6\x00\x2f\x00\x30\x00\x2d\x00\xd7\x01\x2f\x00\x30\x00\xef\x00\x8c\x02\x07\x02\xf1\x00\xcd\x01\x27\x00\x28\x00\x42\x00\x74\x00\x85\x00\xf0\x00\x44\x00\xf9\x00\xf2\x00\x75\x00\xfa\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xfb\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x0d\x01\x81\x00\x82\x00\x03\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\xbe\x00\x3f\x00\x40\x00\x41\x00\xf5\x00\x31\x02\xe1\x01\x81\x02\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xf6\x00\xbe\x00\x68\x01\x04\x02\x69\x01\x3e\x01\xbf\x00\x7b\x01\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xb9\x00\xa3\x00\x8f\x01\x4a\x02\x07\x02\xa3\x02\xa4\x02\xa5\x02\x8a\x02\x42\x00\x8c\x02\x85\x00\xa0\x01\x44\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2d\x00\xd9\x00\x2f\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x0d\x01\x81\x00\x82\x00\x03\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\x9a\x01\x3f\x00\x40\x00\x41\x00\xbc\x00\xbd\x00\xab\x02\xac\xff\x2d\x00\x2f\x02\x2f\x00\xa3\x01\xac\xff\xa5\x01\xa6\x01\xa7\x01\x30\x02\x04\x02\xac\x00\x10\x01\xd0\x00\x7d\x02\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\xb1\x00\x62\x01\xb6\x01\xb2\x00\x7e\x02\x04\x01\xa4\x01\xb4\x00\x63\x01\x06\x02\x07\x02\x33\x01\x9a\x00\x9b\x00\xb5\x00\x42\x00\x9e\x00\x85\x00\xb6\x00\x44\x00\x14\x02\x15\x02\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x35\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x0d\x01\x81\x00\x82\x00\x03\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\x37\x01\x3f\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xf6\x01\xf7\x01\x84\x01\x85\x01\x0c\x00\x0d\x00\x0e\x00\x04\x02\x2d\x00\x13\x01\x2f\x00\x30\x00\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x74\x00\x1f\x01\xdd\x00\x28\x00\xde\x00\x2a\x00\x75\x00\x23\x02\x24\x02\x0b\x02\x07\x02\xa7\x00\x2d\x00\x2e\x00\x3a\x01\x42\x00\xe2\x00\x85\x00\x3c\x01\x44\x00\x67\x01\x20\x01\xd5\x01\xd6\x01\x31\x00\x0f\x00\x0d\x00\x0e\x00\x2e\x02\x27\x00\x28\x00\x45\x00\x2a\x00\xa0\x02\x81\x00\x82\x00\x61\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\x17\x01\x3f\x00\x40\x00\x41\x00\xe9\x00\x28\x00\xde\x00\x2a\x00\x2d\x00\x40\x01\x2f\x00\x5f\x00\x60\x00\x5b\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xd0\x00\xd1\x00\xb4\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x61\x00\x62\x00\x2f\x00\x30\x00\xd2\x00\x20\x00\x21\x00\x03\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x06\x01\x42\x00\x16\x01\x85\x00\x24\x01\x44\x00\x0b\x00\x0c\x00\x39\x01\x3a\x01\x0b\x00\x0c\x00\x76\x00\xbf\x00\xc2\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x74\x02\x81\x00\x82\x00\x61\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\xc4\x00\x3f\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x10\x00\x02\x00\x09\x00\xb4\x02\xe4\x00\xb2\x02\xaf\x02\xb0\x02\x2d\x00\xaa\x02\x2f\x00\x30\x00\xa8\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x74\x00\xa1\xfe\xa8\x02\x1f\x00\x1f\x00\x9a\x02\x75\x00\xa0\x02\x2d\x00\x10\x02\x2f\x00\x30\x00\x84\x02\x4f\x02\x91\x02\x42\x00\x1f\x00\x85\x00\x98\x02\x44\x00\x74\x00\x24\x01\x5d\x02\x68\x02\x92\xff\x74\x02\x75\x00\x0f\x02\x73\x02\x27\x00\x28\x00\x45\x00\x2a\x00\xc9\x01\x81\x00\x82\x00\x61\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\x76\x02\x3f\x00\x40\x00\x41\x00\xa1\xfe\x7b\x02\xe4\x00\x1f\x00\x2d\x00\x33\x02\x2f\x00\xb6\x01\x35\x02\x36\x02\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xdc\x00\x1f\x00\x8e\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x48\x02\x40\x02\x4c\x02\x4d\x02\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x53\x02\xd3\x00\x58\x02\x59\x02\xd4\x00\x42\x00\x71\x01\x85\x00\x5b\x02\x44\x00\xff\x01\x0d\x02\x0e\x02\x03\x02\x0f\x02\xd6\x00\x10\x02\x1f\x00\xd7\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xd3\x01\x81\x00\x82\x00\x61\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\x1a\x02\x3f\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x1c\x02\x1d\x02\x2f\x00\xd4\xfe\xb9\x01\xc5\x01\xc1\x01\xc8\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\x63\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x31\x00\xd0\x01\xd5\x01\x1f\x00\x2d\x00\xdf\x01\x2f\x00\x30\x00\xef\x01\x51\x01\x71\x01\x32\x00\x2d\x00\x2e\x00\x75\x01\x42\x00\x74\x00\x85\x00\x73\x01\x44\x00\x74\x01\x76\x01\x75\x00\x02\x01\x31\x00\x7a\x01\x7d\x01\x91\x01\xe8\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x8e\x01\x81\x00\x82\x00\x61\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\x9f\x01\x3f\x00\x40\x00\x41\x00\x3c\x01\x2d\x01\x9d\x01\xbe\x01\x33\x00\x2d\x00\x33\x01\x2f\x00\x35\x01\x37\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x02\x01\xd0\x00\x40\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3c\x01\x40\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x42\x01\x42\x00\x30\x01\x85\x00\x43\x01\x44\x00\x32\x01\x02\x01\x49\x01\x4d\x01\x51\x01\x52\x01\x5f\x01\x60\x01\x61\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x94\x01\x81\x00\x82\x00\x61\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\x02\x01\x3f\x00\x40\x00\x41\x00\x66\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x67\x01\x6b\x01\x6c\x01\xc9\x00\xe0\x00\xa9\xfe\xab\xfe\xa1\xfe\xe4\x00\xae\xfe\xeb\x00\x43\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x0d\x01\x81\x00\x82\x00\x0e\x01\x84\x00\x3d\x00\x3e\x00\xec\x00\xf7\x00\x3f\x00\x40\x00\x41\x00\xf8\x00\xfc\x00\xfd\x00\x42\x00\x02\x01\x85\x00\xac\x00\x44\x00\x09\x01\x06\x01\x15\x01\x16\x01\x21\x01\x0f\x01\x08\x01\x37\x02\x19\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x52\x01\x81\x00\x82\x00\x0e\x01\x84\x00\x3d\x00\x3e\x00\x46\x00\x22\x01\x3f\x00\x40\x00\x41\x00\x26\x01\x1f\x00\x2f\x00\x7d\x00\x53\x01\x54\x01\x78\x00\x7e\x00\x42\x00\xad\x00\x85\x00\xc1\x00\x44\x00\x55\x01\x08\x00\xc7\x00\xc4\x00\x3a\x00\x23\x00\xc6\x00\xff\xff\x20\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x0d\x01\x81\x00\x82\x00\x0e\x01\x84\x00\x3d\x00\x3e\x00\x46\x00\x09\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x01\x00\x00\xc8\x01\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x52\x01\x81\x00\x82\x00\x0e\x01\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x01\x2d\x00\x2e\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x55\x01\x00\x00\x00\x00\x00\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x0d\x01\x81\x00\x82\x00\x0e\x01\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x01\x00\x00\x9d\x01\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x0d\x01\x81\x00\x82\x00\x0e\x01\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x0f\x01\x00\x00\x3e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x0d\x01\x81\x00\x82\x00\x0e\x01\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x01\x00\x00\x10\x01\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x0d\x01\x81\x00\x82\x00\x0e\x01\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x0f\x01\x00\x00\x13\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xa0\x02\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x8e\x00\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x8f\x00\x90\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\xdc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x74\x02\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x5b\x02\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xf1\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xa3\x00\xa4\x00\xa5\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xf2\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\xba\x00\x00\x00\xa9\x00\xf4\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\xea\x01\xeb\x01\xec\x01\xed\x01\x00\x00\x00\x00\xbc\x00\xbd\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xf3\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xa3\x00\xa4\x00\xa5\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xf4\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\xba\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\xea\x01\xeb\x01\xec\x01\xed\x01\x00\x00\x00\x00\xbc\x00\xbd\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xf5\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xa3\x00\xa4\x00\xa5\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xfc\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\xba\x00\x00\x00\xa9\x00\xf4\x00\x00\x00\x00\x00\x00\x00\x1f\xff\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbd\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x11\x02\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xa3\x00\xa4\x00\xa5\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xc9\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\xba\x00\x00\x00\xa9\x00\xf4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbd\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xd3\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xa3\x00\xa4\x00\xa5\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xdb\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\xba\x00\x00\x00\xa9\x00\x00\x00\xbb\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbd\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xdf\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xa3\x00\xa4\x00\xa5\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xef\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\xba\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbd\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xf0\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x77\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\xb2\x00\x00\x00\xb3\x00\x42\x00\xb4\x00\x85\x00\x00\x00\x44\x00\x00\x00\x9a\x00\x9b\x00\xb5\x00\x00\x00\x9e\x00\x00\x00\xb6\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x8e\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x94\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\xb2\x00\x00\x00\x04\x01\x42\x00\xb4\x00\x85\x00\x00\x00\x44\x00\x00\x00\x9a\x00\x9b\x00\xb5\x00\x00\x00\x9e\x00\x00\x00\xb6\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x57\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x58\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\xb2\x00\x00\x00\xf2\x00\x42\x00\xb4\x00\x85\x00\x00\x00\x44\x00\x00\x00\x9a\x00\x9b\x00\xb5\x00\x00\x00\x9e\x00\x00\x00\xb6\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x59\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x5a\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\xb2\x00\x00\x00\xe8\x01\x42\x00\xb4\x00\x85\x00\x00\x00\x44\x00\x00\x00\x9a\x00\x9b\x00\xb5\x00\x00\x00\x9e\x00\x00\x00\xb6\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x5d\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xdc\x00\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\xb2\x00\x00\x00\xb3\x00\x42\x00\xb4\x00\x85\x00\x00\x00\x44\x00\x00\x00\x9a\x00\x9b\x00\xb5\x00\x00\x00\x9e\x00\x00\x00\xb6\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x02\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\xb2\x00\x00\x00\x04\x01\x42\x00\xb4\x00\x85\x00\x00\x00\x44\x00\x00\x00\x9a\x00\x9b\x00\xb5\x00\x00\x00\x9e\x00\x00\x00\xb6\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x8c\x00\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x8d\x00\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x2f\x00\x30\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\xb5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xb2\x02\x82\x00\xed\x00\x84\x00\x3d\x00\x3e\x00\x00\x00\x46\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\xb6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xb0\x02\x82\x00\xed\x00\x84\x00\x3d\x00\x3e\x00\x00\x00\x46\x00\x3f\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x85\x02\x82\x00\xed\x00\x84\x00\x3d\x00\x3e\x00\x00\x00\x46\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x64\x01\x82\x00\xed\x00\x84\x00\x3d\x00\x3e\x00\x00\x00\x46\x00\x3f\x00\x40\x00\x41\x00\xe0\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xec\x00\x82\x00\xed\x00\x84\x00\x3d\x00\x3e\x00\x00\x00\x46\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x46\x00\x00\x00\xb2\x00\x00\x00\xf2\x00\x42\x00\xb4\x00\x85\x00\x00\x00\x44\x00\x00\x00\x9a\x00\x9b\x00\xb5\x00\x00\x00\x9e\x00\x00\x00\xb6\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x87\x01\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\xa7\x00\x50\x00\xa8\x00\x00\x00\xa9\x00\x00\x00\x00\x00\xe5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x01\x00\x00\xaa\x00\xab\x00\x8a\x01\x00\x00\x00\x00\x00\x00\x3c\x00\x8b\x01\x3d\x00\x3e\x00\xe6\x01\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\xe7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x00\x00\x8e\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x87\x01\x00\x00\x09\x02\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x42\x00\x50\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\xe5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x89\x01\x00\x00\x52\x00\x00\x00\x8a\x01\x00\x00\x00\x00\x46\x00\x00\x00\x8b\x01\x00\x00\x8a\x00\xe6\x01\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x0a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x0b\x02\x8e\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x87\x01\x00\x00\x60\x02\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x42\x00\x50\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x88\x01\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x89\x01\x00\x00\x52\x00\x00\x00\x8a\x01\x00\x00\x00\x00\x46\x00\x00\x00\x8b\x01\x00\x00\x00\x00\x8c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x02\x00\x00\x56\x02\x4b\x01\xfe\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x0b\x02\x8e\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x87\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\xb1\x00\x00\x00\x00\x00\xb2\x00\xe5\x01\x04\x01\x42\x00\xb4\x00\x85\x00\x51\x00\x44\x00\x00\x00\x9a\x00\x9b\x00\xb5\x00\x89\x01\x9e\x00\x52\x00\xb6\x00\x8a\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x8b\x01\x00\x00\x00\x00\xe6\x01\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\xe7\x01\x00\x00\xff\x01\x4b\x01\xfe\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x00\x00\x8e\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x87\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x01\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x01\x00\x00\x52\x00\x00\x00\x8a\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x8b\x01\x00\x00\x00\x00\x8c\x01\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x71\x02\x00\x00\x4a\x01\x4b\x01\xfe\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x0b\x02\x8e\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x87\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x01\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x01\x00\x00\x52\x00\x00\x00\x8a\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x8b\x01\x00\x00\x00\x00\xe6\x01\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\xe7\x01\x00\x00\x00\x00\x95\x01\xfe\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x00\x00\x8e\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x87\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x01\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x01\x00\x00\x52\x00\x00\x00\x8a\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x8b\x01\x00\x00\x00\x00\x8c\x01\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x71\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x0b\x02\x8e\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x87\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x12\x02\x00\x00\x3d\x00\x3e\x00\x88\x01\x00\x00\x3f\x00\x40\x00\x41\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x01\x00\x00\x52\x00\x00\x00\x8a\x01\x00\x00\x00\x00\xad\x02\x00\x00\x8b\x01\x00\x00\x00\x00\x8c\x01\x00\x00\x5d\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x8d\x01\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x8e\x01\x42\x00\x5e\x02\x85\x00\x00\x00\x44\x00\x00\x00\x6c\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x02\x46\x00\x00\x00\x6e\x02\x6f\x02\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x5d\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x5e\x02\x2d\x00\x00\x00\x2f\x00\x30\x00\x6c\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x6d\x02\x00\x00\x00\x00\x71\x02\x6f\x02\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x5d\x02\x24\x01\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x5e\x02\x00\x00\x00\x00\x00\x00\x00\x00\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x8c\x02\x07\x02\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x5d\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x5e\x02\x2d\x00\x00\x00\x2f\x00\x30\x00\x6c\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x1b\x01\x00\x00\x00\x00\x6d\x02\x00\x00\x00\x00\x00\x00\x9e\x02\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x5d\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x5e\x02\x00\x00\x00\x00\x00\x00\x00\x00\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x4a\x02\x07\x02\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x5d\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x5e\x02\x2d\x00\x00\x00\x2f\x00\x30\x00\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x06\x02\x07\x02\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x5d\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x5e\x02\x00\x00\x00\x00\x00\x00\x00\x00\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x0b\x02\x07\x02\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x5d\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x5e\x02\x2d\x00\x00\x00\x2f\x00\x30\x00\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x69\x02\x07\x02\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x5d\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x5e\x02\x00\x00\x00\x00\x00\x00\x00\x00\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x6a\x02\x07\x02\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x2d\x00\x00\x00\x2f\x00\x30\x00\xb4\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\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\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\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\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\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\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\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\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\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\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\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\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\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\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x01\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\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\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x12\x02\x00\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x7e\x01\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x00\x00\x12\x02\x00\x00\x3d\x00\x3e\x00\x9b\x02\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x8d\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x46\x00\x00\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x42\x00\x00\x00\x85\x00\x31\x00\x44\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x12\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x46\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x49\x01\xe0\x00\x3e\x00\x13\x02\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x88\x01\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x89\x01\x00\x00\x00\x00\x00\x00\xfa\x01\x00\x00\x42\x00\x00\x00\x85\x00\xfb\x01\x44\x00\x00\x00\x8c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x8e\x01\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\xa7\x00\x50\x00\xa8\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x00\xab\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x00\xfd\x00\xfe\x00\x40\x00\x41\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x12\x01\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x13\x01\x00\x00\xe0\x01\x40\x00\x41\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x5d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x89\x00\x00\x00\xe7\x01\x40\x00\x41\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x12\x01\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x13\x01\x00\x00\xe8\x00\x40\x00\x41\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x92\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x89\x00\x00\x00\xad\x00\x40\x00\x41\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x89\x00\x00\x00\x8b\x00\x40\x00\x41\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x57\x01\x00\x00\xad\x00\x40\x00\x41\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x51\x00\x2f\x00\x30\x00\x00\x00\x80\xff\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x74\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x75\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xbf\x01\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x54\x00\x55\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x00\x00\x00\x00\x5e\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x54\x00\x55\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x00\x00\x00\x00\x5e\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xb9\x00\xa3\x00\xa4\x00\xa5\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\xa1\xfe\xa9\x00\xf4\x00\x00\x00\x00\x00\x00\x00\x1f\xff\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xea\x01\xeb\x01\xec\x01\xed\x01\xa1\xfe\x00\x00\xbc\x00\xbd\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x51\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x57\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x02\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x56\x02\x00\x00\x51\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x01\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x2d\x00\x00\x00\x2f\x00\x30\x00\x4d\x00\xa3\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x74\x00\x1f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x51\x00\x00\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyReduceArr = Happy_Data_Array.array (1, 360) [+ (1 , happyReduce_1),+ (2 , happyReduce_2),+ (3 , happyReduce_3),+ (4 , happyReduce_4),+ (5 , happyReduce_5),+ (6 , happyReduce_6),+ (7 , happyReduce_7),+ (8 , happyReduce_8),+ (9 , happyReduce_9),+ (10 , happyReduce_10),+ (11 , happyReduce_11),+ (12 , happyReduce_12),+ (13 , happyReduce_13),+ (14 , happyReduce_14),+ (15 , happyReduce_15),+ (16 , happyReduce_16),+ (17 , happyReduce_17),+ (18 , happyReduce_18),+ (19 , happyReduce_19),+ (20 , happyReduce_20),+ (21 , happyReduce_21),+ (22 , happyReduce_22),+ (23 , happyReduce_23),+ (24 , happyReduce_24),+ (25 , happyReduce_25),+ (26 , happyReduce_26),+ (27 , happyReduce_27),+ (28 , happyReduce_28),+ (29 , happyReduce_29),+ (30 , happyReduce_30),+ (31 , happyReduce_31),+ (32 , happyReduce_32),+ (33 , happyReduce_33),+ (34 , happyReduce_34),+ (35 , happyReduce_35),+ (36 , happyReduce_36),+ (37 , happyReduce_37),+ (38 , happyReduce_38),+ (39 , happyReduce_39),+ (40 , happyReduce_40),+ (41 , happyReduce_41),+ (42 , happyReduce_42),+ (43 , happyReduce_43),+ (44 , happyReduce_44),+ (45 , happyReduce_45),+ (46 , happyReduce_46),+ (47 , happyReduce_47),+ (48 , happyReduce_48),+ (49 , happyReduce_49),+ (50 , happyReduce_50),+ (51 , happyReduce_51),+ (52 , happyReduce_52),+ (53 , happyReduce_53),+ (54 , happyReduce_54),+ (55 , happyReduce_55),+ (56 , happyReduce_56),+ (57 , happyReduce_57),+ (58 , happyReduce_58),+ (59 , happyReduce_59),+ (60 , happyReduce_60),+ (61 , happyReduce_61),+ (62 , happyReduce_62),+ (63 , happyReduce_63),+ (64 , happyReduce_64),+ (65 , happyReduce_65),+ (66 , happyReduce_66),+ (67 , happyReduce_67),+ (68 , happyReduce_68),+ (69 , happyReduce_69),+ (70 , happyReduce_70),+ (71 , happyReduce_71),+ (72 , happyReduce_72),+ (73 , happyReduce_73),+ (74 , happyReduce_74),+ (75 , happyReduce_75),+ (76 , happyReduce_76),+ (77 , happyReduce_77),+ (78 , happyReduce_78),+ (79 , happyReduce_79),+ (80 , happyReduce_80),+ (81 , happyReduce_81),+ (82 , happyReduce_82),+ (83 , happyReduce_83),+ (84 , happyReduce_84),+ (85 , happyReduce_85),+ (86 , happyReduce_86),+ (87 , happyReduce_87),+ (88 , happyReduce_88),+ (89 , happyReduce_89),+ (90 , happyReduce_90),+ (91 , happyReduce_91),+ (92 , happyReduce_92),+ (93 , happyReduce_93),+ (94 , happyReduce_94),+ (95 , happyReduce_95),+ (96 , happyReduce_96),+ (97 , happyReduce_97),+ (98 , happyReduce_98),+ (99 , happyReduce_99),+ (100 , happyReduce_100),+ (101 , happyReduce_101),+ (102 , happyReduce_102),+ (103 , happyReduce_103),+ (104 , happyReduce_104),+ (105 , happyReduce_105),+ (106 , happyReduce_106),+ (107 , happyReduce_107),+ (108 , happyReduce_108),+ (109 , happyReduce_109),+ (110 , happyReduce_110),+ (111 , happyReduce_111),+ (112 , happyReduce_112),+ (113 , happyReduce_113),+ (114 , happyReduce_114),+ (115 , happyReduce_115),+ (116 , happyReduce_116),+ (117 , happyReduce_117),+ (118 , happyReduce_118),+ (119 , happyReduce_119),+ (120 , happyReduce_120),+ (121 , happyReduce_121),+ (122 , happyReduce_122),+ (123 , happyReduce_123),+ (124 , happyReduce_124),+ (125 , happyReduce_125),+ (126 , happyReduce_126),+ (127 , happyReduce_127),+ (128 , happyReduce_128),+ (129 , happyReduce_129),+ (130 , happyReduce_130),+ (131 , happyReduce_131),+ (132 , happyReduce_132),+ (133 , happyReduce_133),+ (134 , happyReduce_134),+ (135 , happyReduce_135),+ (136 , happyReduce_136),+ (137 , happyReduce_137),+ (138 , happyReduce_138),+ (139 , happyReduce_139),+ (140 , happyReduce_140),+ (141 , happyReduce_141),+ (142 , happyReduce_142),+ (143 , happyReduce_143),+ (144 , happyReduce_144),+ (145 , happyReduce_145),+ (146 , happyReduce_146),+ (147 , happyReduce_147),+ (148 , happyReduce_148),+ (149 , happyReduce_149),+ (150 , happyReduce_150),+ (151 , happyReduce_151),+ (152 , happyReduce_152),+ (153 , happyReduce_153),+ (154 , happyReduce_154),+ (155 , happyReduce_155),+ (156 , happyReduce_156),+ (157 , happyReduce_157),+ (158 , happyReduce_158),+ (159 , happyReduce_159),+ (160 , happyReduce_160),+ (161 , happyReduce_161),+ (162 , happyReduce_162),+ (163 , happyReduce_163),+ (164 , happyReduce_164),+ (165 , happyReduce_165),+ (166 , happyReduce_166),+ (167 , happyReduce_167),+ (168 , happyReduce_168),+ (169 , happyReduce_169),+ (170 , happyReduce_170),+ (171 , happyReduce_171),+ (172 , happyReduce_172),+ (173 , happyReduce_173),+ (174 , happyReduce_174),+ (175 , happyReduce_175),+ (176 , happyReduce_176),+ (177 , happyReduce_177),+ (178 , happyReduce_178),+ (179 , happyReduce_179),+ (180 , happyReduce_180),+ (181 , happyReduce_181),+ (182 , happyReduce_182),+ (183 , happyReduce_183),+ (184 , happyReduce_184),+ (185 , happyReduce_185),+ (186 , happyReduce_186),+ (187 , happyReduce_187),+ (188 , happyReduce_188),+ (189 , happyReduce_189),+ (190 , happyReduce_190),+ (191 , happyReduce_191),+ (192 , happyReduce_192),+ (193 , happyReduce_193),+ (194 , happyReduce_194),+ (195 , happyReduce_195),+ (196 , happyReduce_196),+ (197 , happyReduce_197),+ (198 , happyReduce_198),+ (199 , happyReduce_199),+ (200 , happyReduce_200),+ (201 , happyReduce_201),+ (202 , happyReduce_202),+ (203 , happyReduce_203),+ (204 , happyReduce_204),+ (205 , happyReduce_205),+ (206 , happyReduce_206),+ (207 , happyReduce_207),+ (208 , happyReduce_208),+ (209 , happyReduce_209),+ (210 , happyReduce_210),+ (211 , happyReduce_211),+ (212 , happyReduce_212),+ (213 , happyReduce_213),+ (214 , happyReduce_214),+ (215 , happyReduce_215),+ (216 , happyReduce_216),+ (217 , happyReduce_217),+ (218 , happyReduce_218),+ (219 , happyReduce_219),+ (220 , happyReduce_220),+ (221 , happyReduce_221),+ (222 , happyReduce_222),+ (223 , happyReduce_223),+ (224 , happyReduce_224),+ (225 , happyReduce_225),+ (226 , happyReduce_226),+ (227 , happyReduce_227),+ (228 , happyReduce_228),+ (229 , happyReduce_229),+ (230 , happyReduce_230),+ (231 , happyReduce_231),+ (232 , happyReduce_232),+ (233 , happyReduce_233),+ (234 , happyReduce_234),+ (235 , happyReduce_235),+ (236 , happyReduce_236),+ (237 , happyReduce_237),+ (238 , happyReduce_238),+ (239 , happyReduce_239),+ (240 , happyReduce_240),+ (241 , happyReduce_241),+ (242 , happyReduce_242),+ (243 , happyReduce_243),+ (244 , happyReduce_244),+ (245 , happyReduce_245),+ (246 , happyReduce_246),+ (247 , happyReduce_247),+ (248 , happyReduce_248),+ (249 , happyReduce_249),+ (250 , happyReduce_250),+ (251 , happyReduce_251),+ (252 , happyReduce_252),+ (253 , happyReduce_253),+ (254 , happyReduce_254),+ (255 , happyReduce_255),+ (256 , happyReduce_256),+ (257 , happyReduce_257),+ (258 , happyReduce_258),+ (259 , happyReduce_259),+ (260 , happyReduce_260),+ (261 , happyReduce_261),+ (262 , happyReduce_262),+ (263 , happyReduce_263),+ (264 , happyReduce_264),+ (265 , happyReduce_265),+ (266 , happyReduce_266),+ (267 , happyReduce_267),+ (268 , happyReduce_268),+ (269 , happyReduce_269),+ (270 , happyReduce_270),+ (271 , happyReduce_271),+ (272 , happyReduce_272),+ (273 , happyReduce_273),+ (274 , happyReduce_274),+ (275 , happyReduce_275),+ (276 , happyReduce_276),+ (277 , happyReduce_277),+ (278 , happyReduce_278),+ (279 , happyReduce_279),+ (280 , happyReduce_280),+ (281 , happyReduce_281),+ (282 , happyReduce_282),+ (283 , happyReduce_283),+ (284 , happyReduce_284),+ (285 , happyReduce_285),+ (286 , happyReduce_286),+ (287 , happyReduce_287),+ (288 , happyReduce_288),+ (289 , happyReduce_289),+ (290 , happyReduce_290),+ (291 , happyReduce_291),+ (292 , happyReduce_292),+ (293 , happyReduce_293),+ (294 , happyReduce_294),+ (295 , happyReduce_295),+ (296 , happyReduce_296),+ (297 , happyReduce_297),+ (298 , happyReduce_298),+ (299 , happyReduce_299),+ (300 , happyReduce_300),+ (301 , happyReduce_301),+ (302 , happyReduce_302),+ (303 , happyReduce_303),+ (304 , happyReduce_304),+ (305 , happyReduce_305),+ (306 , happyReduce_306),+ (307 , happyReduce_307),+ (308 , happyReduce_308),+ (309 , happyReduce_309),+ (310 , happyReduce_310),+ (311 , happyReduce_311),+ (312 , happyReduce_312),+ (313 , happyReduce_313),+ (314 , happyReduce_314),+ (315 , happyReduce_315),+ (316 , happyReduce_316),+ (317 , happyReduce_317),+ (318 , happyReduce_318),+ (319 , happyReduce_319),+ (320 , happyReduce_320),+ (321 , happyReduce_321),+ (322 , happyReduce_322),+ (323 , happyReduce_323),+ (324 , happyReduce_324),+ (325 , happyReduce_325),+ (326 , happyReduce_326),+ (327 , happyReduce_327),+ (328 , happyReduce_328),+ (329 , happyReduce_329),+ (330 , happyReduce_330),+ (331 , happyReduce_331),+ (332 , happyReduce_332),+ (333 , happyReduce_333),+ (334 , happyReduce_334),+ (335 , happyReduce_335),+ (336 , happyReduce_336),+ (337 , happyReduce_337),+ (338 , happyReduce_338),+ (339 , happyReduce_339),+ (340 , happyReduce_340),+ (341 , happyReduce_341),+ (342 , happyReduce_342),+ (343 , happyReduce_343),+ (344 , happyReduce_344),+ (345 , happyReduce_345),+ (346 , happyReduce_346),+ (347 , happyReduce_347),+ (348 , happyReduce_348),+ (349 , happyReduce_349),+ (350 , happyReduce_350),+ (351 , happyReduce_351),+ (352 , happyReduce_352),+ (353 , happyReduce_353),+ (354 , happyReduce_354),+ (355 , happyReduce_355),+ (356 , happyReduce_356),+ (357 , happyReduce_357),+ (358 , happyReduce_358),+ (359 , happyReduce_359),+ (360 , happyReduce_360)+ ]++happy_n_terms = 78 :: Int+happy_n_nonterms = 156 :: Int++happyReduce_1 = happyReduce 6# 0# happyReduction_1+happyReduction_1 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut154 happy_x_3 of { happy_var_3 -> + case happyOut9 happy_x_4 of { happy_var_4 -> + case happyOut5 happy_x_6 of { happy_var_6 -> + happyIn4+ (HsModule happy_var_1 happy_var_3 happy_var_4 (fst happy_var_6) (snd happy_var_6)+ ) `HappyStk` happyRest}}}}++happyReduce_2 = happySpecReduce_2 0# happyReduction_2+happyReduction_2 happy_x_2+ happy_x_1+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut5 happy_x_2 of { happy_var_2 -> + happyIn4+ (HsModule happy_var_1 main_mod (Just [HsEVar (UnQual main_name)])+ (fst happy_var_2) (snd happy_var_2)+ )}}++happyReduce_3 = happySpecReduce_3 1# happyReduction_3+happyReduction_3 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut6 happy_x_2 of { happy_var_2 -> + happyIn5+ (happy_var_2+ )}++happyReduce_4 = happySpecReduce_3 1# happyReduction_4+happyReduction_4 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut6 happy_x_2 of { happy_var_2 -> + happyIn5+ (happy_var_2+ )}++happyReduce_5 = happyReduce 4# 2# happyReduction_5+happyReduction_5 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut14 happy_x_2 of { happy_var_2 -> + case happyOut29 happy_x_4 of { happy_var_4 -> + happyIn6+ ((reverse happy_var_2, happy_var_4)+ ) `HappyStk` happyRest}}++happyReduce_6 = happySpecReduce_2 2# happyReduction_6+happyReduction_6 happy_x_2+ happy_x_1+ = case happyOut29 happy_x_2 of { happy_var_2 -> + happyIn6+ (([], happy_var_2)+ )}++happyReduce_7 = happySpecReduce_3 2# happyReduction_7+happyReduction_7 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut14 happy_x_2 of { happy_var_2 -> + happyIn6+ ((reverse happy_var_2, [])+ )}++happyReduce_8 = happySpecReduce_1 2# happyReduction_8+happyReduction_8 happy_x_1+ = happyIn6+ (([], [])+ )++happyReduce_9 = happySpecReduce_2 3# happyReduction_9+happyReduction_9 happy_x_2+ happy_x_1+ = happyIn7+ (()+ )++happyReduce_10 = happySpecReduce_1 4# happyReduction_10+happyReduction_10 happy_x_1+ = happyIn8+ (()+ )++happyReduce_11 = happySpecReduce_0 4# happyReduction_11+happyReduction_11 = happyIn8+ (()+ )++happyReduce_12 = happySpecReduce_1 5# happyReduction_12+happyReduction_12 happy_x_1+ = case happyOut10 happy_x_1 of { happy_var_1 -> + happyIn9+ (Just happy_var_1+ )}++happyReduce_13 = happySpecReduce_0 5# happyReduction_13+happyReduction_13 = happyIn9+ (Nothing+ )++happyReduce_14 = happyReduce 4# 6# happyReduction_14+happyReduction_14 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut12 happy_x_2 of { happy_var_2 -> + happyIn10+ (reverse happy_var_2+ ) `HappyStk` happyRest}++happyReduce_15 = happySpecReduce_3 6# happyReduction_15+happyReduction_15 happy_x_3+ happy_x_2+ happy_x_1+ = happyIn10+ ([]+ )++happyReduce_16 = happySpecReduce_1 7# happyReduction_16+happyReduction_16 happy_x_1+ = happyIn11+ (()+ )++happyReduce_17 = happySpecReduce_0 7# happyReduction_17+happyReduction_17 = happyIn11+ (()+ )++happyReduce_18 = happySpecReduce_3 8# happyReduction_18+happyReduction_18 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut12 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn12+ (happy_var_3 : happy_var_1+ )}}++happyReduce_19 = happySpecReduce_1 8# happyReduction_19+happyReduction_19 happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + happyIn12+ ([happy_var_1]+ )}++happyReduce_20 = happySpecReduce_1 9# happyReduction_20+happyReduction_20 happy_x_1+ = case happyOut127 happy_x_1 of { happy_var_1 -> + happyIn13+ (HsEVar happy_var_1+ )}++happyReduce_21 = happySpecReduce_1 9# happyReduction_21+happyReduction_21 happy_x_1+ = case happyOut157 happy_x_1 of { happy_var_1 -> + happyIn13+ (HsEAbs happy_var_1+ )}++happyReduce_22 = happyReduce 4# 9# happyReduction_22+happyReduction_22 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut157 happy_x_1 of { happy_var_1 -> + happyIn13+ (HsEThingAll happy_var_1+ ) `HappyStk` happyRest}++happyReduce_23 = happySpecReduce_3 9# happyReduction_23+happyReduction_23 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut157 happy_x_1 of { happy_var_1 -> + happyIn13+ (HsEThingWith happy_var_1 []+ )}++happyReduce_24 = happyReduce 4# 9# happyReduction_24+happyReduction_24 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut157 happy_x_1 of { happy_var_1 -> + case happyOut23 happy_x_3 of { happy_var_3 -> + happyIn13+ (HsEThingWith happy_var_1 (reverse happy_var_3)+ ) `HappyStk` happyRest}}++happyReduce_25 = happySpecReduce_2 9# happyReduction_25+happyReduction_25 happy_x_2+ happy_x_1+ = case happyOut154 happy_x_2 of { happy_var_2 -> + happyIn13+ (HsEModuleContents happy_var_2+ )}++happyReduce_26 = happySpecReduce_3 10# happyReduction_26+happyReduction_26 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut14 happy_x_1 of { happy_var_1 -> + case happyOut15 happy_x_3 of { happy_var_3 -> + happyIn14+ (happy_var_3 : happy_var_1+ )}}++happyReduce_27 = happySpecReduce_1 10# happyReduction_27+happyReduction_27 happy_x_1+ = case happyOut15 happy_x_1 of { happy_var_1 -> + happyIn14+ ([happy_var_1]+ )}++happyReduce_28 = happyReduce 6# 11# happyReduction_28+happyReduction_28 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut16 happy_x_3 of { happy_var_3 -> + case happyOut154 happy_x_4 of { happy_var_4 -> + case happyOut17 happy_x_5 of { happy_var_5 -> + case happyOut18 happy_x_6 of { happy_var_6 -> + happyIn15+ (HsImportDecl happy_var_1 happy_var_4 happy_var_3 happy_var_5 happy_var_6+ ) `HappyStk` happyRest}}}}}++happyReduce_29 = happySpecReduce_1 12# happyReduction_29+happyReduction_29 happy_x_1+ = happyIn16+ (True+ )++happyReduce_30 = happySpecReduce_0 12# happyReduction_30+happyReduction_30 = happyIn16+ (False+ )++happyReduce_31 = happySpecReduce_2 13# happyReduction_31+happyReduction_31 happy_x_2+ happy_x_1+ = case happyOut154 happy_x_2 of { happy_var_2 -> + happyIn17+ (Just happy_var_2+ )}++happyReduce_32 = happySpecReduce_0 13# happyReduction_32+happyReduction_32 = happyIn17+ (Nothing+ )++happyReduce_33 = happySpecReduce_1 14# happyReduction_33+happyReduction_33 happy_x_1+ = case happyOut19 happy_x_1 of { happy_var_1 -> + happyIn18+ (Just happy_var_1+ )}++happyReduce_34 = happySpecReduce_0 14# happyReduction_34+happyReduction_34 = happyIn18+ (Nothing+ )++happyReduce_35 = happyReduce 5# 15# happyReduction_35+happyReduction_35 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut20 happy_x_1 of { happy_var_1 -> + case happyOut21 happy_x_3 of { happy_var_3 -> + happyIn19+ ((happy_var_1, reverse happy_var_3)+ ) `HappyStk` happyRest}}++happyReduce_36 = happyReduce 4# 15# happyReduction_36+happyReduction_36 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut20 happy_x_1 of { happy_var_1 -> + happyIn19+ ((happy_var_1, [])+ ) `HappyStk` happyRest}++happyReduce_37 = happySpecReduce_1 16# happyReduction_37+happyReduction_37 happy_x_1+ = happyIn20+ (True+ )++happyReduce_38 = happySpecReduce_0 16# happyReduction_38+happyReduction_38 = happyIn20+ (False+ )++happyReduce_39 = happySpecReduce_3 17# happyReduction_39+happyReduction_39 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut21 happy_x_1 of { happy_var_1 -> + case happyOut22 happy_x_3 of { happy_var_3 -> + happyIn21+ (happy_var_3 : happy_var_1+ )}}++happyReduce_40 = happySpecReduce_1 17# happyReduction_40+happyReduction_40 happy_x_1+ = case happyOut22 happy_x_1 of { happy_var_1 -> + happyIn21+ ([happy_var_1]+ )}++happyReduce_41 = happySpecReduce_1 18# happyReduction_41+happyReduction_41 happy_x_1+ = case happyOut126 happy_x_1 of { happy_var_1 -> + happyIn22+ (HsIVar happy_var_1+ )}++happyReduce_42 = happySpecReduce_1 18# happyReduction_42+happyReduction_42 happy_x_1+ = case happyOut155 happy_x_1 of { happy_var_1 -> + happyIn22+ (HsIAbs happy_var_1+ )}++happyReduce_43 = happyReduce 4# 18# happyReduction_43+happyReduction_43 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut155 happy_x_1 of { happy_var_1 -> + happyIn22+ (HsIThingAll happy_var_1+ ) `HappyStk` happyRest}++happyReduce_44 = happySpecReduce_3 18# happyReduction_44+happyReduction_44 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut155 happy_x_1 of { happy_var_1 -> + happyIn22+ (HsIThingWith happy_var_1 []+ )}++happyReduce_45 = happyReduce 4# 18# happyReduction_45+happyReduction_45 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut155 happy_x_1 of { happy_var_1 -> + case happyOut23 happy_x_3 of { happy_var_3 -> + happyIn22+ (HsIThingWith happy_var_1 (reverse happy_var_3)+ ) `HappyStk` happyRest}}++happyReduce_46 = happySpecReduce_3 19# happyReduction_46+happyReduction_46 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut23 happy_x_1 of { happy_var_1 -> + case happyOut24 happy_x_3 of { happy_var_3 -> + happyIn23+ (happy_var_3 : happy_var_1+ )}}++happyReduce_47 = happySpecReduce_1 19# happyReduction_47+happyReduction_47 happy_x_1+ = case happyOut24 happy_x_1 of { happy_var_1 -> + happyIn23+ ([happy_var_1]+ )}++happyReduce_48 = happySpecReduce_1 20# happyReduction_48+happyReduction_48 happy_x_1+ = case happyOut126 happy_x_1 of { happy_var_1 -> + happyIn24+ (HsVarName happy_var_1+ )}++happyReduce_49 = happySpecReduce_1 20# happyReduction_49+happyReduction_49 happy_x_1+ = case happyOut128 happy_x_1 of { happy_var_1 -> + happyIn24+ (HsConName happy_var_1+ )}++happyReduce_50 = happyReduce 4# 21# happyReduction_50+happyReduction_50 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut27 happy_x_2 of { happy_var_2 -> + case happyOut26 happy_x_3 of { happy_var_3 -> + case happyOut28 happy_x_4 of { happy_var_4 -> + happyIn25+ (HsInfixDecl happy_var_1 happy_var_2 happy_var_3 (reverse happy_var_4)+ ) `HappyStk` happyRest}}}}++happyReduce_51 = happySpecReduce_0 22# happyReduction_51+happyReduction_51 = happyIn26+ (9+ )++happyReduce_52 = happyMonadReduce 1# 22# happyReduction_52+happyReduction_52 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOutTok happy_x_1 of { (IntTok happy_var_1) -> + ( checkPrec happy_var_1)}+ ) (\r -> happyReturn (happyIn26 r))++happyReduce_53 = happySpecReduce_1 23# happyReduction_53+happyReduction_53 happy_x_1+ = happyIn27+ (HsAssocNone+ )++happyReduce_54 = happySpecReduce_1 23# happyReduction_54+happyReduction_54 happy_x_1+ = happyIn27+ (HsAssocLeft+ )++happyReduce_55 = happySpecReduce_1 23# happyReduction_55+happyReduction_55 happy_x_1+ = happyIn27+ (HsAssocRight+ )++happyReduce_56 = happySpecReduce_3 24# happyReduction_56+happyReduction_56 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut28 happy_x_1 of { happy_var_1 -> + case happyOut135 happy_x_3 of { happy_var_3 -> + happyIn28+ (happy_var_3 : happy_var_1+ )}}++happyReduce_57 = happySpecReduce_1 24# happyReduction_57+happyReduction_57 happy_x_1+ = case happyOut135 happy_x_1 of { happy_var_1 -> + happyIn28+ ([happy_var_1]+ )}++happyReduce_58 = happyMonadReduce 2# 25# happyReduction_58+happyReduction_58 (happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut30 happy_x_1 of { happy_var_1 -> + ( checkRevDecls happy_var_1)}+ ) (\r -> happyReturn (happyIn29 r))++happyReduce_59 = happySpecReduce_3 26# happyReduction_59+happyReduction_59 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut30 happy_x_1 of { happy_var_1 -> + case happyOut31 happy_x_3 of { happy_var_3 -> + happyIn30+ (happy_var_3 : happy_var_1+ )}}++happyReduce_60 = happySpecReduce_1 26# happyReduction_60+happyReduction_60 happy_x_1+ = case happyOut31 happy_x_1 of { happy_var_1 -> + happyIn30+ ([happy_var_1]+ )}++happyReduce_61 = happyReduce 5# 27# happyReduction_61+happyReduction_61 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut50 happy_x_3 of { happy_var_3 -> + case happyOut43 happy_x_5 of { happy_var_5 -> + happyIn31+ (HsTypeDecl happy_var_1 (fst happy_var_3) (snd happy_var_3) happy_var_5+ ) `HappyStk` happyRest}}}++happyReduce_62 = happyMonadReduce 6# 27# happyReduction_62+happyReduction_62 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut47 happy_x_3 of { happy_var_3 -> + case happyOut52 happy_x_5 of { happy_var_5 -> + case happyOut61 happy_x_6 of { happy_var_6 -> + ( do { (cs,c,t) <- checkDataHeader happy_var_3;+ return (HsDataDecl happy_var_1 cs c t (reverse happy_var_5) happy_var_6) })}}}}+ ) (\r -> happyReturn (happyIn31 r))++happyReduce_63 = happyMonadReduce 6# 27# happyReduction_63+happyReduction_63 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut47 happy_x_3 of { happy_var_3 -> + case happyOut53 happy_x_5 of { happy_var_5 -> + case happyOut61 happy_x_6 of { happy_var_6 -> + ( do { (cs,c,t) <- checkDataHeader happy_var_3;+ return (HsNewTypeDecl happy_var_1 cs c t happy_var_5 happy_var_6) })}}}}+ ) (\r -> happyReturn (happyIn31 r))++happyReduce_64 = happyMonadReduce 4# 27# happyReduction_64+happyReduction_64 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut47 happy_x_3 of { happy_var_3 -> + case happyOut63 happy_x_4 of { happy_var_4 -> + ( do { (cs,c,vs) <- checkClassHeader happy_var_3;+ return (HsClassDecl happy_var_1 cs c vs happy_var_4) })}}}+ ) (\r -> happyReturn (happyIn31 r))++happyReduce_65 = happyMonadReduce 4# 27# happyReduction_65+happyReduction_65 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut47 happy_x_3 of { happy_var_3 -> + case happyOut64 happy_x_4 of { happy_var_4 -> + ( do { (cs,c,ts) <- checkInstHeader happy_var_3;+ return (HsInstDecl happy_var_1 cs c ts happy_var_4) })}}}+ ) (\r -> happyReturn (happyIn31 r))++happyReduce_66 = happyReduce 5# 27# happyReduction_66+happyReduction_66 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut32 happy_x_4 of { happy_var_4 -> + happyIn31+ (HsDefaultDecl happy_var_1 happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_67 = happySpecReduce_1 27# happyReduction_67+happyReduction_67 happy_x_1+ = case happyOut39 happy_x_1 of { happy_var_1 -> + happyIn31+ (happy_var_1+ )}++happyReduce_68 = happySpecReduce_1 27# happyReduction_68+happyReduction_68 happy_x_1+ = case happyOut35 happy_x_1 of { happy_var_1 -> + happyIn31+ (happy_var_1+ )}++happyReduce_69 = happySpecReduce_1 28# happyReduction_69+happyReduction_69 happy_x_1+ = case happyOut49 happy_x_1 of { happy_var_1 -> + happyIn32+ (reverse happy_var_1+ )}++happyReduce_70 = happySpecReduce_1 28# happyReduction_70+happyReduction_70 happy_x_1+ = case happyOut43 happy_x_1 of { happy_var_1 -> + happyIn32+ ([happy_var_1]+ )}++happyReduce_71 = happySpecReduce_0 28# happyReduction_71+happyReduction_71 = happyIn32+ ([]+ )++happyReduce_72 = happyMonadReduce 3# 29# happyReduction_72+happyReduction_72 (happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut34 happy_x_2 of { happy_var_2 -> + ( checkRevDecls happy_var_2)}+ ) (\r -> happyReturn (happyIn33 r))++happyReduce_73 = happySpecReduce_1 29# happyReduction_73+happyReduction_73 happy_x_1+ = happyIn33+ ([]+ )++happyReduce_74 = happySpecReduce_3 30# happyReduction_74+happyReduction_74 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut34 happy_x_1 of { happy_var_1 -> + case happyOut35 happy_x_3 of { happy_var_3 -> + happyIn34+ (happy_var_3 : happy_var_1+ )}}++happyReduce_75 = happySpecReduce_1 30# happyReduction_75+happyReduction_75 happy_x_1+ = case happyOut35 happy_x_1 of { happy_var_1 -> + happyIn34+ ([happy_var_1]+ )}++happyReduce_76 = happySpecReduce_1 31# happyReduction_76+happyReduction_76 happy_x_1+ = case happyOut37 happy_x_1 of { happy_var_1 -> + happyIn35+ (happy_var_1+ )}++happyReduce_77 = happySpecReduce_1 31# happyReduction_77+happyReduction_77 happy_x_1+ = case happyOut25 happy_x_1 of { happy_var_1 -> + happyIn35+ (happy_var_1+ )}++happyReduce_78 = happySpecReduce_1 31# happyReduction_78+happyReduction_78 happy_x_1+ = case happyOut67 happy_x_1 of { happy_var_1 -> + happyIn35+ (happy_var_1+ )}++happyReduce_79 = happySpecReduce_3 32# happyReduction_79+happyReduction_79 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut33 happy_x_2 of { happy_var_2 -> + happyIn36+ (happy_var_2+ )}++happyReduce_80 = happySpecReduce_3 32# happyReduction_80+happyReduction_80 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut33 happy_x_2 of { happy_var_2 -> + happyIn36+ (happy_var_2+ )}++happyReduce_81 = happyReduce 4# 33# happyReduction_81+happyReduction_81 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut38 happy_x_2 of { happy_var_2 -> + case happyOut47 happy_x_4 of { happy_var_4 -> + happyIn37+ (HsTypeSig happy_var_1 (reverse happy_var_2) happy_var_4+ ) `HappyStk` happyRest}}}++happyReduce_82 = happySpecReduce_3 34# happyReduction_82+happyReduction_82 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut38 happy_x_1 of { happy_var_1 -> + case happyOut126 happy_x_3 of { happy_var_3 -> + happyIn38+ (happy_var_3 : happy_var_1+ )}}++happyReduce_83 = happyMonadReduce 1# 34# happyReduction_83+happyReduction_83 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut127 happy_x_1 of { happy_var_1 -> + ( do { n <- checkUnQual happy_var_1;+ return [n] })}+ ) (\r -> happyReturn (happyIn38 r))++happyReduce_84 = happyReduce 9# 35# happyReduction_84+happyReduction_84 (happy_x_9 `HappyStk`+ happy_x_8 `HappyStk`+ happy_x_7 `HappyStk`+ happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_4 of { (VarId happy_var_4) -> + case happyOut40 happy_x_5 of { happy_var_5 -> + case happyOut41 happy_x_6 of { happy_var_6 -> + case happyOut42 happy_x_7 of { happy_var_7 -> + case happyOut43 happy_x_9 of { happy_var_9 -> + happyIn39+ (HsForeignImport happy_var_1 happy_var_4 happy_var_5 happy_var_6 happy_var_7 happy_var_9+ ) `HappyStk` happyRest}}}}}}++happyReduce_85 = happyReduce 8# 35# happyReduction_85+happyReduction_85 (happy_x_8 `HappyStk`+ happy_x_7 `HappyStk`+ happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_4 of { (VarId happy_var_4) -> + case happyOut41 happy_x_5 of { happy_var_5 -> + case happyOut42 happy_x_6 of { happy_var_6 -> + case happyOut43 happy_x_8 of { happy_var_8 -> + happyIn39+ (HsForeignExport happy_var_1 happy_var_4 happy_var_5 happy_var_6 happy_var_8+ ) `HappyStk` happyRest}}}}}++happyReduce_86 = happySpecReduce_1 36# happyReduction_86+happyReduction_86 happy_x_1+ = happyIn40+ (HsSafe+ )++happyReduce_87 = happySpecReduce_1 36# happyReduction_87+happyReduction_87 happy_x_1+ = happyIn40+ (HsUnsafe+ )++happyReduce_88 = happySpecReduce_0 36# happyReduction_88+happyReduction_88 = happyIn40+ (HsSafe+ )++happyReduce_89 = happySpecReduce_1 37# happyReduction_89+happyReduction_89 happy_x_1+ = case happyOutTok happy_x_1 of { (StringTok happy_var_1) -> + happyIn41+ (happy_var_1+ )}++happyReduce_90 = happySpecReduce_0 37# happyReduction_90+happyReduction_90 = happyIn41+ (""+ )++happyReduce_91 = happySpecReduce_1 38# happyReduction_91+happyReduction_91 happy_x_1+ = case happyOutTok happy_x_1 of { (VarId happy_var_1) -> + happyIn42+ (HsIdent happy_var_1+ )}++happyReduce_92 = happySpecReduce_3 38# happyReduction_92+happyReduction_92 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut147 happy_x_2 of { happy_var_2 -> + happyIn42+ (happy_var_2+ )}++happyReduce_93 = happySpecReduce_3 39# happyReduction_93+happyReduction_93 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut43 happy_x_3 of { happy_var_3 -> + happyIn43+ (HsTyFun happy_var_1 happy_var_3+ )}}++happyReduce_94 = happySpecReduce_1 39# happyReduction_94+happyReduction_94 happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + happyIn43+ (happy_var_1+ )}++happyReduce_95 = happySpecReduce_2 40# happyReduction_95+happyReduction_95 happy_x_2+ happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut45 happy_x_2 of { happy_var_2 -> + happyIn44+ (HsTyApp happy_var_1 happy_var_2+ )}}++happyReduce_96 = happySpecReduce_1 40# happyReduction_96+happyReduction_96 happy_x_1+ = case happyOut45 happy_x_1 of { happy_var_1 -> + happyIn44+ (happy_var_1+ )}++happyReduce_97 = happySpecReduce_1 41# happyReduction_97+happyReduction_97 happy_x_1+ = case happyOut46 happy_x_1 of { happy_var_1 -> + happyIn45+ (HsTyCon happy_var_1+ )}++happyReduce_98 = happySpecReduce_1 41# happyReduction_98+happyReduction_98 happy_x_1+ = case happyOut159 happy_x_1 of { happy_var_1 -> + happyIn45+ (HsTyVar happy_var_1+ )}++happyReduce_99 = happySpecReduce_3 41# happyReduction_99+happyReduction_99 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut49 happy_x_2 of { happy_var_2 -> + happyIn45+ (HsTyTuple (reverse happy_var_2)+ )}++happyReduce_100 = happySpecReduce_3 41# happyReduction_100+happyReduction_100 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut43 happy_x_2 of { happy_var_2 -> + happyIn45+ (HsTyApp list_tycon happy_var_2+ )}++happyReduce_101 = happySpecReduce_3 41# happyReduction_101+happyReduction_101 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut43 happy_x_2 of { happy_var_2 -> + happyIn45+ (happy_var_2+ )}++happyReduce_102 = happySpecReduce_1 42# happyReduction_102+happyReduction_102 happy_x_1+ = case happyOut141 happy_x_1 of { happy_var_1 -> + happyIn46+ (happy_var_1+ )}++happyReduce_103 = happySpecReduce_2 42# happyReduction_103+happyReduction_103 happy_x_2+ happy_x_1+ = happyIn46+ (unit_tycon_name+ )++happyReduce_104 = happySpecReduce_3 42# happyReduction_104+happyReduction_104 happy_x_3+ happy_x_2+ happy_x_1+ = happyIn46+ (fun_tycon_name+ )++happyReduce_105 = happySpecReduce_2 42# happyReduction_105+happyReduction_105 happy_x_2+ happy_x_1+ = happyIn46+ (list_tycon_name+ )++happyReduce_106 = happySpecReduce_3 42# happyReduction_106+happyReduction_106 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut84 happy_x_2 of { happy_var_2 -> + happyIn46+ (tuple_tycon_name happy_var_2+ )}++happyReduce_107 = happySpecReduce_3 43# happyReduction_107+happyReduction_107 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut48 happy_x_1 of { happy_var_1 -> + case happyOut43 happy_x_3 of { happy_var_3 -> + happyIn47+ (HsQualType happy_var_1 happy_var_3+ )}}++happyReduce_108 = happySpecReduce_1 43# happyReduction_108+happyReduction_108 happy_x_1+ = case happyOut43 happy_x_1 of { happy_var_1 -> + happyIn47+ (HsQualType [] happy_var_1+ )}++happyReduce_109 = happyMonadReduce 1# 44# happyReduction_109+happyReduction_109 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut44 happy_x_1 of { happy_var_1 -> + ( checkContext happy_var_1)}+ ) (\r -> happyReturn (happyIn48 r))++happyReduce_110 = happySpecReduce_3 45# happyReduction_110+happyReduction_110 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut49 happy_x_1 of { happy_var_1 -> + case happyOut43 happy_x_3 of { happy_var_3 -> + happyIn49+ (happy_var_3 : happy_var_1+ )}}++happyReduce_111 = happySpecReduce_3 45# happyReduction_111+happyReduction_111 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut43 happy_x_1 of { happy_var_1 -> + case happyOut43 happy_x_3 of { happy_var_3 -> + happyIn49+ ([happy_var_3, happy_var_1]+ )}}++happyReduce_112 = happySpecReduce_2 46# happyReduction_112+happyReduction_112 happy_x_2+ happy_x_1+ = case happyOut156 happy_x_1 of { happy_var_1 -> + case happyOut51 happy_x_2 of { happy_var_2 -> + happyIn50+ ((happy_var_1,reverse happy_var_2)+ )}}++happyReduce_113 = happySpecReduce_2 47# happyReduction_113+happyReduction_113 happy_x_2+ happy_x_1+ = case happyOut51 happy_x_1 of { happy_var_1 -> + case happyOut159 happy_x_2 of { happy_var_2 -> + happyIn51+ (happy_var_2 : happy_var_1+ )}}++happyReduce_114 = happySpecReduce_0 47# happyReduction_114+happyReduction_114 = happyIn51+ ([]+ )++happyReduce_115 = happySpecReduce_3 48# happyReduction_115+happyReduction_115 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut52 happy_x_1 of { happy_var_1 -> + case happyOut53 happy_x_3 of { happy_var_3 -> + happyIn52+ (happy_var_3 : happy_var_1+ )}}++happyReduce_116 = happySpecReduce_1 48# happyReduction_116+happyReduction_116 happy_x_1+ = case happyOut53 happy_x_1 of { happy_var_1 -> + happyIn52+ ([happy_var_1]+ )}++happyReduce_117 = happySpecReduce_2 49# happyReduction_117+happyReduction_117 happy_x_2+ happy_x_1+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut54 happy_x_2 of { happy_var_2 -> + happyIn53+ (HsConDecl happy_var_1 (fst happy_var_2) (snd happy_var_2)+ )}}++happyReduce_118 = happyReduce 4# 49# happyReduction_118+happyReduction_118 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut57 happy_x_2 of { happy_var_2 -> + case happyOut133 happy_x_3 of { happy_var_3 -> + case happyOut57 happy_x_4 of { happy_var_4 -> + happyIn53+ (HsConDecl happy_var_1 happy_var_3 [happy_var_2,happy_var_4]+ ) `HappyStk` happyRest}}}}++happyReduce_119 = happyReduce 4# 49# happyReduction_119+happyReduction_119 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut128 happy_x_2 of { happy_var_2 -> + happyIn53+ (HsRecDecl happy_var_1 happy_var_2 []+ ) `HappyStk` happyRest}}++happyReduce_120 = happyReduce 5# 49# happyReduction_120+happyReduction_120 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut128 happy_x_2 of { happy_var_2 -> + case happyOut58 happy_x_4 of { happy_var_4 -> + happyIn53+ (HsRecDecl happy_var_1 happy_var_2 (reverse happy_var_4)+ ) `HappyStk` happyRest}}}++happyReduce_121 = happyMonadReduce 1# 50# happyReduction_121+happyReduction_121 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut44 happy_x_1 of { happy_var_1 -> + ( do { (c,ts) <- splitTyConApp happy_var_1;+ return (c,map HsUnBangedTy ts) })}+ ) (\r -> happyReturn (happyIn54 r))++happyReduce_122 = happySpecReduce_1 50# happyReduction_122+happyReduction_122 happy_x_1+ = case happyOut55 happy_x_1 of { happy_var_1 -> + happyIn54+ (happy_var_1+ )}++happyReduce_123 = happyMonadReduce 3# 51# happyReduction_123+happyReduction_123 (happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOut45 happy_x_3 of { happy_var_3 -> + ( do { (c,ts) <- splitTyConApp happy_var_1;+ return (c,map HsUnBangedTy ts+++ [HsBangedTy happy_var_3]) })}}+ ) (\r -> happyReturn (happyIn55 r))++happyReduce_124 = happySpecReduce_2 51# happyReduction_124+happyReduction_124 happy_x_2+ happy_x_1+ = case happyOut55 happy_x_1 of { happy_var_1 -> + case happyOut56 happy_x_2 of { happy_var_2 -> + happyIn55+ ((fst happy_var_1, snd happy_var_1 ++ [happy_var_2] )+ )}}++happyReduce_125 = happySpecReduce_1 52# happyReduction_125+happyReduction_125 happy_x_1+ = case happyOut45 happy_x_1 of { happy_var_1 -> + happyIn56+ (HsUnBangedTy happy_var_1+ )}++happyReduce_126 = happySpecReduce_2 52# happyReduction_126+happyReduction_126 happy_x_2+ happy_x_1+ = case happyOut45 happy_x_2 of { happy_var_2 -> + happyIn56+ (HsBangedTy happy_var_2+ )}++happyReduce_127 = happySpecReduce_1 53# happyReduction_127+happyReduction_127 happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + happyIn57+ (HsUnBangedTy happy_var_1+ )}++happyReduce_128 = happySpecReduce_2 53# happyReduction_128+happyReduction_128 happy_x_2+ happy_x_1+ = case happyOut45 happy_x_2 of { happy_var_2 -> + happyIn57+ (HsBangedTy happy_var_2+ )}++happyReduce_129 = happySpecReduce_3 54# happyReduction_129+happyReduction_129 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut58 happy_x_1 of { happy_var_1 -> + case happyOut59 happy_x_3 of { happy_var_3 -> + happyIn58+ (happy_var_3 : happy_var_1+ )}}++happyReduce_130 = happySpecReduce_1 54# happyReduction_130+happyReduction_130 happy_x_1+ = case happyOut59 happy_x_1 of { happy_var_1 -> + happyIn58+ ([happy_var_1]+ )}++happyReduce_131 = happySpecReduce_3 55# happyReduction_131+happyReduction_131 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut38 happy_x_1 of { happy_var_1 -> + case happyOut60 happy_x_3 of { happy_var_3 -> + happyIn59+ ((reverse happy_var_1, happy_var_3)+ )}}++happyReduce_132 = happySpecReduce_1 56# happyReduction_132+happyReduction_132 happy_x_1+ = case happyOut43 happy_x_1 of { happy_var_1 -> + happyIn60+ (HsUnBangedTy happy_var_1+ )}++happyReduce_133 = happySpecReduce_2 56# happyReduction_133+happyReduction_133 happy_x_2+ happy_x_1+ = case happyOut45 happy_x_2 of { happy_var_2 -> + happyIn60+ (HsBangedTy happy_var_2+ )}++happyReduce_134 = happySpecReduce_0 57# happyReduction_134+happyReduction_134 = happyIn61+ ([]+ )++happyReduce_135 = happySpecReduce_2 57# happyReduction_135+happyReduction_135 happy_x_2+ happy_x_1+ = case happyOut158 happy_x_2 of { happy_var_2 -> + happyIn61+ ([happy_var_2]+ )}++happyReduce_136 = happySpecReduce_3 57# happyReduction_136+happyReduction_136 happy_x_3+ happy_x_2+ happy_x_1+ = happyIn61+ ([]+ )++happyReduce_137 = happyReduce 4# 57# happyReduction_137+happyReduction_137 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut62 happy_x_3 of { happy_var_3 -> + happyIn61+ (reverse happy_var_3+ ) `HappyStk` happyRest}++happyReduce_138 = happySpecReduce_3 58# happyReduction_138+happyReduction_138 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut62 happy_x_1 of { happy_var_1 -> + case happyOut158 happy_x_3 of { happy_var_3 -> + happyIn62+ (happy_var_3 : happy_var_1+ )}}++happyReduce_139 = happySpecReduce_1 58# happyReduction_139+happyReduction_139 happy_x_1+ = case happyOut158 happy_x_1 of { happy_var_1 -> + happyIn62+ ([happy_var_1]+ )}++happyReduce_140 = happyMonadReduce 2# 59# happyReduction_140+happyReduction_140 (happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut36 happy_x_2 of { happy_var_2 -> + ( checkClassBody happy_var_2)}+ ) (\r -> happyReturn (happyIn63 r))++happyReduce_141 = happySpecReduce_0 59# happyReduction_141+happyReduction_141 = happyIn63+ ([]+ )++happyReduce_142 = happyMonadReduce 4# 60# happyReduction_142+happyReduction_142 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut65 happy_x_3 of { happy_var_3 -> + ( checkClassBody happy_var_3)}+ ) (\r -> happyReturn (happyIn64 r))++happyReduce_143 = happyMonadReduce 4# 60# happyReduction_143+happyReduction_143 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut65 happy_x_3 of { happy_var_3 -> + ( checkClassBody happy_var_3)}+ ) (\r -> happyReturn (happyIn64 r))++happyReduce_144 = happySpecReduce_0 60# happyReduction_144+happyReduction_144 = happyIn64+ ([]+ )++happyReduce_145 = happyMonadReduce 3# 61# happyReduction_145+happyReduction_145 (happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut66 happy_x_2 of { happy_var_2 -> + ( checkRevDecls happy_var_2)}+ ) (\r -> happyReturn (happyIn65 r))++happyReduce_146 = happySpecReduce_1 61# happyReduction_146+happyReduction_146 happy_x_1+ = happyIn65+ ([]+ )++happyReduce_147 = happySpecReduce_3 62# happyReduction_147+happyReduction_147 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut66 happy_x_1 of { happy_var_1 -> + case happyOut67 happy_x_3 of { happy_var_3 -> + happyIn66+ (happy_var_3 : happy_var_1+ )}}++happyReduce_148 = happySpecReduce_1 62# happyReduction_148+happyReduction_148 happy_x_1+ = case happyOut67 happy_x_1 of { happy_var_1 -> + happyIn66+ ([happy_var_1]+ )}++happyReduce_149 = happyMonadReduce 4# 63# happyReduction_149+happyReduction_149 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut75 happy_x_2 of { happy_var_2 -> + case happyOut69 happy_x_3 of { happy_var_3 -> + case happyOut68 happy_x_4 of { happy_var_4 -> + ( checkValDef happy_var_1 happy_var_2 happy_var_3 happy_var_4)}}}}+ ) (\r -> happyReturn (happyIn67 r))++happyReduce_150 = happySpecReduce_2 64# happyReduction_150+happyReduction_150 happy_x_2+ happy_x_1+ = case happyOut36 happy_x_2 of { happy_var_2 -> + happyIn68+ (happy_var_2+ )}++happyReduce_151 = happySpecReduce_0 64# happyReduction_151+happyReduction_151 = happyIn68+ ([]+ )++happyReduce_152 = happyMonadReduce 2# 65# happyReduction_152+happyReduction_152 (happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut72 happy_x_2 of { happy_var_2 -> + ( do { e <- checkExpr happy_var_2;+ return (HsUnGuardedRhs e) })}+ ) (\r -> happyReturn (happyIn69 r))++happyReduce_153 = happySpecReduce_1 65# happyReduction_153+happyReduction_153 happy_x_1+ = case happyOut70 happy_x_1 of { happy_var_1 -> + happyIn69+ (HsGuardedRhss (reverse happy_var_1)+ )}++happyReduce_154 = happySpecReduce_2 66# happyReduction_154+happyReduction_154 happy_x_2+ happy_x_1+ = case happyOut70 happy_x_1 of { happy_var_1 -> + case happyOut71 happy_x_2 of { happy_var_2 -> + happyIn70+ (happy_var_2 : happy_var_1+ )}}++happyReduce_155 = happySpecReduce_1 66# happyReduction_155+happyReduction_155 happy_x_1+ = case happyOut71 happy_x_1 of { happy_var_1 -> + happyIn70+ ([happy_var_1]+ )}++happyReduce_156 = happyMonadReduce 5# 67# happyReduction_156+happyReduction_156 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut73 happy_x_3 of { happy_var_3 -> + case happyOut72 happy_x_5 of { happy_var_5 -> + ( do { g <- checkExpr happy_var_3;+ e <- checkExpr happy_var_5;+ return (HsGuardedRhs happy_var_1 g e) })}}}+ ) (\r -> happyReturn (happyIn71 r))++happyReduce_157 = happyReduce 4# 68# happyReduction_157+happyReduction_157 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut75 happy_x_1 of { happy_var_1 -> + case happyOut151 happy_x_3 of { happy_var_3 -> + case happyOut47 happy_x_4 of { happy_var_4 -> + happyIn72+ (HsExpTypeSig happy_var_3 happy_var_1 happy_var_4+ ) `HappyStk` happyRest}}}++happyReduce_158 = happySpecReduce_1 68# happyReduction_158+happyReduction_158 happy_x_1+ = case happyOut73 happy_x_1 of { happy_var_1 -> + happyIn72+ (happy_var_1+ )}++happyReduce_159 = happySpecReduce_1 69# happyReduction_159+happyReduction_159 happy_x_1+ = case happyOut74 happy_x_1 of { happy_var_1 -> + happyIn73+ (happy_var_1+ )}++happyReduce_160 = happySpecReduce_1 69# happyReduction_160+happyReduction_160 happy_x_1+ = case happyOut75 happy_x_1 of { happy_var_1 -> + happyIn73+ (happy_var_1+ )}++happyReduce_161 = happySpecReduce_3 70# happyReduction_161+happyReduction_161 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut75 happy_x_1 of { happy_var_1 -> + case happyOut136 happy_x_2 of { happy_var_2 -> + case happyOut76 happy_x_3 of { happy_var_3 -> + happyIn74+ (HsInfixApp happy_var_1 happy_var_2 happy_var_3+ )}}}++happyReduce_162 = happySpecReduce_1 70# happyReduction_162+happyReduction_162 happy_x_1+ = case happyOut76 happy_x_1 of { happy_var_1 -> + happyIn74+ (happy_var_1+ )}++happyReduce_163 = happySpecReduce_3 71# happyReduction_163+happyReduction_163 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut75 happy_x_1 of { happy_var_1 -> + case happyOut136 happy_x_2 of { happy_var_2 -> + case happyOut77 happy_x_3 of { happy_var_3 -> + happyIn75+ (HsInfixApp happy_var_1 happy_var_2 happy_var_3+ )}}}++happyReduce_164 = happySpecReduce_1 71# happyReduction_164+happyReduction_164 happy_x_1+ = case happyOut77 happy_x_1 of { happy_var_1 -> + happyIn75+ (happy_var_1+ )}++happyReduce_165 = happyReduce 5# 72# happyReduction_165+happyReduction_165 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_2 of { happy_var_2 -> + case happyOut79 happy_x_3 of { happy_var_3 -> + case happyOut72 happy_x_5 of { happy_var_5 -> + happyIn76+ (HsLambda happy_var_2 (reverse happy_var_3) happy_var_5+ ) `HappyStk` happyRest}}}++happyReduce_166 = happyReduce 4# 72# happyReduction_166+happyReduction_166 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut36 happy_x_2 of { happy_var_2 -> + case happyOut72 happy_x_4 of { happy_var_4 -> + happyIn76+ (HsLet happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_167 = happyReduce 6# 72# happyReduction_167+happyReduction_167 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut72 happy_x_2 of { happy_var_2 -> + case happyOut72 happy_x_4 of { happy_var_4 -> + case happyOut72 happy_x_6 of { happy_var_6 -> + happyIn76+ (HsIf happy_var_2 happy_var_4 happy_var_6+ ) `HappyStk` happyRest}}}++happyReduce_168 = happyReduce 4# 72# happyReduction_168+happyReduction_168 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut80 happy_x_2 of { happy_var_2 -> + case happyOut102 happy_x_4 of { happy_var_4 -> + happyIn76+ (ArrSyn.translate happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_169 = happyReduce 4# 73# happyReduction_169+happyReduction_169 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut72 happy_x_2 of { happy_var_2 -> + case happyOut90 happy_x_4 of { happy_var_4 -> + happyIn77+ (HsCase happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_170 = happySpecReduce_2 73# happyReduction_170+happyReduction_170 happy_x_2+ happy_x_1+ = case happyOut78 happy_x_2 of { happy_var_2 -> + happyIn77+ (HsNegApp happy_var_2+ )}++happyReduce_171 = happySpecReduce_2 73# happyReduction_171+happyReduction_171 happy_x_2+ happy_x_1+ = case happyOut98 happy_x_2 of { happy_var_2 -> + happyIn77+ (HsDo happy_var_2+ )}++happyReduce_172 = happySpecReduce_1 73# happyReduction_172+happyReduction_172 happy_x_1+ = case happyOut78 happy_x_1 of { happy_var_1 -> + happyIn77+ (happy_var_1+ )}++happyReduce_173 = happySpecReduce_2 74# happyReduction_173+happyReduction_173 happy_x_2+ happy_x_1+ = case happyOut78 happy_x_1 of { happy_var_1 -> + case happyOut81 happy_x_2 of { happy_var_2 -> + happyIn78+ (HsApp happy_var_1 happy_var_2+ )}}++happyReduce_174 = happySpecReduce_1 74# happyReduction_174+happyReduction_174 happy_x_1+ = case happyOut81 happy_x_1 of { happy_var_1 -> + happyIn78+ (happy_var_1+ )}++happyReduce_175 = happySpecReduce_2 75# happyReduction_175+happyReduction_175 happy_x_2+ happy_x_1+ = case happyOut79 happy_x_1 of { happy_var_1 -> + case happyOut80 happy_x_2 of { happy_var_2 -> + happyIn79+ (happy_var_2 : happy_var_1+ )}}++happyReduce_176 = happySpecReduce_1 75# happyReduction_176+happyReduction_176 happy_x_1+ = case happyOut80 happy_x_1 of { happy_var_1 -> + happyIn79+ ([happy_var_1]+ )}++happyReduce_177 = happyMonadReduce 1# 76# happyReduction_177+happyReduction_177 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut81 happy_x_1 of { happy_var_1 -> + ( checkPattern happy_var_1)}+ ) (\r -> happyReturn (happyIn80 r))++happyReduce_178 = happyMonadReduce 3# 77# happyReduction_178+happyReduction_178 (happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut127 happy_x_1 of { happy_var_1 -> + case happyOut81 happy_x_3 of { happy_var_3 -> + ( do { n <- checkUnQual happy_var_1;+ return (HsAsPat n happy_var_3) })}}+ ) (\r -> happyReturn (happyIn81 r))++happyReduce_179 = happySpecReduce_2 77# happyReduction_179+happyReduction_179 happy_x_2+ happy_x_1+ = case happyOut81 happy_x_2 of { happy_var_2 -> + happyIn81+ (HsIrrPat happy_var_2+ )}++happyReduce_180 = happySpecReduce_1 77# happyReduction_180+happyReduction_180 happy_x_1+ = case happyOut82 happy_x_1 of { happy_var_1 -> + happyIn81+ (happy_var_1+ )}++happyReduce_181 = happyMonadReduce 3# 78# happyReduction_181+happyReduction_181 (happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut82 happy_x_1 of { happy_var_1 -> + ( mkRecConstrOrUpdate happy_var_1 [])}+ ) (\r -> happyReturn (happyIn82 r))++happyReduce_182 = happyMonadReduce 4# 78# happyReduction_182+happyReduction_182 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut82 happy_x_1 of { happy_var_1 -> + case happyOut100 happy_x_3 of { happy_var_3 -> + ( mkRecConstrOrUpdate happy_var_1 (reverse happy_var_3))}}+ ) (\r -> happyReturn (happyIn82 r))++happyReduce_183 = happySpecReduce_1 78# happyReduction_183+happyReduction_183 happy_x_1+ = case happyOut83 happy_x_1 of { happy_var_1 -> + happyIn82+ (happy_var_1+ )}++happyReduce_184 = happySpecReduce_1 79# happyReduction_184+happyReduction_184 happy_x_1+ = case happyOut127 happy_x_1 of { happy_var_1 -> + happyIn83+ (HsVar happy_var_1+ )}++happyReduce_185 = happySpecReduce_1 79# happyReduction_185+happyReduction_185 happy_x_1+ = case happyOut125 happy_x_1 of { happy_var_1 -> + happyIn83+ (happy_var_1+ )}++happyReduce_186 = happySpecReduce_1 79# happyReduction_186+happyReduction_186 happy_x_1+ = case happyOut150 happy_x_1 of { happy_var_1 -> + happyIn83+ (HsLit happy_var_1+ )}++happyReduce_187 = happySpecReduce_3 79# happyReduction_187+happyReduction_187 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut72 happy_x_2 of { happy_var_2 -> + happyIn83+ (hsQuote happy_var_2+ )}++happyReduce_188 = happySpecReduce_3 79# happyReduction_188+happyReduction_188 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut72 happy_x_2 of { happy_var_2 -> + happyIn83+ (hsSplice happy_var_2+ )}++happyReduce_189 = happySpecReduce_3 79# happyReduction_189+happyReduction_189 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut72 happy_x_2 of { happy_var_2 -> + happyIn83+ (HsParen happy_var_2+ )}++happyReduce_190 = happySpecReduce_3 79# happyReduction_190+happyReduction_190 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut85 happy_x_2 of { happy_var_2 -> + happyIn83+ (HsTuple (reverse happy_var_2)+ )}++happyReduce_191 = happySpecReduce_3 79# happyReduction_191+happyReduction_191 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut86 happy_x_2 of { happy_var_2 -> + happyIn83+ (happy_var_2+ )}++happyReduce_192 = happyReduce 4# 79# happyReduction_192+happyReduction_192 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut75 happy_x_2 of { happy_var_2 -> + case happyOut136 happy_x_3 of { happy_var_3 -> + happyIn83+ (HsLeftSection happy_var_2 happy_var_3+ ) `HappyStk` happyRest}}++happyReduce_193 = happyReduce 4# 79# happyReduction_193+happyReduction_193 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut137 happy_x_2 of { happy_var_2 -> + case happyOut73 happy_x_3 of { happy_var_3 -> + happyIn83+ (HsRightSection happy_var_2 happy_var_3+ ) `HappyStk` happyRest}}++happyReduce_194 = happySpecReduce_1 79# happyReduction_194+happyReduction_194 happy_x_1+ = happyIn83+ (HsWildCard+ )++happyReduce_195 = happySpecReduce_2 80# happyReduction_195+happyReduction_195 happy_x_2+ happy_x_1+ = case happyOut84 happy_x_1 of { happy_var_1 -> + happyIn84+ (happy_var_1 + 1+ )}++happyReduce_196 = happySpecReduce_1 80# happyReduction_196+happyReduction_196 happy_x_1+ = happyIn84+ (1+ )++happyReduce_197 = happySpecReduce_3 81# happyReduction_197+happyReduction_197 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut85 happy_x_1 of { happy_var_1 -> + case happyOut72 happy_x_3 of { happy_var_3 -> + happyIn85+ (happy_var_3 : happy_var_1+ )}}++happyReduce_198 = happySpecReduce_3 81# happyReduction_198+happyReduction_198 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut72 happy_x_1 of { happy_var_1 -> + case happyOut72 happy_x_3 of { happy_var_3 -> + happyIn85+ ([happy_var_3,happy_var_1]+ )}}++happyReduce_199 = happySpecReduce_1 82# happyReduction_199+happyReduction_199 happy_x_1+ = case happyOut72 happy_x_1 of { happy_var_1 -> + happyIn86+ (HsList [happy_var_1]+ )}++happyReduce_200 = happySpecReduce_1 82# happyReduction_200+happyReduction_200 happy_x_1+ = case happyOut87 happy_x_1 of { happy_var_1 -> + happyIn86+ (HsList (reverse happy_var_1)+ )}++happyReduce_201 = happySpecReduce_2 82# happyReduction_201+happyReduction_201 happy_x_2+ happy_x_1+ = case happyOut72 happy_x_1 of { happy_var_1 -> + happyIn86+ (HsEnumFrom happy_var_1+ )}++happyReduce_202 = happyReduce 4# 82# happyReduction_202+happyReduction_202 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut72 happy_x_1 of { happy_var_1 -> + case happyOut72 happy_x_3 of { happy_var_3 -> + happyIn86+ (HsEnumFromThen happy_var_1 happy_var_3+ ) `HappyStk` happyRest}}++happyReduce_203 = happySpecReduce_3 82# happyReduction_203+happyReduction_203 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut72 happy_x_1 of { happy_var_1 -> + case happyOut72 happy_x_3 of { happy_var_3 -> + happyIn86+ (HsEnumFromTo happy_var_1 happy_var_3+ )}}++happyReduce_204 = happyReduce 5# 82# happyReduction_204+happyReduction_204 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut72 happy_x_1 of { happy_var_1 -> + case happyOut72 happy_x_3 of { happy_var_3 -> + case happyOut72 happy_x_5 of { happy_var_5 -> + happyIn86+ (HsEnumFromThenTo happy_var_1 happy_var_3 happy_var_5+ ) `HappyStk` happyRest}}}++happyReduce_205 = happySpecReduce_3 82# happyReduction_205+happyReduction_205 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut72 happy_x_1 of { happy_var_1 -> + case happyOut88 happy_x_3 of { happy_var_3 -> + happyIn86+ (HsListComp happy_var_1 (reverse happy_var_3)+ )}}++happyReduce_206 = happySpecReduce_3 83# happyReduction_206+happyReduction_206 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut87 happy_x_1 of { happy_var_1 -> + case happyOut72 happy_x_3 of { happy_var_3 -> + happyIn87+ (happy_var_3 : happy_var_1+ )}}++happyReduce_207 = happySpecReduce_3 83# happyReduction_207+happyReduction_207 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut72 happy_x_1 of { happy_var_1 -> + case happyOut72 happy_x_3 of { happy_var_3 -> + happyIn87+ ([happy_var_3,happy_var_1]+ )}}++happyReduce_208 = happySpecReduce_3 84# happyReduction_208+happyReduction_208 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut88 happy_x_1 of { happy_var_1 -> + case happyOut89 happy_x_3 of { happy_var_3 -> + happyIn88+ (happy_var_3 : happy_var_1+ )}}++happyReduce_209 = happySpecReduce_1 84# happyReduction_209+happyReduction_209 happy_x_1+ = case happyOut89 happy_x_1 of { happy_var_1 -> + happyIn88+ ([happy_var_1]+ )}++happyReduce_210 = happyReduce 4# 85# happyReduction_210+happyReduction_210 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut97 happy_x_1 of { happy_var_1 -> + case happyOut151 happy_x_2 of { happy_var_2 -> + case happyOut72 happy_x_4 of { happy_var_4 -> + happyIn89+ (HsGenerator happy_var_2 happy_var_1 happy_var_4+ ) `HappyStk` happyRest}}}++happyReduce_211 = happySpecReduce_1 85# happyReduction_211+happyReduction_211 happy_x_1+ = case happyOut72 happy_x_1 of { happy_var_1 -> + happyIn89+ (HsQualifier happy_var_1+ )}++happyReduce_212 = happySpecReduce_2 85# happyReduction_212+happyReduction_212 happy_x_2+ happy_x_1+ = case happyOut36 happy_x_2 of { happy_var_2 -> + happyIn89+ (HsLetStmt happy_var_2+ )}++happyReduce_213 = happySpecReduce_3 86# happyReduction_213+happyReduction_213 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut91 happy_x_2 of { happy_var_2 -> + happyIn90+ (happy_var_2+ )}++happyReduce_214 = happySpecReduce_3 86# happyReduction_214+happyReduction_214 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut91 happy_x_2 of { happy_var_2 -> + happyIn90+ (happy_var_2+ )}++happyReduce_215 = happySpecReduce_3 87# happyReduction_215+happyReduction_215 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut92 happy_x_2 of { happy_var_2 -> + happyIn91+ (reverse happy_var_2+ )}++happyReduce_216 = happySpecReduce_3 88# happyReduction_216+happyReduction_216 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut92 happy_x_1 of { happy_var_1 -> + case happyOut93 happy_x_3 of { happy_var_3 -> + happyIn92+ (happy_var_3 : happy_var_1+ )}}++happyReduce_217 = happySpecReduce_1 88# happyReduction_217+happyReduction_217 happy_x_1+ = case happyOut93 happy_x_1 of { happy_var_1 -> + happyIn92+ ([happy_var_1]+ )}++happyReduce_218 = happyReduce 4# 89# happyReduction_218+happyReduction_218 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut97 happy_x_2 of { happy_var_2 -> + case happyOut94 happy_x_3 of { happy_var_3 -> + case happyOut68 happy_x_4 of { happy_var_4 -> + happyIn93+ (HsAlt happy_var_1 happy_var_2 happy_var_3 happy_var_4+ ) `HappyStk` happyRest}}}}++happyReduce_219 = happySpecReduce_2 90# happyReduction_219+happyReduction_219 happy_x_2+ happy_x_1+ = case happyOut72 happy_x_2 of { happy_var_2 -> + happyIn94+ (HsUnGuardedAlt happy_var_2+ )}++happyReduce_220 = happySpecReduce_1 90# happyReduction_220+happyReduction_220 happy_x_1+ = case happyOut95 happy_x_1 of { happy_var_1 -> + happyIn94+ (HsGuardedAlts (reverse happy_var_1)+ )}++happyReduce_221 = happySpecReduce_2 91# happyReduction_221+happyReduction_221 happy_x_2+ happy_x_1+ = case happyOut95 happy_x_1 of { happy_var_1 -> + case happyOut96 happy_x_2 of { happy_var_2 -> + happyIn95+ (happy_var_2 : happy_var_1+ )}}++happyReduce_222 = happySpecReduce_1 91# happyReduction_222+happyReduction_222 happy_x_1+ = case happyOut96 happy_x_1 of { happy_var_1 -> + happyIn95+ ([happy_var_1]+ )}++happyReduce_223 = happyReduce 5# 92# happyReduction_223+happyReduction_223 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut73 happy_x_3 of { happy_var_3 -> + case happyOut72 happy_x_5 of { happy_var_5 -> + happyIn96+ (HsGuardedAlt happy_var_1 happy_var_3 happy_var_5+ ) `HappyStk` happyRest}}}++happyReduce_224 = happyMonadReduce 1# 93# happyReduction_224+happyReduction_224 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (case happyOut75 happy_x_1 of { happy_var_1 -> + ( checkPattern happy_var_1)}+ ) (\r -> happyReturn (happyIn97 r))++happyReduce_225 = happySpecReduce_3 94# happyReduction_225+happyReduction_225 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut99 happy_x_2 of { happy_var_2 -> + happyIn98+ (happy_var_2+ )}++happyReduce_226 = happySpecReduce_3 94# happyReduction_226+happyReduction_226 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut99 happy_x_2 of { happy_var_2 -> + happyIn98+ (happy_var_2+ )}++happyReduce_227 = happyReduce 4# 95# happyReduction_227+happyReduction_227 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut36 happy_x_2 of { happy_var_2 -> + case happyOut99 happy_x_4 of { happy_var_4 -> + happyIn99+ (HsLetStmt happy_var_2 : happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_228 = happyReduce 6# 95# happyReduction_228+happyReduction_228 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut97 happy_x_1 of { happy_var_1 -> + case happyOut151 happy_x_2 of { happy_var_2 -> + case happyOut72 happy_x_4 of { happy_var_4 -> + case happyOut99 happy_x_6 of { happy_var_6 -> + happyIn99+ (HsGenerator happy_var_2 happy_var_1 happy_var_4 : happy_var_6+ ) `HappyStk` happyRest}}}}++happyReduce_229 = happySpecReduce_3 95# happyReduction_229+happyReduction_229 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut72 happy_x_1 of { happy_var_1 -> + case happyOut99 happy_x_3 of { happy_var_3 -> + happyIn99+ (HsQualifier happy_var_1 : happy_var_3+ )}}++happyReduce_230 = happySpecReduce_2 95# happyReduction_230+happyReduction_230 happy_x_2+ happy_x_1+ = case happyOut99 happy_x_2 of { happy_var_2 -> + happyIn99+ (happy_var_2+ )}++happyReduce_231 = happySpecReduce_2 95# happyReduction_231+happyReduction_231 happy_x_2+ happy_x_1+ = case happyOut72 happy_x_1 of { happy_var_1 -> + happyIn99+ ([HsQualifier happy_var_1]+ )}++happyReduce_232 = happySpecReduce_1 95# happyReduction_232+happyReduction_232 happy_x_1+ = case happyOut72 happy_x_1 of { happy_var_1 -> + happyIn99+ ([HsQualifier happy_var_1]+ )}++happyReduce_233 = happySpecReduce_3 96# happyReduction_233+happyReduction_233 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut100 happy_x_1 of { happy_var_1 -> + case happyOut101 happy_x_3 of { happy_var_3 -> + happyIn100+ (happy_var_3 : happy_var_1+ )}}++happyReduce_234 = happySpecReduce_1 96# happyReduction_234+happyReduction_234 happy_x_1+ = case happyOut101 happy_x_1 of { happy_var_1 -> + happyIn100+ ([happy_var_1]+ )}++happyReduce_235 = happySpecReduce_3 97# happyReduction_235+happyReduction_235 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut127 happy_x_1 of { happy_var_1 -> + case happyOut72 happy_x_3 of { happy_var_3 -> + happyIn101+ (HsFieldUpdate happy_var_1 happy_var_3+ )}}++happyReduce_236 = happySpecReduce_3 98# happyReduction_236+happyReduction_236 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut75 happy_x_1 of { happy_var_1 -> + case happyOut72 happy_x_3 of { happy_var_3 -> + happyIn102+ (ArrSyn.Input happy_var_1 happy_var_3+ )}}++happyReduce_237 = happySpecReduce_3 98# happyReduction_237+happyReduction_237 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut75 happy_x_1 of { happy_var_1 -> + case happyOut72 happy_x_3 of { happy_var_3 -> + happyIn102+ (ArrSyn.Input happy_var_1 happy_var_3+ )}}++happyReduce_238 = happySpecReduce_3 98# happyReduction_238+happyReduction_238 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut75 happy_x_1 of { happy_var_1 -> + case happyOut72 happy_x_3 of { happy_var_3 -> + happyIn102+ (ArrSyn.Input happy_var_3 happy_var_1+ )}}++happyReduce_239 = happySpecReduce_3 98# happyReduction_239+happyReduction_239 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut75 happy_x_1 of { happy_var_1 -> + case happyOut72 happy_x_3 of { happy_var_3 -> + happyIn102+ (ArrSyn.Input happy_var_3 happy_var_1+ )}}++happyReduce_240 = happySpecReduce_1 98# happyReduction_240+happyReduction_240 happy_x_1+ = case happyOut103 happy_x_1 of { happy_var_1 -> + happyIn102+ (happy_var_1+ )}++happyReduce_241 = happySpecReduce_1 99# happyReduction_241+happyReduction_241 happy_x_1+ = case happyOut104 happy_x_1 of { happy_var_1 -> + happyIn103+ (happy_var_1+ )}++happyReduce_242 = happySpecReduce_1 99# happyReduction_242+happyReduction_242 happy_x_1+ = case happyOut105 happy_x_1 of { happy_var_1 -> + happyIn103+ (happy_var_1+ )}++happyReduce_243 = happySpecReduce_3 100# happyReduction_243+happyReduction_243 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut105 happy_x_1 of { happy_var_1 -> + case happyOut136 happy_x_2 of { happy_var_2 -> + case happyOut106 happy_x_3 of { happy_var_3 -> + happyIn104+ (ArrSyn.InfixOp happy_var_1 happy_var_2 happy_var_3+ )}}}++happyReduce_244 = happySpecReduce_1 100# happyReduction_244+happyReduction_244 happy_x_1+ = case happyOut106 happy_x_1 of { happy_var_1 -> + happyIn104+ (happy_var_1+ )}++happyReduce_245 = happySpecReduce_3 101# happyReduction_245+happyReduction_245 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut105 happy_x_1 of { happy_var_1 -> + case happyOut136 happy_x_2 of { happy_var_2 -> + case happyOut107 happy_x_3 of { happy_var_3 -> + happyIn105+ (ArrSyn.InfixOp happy_var_1 happy_var_2 happy_var_3+ )}}}++happyReduce_246 = happySpecReduce_1 101# happyReduction_246+happyReduction_246 happy_x_1+ = case happyOut107 happy_x_1 of { happy_var_1 -> + happyIn105+ (happy_var_1+ )}++happyReduce_247 = happyReduce 5# 102# happyReduction_247+happyReduction_247 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_2 of { happy_var_2 -> + case happyOut79 happy_x_3 of { happy_var_3 -> + case happyOut102 happy_x_5 of { happy_var_5 -> + happyIn106+ (ArrSyn.Kappa happy_var_2 (reverse happy_var_3) happy_var_5+ ) `HappyStk` happyRest}}}++happyReduce_248 = happyReduce 4# 102# happyReduction_248+happyReduction_248 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut36 happy_x_2 of { happy_var_2 -> + case happyOut102 happy_x_4 of { happy_var_4 -> + happyIn106+ (ArrSyn.Let happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_249 = happyReduce 4# 102# happyReduction_249+happyReduction_249 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut121 happy_x_2 of { happy_var_2 -> + case happyOut102 happy_x_4 of { happy_var_4 -> + happyIn106+ (ArrSyn.LetCmd happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_250 = happyReduce 6# 102# happyReduction_250+happyReduction_250 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut72 happy_x_2 of { happy_var_2 -> + case happyOut102 happy_x_4 of { happy_var_4 -> + case happyOut102 happy_x_6 of { happy_var_6 -> + happyIn106+ (ArrSyn.If happy_var_2 happy_var_4 happy_var_6+ ) `HappyStk` happyRest}}}++happyReduce_251 = happyReduce 4# 103# happyReduction_251+happyReduction_251 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut72 happy_x_2 of { happy_var_2 -> + case happyOut111 happy_x_4 of { happy_var_4 -> + happyIn107+ (ArrSyn.Case happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_252 = happySpecReduce_2 103# happyReduction_252+happyReduction_252 happy_x_2+ happy_x_1+ = case happyOut118 happy_x_2 of { happy_var_2 -> + happyIn107+ (ArrSyn.Do (fst happy_var_2) (snd happy_var_2)+ )}++happyReduce_253 = happySpecReduce_1 103# happyReduction_253+happyReduction_253 happy_x_1+ = case happyOut108 happy_x_1 of { happy_var_1 -> + happyIn107+ (happy_var_1+ )}++happyReduce_254 = happySpecReduce_2 104# happyReduction_254+happyReduction_254 happy_x_2+ happy_x_1+ = case happyOut108 happy_x_1 of { happy_var_1 -> + case happyOut81 happy_x_2 of { happy_var_2 -> + happyIn108+ (ArrSyn.App happy_var_1 happy_var_2+ )}}++happyReduce_255 = happySpecReduce_1 104# happyReduction_255+happyReduction_255 happy_x_1+ = case happyOut109 happy_x_1 of { happy_var_1 -> + happyIn108+ (happy_var_1+ )}++happyReduce_256 = happySpecReduce_3 105# happyReduction_256+happyReduction_256 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut102 happy_x_2 of { happy_var_2 -> + happyIn109+ (ArrSyn.Paren happy_var_2+ )}++happyReduce_257 = happyReduce 4# 105# happyReduction_257+happyReduction_257 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut81 happy_x_2 of { happy_var_2 -> + case happyOut110 happy_x_3 of { happy_var_3 -> + happyIn109+ (ArrSyn.Op happy_var_2 (reverse happy_var_3)+ ) `HappyStk` happyRest}}++happyReduce_258 = happySpecReduce_2 105# happyReduction_258+happyReduction_258 happy_x_2+ happy_x_1+ = case happyOut140 happy_x_2 of { happy_var_2 -> + happyIn109+ (ArrSyn.CmdVar happy_var_2+ )}++happyReduce_259 = happySpecReduce_2 106# happyReduction_259+happyReduction_259 happy_x_2+ happy_x_1+ = case happyOut110 happy_x_1 of { happy_var_1 -> + case happyOut109 happy_x_2 of { happy_var_2 -> + happyIn110+ (happy_var_2 : happy_var_1+ )}}++happyReduce_260 = happySpecReduce_1 106# happyReduction_260+happyReduction_260 happy_x_1+ = case happyOut109 happy_x_1 of { happy_var_1 -> + happyIn110+ ([happy_var_1]+ )}++happyReduce_261 = happySpecReduce_3 107# happyReduction_261+happyReduction_261 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut112 happy_x_2 of { happy_var_2 -> + happyIn111+ (happy_var_2+ )}++happyReduce_262 = happySpecReduce_3 107# happyReduction_262+happyReduction_262 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut112 happy_x_2 of { happy_var_2 -> + happyIn111+ (happy_var_2+ )}++happyReduce_263 = happySpecReduce_3 108# happyReduction_263+happyReduction_263 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut113 happy_x_2 of { happy_var_2 -> + happyIn112+ (reverse happy_var_2+ )}++happyReduce_264 = happySpecReduce_3 109# happyReduction_264+happyReduction_264 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut113 happy_x_1 of { happy_var_1 -> + case happyOut114 happy_x_3 of { happy_var_3 -> + happyIn113+ (happy_var_3 : happy_var_1+ )}}++happyReduce_265 = happySpecReduce_1 109# happyReduction_265+happyReduction_265 happy_x_1+ = case happyOut114 happy_x_1 of { happy_var_1 -> + happyIn113+ ([happy_var_1]+ )}++happyReduce_266 = happyReduce 4# 110# happyReduction_266+happyReduction_266 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut97 happy_x_2 of { happy_var_2 -> + case happyOut115 happy_x_3 of { happy_var_3 -> + case happyOut68 happy_x_4 of { happy_var_4 -> + happyIn114+ (ArrSyn.Alt happy_var_1 happy_var_2 happy_var_3 happy_var_4+ ) `HappyStk` happyRest}}}}++happyReduce_267 = happySpecReduce_2 111# happyReduction_267+happyReduction_267 happy_x_2+ happy_x_1+ = case happyOut102 happy_x_2 of { happy_var_2 -> + happyIn115+ (ArrSyn.UnGuardedAlt happy_var_2+ )}++happyReduce_268 = happySpecReduce_1 111# happyReduction_268+happyReduction_268 happy_x_1+ = case happyOut116 happy_x_1 of { happy_var_1 -> + happyIn115+ (ArrSyn.GuardedAlts (reverse happy_var_1)+ )}++happyReduce_269 = happySpecReduce_2 112# happyReduction_269+happyReduction_269 happy_x_2+ happy_x_1+ = case happyOut116 happy_x_1 of { happy_var_1 -> + case happyOut117 happy_x_2 of { happy_var_2 -> + happyIn116+ (happy_var_2 : happy_var_1+ )}}++happyReduce_270 = happySpecReduce_1 112# happyReduction_270+happyReduction_270 happy_x_1+ = case happyOut117 happy_x_1 of { happy_var_1 -> + happyIn116+ ([happy_var_1]+ )}++happyReduce_271 = happyReduce 5# 113# happyReduction_271+happyReduction_271 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut73 happy_x_3 of { happy_var_3 -> + case happyOut102 happy_x_5 of { happy_var_5 -> + happyIn117+ (ArrSyn.GuardedAlt happy_var_1 happy_var_3 happy_var_5+ ) `HappyStk` happyRest}}}++happyReduce_272 = happySpecReduce_3 114# happyReduction_272+happyReduction_272 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut119 happy_x_2 of { happy_var_2 -> + happyIn118+ (happy_var_2+ )}++happyReduce_273 = happySpecReduce_3 114# happyReduction_273+happyReduction_273 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut119 happy_x_2 of { happy_var_2 -> + happyIn118+ (happy_var_2+ )}++happyReduce_274 = happySpecReduce_3 115# happyReduction_274+happyReduction_274 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut120 happy_x_1 of { happy_var_1 -> + case happyOut119 happy_x_3 of { happy_var_3 -> + happyIn119+ ((happy_var_1 : fst happy_var_3, snd happy_var_3)+ )}}++happyReduce_275 = happySpecReduce_3 115# happyReduction_275+happyReduction_275 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut102 happy_x_1 of { happy_var_1 -> + case happyOut119 happy_x_3 of { happy_var_3 -> + happyIn119+ ((ArrSyn.Generator undefined HsPWildCard happy_var_1 : fst happy_var_3, snd happy_var_3)+ )}}++happyReduce_276 = happyReduce 4# 115# happyReduction_276+happyReduction_276 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut36 happy_x_2 of { happy_var_2 -> + case happyOut119 happy_x_4 of { happy_var_4 -> + happyIn119+ ((ArrSyn.LetStmt happy_var_2 : fst happy_var_4, snd happy_var_4)+ ) `HappyStk` happyRest}}++happyReduce_277 = happySpecReduce_2 115# happyReduction_277+happyReduction_277 happy_x_2+ happy_x_1+ = case happyOut119 happy_x_2 of { happy_var_2 -> + happyIn119+ (happy_var_2+ )}++happyReduce_278 = happySpecReduce_2 115# happyReduction_278+happyReduction_278 happy_x_2+ happy_x_1+ = case happyOut102 happy_x_1 of { happy_var_1 -> + happyIn119+ (([], happy_var_1)+ )}++happyReduce_279 = happySpecReduce_1 115# happyReduction_279+happyReduction_279 happy_x_1+ = case happyOut102 happy_x_1 of { happy_var_1 -> + happyIn119+ (([], happy_var_1)+ )}++happyReduce_280 = happyReduce 4# 116# happyReduction_280+happyReduction_280 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut97 happy_x_1 of { happy_var_1 -> + case happyOut151 happy_x_2 of { happy_var_2 -> + case happyOut102 happy_x_4 of { happy_var_4 -> + happyIn120+ (ArrSyn.Generator happy_var_2 happy_var_1 happy_var_4+ ) `HappyStk` happyRest}}}++happyReduce_281 = happyReduce 4# 116# happyReduction_281+happyReduction_281 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut102 happy_x_1 of { happy_var_1 -> + case happyOut151 happy_x_3 of { happy_var_3 -> + case happyOut97 happy_x_4 of { happy_var_4 -> + happyIn120+ (ArrSyn.Generator happy_var_3 happy_var_4 happy_var_1+ ) `HappyStk` happyRest}}}++happyReduce_282 = happySpecReduce_2 116# happyReduction_282+happyReduction_282 happy_x_2+ happy_x_1+ = case happyOut122 happy_x_2 of { happy_var_2 -> + happyIn120+ (ArrSyn.RecStmt (reverse happy_var_2)+ )}++happyReduce_283 = happySpecReduce_2 116# happyReduction_283+happyReduction_283 happy_x_2+ happy_x_1+ = case happyOut121 happy_x_2 of { happy_var_2 -> + happyIn120+ (ArrSyn.LetCmdStmt happy_var_2+ )}++happyReduce_284 = happyReduce 5# 117# happyReduction_284+happyReduction_284 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut140 happy_x_3 of { happy_var_3 -> + case happyOut102 happy_x_5 of { happy_var_5 -> + happyIn121+ (ArrSyn.VarDecl happy_var_1 happy_var_3 happy_var_5+ ) `HappyStk` happyRest}}}++happyReduce_285 = happySpecReduce_3 118# happyReduction_285+happyReduction_285 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut123 happy_x_2 of { happy_var_2 -> + happyIn122+ (happy_var_2+ )}++happyReduce_286 = happySpecReduce_3 118# happyReduction_286+happyReduction_286 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut123 happy_x_2 of { happy_var_2 -> + happyIn122+ (happy_var_2+ )}++happyReduce_287 = happySpecReduce_3 119# happyReduction_287+happyReduction_287 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut123 happy_x_1 of { happy_var_1 -> + case happyOut124 happy_x_3 of { happy_var_3 -> + happyIn123+ (happy_var_3 : happy_var_1+ )}}++happyReduce_288 = happySpecReduce_1 119# happyReduction_288+happyReduction_288 happy_x_1+ = case happyOut124 happy_x_1 of { happy_var_1 -> + happyIn123+ ([happy_var_1]+ )}++happyReduce_289 = happySpecReduce_1 120# happyReduction_289+happyReduction_289 happy_x_1+ = case happyOut120 happy_x_1 of { happy_var_1 -> + happyIn124+ (happy_var_1+ )}++happyReduce_290 = happySpecReduce_2 120# happyReduction_290+happyReduction_290 happy_x_2+ happy_x_1+ = case happyOut36 happy_x_2 of { happy_var_2 -> + happyIn124+ (ArrSyn.LetStmt happy_var_2+ )}++happyReduce_291 = happySpecReduce_2 121# happyReduction_291+happyReduction_291 happy_x_2+ happy_x_1+ = happyIn125+ (unit_con+ )++happyReduce_292 = happySpecReduce_2 121# happyReduction_292+happyReduction_292 happy_x_2+ happy_x_1+ = happyIn125+ (HsList []+ )++happyReduce_293 = happySpecReduce_3 121# happyReduction_293+happyReduction_293 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut84 happy_x_2 of { happy_var_2 -> + happyIn125+ (tuple_con happy_var_2+ )}++happyReduce_294 = happySpecReduce_1 121# happyReduction_294+happyReduction_294 happy_x_1+ = case happyOut129 happy_x_1 of { happy_var_1 -> + happyIn125+ (HsCon happy_var_1+ )}++happyReduce_295 = happySpecReduce_1 122# happyReduction_295+happyReduction_295 happy_x_1+ = case happyOut140 happy_x_1 of { happy_var_1 -> + happyIn126+ (happy_var_1+ )}++happyReduce_296 = happySpecReduce_3 122# happyReduction_296+happyReduction_296 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut147 happy_x_2 of { happy_var_2 -> + happyIn126+ (happy_var_2+ )}++happyReduce_297 = happySpecReduce_1 123# happyReduction_297+happyReduction_297 happy_x_1+ = case happyOut139 happy_x_1 of { happy_var_1 -> + happyIn127+ (happy_var_1+ )}++happyReduce_298 = happySpecReduce_3 123# happyReduction_298+happyReduction_298 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut145 happy_x_2 of { happy_var_2 -> + happyIn127+ (happy_var_2+ )}++happyReduce_299 = happySpecReduce_1 124# happyReduction_299+happyReduction_299 happy_x_1+ = case happyOut142 happy_x_1 of { happy_var_1 -> + happyIn128+ (happy_var_1+ )}++happyReduce_300 = happySpecReduce_3 124# happyReduction_300+happyReduction_300 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut144 happy_x_2 of { happy_var_2 -> + happyIn128+ (happy_var_2+ )}++happyReduce_301 = happySpecReduce_1 125# happyReduction_301+happyReduction_301 happy_x_1+ = case happyOut141 happy_x_1 of { happy_var_1 -> + happyIn129+ (happy_var_1+ )}++happyReduce_302 = happySpecReduce_3 125# happyReduction_302+happyReduction_302 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut138 happy_x_2 of { happy_var_2 -> + happyIn129+ (happy_var_2+ )}++happyReduce_303 = happySpecReduce_1 126# happyReduction_303+happyReduction_303 happy_x_1+ = case happyOut147 happy_x_1 of { happy_var_1 -> + happyIn130+ (happy_var_1+ )}++happyReduce_304 = happySpecReduce_3 126# happyReduction_304+happyReduction_304 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut140 happy_x_2 of { happy_var_2 -> + happyIn130+ (happy_var_2+ )}++happyReduce_305 = happySpecReduce_1 127# happyReduction_305+happyReduction_305 happy_x_1+ = case happyOut145 happy_x_1 of { happy_var_1 -> + happyIn131+ (happy_var_1+ )}++happyReduce_306 = happySpecReduce_3 127# happyReduction_306+happyReduction_306 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut139 happy_x_2 of { happy_var_2 -> + happyIn131+ (happy_var_2+ )}++happyReduce_307 = happySpecReduce_1 128# happyReduction_307+happyReduction_307 happy_x_1+ = case happyOut146 happy_x_1 of { happy_var_1 -> + happyIn132+ (happy_var_1+ )}++happyReduce_308 = happySpecReduce_3 128# happyReduction_308+happyReduction_308 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut139 happy_x_2 of { happy_var_2 -> + happyIn132+ (happy_var_2+ )}++happyReduce_309 = happySpecReduce_1 129# happyReduction_309+happyReduction_309 happy_x_1+ = case happyOut144 happy_x_1 of { happy_var_1 -> + happyIn133+ (happy_var_1+ )}++happyReduce_310 = happySpecReduce_3 129# happyReduction_310+happyReduction_310 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut142 happy_x_2 of { happy_var_2 -> + happyIn133+ (happy_var_2+ )}++happyReduce_311 = happySpecReduce_1 130# happyReduction_311+happyReduction_311 happy_x_1+ = case happyOut138 happy_x_1 of { happy_var_1 -> + happyIn134+ (happy_var_1+ )}++happyReduce_312 = happySpecReduce_3 130# happyReduction_312+happyReduction_312 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut141 happy_x_2 of { happy_var_2 -> + happyIn134+ (happy_var_2+ )}++happyReduce_313 = happySpecReduce_1 131# happyReduction_313+happyReduction_313 happy_x_1+ = case happyOut130 happy_x_1 of { happy_var_1 -> + happyIn135+ (HsVarOp happy_var_1+ )}++happyReduce_314 = happySpecReduce_1 131# happyReduction_314+happyReduction_314 happy_x_1+ = case happyOut133 happy_x_1 of { happy_var_1 -> + happyIn135+ (HsConOp happy_var_1+ )}++happyReduce_315 = happySpecReduce_1 132# happyReduction_315+happyReduction_315 happy_x_1+ = case happyOut131 happy_x_1 of { happy_var_1 -> + happyIn136+ (HsQVarOp happy_var_1+ )}++happyReduce_316 = happySpecReduce_1 132# happyReduction_316+happyReduction_316 happy_x_1+ = case happyOut134 happy_x_1 of { happy_var_1 -> + happyIn136+ (HsQConOp happy_var_1+ )}++happyReduce_317 = happySpecReduce_1 133# happyReduction_317+happyReduction_317 happy_x_1+ = case happyOut132 happy_x_1 of { happy_var_1 -> + happyIn137+ (HsQVarOp happy_var_1+ )}++happyReduce_318 = happySpecReduce_1 133# happyReduction_318+happyReduction_318 happy_x_1+ = case happyOut134 happy_x_1 of { happy_var_1 -> + happyIn137+ (HsQConOp happy_var_1+ )}++happyReduce_319 = happySpecReduce_1 134# happyReduction_319+happyReduction_319 happy_x_1+ = happyIn138+ (list_cons_name+ )++happyReduce_320 = happySpecReduce_1 134# happyReduction_320+happyReduction_320 happy_x_1+ = case happyOut143 happy_x_1 of { happy_var_1 -> + happyIn138+ (happy_var_1+ )}++happyReduce_321 = happySpecReduce_1 135# happyReduction_321+happyReduction_321 happy_x_1+ = case happyOut140 happy_x_1 of { happy_var_1 -> + happyIn139+ (UnQual happy_var_1+ )}++happyReduce_322 = happySpecReduce_1 135# happyReduction_322+happyReduction_322 happy_x_1+ = case happyOutTok happy_x_1 of { (QVarId happy_var_1) -> + happyIn139+ (Qual (Module (fst happy_var_1)) (HsIdent (snd happy_var_1))+ )}++happyReduce_323 = happySpecReduce_1 136# happyReduction_323+happyReduction_323 happy_x_1+ = case happyOutTok happy_x_1 of { (VarId happy_var_1) -> + happyIn140+ (HsIdent happy_var_1+ )}++happyReduce_324 = happySpecReduce_1 136# happyReduction_324+happyReduction_324 happy_x_1+ = happyIn140+ (HsIdent "as"+ )++happyReduce_325 = happySpecReduce_1 136# happyReduction_325+happyReduction_325 happy_x_1+ = happyIn140+ (HsIdent "export"+ )++happyReduce_326 = happySpecReduce_1 136# happyReduction_326+happyReduction_326 happy_x_1+ = happyIn140+ (HsIdent "hiding"+ )++happyReduce_327 = happySpecReduce_1 136# happyReduction_327+happyReduction_327 happy_x_1+ = happyIn140+ (HsIdent "qualified"+ )++happyReduce_328 = happySpecReduce_1 136# happyReduction_328+happyReduction_328 happy_x_1+ = happyIn140+ (HsIdent "safe"+ )++happyReduce_329 = happySpecReduce_1 136# happyReduction_329+happyReduction_329 happy_x_1+ = happyIn140+ (HsIdent "unsafe"+ )++happyReduce_330 = happySpecReduce_1 137# happyReduction_330+happyReduction_330 happy_x_1+ = case happyOut142 happy_x_1 of { happy_var_1 -> + happyIn141+ (UnQual happy_var_1+ )}++happyReduce_331 = happySpecReduce_1 137# happyReduction_331+happyReduction_331 happy_x_1+ = case happyOutTok happy_x_1 of { (QConId happy_var_1) -> + happyIn141+ (Qual (Module (fst happy_var_1)) (HsIdent (snd happy_var_1))+ )}++happyReduce_332 = happySpecReduce_1 138# happyReduction_332+happyReduction_332 happy_x_1+ = case happyOutTok happy_x_1 of { (ConId happy_var_1) -> + happyIn142+ (HsIdent happy_var_1+ )}++happyReduce_333 = happySpecReduce_1 139# happyReduction_333+happyReduction_333 happy_x_1+ = case happyOut144 happy_x_1 of { happy_var_1 -> + happyIn143+ (UnQual happy_var_1+ )}++happyReduce_334 = happySpecReduce_1 139# happyReduction_334+happyReduction_334 happy_x_1+ = case happyOutTok happy_x_1 of { (QConSym happy_var_1) -> + happyIn143+ (Qual (Module (fst happy_var_1)) (HsSymbol (snd happy_var_1))+ )}++happyReduce_335 = happySpecReduce_1 140# happyReduction_335+happyReduction_335 happy_x_1+ = case happyOutTok happy_x_1 of { (ConSym happy_var_1) -> + happyIn144+ (HsSymbol happy_var_1+ )}++happyReduce_336 = happySpecReduce_1 141# happyReduction_336+happyReduction_336 happy_x_1+ = case happyOut147 happy_x_1 of { happy_var_1 -> + happyIn145+ (UnQual happy_var_1+ )}++happyReduce_337 = happySpecReduce_1 141# happyReduction_337+happyReduction_337 happy_x_1+ = case happyOut149 happy_x_1 of { happy_var_1 -> + happyIn145+ (happy_var_1+ )}++happyReduce_338 = happySpecReduce_1 142# happyReduction_338+happyReduction_338 happy_x_1+ = case happyOut148 happy_x_1 of { happy_var_1 -> + happyIn146+ (UnQual happy_var_1+ )}++happyReduce_339 = happySpecReduce_1 142# happyReduction_339+happyReduction_339 happy_x_1+ = case happyOut149 happy_x_1 of { happy_var_1 -> + happyIn146+ (happy_var_1+ )}++happyReduce_340 = happySpecReduce_1 143# happyReduction_340+happyReduction_340 happy_x_1+ = case happyOutTok happy_x_1 of { (VarSym happy_var_1) -> + happyIn147+ (HsSymbol happy_var_1+ )}++happyReduce_341 = happySpecReduce_1 143# happyReduction_341+happyReduction_341 happy_x_1+ = happyIn147+ (HsSymbol "-"+ )++happyReduce_342 = happySpecReduce_1 143# happyReduction_342+happyReduction_342 happy_x_1+ = happyIn147+ (HsSymbol "!"+ )++happyReduce_343 = happySpecReduce_1 144# happyReduction_343+happyReduction_343 happy_x_1+ = case happyOutTok happy_x_1 of { (VarSym happy_var_1) -> + happyIn148+ (HsSymbol happy_var_1+ )}++happyReduce_344 = happySpecReduce_1 144# happyReduction_344+happyReduction_344 happy_x_1+ = happyIn148+ (HsSymbol "!"+ )++happyReduce_345 = happySpecReduce_1 145# happyReduction_345+happyReduction_345 happy_x_1+ = case happyOutTok happy_x_1 of { (QVarSym happy_var_1) -> + happyIn149+ (Qual (Module (fst happy_var_1)) (HsSymbol (snd happy_var_1))+ )}++happyReduce_346 = happySpecReduce_1 146# happyReduction_346+happyReduction_346 happy_x_1+ = case happyOutTok happy_x_1 of { (IntTok happy_var_1) -> + happyIn150+ (HsInt happy_var_1+ )}++happyReduce_347 = happySpecReduce_1 146# happyReduction_347+happyReduction_347 happy_x_1+ = case happyOutTok happy_x_1 of { (Character happy_var_1) -> + happyIn150+ (HsChar happy_var_1+ )}++happyReduce_348 = happySpecReduce_1 146# happyReduction_348+happyReduction_348 happy_x_1+ = case happyOutTok happy_x_1 of { (FloatTok happy_var_1) -> + happyIn150+ (HsFrac happy_var_1+ )}++happyReduce_349 = happySpecReduce_1 146# happyReduction_349+happyReduction_349 happy_x_1+ = case happyOutTok happy_x_1 of { (StringTok happy_var_1) -> + happyIn150+ (HsString happy_var_1+ )}++happyReduce_350 = happyMonadReduce 0# 147# happyReduction_350+happyReduction_350 (happyRest) tk+ = happyThen (( getSrcLoc)+ ) (\r -> happyReturn (happyIn151 r))++happyReduce_351 = happyMonadReduce 0# 148# happyReduction_351+happyReduction_351 (happyRest) tk+ = happyThen (( pushCurrentContext)+ ) (\r -> happyReturn (happyIn152 r))++happyReduce_352 = happySpecReduce_1 149# happyReduction_352+happyReduction_352 happy_x_1+ = happyIn153+ (()+ )++happyReduce_353 = happyMonadReduce 1# 149# happyReduction_353+happyReduction_353 (happy_x_1 `HappyStk`+ happyRest) tk+ = happyThen (( popContext)+ ) (\r -> happyReturn (happyIn153 r))++happyReduce_354 = happySpecReduce_1 150# happyReduction_354+happyReduction_354 happy_x_1+ = case happyOutTok happy_x_1 of { (ConId happy_var_1) -> + happyIn154+ (Module happy_var_1+ )}++happyReduce_355 = happySpecReduce_1 150# happyReduction_355+happyReduction_355 happy_x_1+ = case happyOutTok happy_x_1 of { (QConId happy_var_1) -> + happyIn154+ (Module (fst happy_var_1 ++ '.':snd happy_var_1)+ )}++happyReduce_356 = happySpecReduce_1 151# happyReduction_356+happyReduction_356 happy_x_1+ = case happyOut142 happy_x_1 of { happy_var_1 -> + happyIn155+ (happy_var_1+ )}++happyReduce_357 = happySpecReduce_1 152# happyReduction_357+happyReduction_357 happy_x_1+ = case happyOut142 happy_x_1 of { happy_var_1 -> + happyIn156+ (happy_var_1+ )}++happyReduce_358 = happySpecReduce_1 153# happyReduction_358+happyReduction_358 happy_x_1+ = case happyOut141 happy_x_1 of { happy_var_1 -> + happyIn157+ (happy_var_1+ )}++happyReduce_359 = happySpecReduce_1 154# happyReduction_359+happyReduction_359 happy_x_1+ = case happyOut141 happy_x_1 of { happy_var_1 -> + happyIn158+ (happy_var_1+ )}++happyReduce_360 = happySpecReduce_1 155# happyReduction_360+happyReduction_360 happy_x_1+ = case happyOut140 happy_x_1 of { happy_var_1 -> + happyIn159+ (happy_var_1+ )}++happyNewToken action sts stk+ = lexer(\tk -> + let cont i = happyDoAction i tk action sts stk in+ case tk of {+ EOF -> happyDoAction 77# tk action sts stk;+ VarId happy_dollar_dollar -> cont 1#;+ QVarId happy_dollar_dollar -> cont 2#;+ ConId happy_dollar_dollar -> cont 3#;+ QConId happy_dollar_dollar -> cont 4#;+ VarSym happy_dollar_dollar -> cont 5#;+ ConSym happy_dollar_dollar -> cont 6#;+ QVarSym happy_dollar_dollar -> cont 7#;+ QConSym happy_dollar_dollar -> cont 8#;+ IntTok happy_dollar_dollar -> cont 9#;+ FloatTok happy_dollar_dollar -> cont 10#;+ Character happy_dollar_dollar -> cont 11#;+ StringTok happy_dollar_dollar -> cont 12#;+ LeftParen -> cont 13#;+ RightParen -> cont 14#;+ SemiColon -> cont 15#;+ LeftCurly -> cont 16#;+ RightCurly -> cont 17#;+ VRightCurly -> cont 18#;+ LeftSquare -> cont 19#;+ RightSquare -> cont 20#;+ Splice -> cont 21#;+ LeftQuote -> cont 22#;+ RightQuote -> cont 23#;+ Comma -> cont 24#;+ Underscore -> cont 25#;+ BackQuote -> cont 26#;+ DotDot -> cont 27#;+ Colon -> cont 28#;+ DoubleColon -> cont 29#;+ Equals -> cont 30#;+ Backslash -> cont 31#;+ Bar -> cont 32#;+ LeftArrow -> cont 33#;+ RightArrow -> cont 34#;+ At -> cont 35#;+ Tilde -> cont 36#;+ DoubleArrow -> cont 37#;+ LeftArrowTail -> cont 38#;+ RightArrowTail -> cont 39#;+ LeftArrowDTail -> cont 40#;+ RightArrowDTail -> cont 41#;+ LeftBanana -> cont 42#;+ RightBanana -> cont 43#;+ Minus -> cont 44#;+ Exclamation -> cont 45#;+ KW_Case -> cont 46#;+ KW_Class -> cont 47#;+ KW_Data -> cont 48#;+ KW_Default -> cont 49#;+ KW_Deriving -> cont 50#;+ KW_Do -> cont 51#;+ KW_Else -> cont 52#;+ KW_Foreign -> cont 53#;+ KW_If -> cont 54#;+ KW_Import -> cont 55#;+ KW_In -> cont 56#;+ KW_Infix -> cont 57#;+ KW_InfixL -> cont 58#;+ KW_InfixR -> cont 59#;+ KW_Instance -> cont 60#;+ KW_Let -> cont 61#;+ KW_Module -> cont 62#;+ KW_NewType -> cont 63#;+ KW_Of -> cont 64#;+ KW_Then -> cont 65#;+ KW_Type -> cont 66#;+ KW_Where -> cont 67#;+ KW_As -> cont 68#;+ KW_Export -> cont 69#;+ KW_Hiding -> cont 70#;+ KW_Qualified -> cont 71#;+ KW_Safe -> cont 72#;+ KW_Unsafe -> cont 73#;+ KW_Proc -> cont 74#;+ KW_Rec -> cont 75#;+ KW_Cmd -> cont 76#;+ _ -> happyError' tk+ })++happyError_ tk = happyError' tk++happyThen :: () => P a -> (a -> P b) -> P b+happyThen = (>>=)+happyReturn :: () => a -> P a+happyReturn = (return)+happyThen1 = happyThen+happyReturn1 :: () => a -> P a+happyReturn1 = happyReturn+happyError' :: () => (Token) -> P a+happyError' tk = (\token -> happyError) tk++parse = happySomeParser where+ happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut4 x))++happySeq = happyDontSeq+++happyError :: P a+happyError = fail "Parse error"++-- | Parse of a string, which should contain a complete Haskell 98 module.+parseModule :: String -> ParseResult HsModule+parseModule = runParser parse++-- | Parse of a string, which should contain a complete Haskell 98 module.+parseModuleWithMode :: ParseMode -> String -> ParseResult HsModule+parseModuleWithMode mode = runParserWithMode mode parse+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "<built-in>" #-}+{-# LINE 1 "<command-line>" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp ++{-# LINE 28 "templates/GenericTemplate.hs" #-}+++data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList++++++{-# LINE 49 "templates/GenericTemplate.hs" #-}++{-# LINE 59 "templates/GenericTemplate.hs" #-}++{-# LINE 68 "templates/GenericTemplate.hs" #-}++infixr 9 `HappyStk`+data HappyStk a = HappyStk a (HappyStk a)++-----------------------------------------------------------------------------+-- starting the parse++happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll++-----------------------------------------------------------------------------+-- Accepting the parse++-- If the current token is 0#, it means we've just accepted a partial+-- parse (a %partial parser). We must ignore the saved token on the top of+-- the stack in this case.+happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =+ happyReturn1 ans+happyAccept j tk st sts (HappyStk ans _) = + (happyTcHack j (happyTcHack st)) (happyReturn1 ans)++-----------------------------------------------------------------------------+-- Arrays only: do the next action++++happyDoAction i tk st+ = {- nothing -}+++ case action of+ 0# -> {- nothing -}+ happyFail i tk st+ -1# -> {- nothing -}+ happyAccept i tk st+ n | (n Happy_GHC_Exts.<# (0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}++ (happyReduceArr Happy_Data_Array.! rule) i tk st+ where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))+ n -> {- nothing -}+++ happyShift new_state i tk st+ where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))+ where off = indexShortOffAddr happyActOffsets st+ off_i = (off Happy_GHC_Exts.+# i)+ check = if (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#))+ then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==# i)+ else False+ action | check = indexShortOffAddr happyTable off_i+ | otherwise = indexShortOffAddr happyDefActions st++{-# LINE 127 "templates/GenericTemplate.hs" #-}+++indexShortOffAddr (HappyA# arr) off =+#if __GLASGOW_HASKELL__ > 500+ Happy_GHC_Exts.narrow16Int# i+#elif __GLASGOW_HASKELL__ == 500+ Happy_GHC_Exts.intToInt16# i+#else+ Happy_GHC_Exts.iShiftRA# (Happy_GHC_Exts.iShiftL# i 16#) 16#+#endif+ where+#if __GLASGOW_HASKELL__ >= 503+ i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)+#else+ i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.shiftL# high 8#) low)+#endif+ high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))+ low = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))+ off' = off Happy_GHC_Exts.*# 2#++++++data HappyAddr = HappyA# Happy_GHC_Exts.Addr#+++++-----------------------------------------------------------------------------+-- HappyState data type (not arrays)++{-# LINE 170 "templates/GenericTemplate.hs" #-}++-----------------------------------------------------------------------------+-- Shifting a token++happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =+ let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+-- trace "shifting the error token" $+ happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)++happyShift new_state i tk st sts stk =+ happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)++-- happyReduce is specialised for the common cases.++happySpecReduce_0 i fn 0# tk st sts stk+ = happyFail 0# tk st sts stk+happySpecReduce_0 nt fn j tk st@((action)) sts stk+ = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)++happySpecReduce_1 i fn 0# tk st sts stk+ = happyFail 0# tk st sts stk+happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')+ = let r = fn v1 in+ happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_2 i fn 0# tk st sts stk+ = happyFail 0# tk st sts stk+happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')+ = let r = fn v1 v2 in+ happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_3 i fn 0# tk st sts stk+ = happyFail 0# tk st sts stk+happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')+ = let r = fn v1 v2 v3 in+ happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happyReduce k i fn 0# tk st sts stk+ = happyFail 0# tk st sts stk+happyReduce k nt fn j tk st sts stk+ = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of+ sts1@((HappyCons (st1@(action)) (_))) ->+ let r = fn stk in -- it doesn't hurt to always seq here...+ happyDoSeq r (happyGoto nt j tk st1 sts1 r)++happyMonadReduce k nt fn 0# tk st sts stk+ = happyFail 0# tk st sts stk+happyMonadReduce k nt fn j tk st sts stk =+ happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))+ where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts))+ drop_stk = happyDropStk k stk++happyMonad2Reduce k nt fn 0# tk st sts stk+ = happyFail 0# tk st sts stk+happyMonad2Reduce k nt fn j tk st sts stk =+ happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))+ where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts))+ drop_stk = happyDropStk k stk++ off = indexShortOffAddr happyGotoOffsets st1+ off_i = (off Happy_GHC_Exts.+# nt)+ new_state = indexShortOffAddr happyTable off_i+++++happyDrop 0# l = l+happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t++happyDropStk 0# l = l+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs++-----------------------------------------------------------------------------+-- Moving to a new state after a reduction+++happyGoto nt j tk st = + {- nothing -}+ happyDoAction j tk new_state+ where off = indexShortOffAddr happyGotoOffsets st+ off_i = (off Happy_GHC_Exts.+# nt)+ new_state = indexShortOffAddr happyTable off_i+++++-----------------------------------------------------------------------------+-- Error recovery (0# is the error token)++-- parse error if we are in recovery and we fail again+happyFail 0# tk old_st _ stk =+-- trace "failing" $ + happyError_ tk++{- We don't need state discarding for our restricted implementation of+ "error". In fact, it can cause some bogus parses, so I've disabled it+ for now --SDM++-- discard a state+happyFail 0# tk old_st (HappyCons ((action)) (sts)) + (saved_tok `HappyStk` _ `HappyStk` stk) =+-- trace ("discarding state, depth " ++ show (length stk)) $+ happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))+-}++-- Enter error recovery: generate an error token,+-- save the old token and carry on.+happyFail i tk (action) sts stk =+-- trace "entering error recovery" $+ happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)++-- Internal happy errors:++notHappyAtAll = error "Internal Happy error\n"++-----------------------------------------------------------------------------+-- Hack to get the typechecker to accept our action functions+++happyTcHack :: Happy_GHC_Exts.Int# -> a -> a+happyTcHack x y = y+{-# INLINE happyTcHack #-}+++-----------------------------------------------------------------------------+-- Seq-ing. If the --strict flag is given, then Happy emits +-- happySeq = happyDoSeq+-- otherwise it emits+-- happySeq = happyDontSeq++happyDoSeq, happyDontSeq :: a -> b -> b+happyDoSeq a b = a `seq` b+happyDontSeq a b = b++-----------------------------------------------------------------------------+-- Don't inline any functions from the template. GHC has a nasty habit+-- of deciding to inline happyGoto everywhere, which increases the size of+-- the generated parser quite a bit.+++{-# NOINLINE happyDoAction #-}+{-# NOINLINE happyTable #-}+{-# NOINLINE happyCheck #-}+{-# NOINLINE happyActOffsets #-}+{-# NOINLINE happyGotoOffsets #-}+{-# NOINLINE happyDefActions #-}++{-# NOINLINE happyShift #-}+{-# NOINLINE happySpecReduce_0 #-}+{-# NOINLINE happySpecReduce_1 #-}+{-# NOINLINE happySpecReduce_2 #-}+{-# NOINLINE happySpecReduce_3 #-}+{-# NOINLINE happyReduce #-}+{-# NOINLINE happyMonadReduce #-}+{-# NOINLINE happyGoto #-}+{-# NOINLINE happyFail #-}++-- end of Happy Template.
+ preprocessor/ArrCode.lhs view
@@ -0,0 +1,239 @@+> module ArrCode(+> Arrow,+> bind, anon,+> arr, arrLet, (>>>), arrowExp, applyOp, infixOp, (|||), first,+> VarDecl(VarDecl), letCmd,+> context, anonArgs, toHaskell,+> components,+> Tuple,+> isEmptyTuple, unionTuple, minusTuple, intersectTuple,+> patternTuple, expTuple,+> returnA_exp, arr_exp, arr_exp', compose_op, choice_op, first_exp,+> left_exp, right_exp, app_exp, loop_exp+> ) where++> import Utils++> import Data.Set (Set)+> import qualified Data.Set as Set+> import Language.Haskell.Syntax++> data Arrow = Arrow {+> code :: Code,+> context :: Tuple, -- named input components used by the arrow+> anonArgs :: Int -- number of unnamed arguments+> }++> data VarDecl a = VarDecl SrcLoc HsName a+> deriving (Eq,Show)++> instance Functor VarDecl where+> fmap f (VarDecl loc name a) = VarDecl loc name (f a)++> data Code+> = ReturnA -- returnA = arr id+> | Arr Int HsPat [Binding] HsExp -- arr (first^n (\p -> ... e))+> | Compose Code [Code] Code -- composition of 2 or more elts+> | Op HsExp [Code] -- combinator applied to arrows+> | InfixOp Code HsQOp Code+> | Let [VarDecl Code] Code++> data Binding = BindLet [HsDecl] | BindCase HsPat HsExp++-----------------------------------------------------------------------------+Arrow constants++> compose_op, choice_op :: HsQOp+> returnA_exp, arr_exp, arr_exp', first_exp :: HsExp+> left_exp, right_exp, app_exp, loop_exp :: HsExp++> returnA_exp = HsVar (UnQual (HsIdent "returnA"))+> arr_exp = HsVar (UnQual (HsIdent "arr"))+> arr_exp' = HsVar (UnQual (HsIdent "arr'"))+> compose_op = HsQVarOp (UnQual (HsSymbol ">>>"))+> choice_op = HsQVarOp (UnQual (HsSymbol "|||"))+> first_exp = HsVar (UnQual (HsIdent "first"))+> left_exp = HsCon (UnQual (HsIdent "Left"))+> right_exp = HsCon (UnQual (HsIdent "Right"))+> app_exp = HsVar (UnQual (HsIdent "app"))+> loop_exp = HsVar (UnQual (HsIdent "loop"))++-----------------------------------------------------------------------------+Arrow constructors++> bind :: Set HsName -> Arrow -> Arrow+> bind vars a = a {+> context = context a `minusTuple` vars+> }++> anon :: Int -> Arrow -> Arrow+> anon anonCount a = a {+> anonArgs = anonArgs a + anonCount+> }++> arr :: Int -> Tuple -> HsPat -> HsExp -> Arrow+> arr anons t p e = Arrow {+> code = if same p e then ReturnA else Arr anons p [] e,+> context = t `intersectTuple` freeVars e,+> anonArgs = anons+> }+> where same :: HsPat -> HsExp -> Bool+> same (HsPApp n1 []) (HsCon n2) = n1 == n2+> same (HsPVar n1) (HsVar n2) = UnQual n1 == n2+> same (HsPTuple ps) (HsTuple es) =+> length ps == length es && and (zipWith same ps es)+> same (HsPAsPat n p) e = e == HsVar (UnQual n) || same p e+> same (HsPParen p) e = same p e+> same p (HsParen e) = same p e+> same _ _ = False -- other cases don't arise++> arrLet :: Int -> Tuple -> HsPat -> [HsDecl] -> HsExp -> Arrow+> arrLet anons t p ds e = Arrow {+> code = Arr anons p [BindLet ds] e,+> context = t `intersectTuple` vs,+> anonArgs = anons+> }+> where vs = (freeVars e `Set.union` freeVars ds)+> `Set.difference` definedVars ds++> (>>>) :: Arrow -> Arrow -> Arrow+> a1 >>> a2 = a1 { code = compose (code a1) (code a2) }++> arrowExp :: HsExp -> Arrow+> arrowExp e = Arrow {+> code = if e == returnA_exp then ReturnA else Op e [],+> context = emptyTuple,+> anonArgs = 0+> }++> applyOp :: HsExp -> [Arrow] -> Arrow+> applyOp e as = Arrow {+> code = Op e (map code as),+> context = foldr unionTuple emptyTuple (map context as),+> anonArgs = 0 -- BUG: see below+> }++Setting anonArgs to 0 for infixOp is incorrect, but we can't know the+correct value without types.++> infixOp :: Arrow -> HsQOp -> Arrow -> Arrow+> infixOp a1 op a2 = Arrow {+> code = InfixOp (code a1) op (code a2),+> context = context a1 `unionTuple` context a2,+> anonArgs = 0 -- BUG: as above+> }++> first :: Arrow -> Tuple -> Arrow+> first a ps = Arrow {+> code = Op first_exp [code a],+> context = context a `unionTuple` ps,+> anonArgs = 0+> }++> (|||) :: Arrow -> Arrow -> Arrow+> a1 ||| a2 = Arrow {+> code = InfixOp (code a1) choice_op (code a2),+> context = context a1 `unionTuple` context a2,+> anonArgs = 0+> }++> letCmd :: [VarDecl Arrow] -> Arrow -> Arrow+> letCmd defs a = Arrow {+> code = Let (map (fmap code) defs) (code a),+> context = context a,+> anonArgs = anonArgs a+> }++Composition, with some simplification++> compose :: Code -> Code -> Code+> compose ReturnA a = a+> compose a ReturnA = a+> compose a1@(Arr n1 p1 ds1 e1) a2@(Arr n2 p2 ds2 e2)+> | n1 /= n2 = Compose a1 [] a2 -- could do better, but can this arise?+> | same p2 e1 = Arr n1 p1 (ds1 ++ ds2) e2+> | otherwise = Arr n1 p1 (ds1 ++ BindCase p2 e1:ds2) e2+> where same :: HsPat -> HsExp -> Bool+> same (HsPApp n1 []) (HsCon n2) = n1 == n2+> same (HsPVar n1) (HsVar n2) = UnQual n1 == n2+> same (HsPTuple ps) (HsTuple es) =+> length ps == length es && and (zipWith same ps es)+> same (HsPParen p) e = same p e+> same p (HsParen e) = same p e+> same _ _ = False -- other cases don't arise+> compose (Compose f1 as1 g1) (Compose f2 as2 g2) =+> Compose f1 (as1 ++ (compose g1 f2 : as2)) g2+> compose a (Compose f bs g) =+> Compose (compose a f) bs g+> compose (Compose f as g) b =+> Compose f as (compose g b)+> compose a1 a2 =+> Compose a1 [] a2++-----------------------------------------------------------------------------+Conversion to Haskell++> toHaskell :: Arrow -> HsExp+> toHaskell = toHaskellCode . code++> toHaskellCode :: Code -> HsExp+> toHaskellCode ReturnA =+> returnA_exp+> toHaskellCode (Arr n p bs e) = quoteArr (times n (HsParen . HsApp first_exp) body)+> where body = HsParen (HsLambda undefined [p] (foldr addBinding e bs))+> addBinding :: Binding -> HsExp -> HsExp+> addBinding (BindLet ds) e = HsLet ds e+> addBinding (BindCase p e) e' =+> HsCase e [HsAlt undefined p (HsUnGuardedAlt e') []]+> toHaskellCode (Compose f as g) =+> foldr comp (toHaskellArg g) (map toHaskellArg (f:as))+> where comp f g = HsInfixApp f compose_op g+> toHaskellCode (Op op as) =+> foldl HsApp op (map (paren . toHaskellCode) as)+> toHaskellCode (InfixOp a1 op a2) =+> HsInfixApp (toHaskellArg a1) op (toHaskellArg a2)+> toHaskellCode (Let nas a) =+> HsLet (map toHaskellDecl nas) (toHaskellCode a)+> where toHaskellDecl (VarDecl loc n a) =+> HsPatBind loc (HsPVar n)+> (HsUnGuardedRhs (toHaskellCode a)) []++> toHaskellArg :: Code -> HsExp+> toHaskellArg a = parenInfixArg (toHaskellCode a)++-----------------------------------------------------------------------------+Tuples, representing sets of variables.++> newtype Tuple = Tuple (Set HsName)++Tuple extractors, including matching expression and pattern.++> isEmptyTuple :: Tuple -> Bool+> isEmptyTuple (Tuple t) = Set.null t++> patternTuple :: Tuple -> HsPat+> patternTuple (Tuple t) = tupleP (map HsPVar (Set.toList t))++> expTuple :: Tuple -> HsExp+> expTuple (Tuple t) = tuple (map (HsVar . UnQual) (Set.toList t))++Operations on tuples++> emptyTuple :: Tuple+> emptyTuple = Tuple Set.empty++> unionTuple :: Tuple -> Tuple -> Tuple+> unionTuple (Tuple a) (Tuple b) = Tuple (a `Set.union` b)++Remove all usages of a set of variables.++> minusTuple :: Tuple -> Set HsName -> Tuple+> Tuple t `minusTuple` vs = Tuple (t `Set.difference` vs)++> intersectTuple :: Tuple -> Set HsName -> Tuple+> Tuple t `intersectTuple` vs = Tuple (t `Set.intersection` vs)++The variable components of a pattern.++> components :: HsPat -> Tuple+> components p = Tuple (freeVars p)
+ preprocessor/ArrSyn.lhs view
@@ -0,0 +1,302 @@+Additional abstract syntax for arrow expressions++> module ArrSyn(+> Cmd(..),+> Stmts, Stmt(..), CmdDecl, VarDecl(..),+> Alt(..), GuardedAlts(..), GuardedAlt(..),+> translate -- :: HsPat -> Cmd -> HsExp+> ) where++> import ArrCode+> import State -- Haskell 98 version of Control.Monad.State+> import Utils++> import Data.List(mapAccumL)+> import Data.Map (Map)+> import qualified Data.Map as Map+> import Data.Set (Set)+> import qualified Data.Set as Set+> import Language.Haskell.Syntax++> data Cmd+> = Input HsExp HsExp+> | Kappa SrcLoc [HsPat] Cmd+> | Op HsExp [Cmd]+> | InfixOp Cmd HsQOp Cmd+> | Let [HsDecl] Cmd+> | LetCmd (VarDecl Cmd) Cmd+> | If HsExp Cmd Cmd+> | Case HsExp [Alt]+> | Paren Cmd+> | Do [Stmt] Cmd+> | App Cmd HsExp+> | CmdVar HsName+> deriving (Eq,Show)++> type CmdDecl = (HsName, Cmd)+> type Stmts = ([Stmt], Cmd)++> data Stmt+> = Generator SrcLoc HsPat Cmd+> | RecStmt [Stmt]+> | LetStmt [HsDecl]+> | LetCmdStmt (VarDecl Cmd)+> deriving (Eq,Show)++> data Alt+> = Alt SrcLoc HsPat GuardedAlts [HsDecl]+> deriving (Eq,Show)++> data GuardedAlts+> = UnGuardedAlt Cmd+> | GuardedAlts [GuardedAlt]+> deriving (Eq,Show)++> data GuardedAlt+> = GuardedAlt SrcLoc HsExp Cmd+> deriving (Eq,Show)++-----------------------------------------------------------------------------+Utilities++> pair :: HsExp -> HsExp -> HsExp+> pair e1 e2 = HsTuple [e1, e2]++Turn redefined variables into wildcards, so the new pattern will be legal.++> pairP :: HsPat -> HsPat -> HsPat+> pairP p1 p2 = HsPTuple [hide p1, p2]+> where vs = freeVars p2+> hide p@(HsPVar n)+> | n `Set.member` vs = HsPWildCard+> | otherwise = p+> hide (HsPNeg p) = HsPNeg (hide p)+> hide (HsPInfixApp p1 n p2) = HsPInfixApp (hide p1) n (hide p2)+> hide (HsPApp n ps) = HsPApp n (map hide ps)+> hide (HsPTuple ps) = HsPTuple (map hide ps)+> hide (HsPList ps) = HsPList (map hide ps)+> hide (HsPParen p) = HsPParen (hide p)+> hide (HsPRec n pfs) = HsPRec n (map hideField pfs)+> where hideField (HsPFieldPat f p) =+> HsPFieldPat f (hide p)+> hide (HsPAsPat n p)+> | n `Set.member` vs = hide p+> | otherwise = HsPAsPat n (hide p)+> hide (HsPIrrPat p) = HsPIrrPat (hide p)+> hide p = p++> left, right :: HsExp -> HsExp+> left f = HsApp left_exp (paren f)+> right f = HsApp right_exp (paren f)++> loop :: Arrow -> Arrow+> loop f = applyOp loop_exp [f]++> app, returnA :: Arrow+> app = arrowExp app_exp+> returnA = arrowExp returnA_exp++> returnCmd :: HsExp -> Cmd+> returnCmd = Input returnA_exp++-----------------------------------------------------------------------------+Translation state++> data TransState = TransState {+> locals :: Set HsName, -- vars in scope defined in this proc+> input :: Tuple, -- input components accessible here+> cmdVars :: Map HsName Arrow+> }+ +> startPattern :: HsPat -> (TransState, HsPat)+> startPattern p =+> (TransState {+> locals = freeVars p,+> input = components p,+> cmdVars = Map.empty+> }, p)++> class AddVars a where+> addVars :: TransState -> a -> (TransState, a)++> instance AddVars a => AddVars [a] where+> addVars = mapAccumL addVars++> instance AddVars HsPat where+> addVars s p =+> (s {+> locals = locals s `Set.union` freeVars p,+> input = input s `unionTuple` components p+> }, p)++> instance AddVars HsDecl where+> addVars s d@(HsFunBind (HsMatch _ n _ _ _:_)) =+> (s', d)+> where (s', _) = addVars s (HsPVar n)+> addVars s (HsPatBind loc p rhs decls) =+> (s', HsPatBind loc p' rhs decls)+> where (s', p') = addVars s p+> addVars s d = (s, d)++-----------------------------------------------------------------------------+Translation to Haskell++This is a 2-phase process:+- transCmd generates an abstract arrow combinator language represented+ by the Arrow type, and+- toHaskell turns that into Haskell.++> translate :: HsPat -> Cmd -> HsExp+> translate p c = paren (quoteInit $ toHaskell (transCmd s p' c))+> where (s, p') = startPattern p++The pattern argument is often pseudo-recursively defined in terms of+the context part of the result of these functions. (It's not real+recursion, because that part is independent of the pattern.)++> transCmd :: TransState -> HsPat -> Cmd -> Arrow+> transCmd s p (Input f e)+> | Set.null (freeVars f `Set.intersection` locals s) =+> arr 0 (input s) p e >>> arrowExp f+> | otherwise =+> arr 0 (input s) p (pair f e) >>> app+> transCmd s p (Kappa _ ps c) =+> anon (length ps) $ bind (freeVars ps) $+> transCmd s' (foldl pairP p ps') c+> where (s', ps') = addVars s ps+> transCmd s p (Op op cs) =+> applyOp op (map (transCmd s p) cs)+> transCmd s p (InfixOp c1 op c2) =+> infixOp (transCmd s p c1) op (transCmd s p c2)+> transCmd s p (Let decls c) =+> arrLet (anonArgs a) (input s) p decls' e >>> a+> where (s', decls') = addVars s decls+> (e, a) = transTrimCmd s' c+> transCmd s p (If e c1 c2) =+> arr 0 (input s) p (HsIf e (left e1) (right e2)) >>> (a1 ||| a2)+> where (e1, a1) = transTrimCmd s c1+> (e2, a2) = transTrimCmd s c2+> transCmd s p (Case e as) =+> transCase s p e as+> transCmd s p (Paren c) =+> transCmd s p c+> transCmd s p (Do ss c) =+> transDo s p ss c+> transCmd s p (App c arg) =+> anon (-1) $+> arr (anonArgs a) (input s) p (pair e arg) >>> a+> where (e, a) = transTrimCmd s c++The following awful hack is there because if the command is recursively+defined, computation of its context will not terminate. So we plug in+returnA (empty context) to get an arrow whose code is ignored in the+recomputation of the real arrow for a1.+Mutually recursive bindings will be a bit more tricky.++> transCmd s p (LetCmd (VarDecl loc n c1) c2) =+> letCmd [VarDecl loc n a1] (transCmd s' p c2)+> where (_, a1) = transTrimCmd s' c1+> s' = s { cmdVars = Map.insert n a0 (cmdVars s) }+> s0 = s { cmdVars = Map.insert n returnA (cmdVars s) }+> a0 = transCmd s0 p c1 -- hackety hack+> transCmd s p (CmdVar n) =+> arr (anonArgs a) (input s) p e >>> arrowExp (HsVar (UnQual n))+> where Just a = Map.lookup n (cmdVars s)+> e = expTuple (context a)++Like TransCmd, but use the minimal input pattern. The first component+of the result is the matching expression to build this input.+That is, the result is (e, proc p' -> c) with the minimal p' such that++ proc p -> c = arr (first^n (p -> e)) >>> (proc p' -> c)++where n is the number of anonymous arguments taken by c.++> transTrimCmd :: TransState -> Cmd -> (HsExp, Arrow)+> transTrimCmd s c = (expTuple (context a), a)+> where a = transCmd s (patternTuple (context a)) c++> transDo :: TransState -> HsPat -> [Stmt] -> Cmd -> Arrow+> transDo s p [] c =+> transCmd s p c+> transDo s p (Generator _ pg cg:ss) c =+> if isEmptyTuple u then+> transCmd s p cg >>> transDo s' pg ss c+> else+> arr 0 (input s) p (pair eg (expTuple u)) >>> first ag u >>> a+> where (s', pg') = addVars s pg+> a = bind (freeVars pg)+> (transDo s' (pairP pg' (patternTuple u)) ss c)+> u = context a+> (eg, ag) = transTrimCmd s cg+> transDo s p (LetStmt decls:ss) c =+> transCmd s p (Let decls (Do ss c))+> transDo s p (RecStmt rss:ss) c =+> bind defined+> (loop (transDo s' (pairP p (irrPat (patternTuple feedback)))+> rss'+> (returnCmd (pair output (expTuple feedback)))+> ) >>> a)+> where defined = definedVars rss+> (s', rss') = addVars s rss+> (output, a) = transTrimCmd s' (Do ss c)+> feedback = context (transDo s' p rss'+> (returnCmd (foldr pair output $ map (HsVar . UnQual) $ Set.toList defined)))+> `intersectTuple` defined+> transDo s p (LetCmdStmt vdecl:ss) c =+> transCmd s p (LetCmd vdecl (Do ss c))++The set of variables defined by a list of statements in a rec.++> instance DefinedVars Stmt where+> definedVars (Generator _ p _) = freeVars p+> definedVars (LetStmt decls) = definedVars decls+> definedVars (RecStmt stmts) = definedVars stmts+> definedVars (LetCmdStmt _vdecl) = Set.empty++> instance AddVars Stmt where+> addVars s (Generator loc p c) =+> (s', Generator loc p' c)+> where (s', p') = addVars s p+> addVars s (LetStmt decls) =+> (s', LetStmt decls')+> where (s', decls') = addVars s decls+> addVars s (RecStmt stmts) =+> (s', RecStmt stmts')+> where (s', stmts') = addVars s stmts+> addVars s stmt@(LetCmdStmt _vdecl) =+> (s, stmt)++Translation of case commands uses a right-nested sum,+corresponding to the right-associativity of (|||).+(In future: use a balanced sum.)++The state kept while traversing the expression is+ (count of rhss, rhss in reverse order)++> transCase :: TransState -> HsPat -> HsExp -> [Alt] -> Arrow+> transCase s p e as =+> arr 0 (input s) p (HsCase e as') >>> foldr1 (|||) (reverse cases)+> where (as', (ncases, cases)) =+> runState (mapM (transAlt s) as) (0, [])+> transAlt s (Alt loc p gas decls) = do+> let (s', p') = addVars s p+> (s'', decls') = addVars s' decls+> gas' <- transGuardedAlts s'' gas+> return (HsAlt loc p' gas' decls')+> transGuardedAlts s (UnGuardedAlt c) = do+> body <- newAlt s c+> return (HsUnGuardedAlt body)+> transGuardedAlts s (GuardedAlts gas) = do+> gas' <- mapM (transGuardedAlt s) gas+> return (HsGuardedAlts gas')+> transGuardedAlt s (GuardedAlt loc e c) = do+> body <- newAlt s c+> return (HsGuardedAlt loc e body)+> newAlt s c = do+> let (e, a) = transTrimCmd s c+> (n, as) <- get+> put (n+1, a:as)+> return (label n e)+> label n e = times n right+> (if n < ncases-1 then left e else e)
+ preprocessor/Lexer.hs view
@@ -0,0 +1,579 @@+-- #hide+-----------------------------------------------------------------------------+-- |+-- Module : Lexer+-- Copyright : (c) The GHC Team, 1997-2000+-- License : BSD-style (see the file libraries/base/LICENSE)+-- +-- Maintainer : libraries@haskell.org+-- Stability : experimental+-- Portability : portable+--+-- Lexer for Haskell.+--+-----------------------------------------------------------------------------++-- ToDo: Introduce different tokens for decimal, octal and hexadecimal (?)+-- ToDo: FloatTok should have three parts (integer part, fraction, exponent) (?)+-- ToDo: Use a lexical analyser generator (lx?)++module Lexer (Token(..), lexer) where++import Language.Haskell.ParseMonad++import Data.Char (isAlpha, isLower, isUpper, toLower,+ isDigit, isHexDigit, isOctDigit, isSpace,+ ord, chr, digitToInt)+import Data.Ratio++data Token+ = VarId String+ | QVarId (String,String)+ | ConId String+ | QConId (String,String)+ | VarSym String+ | ConSym String+ | QVarSym (String,String)+ | QConSym (String,String)+ | IntTok Integer+ | FloatTok Rational+ | Character Char+ | StringTok String++-- Symbols++ | LeftParen+ | RightParen+ | SemiColon+ | LeftCurly+ | RightCurly+ | VRightCurly -- a virtual close brace+ | LeftSquare+ | RightSquare+ | Splice+ | LeftQuote+ | RightQuote+ | Comma+ | Underscore+ | BackQuote++-- Reserved operators++ | DotDot+ | Colon+ | DoubleColon+ | Equals+ | Backslash+ | Bar+ | LeftArrow+ | RightArrow+ | At+ | Tilde+ | DoubleArrow+ | Minus+ | Exclamation+ | LeftArrowTail -- added for arrows+ | RightArrowTail -- added for arrows+ | LeftArrowDTail -- added for arrows+ | RightArrowDTail -- added for arrows+ | LeftBanana -- added for arrows+ | RightBanana -- added for arrows++-- Reserved Ids++ | KW_Case+ | KW_Class+ | KW_Data+ | KW_Default+ | KW_Deriving+ | KW_Do+ | KW_Else+ | KW_Foreign+ | KW_If+ | KW_Import+ | KW_In+ | KW_Infix+ | KW_InfixL+ | KW_InfixR+ | KW_Instance+ | KW_Let+ | KW_Module+ | KW_NewType+ | KW_Of+ | KW_Then+ | KW_Type+ | KW_Where++-- Special Ids++ | KW_As+ | KW_Export+ | KW_Hiding+ | KW_Qualified+ | KW_Safe+ | KW_Unsafe+ | KW_Proc -- added for arrows+ | KW_Rec -- added for arrows+ | KW_Form -- added for arrows+ | KW_Cmd -- added for arrows++ | EOF+ deriving (Eq,Show)++reserved_ops :: [(String,Token)]+reserved_ops = [+ ( "..", DotDot ),+ ( ":", Colon ),+ ( "::", DoubleColon ),+ ( "=", Equals ),+ ( "\\", Backslash ),+ ( "|", Bar ),+ ( "<-", LeftArrow ),+ ( "->", RightArrow ),+ ( "@", At ),+ ( "~", Tilde ),+ ( "=>", DoubleArrow ),+ ( "-<", LeftArrowTail ), -- added for arrows+ ( ">-", RightArrowTail ), -- added for arrows+ ( "-<<", LeftArrowDTail ), -- added for arrows+ ( ">>-", RightArrowDTail ), -- added for arrows+ ( "\\<", Backslash ) -- added for arrows+ ]++special_varops :: [(String,Token)]+special_varops = [+ ( "-", Minus ), --ToDo: shouldn't be here+ ( "!", Exclamation ) --ditto+ ]++reserved_ids :: [(String,Token)]+reserved_ids = [+ ( "_", Underscore ),+ ( "case", KW_Case ),+ ( "class", KW_Class ),+ ( "cmd", KW_Cmd ), -- added for arrows+ ( "data", KW_Data ),+ ( "default", KW_Default ),+ ( "deriving", KW_Deriving ),+ ( "do", KW_Do ),+ ( "else", KW_Else ),+ ( "foreign", KW_Foreign ),+ ( "if", KW_If ),+ ( "import", KW_Import ),+ ( "in", KW_In ),+ ( "infix", KW_Infix ),+ ( "infixl", KW_InfixL ),+ ( "infixr", KW_InfixR ),+ ( "instance", KW_Instance ),+ ( "let", KW_Let ),+ ( "module", KW_Module ),+ ( "newtype", KW_NewType ),+ ( "of", KW_Of ),+ ( "proc", KW_Proc ), -- added for arrows+ ( "rec", KW_Rec ), -- added for arrows+ ( "then", KW_Then ),+ ( "type", KW_Type ),+ ( "where", KW_Where )+ ]++special_varids :: [(String,Token)]+special_varids = [+ ( "as", KW_As ),+ ( "export", KW_Export ),+ ( "hiding", KW_Hiding ),+ ( "qualified", KW_Qualified ),+ ( "safe", KW_Safe ),+ ( "unsafe", KW_Unsafe )+ ]++isIdent, isSymbol :: Char -> Bool+isIdent c = isAlpha c || isDigit c || c == '\'' || c == '_'+isSymbol c = elem c ":!#$%&*+./<=>?@\\^|-~"++matchChar :: Char -> String -> Lex a ()+matchChar c msg = do+ s <- getInput+ if null s || head s /= c then fail msg else discard 1++-- The top-level lexer.+-- We need to know whether we are at the beginning of the line to decide+-- whether to insert layout tokens.++lexer :: (Token -> P a) -> P a+lexer = runL $ do+ bol <- checkBOL+ bol <- lexWhiteSpace bol+ startToken+ if bol then lexBOL else lexToken++lexWhiteSpace :: Bool -> Lex a Bool+lexWhiteSpace bol = do+ s <- getInput+ case s of+ '{':'-':_ -> do+ discard 2+ bol <- lexNestedComment bol+ lexWhiteSpace bol+ '-':'-':rest | all (== '-') (takeWhile isSymbol rest) -> do+ lexWhile (== '-')+ lexWhile (/= '\n')+ s' <- getInput+ case s' of+ [] -> fail "Unterminated end-of-line comment"+ _ -> do+ lexNewline+ lexWhiteSpace True+ '\n':_ -> do+ lexNewline+ lexWhiteSpace True+ '\t':_ -> do+ lexTab+ lexWhiteSpace bol+ c:_ | isSpace c -> do+ discard 1+ lexWhiteSpace bol+ _ -> return bol++lexNestedComment :: Bool -> Lex a Bool+lexNestedComment bol = do+ s <- getInput+ case s of+ '-':'}':_ -> discard 2 >> return bol+ '{':'-':_ -> do+ discard 2+ bol <- lexNestedComment bol -- rest of the subcomment+ lexNestedComment bol -- rest of this comment+ '\t':_ -> lexTab >> lexNestedComment bol+ '\n':_ -> lexNewline >> lexNestedComment True+ _:_ -> discard 1 >> lexNestedComment bol+ [] -> fail "Unterminated nested comment"++-- When we are lexing the first token of a line, check whether we need to+-- insert virtual semicolons or close braces due to layout.++lexBOL :: Lex a Token+lexBOL = do+ pos <- getOffside+ case pos of+ LT -> do+ -- trace "layout: inserting '}'\n" $+ -- Set col to 0, indicating that we're still at the+ -- beginning of the line, in case we need a semi-colon too.+ -- Also pop the context here, so that we don't insert+ -- another close brace before the parser can pop it.+ setBOL+ popContextL "lexBOL"+ return VRightCurly+ EQ ->+ -- trace "layout: inserting ';'\n" $+ return SemiColon+ GT ->+ lexToken++lexToken :: Lex a Token+lexToken = do+ s <- getInput+ case s of+ [] -> return EOF++ '0':c:d:_ | toLower c == 'o' && isOctDigit d -> do+ discard 2+ n <- lexOctal+ return (IntTok n)+ | toLower c == 'x' && isHexDigit d -> do+ discard 2+ n <- lexHexadecimal+ return (IntTok n)++ '$':'(':_ -> do+ discard 2+ return Splice++ '[':'|':_ -> do+ discard 2+ return LeftQuote++ '|':']':_ -> do+ discard 2+ return RightQuote ++ '(':'|':c:_ | not (isSymbol c) -> do+ discard 2+ return LeftBanana++ '|':')':_ -> do+ discard 2+ return RightBanana++ c:_ | isDigit c -> lexDecimalOrFloat++ | isUpper c -> lexConIdOrQual ""++ | isLower c || c == '_' -> do+ ident <- lexWhile isIdent+ return $ case lookup ident (reserved_ids ++ special_varids) of+ Just keyword -> keyword+ Nothing -> VarId ident++ | isSymbol c -> do+ sym <- lexWhile isSymbol+ return $ case lookup sym (reserved_ops ++ special_varops) of+ Just t -> t+ Nothing -> case c of+ ':' -> ConSym sym+ _ -> VarSym sym++ | otherwise -> do+ discard 1+ case c of++ -- First the special symbols+ '(' -> return LeftParen+ ')' -> return RightParen+ ',' -> return Comma+ ';' -> return SemiColon+ '[' -> return LeftSquare+ ']' -> return RightSquare+ '`' -> return BackQuote+ '{' -> do+ pushContextL NoLayout+ return LeftCurly+ '}' -> do+ popContextL "lexToken"+ return RightCurly++ '\'' -> do+ c2 <- lexChar+ matchChar '\'' "Improperly terminated character constant"+ return (Character c2)++ '"' -> lexString++ _ -> fail ("Illegal character \'" ++ show c ++ "\'\n")++lexDecimalOrFloat :: Lex a Token+lexDecimalOrFloat = do+ ds <- lexWhile isDigit+ rest <- getInput+ case rest of+ ('.':d:_) | isDigit d -> do+ discard 1+ frac <- lexWhile isDigit+ let num = parseInteger 10 (ds ++ frac)+ decimals = toInteger (length frac)+ exponent <- do+ rest2 <- getInput+ case rest2 of+ 'e':_ -> lexExponent+ 'E':_ -> lexExponent+ _ -> return 0+ return (FloatTok ((num%1) * 10^^(exponent - decimals)))+ e:_ | toLower e == 'e' -> do+ exponent <- lexExponent+ return (FloatTok ((parseInteger 10 ds%1) * 10^^exponent))+ _ -> return (IntTok (parseInteger 10 ds))++ where+ lexExponent :: Lex a Integer+ lexExponent = do+ discard 1 -- 'e' or 'E'+ r <- getInput+ case r of+ '+':d:_ | isDigit d -> do+ discard 1+ lexDecimal+ '-':d:_ | isDigit d -> do+ discard 1+ n <- lexDecimal+ return (negate n)+ d:_ | isDigit d -> lexDecimal+ _ -> fail "Float with missing exponent"++lexConIdOrQual :: String -> Lex a Token+lexConIdOrQual qual = do+ con <- lexWhile isIdent+ let conid | null qual = ConId con+ | otherwise = QConId (qual,con)+ qual' | null qual = con+ | otherwise = qual ++ '.':con+ just_a_conid <- alternative (return conid)+ rest <- getInput+ case rest of+ '.':c:_+ | isLower c || c == '_' -> do -- qualified varid?+ discard 1+ ident <- lexWhile isIdent+ case lookup ident reserved_ids of+ -- cannot qualify a reserved word+ Just _ -> just_a_conid+ Nothing -> return (QVarId (qual', ident))++ | isUpper c -> do -- qualified conid?+ discard 1+ lexConIdOrQual qual'++ | isSymbol c -> do -- qualified symbol?+ discard 1+ sym <- lexWhile isSymbol+ case lookup sym reserved_ops of+ -- cannot qualify a reserved operator+ Just _ -> just_a_conid+ Nothing -> return $ case c of+ ':' -> QConSym (qual', sym)+ _ -> QVarSym (qual', sym)++ _ -> return conid -- not a qualified thing++lexChar :: Lex a Char+lexChar = do+ r <- getInput+ case r of+ '\\':_ -> lexEscape+ c:_ -> discard 1 >> return c+ [] -> fail "Incomplete character constant"++lexString :: Lex a Token+lexString = loop ""+ where+ loop s = do+ r <- getInput+ case r of+ '\\':'&':_ -> do+ discard 2+ loop s+ '\\':c:_ | isSpace c -> do+ discard 1+ lexWhiteChars+ matchChar '\\' "Illegal character in string gap"+ loop s+ | otherwise -> do+ ce <- lexEscape+ loop (ce:s)+ '"':_ -> do+ discard 1+ return (StringTok (reverse s))+ c:_ -> do+ discard 1+ loop (c:s)+ [] -> fail "Improperly terminated string"++ lexWhiteChars :: Lex a ()+ lexWhiteChars = do+ s <- getInput+ case s of+ '\n':_ -> do+ lexNewline+ lexWhiteChars+ '\t':_ -> do+ lexTab+ lexWhiteChars+ c:_ | isSpace c -> do+ discard 1+ lexWhiteChars+ _ -> return ()++lexEscape :: Lex a Char+lexEscape = do+ discard 1+ r <- getInput+ case r of++-- Production charesc from section B.2 (Note: \& is handled by caller)++ 'a':_ -> discard 1 >> return '\a'+ 'b':_ -> discard 1 >> return '\b'+ 'f':_ -> discard 1 >> return '\f'+ 'n':_ -> discard 1 >> return '\n'+ 'r':_ -> discard 1 >> return '\r'+ 't':_ -> discard 1 >> return '\t'+ 'v':_ -> discard 1 >> return '\v'+ '\\':_ -> discard 1 >> return '\\'+ '"':_ -> discard 1 >> return '\"'+ '\'':_ -> discard 1 >> return '\''++-- Production ascii from section B.2++ '^':c:_ -> discard 2 >> cntrl c+ 'N':'U':'L':_ -> discard 3 >> return '\NUL'+ 'S':'O':'H':_ -> discard 3 >> return '\SOH'+ 'S':'T':'X':_ -> discard 3 >> return '\STX'+ 'E':'T':'X':_ -> discard 3 >> return '\ETX'+ 'E':'O':'T':_ -> discard 3 >> return '\EOT'+ 'E':'N':'Q':_ -> discard 3 >> return '\ENQ'+ 'A':'C':'K':_ -> discard 3 >> return '\ACK'+ 'B':'E':'L':_ -> discard 3 >> return '\BEL'+ 'B':'S':_ -> discard 2 >> return '\BS'+ 'H':'T':_ -> discard 2 >> return '\HT'+ 'L':'F':_ -> discard 2 >> return '\LF'+ 'V':'T':_ -> discard 2 >> return '\VT'+ 'F':'F':_ -> discard 2 >> return '\FF'+ 'C':'R':_ -> discard 2 >> return '\CR'+ 'S':'O':_ -> discard 2 >> return '\SO'+ 'S':'I':_ -> discard 2 >> return '\SI'+ 'D':'L':'E':_ -> discard 3 >> return '\DLE'+ 'D':'C':'1':_ -> discard 3 >> return '\DC1'+ 'D':'C':'2':_ -> discard 3 >> return '\DC2'+ 'D':'C':'3':_ -> discard 3 >> return '\DC3'+ 'D':'C':'4':_ -> discard 3 >> return '\DC4'+ 'N':'A':'K':_ -> discard 3 >> return '\NAK'+ 'S':'Y':'N':_ -> discard 3 >> return '\SYN'+ 'E':'T':'B':_ -> discard 3 >> return '\ETB'+ 'C':'A':'N':_ -> discard 3 >> return '\CAN'+ 'E':'M':_ -> discard 2 >> return '\EM'+ 'S':'U':'B':_ -> discard 3 >> return '\SUB'+ 'E':'S':'C':_ -> discard 3 >> return '\ESC'+ 'F':'S':_ -> discard 2 >> return '\FS'+ 'G':'S':_ -> discard 2 >> return '\GS'+ 'R':'S':_ -> discard 2 >> return '\RS'+ 'U':'S':_ -> discard 2 >> return '\US'+ 'S':'P':_ -> discard 2 >> return '\SP'+ 'D':'E':'L':_ -> discard 3 >> return '\DEL'++-- Escaped numbers++ 'o':c:_ | isOctDigit c -> do+ discard 1+ n <- lexOctal+ checkChar n+ 'x':c:_ | isHexDigit c -> do+ discard 1+ n <- lexHexadecimal+ checkChar n+ c:_ | isDigit c -> do+ n <- lexDecimal+ checkChar n++ _ -> fail "Illegal escape sequence"++ where+ checkChar n | n <= 0x10FFFF = return (chr (fromInteger n))+ checkChar _ = fail "Character constant out of range"++-- Production cntrl from section B.2++ cntrl :: Char -> Lex a Char+ cntrl c | c >= '@' && c <= '_' = return (chr (ord c - ord '@'))+ cntrl _ = fail "Illegal control character"++-- assumes at least one octal digit+lexOctal :: Lex a Integer+lexOctal = do+ ds <- lexWhile isOctDigit+ return (parseInteger 8 ds)++-- assumes at least one hexadecimal digit+lexHexadecimal :: Lex a Integer+lexHexadecimal = do+ ds <- lexWhile isHexDigit+ return (parseInteger 16 ds)++-- assumes at least one decimal digit+lexDecimal :: Lex a Integer+lexDecimal = do+ ds <- lexWhile isDigit+ return (parseInteger 10 ds)++-- Stolen from Hugs's Prelude+parseInteger :: Integer -> String -> Integer+parseInteger radix ds =+ foldl1 (\n d -> n * radix + d) (map (toInteger . digitToInt) ds)
+ preprocessor/Main.lhs view
@@ -0,0 +1,114 @@+> module Main (main) where++> import Data.List+> import System.Console.GetOpt+> import System.Environment+> import System.Exit+> import System.IO++> import Language.Haskell.ParseMonad+> import Language.Haskell.Syntax+> import Language.Haskell.Pretty++> import Parser++> data Flag = ParsePretty PPLayout -- pretty print in this style+> | Help -- give short usage info++> usage :: String -> String+> usage progName = unlines [+> "usage: " ++ progName +++> " [OPTION]... [FILENAME] [SOURCE] [DEST]",+> "Read arrow notation from SOURCE (derived from FILENAME) and write",+> "standard Haskell to DEST.",+> "If no FILENAME, use SOURCE as the original name.",+> "If no DEST or if DEST is `-', write to standard output.",+> "If no SOURCE or if SOURCE is `-', read standard input."+> ]++> sourceError :: SrcLoc -> String -> IO a+> sourceError loc mesg = do+> hPutStrLn stderr+> (srcFilename loc ++ ":" ++ show (srcLine loc) ++ ": " ++ mesg +++> " in column " ++ show (srcColumn loc))+> exitFailure++> programError :: String -> IO a+> programError mesg = do+> progName <- getProgName+> hPutStrLn stderr (progName ++ ": " ++ mesg)+> exitFailure++> usageError :: String -> IO a+> usageError mesg = do+> progName <- getProgName+> programError (mesg +++> "Try `" ++ progName ++ " --help' for more information.")++> options :: [OptDescr Flag]+> options =+> [ Option ['p'] ["pretty"] (OptArg pStyle "STYLE")+> ("pretty print in STYLE[" +++> concat (intersperse "|" (map fst styles)) +++> "](default = " ++ fst (head styles) ++ ")"),+> Option ['h','?'] ["help"] (NoArg Help) "display this help and exit"]++Available styles: first is default++> styles :: [(String, PPLayout)]+> styles = [+> ("offside", PPOffsideRule),+> ("semicolon", PPSemiColon),+> ("inline", PPInLine),+> ("none", PPNoLayout)+> ]++> pStyle :: Maybe String -> Flag+> pStyle Nothing = ParsePretty defaultStyle+> pStyle (Just s) = ParsePretty (lookupStyle s)++> defaultStyle :: PPLayout+> defaultStyle = snd (head styles)++> lookupStyle :: String -> PPLayout+> lookupStyle prefix =+> head ([s | (n, s) <- styles, prefix `isPrefixOf` n] ++ [defaultStyle])++> main :: IO ()+> main = do cmdline <- getArgs+> mainHugs cmdline++> mainHugs :: [String] -> IO ()+> mainHugs cmdline =+> case getOpt Permute options cmdline of+> (flags, args, []) -> do+> action <- case flags of+> [] -> return (ParsePretty defaultStyle)+> [f] -> return f+> _ -> usageError "too many options\n"+> (origName, inName, outName) <- case args of+> [] -> return ("-","-","-")+> [i] -> return ( i , i ,"-")+> [i,o] -> return ( i , i , o )+> [n,i,o] -> return ( n , i , o )+> _ -> usageError "too many arguments\n"+> let mode = defaultParseMode {parseFilename = origName}+> inp <- if inName == "-" then getContents else+> readFile inName `catch` \_err ->+> programError ("can't read `" ++ inName ++ "'")+> outH <- if outName == "-" then return stdout else+> openFile outName WriteMode `catch` \_err ->+> programError ("can't write to `" ++ outName ++ "'")+> outp <- case action of+> ParsePretty layout -> case parseModuleWithMode mode inp of+> ParseOk mod ->+> return $ prettyPrintWithMode defaultMode{+> layout = layout,+> linePragmas = True+> } mod+> ParseFailed loc err -> sourceError loc err+> Help -> do+> progName <- getProgName+> return $ usageInfo (usage progName) options+> hPutStrLn outH outp+> (_, _, errors) -> usageError (concat errors)
+ preprocessor/Parser.ly view
@@ -0,0 +1,994 @@+> {+> -----------------------------------------------------------------------------+> -- |+> -- Module : Parser+> -- Copyright : (c) Simon Marlow, Sven Panne 1997-2000+> -- License : BSD-style (see the file libraries/base/LICENSE)+> --+> -- Maintainer : libraries@haskell.org+> -- Stability : experimental+> -- Portability : portable+> --+> -- Haskell parser.+> --+> -----------------------------------------------------------------------------+>+> module Parser (+> parseModule, parseModuleWithMode,+> ParseMode(..), defaultParseMode, ParseResult(..), hsQuote) where+> +> import Language.Haskell.Syntax+> import Language.Haskell.ParseMonad+> import Lexer+> import Utils (hsQuote, hsSplice) +> import Language.Haskell.ParseUtils+> +> import qualified ArrSyn -- added for arrows+> }++ToDo: Check exactly which names must be qualified with Prelude (commas and friends)+ToDo: Inst (MPCs?)+ToDo: Polish constr a bit+ToDo: Ugly: exp0b is used for lhs, pat, exp0, ...+ToDo: Differentiate between record updates and labeled construction.++-----------------------------------------------------------------------------+Conflicts: 2 shift/reduce++2 for ambiguity in 'case x of y | let z = y in z :: Bool -> b'+ (don't know whether to reduce 'Bool' as a btype or shift the '->'.+ Similarly lambda and if. The default resolution in favour of the+ shift means that a guard can never end with a type signature.+ In mitigation: it's a rare case and no Haskell implementation+ allows these, because it would require unbounded lookahead.)+ There are 2 conflicts rather than one because contexts are parsed+ as btypes (cf ctype).++-----------------------------------------------------------------------------++> %token+> VARID { VarId $$ }+> QVARID { QVarId $$ }+> CONID { ConId $$ }+> QCONID { QConId $$ }+> VARSYM { VarSym $$ }+> CONSYM { ConSym $$ }+> QVARSYM { QVarSym $$ }+> QCONSYM { QConSym $$ }+> INT { IntTok $$ }+> RATIONAL { FloatTok $$ }+> CHAR { Character $$ }+> STRING { StringTok $$ }++Symbols++> '(' { LeftParen }+> ')' { RightParen }+> ';' { SemiColon }+> '{' { LeftCurly }+> '}' { RightCurly }+> vccurly { VRightCurly } -- a virtual close brace+> '[' { LeftSquare }+> ']' { RightSquare }+> '$(' { Splice }+> '[|' { LeftQuote }+> '|]' { RightQuote }+> ',' { Comma }+> '_' { Underscore }+> '`' { BackQuote }++Reserved operators++> '..' { DotDot }+> ':' { Colon }+> '::' { DoubleColon }+> '=' { Equals }+> '\\' { Backslash }+> '|' { Bar }+> '<-' { LeftArrow }+> '->' { RightArrow }+> '@' { At }+> '~' { Tilde }+> '=>' { DoubleArrow }+> '-<' { LeftArrowTail } -- added for arrows+> '>-' { RightArrowTail } -- added for arrows+> '-<<' { LeftArrowDTail } -- added for arrows+> '>>-' { RightArrowDTail } -- added for arrows+> '(|' { LeftBanana } -- added for arrows+> '|)' { RightBanana } -- added for arrows+> '-' { Minus }+> '!' { Exclamation }++Reserved Ids++> 'case' { KW_Case }+> 'class' { KW_Class }+> 'data' { KW_Data }+> 'default' { KW_Default }+> 'deriving' { KW_Deriving }+> 'do' { KW_Do }+> 'else' { KW_Else }+> 'foreign' { KW_Foreign }+> 'if' { KW_If }+> 'import' { KW_Import }+> 'in' { KW_In }+> 'infix' { KW_Infix }+> 'infixl' { KW_InfixL }+> 'infixr' { KW_InfixR }+> 'instance' { KW_Instance }+> 'let' { KW_Let }+> 'module' { KW_Module }+> 'newtype' { KW_NewType }+> 'of' { KW_Of }+> 'then' { KW_Then }+> 'type' { KW_Type }+> 'where' { KW_Where }++Special Ids++> 'as' { KW_As }+> 'export' { KW_Export }+> 'hiding' { KW_Hiding }+> 'qualified' { KW_Qualified }+> 'safe' { KW_Safe }+> 'unsafe' { KW_Unsafe }+> 'proc' { KW_Proc } -- added for arrows+> 'rec' { KW_Rec } -- added for arrows+> 'cmd' { KW_Cmd } -- added for arrows++> %monad { P }+> %lexer { lexer } { EOF }+> %name parse+> %tokentype { Token }+> %%++-----------------------------------------------------------------------------+Module Header++> module :: { HsModule }+> : srcloc 'module' modid maybeexports 'where' body+> { HsModule $1 $3 $4 (fst $6) (snd $6) }+> | srcloc body+> { HsModule $1 main_mod (Just [HsEVar (UnQual main_name)])+> (fst $2) (snd $2) }++> body :: { ([HsImportDecl],[HsDecl]) }+> : '{' bodyaux '}' { $2 }+> | open bodyaux close { $2 }++> bodyaux :: { ([HsImportDecl],[HsDecl]) }+> : optsemis impdecls semis topdecls { (reverse $2, $4) }+> | optsemis topdecls { ([], $2) }+> | optsemis impdecls optsemis { (reverse $2, []) }+> | optsemis { ([], []) }++> semis :: { () }+> : optsemis ';' { () }++> optsemis :: { () }+> : semis { () }+> | {- empty -} { () }++-----------------------------------------------------------------------------+The Export List++> maybeexports :: { Maybe [HsExportSpec] }+> : exports { Just $1 }+> | {- empty -} { Nothing }++> exports :: { [HsExportSpec] }+> : '(' exportlist optcomma ')' { reverse $2 }+> | '(' optcomma ')' { [] }++> optcomma :: { () }+> : ',' { () }+> | {- empty -} { () }++> exportlist :: { [HsExportSpec] }+> : exportlist ',' export { $3 : $1 }+> | export { [$1] }++> export :: { HsExportSpec }+> : qvar { HsEVar $1 }+> | qtyconorcls { HsEAbs $1 }+> | qtyconorcls '(' '..' ')' { HsEThingAll $1 }+> | qtyconorcls '(' ')' { HsEThingWith $1 [] }+> | qtyconorcls '(' cnames ')' { HsEThingWith $1 (reverse $3) }+> | 'module' modid { HsEModuleContents $2 }++-----------------------------------------------------------------------------+Import Declarations++> impdecls :: { [HsImportDecl] }+> : impdecls semis impdecl { $3 : $1 }+> | impdecl { [$1] }++> impdecl :: { HsImportDecl }+> : srcloc 'import' optqualified modid maybeas maybeimpspec+> { HsImportDecl $1 $4 $3 $5 $6 }++> optqualified :: { Bool }+> : 'qualified' { True }+> | {- empty -} { False }++> maybeas :: { Maybe Module }+> : 'as' modid { Just $2 }+> | {- empty -} { Nothing }+++> maybeimpspec :: { Maybe (Bool, [HsImportSpec]) }+> : impspec { Just $1 }+> | {- empty -} { Nothing }++> impspec :: { (Bool, [HsImportSpec]) }+> : opthiding '(' importlist optcomma ')' { ($1, reverse $3) }+> | opthiding '(' optcomma ')' { ($1, []) }++> opthiding :: { Bool }+> : 'hiding' { True }+> | {- empty -} { False }++> importlist :: { [HsImportSpec] }+> : importlist ',' importspec { $3 : $1 }+> | importspec { [$1] }++> importspec :: { HsImportSpec }+> : var { HsIVar $1 }+> | tyconorcls { HsIAbs $1 }+> | tyconorcls '(' '..' ')' { HsIThingAll $1 }+> | tyconorcls '(' ')' { HsIThingWith $1 [] }+> | tyconorcls '(' cnames ')' { HsIThingWith $1 (reverse $3) }++> cnames :: { [HsCName] }+> : cnames ',' cname { $3 : $1 }+> | cname { [$1] }++> cname :: { HsCName }+> : var { HsVarName $1 }+> | con { HsConName $1 }++-----------------------------------------------------------------------------+Fixity Declarations++> fixdecl :: { HsDecl }+> : srcloc infix prec ops { HsInfixDecl $1 $2 $3 (reverse $4) }++> prec :: { Int }+> : {- empty -} { 9 }+> | INT {% checkPrec $1 }++> infix :: { HsAssoc }+> : 'infix' { HsAssocNone }+> | 'infixl' { HsAssocLeft }+> | 'infixr' { HsAssocRight }++> ops :: { [HsOp] }+> : ops ',' op { $3 : $1 }+> | op { [$1] }++-----------------------------------------------------------------------------+Top-Level Declarations++Note: The report allows topdecls to be empty. This would result in another+shift/reduce-conflict, so we don't handle this case here, but in bodyaux.++> topdecls :: { [HsDecl] }+> : topdecls1 optsemis {% checkRevDecls $1 }++> topdecls1 :: { [HsDecl] }+> : topdecls1 semis topdecl { $3 : $1 }+> | topdecl { [$1] }++> topdecl :: { HsDecl }+> : srcloc 'type' simpletype '=' type+> { HsTypeDecl $1 (fst $3) (snd $3) $5 }+> | srcloc 'data' ctype '=' constrs deriving+> {% do { (cs,c,t) <- checkDataHeader $3;+> return (HsDataDecl $1 cs c t (reverse $5) $6) } }+> | srcloc 'newtype' ctype '=' constr deriving+> {% do { (cs,c,t) <- checkDataHeader $3;+> return (HsNewTypeDecl $1 cs c t $5 $6) } }+> | srcloc 'class' ctype optcbody+> {% do { (cs,c,vs) <- checkClassHeader $3;+> return (HsClassDecl $1 cs c vs $4) } }+> | srcloc 'instance' ctype optvaldefs+> {% do { (cs,c,ts) <- checkInstHeader $3;+> return (HsInstDecl $1 cs c ts $4) } }+> | srcloc 'default' '(' typelist ')'+> { HsDefaultDecl $1 $4 }+> | foreigndecl { $1 }+> | decl { $1 }++> typelist :: { [HsType] }+> : types { reverse $1 }+> | type { [$1] }+> | {- empty -} { [] }++> decls :: { [HsDecl] }+> : optsemis decls1 optsemis {% checkRevDecls $2 }+> | optsemis { [] }++> decls1 :: { [HsDecl] }+> : decls1 semis decl { $3 : $1 }+> | decl { [$1] }++> decl :: { HsDecl }+> : signdecl { $1 }+> | fixdecl { $1 }+> | valdef { $1 }++> decllist :: { [HsDecl] }+> : '{' decls '}' { $2 }+> | open decls close { $2 }++> signdecl :: { HsDecl }+> : srcloc vars '::' ctype { HsTypeSig $1 (reverse $2) $4 }++ATTENTION: Dirty Hackery Ahead! If the second alternative of vars is var+instead of qvar, we get another shift/reduce-conflict. Consider the+following programs:++ { (+) :: ... } only var+ { (+) x y = ... } could (incorrectly) be qvar++We re-use expressions for patterns, so a qvar would be allowed in patterns+instead of a var only (which would be correct). But deciding what the + is,+would require more lookahead. So let's check for ourselves...++> vars :: { [HsName] }+> : vars ',' var { $3 : $1 }+> | qvar {% do { n <- checkUnQual $1;+> return [n] } }++Foreign declarations+- calling conventions are uninterpreted+- external entities are not parsed+- special ids are not allowed as internal names++> foreigndecl :: { HsDecl }+> : srcloc 'foreign' 'import' VARID optsafety optentity fvar '::' type+> { HsForeignImport $1 $4 $5 $6 $7 $9 }+> | srcloc 'foreign' 'export' VARID optentity fvar '::' type+> { HsForeignExport $1 $4 $5 $6 $8 }++> optsafety :: { HsSafety }+> : 'safe' { HsSafe }+> | 'unsafe' { HsUnsafe }+> | {- empty -} { HsSafe }++> optentity :: { String }+> : STRING { $1 }+> | {- empty -} { "" }++> fvar :: { HsName }+> : VARID { HsIdent $1 }+> | '(' varsym ')' { $2 }++-----------------------------------------------------------------------------+Types++> type :: { HsType }+> : btype '->' type { HsTyFun $1 $3 }+> | btype { $1 }++> btype :: { HsType }+> : btype atype { HsTyApp $1 $2 }+> | atype { $1 }++> atype :: { HsType }+> : gtycon { HsTyCon $1 }+> | tyvar { HsTyVar $1 }+> | '(' types ')' { HsTyTuple (reverse $2) }+> | '[' type ']' { HsTyApp list_tycon $2 }+> | '(' type ')' { $2 }++> gtycon :: { HsQName }+> : qconid { $1 }+> | '(' ')' { unit_tycon_name }+> | '(' '->' ')' { fun_tycon_name }+> | '[' ']' { list_tycon_name }+> | '(' commas ')' { tuple_tycon_name $2 }+++(Slightly edited) Comment from GHC's hsparser.y:+"context => type" vs "type" is a problem, because you can't distinguish between++ foo :: (Baz a, Baz a)+ bar :: (Baz a, Baz a) => [a] -> [a] -> [a]++with one token of lookahead. The HACK is to parse the context as a btype+(more specifically as a tuple type), then check that it has the right form+C a, or (C1 a, C2 b, ... Cn z) and convert it into a context. Blaach!++> ctype :: { HsQualType }+> : context '=>' type { HsQualType $1 $3 }+> | type { HsQualType [] $1 }++> context :: { HsContext }+> : btype {% checkContext $1 }++> types :: { [HsType] }+> : types ',' type { $3 : $1 }+> | type ',' type { [$3, $1] }++> simpletype :: { (HsName, [HsName]) }+> : tycon tyvars { ($1,reverse $2) }++> tyvars :: { [HsName] }+> : tyvars tyvar { $2 : $1 }+> | {- empty -} { [] }++-----------------------------------------------------------------------------+Datatype declarations++> constrs :: { [HsConDecl] }+> : constrs '|' constr { $3 : $1 }+> | constr { [$1] }++> constr :: { HsConDecl }+> : srcloc scontype { HsConDecl $1 (fst $2) (snd $2) }+> | srcloc sbtype conop sbtype { HsConDecl $1 $3 [$2,$4] }+> | srcloc con '{' '}' { HsRecDecl $1 $2 [] }+> | srcloc con '{' fielddecls '}' { HsRecDecl $1 $2 (reverse $4) }++> scontype :: { (HsName, [HsBangType]) }+> : btype {% do { (c,ts) <- splitTyConApp $1;+> return (c,map HsUnBangedTy ts) } }+> | scontype1 { $1 }++> scontype1 :: { (HsName, [HsBangType]) }+> : btype '!' atype {% do { (c,ts) <- splitTyConApp $1;+> return (c,map HsUnBangedTy ts+++> [HsBangedTy $3]) } }+> | scontype1 satype { (fst $1, snd $1 ++ [$2] ) }++> satype :: { HsBangType }+> : atype { HsUnBangedTy $1 }+> | '!' atype { HsBangedTy $2 }++> sbtype :: { HsBangType }+> : btype { HsUnBangedTy $1 }+> | '!' atype { HsBangedTy $2 }++> fielddecls :: { [([HsName],HsBangType)] }+> : fielddecls ',' fielddecl { $3 : $1 }+> | fielddecl { [$1] }++> fielddecl :: { ([HsName],HsBangType) }+> : vars '::' stype { (reverse $1, $3) }++> stype :: { HsBangType }+> : type { HsUnBangedTy $1 } +> | '!' atype { HsBangedTy $2 }++> deriving :: { [HsQName] }+> : {- empty -} { [] }+> | 'deriving' qtycls { [$2] }+> | 'deriving' '(' ')' { [] }+> | 'deriving' '(' dclasses ')' { reverse $3 }++> dclasses :: { [HsQName] }+> : dclasses ',' qtycls { $3 : $1 }+> | qtycls { [$1] }++-----------------------------------------------------------------------------+Class declarations++> optcbody :: { [HsDecl] }+> : 'where' decllist {% checkClassBody $2 }+> | {- empty -} { [] }++-----------------------------------------------------------------------------+Instance declarations++> optvaldefs :: { [HsDecl] }+> : 'where' '{' valdefs '}' {% checkClassBody $3 }+> | 'where' open valdefs close {% checkClassBody $3 }+> | {- empty -} { [] }++> valdefs :: { [HsDecl] }+> : optsemis valdefs1 optsemis {% checkRevDecls $2 }+> | optsemis { [] }++> valdefs1 :: { [HsDecl] }+> : valdefs1 semis valdef { $3 : $1 }+> | valdef { [$1] }++-----------------------------------------------------------------------------+Value definitions++> valdef :: { HsDecl }+> : srcloc exp0b rhs optwhere {% checkValDef $1 $2 $3 $4 }++> optwhere :: { [HsDecl] }+> : 'where' decllist { $2 }+> | {- empty -} { [] }++> rhs :: { HsRhs }+> : '=' exp {% do { e <- checkExpr $2;+> return (HsUnGuardedRhs e) } }+> | gdrhs { HsGuardedRhss (reverse $1) }++> gdrhs :: { [HsGuardedRhs] }+> : gdrhs gdrh { $2 : $1 }+> | gdrh { [$1] }++> gdrh :: { HsGuardedRhs }+> : srcloc '|' exp0 '=' exp {% do { g <- checkExpr $3;+> e <- checkExpr $5;+> return (HsGuardedRhs $1 g e) } }++-----------------------------------------------------------------------------+Expressions++Note: The Report specifies a meta-rule for lambda, let and if expressions+(the exp's that end with a subordinate exp): they extend as far to+the right as possible. That means they cannot be followed by a type+signature or infix application. To implement this without shift/reduce+conflicts, we split exp10 into these expressions (exp10a) and the others+(exp10b). That also means that only an exp0 ending in an exp10b (an exp0b)+can followed by a type signature or infix application. So we duplicate+the exp0 productions to distinguish these from the others (exp0a).++> exp :: { HsExp }+> : exp0b '::' srcloc ctype { HsExpTypeSig $3 $1 $4 }+> | exp0 { $1 }++> exp0 :: { HsExp }+> : exp0a { $1 }+> | exp0b { $1 }++> exp0a :: { HsExp }+> : exp0b qop exp10a { HsInfixApp $1 $2 $3 }+> | exp10a { $1 }++> exp0b :: { HsExp }+> : exp0b qop exp10b { HsInfixApp $1 $2 $3 }+> | exp10b { $1 }++> exp10a :: { HsExp }+> : '\\' srcloc apats '->' exp { HsLambda $2 (reverse $3) $5 }+> | 'let' decllist 'in' exp { HsLet $2 $4 }+> | 'if' exp 'then' exp 'else' exp { HsIf $2 $4 $6 }+> | 'proc' apat '->' cmd { ArrSyn.translate $2 $4 }++> exp10b :: { HsExp }+> : 'case' exp 'of' altslist { HsCase $2 $4 }+> | '-' fexp { HsNegApp $2 }+> | 'do' stmtlist { HsDo $2 }+> | fexp { $1 }++> fexp :: { HsExp }+> : fexp aexp { HsApp $1 $2 }+> | aexp { $1 }++> apats :: { [HsPat] }+> : apats apat { $2 : $1 }+> | apat { [$1] }++> apat :: { HsPat }+> : aexp {% checkPattern $1 }++UGLY: Because patterns and expressions are mixed, aexp has to be split into+two rules: One right-recursive and one left-recursive. Otherwise we get two+reduce/reduce-errors (for as-patterns and irrefutable patters).++Even though the variable in an as-pattern cannot be qualified, we use+qvar here to avoid a shift/reduce conflict, and then check it ourselves+(as for vars above).++> aexp :: { HsExp }+> : qvar '@' aexp {% do { n <- checkUnQual $1;+> return (HsAsPat n $3) } }+> | '~' aexp { HsIrrPat $2 }+> | aexp1 { $1 }++Note: The first two alternatives of aexp1 are not necessarily record+updates: they could be labeled constructions.++> aexp1 :: { HsExp }+> : aexp1 '{' '}' {% mkRecConstrOrUpdate $1 [] }+> | aexp1 '{' fbinds '}' {% mkRecConstrOrUpdate $1 (reverse $3) }+> | aexp2 { $1 }++According to the Report, the left section (e op) is legal iff (e op x)+parses equivalently to ((e) op x). Thus e must be an exp0b.++> aexp2 :: { HsExp }+> : qvar { HsVar $1 }+> | gcon { $1 }+> | literal { HsLit $1 }+> | '[|' exp '|]' { hsQuote $2 } -- for template haskell+> | '$(' exp ')' { hsSplice $2 } -- for template haskell+> | '(' exp ')' { HsParen $2 }+> | '(' texps ')' { HsTuple (reverse $2) }+> | '[' list ']' { $2 }+> | '(' exp0b qop ')' { HsLeftSection $2 $3 }+> | '(' qopm exp0 ')' { HsRightSection $2 $3 }+> | '_' { HsWildCard }++> commas :: { Int }+> : commas ',' { $1 + 1 }+> | ',' { 1 }++> texps :: { [HsExp] }+> : texps ',' exp { $3 : $1 }+> | exp ',' exp { [$3,$1] }++-----------------------------------------------------------------------------+List expressions++The rules below are little bit contorted to keep lexps left-recursive while+avoiding another shift/reduce-conflict.++> list :: { HsExp }+> : exp { HsList [$1] }+> | lexps { HsList (reverse $1) }+> | exp '..' { HsEnumFrom $1 }+> | exp ',' exp '..' { HsEnumFromThen $1 $3 }+> | exp '..' exp { HsEnumFromTo $1 $3 }+> | exp ',' exp '..' exp { HsEnumFromThenTo $1 $3 $5 }+> | exp '|' quals { HsListComp $1 (reverse $3) }++> lexps :: { [HsExp] }+> : lexps ',' exp { $3 : $1 }+> | exp ',' exp { [$3,$1] }++-----------------------------------------------------------------------------+List comprehensions++> quals :: { [HsStmt] }+> : quals ',' qual { $3 : $1 }+> | qual { [$1] }++> qual :: { HsStmt }+> : pat srcloc '<-' exp { HsGenerator $2 $1 $4 }+> | exp { HsQualifier $1 }+> | 'let' decllist { HsLetStmt $2 }++-----------------------------------------------------------------------------+Case alternatives++> altslist :: { [HsAlt] }+> : '{' alts '}' { $2 }+> | open alts close { $2 }++> alts :: { [HsAlt] }+> : optsemis alts1 optsemis { reverse $2 }++> alts1 :: { [HsAlt] }+> : alts1 semis alt { $3 : $1 }+> | alt { [$1] }++> alt :: { HsAlt }+> : srcloc pat ralt optwhere { HsAlt $1 $2 $3 $4 }++> ralt :: { HsGuardedAlts }+> : '->' exp { HsUnGuardedAlt $2 }+> | gdpats { HsGuardedAlts (reverse $1) }++> gdpats :: { [HsGuardedAlt] }+> : gdpats gdpat { $2 : $1 }+> | gdpat { [$1] }++> gdpat :: { HsGuardedAlt }+> : srcloc '|' exp0 '->' exp { HsGuardedAlt $1 $3 $5 }++> pat :: { HsPat }+> : exp0b {% checkPattern $1 }++-----------------------------------------------------------------------------+Statement sequences++As per the Report, but with stmt expanded to simplify building the list+without introducing conflicts. This also ensures that the last stmt is+an expression.++> stmtlist :: { [HsStmt] }+> : '{' stmts '}' { $2 }+> | open stmts close { $2 }++> stmts :: { [HsStmt] }+> : 'let' decllist ';' stmts { HsLetStmt $2 : $4 }+> | pat srcloc '<-' exp ';' stmts { HsGenerator $2 $1 $4 : $6 }+> | exp ';' stmts { HsQualifier $1 : $3 }+> | ';' stmts { $2 }+> | exp ';' { [HsQualifier $1] }+> | exp { [HsQualifier $1] }++-----------------------------------------------------------------------------+Record Field Update/Construction++> fbinds :: { [HsFieldUpdate] }+> : fbinds ',' fbind { $3 : $1 }+> | fbind { [$1] }++> fbind :: { HsFieldUpdate }+> : qvar '=' exp { HsFieldUpdate $1 $3 }++-----------------------------------------------------------------------------+Commands (for arrow expressions)+Largely analogous to the treatment of exp (qv), including the distinctions+exp0a/exp0b and exp10a/exp10b.++> cmd :: { ArrSyn.Cmd }+> : exp0b '-<' exp { ArrSyn.Input $1 $3 }+> | exp0b '-<<' exp { ArrSyn.Input $1 $3 }+> | exp0b '>-' exp { ArrSyn.Input $3 $1 }+> | exp0b '>>-' exp { ArrSyn.Input $3 $1 }+> | cmd0 { $1 }++> cmd0 :: { ArrSyn.Cmd }+> : cmd0a { $1 }+> | cmd0b { $1 }++> cmd0a :: { ArrSyn.Cmd }+> : cmd0b qop cmd10a { ArrSyn.InfixOp $1 $2 $3 }+> | cmd10a { $1 }++> cmd0b :: { ArrSyn.Cmd }+> : cmd0b qop cmd10b { ArrSyn.InfixOp $1 $2 $3 }+> | cmd10b { $1 }++> cmd10a :: { ArrSyn.Cmd }+> : '\\' srcloc apats '->' cmd { ArrSyn.Kappa $2 (reverse $3) $5 }+> | 'let' decllist 'in' cmd { ArrSyn.Let $2 $4 }+> | 'let' cmddecl 'in' cmd { ArrSyn.LetCmd $2 $4 }+> | 'if' exp 'then' cmd 'else' cmd { ArrSyn.If $2 $4 $6 }++> cmd10b :: { ArrSyn.Cmd }+> : 'case' exp 'of' altslistA { ArrSyn.Case $2 $4 }+> | 'do' stmtlistA { ArrSyn.Do (fst $2) (snd $2) }+> | fcmd { $1 }++> fcmd :: { ArrSyn.Cmd }+> : fcmd aexp { ArrSyn.App $1 $2 }+> | acmd { $1 }++> acmd :: { ArrSyn.Cmd }+> : '(' cmd ')' { ArrSyn.Paren $2 }+> | '(|' aexp acmds '|)' { ArrSyn.Op $2 (reverse $3) }+> | 'cmd' varid { ArrSyn.CmdVar $2 }++> acmds :: { [ArrSyn.Cmd] }+> : acmds acmd { $2 : $1 }+> | acmd { [$1] }++Case commands++> altslistA :: { [ArrSyn.Alt] }+> : '{' altsA '}' { $2 }+> | open altsA close { $2 }++> altsA :: { [ArrSyn.Alt] }+> : optsemis alts1A optsemis { reverse $2 }++> alts1A :: { [ArrSyn.Alt] }+> : alts1A semis altA { $3 : $1 }+> | altA { [$1] }++> altA :: { ArrSyn.Alt }+> : srcloc pat raltA optwhere { ArrSyn.Alt $1 $2 $3 $4 }++> raltA :: { ArrSyn.GuardedAlts }+> : '->' cmd { ArrSyn.UnGuardedAlt $2 }+> | gdpatsA { ArrSyn.GuardedAlts (reverse $1) }++> gdpatsA :: { [ArrSyn.GuardedAlt] }+> : gdpatsA gdpatA { $2 : $1 }+> | gdpatA { [$1] }++> gdpatA :: { ArrSyn.GuardedAlt }+> : srcloc '|' exp0 '->' cmd { ArrSyn.GuardedAlt $1 $3 $5 }++The arrow version of do statements++> stmtlistA :: { ArrSyn.Stmts }+> : '{' stmtsA '}' { $2 }+> | open stmtsA close { $2 }++Note that stmts/stmtsA must be right-recursive; otherwise it is not+possible, in situations like++ 'proc' pat '->' 'do' '(' 'let' decls . ';'++to choose between the productions++ qual -> 'let' decls+ qualA -> 'let' decls++Now that decision is delayed until the trailing exp/cmd is seen.++> stmtsA :: { ArrSyn.Stmts }+> : squalA ';' stmtsA { ($1 : fst $3, snd $3) }+> | cmd ';' stmtsA { (ArrSyn.Generator undefined HsPWildCard $1 : fst $3, snd $3) }+> | 'let' decllist ';' stmtsA { (ArrSyn.LetStmt $2 : fst $4, snd $4) }+> | ';' stmtsA { $2 }+> | cmd ';' { ([], $1) }+> | cmd { ([], $1) }++> squalA :: { ArrSyn.Stmt }+> : pat srcloc '<-' cmd { ArrSyn.Generator $2 $1 $4 }+> | cmd '->' srcloc pat { ArrSyn.Generator $3 $4 $1 }+> | 'rec' defnsA { ArrSyn.RecStmt (reverse $2) }+> | 'let' cmddecl { ArrSyn.LetCmdStmt $2 }++> cmddecl :: { ArrSyn.VarDecl ArrSyn.Cmd }+> : srcloc 'cmd' varid '=' cmd { ArrSyn.VarDecl $1 $3 $5 }++> defnsA :: { [ArrSyn.Stmt] }+> : '{' stmts1A '}' { $2 }+> | open stmts1A close { $2 }++> stmts1A :: { [ArrSyn.Stmt] }+> : stmts1A ';' qualA { $3 : $1 }+> | qualA { [$1] }++> qualA :: { ArrSyn.Stmt }+> : squalA { $1 }+> | 'let' decllist { ArrSyn.LetStmt $2 }++-----------------------------------------------------------------------------+Variables, Constructors and Operators.++> gcon :: { HsExp }+> : '(' ')' { unit_con }+> | '[' ']' { HsList [] }+> | '(' commas ')' { tuple_con $2 }+> | qcon { HsCon $1 }++> var :: { HsName }+> : varid { $1 }+> | '(' varsym ')' { $2 }++> qvar :: { HsQName }+> : qvarid { $1 }+> | '(' qvarsym ')' { $2 }++> con :: { HsName }+> : conid { $1 }+> | '(' consym ')' { $2 }++> qcon :: { HsQName }+> : qconid { $1 }+> | '(' gconsym ')' { $2 }++> varop :: { HsName }+> : varsym { $1 }+> | '`' varid '`' { $2 }++> qvarop :: { HsQName }+> : qvarsym { $1 }+> | '`' qvarid '`' { $2 }++> qvaropm :: { HsQName }+> : qvarsymm { $1 }+> | '`' qvarid '`' { $2 }++> conop :: { HsName }+> : consym { $1 } +> | '`' conid '`' { $2 }++> qconop :: { HsQName }+> : gconsym { $1 }+> | '`' qconid '`' { $2 }++> op :: { HsOp }+> : varop { HsVarOp $1 }+> | conop { HsConOp $1 }++> qop :: { HsQOp }+> : qvarop { HsQVarOp $1 }+> | qconop { HsQConOp $1 }++> qopm :: { HsQOp }+> : qvaropm { HsQVarOp $1 }+> | qconop { HsQConOp $1 }++> gconsym :: { HsQName }+> : ':' { list_cons_name }+> | qconsym { $1 }++-----------------------------------------------------------------------------+Identifiers and Symbols++> qvarid :: { HsQName }+> : varid { UnQual $1 }+> | QVARID { Qual (Module (fst $1)) (HsIdent (snd $1)) }++> varid :: { HsName }+> : VARID { HsIdent $1 }+> | 'as' { HsIdent "as" }+> | 'export' { HsIdent "export" }+> | 'hiding' { HsIdent "hiding" }+> | 'qualified' { HsIdent "qualified" }+> | 'safe' { HsIdent "safe" }+> | 'unsafe' { HsIdent "unsafe" }++> qconid :: { HsQName }+> : conid { UnQual $1 }+> | QCONID { Qual (Module (fst $1)) (HsIdent (snd $1)) }++> conid :: { HsName }+> : CONID { HsIdent $1 }++> qconsym :: { HsQName }+> : consym { UnQual $1 }+> | QCONSYM { Qual (Module (fst $1)) (HsSymbol (snd $1)) }++> consym :: { HsName }+> : CONSYM { HsSymbol $1 }++> qvarsym :: { HsQName }+> : varsym { UnQual $1 }+> | qvarsym1 { $1 }++> qvarsymm :: { HsQName }+> : varsymm { UnQual $1 }+> | qvarsym1 { $1 }++> varsym :: { HsName }+> : VARSYM { HsSymbol $1 }+> | '-' { HsSymbol "-" }+> | '!' { HsSymbol "!" }++> varsymm :: { HsName } -- varsym not including '-'+> : VARSYM { HsSymbol $1 }+> | '!' { HsSymbol "!" }++> qvarsym1 :: { HsQName }+> : QVARSYM { Qual (Module (fst $1)) (HsSymbol (snd $1)) }++> literal :: { HsLiteral }+> : INT { HsInt $1 }+> | CHAR { HsChar $1 }+> | RATIONAL { HsFrac $1 }+> | STRING { HsString $1 }++> srcloc :: { SrcLoc } : {% getSrcLoc }+ +-----------------------------------------------------------------------------+Layout++> open :: { () } : {% pushCurrentContext }++> close :: { () }+> : vccurly { () } -- context popped in lexer.+> | error {% popContext }++-----------------------------------------------------------------------------+Miscellaneous (mostly renamings)++> modid :: { Module }+> : CONID { Module $1 }+> | QCONID { Module (fst $1 ++ '.':snd $1) }++> tyconorcls :: { HsName }+> : conid { $1 }++> tycon :: { HsName }+> : conid { $1 }++> qtyconorcls :: { HsQName }+> : qconid { $1 }++> qtycls :: { HsQName }+> : qconid { $1 }++> tyvar :: { HsName }+> : varid { $1 }++-----------------------------------------------------------------------------++> {+> happyError :: P a+> happyError = fail "Parse error"++> -- | Parse of a string, which should contain a complete Haskell 98 module.+> parseModule :: String -> ParseResult HsModule+> parseModule = runParser parse++> -- | Parse of a string, which should contain a complete Haskell 98 module.+> parseModuleWithMode :: ParseMode -> String -> ParseResult HsModule+> parseModuleWithMode mode = runParserWithMode mode parse+> }
+ preprocessor/State.hs view
@@ -0,0 +1,15 @@+-- A Haskell-98-compatible subset of the Control.Monad.State module.++module State(State, runState, get, put) where++newtype State s a = State { runState :: s -> (a, s) }++instance Monad (State s) where+ return x = State (\n -> (x, n))+ State v >>= f = State (\n -> let (x, n') = v n in runState (f x) n')++get :: State s s+get = State (\s -> (s, s))++put :: s -> State s ()+put s = State (\_ -> ((), s))
+ preprocessor/Utils.lhs view
@@ -0,0 +1,225 @@+Miscellaneous utilities on ordinary Haskell syntax used by the arrow+translator.++> module Utils(+> FreeVars(freeVars), DefinedVars(definedVars),+> failureFree, irrPat, paren, parenInfixArg,+> tuple, tupleP,+> times, +> hsQuote, hsSplice, quoteArr, quoteInit -- for CCA+> ) where++> import Data.Set (Set)+> import qualified Data.Set as Set+> import Language.Haskell.Syntax+> import Data.Generics (everywhere, mkT)++The set of free variables in some construct.++> class FreeVars a where+> freeVars :: a -> Set HsName++> instance FreeVars a => FreeVars [a] where+> freeVars = Set.unions . map freeVars++> instance FreeVars HsPat where+> freeVars (HsPVar n) = Set.singleton n+> freeVars (HsPLit _) = Set.empty+> freeVars (HsPNeg p) = freeVars p+> freeVars (HsPInfixApp p1 _ p2) = freeVars p1 `Set.union` freeVars p2+> freeVars (HsPApp _ ps) = freeVars ps+> freeVars (HsPTuple ps) = freeVars ps+> freeVars (HsPList ps) = freeVars ps+> freeVars (HsPParen p) = freeVars p+> freeVars (HsPRec _ pfs) = freeVars pfs+> freeVars (HsPAsPat n p) = Set.insert n (freeVars p)+> freeVars (HsPWildCard) = Set.empty+> freeVars (HsPIrrPat p) = freeVars p++> instance FreeVars HsPatField where+> freeVars (HsPFieldPat _ p) = freeVars p++> instance FreeVars HsFieldUpdate where+> freeVars (HsFieldUpdate _ e) = freeVars e++> instance FreeVars HsExp where+> freeVars (HsVar n) = freeVars n+> freeVars (HsCon _) = Set.empty+> freeVars (HsLit _) = Set.empty+> freeVars (HsInfixApp e1 op e2) =+> freeVars e1 `Set.union` freeVars op `Set.union` freeVars e2+> freeVars (HsApp f e) = freeVars f `Set.union` freeVars e+> freeVars (HsNegApp e) = freeVars e+> freeVars (HsLambda _ ps e) = freeVars e `Set.difference` freeVars ps+> freeVars (HsLet decls e) =+> (freeVars decls `Set.union` freeVars e) `Set.difference`+> definedVars decls+> freeVars (HsIf e1 e2 e3) =+> freeVars e1 `Set.union` freeVars e2 `Set.union` freeVars e3+> freeVars (HsCase e as) = freeVars e `Set.union` freeVars as+> freeVars (HsDo ss) = freeVarsStmts ss+> freeVars (HsTuple es) = freeVars es+> freeVars (HsList es) = freeVars es+> freeVars (HsParen e) = freeVars e+> freeVars (HsLeftSection e op) = freeVars e `Set.union` freeVars op+> freeVars (HsRightSection op e) = freeVars op `Set.union` freeVars e+> freeVars (HsRecConstr _ us) = freeVars us+> freeVars (HsRecUpdate e us) = freeVars e `Set.union` freeVars us+> freeVars (HsEnumFrom e) = freeVars e+> freeVars (HsEnumFromTo e1 e2) = freeVars e1 `Set.union` freeVars e2+> freeVars (HsEnumFromThen e1 e2) = freeVars e1 `Set.union` freeVars e2+> freeVars (HsEnumFromThenTo e1 e2 e3) =+> freeVars e1 `Set.union` freeVars e2 `Set.union` freeVars e3+> freeVars (HsListComp e ss) =+> freeVars e `Set.union` freeVarsStmts ss+> freeVars (HsExpTypeSig _ e _) = freeVars e+> freeVars (HsAsPat _ _) = error "freeVars (x @ p)"+> freeVars (HsWildCard) = error "freeVars _"+> freeVars (HsIrrPat _) = error "freeVars ~p"++> instance FreeVars HsQOp where+> freeVars (HsQVarOp n) = freeVars n+> freeVars (HsQConOp _) = Set.empty++> instance FreeVars HsQName where+> freeVars (UnQual v) = Set.singleton v+> freeVars _ = Set.empty++> instance FreeVars HsAlt where+> freeVars (HsAlt _ p gas decls) =+> (freeVars gas `Set.union` freeVars decls) `Set.difference`+> (freeVars p `Set.union` definedVars decls)++> instance FreeVars HsGuardedAlts where+> freeVars (HsUnGuardedAlt e) = freeVars e+> freeVars (HsGuardedAlts alts) = freeVars alts++> instance FreeVars HsGuardedAlt where+> freeVars (HsGuardedAlt _ e1 e2) = freeVars e1 `Set.union` freeVars e2++> instance FreeVars HsDecl where+> freeVars (HsFunBind ms) = freeVars ms+> freeVars (HsPatBind _ p rhs decls) =+> (freeVars rhs `Set.union` freeVars decls) `Set.difference`+> (freeVars p `Set.union` definedVars decls)+> freeVars _ = Set.empty++> instance FreeVars HsMatch where+> freeVars (HsMatch _ n ps rhs decls) =+> (freeVars rhs `Set.union` freeVars decls) `Set.difference`+> (Set.insert n (freeVars ps) `Set.union` definedVars decls)++> instance FreeVars HsRhs where+> freeVars (HsUnGuardedRhs e) = freeVars e+> freeVars (HsGuardedRhss grs) = freeVars grs++> instance FreeVars HsGuardedRhs where+> freeVars (HsGuardedRhs _ e1 e2) = freeVars e1 `Set.union` freeVars e2++> freeVarsStmts :: [HsStmt] -> Set HsName+> freeVarsStmts = foldr addStmt Set.empty+> where addStmt (HsGenerator _ p e) s =+> freeVars e `Set.union` (s `Set.difference` freeVars p)+> addStmt (HsQualifier e) _s = freeVars e+> addStmt (HsLetStmt decls) s =+> (freeVars decls `Set.union` s) `Set.difference` definedVars decls++The set of variables defined by a construct.++> class DefinedVars a where+> definedVars :: a -> Set HsName++> instance DefinedVars a => DefinedVars [a] where+> definedVars = Set.unions . map definedVars++> instance DefinedVars HsDecl where+> definedVars (HsFunBind (HsMatch _ n _ _ _:_)) = Set.singleton n+> definedVars (HsPatBind _ p _ _) = freeVars p+> definedVars _ = Set.empty++Is the pattern failure-free?+(This is incomplete at the moment, because patterns made with unique+constructors should be failure-free, but we have no way of detecting them.)++> failureFree :: HsPat -> Bool+> failureFree (HsPVar _) = True+> failureFree (HsPApp n ps) = n == unit_con_name && null ps+> failureFree (HsPTuple ps) = all failureFree ps+> failureFree (HsPParen p) = failureFree p+> failureFree (HsPAsPat _ p) = failureFree p+> failureFree (HsPWildCard) = True+> failureFree (HsPIrrPat _) = True+> failureFree _ = False++Irrefutable version of a pattern++> irrPat :: HsPat -> HsPat+> irrPat p@(HsPVar _) = p+> irrPat (HsPParen p) = HsPParen (irrPat p)+> irrPat (HsPAsPat n p) = HsPAsPat n (irrPat p)+> irrPat p@(HsPWildCard) = p+> irrPat p@(HsPIrrPat _) = p+> irrPat p = HsPIrrPat p++Make an expression into an aexp, by adding parentheses if required.++> paren :: HsExp -> HsExp+> paren e = if isAexp e then e else HsParen e+> where isAexp (HsVar _) = True+> isAexp (HsCon _) = True+> isAexp (HsLit _) = True+> isAexp (HsParen _) = True+> isAexp (HsTuple _) = True+> isAexp (HsList _) = True+> isAexp (HsEnumFrom _) = True+> isAexp (HsEnumFromTo _ _) = True+> isAexp (HsEnumFromThen _ _) = True+> isAexp (HsEnumFromThenTo _ _ _) = True+> isAexp (HsListComp _ _) = True+> isAexp (HsLeftSection _ _) = True+> isAexp (HsRightSection _ _) = True+> isAexp (HsRecConstr _ _) = True+> isAexp (HsRecUpdate _ _) = True+> isAexp _ = False++Make an expression into an fexp, by adding parentheses if required.++> parenInfixArg :: HsExp -> HsExp+> parenInfixArg e@(HsApp _ _) = e+> parenInfixArg e = paren e++Tuples++> tuple :: [HsExp] -> HsExp+> tuple [] = unit_con+> tuple [e] = e+> tuple es = HsTuple es++> tupleP :: [HsPat] -> HsPat+> tupleP [] = HsPApp unit_con_name []+> tupleP [e] = e+> tupleP es = HsPTuple es++Compose a function n times.++> times :: Int -> (a -> a) -> a -> a+> times n f a = foldr ($) a (replicate n f)++> -- | helper for template haskell syntax hack+> hsQuote e = HsApp (HsApp lq e) rq+> where lq = var "[|"+> rq = var "|]"+> hsSplice e = HsApp (HsApp lq e) rq+> where lq = var "$("+> rq = var ")"+> quoteArr :: HsExp -> HsExp+> -- quoteArr f = hsSplice (HsApp (var "arr") (hsQuote f))+> quoteArr f = HsApp (HsApp (var "arr'") (hsQuote f)) f+> quoteInit :: HsExp -> HsExp+> quoteInit = everywhere (mkT aux)+> where+>-- aux (HsApp (HsVar (UnQual (HsIdent "init"))) i) = hsSplice (HsApp (var "init") (hsQuote i)) +> aux (HsApp (HsVar (UnQual (HsIdent "init"))) i) = HsApp (HsApp (var "init'") (hsQuote i)) i +> aux x = x+> var = HsVar . UnQual . HsIdent+
+ src/Control/CCA.lhs view
@@ -0,0 +1,26 @@+> {-# LANGUAGE TemplateHaskell #-}+> {-# LANGUAGE FlexibleInstances #-}++> module Control.CCA +> ((>>>), (<<<), first, second, (***), (&&&), loop, +> Arrow, ArrowLoop, ArrowInit, +> arr, init, arr', init',+> norm, normOpt) where++> import Control.Arrow hiding (arr, returnA)+> import Control.CCA.Types hiding (init)+> import Control.CCA.CCNF+> import Language.Haskell.TH+> import Language.Haskell.TH.Syntax+> import Language.Haskell.TH.Instances+> import Prelude hiding (init)++> arr :: ExpQ -> ExpQ+> arr e = appE [|arr' e|] e++> init :: ExpQ -> ExpQ+> init i = appE [|init' i|] i++> returnA :: ArrowInit a => a b b+> returnA = arr' [|id|] id+
+ src/Control/CCA/CCNF.lhs view
@@ -0,0 +1,321 @@+> {-# LANGUAGE CPP, TemplateHaskell, FlexibleInstances #-}++> module Control.CCA.CCNF +> (norm, normOpt, +> pprNorm, pprNormOpt, printCCA, ASyn) where++#if __GLASGOW_HASKELL__ >= 610++> import Control.Category+> import Prelude hiding ((.), init)++#else++> import Prelude hiding (init)++#endif++> import Control.Arrow +> import Control.CCA.Types+> import Data.Char (isAlpha)+> import Language.Haskell.TH+> import Language.Haskell.TH.Syntax+> import Language.Haskell.TH.Instances+> import qualified Data.Generics as G (everywhere, mkT)++Internal Representation+=======================++We use AExp to syntactically represent an arrow for normalization purposes. ++> data AExp+> = Arr ExpQ+> | First AExp+> | AExp :>>> AExp+> | Loop AExp+> | LoopD ExpQ AExp -- loop with initialized feedback+> | LoopB ExpQ AExp -- loop with both immediate and initialized feedback+> | Init ExpQ+> | Lft AExp++> infixl 1 :>>>++We use phantom types to make ASyn an Arrow.++> newtype ASyn b c = AExp AExp ++#if __GLASGOW_HASKELL__ >= 610++> instance Category ASyn where+> id = AExp (Arr [|\x -> x|])+> AExp g . AExp f = AExp (f :>>> g)++> instance Arrow ASyn where+> arr f = error "use arr' instead" +> first (AExp f) = AExp (First f)++#else++> instance Arrow ASyn where+> arr f = error "use arr' instead" +> AExp f >>> AExp g = AExp (f :>>> g)+> first (AExp f) = AExp (First f)++#endif++> instance ArrowLoop ASyn where+> loop (AExp f) = AExp (Loop f)++> instance ArrowInit ASyn where+> init i = error "use init' instead"+> arr' f _ = AExp (Arr f)+> init' i _ = AExp (Init i)+++ArrowChoice only requires definition for 'left', but the default implementation+for 'right' and '|||' uses arr so we need to redefine them using arr' here.+'+++' is also redefined here for completeness.++> instance ArrowChoice ASyn where+> left (AExp f) = AExp (Lft f)+> right f = arr' [| mirror |] mirror >>> left f+> >>> arr' [| mirror |] mirror+> f +++ g = left f >>> right g+> f ||| g = f +++ g >>> arr' [| untag |] untag++These helpers have to be at the top-level because TH cannot splice in a+polymorphic local function.++> mirror (Left x) = Right x+> mirror (Right y) = Left y++> untag (Left x) = x+> untag (Right y) = y++Pretty printing AExp.++> printCCA (AExp x) = printAExp x+> printAExp x = runQ (fromAExp x) >>= putStrLn . simplify . pprint+> simplify = unwords . map (unwords . (map aux) . words) . lines +> where aux (c:x) | not (isAlpha c) = c : aux x+> aux x = let (u, v) = break (=='.') x+> in if length v > 1 then aux (tail v)+> else x++Traversal over AExp is defined in terms of imap (intermediate map) +and everywhere. ++> type Traversal = AExp -> AExp+> imap :: Traversal -> Traversal+> imap h (First f) = First (h f)+> imap h (f :>>> g) = h f :>>> h g+> imap h (Loop f) = Loop (h f)+> imap h (LoopD i f) = LoopD i (h f)+> imap h (LoopB i f) = LoopB i (h f)+> imap h (Lft f) = Lft (h f)+> imap h x = x++> everywhere :: Traversal -> Traversal +> everywhere h e = h (imap (everywhere h) e)++Normalization+=============++norm is a TH function that normalizes a given CCA, e.g., $(norm e) will+give the CCNF of e. ++> norm :: ASyn t t1 -> ExpQ -- returns a generic ArrowInit arrow+> norm (AExp e) = fromAExp (normE e)+> normE = everywhere (normalize normE)++normOpt returns the pair of state and pure function as (i, f) from optimized +CCNF in the form loopD i (arr f). ++> normOpt :: ASyn t t1 -> ExpQ -- returns a pair of state and pure function (s, f)+> normOpt (AExp e) = +> case toLoopD $ normE e of+> LoopD i (Arr f) -> tupE [i, f]+> _ -> error "The given arrow can't be normalized to optimized CCNF." ++pprNorm and pprNormOpt return the pretty printed normal forms as a +string.++> pprNorm = ppr' . norm+> pprNormOpt = ppr' . normOpt+> ppr' e = runQ (fmap toLet e) >>= litE . StringL . simplify . pprint++fromAExp converts AExp back to TH Exp structure.++> fromAExp (Arr f) = appE [|arr|] f+> fromAExp (First f) = appE [|first|] (fromAExp f)+> fromAExp (f :>>> g) = infixE (Just (fromAExp f)) [|(>>>)|] (Just (fromAExp g))+> fromAExp (Loop f) = appE [|loop|] (fromAExp f)+> fromAExp (LoopD i f) = appE (appE [|loopD|] i) (fromAExp f)+> fromAExp (LoopB i f) = appE (appE [|loopB|] i) (fromAExp f)+> fromAExp (Init i) = appE [|init|] i+> fromAExp (Lft f) = appE [|left|] (fromAExp f)++CCNF+====++Arrow laws:++> normalize norm (Arr f :>>> Arr g) = Arr (g `o` f)+> normalize norm (First (Arr f)) = Arr (f `crossE` idE)+> normalize norm (First f :>>> First g) = First ((f :>>> g))++Choice:++> normalize norm (Lft (Arr f)) = Arr [| \x -> case x of+> Left a -> Left ($f a)+> Right b -> Right b |]+> normalize norm (Lft (LoopB i f)) =+> norm (LoopB i (Arr tagE :>>> Lft f :>>> Arr untagE))+> where+> tagE = [| \(inp,s) -> case inp of+> Left a -> Left (a, s)+> Right c -> Right (c, s) |]+> untagE = [| \out -> case out of+> Left (b,s) -> (Left b, s)+> Right (c,s) -> (Right c, s) |]++LoopB laws:++> normalize norm (h :>>> (LoopB i f)) = norm (LoopB i (First h :>>> f))+> normalize norm ((LoopB i f) :>>> h) = norm (LoopB i (f :>>> First h))+> normalize norm (LoopB i (LoopB j f)) = +> norm (LoopB (tupE [i, j]) (Arr shuffleE :>>> f :>>> Arr shuffleE'))+> where+> shuffleE = assocE' `o` (idE `crossE` transposeE)+> shuffleE' = (idE `crossE` transposeE) `o` assocE+> normalize norm (First (LoopB i f)) = +> norm (LoopB i (Arr juggleE :>>> First f :>>> Arr juggleE))++LoopD, Loop, and Init are translated to LoopB:++>-- normalize norm (LoopD i f) = norm (Loop (f :>>> secondA (Init i)))+>-- normalize norm (Loop f) = LoopB (Term "()") (norm (Arr assocE' :>>> First f :>>> Arr assocE))+>-- normalize norm (Init i) = LoopB i (Arr (swapE `o` juggleE `o` swapE))++LoopD laws++> normalize norm (h :>>> LoopD i f) = norm (LoopD i (First h :>>> f))+> normalize norm (LoopD i f :>>> h) = norm (LoopD i (f :>>> First h))+> normalize norm (LoopD i (LoopD j f)) = +> norm (LoopD (tupE [i, j]) (Arr assocE' :>>> f :>>> Arr assocE))+> normalize norm (First (LoopD i f)) = +> norm (LoopD i (Arr juggleE :>>> First f :>>> Arr juggleE))++Loop laws++> normalize norm (h :>>> Loop f) = norm (Loop (First h :>>> f))+> normalize norm (Loop f :>>> h) = norm (Loop (f :>>> First h))+> normalize norm (Loop (Loop f)) = +> norm (Loop (Arr assocE' :>>> f :>>> Arr assocE))+> normalize norm (First (Loop f)) = +> norm (Loop (Arr juggleE :>>> First f :>>> Arr juggleE))++Loop and LoopB++> normalize norm (Loop (LoopB i f)) = +> norm (LoopB i (Arr shuffleE :>>> f :>>> Arr shuffleE'))+> where +> shuffleE = assocE' `o` (idE `crossE` assocE)+> shuffleE' = (idE `crossE` assocE') `o` assocE++> normalize norm (LoopB i (Loop f)) = +> norm (LoopB i (Arr shuffleE :>>> f :>>> Arr shuffleE'))+> where +> shuffleE = assocE' `o` (idE `crossE` juggleE)+> shuffleE' = (idE `crossE` juggleE) `o` assocE++Loop and LoopD++> normalize norm (Loop (LoopD i f)) = +> norm (LoopB i (Arr assocE' :>>> f :>>> Arr assocE))++> normalize norm (LoopD i (Loop f)) = +> norm (LoopB i (Arr (juggleE `o` assocE') :>>> f :>>> +> Arr (assocE' `o` juggleE)))++LoopB AND LoopD++> normalize norm (LoopB i (LoopD j f)) = +> norm (LoopB (tupE [i, j]) (Arr shuffleE :>>> f :>>> Arr shuffleE'))+> where+> shuffleE = assocE' `o` (idE `crossE` assocE')+> shuffleE' = (idE `crossE` assocE) `o` assocE++> normalize norm (LoopD i (LoopB j f)) = +> norm (LoopB (tupE [i, j]) (Arr shuffleE :>>> f :>>> Arr shuffleE'))+> where+> shuffleE = transposeE `o` assocE'+> shuffleE' = assocE `o` transposeE++Init++> normalize norm (Init i) = norm (LoopD i (Arr swapE))++All the other cases remain unchanged ++> normalize norm e = e ++Optimized CCNF+==============++to transform loopB to loopD:++ loopB i (arr f) ---> loopD i (arr g)++we must generate the function g from f:++ g (x, z) = let (x', (y, z')) = f (x, (y, z))+ in (x', z')++> toLoopD (LoopB i (Arr f)) = LoopD i (Arr g)+> where+> g = do+> f' <- f+> [x, y, z, x', z'] <- mapM newName ["x", "y", "z", "x'", "z'"]+> return $ LamE [TupP [VarP x, VarP z]] $ LetE +> [ValD (TupP [VarP x', TupP [VarP y, VarP z']]) (NormalB $+> AppE f' (TupE [VarE x, TupE [VarE y, VarE z]])) []]+> (TupE [VarE x', VarE z'])+> toLoopD x = x++Notice the recursively defined variable y, and it'll prevent GHC from inlining+g and f. So we must further transform f into a set of let-expressions, and+move the definition of y inside. Here is a set of transformations we do to+function g:++1. Transform function applications to let-expressions.++ (\x -> e1) e2 === let x = e2 in e1++> toLet :: Exp -> Exp+> toLet = G.everywhere (G.mkT aux)+> where+> aux (AppE (LamE [pat] body) arg) = LetE [ValD pat (NormalB arg) []] body+> aux (AppE (LamE (pat:ps) body) arg) = LamE ps (LetE [ValD pat (NormalB arg) []] body)+> aux x = x++2. TODO: For every pattern match agains tuples, unfold right-hand-size until it is a+ tuple too, and then break up into a list of let-expressions. ++Auxiliary Functions+===================++> f `o` g = appE (appE [|\f g x -> f (g x)|] f) g+> f `crossE` g = appE (appE [|\f g x -> (f $ fst x, g $ snd x)|] f) g+> idE = [|\x -> x|]+> dupE = [|\x -> (x, x)|]+> swapE = [|\x -> (snd x, fst x)|]+> curryE = [|\f x y -> f (x, y)|]+> uncurryE = [|\f x -> f (fst x) (snd x)|]+> assocE = [|\x -> (fst $ fst x, (snd $ fst x, snd x))|]+> assocE' = [|\x -> ((fst x, fst $ snd x), snd $ snd x)|]+> juggleE = assocE' `o` (idE `crossE` swapE) `o` assocE+> transposeE = [|\x -> ((fst $ fst x, fst $ snd x),+> (snd $ fst x, snd $ snd x))|]++
+ src/Control/CCA/Types.lhs view
@@ -0,0 +1,26 @@+> {-# LANGUAGE CPP #-}++> module Control.CCA.Types where++#if __GLASGOW_HASKELL__ >= 610++> import Control.Category++#endif++> import Control.Arrow +> import Language.Haskell.TH+> import Prelude hiding (init)++> class (Arrow a, ArrowLoop a) => ArrowInit a where+> init :: b -> a b b+> arr' :: ExpQ -> (b -> c) -> a b c+> arr' _ = arr+> init' :: ExpQ -> b -> a b b+> init' _ = init+> loopD :: e -> a (b, e) (c, e) -> a b c +> loopD i f = loop (f >>> second (init i))+> loopB :: e -> a (b, (d, e)) (c, (d, e)) -> a b c+> loopB i f = loop (f >>> second (second (init i)))++
+ src/Language/Haskell/TH/Instances.hs view
@@ -0,0 +1,159 @@+{-# OPTIONS -fglasgow-exts #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE TypeSynonymInstances #-}++module Language.Haskell.TH.Instances where+import Data.Ratio+import GHC.Exts+import GHC.Prim+import Language.Haskell.TH.Syntax++instance Lift a => Lift (Q a) where+ lift x = x >>= \x -> [| return x |] ++instance Lift Exp where+ lift (VarE name) = [|VarE name|]+ lift (ConE name) = [|ConE name|]+ lift (LitE lit) = [|LitE lit|]+ lift (AppE e1 e2) = [|AppE e1 e2|]+ lift (InfixE e1 e2 e3) = [|InfixE e1 e2 e3|]+ lift (LamE p e) = [|LamE p e|]+ lift (TupE e) = [|TupE e|]+ lift (CondE e1 e2 e3) = [|CondE e1 e2 e3|]+ lift (LetE d e) = [|LetE d e|]+ lift (CaseE e m) = [|CaseE e m|]+ lift (DoE s) = [|DoE s|]+ lift (CompE s) = [|CompE s|]+ lift (ArithSeqE r) = [|ArithSeqE r|]+ lift (ListE e) = [|ListE e|]+ lift (SigE e t) = [|SigE e t|]+ lift (RecConE n f) = [|RecConE n f|]+ lift (RecUpdE e f) = [|RecUpdE e f|]++instance Lift Name where+ lift (Name o f) = [|Name o f|]++instance Lift OccName where+ lift s = let s' = occString s in [|mkOccName s'|]++fromInt (I# i) = i++instance Lift NameFlavour where+ lift NameS = [|NameS|]+ lift (NameQ n) = [|NameQ n|]+ lift (NameU i) = let i' = I# i in [|NameU (fromInt i')|]+ lift (NameL i) = let i' = I# i in [|NameL (fromInt i')|]+ lift (NameG n p m) = [|NameG n p m|]++instance Lift Range where+ lift (FromR e) = [|FromR e|]+ lift (FromThenR e1 e2) = [|FromThenR e1 e2|]+ lift (FromToR e1 e2) = [|FromToR e1 e2|]+ lift (FromThenToR e1 e2 e3) = [|FromThenToR e1 e2 e3|]++instance Lift Stmt where+ lift (BindS p e) = [|BindS p e|]+ lift (LetS d) = [|LetS d|]+ lift (NoBindS e) = [|NoBindS e|]+ lift (ParS s) = [|ParS s|]++instance Lift Match where+ lift (Match p b d) = [|Match p b d|]++instance Lift Type where+ lift (ForallT n c t) = [|ForallT n c t|]+ lift (VarT n) = [|VarT n|]+ lift (ConT n) = [|ConT n|]+ lift (TupleT i) = [|TupleT i|]+ lift (ArrowT) = [|ArrowT|]+ lift (ListT) = [|ListT|]+ lift (AppT t1 t2) = [|AppT t1 t2|]++instance Lift Pat where+ lift (LitP l) = [|LitP l|]+ lift (VarP n) = [|VarP n|]+ lift (TupP p) = [|TupP p|]+ lift (ConP n p) = [|ConP n p|]+ lift (InfixP p1 n p2) = [|InfixP p1 n p2|]+ lift (TildeP p) = [|TildeP p|]+ lift (AsP n p) = [|AsP n p|]+ lift (WildP) = [|WildP|]+ lift (RecP n f) = [|RecP n f|]+ lift (ListP p) = [|ListP p|]+ lift (SigP p t) = [|SigP p t|]++instance Lift Lit where+ lift (CharL c) = [|CharL c|]+ lift (StringL s) = [|StringL s|]+ lift (IntegerL i) = [|IntegerL i|]+ lift (RationalL r) = [|RationalL r|]+ lift (IntPrimL i) = [|IntPrimL i|]+#if __GLASGOW_HASKELL__ >= 610+ lift (WordPrimL i) = [|WordPrimL i|]+#endif+ lift (FloatPrimL r) = [|FloatPrimL r|]+ lift (DoublePrimL r) = [|DoublePrimL r|]++instance Lift Dec where+ lift (FunD n c) = [|FunD n c|]+ lift (ValD p b d) = [|ValD p b d|]+ lift (DataD c n l1 l2 l3) = [|DataD c n l1 l2 l3|]+ lift (NewtypeD c n l1 c' l2) = [|NewtypeD c n l1 c' l2|]+ lift (TySynD n l t) = [|TySynD n l t|]+ lift (ClassD c n l1 l2 l3) = [|ClassD c n l1 l2 l3|]+ lift (InstanceD c t d) = [|InstanceD c t d|]+ lift (SigD n t) = [|SigD n t|]+ lift (ForeignD f) = [|ForeignD f|]++instance Lift NameSpace where+ lift (VarName) = [|VarName|]+ lift (DataName) = [|DataName|]+ lift (TcClsName) = [|TcClsName|]++instance Lift Body where+ lift (GuardedB l) = [|GuardedB l|]+ lift (NormalB e) = [|NormalB e|]++instance Lift Clause where+ lift (Clause p b d) = [|Clause p b d|]++instance Lift Con where+ lift (NormalC n m) = [|NormalC n m|]+ lift (RecC n s) = [|RecC n s|]+ lift (InfixC s1 n s2) = [|InfixC s1 n s2|]+ lift (ForallC n c c') = [|ForallC n c c'|]++instance Lift FunDep where+ lift (FunDep l1 l) = [|FunDep l1 l|]++instance Lift Foreign where+ lift (ImportF c f s n t) = [|ImportF c f s n t|]+ lift (ExportF c s n t) = [|ExportF c s n t|]++instance Lift Guard where+ lift (NormalG e) = [|NormalG e|]+ lift (PatG s) = [|PatG s|]++instance Lift Strict where+ lift (IsStrict) = [|IsStrict|]+ lift (NotStrict) = [|NotStrict|]++instance Lift Safety where+ lift (Unsafe) = [|Unsafe|]+ lift (safe) = [|safe|]++instance Lift Callconv where+ lift (CCall) = [|CCall|]+ lift (StdCall) = [|StdCall|]++instance Lift Rational where+ lift r = let n = numerator r+ d = denominator r+ in [|n % d|]++instance Lift Double where+ lift d = [| D# $(return (LitE (DoublePrimL (toRational d)))) |] ++
+ test/Main.hs view
@@ -0,0 +1,140 @@+{-# LANGUAGE CPP, TemplateHaskell #-}++module Main where++#if __GLASGOW_HASKELL__ >= 610+import Control.Category+import Prelude hiding ((.), init, exp)+#else+import Prelude hiding (init, exp)+#endif++import Control.Arrow+import Control.CCA.CCNF+import Control.CCA.Types+import System.IO+import System.CPUTime+import Sample ++newtype SF a b = SF { runSF :: (a -> (b, SF a b)) }++#if __GLASGOW_HASKELL__ >= 610+instance Category SF where+ id = SF h where h x = (x, SF h)+ g . f = SF (h f g)+ where+ h f g x =+ let (y, f') = runSF f x+ (z, g') = runSF g y+ in (z, SF (h f' g'))+#endif++instance Arrow SF where+ arr f = g+ where g = SF (\x -> (f x, g))+#if __GLASGOW_HASKELL__ < 610+ f >>> g = SF (h f g)+ where+ h f g x = + let (y, f') = runSF f x+ (z, g') = runSF g y+ in (z, SF (h f' g'))+#endif+ first f = SF (g f)+ where+ g f (x, z) = ((y, z), SF (g f'))+ where (y, f') = runSF f x+ second f = SF (g f)+ where+ g f (z, x) = ((z, y), SF (g f'))+ where (y, f') = runSF f x+ f &&& g = SF (h f g)+ where+ h f g x =+ let (y, f') = runSF f x+ (z, g') = runSF g x + in ((y, z), SF (h f' g'))+ f *** g = SF (h f g)+ where+ h f g x =+ let (y, f') = runSF f (fst x)+ (z, g') = runSF g (snd x) + in ((y, z), SF (h f' g'))++instance ArrowLoop SF where+ loop sf = SF (g sf)+ where+ g f x = (y, SF (g f'))+ where ((y, z), f') = runSF f (x, z)++instance ArrowInit SF where+ init i = SF (f i)+ where f i x = (i, SF (f x))+ loopD i g = SF (f i g)+ where+ f i g x = + let ((y, i'), g') = runSF g (x, i)+ in (y, SF (f i' g'))+ loopB i g = SF (f i g)+ where+ f i g x = + let ((y, (z, i')), g') = runSF g (x, (z, i))+ in (y, SF (f i' g'))++run :: SF a b -> [a] -> [b]+run (SF f) (x:xs) =+ let (y, f') = f x + in y `seq` (y : run f' xs)++unfold :: SF () a -> [a]+unfold = flip run inp+ where inp = () : inp++nth :: Int -> SF () a -> a+nth n (SF f) = x `seq` if n == 0 then x else nth (n - 1) f'+ where (x, f') = f ()++nth' :: Int -> (b, ((), b) -> (a, b)) -> a+nth' n (i, f) = aux n i+ where+ aux n i = x `seq` if n == 0 then x else aux (n-1) i'+ where (x, i') = f ((), i)+ +timer i = do t0 <- getCPUTime+ i `seq` (do+ t1 <- getCPUTime+ let d = t1 - t0+ putStrLn $ show d ++ "\t" ++ show i+ return d)++gnuplot f l = do+ h <- openFile f WriteMode+ mapM_ (\(x, y) -> hPutStrLn h (show x ++ "\t" ++ show y)) + (zip [0, dt..] l)+ hClose h++plot3sec fn sf = gnuplot fn (take (sr * 3) (unfold sf))++testcase list = do+ ts <- mapM timer list+ let ts' = map (\x -> 1 / fromIntegral x) ts+ let x = minimum ts'+ let ns = map (/x) ts'+ sequence_ $ [ putStr (show (fromIntegral (floor (x * 100)) / 100) ++ "\t") | x <- ns ]+ putStrLn "\n"++main = do+ let n = 1000000+ putStrLn "Compare exp singal function"+ testcase $ [nth n exp, nth n expNorm, nth' n expOpt]+ putStrLn "Compare sine singal function"+ testcase $ [nth n sine2, nth n sineNorm, nth' n sineOpt]++expNorm = $(norm exp)+expOpt = $(normOpt exp)++sine2 = sine 2+sineNorm = $(norm $ sine 2)+sineOpt = $(normOpt $ sine 2)++
+ test/Makefile view
@@ -0,0 +1,13 @@+GHC = ghc+ARROWP = ccap+FLAGS = -fvia-C -fno-method-sharing -fexcess-precision -O2 -XTemplateHaskell ++Main: Main.hs Sample.hs+ $(GHC) $(FLAGS) --make Main.hs++%.hs: %.as+ $(ARROWP) $< > $@++clean: + rm -f Main *.o *.hi Sample.hs+
+ test/Sample.as view
@@ -0,0 +1,42 @@+module Sample where++import Control.CCA+import Prelude hiding (init, exp)+import Language.Haskell.TH++sr = 44100 :: Int+dt = 1 / (fromIntegral sr)++exp :: ArrowInit a => a () Double+exp = proc () -> do+ rec let e = 1 + i+ i <- integral -< e+ returnA -< e++integral :: ArrowInit a => a Double Double+integral = proc x -> do+ rec let i' = i + x * dt+ i <- init 0 -< i'+ returnA -< i++sineA :: ArrowInit a => Double -> a () Double+sineA freq = proc _ -> do+ rec + d2o <- init (sin omh) -< r+ d1o <- init 0 -< d2o+ let r = 2 * cos(omh) * d2o - d1o+ returnA -< r+ where + omh = 2*pi/(fromIntegral sr)*freq++sine :: ArrowInit a => Double -> a () Double+sine freq = proc _ -> do+ rec x <- init i -< r+ y <- init 0 -< x + let r = c * x - y+ returnA -< r+ where+ omh = 2 * pi / (fromIntegral sr) * freq+ i = sin omh+ c = 2 * cos omh+