packages feed

language-python (empty) → 0.1.1

raw patch · 15 files changed

+8132/−0 lines, 15 filesdep +arraydep +basedep +bytestringsetup-changed

Dependencies added: array, base, bytestring, containers, pretty

Files

+ LICENSE view
@@ -0,0 +1,27 @@+Copyright (c) 2008-2009 Bernard James Pope ++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions+are met:+1. Redistributions of source code must retain the above copyright+   notice, this list of conditions and the following disclaimer.+2. Redistributions in binary form must reproduce the above copyright+   notice, this list of conditions and the following disclaimer in the+   documentation and/or other materials provided with the distribution.+3. Neither the name of the author nor the names of his contributors+   may be used to endorse or promote products derived from this software+   without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.lhs view
@@ -0,0 +1,3 @@+#!/usr/bin/env runhaskell+> import Distribution.Simple+> main = defaultMain
+ dist/build/Language/Python/Version3/Parser/Lexer.hs view
@@ -0,0 +1,628 @@+{-# OPTIONS -fglasgow-exts -cpp #-}+{-# LINE 1 "src/Language/Python/Version3/Parser/Lexer.x" #-}++-----------------------------------------------------------------------------+-- |+-- Module      : Language.Python.Version3.Parser.Lexer +-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Maintainer  : bjpop@csse.unimelb.edu.au+-- Stability   : experimental+-- Portability : ghc+--+-- Implementation of a lexer for Python version 3 programs. Generated by+-- alex. +-----------------------------------------------------------------------------++module Language.Python.Version3.Parser.Lexer +   (initStartCodeStack, lexToken, endOfFileToken, lexCont) where++import Language.Python.Version3.Parser.Token hiding (True, False)+import qualified Language.Python.Version3.Parser.Token as Token+import Language.Python.Version3.Parser.ParserMonad hiding (location)+import Language.Python.Data.SrcLocation+import qualified Data.Map as Map+import Control.Monad (liftM)+import Data.List (foldl')+import Numeric (readHex, readOct)+import qualified Data.ByteString.Char8 as BS (pack)++#if __GLASGOW_HASKELL__ >= 603+#include "ghcconfig.h"+#elif defined(__GLASGOW_HASKELL__)+#include "config.h"+#endif+#if __GLASGOW_HASKELL__ >= 503+import Data.Array+import Data.Char (ord)+import Data.Array.Base (unsafeAt)+#else+import Array+import Char (ord)+#endif+#if __GLASGOW_HASKELL__ >= 503+import GHC.Exts+#else+import GlaExts+#endif+alex_base :: AlexAddr+alex_base = AlexA# "\xf8\xff\xff\xff\x6e\x00\x00\x00\x73\x00\x00\x00\x78\x00\x00\x00\xe3\xff\xff\xff\xfd\xff\xff\xff\xfe\xff\xff\xff\x7c\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x03\x00\x00\x00\x6d\x00\x00\x00\x77\x00\x00\x00\xb2\x00\x00\x00\xbe\x00\x00\x00\xdb\x00\x00\x00\xf9\x00\x00\x00\x16\x01\x00\x00\x34\x01\x00\x00\x7d\x01\x00\x00\x8c\x01\x00\x00\xde\xff\xff\xff\x00\x00\x00\x00\x92\x00\x00\x00\x03\x01\x00\x00\x96\x01\x00\x00\xad\x01\x00\x00\x59\x00\x00\x00\x5b\x00\x00\x00\x00\x00\x00\x00\xf5\xff\xff\xff\xa9\x00\x00\x00\xae\x00\x00\x00\x2a\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\xf4\x00\x00\x00\xfa\x00\x00\x00\xe4\x01\x00\x00\x75\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x5f\x02\x00\x00\xdf\x02\x00\x00\x3d\x03\x00\x00\xb8\x03\x00\x00\x86\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x00\x00\x38\x04\x00\x00\xb8\x04\x00\x00\x16\x05\x00\x00\x91\x05\x00\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x00\x00\xf5\x00\x00\x00\x32\x01\x00\x00\x88\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x4d\x01\x00\x00\x75\x01\x00\x00\x8c\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x97\x00\x00\x00\x11\x06\x00\x00\x91\x06\x00\x00\x11\x07\x00\x00\xaa\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x91\x07\x00\x00\x11\x08\x00\x00\x91\x08\x00\x00\xb3\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\xa4\x00\x00\x00\xa5\x00\x00\x00\xb9\x00\x00\x00\xa6\x00\x00\x00\xc6\x00\x00\x00\xdf\x00\x00\x00\x35\x01\x00\x00\xf6\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xac\x00\x00\x00\xaf\x00\x00\x00\xf7\x00\x00\x00\xb1\x00\x00\x00\xfd\x00\x00\x00\x2e\x01\x00\x00\x4b\x01\x00\x00\x36\x01\x00\x00\x00\x00\x00\x00\xb4\x00\x00\x00\xb6\x00\x00\x00\xb7\x00\x00\x00\x38\x01\x00\x00\xb8\x00\x00\x00\x11\x09\x00\x00\x91\x09\x00\x00\x11\x0a\x00\x00\x91\x0a\x00\x00\x00\x00\x00\x00\xd1\x00\x00\x00\xd2\x00\x00\x00\xd3\x00\x00\x00\x49\x01\x00\x00\xd4\x00\x00\x00\x11\x0b\x00\x00\x91\x0b\x00\x00\x11\x0c\x00\x00\x91\x0c\x00\x00\x00\x00\x00\x00\x9c\x00\x00\x00\x9d\x00\x00\x00\xde\x00\x00\x00\x1b\x01\x00\x00\xf8\x00\x00\x00\x3f\x01\x00\x00\x4c\x01\x00\x00\x78\x01\x00\x00\x5f\x01\x00\x00\x00\x00\x00\x00\x04\x01\x00\x00\x1f\x01\x00\x00\x4f\x01\x00\x00\x76\x01\x00\x00\x51\x01\x00\x00\x7a\x01\x00\x00\x98\x01\x00\x00\xc6\x01\x00\x00\xae\x01\x00\x00\x00\x00\x00\x00\x52\x01\x00\x00\x53\x01\x00\x00\x56\x01\x00\x00\xc5\x01\x00\x00\x58\x01\x00\x00\x11\x0d\x00\x00\x91\x0d\x00\x00\x11\x0e\x00\x00\x91\x0e\x00\x00\x00\x00\x00\x00\x5a\x01\x00\x00\x5b\x01\x00\x00\x62\x01\x00\x00\xc7\x01\x00\x00\x64\x01\x00\x00\x11\x0f\x00\x00\x91\x0f\x00\x00\x11\x10\x00\x00\x91\x10\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xd0\x00\x00\x00\xe1\x10\x00\x00\x2c\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x01\x00\x00\x00\x00\x00\x00\xe8\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\xdc\x00\x00\x00\x63\x01\x00\x00\x60\x01\x00\x00\xe2\x00\x00\x00\x4e\x01\x00\x00\x65\x01\x00\x00\xaf\x01\x00\x00\x67\x01\x00\x00\xb8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x01\x00\x00\x00\x00\x00\x00\x6d\x01\x00\x00\x7b\x01\x00\x00\xc3\x01\x00\x00\x00\x00\x00\x00\xc4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++alex_table :: AlexAddr+alex_table = AlexA# "\x00\x00\x07\x00\xa0\x00\x07\x00\x07\x00\xa1\x00\x05\x00\xff\xff\xff\xff\x08\x00\xff\xff\xff\xff\x0a\x00\x08\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x07\x00\xc2\x00\x3a\x00\x05\x00\x56\x00\xb8\x00\xc6\x00\x1f\x00\xa8\x00\xa9\x00\xb5\x00\xb3\x00\xd5\x00\xaf\x00\x13\x00\xb6\x00\x12\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\xc8\x00\xd7\x00\xba\x00\xc0\x00\xbc\x00\x22\x00\xd6\x00\xa6\x00\x2e\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\x27\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xaa\x00\x09\x00\xab\x00\xc3\x00\xa6\x00\x20\x00\xa6\x00\x2e\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\x27\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xac\x00\xc4\x00\xad\x00\xb2\x00\x07\x00\xa4\x00\x07\x00\x07\x00\xa5\x00\x07\x00\xa2\x00\x07\x00\x07\x00\xa3\x00\x07\x00\x29\x00\x07\x00\x07\x00\x07\x00\x60\x00\x07\x00\x07\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x26\x00\x07\x00\x6a\x00\x2d\x00\x05\x00\x74\x00\x07\x00\x34\x00\x3d\x00\x05\x00\x3b\x00\x07\x00\x43\x00\x41\x00\x05\x00\x07\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x7e\x00\x14\x00\xff\xff\x47\x00\x88\x00\xff\xff\x16\x00\xff\xff\x92\x00\x9c\x00\xff\xff\x14\x00\x4d\x00\x78\x00\x79\x00\x50\x00\x16\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x09\x00\x51\x00\x50\x00\x53\x00\x5a\x00\x09\x00\x1e\x00\xa0\x00\x14\x00\x5b\x00\x09\x00\x1d\x00\x5a\x00\x16\x00\x5d\x00\xa2\x00\xa4\x00\x64\x00\x14\x00\x65\x00\x64\x00\x67\x00\x52\x00\x16\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0b\x00\x55\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x6e\x00\x6f\x00\x6e\x00\x71\x00\x16\x00\xc9\x00\xff\xff\xff\xff\x78\x00\xff\xff\xff\xff\x14\x00\xff\xff\x21\x00\x55\x00\xff\xff\x16\x00\x0b\x00\x21\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x58\x00\xb0\x00\x39\x00\x00\x00\xce\x00\x7b\x00\x24\x00\x16\x00\x55\x00\x5c\x00\xd4\x00\x14\x00\x23\x00\x58\x00\x14\x00\x5f\x00\x16\x00\x82\x00\x0b\x00\x16\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x58\x00\xff\xff\x7a\x00\x14\x00\xff\xff\x14\x00\x83\x00\x59\x00\x16\x00\x0b\x00\x16\x00\x11\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x28\x00\x3c\x00\x58\x00\x62\x00\x38\x00\x5f\x00\x28\x00\xff\xff\x63\x00\x62\x00\xff\xff\x14\x00\x54\x00\x5f\x00\x14\x00\x66\x00\x16\x00\x7d\x00\x0b\x00\x16\x00\x11\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x7d\x00\x3f\x00\x70\x00\x82\x00\x5e\x00\x85\x00\x8c\x00\x8d\x00\x1c\x00\x80\x00\x8c\x00\x14\x00\x8f\x00\x14\x00\x96\x00\x97\x00\x16\x00\xff\xff\x16\x00\x7d\x00\xff\xff\x18\x00\x96\x00\x81\x00\x99\x00\xca\x00\xae\x00\x00\x00\x62\x00\xcd\x00\x1a\x00\xb4\x00\x3c\x00\xb7\x00\x00\x00\x58\x00\x62\x00\x00\x00\x6c\x00\x00\x00\x1c\x00\x3e\x00\x84\x00\x14\x00\x7c\x00\x80\x00\x87\x00\xcc\x00\x16\x00\x00\x00\xcb\x00\x00\x00\xd2\x00\x18\x00\xd3\x00\x76\x00\xbf\x00\x62\x00\x80\x00\x42\x00\xc1\x00\xb1\x00\x1a\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x15\x00\xd1\x00\x15\x00\x87\x00\x80\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x87\x00\x42\x00\x8a\x00\x8b\x00\x80\x00\x00\x00\x8a\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x8e\x00\x86\x00\x98\x00\xc5\x00\xb9\x00\xbd\x00\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x8a\x00\xbe\x00\xbb\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x00\x00\x00\x00\x00\x00\xd0\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x25\x00\x00\x00\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x94\x00\x8a\x00\x9e\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x00\x00\x2d\x00\x2d\x00\x00\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2b\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2f\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x00\x00\x2d\x00\x2d\x00\x00\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2a\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2f\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x35\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x35\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x30\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x32\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x36\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x31\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x36\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x37\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x00\x00\x47\x00\x47\x00\x00\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x45\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x48\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x00\x00\x47\x00\x47\x00\x00\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x44\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x48\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x49\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x00\x00\x4d\x00\x4d\x00\x00\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4b\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4e\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x00\x00\x4d\x00\x4d\x00\x00\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4a\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4e\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4f\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x69\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6c\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x69\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6c\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6d\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x68\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6c\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x69\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6c\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x73\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x76\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x73\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x76\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x77\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x72\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x76\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x73\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x76\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x91\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x94\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x91\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x94\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x95\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x90\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x94\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x91\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x94\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9b\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9e\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9b\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9e\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9f\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9a\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9e\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9b\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9e\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++alex_check :: AlexAddr+alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x23\x00\x0a\x00\x0a\x00\x0a\x00\x0d\x00\x0d\x00\x0d\x00\x0a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\x21\x00\x22\x00\x23\x00\x27\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x0d\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x0a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0d\x00\x0b\x00\x0c\x00\x09\x00\x27\x00\x0b\x00\x0c\x00\x30\x00\x31\x00\x30\x00\x31\x00\x0a\x00\x20\x00\x27\x00\x0a\x00\x23\x00\x27\x00\x20\x00\x0a\x00\x0d\x00\x23\x00\x0a\x00\x20\x00\x0d\x00\x0a\x00\x23\x00\x20\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x22\x00\x45\x00\x0a\x00\x0a\x00\x22\x00\x0d\x00\x4a\x00\x0a\x00\x22\x00\x22\x00\x0d\x00\x45\x00\x0a\x00\x22\x00\x22\x00\x27\x00\x4a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x5c\x00\x27\x00\x27\x00\x27\x00\x27\x00\x5c\x00\x27\x00\x0a\x00\x65\x00\x27\x00\x5c\x00\x27\x00\x27\x00\x6a\x00\x27\x00\x0a\x00\x0a\x00\x27\x00\x65\x00\x27\x00\x27\x00\x27\x00\x27\x00\x6a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2e\x00\x27\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x27\x00\x27\x00\x27\x00\x27\x00\x4a\x00\x3d\x00\x0a\x00\x0a\x00\x22\x00\x0d\x00\x0d\x00\x45\x00\x0a\x00\x5c\x00\x27\x00\x0d\x00\x4a\x00\x2e\x00\x5c\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x5c\x00\x2e\x00\x22\x00\xff\xff\x3d\x00\x22\x00\x27\x00\x6a\x00\x27\x00\x27\x00\x3d\x00\x45\x00\x27\x00\x5c\x00\x65\x00\x27\x00\x4a\x00\x22\x00\x2e\x00\x6a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x5c\x00\x0a\x00\x22\x00\x45\x00\x0d\x00\x65\x00\x22\x00\x0d\x00\x4a\x00\x2e\x00\x6a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x5c\x00\x5c\x00\x5c\x00\x5c\x00\x22\x00\x27\x00\x5c\x00\x0a\x00\x0d\x00\x5c\x00\x0d\x00\x45\x00\x27\x00\x27\x00\x65\x00\x27\x00\x4a\x00\x22\x00\x2e\x00\x6a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x22\x00\x22\x00\x27\x00\x22\x00\x27\x00\x22\x00\x22\x00\x22\x00\x42\x00\x5c\x00\x22\x00\x45\x00\x22\x00\x65\x00\x22\x00\x22\x00\x4a\x00\x0a\x00\x6a\x00\x22\x00\x0d\x00\x4f\x00\x22\x00\x0d\x00\x22\x00\x3d\x00\x3e\x00\xff\xff\x5c\x00\x3d\x00\x58\x00\x2a\x00\x5c\x00\x2f\x00\xff\xff\x5c\x00\x5c\x00\xff\xff\x5c\x00\xff\xff\x62\x00\x22\x00\x22\x00\x65\x00\x22\x00\x5c\x00\x22\x00\x3d\x00\x6a\x00\xff\xff\x3d\x00\xff\xff\x3d\x00\x6f\x00\x3d\x00\x5c\x00\x3d\x00\x5c\x00\x5c\x00\x5c\x00\x3d\x00\x2e\x00\x78\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2b\x00\x3d\x00\x2d\x00\x22\x00\x5c\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x22\x00\x5c\x00\x5c\x00\x0d\x00\x5c\x00\xff\xff\x5c\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x22\x00\x22\x00\x22\x00\x26\x00\x3c\x00\x3d\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x5c\x00\x3d\x00\x3e\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\x3d\x00\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\x5c\x00\x27\x00\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\x5c\x00\x5c\x00\x5c\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x7c\x00\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++alex_deflt :: AlexAddr+alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x06\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x20\x00\x20\x00\xff\xff\xff\xff\xff\xff\x26\x00\x26\x00\xff\xff\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3b\x00\x3b\x00\xff\xff\xff\xff\xff\xff\x41\x00\x41\x00\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\xff\xff\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\xff\xff\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\xff\xff\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\xff\xff\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++alex_accept = listArray (0::Int,215) [[],[(AlexAcc (alex_action_31))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_27))],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[],[],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_4))],[(AlexAcc (alex_action_4))],[],[(AlexAcc (alex_action_6))],[(AlexAcc (alex_action_6))],[(AlexAcc (alex_action_40))],[],[],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_7))],[],[(AlexAcc (alex_action_8))],[],[(AlexAcc (alex_action_9))],[],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_10))],[],[],[],[],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_11))],[],[],[(AlexAcc (alex_action_32))],[],[],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_12))],[],[],[(AlexAcc (alex_action_32))],[],[],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_13))],[],[],[(AlexAcc (alex_action_32))],[],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[],[],[],[],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_15))],[],[],[],[],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_16))],[],[],[],[],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[],[],[],[],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_21))],[(AlexAcc (alex_action_21))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_22))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_25))],[(AlexAcc (alex_action_25))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_26))],[],[(AlexAccSkip)],[],[(AlexAccSkip)],[],[(AlexAcc (alex_action_32))],[(AlexAcc (alex_action_32))],[(AlexAcc (alex_action_33))],[(AlexAcc (alex_action_34))],[(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_37))],[(AlexAcc (alex_action_38))],[(AlexAcc (alex_action_39))],[(AlexAcc (alex_action_44))],[(AlexAcc (alex_action_41))],[],[(AlexAcc (alex_action_42))],[(AlexAcc (alex_action_43))],[(AlexAcc (alex_action_45))],[(AlexAcc (alex_action_46))],[(AlexAcc (alex_action_47))],[(AlexAcc (alex_action_48))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_50))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_51))],[(AlexAcc (alex_action_54))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_55))],[(AlexAcc (alex_action_56))],[(AlexAcc (alex_action_64))],[(AlexAcc (alex_action_57))],[],[(AlexAcc (alex_action_58))],[(AlexAcc (alex_action_59))],[(AlexAcc (alex_action_60))],[(AlexAcc (alex_action_61))],[(AlexAcc (alex_action_62))],[(AlexAcc (alex_action_63))],[(AlexAcc (alex_action_65))],[(AlexAcc (alex_action_66))],[(AlexAcc (alex_action_67))],[(AlexAcc (alex_action_68))],[(AlexAcc (alex_action_69))],[(AlexAcc (alex_action_70))],[(AlexAcc (alex_action_71))],[(AlexAcc (alex_action_72))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_79))]]+{-# LINE 193 "src/Language/Python/Version3/Parser/Lexer.x" #-}++-- Functions for building tokens ++type StartCode = Int+type Action = SrcLocation -> Int -> String -> P Token ++dedentation :: Action+dedentation loc _len _str = do+   let endCol = sloc_column loc +   topIndent <- getIndent+   case compare endCol topIndent of+      EQ -> do popStartCode+               lexToken +      LT -> do popIndent+               return dedentToken +      GT -> failP loc ["indentation error"]++-- Beginning of. BOF = beginning of file, BOL = beginning of line+data BO = BOF | BOL++indentation :: BO -> Action +-- Check if we are at the EOF. If yes, we may need to generate a newline,+-- in case we came here from BOL (but not BOF).+indentation bo _loc _len [] = do+   popStartCode+   case bo of+      BOF -> lexToken+      BOL -> return newlineToken+indentation bo loc _len _str = do+   popStartCode+   parenDepth <- getParenStackDepth+   if parenDepth > 0+      then lexToken+      else do +         topIndent <- getIndent+         let endCol = sloc_column loc +         case compare endCol topIndent of+            EQ -> case bo of+                     BOF -> lexToken+                     BOL -> return newlineToken   +            LT -> do pushStartCode dedent+                     return newlineToken +            GT -> do pushIndent endCol +                     return indentToken +   where+   -- the location of the newline is not known here +   newlineToken = Newline NoLocation+   indentToken = Indent loc ++begin :: StartCode -> Action +begin code loc len inp = do+   pushStartCode code+   lexToken ++symbolToken :: (SrcLocation -> Token) -> Action +symbolToken mkToken location _ _ = return (mkToken location)++token_fail :: String -> Action +token_fail message location _ _ +   = failP location [ "Lexical Error !", message]++token :: (SrcLocation -> a -> Token) -> (String -> a) -> Action +token mkToken read location len str +   = return $ mkToken location (read $ take len str)++-- a keyword or an identifier (the syntax overlaps)+keywordOrIdent :: String -> SrcLocation -> P Token+keywordOrIdent str location+   = return $ case Map.lookup str keywords of+         Just symbol -> symbol location+         Nothing -> Identifier location str  ++-- mapping from strings to keywords+keywords :: Map.Map String (SrcLocation -> Token) +keywords = Map.fromList keywordNames ++keywordNames :: [(String, SrcLocation -> Token)]+keywordNames =+   [ ("False", Token.False), ("class", Class), ("finally", Finally), ("is", Is), ("return", Return)+   , ("None", None), ("continue", Continue), ("for", For), ("lambda", Lambda), ("try", Try)+   , ("True", Token.True), ("def", Def), ("from", From), ("nonlocal", NonLocal), ("while", While)+   , ("and", And), ("del", Delete), ("global", Global), ("not", Not), ("with", With)+   , ("as", As), ("elif", Elif), ("if", If), ("or", Or), ("yield", Yield)+   , ("assert", Assert), ("else", Else), ("import", Import), ("pass", Pass)+   , ("break", Break), ("except", Except), ("in", In), ("raise", Raise)+   ]++-- The lexer starts off in the beginning of file state (bof)+initStartCodeStack :: [Int]+initStartCodeStack = [bof,0]++-- special tokens for the end of file and end of line+endOfFileToken :: Token+endOfFileToken = EOF+newlineToken = Newline NoLocation+dedentToken = Dedent NoLocation++-- Test if we are at the end of the line or file+atEOLorEOF :: a -> AlexInput -> Int -> AlexInput -> Bool+atEOLorEOF _user _inputBeforeToken _tokenLength (_loc, inputAfterToken) +   = null inputAfterToken || nextChar == '\n' || nextChar == '\r'+   where+   nextChar = head inputAfterToken ++notEOF :: a -> AlexInput -> Int -> AlexInput -> Bool+notEOF _user _inputBeforeToken _tokenLength (_loc, inputAfterToken) +   = not (null inputAfterToken)++readBinary :: String -> Integer+readBinary +   = toBinary . drop 2 +   where+   toBinary = foldl' acc 0+   acc b '0' = 2 * b+   acc b '1' = 2 * b + 1++{-+floatnumber   ::=  pointfloat | exponentfloat+pointfloat    ::=  [intpart] fraction | intpart "."+exponentfloat ::=  (intpart | pointfloat) exponent+intpart       ::=  digit++fraction      ::=  "." digit++exponent      ::=  ("e" | "E") ["+" | "-"] digit++-}+readFloat :: String -> Double+readFloat str@('.':cs) = read ('0':readFloatRest str)+readFloat str = read (readFloatRest str)+readFloatRest :: String -> String+readFloatRest [] = []+readFloatRest ['.'] = ".0"+readFloatRest (c:cs) = c : readFloatRest cs++mkString :: Int -> Int -> (SrcLocation -> String -> Token) -> Action+mkString leftSkip rightSkip toToken loc len str = do+   let contentLen = len - (leftSkip + rightSkip)+   let contents = take contentLen $ drop leftSkip str+   -- return $ String loc $ processString contents +   return $ toToken loc contents ++stringToken :: SrcLocation -> String -> Token+stringToken loc str = String loc $ unescapeString str++rawStringToken :: SrcLocation -> String -> Token+rawStringToken loc str = String loc $ unescapeRawString str++byteStringToken :: SrcLocation -> String -> Token+byteStringToken loc str = ByteString loc $ BS.pack $ unescapeString str++rawByteStringToken :: SrcLocation -> String -> Token+rawByteStringToken loc str = ByteString loc $ BS.pack $ unescapeRawString str++openParen :: (SrcLocation -> Token) -> Action+openParen mkToken loc _len _str = do+   let token = mkToken loc+   pushParen token +   return token ++closeParen :: (SrcLocation -> Token) -> Action+closeParen mkToken loc _len _str = do+  let token = mkToken loc+  topParen <- getParen+  case topParen of+     Nothing -> failP loc err1 +     Just open -> if matchParen open token +                    then popParen >> return token+                    else failP loc err2+   where+   -- XXX fix these error messages+   err1 = ["Lexical error ! unmatched closing paren"]+   err2 = ["Lexical error ! unmatched closing paren"]++matchParen :: Token -> Token -> Bool+matchParen (LeftRoundBracket {}) (RightRoundBracket {}) = True+matchParen (LeftBrace {}) (RightBrace {}) = True+matchParen (LeftSquareBracket {}) (RightSquareBracket {}) = True+matchParen _ _ = False++unescapeString :: String -> String+unescapeString ('\\':'\\':cs) = '\\' : unescapeString cs -- Backslash (\)+unescapeString ('\\':'\'':cs) = '\'' : unescapeString cs -- Single quote (')+unescapeString ('\\':'"':cs) = '"' : unescapeString cs -- Double quote (")+unescapeString ('\\':'a':cs) = '\a' : unescapeString cs -- ASCII Bell (BEL)+unescapeString ('\\':'b':cs) = '\b' : unescapeString cs -- ASCII Backspace (BS)+unescapeString ('\\':'f':cs) = '\f' : unescapeString cs -- ASCII Formfeed (FF)+unescapeString ('\\':'n':cs) = '\n' : unescapeString cs -- ASCII Linefeed (LF)+unescapeString ('\\':'r':cs) = '\r' : unescapeString cs -- ASCII Carriage Return (CR)+unescapeString ('\\':'t':cs) = '\t' : unescapeString cs -- ASCII Horizontal Tab (TAB)+unescapeString ('\\':'v':cs) = '\v' : unescapeString cs -- ASCII Vertical Tab (VT)+unescapeString ('\\':'\n':cs) = unescapeString cs -- line continuation+unescapeString ('\\':rest@(o:_))+   | o `elem` octalDigits = unescapeNumeric 3 octalDigits (fst . head . readOct) rest +unescapeString ('\\':'x':rest@(h:_))+   | h `elem` hexDigits = unescapeNumeric 2 hexDigits (fst . head . readHex) rest +unescapeString (c:cs) = c : unescapeString cs +unescapeString [] = []++unescapeRawString :: String -> String+unescapeRawString ('\\':'\'':cs) = '\'' : unescapeRawString cs -- Single quote (')+unescapeRawString ('\\':'"':cs) = '"' : unescapeRawString cs -- Double quote (")+unescapeRawString ('\\':'\n':cs) = unescapeRawString cs -- line continuation+unescapeRawString (c:cs) = c : unescapeRawString cs+unescapeRawString [] = []++{- +   This is a bit complicated because Python allows between 1 and 3 octal+   characters after the \, and 1 and 2 hex characters after a \x.+-}+unescapeNumeric :: Int -> String -> (String -> Int) -> String -> String+unescapeNumeric n numericDigits readNumeric str+   = loop n [] str +   where+   loop _ acc [] = [numericToChar acc]+   loop 0 acc rest+      = numericToChar acc : unescapeString rest+   loop n acc (c:cs)+      | c `elem` numericDigits = loop (n-1) (c:acc) cs+      | otherwise = numericToChar acc : unescapeString (c:cs)+   numericToChar :: String -> Char+   numericToChar = toEnum . readNumeric . reverse++octalDigits, hexDigits :: String+octalDigits = "01234567"+hexDigits = "0123456789abcdef"+ ++-- -----------------------------------------------------------------------------+-- Functionality required by Alex ++type AlexInput = (SrcLocation, String)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar _ = error "alexInputPrevChar not used"++alexGetChar :: AlexInput -> Maybe (Char, AlexInput)+alexGetChar (loc, input) +   | null input  = Nothing+   | otherwise = Just (nextChar, (nextLoc, rest))+   where+   nextChar = head input+   rest = tail input +   nextLoc = moveChar nextChar loc++moveChar :: Char -> SrcLocation -> SrcLocation +moveChar '\n' = incLine 1 +moveChar '\t' = incTab +moveChar '\r' = id +moveChar _    = incColumn 1 ++lexicalError :: P a+lexicalError = do+  location <- getLocation+  c <- liftM head getInput+  failP location +        ["Lexical error !",+         "The character " ++ show c ++ " does not fit here."]++parseError :: P a+parseError = do+  token <- getLastToken+  failP (location token)+        ["Syntax error !",+         "The symbol `" ++ show token ++ "' does not fit here."]++lexToken :: P Token+lexToken = do+  location <- getLocation+  input <- getInput+  startCode <- getStartCode+  case alexScan (location, input) startCode of+    AlexEOF -> do+       depth <- getIndentStackDepth+       if depth <= 1 +          then return endOfFileToken+          else do +             popIndent+             return dedentToken+    AlexError _ -> lexicalError+    AlexSkip (nextLocation, rest) len -> do+       setLocation nextLocation +       setInput rest +       lexToken+    AlexToken (nextLocation, rest) len action -> do+       setLocation nextLocation +       setInput rest +       token <- action location len input +       setLastToken token+       return token++lexCont :: (Token -> P a) -> P a+lexCont cont = do+  tok <- lexToken+  cont tok+++bof,bol,dedent :: Int+bof = 1+bol = 2+dedent = 3+alex_action_3 =  token Token.Float readFloat +alex_action_4 =  token Token.Integer read +alex_action_5 =  token Token.Imaginary (readFloat.init) +alex_action_6 =  token Token.Integer read +alex_action_7 =  token Token.Integer read +alex_action_8 =  token Token.Integer read +alex_action_9 =  token Token.Integer readBinary +alex_action_10 =  mkString 1 1 stringToken +alex_action_11 =  mkString 2 1 rawStringToken +alex_action_12 =  mkString 2 1 byteStringToken +alex_action_13 =  mkString 3 1 rawByteStringToken +alex_action_14 =  mkString 1 1 stringToken +alex_action_15 =  mkString 2 1 rawStringToken +alex_action_16 =  mkString 2 1 byteStringToken +alex_action_17 =  mkString 3 1 rawByteStringToken +alex_action_18 =  mkString 3 3 stringToken +alex_action_19 =  mkString 4 3 rawStringToken +alex_action_20 =  mkString 4 3 byteStringToken +alex_action_21 =  mkString 5 3 rawByteStringToken +alex_action_22 =  mkString 3 3 stringToken +alex_action_23 =  mkString 4 3 rawStringToken +alex_action_24 =  mkString 4 3 byteStringToken +alex_action_25 =  mkString 5 3 rawByteStringToken +alex_action_26 =  begin bol +alex_action_27 =  dedentation +alex_action_29 =  indentation BOL +alex_action_31 =  indentation BOF +alex_action_32 =  \loc len str -> keywordOrIdent (take len str) loc +alex_action_33 =  openParen Token.LeftRoundBracket +alex_action_34 =  closeParen Token.RightRoundBracket +alex_action_35 =  openParen Token.LeftSquareBracket +alex_action_36 =  closeParen Token.RightSquareBracket +alex_action_37 =  openParen Token.LeftBrace +alex_action_38 =  closeParen Token.RightBrace +alex_action_39 =  symbolToken Token.RightArrow +alex_action_40 =  symbolToken Token.Dot +alex_action_41 =  symbolToken Token.Ellipsis +alex_action_42 =  symbolToken Token.Tilde +alex_action_43 =  symbolToken Token.Plus +alex_action_44 =  symbolToken Token.Minus +alex_action_45 =  symbolToken Token.Exponent +alex_action_46 =  symbolToken Token.Mult +alex_action_47 =  symbolToken Token.Div +alex_action_48 =  symbolToken Token.FloorDiv +alex_action_49 =  symbolToken Token.Modulo +alex_action_50 =  symbolToken Token.ShiftLeft +alex_action_51 =  symbolToken Token.ShiftRight +alex_action_52 =  symbolToken Token.LessThan +alex_action_53 =  symbolToken Token.LessThanEquals +alex_action_54 =  symbolToken Token.GreaterThan +alex_action_55 =  symbolToken Token.GreaterThanEquals +alex_action_56 =  symbolToken Token.Equality +alex_action_57 =  symbolToken Token.NotEquals +alex_action_58 =  symbolToken Token.Xor +alex_action_59 =  symbolToken Token.BinaryOr +alex_action_60 =  symbolToken Token.And +alex_action_61 =  symbolToken Token.BinaryAnd +alex_action_62 =  symbolToken Token.Or +alex_action_63 =  symbolToken Token.Colon +alex_action_64 =  symbolToken Token.Assign +alex_action_65 =  symbolToken Token.PlusAssign +alex_action_66 =  symbolToken Token.MinusAssign +alex_action_67 =  symbolToken Token.MultAssign +alex_action_68 =  symbolToken Token.DivAssign +alex_action_69 =  symbolToken Token.ModAssign +alex_action_70 =  symbolToken Token.PowAssign +alex_action_71 =  symbolToken Token.BinAndAssign +alex_action_72 =  symbolToken Token.BinOrAssign +alex_action_73 =  symbolToken Token.BinXorAssign +alex_action_74 =  symbolToken Token.LeftShiftAssign +alex_action_75 =  symbolToken Token.RightShiftAssign +alex_action_76 =  symbolToken Token.FloorDivAssign +alex_action_77 =  symbolToken Token.Comma +alex_action_78 =  symbolToken Token.At +alex_action_79 =  symbolToken Token.SemiColon +{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "<built-in>" #-}+{-# LINE 1 "<command line>" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- -----------------------------------------------------------------------------+-- ALEX TEMPLATE+--+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use+-- it for any purpose whatsoever.++-- -----------------------------------------------------------------------------+-- INTERNALS and main scanner engine++{-# LINE 35 "templates/GenericTemplate.hs" #-}++{-# LINE 45 "templates/GenericTemplate.hs" #-}+++data AlexAddr = AlexA# Addr#++#if __GLASGOW_HASKELL__ < 503+uncheckedShiftL# = shiftL#+#endif++{-# INLINE alexIndexInt16OffAddr #-}+alexIndexInt16OffAddr (AlexA# arr) off =+#ifdef WORDS_BIGENDIAN+  narrow16Int# i+  where+	i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)+	high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+	low  = int2Word# (ord# (indexCharOffAddr# arr off'))+	off' = off *# 2#+#else+  indexInt16OffAddr# arr off+#endif++++++{-# INLINE alexIndexInt32OffAddr #-}+alexIndexInt32OffAddr (AlexA# arr) off = +#ifdef WORDS_BIGENDIAN+  narrow32Int# i+  where+   i    = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`+		     (b2 `uncheckedShiftL#` 16#) `or#`+		     (b1 `uncheckedShiftL#` 8#) `or#` b0)+   b3   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))+   b2   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))+   b1   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+   b0   = int2Word# (ord# (indexCharOffAddr# arr off'))+   off' = off *# 4#+#else+  indexInt32OffAddr# arr off+#endif++++++#if __GLASGOW_HASKELL__ < 503+quickIndex arr i = arr ! i+#else+-- GHC >= 503, unsafeAt is available from Data.Array.Base.+quickIndex = unsafeAt+#endif+++++-- -----------------------------------------------------------------------------+-- Main lexing routines++data AlexReturn a+  = AlexEOF+  | AlexError  !AlexInput+  | AlexSkip   !AlexInput !Int+  | AlexToken  !AlexInput !Int a++-- alexScan :: AlexInput -> StartCode -> AlexReturn a+alexScan input (I# (sc))+  = alexScanUser undefined input (I# (sc))++alexScanUser user input (I# (sc))+  = case alex_scan_tkn user input 0# input sc AlexNone of+	(AlexNone, input') ->+		case alexGetChar input of+			Nothing -> ++++				   AlexEOF+			Just _ ->++++				   AlexError input'++	(AlexLastSkip input len, _) ->++++		AlexSkip input len++	(AlexLastAcc k input len, _) ->++++		AlexToken input len k+++-- Push the input through the DFA, remembering the most recent accepting+-- state it encountered.++alex_scan_tkn user orig_input len input s last_acc =+  input `seq` -- strict in the input+  let +	new_acc = check_accs (alex_accept `quickIndex` (I# (s)))+  in+  new_acc `seq`+  case alexGetChar input of+     Nothing -> (new_acc, input)+     Just (c, new_input) -> ++++	let+		base   = alexIndexInt32OffAddr alex_base s+		(I# (ord_c)) = ord c+		offset = (base +# ord_c)+		check  = alexIndexInt16OffAddr alex_check offset+		+		new_s = if (offset >=# 0#) && (check ==# ord_c)+			  then alexIndexInt16OffAddr alex_table offset+			  else alexIndexInt16OffAddr alex_deflt s+	in+	case new_s of +	    -1# -> (new_acc, input)+		-- on an error, we want to keep the input *before* the+		-- character that failed, not after.+    	    _ -> alex_scan_tkn user orig_input (len +# 1#) +			new_input new_s new_acc++  where+	check_accs [] = last_acc+	check_accs (AlexAcc a : _) = AlexLastAcc a input (I# (len))+	check_accs (AlexAccSkip : _)  = AlexLastSkip  input (I# (len))+	check_accs (AlexAccPred a pred : rest)+	   | pred user orig_input (I# (len)) input+	   = AlexLastAcc a input (I# (len))+	check_accs (AlexAccSkipPred pred : rest)+	   | pred user orig_input (I# (len)) input+	   = AlexLastSkip input (I# (len))+	check_accs (_ : rest) = check_accs rest++data AlexLastAcc a+  = AlexNone+  | AlexLastAcc a !AlexInput !Int+  | AlexLastSkip  !AlexInput !Int++data AlexAcc a user+  = AlexAcc a+  | AlexAccSkip+  | AlexAccPred a (AlexAccPred user)+  | AlexAccSkipPred (AlexAccPred user)++type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool++-- -----------------------------------------------------------------------------+-- Predicates on a rule++alexAndPred p1 p2 user in1 len in2+  = p1 user in1 len in2 && p2 user in1 len in2++--alexPrevCharIsPred :: Char -> AlexAccPred _ +alexPrevCharIs c _ input _ _ = c == alexInputPrevChar input++--alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _ +alexPrevCharIsOneOf arr _ input _ _ = arr ! alexInputPrevChar input++--alexRightContext :: Int -> AlexAccPred _+alexRightContext (I# (sc)) user _ _ input = +     case alex_scan_tkn user input 0# input sc AlexNone of+	  (AlexNone, _) -> False+	  _ -> True+	-- TODO: there's no need to find the longest+	-- match when checking the right context, just+	-- the first match will do.++-- used by wrappers+iUnbox (I# (i)) = i
+ dist/build/Language/Python/Version3/Parser/Parser.hs view
@@ -0,0 +1,4330 @@+{-# OPTIONS -fglasgow-exts -cpp #-}+-----------------------------------------------------------------------------+-- |+-- Module      : Language.Python.Version3.Parser.Parser +-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Maintainer  : bjpop@csse.unimelb.edu.au+-- Stability   : experimental+-- Portability : ghc+--+-- Implementation of the Python version 3 parser. Generated by happy. +-----------------------------------------------------------------------------++module Language.Python.Version3.Parser.Parser (parseFileInput, parseSingleInput, parseEval) where++import Data.Char (isSpace, isAlpha, isDigit)+import Language.Python.Version3.Parser.Lexer+import Language.Python.Version3.Parser.Token hiding (True, False)+import qualified Language.Python.Version3.Parser.Token as Token+import Language.Python.Version3.Syntax.AST as AST+import Language.Python.Version3.Parser.ParserUtils+import Language.Python.Version3.Parser.ParserMonad+import Language.Python.Data.SrcLocation+import Data.List (foldl')+import qualified Data.ByteString.Char8 as BS (ByteString)+#if __GLASGOW_HASKELL__ >= 503+import Data.Array+#else+import Array+#endif+#if __GLASGOW_HASKELL__ >= 503+import GHC.Exts+#else+import GlaExts+#endif++-- parser produced by Happy Version 1.17++newtype HappyAbsSyn  = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = GHC.Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn6 :: ([Statement]) -> (HappyAbsSyn )+happyIn6 x = unsafeCoerce# x+{-# INLINE happyIn6 #-}+happyOut6 :: (HappyAbsSyn ) -> ([Statement])+happyOut6 x = unsafeCoerce# x+{-# INLINE happyOut6 #-}+happyIn7 :: (Module) -> (HappyAbsSyn )+happyIn7 x = unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn ) -> (Module)+happyOut7 x = unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: ([Statement]) -> (HappyAbsSyn )+happyIn8 x = unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn ) -> ([Statement])+happyOut8 x = unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: ([[Statement]]) -> (HappyAbsSyn )+happyIn9 x = unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn ) -> ([[Statement]])+happyOut9 x = unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: ([Statement]) -> (HappyAbsSyn )+happyIn10 x = unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn ) -> ([Statement])+happyOut10 x = unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: (Expr) -> (HappyAbsSyn )+happyIn11 x = unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn ) -> (Expr)+happyOut11 x = unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: (()) -> (HappyAbsSyn )+happyIn12 x = unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn ) -> (())+happyOut12 x = unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: (Decorator) -> (HappyAbsSyn )+happyIn13 x = unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn ) -> (Decorator)+happyOut13 x = unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: ([Decorator]) -> (HappyAbsSyn )+happyIn14 x = unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn ) -> ([Decorator])+happyOut14 x = unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: ([Decorator]) -> (HappyAbsSyn )+happyIn15 x = unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn ) -> ([Decorator])+happyOut15 x = unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: (Statement) -> (HappyAbsSyn )+happyIn16 x = unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn ) -> (Statement)+happyOut16 x = unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: (Statement) -> (HappyAbsSyn )+happyIn17 x = unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn ) -> (Statement)+happyOut17 x = unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: (Statement) -> (HappyAbsSyn )+happyIn18 x = unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn ) -> (Statement)+happyOut18 x = unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: (Maybe Expr) -> (HappyAbsSyn )+happyIn19 x = unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn ) -> (Maybe Expr)+happyOut19 x = unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: ([Parameter]) -> (HappyAbsSyn )+happyIn20 x = unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn ) -> ([Parameter])+happyOut20 x = unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: ([Parameter]) -> (HappyAbsSyn )+happyIn21 x = unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn ) -> ([Parameter])+happyOut21 x = unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: ([Parameter]) -> (HappyAbsSyn )+happyIn22 x = unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn ) -> ([Parameter])+happyOut22 x = unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyIn23 :: ([Parameter]) -> (HappyAbsSyn )+happyIn23 x = unsafeCoerce# x+{-# INLINE happyIn23 #-}+happyOut23 :: (HappyAbsSyn ) -> ([Parameter])+happyOut23 x = unsafeCoerce# x+{-# INLINE happyOut23 #-}+happyIn24 :: ((Ident, Maybe Expr)) -> (HappyAbsSyn )+happyIn24 x = unsafeCoerce# x+{-# INLINE happyIn24 #-}+happyOut24 :: (HappyAbsSyn ) -> ((Ident, Maybe Expr))+happyOut24 x = unsafeCoerce# x+{-# INLINE happyOut24 #-}+happyIn25 :: (Maybe Expr) -> (HappyAbsSyn )+happyIn25 x = unsafeCoerce# x+{-# INLINE happyIn25 #-}+happyOut25 :: (HappyAbsSyn ) -> (Maybe Expr)+happyOut25 x = unsafeCoerce# x+{-# INLINE happyOut25 #-}+happyIn26 :: (Maybe Expr) -> (HappyAbsSyn )+happyIn26 x = unsafeCoerce# x+{-# INLINE happyIn26 #-}+happyOut26 :: (HappyAbsSyn ) -> (Maybe Expr)+happyOut26 x = unsafeCoerce# x+{-# INLINE happyOut26 #-}+happyIn27 :: (Parameter) -> (HappyAbsSyn )+happyIn27 x = unsafeCoerce# x+{-# INLINE happyIn27 #-}+happyOut27 :: (HappyAbsSyn ) -> (Parameter)+happyOut27 x = unsafeCoerce# x+{-# INLINE happyOut27 #-}+happyIn28 :: (Parameter) -> (HappyAbsSyn )+happyIn28 x = unsafeCoerce# x+{-# INLINE happyIn28 #-}+happyOut28 :: (HappyAbsSyn ) -> (Parameter)+happyOut28 x = unsafeCoerce# x+{-# INLINE happyOut28 #-}+happyIn29 :: (Maybe (Ident, Maybe Expr)) -> (HappyAbsSyn )+happyIn29 x = unsafeCoerce# x+{-# INLINE happyIn29 #-}+happyOut29 :: (HappyAbsSyn ) -> (Maybe (Ident, Maybe Expr))+happyOut29 x = unsafeCoerce# x+{-# INLINE happyOut29 #-}+happyIn30 :: (Parameter) -> (HappyAbsSyn )+happyIn30 x = unsafeCoerce# x+{-# INLINE happyIn30 #-}+happyOut30 :: (HappyAbsSyn ) -> (Parameter)+happyOut30 x = unsafeCoerce# x+{-# INLINE happyOut30 #-}+happyIn31 :: ([Parameter]) -> (HappyAbsSyn )+happyIn31 x = unsafeCoerce# x+{-# INLINE happyIn31 #-}+happyOut31 :: (HappyAbsSyn ) -> ([Parameter])+happyOut31 x = unsafeCoerce# x+{-# INLINE happyOut31 #-}+happyIn32 :: ([Parameter]) -> (HappyAbsSyn )+happyIn32 x = unsafeCoerce# x+{-# INLINE happyIn32 #-}+happyOut32 :: (HappyAbsSyn ) -> ([Parameter])+happyOut32 x = unsafeCoerce# x+{-# INLINE happyOut32 #-}+happyIn33 :: ([Parameter]) -> (HappyAbsSyn )+happyIn33 x = unsafeCoerce# x+{-# INLINE happyIn33 #-}+happyOut33 :: (HappyAbsSyn ) -> ([Parameter])+happyOut33 x = unsafeCoerce# x+{-# INLINE happyOut33 #-}+happyIn34 :: (Parameter) -> (HappyAbsSyn )+happyIn34 x = unsafeCoerce# x+{-# INLINE happyIn34 #-}+happyOut34 :: (HappyAbsSyn ) -> (Parameter)+happyOut34 x = unsafeCoerce# x+{-# INLINE happyOut34 #-}+happyIn35 :: (Parameter) -> (HappyAbsSyn )+happyIn35 x = unsafeCoerce# x+{-# INLINE happyIn35 #-}+happyOut35 :: (HappyAbsSyn ) -> (Parameter)+happyOut35 x = unsafeCoerce# x+{-# INLINE happyOut35 #-}+happyIn36 :: (Maybe (Ident, Maybe Expr)) -> (HappyAbsSyn )+happyIn36 x = unsafeCoerce# x+{-# INLINE happyIn36 #-}+happyOut36 :: (HappyAbsSyn ) -> (Maybe (Ident, Maybe Expr))+happyOut36 x = unsafeCoerce# x+{-# INLINE happyOut36 #-}+happyIn37 :: (Parameter) -> (HappyAbsSyn )+happyIn37 x = unsafeCoerce# x+{-# INLINE happyIn37 #-}+happyOut37 :: (HappyAbsSyn ) -> (Parameter)+happyOut37 x = unsafeCoerce# x+{-# INLINE happyOut37 #-}+happyIn38 :: (Ident) -> (HappyAbsSyn )+happyIn38 x = unsafeCoerce# x+{-# INLINE happyIn38 #-}+happyOut38 :: (HappyAbsSyn ) -> (Ident)+happyOut38 x = unsafeCoerce# x+{-# INLINE happyOut38 #-}+happyIn39 :: (Ident) -> (HappyAbsSyn )+happyIn39 x = unsafeCoerce# x+{-# INLINE happyIn39 #-}+happyOut39 :: (HappyAbsSyn ) -> (Ident)+happyOut39 x = unsafeCoerce# x+{-# INLINE happyOut39 #-}+happyIn40 :: ([Statement]) -> (HappyAbsSyn )+happyIn40 x = unsafeCoerce# x+{-# INLINE happyIn40 #-}+happyOut40 :: (HappyAbsSyn ) -> ([Statement])+happyOut40 x = unsafeCoerce# x+{-# INLINE happyOut40 #-}+happyIn41 :: ([Statement]) -> (HappyAbsSyn )+happyIn41 x = unsafeCoerce# x+{-# INLINE happyIn41 #-}+happyOut41 :: (HappyAbsSyn ) -> ([Statement])+happyOut41 x = unsafeCoerce# x+{-# INLINE happyOut41 #-}+happyIn42 :: (()) -> (HappyAbsSyn )+happyIn42 x = unsafeCoerce# x+{-# INLINE happyIn42 #-}+happyOut42 :: (HappyAbsSyn ) -> (())+happyOut42 x = unsafeCoerce# x+{-# INLINE happyOut42 #-}+happyIn43 :: ([Statement]) -> (HappyAbsSyn )+happyIn43 x = unsafeCoerce# x+{-# INLINE happyIn43 #-}+happyOut43 :: (HappyAbsSyn ) -> ([Statement])+happyOut43 x = unsafeCoerce# x+{-# INLINE happyOut43 #-}+happyIn44 :: (Statement) -> (HappyAbsSyn )+happyIn44 x = unsafeCoerce# x+{-# INLINE happyIn44 #-}+happyOut44 :: (HappyAbsSyn ) -> (Statement)+happyOut44 x = unsafeCoerce# x+{-# INLINE happyOut44 #-}+happyIn45 :: (Statement) -> (HappyAbsSyn )+happyIn45 x = unsafeCoerce# x+{-# INLINE happyIn45 #-}+happyOut45 :: (HappyAbsSyn ) -> (Statement)+happyOut45 x = unsafeCoerce# x+{-# INLINE happyOut45 #-}+happyIn46 :: (Either [Expr] (AssignOp, Expr)) -> (HappyAbsSyn )+happyIn46 x = unsafeCoerce# x+{-# INLINE happyIn46 #-}+happyOut46 :: (HappyAbsSyn ) -> (Either [Expr] (AssignOp, Expr))+happyOut46 x = unsafeCoerce# x+{-# INLINE happyOut46 #-}+happyIn47 :: ([Expr]) -> (HappyAbsSyn )+happyIn47 x = unsafeCoerce# x+{-# INLINE happyIn47 #-}+happyOut47 :: (HappyAbsSyn ) -> ([Expr])+happyOut47 x = unsafeCoerce# x+{-# INLINE happyOut47 #-}+happyIn48 :: ([Expr]) -> (HappyAbsSyn )+happyIn48 x = unsafeCoerce# x+{-# INLINE happyIn48 #-}+happyOut48 :: (HappyAbsSyn ) -> ([Expr])+happyOut48 x = unsafeCoerce# x+{-# INLINE happyOut48 #-}+happyIn49 :: (Expr) -> (HappyAbsSyn )+happyIn49 x = unsafeCoerce# x+{-# INLINE happyIn49 #-}+happyOut49 :: (HappyAbsSyn ) -> (Expr)+happyOut49 x = unsafeCoerce# x+{-# INLINE happyOut49 #-}+happyIn50 :: ((AssignOp, Expr)) -> (HappyAbsSyn )+happyIn50 x = unsafeCoerce# x+{-# INLINE happyIn50 #-}+happyOut50 :: (HappyAbsSyn ) -> ((AssignOp, Expr))+happyOut50 x = unsafeCoerce# x+{-# INLINE happyOut50 #-}+happyIn51 :: (AssignOp) -> (HappyAbsSyn )+happyIn51 x = unsafeCoerce# x+{-# INLINE happyIn51 #-}+happyOut51 :: (HappyAbsSyn ) -> (AssignOp)+happyOut51 x = unsafeCoerce# x+{-# INLINE happyOut51 #-}+happyIn52 :: (Statement) -> (HappyAbsSyn )+happyIn52 x = unsafeCoerce# x+{-# INLINE happyIn52 #-}+happyOut52 :: (HappyAbsSyn ) -> (Statement)+happyOut52 x = unsafeCoerce# x+{-# INLINE happyOut52 #-}+happyIn53 :: (Statement) -> (HappyAbsSyn )+happyIn53 x = unsafeCoerce# x+{-# INLINE happyIn53 #-}+happyOut53 :: (HappyAbsSyn ) -> (Statement)+happyOut53 x = unsafeCoerce# x+{-# INLINE happyOut53 #-}+happyIn54 :: (Statement) -> (HappyAbsSyn )+happyIn54 x = unsafeCoerce# x+{-# INLINE happyIn54 #-}+happyOut54 :: (HappyAbsSyn ) -> (Statement)+happyOut54 x = unsafeCoerce# x+{-# INLINE happyOut54 #-}+happyIn55 :: (Statement) -> (HappyAbsSyn )+happyIn55 x = unsafeCoerce# x+{-# INLINE happyIn55 #-}+happyOut55 :: (HappyAbsSyn ) -> (Statement)+happyOut55 x = unsafeCoerce# x+{-# INLINE happyOut55 #-}+happyIn56 :: (Statement) -> (HappyAbsSyn )+happyIn56 x = unsafeCoerce# x+{-# INLINE happyIn56 #-}+happyOut56 :: (HappyAbsSyn ) -> (Statement)+happyOut56 x = unsafeCoerce# x+{-# INLINE happyOut56 #-}+happyIn57 :: (Statement) -> (HappyAbsSyn )+happyIn57 x = unsafeCoerce# x+{-# INLINE happyIn57 #-}+happyOut57 :: (HappyAbsSyn ) -> (Statement)+happyOut57 x = unsafeCoerce# x+{-# INLINE happyOut57 #-}+happyIn58 :: (Statement) -> (HappyAbsSyn )+happyIn58 x = unsafeCoerce# x+{-# INLINE happyIn58 #-}+happyOut58 :: (HappyAbsSyn ) -> (Statement)+happyOut58 x = unsafeCoerce# x+{-# INLINE happyOut58 #-}+happyIn59 :: (Statement) -> (HappyAbsSyn )+happyIn59 x = unsafeCoerce# x+{-# INLINE happyIn59 #-}+happyOut59 :: (HappyAbsSyn ) -> (Statement)+happyOut59 x = unsafeCoerce# x+{-# INLINE happyOut59 #-}+happyIn60 :: (Maybe (Expr, Maybe Expr)) -> (HappyAbsSyn )+happyIn60 x = unsafeCoerce# x+{-# INLINE happyIn60 #-}+happyOut60 :: (HappyAbsSyn ) -> (Maybe (Expr, Maybe Expr))+happyOut60 x = unsafeCoerce# x+{-# INLINE happyOut60 #-}+happyIn61 :: (Maybe Expr) -> (HappyAbsSyn )+happyIn61 x = unsafeCoerce# x+{-# INLINE happyIn61 #-}+happyOut61 :: (HappyAbsSyn ) -> (Maybe Expr)+happyOut61 x = unsafeCoerce# x+{-# INLINE happyOut61 #-}+happyIn62 :: (Statement) -> (HappyAbsSyn )+happyIn62 x = unsafeCoerce# x+{-# INLINE happyIn62 #-}+happyOut62 :: (HappyAbsSyn ) -> (Statement)+happyOut62 x = unsafeCoerce# x+{-# INLINE happyOut62 #-}+happyIn63 :: (Statement) -> (HappyAbsSyn )+happyIn63 x = unsafeCoerce# x+{-# INLINE happyIn63 #-}+happyOut63 :: (HappyAbsSyn ) -> (Statement)+happyOut63 x = unsafeCoerce# x+{-# INLINE happyOut63 #-}+happyIn64 :: (FromItems) -> (HappyAbsSyn )+happyIn64 x = unsafeCoerce# x+{-# INLINE happyIn64 #-}+happyOut64 :: (HappyAbsSyn ) -> (FromItems)+happyOut64 x = unsafeCoerce# x+{-# INLINE happyOut64 #-}+happyIn65 :: (ImportModule) -> (HappyAbsSyn )+happyIn65 x = unsafeCoerce# x+{-# INLINE happyIn65 #-}+happyOut65 :: (HappyAbsSyn ) -> (ImportModule)+happyOut65 x = unsafeCoerce# x+{-# INLINE happyOut65 #-}+happyIn66 :: (FromItem) -> (HappyAbsSyn )+happyIn66 x = unsafeCoerce# x+{-# INLINE happyIn66 #-}+happyOut66 :: (HappyAbsSyn ) -> (FromItem)+happyOut66 x = unsafeCoerce# x+{-# INLINE happyOut66 #-}+happyIn67 :: (FromItems) -> (HappyAbsSyn )+happyIn67 x = unsafeCoerce# x+{-# INLINE happyIn67 #-}+happyOut67 :: (HappyAbsSyn ) -> (FromItems)+happyOut67 x = unsafeCoerce# x+{-# INLINE happyOut67 #-}+happyIn68 :: ([FromItem]) -> (HappyAbsSyn )+happyIn68 x = unsafeCoerce# x+{-# INLINE happyIn68 #-}+happyOut68 :: (HappyAbsSyn ) -> ([FromItem])+happyOut68 x = unsafeCoerce# x+{-# INLINE happyOut68 #-}+happyIn69 :: (Statement) -> (HappyAbsSyn )+happyIn69 x = unsafeCoerce# x+{-# INLINE happyIn69 #-}+happyOut69 :: (HappyAbsSyn ) -> (Statement)+happyOut69 x = unsafeCoerce# x+{-# INLINE happyOut69 #-}+happyIn70 :: ([ImportItem]) -> (HappyAbsSyn )+happyIn70 x = unsafeCoerce# x+{-# INLINE happyIn70 #-}+happyOut70 :: (HappyAbsSyn ) -> ([ImportItem])+happyOut70 x = unsafeCoerce# x+{-# INLINE happyOut70 #-}+happyIn71 :: ([ImportItem]) -> (HappyAbsSyn )+happyIn71 x = unsafeCoerce# x+{-# INLINE happyIn71 #-}+happyOut71 :: (HappyAbsSyn ) -> ([ImportItem])+happyOut71 x = unsafeCoerce# x+{-# INLINE happyOut71 #-}+happyIn72 :: (ImportItem) -> (HappyAbsSyn )+happyIn72 x = unsafeCoerce# x+{-# INLINE happyIn72 #-}+happyOut72 :: (HappyAbsSyn ) -> (ImportItem)+happyOut72 x = unsafeCoerce# x+{-# INLINE happyOut72 #-}+happyIn73 :: (DottedName) -> (HappyAbsSyn )+happyIn73 x = unsafeCoerce# x+{-# INLINE happyIn73 #-}+happyOut73 :: (HappyAbsSyn ) -> (DottedName)+happyOut73 x = unsafeCoerce# x+{-# INLINE happyOut73 #-}+happyIn74 :: (DottedName) -> (HappyAbsSyn )+happyIn74 x = unsafeCoerce# x+{-# INLINE happyIn74 #-}+happyOut74 :: (HappyAbsSyn ) -> (DottedName)+happyOut74 x = unsafeCoerce# x+{-# INLINE happyOut74 #-}+happyIn75 :: (Statement) -> (HappyAbsSyn )+happyIn75 x = unsafeCoerce# x+{-# INLINE happyIn75 #-}+happyOut75 :: (HappyAbsSyn ) -> (Statement)+happyOut75 x = unsafeCoerce# x+{-# INLINE happyOut75 #-}+happyIn76 :: ([Ident]) -> (HappyAbsSyn )+happyIn76 x = unsafeCoerce# x+{-# INLINE happyIn76 #-}+happyOut76 :: (HappyAbsSyn ) -> ([Ident])+happyOut76 x = unsafeCoerce# x+{-# INLINE happyOut76 #-}+happyIn77 :: ([Ident]) -> (HappyAbsSyn )+happyIn77 x = unsafeCoerce# x+{-# INLINE happyIn77 #-}+happyOut77 :: (HappyAbsSyn ) -> ([Ident])+happyOut77 x = unsafeCoerce# x+{-# INLINE happyOut77 #-}+happyIn78 :: (Statement) -> (HappyAbsSyn )+happyIn78 x = unsafeCoerce# x+{-# INLINE happyIn78 #-}+happyOut78 :: (HappyAbsSyn ) -> (Statement)+happyOut78 x = unsafeCoerce# x+{-# INLINE happyOut78 #-}+happyIn79 :: (Statement) -> (HappyAbsSyn )+happyIn79 x = unsafeCoerce# x+{-# INLINE happyIn79 #-}+happyOut79 :: (HappyAbsSyn ) -> (Statement)+happyOut79 x = unsafeCoerce# x+{-# INLINE happyOut79 #-}+happyIn80 :: (Statement) -> (HappyAbsSyn )+happyIn80 x = unsafeCoerce# x+{-# INLINE happyIn80 #-}+happyOut80 :: (HappyAbsSyn ) -> (Statement)+happyOut80 x = unsafeCoerce# x+{-# INLINE happyOut80 #-}+happyIn81 :: (Statement) -> (HappyAbsSyn )+happyIn81 x = unsafeCoerce# x+{-# INLINE happyIn81 #-}+happyOut81 :: (HappyAbsSyn ) -> (Statement)+happyOut81 x = unsafeCoerce# x+{-# INLINE happyOut81 #-}+happyIn82 :: ([(Expr,[Statement])]) -> (HappyAbsSyn )+happyIn82 x = unsafeCoerce# x+{-# INLINE happyIn82 #-}+happyOut82 :: (HappyAbsSyn ) -> ([(Expr,[Statement])])+happyOut82 x = unsafeCoerce# x+{-# INLINE happyOut82 #-}+happyIn83 :: ((Expr, [Statement])) -> (HappyAbsSyn )+happyIn83 x = unsafeCoerce# x+{-# INLINE happyIn83 #-}+happyOut83 :: (HappyAbsSyn ) -> ((Expr, [Statement]))+happyOut83 x = unsafeCoerce# x+{-# INLINE happyOut83 #-}+happyIn84 :: ([(Expr, [Statement])]) -> (HappyAbsSyn )+happyIn84 x = unsafeCoerce# x+{-# INLINE happyIn84 #-}+happyOut84 :: (HappyAbsSyn ) -> ([(Expr, [Statement])])+happyOut84 x = unsafeCoerce# x+{-# INLINE happyOut84 #-}+happyIn85 :: ([(Expr, [Statement])]) -> (HappyAbsSyn )+happyIn85 x = unsafeCoerce# x+{-# INLINE happyIn85 #-}+happyOut85 :: (HappyAbsSyn ) -> ([(Expr, [Statement])])+happyOut85 x = unsafeCoerce# x+{-# INLINE happyOut85 #-}+happyIn86 :: ([Statement]) -> (HappyAbsSyn )+happyIn86 x = unsafeCoerce# x+{-# INLINE happyIn86 #-}+happyOut86 :: (HappyAbsSyn ) -> ([Statement])+happyOut86 x = unsafeCoerce# x+{-# INLINE happyOut86 #-}+happyIn87 :: (Statement) -> (HappyAbsSyn )+happyIn87 x = unsafeCoerce# x+{-# INLINE happyIn87 #-}+happyOut87 :: (HappyAbsSyn ) -> (Statement)+happyOut87 x = unsafeCoerce# x+{-# INLINE happyOut87 #-}+happyIn88 :: (Statement) -> (HappyAbsSyn )+happyIn88 x = unsafeCoerce# x+{-# INLINE happyIn88 #-}+happyOut88 :: (HappyAbsSyn ) -> (Statement)+happyOut88 x = unsafeCoerce# x+{-# INLINE happyOut88 #-}+happyIn89 :: (Statement) -> (HappyAbsSyn )+happyIn89 x = unsafeCoerce# x+{-# INLINE happyIn89 #-}+happyOut89 :: (HappyAbsSyn ) -> (Statement)+happyOut89 x = unsafeCoerce# x+{-# INLINE happyOut89 #-}+happyIn90 :: (([Handler], [Statement], [Statement])) -> (HappyAbsSyn )+happyIn90 x = unsafeCoerce# x+{-# INLINE happyIn90 #-}+happyOut90 :: (HappyAbsSyn ) -> (([Handler], [Statement], [Statement]))+happyOut90 x = unsafeCoerce# x+{-# INLINE happyOut90 #-}+happyIn91 :: ([Statement]) -> (HappyAbsSyn )+happyIn91 x = unsafeCoerce# x+{-# INLINE happyIn91 #-}+happyOut91 :: (HappyAbsSyn ) -> ([Statement])+happyOut91 x = unsafeCoerce# x+{-# INLINE happyOut91 #-}+happyIn92 :: ([Handler]) -> (HappyAbsSyn )+happyIn92 x = unsafeCoerce# x+{-# INLINE happyIn92 #-}+happyOut92 :: (HappyAbsSyn ) -> ([Handler])+happyOut92 x = unsafeCoerce# x+{-# INLINE happyOut92 #-}+happyIn93 :: ([Handler]) -> (HappyAbsSyn )+happyIn93 x = unsafeCoerce# x+{-# INLINE happyIn93 #-}+happyOut93 :: (HappyAbsSyn ) -> ([Handler])+happyOut93 x = unsafeCoerce# x+{-# INLINE happyOut93 #-}+happyIn94 :: (Handler) -> (HappyAbsSyn )+happyIn94 x = unsafeCoerce# x+{-# INLINE happyIn94 #-}+happyOut94 :: (HappyAbsSyn ) -> (Handler)+happyOut94 x = unsafeCoerce# x+{-# INLINE happyOut94 #-}+happyIn95 :: (Statement) -> (HappyAbsSyn )+happyIn95 x = unsafeCoerce# x+{-# INLINE happyIn95 #-}+happyOut95 :: (HappyAbsSyn ) -> (Statement)+happyOut95 x = unsafeCoerce# x+{-# INLINE happyOut95 #-}+happyIn96 :: (Maybe Expr) -> (HappyAbsSyn )+happyIn96 x = unsafeCoerce# x+{-# INLINE happyIn96 #-}+happyOut96 :: (HappyAbsSyn ) -> (Maybe Expr)+happyOut96 x = unsafeCoerce# x+{-# INLINE happyOut96 #-}+happyIn97 :: (ExceptClause) -> (HappyAbsSyn )+happyIn97 x = unsafeCoerce# x+{-# INLINE happyIn97 #-}+happyOut97 :: (HappyAbsSyn ) -> (ExceptClause)+happyOut97 x = unsafeCoerce# x+{-# INLINE happyOut97 #-}+happyIn98 :: (ExceptClause) -> (HappyAbsSyn )+happyIn98 x = unsafeCoerce# x+{-# INLINE happyIn98 #-}+happyOut98 :: (HappyAbsSyn ) -> (ExceptClause)+happyOut98 x = unsafeCoerce# x+{-# INLINE happyOut98 #-}+happyIn99 :: (Maybe Ident) -> (HappyAbsSyn )+happyIn99 x = unsafeCoerce# x+{-# INLINE happyIn99 #-}+happyOut99 :: (HappyAbsSyn ) -> (Maybe Ident)+happyOut99 x = unsafeCoerce# x+{-# INLINE happyOut99 #-}+happyIn100 :: ([Statement]) -> (HappyAbsSyn )+happyIn100 x = unsafeCoerce# x+{-# INLINE happyIn100 #-}+happyOut100 :: (HappyAbsSyn ) -> ([Statement])+happyOut100 x = unsafeCoerce# x+{-# INLINE happyOut100 #-}+happyIn101 :: ([Statement]) -> (HappyAbsSyn )+happyIn101 x = unsafeCoerce# x+{-# INLINE happyIn101 #-}+happyOut101 :: (HappyAbsSyn ) -> ([Statement])+happyOut101 x = unsafeCoerce# x+{-# INLINE happyOut101 #-}+happyIn102 :: ([[Statement]]) -> (HappyAbsSyn )+happyIn102 x = unsafeCoerce# x+{-# INLINE happyIn102 #-}+happyOut102 :: (HappyAbsSyn ) -> ([[Statement]])+happyOut102 x = unsafeCoerce# x+{-# INLINE happyOut102 #-}+happyIn103 :: (Expr) -> (HappyAbsSyn )+happyIn103 x = unsafeCoerce# x+{-# INLINE happyIn103 #-}+happyOut103 :: (HappyAbsSyn ) -> (Expr)+happyOut103 x = unsafeCoerce# x+{-# INLINE happyOut103 #-}+happyIn104 :: (Maybe (Expr, Expr)) -> (HappyAbsSyn )+happyIn104 x = unsafeCoerce# x+{-# INLINE happyIn104 #-}+happyOut104 :: (HappyAbsSyn ) -> (Maybe (Expr, Expr))+happyOut104 x = unsafeCoerce# x+{-# INLINE happyOut104 #-}+happyIn105 :: (Expr) -> (HappyAbsSyn )+happyIn105 x = unsafeCoerce# x+{-# INLINE happyIn105 #-}+happyOut105 :: (HappyAbsSyn ) -> (Expr)+happyOut105 x = unsafeCoerce# x+{-# INLINE happyOut105 #-}+happyIn106 :: (Expr) -> (HappyAbsSyn )+happyIn106 x = unsafeCoerce# x+{-# INLINE happyIn106 #-}+happyOut106 :: (HappyAbsSyn ) -> (Expr)+happyOut106 x = unsafeCoerce# x+{-# INLINE happyOut106 #-}+happyIn107 :: (Expr) -> (HappyAbsSyn )+happyIn107 x = unsafeCoerce# x+{-# INLINE happyIn107 #-}+happyOut107 :: (HappyAbsSyn ) -> (Expr)+happyOut107 x = unsafeCoerce# x+{-# INLINE happyOut107 #-}+happyIn108 :: (Expr) -> (HappyAbsSyn )+happyIn108 x = unsafeCoerce# x+{-# INLINE happyIn108 #-}+happyOut108 :: (HappyAbsSyn ) -> (Expr)+happyOut108 x = unsafeCoerce# x+{-# INLINE happyOut108 #-}+happyIn109 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn109 x = unsafeCoerce# x+{-# INLINE happyIn109 #-}+happyOut109 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut109 x = unsafeCoerce# x+{-# INLINE happyOut109 #-}+happyIn110 :: (Expr) -> (HappyAbsSyn )+happyIn110 x = unsafeCoerce# x+{-# INLINE happyIn110 #-}+happyOut110 :: (HappyAbsSyn ) -> (Expr)+happyOut110 x = unsafeCoerce# x+{-# INLINE happyOut110 #-}+happyIn111 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn111 x = unsafeCoerce# x+{-# INLINE happyIn111 #-}+happyOut111 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut111 x = unsafeCoerce# x+{-# INLINE happyOut111 #-}+happyIn112 :: (Expr) -> (HappyAbsSyn )+happyIn112 x = unsafeCoerce# x+{-# INLINE happyIn112 #-}+happyOut112 :: (HappyAbsSyn ) -> (Expr)+happyOut112 x = unsafeCoerce# x+{-# INLINE happyOut112 #-}+happyIn113 :: (Expr) -> (HappyAbsSyn )+happyIn113 x = unsafeCoerce# x+{-# INLINE happyIn113 #-}+happyOut113 :: (HappyAbsSyn ) -> (Expr)+happyOut113 x = unsafeCoerce# x+{-# INLINE happyOut113 #-}+happyIn114 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn114 x = unsafeCoerce# x+{-# INLINE happyIn114 #-}+happyOut114 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut114 x = unsafeCoerce# x+{-# INLINE happyOut114 #-}+happyIn115 :: (Op) -> (HappyAbsSyn )+happyIn115 x = unsafeCoerce# x+{-# INLINE happyIn115 #-}+happyOut115 :: (HappyAbsSyn ) -> (Op)+happyOut115 x = unsafeCoerce# x+{-# INLINE happyOut115 #-}+happyIn116 :: (Op) -> (HappyAbsSyn )+happyIn116 x = unsafeCoerce# x+{-# INLINE happyIn116 #-}+happyOut116 :: (HappyAbsSyn ) -> (Op)+happyOut116 x = unsafeCoerce# x+{-# INLINE happyOut116 #-}+happyIn117 :: (Op) -> (HappyAbsSyn )+happyIn117 x = unsafeCoerce# x+{-# INLINE happyIn117 #-}+happyOut117 :: (HappyAbsSyn ) -> (Op)+happyOut117 x = unsafeCoerce# x+{-# INLINE happyOut117 #-}+happyIn118 :: (Expr) -> (HappyAbsSyn )+happyIn118 x = unsafeCoerce# x+{-# INLINE happyIn118 #-}+happyOut118 :: (HappyAbsSyn ) -> (Expr)+happyOut118 x = unsafeCoerce# x+{-# INLINE happyOut118 #-}+happyIn119 :: (Expr) -> (HappyAbsSyn )+happyIn119 x = unsafeCoerce# x+{-# INLINE happyIn119 #-}+happyOut119 :: (HappyAbsSyn ) -> (Expr)+happyOut119 x = unsafeCoerce# x+{-# INLINE happyOut119 #-}+happyIn120 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn120 x = unsafeCoerce# x+{-# INLINE happyIn120 #-}+happyOut120 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut120 x = unsafeCoerce# x+{-# INLINE happyOut120 #-}+happyIn121 :: (Expr) -> (HappyAbsSyn )+happyIn121 x = unsafeCoerce# x+{-# INLINE happyIn121 #-}+happyOut121 :: (HappyAbsSyn ) -> (Expr)+happyOut121 x = unsafeCoerce# x+{-# INLINE happyOut121 #-}+happyIn122 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn122 x = unsafeCoerce# x+{-# INLINE happyIn122 #-}+happyOut122 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut122 x = unsafeCoerce# x+{-# INLINE happyOut122 #-}+happyIn123 :: (Expr) -> (HappyAbsSyn )+happyIn123 x = unsafeCoerce# x+{-# INLINE happyIn123 #-}+happyOut123 :: (HappyAbsSyn ) -> (Expr)+happyOut123 x = unsafeCoerce# x+{-# INLINE happyOut123 #-}+happyIn124 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn124 x = unsafeCoerce# x+{-# INLINE happyIn124 #-}+happyOut124 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut124 x = unsafeCoerce# x+{-# INLINE happyOut124 #-}+happyIn125 :: (Expr) -> (HappyAbsSyn )+happyIn125 x = unsafeCoerce# x+{-# INLINE happyIn125 #-}+happyOut125 :: (HappyAbsSyn ) -> (Expr)+happyOut125 x = unsafeCoerce# x+{-# INLINE happyOut125 #-}+happyIn126 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn126 x = unsafeCoerce# x+{-# INLINE happyIn126 #-}+happyOut126 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut126 x = unsafeCoerce# x+{-# INLINE happyOut126 #-}+happyIn127 :: (Op) -> (HappyAbsSyn )+happyIn127 x = unsafeCoerce# x+{-# INLINE happyIn127 #-}+happyOut127 :: (HappyAbsSyn ) -> (Op)+happyOut127 x = unsafeCoerce# x+{-# INLINE happyOut127 #-}+happyIn128 :: (Expr) -> (HappyAbsSyn )+happyIn128 x = unsafeCoerce# x+{-# INLINE happyIn128 #-}+happyOut128 :: (HappyAbsSyn ) -> (Expr)+happyOut128 x = unsafeCoerce# x+{-# INLINE happyOut128 #-}+happyIn129 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn129 x = unsafeCoerce# x+{-# INLINE happyIn129 #-}+happyOut129 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut129 x = unsafeCoerce# x+{-# INLINE happyOut129 #-}+happyIn130 :: (Op) -> (HappyAbsSyn )+happyIn130 x = unsafeCoerce# x+{-# INLINE happyIn130 #-}+happyOut130 :: (HappyAbsSyn ) -> (Op)+happyOut130 x = unsafeCoerce# x+{-# INLINE happyOut130 #-}+happyIn131 :: (Expr) -> (HappyAbsSyn )+happyIn131 x = unsafeCoerce# x+{-# INLINE happyIn131 #-}+happyOut131 :: (HappyAbsSyn ) -> (Expr)+happyOut131 x = unsafeCoerce# x+{-# INLINE happyOut131 #-}+happyIn132 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn132 x = unsafeCoerce# x+{-# INLINE happyIn132 #-}+happyOut132 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut132 x = unsafeCoerce# x+{-# INLINE happyOut132 #-}+happyIn133 :: (Op) -> (HappyAbsSyn )+happyIn133 x = unsafeCoerce# x+{-# INLINE happyIn133 #-}+happyOut133 :: (HappyAbsSyn ) -> (Op)+happyOut133 x = unsafeCoerce# x+{-# INLINE happyOut133 #-}+happyIn134 :: (Expr) -> (HappyAbsSyn )+happyIn134 x = unsafeCoerce# x+{-# INLINE happyIn134 #-}+happyOut134 :: (HappyAbsSyn ) -> (Expr)+happyOut134 x = unsafeCoerce# x+{-# INLINE happyOut134 #-}+happyIn135 :: (Expr) -> (HappyAbsSyn )+happyIn135 x = unsafeCoerce# x+{-# INLINE happyIn135 #-}+happyOut135 :: (HappyAbsSyn ) -> (Expr)+happyOut135 x = unsafeCoerce# x+{-# INLINE happyOut135 #-}+happyIn136 :: ([Trailer]) -> (HappyAbsSyn )+happyIn136 x = unsafeCoerce# x+{-# INLINE happyIn136 #-}+happyOut136 :: (HappyAbsSyn ) -> ([Trailer])+happyOut136 x = unsafeCoerce# x+{-# INLINE happyOut136 #-}+happyIn137 :: ([Trailer]) -> (HappyAbsSyn )+happyIn137 x = unsafeCoerce# x+{-# INLINE happyIn137 #-}+happyOut137 :: (HappyAbsSyn ) -> ([Trailer])+happyOut137 x = unsafeCoerce# x+{-# INLINE happyOut137 #-}+happyIn138 :: (Expr) -> (HappyAbsSyn )+happyIn138 x = unsafeCoerce# x+{-# INLINE happyIn138 #-}+happyOut138 :: (HappyAbsSyn ) -> (Expr)+happyOut138 x = unsafeCoerce# x+{-# INLINE happyOut138 #-}+happyIn139 :: (Expr) -> (HappyAbsSyn )+happyIn139 x = unsafeCoerce# x+{-# INLINE happyIn139 #-}+happyOut139 :: (HappyAbsSyn ) -> (Expr)+happyOut139 x = unsafeCoerce# x+{-# INLINE happyOut139 #-}+happyIn140 :: (Expr) -> (HappyAbsSyn )+happyIn140 x = unsafeCoerce# x+{-# INLINE happyIn140 #-}+happyOut140 :: (HappyAbsSyn ) -> (Expr)+happyOut140 x = unsafeCoerce# x+{-# INLINE happyOut140 #-}+happyIn141 :: (Expr) -> (HappyAbsSyn )+happyIn141 x = unsafeCoerce# x+{-# INLINE happyIn141 #-}+happyOut141 :: (HappyAbsSyn ) -> (Expr)+happyOut141 x = unsafeCoerce# x+{-# INLINE happyOut141 #-}+happyIn142 :: (Expr) -> (HappyAbsSyn )+happyIn142 x = unsafeCoerce# x+{-# INLINE happyIn142 #-}+happyOut142 :: (HappyAbsSyn ) -> (Expr)+happyOut142 x = unsafeCoerce# x+{-# INLINE happyOut142 #-}+happyIn143 :: ([String]) -> (HappyAbsSyn )+happyIn143 x = unsafeCoerce# x+{-# INLINE happyIn143 #-}+happyOut143 :: (HappyAbsSyn ) -> ([String])+happyOut143 x = unsafeCoerce# x+{-# INLINE happyOut143 #-}+happyIn144 :: ([BS.ByteString]) -> (HappyAbsSyn )+happyIn144 x = unsafeCoerce# x+{-# INLINE happyIn144 #-}+happyOut144 :: (HappyAbsSyn ) -> ([BS.ByteString])+happyOut144 x = unsafeCoerce# x+{-# INLINE happyOut144 #-}+happyIn145 :: (Either Expr (Comprehension Expr)) -> (HappyAbsSyn )+happyIn145 x = unsafeCoerce# x+{-# INLINE happyIn145 #-}+happyOut145 :: (HappyAbsSyn ) -> (Either Expr (Comprehension Expr))+happyOut145 x = unsafeCoerce# x+{-# INLINE happyOut145 #-}+happyIn146 :: (Trailer) -> (HappyAbsSyn )+happyIn146 x = unsafeCoerce# x+{-# INLINE happyIn146 #-}+happyOut146 :: (HappyAbsSyn ) -> (Trailer)+happyOut146 x = unsafeCoerce# x+{-# INLINE happyOut146 #-}+happyIn147 :: ([Subscript]) -> (HappyAbsSyn )+happyIn147 x = unsafeCoerce# x+{-# INLINE happyIn147 #-}+happyOut147 :: (HappyAbsSyn ) -> ([Subscript])+happyOut147 x = unsafeCoerce# x+{-# INLINE happyOut147 #-}+happyIn148 :: ([Subscript]) -> (HappyAbsSyn )+happyIn148 x = unsafeCoerce# x+{-# INLINE happyIn148 #-}+happyOut148 :: (HappyAbsSyn ) -> ([Subscript])+happyOut148 x = unsafeCoerce# x+{-# INLINE happyOut148 #-}+happyIn149 :: (Subscript) -> (HappyAbsSyn )+happyIn149 x = unsafeCoerce# x+{-# INLINE happyIn149 #-}+happyOut149 :: (HappyAbsSyn ) -> (Subscript)+happyOut149 x = unsafeCoerce# x+{-# INLINE happyOut149 #-}+happyIn150 :: (Maybe Expr) -> (HappyAbsSyn )+happyIn150 x = unsafeCoerce# x+{-# INLINE happyIn150 #-}+happyOut150 :: (HappyAbsSyn ) -> (Maybe Expr)+happyOut150 x = unsafeCoerce# x+{-# INLINE happyOut150 #-}+happyIn151 :: (Maybe (Maybe Expr)) -> (HappyAbsSyn )+happyIn151 x = unsafeCoerce# x+{-# INLINE happyIn151 #-}+happyOut151 :: (HappyAbsSyn ) -> (Maybe (Maybe Expr))+happyOut151 x = unsafeCoerce# x+{-# INLINE happyOut151 #-}+happyIn152 :: (Maybe Expr) -> (HappyAbsSyn )+happyIn152 x = unsafeCoerce# x+{-# INLINE happyIn152 #-}+happyOut152 :: (HappyAbsSyn ) -> (Maybe Expr)+happyOut152 x = unsafeCoerce# x+{-# INLINE happyOut152 #-}+happyIn153 :: ([Expr]) -> (HappyAbsSyn )+happyIn153 x = unsafeCoerce# x+{-# INLINE happyIn153 #-}+happyOut153 :: (HappyAbsSyn ) -> ([Expr])+happyOut153 x = unsafeCoerce# x+{-# INLINE happyOut153 #-}+happyIn154 :: (Bool) -> (HappyAbsSyn )+happyIn154 x = unsafeCoerce# x+{-# INLINE happyIn154 #-}+happyOut154 :: (HappyAbsSyn ) -> (Bool)+happyOut154 x = unsafeCoerce# x+{-# INLINE happyOut154 #-}+happyIn155 :: ([Expr]) -> (HappyAbsSyn )+happyIn155 x = unsafeCoerce# x+{-# INLINE happyIn155 #-}+happyOut155 :: (HappyAbsSyn ) -> ([Expr])+happyOut155 x = unsafeCoerce# x+{-# INLINE happyOut155 #-}+happyIn156 :: (Expr) -> (HappyAbsSyn )+happyIn156 x = unsafeCoerce# x+{-# INLINE happyIn156 #-}+happyOut156 :: (HappyAbsSyn ) -> (Expr)+happyOut156 x = unsafeCoerce# x+{-# INLINE happyOut156 #-}+happyIn157 :: ([Expr]) -> (HappyAbsSyn )+happyIn157 x = unsafeCoerce# x+{-# INLINE happyIn157 #-}+happyOut157 :: (HappyAbsSyn ) -> ([Expr])+happyOut157 x = unsafeCoerce# x+{-# INLINE happyOut157 #-}+happyIn158 :: (Expr) -> (HappyAbsSyn )+happyIn158 x = unsafeCoerce# x+{-# INLINE happyIn158 #-}+happyOut158 :: (HappyAbsSyn ) -> (Expr)+happyOut158 x = unsafeCoerce# x+{-# INLINE happyOut158 #-}+happyIn159 :: (Either CompFor [(Expr, Expr)]) -> (HappyAbsSyn )+happyIn159 x = unsafeCoerce# x+{-# INLINE happyIn159 #-}+happyOut159 :: (HappyAbsSyn ) -> (Either CompFor [(Expr, Expr)])+happyOut159 x = unsafeCoerce# x+{-# INLINE happyOut159 #-}+happyIn160 :: ([(Expr, Expr)]) -> (HappyAbsSyn )+happyIn160 x = unsafeCoerce# x+{-# INLINE happyIn160 #-}+happyOut160 :: (HappyAbsSyn ) -> ([(Expr, Expr)])+happyOut160 x = unsafeCoerce# x+{-# INLINE happyOut160 #-}+happyIn161 :: (Either CompFor [Expr]) -> (HappyAbsSyn )+happyIn161 x = unsafeCoerce# x+{-# INLINE happyIn161 #-}+happyOut161 :: (HappyAbsSyn ) -> (Either CompFor [Expr])+happyOut161 x = unsafeCoerce# x+{-# INLINE happyOut161 #-}+happyIn162 :: ([Expr]) -> (HappyAbsSyn )+happyIn162 x = unsafeCoerce# x+{-# INLINE happyIn162 #-}+happyOut162 :: (HappyAbsSyn ) -> ([Expr])+happyOut162 x = unsafeCoerce# x+{-# INLINE happyOut162 #-}+happyIn163 :: (Statement) -> (HappyAbsSyn )+happyIn163 x = unsafeCoerce# x+{-# INLINE happyIn163 #-}+happyOut163 :: (HappyAbsSyn ) -> (Statement)+happyOut163 x = unsafeCoerce# x+{-# INLINE happyOut163 #-}+happyIn164 :: ([Argument]) -> (HappyAbsSyn )+happyIn164 x = unsafeCoerce# x+{-# INLINE happyIn164 #-}+happyOut164 :: (HappyAbsSyn ) -> ([Argument])+happyOut164 x = unsafeCoerce# x+{-# INLINE happyOut164 #-}+happyIn165 :: ([Argument]) -> (HappyAbsSyn )+happyIn165 x = unsafeCoerce# x+{-# INLINE happyIn165 #-}+happyOut165 :: (HappyAbsSyn ) -> ([Argument])+happyOut165 x = unsafeCoerce# x+{-# INLINE happyOut165 #-}+happyIn166 :: ([Argument]) -> (HappyAbsSyn )+happyIn166 x = unsafeCoerce# x+{-# INLINE happyIn166 #-}+happyOut166 :: (HappyAbsSyn ) -> ([Argument])+happyOut166 x = unsafeCoerce# x+{-# INLINE happyOut166 #-}+happyIn167 :: (Argument) -> (HappyAbsSyn )+happyIn167 x = unsafeCoerce# x+{-# INLINE happyIn167 #-}+happyOut167 :: (HappyAbsSyn ) -> (Argument)+happyOut167 x = unsafeCoerce# x+{-# INLINE happyOut167 #-}+happyIn168 :: (CompIter) -> (HappyAbsSyn )+happyIn168 x = unsafeCoerce# x+{-# INLINE happyIn168 #-}+happyOut168 :: (HappyAbsSyn ) -> (CompIter)+happyOut168 x = unsafeCoerce# x+{-# INLINE happyOut168 #-}+happyIn169 :: (CompFor) -> (HappyAbsSyn )+happyIn169 x = unsafeCoerce# x+{-# INLINE happyIn169 #-}+happyOut169 :: (HappyAbsSyn ) -> (CompFor)+happyOut169 x = unsafeCoerce# x+{-# INLINE happyOut169 #-}+happyIn170 :: (Maybe CompIter) -> (HappyAbsSyn )+happyIn170 x = unsafeCoerce# x+{-# INLINE happyIn170 #-}+happyOut170 :: (HappyAbsSyn ) -> (Maybe CompIter)+happyOut170 x = unsafeCoerce# x+{-# INLINE happyOut170 #-}+happyIn171 :: (CompIf) -> (HappyAbsSyn )+happyIn171 x = unsafeCoerce# x+{-# INLINE happyIn171 #-}+happyOut171 :: (HappyAbsSyn ) -> (CompIf)+happyOut171 x = unsafeCoerce# x+{-# INLINE happyOut171 #-}+happyIn172 :: (Expr) -> (HappyAbsSyn )+happyIn172 x = unsafeCoerce# x+{-# INLINE happyIn172 #-}+happyOut172 :: (HappyAbsSyn ) -> (Expr)+happyOut172 x = unsafeCoerce# x+{-# INLINE happyOut172 #-}+happyIn173 :: (Maybe Expr) -> (HappyAbsSyn )+happyIn173 x = unsafeCoerce# x+{-# INLINE happyIn173 #-}+happyOut173 :: (HappyAbsSyn ) -> (Maybe Expr)+happyOut173 x = unsafeCoerce# x+{-# INLINE happyOut173 #-}+happyInTok :: Token -> (HappyAbsSyn )+happyInTok x = unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn ) -> Token+happyOutTok x = unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x00\x00\xb4\x0f\x52\x12\xa8\x02\x00\x00\x6d\x02\x00\x00\x00\x00\x00\x00\xb1\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x02\xbd\x02\x00\x00\xb0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x11\x8f\x11\x68\x11\x00\x00\x00\x00\x00\x00\x12\x00\x12\x00\x79\x12\x12\x00\x3d\x00\x00\x00\x62\x02\x00\x00\x5e\x01\x64\x02\x00\x00\x00\x00\x00\x00\xa5\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x06\x00\x00\x00\x00\xaf\x02\xaf\x02\xaf\x02\x52\x12\x12\x00\x52\x12\x52\x12\x52\x12\x52\x12\x9e\x02\x52\x12\x00\x00\x00\x00\x00\x00\x12\x00\xaa\x02\x03\x00\xaa\x02\xaa\x02\x52\x12\x52\x02\x00\x00\x6e\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x02\x00\x00\x00\x00\x9a\x02\x00\x00\x00\x00\xa6\x02\x00\x00\x03\x00\x03\x00\x9c\x02\x00\x00\x00\x00\x92\x02\x00\x00\x4c\x02\x40\x10\x00\x00\x00\x00\x00\x00\x80\x02\x8e\x02\x5b\x02\x89\x02\x8d\x02\x8c\x02\x00\x00\x84\x02\x00\x00\x78\x02\x00\x00\x00\x00\x87\x02\x00\x00\x41\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x02\x00\x00\x76\x02\x63\x02\x85\x10\x00\x00\x00\x00\x00\x00\x00\x00\x75\x02\x00\x00\x6f\x02\x6e\x02\x00\x00\x72\x02\x00\x00\x77\x02\x77\x02\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x69\x02\x00\x00\x61\x02\x68\x02\x00\x00\x00\x00\x67\x02\x00\x00\x00\x00\x00\x00\x52\x12\x4f\x02\x00\x00\x00\x00\x43\x02\x11\x00\xcd\x00\x1f\x01\xfb\x00\x30\x02\x29\x02\x31\x02\x83\x06\x3f\x02\x35\x02\x00\x00\x79\x12\x2b\x02\x79\x12\x79\x12\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x02\x00\x00\x00\x00\x26\x02\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x10\x52\x12\x57\x02\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x41\x02\x00\x00\x52\x12\x00\x00\x00\x00\x00\x00\x00\x00\x52\x12\x2c\x00\x3d\x00\x52\x12\x00\x00\x00\x00\x40\x10\x52\x12\x00\x00\x00\x00\x00\x00\x41\x11\x00\x00\x4a\x02\x4a\x02\x00\x02\x3a\x00\x3e\x02\xbc\x10\x40\x10\x52\x12\x40\x10\x3c\x02\x12\x00\x00\x00\xff\x00\xfa\x0f\x00\x00\x52\x12\x00\x00\x12\x00\x2a\x02\x00\x00\x00\x00\x39\x00\x05\x02\x45\x02\x52\x12\x00\x00\x45\x02\x2d\x02\x00\x00\x00\x00\x00\x00\x34\x02\x3b\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x02\xfa\x0f\x00\x00\x0a\x02\x11\x02\x00\x00\x27\x02\x52\x12\x25\x02\x00\x00\x40\x10\x00\x00\x23\x02\x09\x02\x28\x02\x1a\x02\x24\x02\x1e\x02\x52\x12\x52\x12\x40\x10\x22\x02\x00\x00\x1f\x02\x13\x02\x12\x02\x00\x00\x06\x02\x08\x02\x08\x02\x02\x02\x52\x12\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\x00\x00\x00\x00\x00\x00\x03\x02\x00\x00\x00\x00\x01\x02\x00\x00\x52\x12\xcc\x01\x00\x00\x00\x00\xfe\x01\xfc\x01\xfd\x01\x00\x00\xf5\x01\xf9\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\x52\x12\x00\x00\x00\x00\x52\x12\x00\x00\x1a\x11\x00\x00\x79\x12\x00\x00\x00\x00\xf3\x01\x00\x00\x2c\x00\x40\x10\x00\x00\x40\x10\x00\x00\x00\x00\x00\x00\x00\x00\x52\x12\x0e\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x01\xbc\x10\x00\x00\x00\x00\x52\x12\x00\x00\x40\x10\x00\x00\x40\x10\x00\x00\xe8\x01\x40\x10\x00\x00\xda\x01\x00\x00\x00\x00\xf1\x01\x00\x00\xf7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x01\x00\x00\x00\x00\x00\x00\xa6\x01\x00\x00\x00\x00\xeb\x10\x00\x00\x00\x00\xc9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x12\xfe\x00\x00\x00\x00\x00\xc6\x01\x00\x00\x00\x00\x52\x12\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x12\xc4\x01\x0e\x00\x00\x00\xc5\x01\x04\x12\x00\x00\x40\x10\x00\x00\x00\x00\xeb\x10\x00\x00\x04\x12\xfe\x00\x00\x00\x00\x00\x28\x00\x00\x00\xc1\x01\x00\x00\x00\x00\x00\x00\xdd\x11\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\xe1\x01\x01\x00\xd1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x01\x68\x01\x58\x01\x00\x00\x4c\x01\x00\x00\x41\x01\x36\x01\x3a\x01\x22\x01\x2c\x01\x18\x01\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x01\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x07\x6a\x09\x40\x09\x00\x00\x00\x00\x00\x00\x21\x06\xb7\x05\xe4\x0e\x9f\x01\xd7\x01\x00\x00\x00\x00\x00\x00\xf8\xff\x80\x01\x00\x00\x00\x00\x00\x00\x60\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\x32\x01\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x02\x00\x00\x00\x00\xf8\x00\x5f\x01\x5b\x01\x32\x0e\xa8\x03\x0b\x0e\xe4\x0d\x33\x02\xfb\x01\x00\x00\xd2\x0a\x00\x00\x00\x00\x00\x00\x3e\x03\x02\x00\x9d\x00\x47\x00\xfd\xff\xc8\x09\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x01\x00\x00\x00\x00\x20\x00\xe6\xff\xcb\x00\x00\x00\x00\x00\xd2\x00\x00\x00\x27\x01\x2b\x07\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\xb7\x00\x42\x01\x00\x00\x00\x00\x00\x00\xed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x01\x00\x00\xd1\x00\x0b\x01\x00\x00\x00\x00\x00\x00\x00\x00\xd4\xff\x00\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x00\x91\x00\x82\x00\x81\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x7d\x0e\x00\x00\xa2\x0e\xc3\x0e\x7c\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x00\xe6\x04\x50\x05\x1c\x00\x45\x00\x00\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x28\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x09\xf3\x09\xca\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x02\x00\x00\x00\x00\x34\x00\x00\x00\x96\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x0d\x95\x00\xe7\x00\x48\x0d\x00\x00\x00\x00\xc1\x06\x21\x0d\x00\x00\x00\x00\x00\x00\xf6\x07\x00\x00\x8b\x00\x58\x00\x9b\x00\x3c\x01\x00\x00\xe8\x08\x57\x06\x9e\x09\xed\x05\x00\x00\x6a\x02\x00\x00\x4b\x01\x0e\x01\x00\x00\xfa\x0c\x00\x00\x12\x04\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x83\x00\xd3\x0c\x00\x00\x68\x00\x66\x00\x00\x00\x00\x00\x00\x00\xe8\xff\xdf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x01\x00\x00\x4f\x00\x92\x00\x00\x00\x00\x00\xab\x0a\x00\x00\x00\x00\x83\x05\x00\x00\x00\x00\x30\x00\x00\x00\xd2\xff\x00\x00\x00\x00\xac\x0c\x85\x0c\x19\x05\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x5c\x00\xf0\xff\x00\x00\x5e\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x37\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x0c\x00\x00\x00\x00\x7b\x0a\x00\x00\x23\x0a\x00\x00\x57\x0e\x00\x00\x00\x00\x91\xff\x00\x00\xf3\xff\xaf\x04\x00\x00\x45\x04\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x0b\xb9\x01\x65\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x08\x00\x00\x00\x00\xc2\x0b\x00\x00\xdb\x03\x00\x00\x71\x03\x00\x00\xc3\xff\x07\x03\x00\x00\xb7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\xff\x00\x00\x00\x00\x87\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x0b\x1a\x01\x00\x00\x00\x00\xf2\xff\x00\x00\x00\x00\x50\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x74\x0b\x00\x00\x78\x01\x00\x00\x00\x00\x4a\x0b\x00\x00\x9d\x02\x00\x00\x00\x00\x54\x08\x00\x00\x23\x0b\xc0\x00\x00\x00\x00\x00\xcf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x0a\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\xf7\xff\x00\x00\x00\x00\x00\x00\xfc\xff\x00\x00\x01\xff\xd6\xfe\x46\xff\x45\xff\x3e\xff\x3b\xff\x38\xff\x36\xff\x28\xff\x26\xff\x23\xff\x20\xff\x1d\xff\x18\xff\x13\xff\x0a\xff\x06\xff\x04\xff\x03\xff\x02\xff\xfd\xfe\xfc\xfe\xf2\xff\xdb\xfe\xc1\xff\xef\xfe\xed\xfe\x00\xff\xff\xfe\xfe\xfe\xf2\xfe\x00\x00\x00\x00\xf9\xfe\xf8\xfe\xfa\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xff\xfb\xfe\x00\x00\xee\xff\x00\x00\xef\xff\x68\xff\x6a\xff\xfb\xff\xbd\xff\xbb\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\x9a\xff\x99\xff\x98\xff\x96\xff\x97\xff\xb5\xff\x8b\xff\x8c\xff\xb4\xff\xb3\xff\xb2\xff\xfa\xff\x6f\xff\x61\xff\x63\xff\x6e\xff\x6d\xff\x6c\xff\x6b\xff\xad\xff\x69\xff\x92\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\xfe\xb4\xfe\x00\x00\x90\xff\x9b\xff\x95\xff\x94\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\xff\xf8\xff\xf6\xff\xf4\xff\xc0\xff\xbf\xff\xf5\xff\x70\xff\x73\xff\x71\xff\x74\xff\x75\xff\x77\xff\x00\x00\x84\xff\x86\xff\x85\xff\xc9\xfe\xd9\xfe\x9c\xff\xdb\xfe\x91\xff\x8e\xff\x00\x00\xb3\xfe\xb5\xfe\x93\xff\x53\xff\x00\x00\x00\x00\x00\x00\xc9\xfe\x00\x00\x7d\xff\x7c\xff\x7b\xff\x4e\xff\xb1\xff\xb0\xff\xae\xff\xaf\xff\x00\x00\xa8\xff\xa7\xff\xa6\xff\xa5\xff\xa4\xff\xa3\xff\xa2\xff\xa1\xff\xa0\xff\x9f\xff\x9e\xff\x9d\xff\x66\xff\x64\xff\x67\xff\x00\x00\x00\x00\xbc\xff\xed\xff\xec\xff\xea\xff\xeb\xff\x00\x00\xd1\xff\xcd\xff\xcf\xff\xce\xff\xd8\xff\xc2\xff\xc5\xff\x00\x00\x0b\xff\x39\xff\x0c\xff\x0d\xff\xcc\xfe\x00\x00\xf4\xfe\xd6\xfe\x00\x00\xeb\xfe\xf6\xfe\x00\x00\xf0\xfe\xf1\xfe\xd7\xfe\xda\xfe\xf3\xff\xec\xfe\xee\xfe\x09\xff\x07\xff\x14\xff\x19\xff\x1e\xff\x21\xff\x24\xff\x27\xff\x37\xff\x3c\xff\x3f\xff\x47\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\xff\x33\xff\x34\xff\x32\xff\x31\xff\x30\xff\x00\x00\x2f\xff\x2e\xff\x2a\xff\x00\x00\x00\x00\x00\x00\x00\x00\x1a\xff\x1b\xff\x00\x00\x16\xff\x15\xff\x00\x00\x11\xff\x10\xff\x0f\xff\x0e\xff\x05\xff\xc7\xfe\xe1\xfe\x00\x00\x00\x00\xf1\xff\xd5\xfe\xf7\xfe\xf5\xfe\xea\xfe\x00\x00\xf3\xfe\xd3\xfe\xdb\xfe\xce\xfe\x00\x00\xc3\xff\xc6\xff\xc4\xff\xc7\xff\x00\x00\x00\x00\xd0\xff\x00\x00\xba\xff\xbe\xff\x00\x00\x00\x00\xa9\xff\xaa\xff\xab\xff\x00\x00\x79\xff\x00\x00\x00\x00\xe8\xff\xe4\xff\x00\x00\xc7\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\xff\x00\x00\x00\x00\x8f\xff\x00\x00\xdc\xfe\xda\xfe\x00\x00\x82\xff\x83\xff\x00\x00\x78\xff\x00\x00\x00\x00\x72\xff\x00\x00\x4e\xff\x8a\xff\x7f\xff\x87\xff\xdb\xfe\x00\x00\x89\xff\xf0\xff\xd8\xfe\x8d\xff\x49\xff\x00\x00\x4a\xff\x5d\xff\x61\xff\x58\xff\x57\xff\x00\x00\x50\xff\x00\x00\x52\xff\x00\x00\x65\xff\x00\x00\x61\xff\x01\xff\xbd\xfe\x00\x00\xc4\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xe5\xff\xd8\xff\xe1\xff\xe3\xff\xe2\xff\xda\xff\xd4\xff\x00\x00\x00\x00\x00\x00\x7a\xff\x4d\xff\xac\xff\x00\x00\x60\xff\x41\xff\xcc\xff\xcb\xff\xca\xff\xc8\xff\xd7\xff\xd0\xfe\xcd\xfe\xda\xfe\x00\x00\x08\xff\xe7\xfe\xe3\xfe\x00\x00\xdb\xfe\xe5\xfe\x00\x00\x00\x00\x12\xff\x17\xff\x1c\xff\x1f\xff\x22\xff\x25\xff\x2b\xff\x29\xff\x2d\xff\x35\xff\x3a\xff\x3d\xff\x00\x00\x44\xff\xe9\xfe\xe1\xfe\xe6\xfe\xda\xfe\xe8\xfe\x00\x00\xcb\xfe\xd4\xfe\xdb\xfe\xd2\xfe\x00\x00\x00\x00\xe7\xff\x00\x00\xd2\xff\xd3\xff\xd5\xff\xdb\xff\x00\x00\x00\x00\xe4\xff\xd6\xff\xe6\xff\xca\xfe\xc5\xfe\xc6\xfe\xc7\xfe\xc8\xfe\xbc\xfe\x00\x00\x5f\xff\x00\x00\x54\xff\x00\x00\x51\xff\x4e\xff\x00\x00\x56\xff\x5a\xff\x48\xff\x4b\xff\x00\x00\x80\xff\xda\xfe\x81\xff\x76\xff\x7e\xff\x88\xff\x5c\xff\x00\x00\x55\xff\x4f\xff\x5b\xff\x61\xff\xbe\xfe\xc3\xfe\x00\x00\xe0\xff\xdf\xff\xde\xff\xdc\xff\xd9\xff\xe9\xff\x62\xff\xc9\xff\xd1\xfe\xda\xfe\xb8\xfe\xe4\xfe\xe0\xfe\xdf\xfe\xe2\xfe\xde\xfe\xe1\xfe\xb7\xfe\xbb\xfe\xb9\xfe\xba\xfe\x00\x00\x00\x00\x00\x00\xc2\xfe\xc1\xfe\x00\x00\x5e\xff\x00\x00\x59\xff\xbf\xfe\x00\x00\xdd\xff\x00\x00\xb8\xfe\x42\xff\x43\xff\xd0\xff\xdd\xfe\x00\x00\xb6\xfe\xcf\xfe\xc0\xfe\x00\x00\x40\xff"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x00\x00\x12\x00\x0b\x00\x0c\x00\x02\x00\x50\x00\x21\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x55\x00\x0c\x00\x1b\x00\x1c\x00\x02\x00\x21\x00\x1f\x00\x20\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x09\x00\x09\x00\x0b\x00\x0b\x00\x21\x00\x0d\x00\x5d\x00\x3b\x00\x21\x00\x21\x00\x23\x00\x94\x00\x25\x00\x26\x00\x27\x00\x43\x00\x02\x00\x19\x00\x1a\x00\x1b\x00\x02\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x25\x00\x26\x00\x38\x00\x39\x00\x02\x00\x02\x00\x21\x00\x30\x00\x02\x00\x3f\x00\x21\x00\x09\x00\x46\x00\x47\x00\x43\x00\x45\x00\x44\x00\x45\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x27\x00\x94\x00\x3f\x00\x51\x00\x52\x00\x53\x00\x44\x00\x14\x00\x45\x00\x30\x00\x11\x00\x59\x00\x3b\x00\x30\x00\x15\x00\x13\x00\x21\x00\x27\x00\x27\x00\x61\x00\x43\x00\x27\x00\x64\x00\x21\x00\x66\x00\x21\x00\x68\x00\x30\x00\x6a\x00\x6b\x00\x30\x00\x12\x00\x9b\x00\x9c\x00\x70\x00\x71\x00\x17\x00\x73\x00\xa3\x00\x75\x00\xa3\x00\x77\x00\x21\x00\x3c\x00\x7a\x00\x94\x00\x21\x00\x7d\x00\x21\x00\x50\x00\x80\x00\x81\x00\x91\x00\x92\x00\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\x04\x00\x46\x00\x47\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x77\x00\x0c\x00\x9d\x00\x7a\x00\x96\x00\x97\x00\x7d\x00\x42\x00\x43\x00\x80\x00\x81\x00\x9d\x00\x50\x00\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\xa6\x00\x0d\x00\x21\x00\x22\x00\x23\x00\x21\x00\x25\x00\x26\x00\x27\x00\x1b\x00\x1c\x00\x4e\x00\x4f\x00\x1f\x00\x20\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x21\x00\x7a\x00\x38\x00\x39\x00\x7d\x00\x5d\x00\x21\x00\x80\x00\x81\x00\x3f\x00\x94\x00\x84\x00\x85\x00\x86\x00\x87\x00\x45\x00\x89\x00\x8a\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x6d\x00\x6e\x00\x3b\x00\x51\x00\x52\x00\x53\x00\x99\x00\x9a\x00\x80\x00\x81\x00\x43\x00\x59\x00\x84\x00\x85\x00\x86\x00\x87\x00\xa3\x00\x89\x00\x8a\x00\x61\x00\x58\x00\x21\x00\x64\x00\x5b\x00\x66\x00\x1e\x00\x68\x00\x20\x00\x6a\x00\x6b\x00\x27\x00\x28\x00\x82\x00\x83\x00\x70\x00\x71\x00\x79\x00\x73\x00\x6f\x00\x75\x00\x7c\x00\x77\x00\x21\x00\x1a\x00\x7a\x00\x1c\x00\x1d\x00\x7d\x00\x1f\x00\x20\x00\x80\x00\x81\x00\x3d\x00\x3e\x00\x84\x00\x85\x00\x86\x00\x87\x00\x7f\x00\x89\x00\x8a\x00\x15\x00\x16\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x21\x00\x0c\x00\x3c\x00\x3d\x00\x3e\x00\x96\x00\x97\x00\x7d\x00\x22\x00\x23\x00\x80\x00\x81\x00\x9d\x00\x8c\x00\x84\x00\x85\x00\x86\x00\x87\x00\x20\x00\x89\x00\x8a\x00\xa6\x00\x21\x00\x22\x00\x23\x00\xa3\x00\x25\x00\x26\x00\x27\x00\x3b\x00\x3c\x00\x40\x00\x41\x00\x42\x00\x43\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x25\x00\x26\x00\x38\x00\x39\x00\x14\x00\x21\x00\x5d\x00\x0f\x00\x10\x00\x3f\x00\x12\x00\x21\x00\x0e\x00\x15\x00\x16\x00\x45\x00\x18\x00\x9e\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x5a\x00\x21\x00\x37\x00\x51\x00\x52\x00\x53\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\x94\x00\x59\x00\x3a\x00\x9e\x00\x3c\x00\x3d\x00\x3e\x00\x5f\x00\x60\x00\x61\x00\x12\x00\x13\x00\x64\x00\x44\x00\x66\x00\x10\x00\x68\x00\x12\x00\x6a\x00\x6b\x00\x15\x00\x16\x00\x21\x00\x18\x00\x70\x00\x71\x00\x21\x00\x73\x00\x50\x00\x75\x00\x24\x00\x77\x00\x21\x00\x07\x00\x7a\x00\x11\x00\x12\x00\x7d\x00\x06\x00\x15\x00\x80\x00\x81\x00\x18\x00\x94\x00\x84\x00\x85\x00\x86\x00\x87\x00\x7e\x00\x89\x00\x8a\x00\x21\x00\x78\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x54\x00\x0c\x00\x56\x00\x57\x00\x58\x00\x96\x00\x97\x00\x5b\x00\x7b\x00\x80\x00\x81\x00\x74\x00\x9d\x00\x84\x00\x85\x00\x86\x00\x87\x00\x76\x00\x89\x00\x8a\x00\x72\x00\xa6\x00\x21\x00\x22\x00\x23\x00\x6c\x00\x25\x00\x26\x00\x27\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\x21\x00\x69\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x11\x00\x12\x00\x38\x00\x39\x00\x15\x00\x67\x00\x62\x00\x18\x00\x11\x00\x3f\x00\x0f\x00\x11\x00\x05\x00\x11\x00\x0f\x00\x45\x00\x21\x00\x35\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x01\x00\x02\x00\x03\x00\x51\x00\x52\x00\x53\x00\x19\x00\x1a\x00\x11\x00\x1c\x00\x1d\x00\x59\x00\x1f\x00\x20\x00\x19\x00\x1a\x00\x21\x00\x1c\x00\x1d\x00\x61\x00\x1f\x00\x20\x00\x64\x00\x02\x00\x66\x00\x0a\x00\x68\x00\x23\x00\x6a\x00\x6b\x00\x18\x00\x0f\x00\x0f\x00\x0a\x00\x70\x00\x71\x00\x11\x00\x73\x00\x0c\x00\x75\x00\x02\x00\x77\x00\x0f\x00\x41\x00\x7a\x00\x11\x00\x11\x00\x7d\x00\x0f\x00\x11\x00\x80\x00\x81\x00\x15\x00\x11\x00\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\x80\x00\x81\x00\x0f\x00\x0f\x00\x84\x00\x85\x00\x86\x00\x87\x00\x08\x00\x89\x00\x8a\x00\x96\x00\x97\x00\x0a\x00\x0f\x00\x0a\x00\x15\x00\x08\x00\x9d\x00\x61\x00\x22\x00\x11\x00\x64\x00\x11\x00\x66\x00\x11\x00\x68\x00\xa6\x00\x6a\x00\x6b\x00\x02\x00\x35\x00\x35\x00\x1f\x00\x70\x00\x71\x00\x0f\x00\x73\x00\x18\x00\x75\x00\x02\x00\x77\x00\x44\x00\x20\x00\x7a\x00\x02\x00\x11\x00\x7d\x00\x11\x00\x0f\x00\x80\x00\x81\x00\x53\x00\x21\x00\x84\x00\x85\x00\x86\x00\x87\x00\x02\x00\x89\x00\x8a\x00\x61\x00\x37\x00\x41\x00\x64\x00\x35\x00\x66\x00\x39\x00\x68\x00\x2f\x00\x6a\x00\x6b\x00\x96\x00\x97\x00\x38\x00\x3a\x00\x70\x00\x71\x00\x2e\x00\x73\x00\x20\x00\x75\x00\x0a\x00\x77\x00\x30\x00\x0c\x00\x7a\x00\x15\x00\x0e\x00\x7d\x00\x02\x00\x08\x00\x80\x00\x81\x00\x0f\x00\x0f\x00\x84\x00\x85\x00\x86\x00\x87\x00\x20\x00\x89\x00\x8a\x00\x11\x00\x11\x00\x28\x00\x29\x00\x2a\x00\x21\x00\x2c\x00\x2d\x00\x36\x00\x08\x00\x18\x00\x96\x00\x97\x00\x0f\x00\x61\x00\x09\x00\x09\x00\x64\x00\x18\x00\x66\x00\x11\x00\x68\x00\x41\x00\x6a\x00\x6b\x00\x11\x00\x54\x00\x0f\x00\xa7\x00\x70\x00\x71\x00\x09\x00\x73\x00\x01\x00\x75\x00\x0f\x00\x77\x00\x59\x00\x02\x00\x7a\x00\x0f\x00\x11\x00\x7d\x00\x02\x00\x35\x00\x80\x00\x81\x00\x10\x00\x52\x00\x84\x00\x85\x00\x86\x00\x87\x00\x59\x00\x89\x00\x8a\x00\x21\x00\x0f\x00\x23\x00\x04\x00\x25\x00\x26\x00\x27\x00\x03\x00\x59\x00\x16\x00\x20\x00\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xa7\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\x93\x00\x61\x00\x95\x00\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\x93\x00\x61\x00\x95\x00\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\x93\x00\x61\x00\x95\x00\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\x48\x00\x49\x00\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\x48\x00\x49\x00\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\x37\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x40\x00\x41\x00\x42\x00\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\x48\x00\x49\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\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\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x21\x00\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x61\x00\x2b\x00\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x96\x00\x97\x00\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xa6\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x21\x00\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\x21\x00\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x96\x00\x97\x00\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xa6\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x96\x00\x97\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xa6\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xa0\x00\xa1\x00\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x21\x00\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xa0\x00\xa1\x00\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\x21\x00\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x9f\x00\x73\x00\xa1\x00\x75\x00\xff\xff\x77\x00\xff\xff\x21\x00\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\x9f\x00\x75\x00\xa1\x00\x77\x00\x21\x00\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x9f\x00\x73\x00\xa1\x00\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\x21\x00\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\x98\x00\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\x21\x00\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x96\x00\x97\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\x21\x00\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x96\x00\x97\x00\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\x21\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x97\x00\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\x21\x00\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\x8d\x00\x8e\x00\x8f\x00\x90\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\x21\x00\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\x61\x00\x8f\x00\x90\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\x21\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\x90\x00\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x21\x00\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\x5c\x00\x36\x00\xff\xff\xff\xff\x90\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x21\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x21\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\x63\x00\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x21\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x21\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\x63\x00\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\x21\x00\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x21\x00\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x21\x00\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\x66\x00\x21\x00\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\xff\xff\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\xff\xff\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\x52\x00\x0d\x00\x54\x00\x55\x00\x56\x00\x57\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\xff\xff\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\x52\x00\x0d\x00\x54\x00\x55\x00\x56\x00\x57\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\xff\xff\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\x52\x00\x0d\x00\x54\x00\x55\x00\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\x54\x00\x55\x00\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\x37\x00\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x3f\x00\x09\x00\xff\xff\x0b\x00\x43\x00\x0d\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x1a\x00\x1b\x00\xff\xff\x54\x00\x55\x00\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x37\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\x19\x00\x1a\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x37\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x3f\x00\x11\x00\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\x19\x00\x1a\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\x1d\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\x0e\x00\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\x1d\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x30\x00\x87\x01\xa5\x00\xa6\x00\x1f\x00\xcd\x01\x74\x00\x31\x00\x32\x00\x33\x00\x34\x00\xa9\x01\x35\x00\xb9\x01\x5c\x01\x1f\x00\x4f\x01\x5d\x01\xad\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\xef\x00\x25\x00\xf0\x00\x26\x00\x70\x00\x27\x00\xac\x01\x21\x01\x06\x00\x74\x00\x36\x00\xba\x01\x37\x00\x38\x00\x39\x00\x76\x00\xaf\x00\x28\x00\x29\x00\x2a\x00\xaf\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x2b\x00\x2c\x00\x42\x00\x43\x00\x1f\x00\x1f\x00\x06\x00\x52\x01\xaf\x00\x44\x00\x74\x00\x2f\x01\x71\x00\x72\x00\x79\x00\x45\x00\x78\x00\x79\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\xb0\x00\x7b\x01\x2e\x00\x4c\x00\x4d\x00\x4e\x00\xf1\x00\x8e\x01\x30\x00\xb1\x00\xfd\x00\x4f\x00\x22\x01\xb1\x00\xf8\x00\x8a\x01\x29\x01\x30\x01\x51\x01\x07\x00\x76\x00\xb0\x00\x08\x00\x06\x00\x09\x00\x70\x00\x0a\x00\x52\x01\x0b\x00\x0c\x00\xb1\x00\x88\x01\xf9\x00\xfa\x00\x0d\x00\x0e\x00\x89\x01\x0f\x00\x95\x01\x10\x00\xfb\x00\x11\x00\x74\x00\xa7\x01\x12\x00\xa3\x01\x4f\x01\x13\x00\x06\x00\x97\x01\x14\x00\x15\x00\xc0\x01\xc1\x01\x16\x00\x17\x00\x18\x00\x19\x00\xa6\x01\x1a\x00\x1b\x00\x6a\x00\x73\x00\x72\x00\x31\x00\x32\x00\x33\x00\x34\x00\x6e\x01\x35\x00\xa7\x00\x12\x00\x50\x00\x1d\x00\x13\x00\x54\x01\x8c\x00\x14\x00\x15\x00\x51\x00\x9f\x01\x16\x00\x17\x00\x18\x00\x19\x00\x27\x01\x1a\x00\x1b\x00\x52\x00\x52\x01\x06\x00\x6b\x00\x6c\x00\x55\x01\x37\x00\x38\x00\x39\x00\x5b\x01\x5c\x01\x9e\x00\x9f\x00\x5d\x01\xad\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x74\x00\x6d\x01\x42\x00\x43\x00\x13\x00\xa5\x01\x06\x00\x14\x00\x15\x00\x44\x00\x60\x01\x16\x00\x17\x00\x18\x00\x19\x00\x45\x00\x1a\x00\x1b\x00\x46\x00\x47\x00\x6d\x00\x49\x00\x4a\x00\x4b\x00\xd4\x00\xd5\x00\x75\x00\x4c\x00\x4d\x00\x4e\x00\x80\x01\x81\x01\x63\x01\x15\x00\x76\x00\x4f\x00\x16\x00\x17\x00\x18\x00\x19\x00\x82\x01\x1a\x00\x1b\x00\x07\x00\x9e\x01\x64\x01\x08\x00\x3a\x01\x09\x00\xfe\x00\x0a\x00\xff\x00\x0b\x00\x0c\x00\xea\x00\xeb\x00\xc4\x00\xc5\x00\x0d\x00\x0e\x00\xe2\x00\x0f\x00\x71\x01\x10\x00\xe5\x00\x11\x00\x29\x01\x5a\x01\x12\x00\xaa\x00\xab\x00\x13\x00\xac\x00\xad\x00\x14\x00\x15\x00\xec\x00\xed\x00\x16\x00\x17\x00\x18\x00\x19\x00\xe8\x00\x1a\x00\x1b\x00\xf8\x00\xc8\x01\x31\x00\x32\x00\x33\x00\x34\x00\x74\x00\x35\x00\x2b\x01\xa2\x01\x2d\x01\x50\x00\x1d\x00\x6c\x01\x3c\x01\x3d\x01\x14\x00\x15\x00\x51\x00\xed\x00\x16\x00\x17\x00\x18\x00\x19\x00\xfd\x00\x1a\x00\x1b\x00\x52\x00\x06\x00\x33\x01\x6c\x00\xf6\x00\x37\x00\x38\x00\x39\x00\xe4\x00\xe5\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\xe7\x00\xe8\x00\x42\x00\x43\x00\x00\x01\x06\x00\x0d\x01\x49\x01\x4a\x01\x44\x00\x4b\x01\x29\x01\x10\x01\x4c\x01\x4d\x01\x45\x00\x4e\x01\x12\x01\x46\x00\x47\x00\x6d\x00\x49\x00\x4a\x00\x4b\x00\x17\x01\x4f\x01\x1c\x01\x4c\x00\x4d\x00\x4e\x00\xc3\x01\xc4\x01\xda\x01\xc6\x01\x1e\x01\x4f\x00\x2a\x01\x20\x01\x2b\x01\x2c\x01\x2d\x01\x34\x01\x35\x01\x07\x00\x55\x00\x56\x00\x08\x00\x24\x01\x09\x00\xb2\x01\x0a\x00\x4b\x01\x0b\x00\x0c\x00\x4c\x01\x4d\x01\x87\x00\x4e\x01\x0d\x00\x0e\x00\x88\x00\x0f\x00\xa0\x00\x10\x00\xa2\x00\x11\x00\x4f\x01\xa4\x00\x12\x00\xd2\x01\x4b\x01\x13\x00\xc1\x00\xb4\x01\x14\x00\x15\x00\xb5\x01\xbf\x00\x16\x00\x17\x00\x18\x00\x19\x00\xc6\x00\x1a\x00\x1b\x00\x4f\x01\xc8\x00\x31\x00\x32\x00\x33\x00\x34\x00\x36\x01\x35\x00\x37\x01\x38\x01\x39\x01\x50\x00\x1d\x00\x3a\x01\xc7\x00\x6b\x01\x15\x00\xca\x00\x51\x00\x16\x00\x17\x00\x18\x00\x19\x00\xc9\x00\x1a\x00\x1b\x00\xcb\x00\x52\x00\x06\x00\xa0\x01\x6c\x00\xcc\x00\x37\x00\x38\x00\x39\x00\xc3\x01\xc4\x01\xc5\x01\xc6\x01\x06\x00\xcd\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\xb3\x01\x4b\x01\x42\x00\x43\x00\xb4\x01\xce\x00\xcf\x00\xb5\x01\xde\x01\x44\x00\xd2\x01\xd4\x01\x05\x00\xc3\x01\xca\x01\x45\x00\x4f\x01\xa2\x00\x46\x00\x47\x00\x6d\x00\x49\x00\x4a\x00\x4b\x00\x67\x00\x68\x00\x69\x00\x4c\x00\x4d\x00\x4e\x00\xd9\x01\xa9\x00\xcf\x01\xaa\x00\xab\x00\x4f\x00\xac\x00\xad\x00\xa8\x00\xa9\x00\x06\x00\xaa\x00\xab\x00\x07\x00\xac\x00\xad\x00\x08\x00\x1f\x00\x09\x00\xa9\x01\x0a\x00\xab\x01\x0b\x00\x0c\x00\x0f\x01\xb2\x01\xbc\x01\x7a\x01\x0d\x00\x0e\x00\x7b\x01\x0f\x00\x7e\x01\x10\x00\x1f\x00\x11\x00\x7d\x01\x7f\x01\x12\x00\xe0\xfe\x85\x01\x13\x00\x84\x01\x87\x01\x14\x00\x15\x00\xf8\x00\x8c\x01\x16\x00\x17\x00\x18\x00\x19\x00\x06\x00\x1a\x00\x1b\x00\xb1\x00\x15\x00\x8d\x01\x8e\x01\x16\x00\x17\x00\x18\x00\x19\x00\x02\x01\x1a\x00\x1b\x00\x50\x00\x1d\x00\x90\x01\x94\x01\x95\x01\xf8\x00\x97\x01\x51\x00\x07\x00\x3c\x01\x99\x01\x08\x00\x9b\x01\x09\x00\x9e\x01\x0a\x00\x52\x00\x0b\x00\x0c\x00\x1f\x00\xa2\x00\xa2\x00\xa2\x01\x0d\x00\x0e\x00\xa5\x01\x0f\x00\x0f\x01\x10\x00\x1f\x00\x11\x00\x29\x01\x31\x01\x12\x00\x1f\x00\x3f\x01\x13\x00\x49\x01\x62\x01\x14\x00\x15\x00\x54\x01\x06\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1f\x00\x1a\x00\x1b\x00\x07\x00\x73\x01\x74\x01\x08\x00\x78\x01\x09\x00\xe1\x00\x0a\x00\xd3\x00\x0b\x00\x0c\x00\x1c\x00\x1d\x00\xe0\x00\xe2\x00\x0d\x00\x0e\x00\xd4\x00\x0f\x00\xf3\x00\x10\x00\xf5\x00\x11\x00\xf2\x00\xf6\x00\x12\x00\xf8\x00\xf9\x00\x13\x00\xaf\x00\x02\x01\x14\x00\x15\x00\x03\x01\x04\x01\x16\x00\x17\x00\x18\x00\x19\x00\x07\x01\x1a\x00\x1b\x00\x05\x01\x08\x01\x8d\x00\x8e\x00\x8f\x00\x06\x00\x90\x00\x91\x00\x09\x01\x0d\x01\x0f\x01\x80\x00\x1d\x00\x10\x01\x07\x00\x12\x01\x14\x01\x08\x00\x19\x01\x09\x00\x15\x01\x0a\x00\x16\x01\x0b\x00\x0c\x00\x17\x01\x1e\x01\x20\x01\x81\x00\x0d\x00\x0e\x00\x14\x01\x0f\x00\x24\x01\x10\x00\x26\x01\x11\x00\xff\xff\x1f\x00\x12\x00\x27\x01\x80\x00\x13\x00\x1f\x00\xa2\x00\x14\x00\x15\x00\xa4\x00\x63\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\x1a\x00\x1b\x00\x06\x00\xc1\x00\x19\x01\xc3\x00\x37\x00\x38\x00\x39\x00\xc4\x00\xff\xff\xd1\x00\x05\x00\x80\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x00\x00\x82\x00\x3d\x01\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x7a\x00\x0e\x00\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x01\x00\x00\x62\x01\x07\x00\x7c\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x7a\x00\x0e\x00\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x01\x00\x00\x7b\x00\x07\x00\x7c\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x7a\x00\x0e\x00\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\x00\x00\x85\x00\x07\x00\x7c\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x31\x01\x0e\x00\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x74\x01\x0e\x00\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x70\x01\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x6f\x01\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x06\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x47\x00\xb3\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x47\x00\xb4\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x01\x00\x00\x00\x00\x07\x00\x00\x00\xdc\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\xdd\x00\xde\x00\xdf\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x47\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x01\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x47\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x06\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xb8\x00\x56\x01\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x50\x00\x1d\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x52\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x06\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xbc\x00\x1a\x00\x1b\x00\xbd\x00\x09\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x1d\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x42\x01\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x0a\x01\x1d\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x0b\x01\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x42\x01\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x01\x0a\x01\x1d\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x0b\x01\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x42\x01\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\xdc\x01\xcb\x01\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x42\x01\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\xca\x01\xcb\x01\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x42\x01\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x43\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\xb0\x01\x0f\x00\x45\x01\x10\x00\x00\x00\x11\x00\x00\x00\x06\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x43\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x44\x01\x10\x00\x45\x01\x11\x00\x06\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x6a\x01\x0f\x00\x45\x01\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x06\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xb8\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x06\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\xba\x00\x1d\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x06\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x40\x01\x1d\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x06\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x65\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x06\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x66\x01\x67\x01\x68\x01\x69\x01\x65\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x06\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\xbe\x01\xbd\x01\x69\x01\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x06\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\xbe\x01\x00\x00\x00\x00\x08\x00\xd8\x01\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x06\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x9b\x01\x7d\x00\x00\x00\x00\x00\xbf\x01\x9c\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x06\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x7e\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x06\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\xde\x01\x00\x00\xd5\x01\xd6\x01\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xdb\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x06\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xd0\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x06\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\xd4\x01\x00\x00\xd5\x01\xd6\x01\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xc8\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xaf\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xb6\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x78\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x7f\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x85\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x91\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x92\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xf3\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x32\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x57\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x59\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x5e\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x5f\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xf3\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x83\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x84\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x06\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x86\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x06\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xbc\x01\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x06\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\xd1\x00\x06\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x06\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x76\x01\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x75\x01\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xb2\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x54\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x6f\x00\x5d\x00\x00\x00\x00\x00\x5e\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x54\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x63\x00\x27\x00\x64\x00\x65\x00\x66\x00\x67\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x05\x00\x5d\x00\x00\x00\x00\x00\x5e\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x54\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x63\x00\x27\x00\x64\x00\x65\x00\x66\x00\x67\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x5d\x00\x00\x00\x00\x00\x5e\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x54\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x63\x00\x27\x00\x64\x00\x65\x00\x66\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x5b\x00\x5c\x00\x1c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x54\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x64\x00\x65\x00\x66\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x2e\x00\x25\x00\x00\x00\x26\x00\x2f\x00\x27\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x64\x00\x65\x00\x66\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x47\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x01\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x2d\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x01\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x2d\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2e\x00\xe1\xfe\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x5c\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\xb8\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\xbc\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x5c\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\xd8\x01\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\xd8\x01\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyReduceArr = array (3, 332) [+	(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)+	]++happy_n_terms = 90 :: Int+happy_n_nonterms = 168 :: Int++happyReduce_3 = happySpecReduce_1  0# happyReduction_3+happyReduction_3 happy_x_1+	 =  happyIn6+		 ([]+	)++happyReduce_4 = happySpecReduce_1  0# happyReduction_4+happyReduction_4 happy_x_1+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> +	happyIn6+		 (happy_var_1+	)}++happyReduce_5 = happySpecReduce_1  0# happyReduction_5+happyReduction_5 happy_x_1+	 =  case happyOut80 happy_x_1 of { happy_var_1 -> +	happyIn6+		 ([happy_var_1]+	)}++happyReduce_6 = happySpecReduce_1  1# happyReduction_6+happyReduction_6 happy_x_1+	 =  case happyOut8 happy_x_1 of { happy_var_1 -> +	happyIn7+		 (Module happy_var_1+	)}++happyReduce_7 = happySpecReduce_1  2# happyReduction_7+happyReduction_7 happy_x_1+	 =  case happyOut9 happy_x_1 of { happy_var_1 -> +	happyIn8+		 (concat (reverse happy_var_1)+	)}++happyReduce_8 = happySpecReduce_0  3# happyReduction_8+happyReduction_8  =  happyIn9+		 ([]+	)++happyReduce_9 = happySpecReduce_2  3# happyReduction_9+happyReduction_9 happy_x_2+	happy_x_1+	 =  case happyOut9 happy_x_1 of { happy_var_1 -> +	case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn9+		 (happy_var_2 : happy_var_1+	)}}++happyReduce_10 = happySpecReduce_1  4# happyReduction_10+happyReduction_10 happy_x_1+	 =  happyIn10+		 ([]+	)++happyReduce_11 = happySpecReduce_1  4# happyReduction_11+happyReduction_11 happy_x_1+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> +	happyIn10+		 (happy_var_1+	)}++happyReduce_12 = happySpecReduce_2  5# happyReduction_12+happyReduction_12 happy_x_2+	happy_x_1+	 =  case happyOut156 happy_x_1 of { happy_var_1 -> +	happyIn11+		 (happy_var_1+	)}++happyReduce_13 = happySpecReduce_0  6# happyReduction_13+happyReduction_13  =  happyIn12+		 (()+	)++happyReduce_14 = happySpecReduce_2  6# happyReduction_14+happyReduction_14 happy_x_2+	happy_x_1+	 =  happyIn12+		 (()+	)++happyReduce_15 = happyReduce 4# 7# happyReduction_15+happyReduction_15 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut73 happy_x_2 of { happy_var_2 -> +	case happyOut164 happy_x_3 of { happy_var_3 -> +	happyIn13+		 (Decorator { decorator_name = happy_var_2, decorator_args = happy_var_3 }+	) `HappyStk` happyRest}}++happyReduce_16 = happySpecReduce_1  8# happyReduction_16+happyReduction_16 happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	happyIn14+		 (reverse happy_var_1+	)}++happyReduce_17 = happySpecReduce_1  9# happyReduction_17+happyReduction_17 happy_x_1+	 =  case happyOut13 happy_x_1 of { happy_var_1 -> +	happyIn15+		 ([happy_var_1]+	)}++happyReduce_18 = happySpecReduce_2  9# happyReduction_18+happyReduction_18 happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	case happyOut13 happy_x_2 of { happy_var_2 -> +	happyIn15+		 (happy_var_2 : happy_var_1+	)}}++happyReduce_19 = happySpecReduce_2  10# happyReduction_19+happyReduction_19 happy_x_2+	happy_x_1+	 =  case happyOut14 happy_x_1 of { happy_var_1 -> +	case happyOut17 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (Decorated { decorated_decorators = happy_var_1, decorated_def = happy_var_2 }+	)}}++happyReduce_20 = happySpecReduce_1  11# happyReduction_20+happyReduction_20 happy_x_1+	 =  case happyOut163 happy_x_1 of { happy_var_1 -> +	happyIn17+		 (happy_var_1+	)}++happyReduce_21 = happySpecReduce_1  11# happyReduction_21+happyReduction_21 happy_x_1+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> +	happyIn17+		 (happy_var_1+	)}++happyReduce_22 = happyReduce 6# 12# happyReduction_22+happyReduction_22 (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 happyOut39 happy_x_2 of { happy_var_2 -> +	case happyOut20 happy_x_3 of { happy_var_3 -> +	case happyOut19 happy_x_4 of { happy_var_4 -> +	case happyOut100 happy_x_6 of { happy_var_6 -> +	happyIn18+		 (Fun { fun_name = happy_var_2 , fun_args = happy_var_3, fun_result_annotation = happy_var_4, fun_body = happy_var_6 }+	) `HappyStk` happyRest}}}}++happyReduce_23 = happySpecReduce_0  13# happyReduction_23+happyReduction_23  =  happyIn19+		 (Nothing+	)++happyReduce_24 = happySpecReduce_2  13# happyReduction_24+happyReduction_24 happy_x_2+	happy_x_1+	 =  case happyOut103 happy_x_2 of { happy_var_2 -> +	happyIn19+		 (Just happy_var_2+	)}++happyReduce_25 = happySpecReduce_3  14# happyReduction_25+happyReduction_25 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut21 happy_x_2 of { happy_var_2 -> +	happyIn20+		 (happy_var_2+	)}++happyReduce_26 = happySpecReduce_1  15# happyReduction_26+happyReduction_26 happy_x_1+	 =  case happyOut22 happy_x_1 of { happy_var_1 -> +	happyIn21+		 (happy_var_1+	)}++happyReduce_27 = happySpecReduce_0  16# happyReduction_27+happyReduction_27  =  happyIn22+		 ([]+	)++happyReduce_28 = happySpecReduce_1  16# happyReduction_28+happyReduction_28 happy_x_1+	 =  case happyOut28 happy_x_1 of { happy_var_1 -> +	happyIn22+		 ([happy_var_1]+	)}++happyReduce_29 = happySpecReduce_1  16# happyReduction_29+happyReduction_29 happy_x_1+	 =  case happyOut30 happy_x_1 of { happy_var_1 -> +	happyIn22+		 ([happy_var_1]+	)}++happyReduce_30 = happySpecReduce_1  16# happyReduction_30+happyReduction_30 happy_x_1+	 =  case happyOut27 happy_x_1 of { happy_var_1 -> +	happyIn22+		 ([happy_var_1]+	)}++happyReduce_31 = happySpecReduce_3  16# happyReduction_31+happyReduction_31 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut27 happy_x_1 of { happy_var_1 -> +	case happyOut22 happy_x_3 of { happy_var_3 -> +	happyIn22+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_32 = happySpecReduce_3  16# happyReduction_32+happyReduction_32 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut28 happy_x_1 of { happy_var_1 -> +	case happyOut23 happy_x_3 of { happy_var_3 -> +	happyIn22+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_33 = happySpecReduce_1  17# happyReduction_33+happyReduction_33 happy_x_1+	 =  case happyOut27 happy_x_1 of { happy_var_1 -> +	happyIn23+		 ([happy_var_1]+	)}++happyReduce_34 = happySpecReduce_3  17# happyReduction_34+happyReduction_34 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut27 happy_x_1 of { happy_var_1 -> +	case happyOut23 happy_x_3 of { happy_var_3 -> +	happyIn23+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_35 = happySpecReduce_1  17# happyReduction_35+happyReduction_35 happy_x_1+	 =  case happyOut30 happy_x_1 of { happy_var_1 -> +	happyIn23+		 ([happy_var_1]+	)}++happyReduce_36 = happySpecReduce_2  18# happyReduction_36+happyReduction_36 happy_x_2+	happy_x_1+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> +	case happyOut25 happy_x_2 of { happy_var_2 -> +	happyIn24+		 ((happy_var_1, happy_var_2)+	)}}++happyReduce_37 = happySpecReduce_0  19# happyReduction_37+happyReduction_37  =  happyIn25+		 (Nothing+	)++happyReduce_38 = happySpecReduce_2  19# happyReduction_38+happyReduction_38 happy_x_2+	happy_x_1+	 =  case happyOut103 happy_x_2 of { happy_var_2 -> +	happyIn25+		 (Just happy_var_2+	)}++happyReduce_39 = happySpecReduce_0  20# happyReduction_39+happyReduction_39  =  happyIn26+		 (Nothing+	)++happyReduce_40 = happySpecReduce_2  20# happyReduction_40+happyReduction_40 happy_x_2+	happy_x_1+	 =  case happyOut103 happy_x_2 of { happy_var_2 -> +	happyIn26+		 (Just happy_var_2+	)}++happyReduce_41 = happySpecReduce_2  21# happyReduction_41+happyReduction_41 happy_x_2+	happy_x_1+	 =  case happyOut24 happy_x_1 of { happy_var_1 -> +	case happyOut26 happy_x_2 of { happy_var_2 -> +	happyIn27+		 (makeParam happy_var_1 happy_var_2+	)}}++happyReduce_42 = happySpecReduce_2  22# happyReduction_42+happyReduction_42 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn28+		 (makeStarParam happy_var_2+	)}++happyReduce_43 = happySpecReduce_0  23# happyReduction_43+happyReduction_43  =  happyIn29+		 (Nothing+	)++happyReduce_44 = happySpecReduce_1  23# happyReduction_44+happyReduction_44 happy_x_1+	 =  case happyOut24 happy_x_1 of { happy_var_1 -> +	happyIn29+		 (Just happy_var_1+	)}++happyReduce_45 = happySpecReduce_2  24# happyReduction_45+happyReduction_45 happy_x_2+	happy_x_1+	 =  case happyOut24 happy_x_2 of { happy_var_2 -> +	happyIn30+		 (makeStarStarParam happy_var_2+	)}++happyReduce_46 = happySpecReduce_1  25# happyReduction_46+happyReduction_46 happy_x_1+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> +	happyIn31+		 (happy_var_1+	)}++happyReduce_47 = happySpecReduce_0  26# happyReduction_47+happyReduction_47  =  happyIn32+		 ([]+	)++happyReduce_48 = happySpecReduce_1  26# happyReduction_48+happyReduction_48 happy_x_1+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> +	happyIn32+		 ([happy_var_1]+	)}++happyReduce_49 = happySpecReduce_1  26# happyReduction_49+happyReduction_49 happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	happyIn32+		 ([happy_var_1]+	)}++happyReduce_50 = happySpecReduce_1  26# happyReduction_50+happyReduction_50 happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	happyIn32+		 ([happy_var_1]+	)}++happyReduce_51 = happySpecReduce_3  26# happyReduction_51+happyReduction_51 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	case happyOut32 happy_x_3 of { happy_var_3 -> +	happyIn32+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_52 = happySpecReduce_3  26# happyReduction_52+happyReduction_52 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> +	case happyOut33 happy_x_3 of { happy_var_3 -> +	happyIn32+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_53 = happySpecReduce_1  27# happyReduction_53+happyReduction_53 happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	happyIn33+		 ([happy_var_1]+	)}++happyReduce_54 = happySpecReduce_3  27# happyReduction_54+happyReduction_54 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	case happyOut33 happy_x_3 of { happy_var_3 -> +	happyIn33+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_55 = happySpecReduce_1  27# happyReduction_55+happyReduction_55 happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	happyIn33+		 ([happy_var_1]+	)}++happyReduce_56 = happySpecReduce_2  28# happyReduction_56+happyReduction_56 happy_x_2+	happy_x_1+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> +	case happyOut26 happy_x_2 of { happy_var_2 -> +	happyIn34+		 (makeParam (happy_var_1, Nothing) happy_var_2+	)}}++happyReduce_57 = happySpecReduce_2  29# happyReduction_57+happyReduction_57 happy_x_2+	happy_x_1+	 =  case happyOut36 happy_x_2 of { happy_var_2 -> +	happyIn35+		 (makeStarParam happy_var_2+	)}++happyReduce_58 = happySpecReduce_0  30# happyReduction_58+happyReduction_58  =  happyIn36+		 (Nothing+	)++happyReduce_59 = happySpecReduce_1  30# happyReduction_59+happyReduction_59 happy_x_1+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> +	happyIn36+		 (Just (happy_var_1, Nothing)+	)}++happyReduce_60 = happySpecReduce_2  31# happyReduction_60+happyReduction_60 happy_x_2+	happy_x_1+	 =  case happyOut38 happy_x_2 of { happy_var_2 -> +	happyIn37+		 (makeStarStarParam (happy_var_2, Nothing)+	)}++happyReduce_61 = happySpecReduce_1  32# happyReduction_61+happyReduction_61 happy_x_1+	 =  case happyOutTok happy_x_1 of { (Token.Identifier _ happy_var_1) -> +	happyIn38+		 (Ident happy_var_1+	)}++happyReduce_62 = happySpecReduce_1  33# happyReduction_62+happyReduction_62 happy_x_1+	 =  case happyOutTok happy_x_1 of { (Token.Identifier _ happy_var_1) -> +	happyIn39+		 (Ident happy_var_1+	)}++happyReduce_63 = happySpecReduce_1  34# happyReduction_63+happyReduction_63 happy_x_1+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> +	happyIn40+		 (happy_var_1+	)}++happyReduce_64 = happySpecReduce_1  34# happyReduction_64+happyReduction_64 happy_x_1+	 =  case happyOut80 happy_x_1 of { happy_var_1 -> +	happyIn40+		 ([happy_var_1]+	)}++happyReduce_65 = happySpecReduce_3  35# happyReduction_65+happyReduction_65 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> +	happyIn41+		 (reverse happy_var_1+	)}++happyReduce_66 = happySpecReduce_0  36# happyReduction_66+happyReduction_66  =  happyIn42+		 (()+	)++happyReduce_67 = happySpecReduce_1  36# happyReduction_67+happyReduction_67 happy_x_1+	 =  happyIn42+		 (()+	)++happyReduce_68 = happySpecReduce_1  37# happyReduction_68+happyReduction_68 happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	happyIn43+		 ([happy_var_1]+	)}++happyReduce_69 = happySpecReduce_3  37# happyReduction_69+happyReduction_69 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> +	case happyOut44 happy_x_3 of { happy_var_3 -> +	happyIn43+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_70 = happySpecReduce_1  38# happyReduction_70+happyReduction_70 happy_x_1+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> +	happyIn44+		 (happy_var_1+	)}++happyReduce_71 = happySpecReduce_1  38# happyReduction_71+happyReduction_71 happy_x_1+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> +	happyIn44+		 (happy_var_1+	)}++happyReduce_72 = happySpecReduce_1  38# happyReduction_72+happyReduction_72 happy_x_1+	 =  case happyOut53 happy_x_1 of { happy_var_1 -> +	happyIn44+		 (happy_var_1+	)}++happyReduce_73 = happySpecReduce_1  38# happyReduction_73+happyReduction_73 happy_x_1+	 =  case happyOut54 happy_x_1 of { happy_var_1 -> +	happyIn44+		 (happy_var_1+	)}++happyReduce_74 = happySpecReduce_1  38# happyReduction_74+happyReduction_74 happy_x_1+	 =  case happyOut62 happy_x_1 of { happy_var_1 -> +	happyIn44+		 (happy_var_1+	)}++happyReduce_75 = happySpecReduce_1  38# happyReduction_75+happyReduction_75 happy_x_1+	 =  case happyOut75 happy_x_1 of { happy_var_1 -> +	happyIn44+		 (happy_var_1+	)}++happyReduce_76 = happySpecReduce_1  38# happyReduction_76+happyReduction_76 happy_x_1+	 =  case happyOut78 happy_x_1 of { happy_var_1 -> +	happyIn44+		 (happy_var_1+	)}++happyReduce_77 = happySpecReduce_1  38# happyReduction_77+happyReduction_77 happy_x_1+	 =  case happyOut79 happy_x_1 of { happy_var_1 -> +	happyIn44+		 (happy_var_1+	)}++happyReduce_78 = happySpecReduce_2  39# happyReduction_78+happyReduction_78 happy_x_2+	happy_x_1+	 =  case happyOut156 happy_x_1 of { happy_var_1 -> +	case happyOut46 happy_x_2 of { happy_var_2 -> +	happyIn45+		 (makeAssignmentOrExpr happy_var_1 happy_var_2+	)}}++happyReduce_79 = happySpecReduce_1  40# happyReduction_79+happyReduction_79 happy_x_1+	 =  case happyOut47 happy_x_1 of { happy_var_1 -> +	happyIn46+		 (Left happy_var_1+	)}++happyReduce_80 = happySpecReduce_1  40# happyReduction_80+happyReduction_80 happy_x_1+	 =  case happyOut50 happy_x_1 of { happy_var_1 -> +	happyIn46+		 (Right happy_var_1+	)}++happyReduce_81 = happySpecReduce_1  41# happyReduction_81+happyReduction_81 happy_x_1+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> +	happyIn47+		 (reverse happy_var_1+	)}++happyReduce_82 = happySpecReduce_0  42# happyReduction_82+happyReduction_82  =  happyIn48+		 ([]+	)++happyReduce_83 = happySpecReduce_3  42# happyReduction_83+happyReduction_83 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> +	case happyOut49 happy_x_3 of { happy_var_3 -> +	happyIn48+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_84 = happySpecReduce_1  43# happyReduction_84+happyReduction_84 happy_x_1+	 =  case happyOut172 happy_x_1 of { happy_var_1 -> +	happyIn49+		 (happy_var_1+	)}++happyReduce_85 = happySpecReduce_1  43# happyReduction_85+happyReduction_85 happy_x_1+	 =  case happyOut156 happy_x_1 of { happy_var_1 -> +	happyIn49+		 (happy_var_1+	)}++happyReduce_86 = happySpecReduce_2  44# happyReduction_86+happyReduction_86 happy_x_2+	happy_x_1+	 =  case happyOut51 happy_x_1 of { happy_var_1 -> +	case happyOut49 happy_x_2 of { happy_var_2 -> +	happyIn50+		 ((happy_var_1, happy_var_2)+	)}}++happyReduce_87 = happySpecReduce_1  45# happyReduction_87+happyReduction_87 happy_x_1+	 =  happyIn51+		 (AST.PlusAssign+	)++happyReduce_88 = happySpecReduce_1  45# happyReduction_88+happyReduction_88 happy_x_1+	 =  happyIn51+		 (AST.MinusAssign+	)++happyReduce_89 = happySpecReduce_1  45# happyReduction_89+happyReduction_89 happy_x_1+	 =  happyIn51+		 (AST.MultAssign+	)++happyReduce_90 = happySpecReduce_1  45# happyReduction_90+happyReduction_90 happy_x_1+	 =  happyIn51+		 (AST.DivAssign+	)++happyReduce_91 = happySpecReduce_1  45# happyReduction_91+happyReduction_91 happy_x_1+	 =  happyIn51+		 (AST.ModAssign+	)++happyReduce_92 = happySpecReduce_1  45# happyReduction_92+happyReduction_92 happy_x_1+	 =  happyIn51+		 (AST.PowAssign+	)++happyReduce_93 = happySpecReduce_1  45# happyReduction_93+happyReduction_93 happy_x_1+	 =  happyIn51+		 (AST.BinAndAssign+	)++happyReduce_94 = happySpecReduce_1  45# happyReduction_94+happyReduction_94 happy_x_1+	 =  happyIn51+		 (AST.BinOrAssign+	)++happyReduce_95 = happySpecReduce_1  45# happyReduction_95+happyReduction_95 happy_x_1+	 =  happyIn51+		 (AST.BinXorAssign+	)++happyReduce_96 = happySpecReduce_1  45# happyReduction_96+happyReduction_96 happy_x_1+	 =  happyIn51+		 (AST.LeftShiftAssign+	)++happyReduce_97 = happySpecReduce_1  45# happyReduction_97+happyReduction_97 happy_x_1+	 =  happyIn51+		 (AST.RightShiftAssign+	)++happyReduce_98 = happySpecReduce_1  45# happyReduction_98+happyReduction_98 happy_x_1+	 =  happyIn51+		 (AST.FloorDivAssign+	)++happyReduce_99 = happySpecReduce_2  46# happyReduction_99+happyReduction_99 happy_x_2+	happy_x_1+	 =  case happyOut153 happy_x_2 of { happy_var_2 -> +	happyIn52+		 (AST.Delete { del_exprs = happy_var_2 }+	)}++happyReduce_100 = happySpecReduce_1  47# happyReduction_100+happyReduction_100 happy_x_1+	 =  happyIn53+		 (AST.Pass+	)++happyReduce_101 = happySpecReduce_1  48# happyReduction_101+happyReduction_101 happy_x_1+	 =  case happyOut55 happy_x_1 of { happy_var_1 -> +	happyIn54+		 (happy_var_1+	)}++happyReduce_102 = happySpecReduce_1  48# happyReduction_102+happyReduction_102 happy_x_1+	 =  case happyOut56 happy_x_1 of { happy_var_1 -> +	happyIn54+		 (happy_var_1+	)}++happyReduce_103 = happySpecReduce_1  48# happyReduction_103+happyReduction_103 happy_x_1+	 =  case happyOut57 happy_x_1 of { happy_var_1 -> +	happyIn54+		 (happy_var_1+	)}++happyReduce_104 = happySpecReduce_1  48# happyReduction_104+happyReduction_104 happy_x_1+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> +	happyIn54+		 (happy_var_1+	)}++happyReduce_105 = happySpecReduce_1  48# happyReduction_105+happyReduction_105 happy_x_1+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> +	happyIn54+		 (happy_var_1+	)}++happyReduce_106 = happySpecReduce_1  49# happyReduction_106+happyReduction_106 happy_x_1+	 =  happyIn55+		 (AST.Break+	)++happyReduce_107 = happySpecReduce_1  50# happyReduction_107+happyReduction_107 happy_x_1+	 =  happyIn56+		 (AST.Continue+	)++happyReduce_108 = happySpecReduce_2  51# happyReduction_108+happyReduction_108 happy_x_2+	happy_x_1+	 =  case happyOut173 happy_x_2 of { happy_var_2 -> +	happyIn57+		 (AST.Return { return_expr = happy_var_2 }+	)}++happyReduce_109 = happySpecReduce_1  52# happyReduction_109+happyReduction_109 happy_x_1+	 =  case happyOut172 happy_x_1 of { happy_var_1 -> +	happyIn58+		 (StmtExpr { stmt_expr = happy_var_1 }+	)}++happyReduce_110 = happySpecReduce_2  53# happyReduction_110+happyReduction_110 happy_x_2+	happy_x_1+	 =  case happyOut60 happy_x_2 of { happy_var_2 -> +	happyIn59+		 (AST.Raise { raise_expr = happy_var_2 }+	)}++happyReduce_111 = happySpecReduce_0  54# happyReduction_111+happyReduction_111  =  happyIn60+		 (Nothing+	)++happyReduce_112 = happySpecReduce_2  54# happyReduction_112+happyReduction_112 happy_x_2+	happy_x_1+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> +	case happyOut61 happy_x_2 of { happy_var_2 -> +	happyIn60+		 (Just (happy_var_1, happy_var_2)+	)}}++happyReduce_113 = happySpecReduce_0  55# happyReduction_113+happyReduction_113  =  happyIn61+		 (Nothing+	)++happyReduce_114 = happySpecReduce_2  55# happyReduction_114+happyReduction_114 happy_x_2+	happy_x_1+	 =  case happyOut103 happy_x_2 of { happy_var_2 -> +	happyIn61+		 (Just happy_var_2+	)}++happyReduce_115 = happySpecReduce_1  56# happyReduction_115+happyReduction_115 happy_x_1+	 =  case happyOut69 happy_x_1 of { happy_var_1 -> +	happyIn62+		 (happy_var_1+	)}++happyReduce_116 = happySpecReduce_1  56# happyReduction_116+happyReduction_116 happy_x_1+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> +	happyIn62+		 (happy_var_1+	)}++happyReduce_117 = happyReduce 4# 57# happyReduction_117+happyReduction_117 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut65 happy_x_2 of { happy_var_2 -> +	case happyOut64 happy_x_4 of { happy_var_4 -> +	happyIn63+		 (FromImport { from_module = happy_var_2, from_items = happy_var_4 }+	) `HappyStk` happyRest}}++happyReduce_118 = happySpecReduce_1  58# happyReduction_118+happyReduction_118 happy_x_1+	 =  happyIn64+		 (ImportEverything+	)++happyReduce_119 = happySpecReduce_3  58# happyReduction_119+happyReduction_119 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut67 happy_x_2 of { happy_var_2 -> +	happyIn64+		 (happy_var_2+	)}++happyReduce_120 = happySpecReduce_1  58# happyReduction_120+happyReduction_120 happy_x_1+	 =  case happyOut67 happy_x_1 of { happy_var_1 -> +	happyIn64+		 (happy_var_1+	)}++happyReduce_121 = happySpecReduce_1  59# happyReduction_121+happyReduction_121 happy_x_1+	 =  happyIn65+		 (ImportDot+	)++happyReduce_122 = happySpecReduce_1  59# happyReduction_122+happyReduction_122 happy_x_1+	 =  happyIn65+		 (ImportRelative (ImportRelative ImportDot)+	)++happyReduce_123 = happySpecReduce_1  59# happyReduction_123+happyReduction_123 happy_x_1+	 =  case happyOut73 happy_x_1 of { happy_var_1 -> +	happyIn65+		 (ImportName happy_var_1+	)}++happyReduce_124 = happySpecReduce_2  59# happyReduction_124+happyReduction_124 happy_x_2+	happy_x_1+	 =  case happyOut65 happy_x_2 of { happy_var_2 -> +	happyIn65+		 (ImportRelative happy_var_2+	)}++happyReduce_125 = happySpecReduce_2  59# happyReduction_125+happyReduction_125 happy_x_2+	happy_x_1+	 =  case happyOut65 happy_x_2 of { happy_var_2 -> +	happyIn65+		 (ImportRelative (ImportRelative (ImportRelative happy_var_2))+	)}++happyReduce_126 = happySpecReduce_2  60# happyReduction_126+happyReduction_126 happy_x_2+	happy_x_1+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> +	case happyOut99 happy_x_2 of { happy_var_2 -> +	happyIn66+		 (FromItem { from_item_name = happy_var_1, from_as_name = happy_var_2 }+	)}}++happyReduce_127 = happySpecReduce_2  61# happyReduction_127+happyReduction_127 happy_x_2+	happy_x_1+	 =  case happyOut68 happy_x_1 of { happy_var_1 -> +	happyIn67+		 (FromItems (reverse happy_var_1)+	)}++happyReduce_128 = happySpecReduce_1  62# happyReduction_128+happyReduction_128 happy_x_1+	 =  case happyOut66 happy_x_1 of { happy_var_1 -> +	happyIn68+		 ([happy_var_1]+	)}++happyReduce_129 = happySpecReduce_3  62# happyReduction_129+happyReduction_129 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut68 happy_x_1 of { happy_var_1 -> +	case happyOut66 happy_x_3 of { happy_var_3 -> +	happyIn68+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_130 = happySpecReduce_2  63# happyReduction_130+happyReduction_130 happy_x_2+	happy_x_1+	 =  case happyOut70 happy_x_2 of { happy_var_2 -> +	happyIn69+		 (AST.Import { import_items = happy_var_2 }+	)}++happyReduce_131 = happySpecReduce_1  64# happyReduction_131+happyReduction_131 happy_x_1+	 =  case happyOut71 happy_x_1 of { happy_var_1 -> +	happyIn70+		 (reverse happy_var_1+	)}++happyReduce_132 = happySpecReduce_1  65# happyReduction_132+happyReduction_132 happy_x_1+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> +	happyIn71+		 ([happy_var_1]+	)}++happyReduce_133 = happySpecReduce_3  65# happyReduction_133+happyReduction_133 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut71 happy_x_1 of { happy_var_1 -> +	case happyOut72 happy_x_3 of { happy_var_3 -> +	happyIn71+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_134 = happySpecReduce_2  66# happyReduction_134+happyReduction_134 happy_x_2+	happy_x_1+	 =  case happyOut73 happy_x_1 of { happy_var_1 -> +	case happyOut99 happy_x_2 of { happy_var_2 -> +	happyIn72+		 (ImportItem { import_item_name = happy_var_1, import_as_name = happy_var_2 }+	)}}++happyReduce_135 = happySpecReduce_2  67# happyReduction_135+happyReduction_135 happy_x_2+	happy_x_1+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> +	case happyOut74 happy_x_2 of { happy_var_2 -> +	happyIn73+		 (happy_var_1 : reverse happy_var_2+	)}}++happyReduce_136 = happySpecReduce_0  68# happyReduction_136+happyReduction_136  =  happyIn74+		 ([]+	)++happyReduce_137 = happySpecReduce_3  68# happyReduction_137+happyReduction_137 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut74 happy_x_1 of { happy_var_1 -> +	case happyOut39 happy_x_3 of { happy_var_3 -> +	happyIn74+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_138 = happySpecReduce_2  69# happyReduction_138+happyReduction_138 happy_x_2+	happy_x_1+	 =  case happyOut76 happy_x_2 of { happy_var_2 -> +	happyIn75+		 (AST.Global { global_vars = happy_var_2 }+	)}++happyReduce_139 = happySpecReduce_1  70# happyReduction_139+happyReduction_139 happy_x_1+	 =  case happyOut77 happy_x_1 of { happy_var_1 -> +	happyIn76+		 (reverse happy_var_1+	)}++happyReduce_140 = happySpecReduce_1  71# happyReduction_140+happyReduction_140 happy_x_1+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> +	happyIn77+		 ([happy_var_1]+	)}++happyReduce_141 = happySpecReduce_3  71# happyReduction_141+happyReduction_141 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut77 happy_x_1 of { happy_var_1 -> +	case happyOut39 happy_x_3 of { happy_var_3 -> +	happyIn77+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_142 = happySpecReduce_2  72# happyReduction_142+happyReduction_142 happy_x_2+	happy_x_1+	 =  case happyOut76 happy_x_2 of { happy_var_2 -> +	happyIn78+		 (AST.NonLocal { nonLocal_vars = happy_var_2 }+	)}++happyReduce_143 = happySpecReduce_2  73# happyReduction_143+happyReduction_143 happy_x_2+	happy_x_1+	 =  case happyOut157 happy_x_2 of { happy_var_2 -> +	happyIn79+		 (AST.Assert { assert_exprs = reverse happy_var_2 }+	)}++happyReduce_144 = happySpecReduce_1  74# happyReduction_144+happyReduction_144 happy_x_1+	 =  case happyOut81 happy_x_1 of { happy_var_1 -> +	happyIn80+		 (happy_var_1+	)}++happyReduce_145 = happySpecReduce_1  74# happyReduction_145+happyReduction_145 happy_x_1+	 =  case happyOut87 happy_x_1 of { happy_var_1 -> +	happyIn80+		 (happy_var_1+	)}++happyReduce_146 = happySpecReduce_1  74# happyReduction_146+happyReduction_146 happy_x_1+	 =  case happyOut88 happy_x_1 of { happy_var_1 -> +	happyIn80+		 (happy_var_1+	)}++happyReduce_147 = happySpecReduce_1  74# happyReduction_147+happyReduction_147 happy_x_1+	 =  case happyOut89 happy_x_1 of { happy_var_1 -> +	happyIn80+		 (happy_var_1+	)}++happyReduce_148 = happySpecReduce_1  74# happyReduction_148+happyReduction_148 happy_x_1+	 =  case happyOut95 happy_x_1 of { happy_var_1 -> +	happyIn80+		 (happy_var_1+	)}++happyReduce_149 = happySpecReduce_1  74# happyReduction_149+happyReduction_149 happy_x_1+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> +	happyIn80+		 (happy_var_1+	)}++happyReduce_150 = happySpecReduce_1  74# happyReduction_150+happyReduction_150 happy_x_1+	 =  case happyOut163 happy_x_1 of { happy_var_1 -> +	happyIn80+		 (happy_var_1+	)}++happyReduce_151 = happySpecReduce_1  74# happyReduction_151+happyReduction_151 happy_x_1+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> +	happyIn80+		 (happy_var_1+	)}++happyReduce_152 = happySpecReduce_2  75# happyReduction_152+happyReduction_152 happy_x_2+	happy_x_1+	 =  case happyOut82 happy_x_1 of { happy_var_1 -> +	case happyOut86 happy_x_2 of { happy_var_2 -> +	happyIn81+		 (Conditional { cond_guards = happy_var_1, cond_else = happy_var_2 }+	)}}++happyReduce_153 = happySpecReduce_2  76# happyReduction_153+happyReduction_153 happy_x_2+	happy_x_1+	 =  case happyOut83 happy_x_1 of { happy_var_1 -> +	case happyOut84 happy_x_2 of { happy_var_2 -> +	happyIn82+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_154 = happyReduce 4# 77# happyReduction_154+happyReduction_154 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut103 happy_x_2 of { happy_var_2 -> +	case happyOut100 happy_x_4 of { happy_var_4 -> +	happyIn83+		 ((happy_var_2, happy_var_4)+	) `HappyStk` happyRest}}++happyReduce_155 = happySpecReduce_1  78# happyReduction_155+happyReduction_155 happy_x_1+	 =  case happyOut85 happy_x_1 of { happy_var_1 -> +	happyIn84+		 (reverse happy_var_1+	)}++happyReduce_156 = happySpecReduce_0  79# happyReduction_156+happyReduction_156  =  happyIn85+		 ([]+	)++happyReduce_157 = happyReduce 5# 79# happyReduction_157+happyReduction_157 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut85 happy_x_1 of { happy_var_1 -> +	case happyOut103 happy_x_3 of { happy_var_3 -> +	case happyOut100 happy_x_5 of { happy_var_5 -> +	happyIn85+		 ((happy_var_3, happy_var_5) : happy_var_1+	) `HappyStk` happyRest}}}++happyReduce_158 = happySpecReduce_0  80# happyReduction_158+happyReduction_158  =  happyIn86+		 ([]+	)++happyReduce_159 = happySpecReduce_3  80# happyReduction_159+happyReduction_159 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut100 happy_x_3 of { happy_var_3 -> +	happyIn86+		 (happy_var_3+	)}++happyReduce_160 = happyReduce 5# 81# happyReduction_160+happyReduction_160 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut103 happy_x_2 of { happy_var_2 -> +	case happyOut100 happy_x_4 of { happy_var_4 -> +	case happyOut86 happy_x_5 of { happy_var_5 -> +	happyIn87+		 (AST.While { while_cond = happy_var_2 , while_body = happy_var_4, while_else = happy_var_5 }+	) `HappyStk` happyRest}}}++happyReduce_161 = happyReduce 7# 82# happyReduction_161+happyReduction_161 (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 happyOut153 happy_x_2 of { happy_var_2 -> +	case happyOut156 happy_x_4 of { happy_var_4 -> +	case happyOut100 happy_x_6 of { happy_var_6 -> +	case happyOut86 happy_x_7 of { happy_var_7 -> +	happyIn88+		 (AST.For { for_targets = happy_var_2, for_generator = happy_var_4, for_body = happy_var_6, for_else = happy_var_7 }+	) `HappyStk` happyRest}}}}++happyReduce_162 = happyReduce 4# 83# happyReduction_162+happyReduction_162 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut100 happy_x_3 of { happy_var_3 -> +	case happyOut90 happy_x_4 of { happy_var_4 -> +	happyIn89+		 (makeTry happy_var_3 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_163 = happySpecReduce_3  84# happyReduction_163+happyReduction_163 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut92 happy_x_1 of { happy_var_1 -> +	case happyOut86 happy_x_2 of { happy_var_2 -> +	case happyOut91 happy_x_3 of { happy_var_3 -> +	happyIn90+		 ((happy_var_1, happy_var_2, happy_var_3)+	)}}}++happyReduce_164 = happySpecReduce_3  84# happyReduction_164+happyReduction_164 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut100 happy_x_3 of { happy_var_3 -> +	happyIn90+		 (([], [], happy_var_3)+	)}++happyReduce_165 = happySpecReduce_0  85# happyReduction_165+happyReduction_165  =  happyIn91+		 ([]+	)++happyReduce_166 = happySpecReduce_3  85# happyReduction_166+happyReduction_166 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut100 happy_x_3 of { happy_var_3 -> +	happyIn91+		 (happy_var_3+	)}++happyReduce_167 = happySpecReduce_1  86# happyReduction_167+happyReduction_167 happy_x_1+	 =  case happyOut93 happy_x_1 of { happy_var_1 -> +	happyIn92+		 (reverse happy_var_1+	)}++happyReduce_168 = happySpecReduce_1  87# happyReduction_168+happyReduction_168 happy_x_1+	 =  case happyOut94 happy_x_1 of { happy_var_1 -> +	happyIn93+		 ([happy_var_1]+	)}++happyReduce_169 = happySpecReduce_2  87# happyReduction_169+happyReduction_169 happy_x_2+	happy_x_1+	 =  case happyOut93 happy_x_1 of { happy_var_1 -> +	case happyOut94 happy_x_2 of { happy_var_2 -> +	happyIn93+		 (happy_var_2 : happy_var_1+	)}}++happyReduce_170 = happySpecReduce_3  88# happyReduction_170+happyReduction_170 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut97 happy_x_1 of { happy_var_1 -> +	case happyOut100 happy_x_3 of { happy_var_3 -> +	happyIn94+		 ((happy_var_1, happy_var_3)+	)}}++happyReduce_171 = happyReduce 5# 89# happyReduction_171+happyReduction_171 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut103 happy_x_2 of { happy_var_2 -> +	case happyOut96 happy_x_3 of { happy_var_3 -> +	case happyOut100 happy_x_5 of { happy_var_5 -> +	happyIn95+		 (AST.With { with_context = happy_var_2, with_as = happy_var_3, with_body = happy_var_5 }+	) `HappyStk` happyRest}}}++happyReduce_172 = happySpecReduce_0  90# happyReduction_172+happyReduction_172  =  happyIn96+		 (Nothing+	)++happyReduce_173 = happySpecReduce_2  90# happyReduction_173+happyReduction_173 happy_x_2+	happy_x_1+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> +	happyIn96+		 (Just happy_var_2+	)}++happyReduce_174 = happySpecReduce_2  91# happyReduction_174+happyReduction_174 happy_x_2+	happy_x_1+	 =  case happyOut98 happy_x_2 of { happy_var_2 -> +	happyIn97+		 (happy_var_2+	)}++happyReduce_175 = happySpecReduce_0  92# happyReduction_175+happyReduction_175  =  happyIn98+		 (Nothing+	)++happyReduce_176 = happySpecReduce_2  92# happyReduction_176+happyReduction_176 happy_x_2+	happy_x_1+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> +	case happyOut99 happy_x_2 of { happy_var_2 -> +	happyIn98+		 (Just (happy_var_1, happy_var_2)+	)}}++happyReduce_177 = happySpecReduce_0  93# happyReduction_177+happyReduction_177  =  happyIn99+		 (Nothing+	)++happyReduce_178 = happySpecReduce_2  93# happyReduction_178+happyReduction_178 happy_x_2+	happy_x_1+	 =  case happyOut39 happy_x_2 of { happy_var_2 -> +	happyIn99+		 (Just happy_var_2+	)}++happyReduce_179 = happySpecReduce_1  94# happyReduction_179+happyReduction_179 happy_x_1+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> +	happyIn100+		 (happy_var_1+	)}++happyReduce_180 = happySpecReduce_3  94# happyReduction_180+happyReduction_180 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut101 happy_x_2 of { happy_var_2 -> +	happyIn100+		 (happy_var_2+	)}++happyReduce_181 = happySpecReduce_1  95# happyReduction_181+happyReduction_181 happy_x_1+	 =  case happyOut102 happy_x_1 of { happy_var_1 -> +	happyIn101+		 (reverse (concat happy_var_1)+	)}++happyReduce_182 = happySpecReduce_1  96# happyReduction_182+happyReduction_182 happy_x_1+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> +	happyIn102+		 ([happy_var_1]+	)}++happyReduce_183 = happySpecReduce_2  96# happyReduction_183+happyReduction_183 happy_x_2+	happy_x_1+	 =  case happyOut102 happy_x_1 of { happy_var_1 -> +	case happyOut40 happy_x_2 of { happy_var_2 -> +	happyIn102+		 (happy_var_2 : happy_var_1+	)}}++happyReduce_184 = happySpecReduce_2  97# happyReduction_184+happyReduction_184 happy_x_2+	happy_x_1+	 =  case happyOut108 happy_x_1 of { happy_var_1 -> +	case happyOut104 happy_x_2 of { happy_var_2 -> +	happyIn103+		 (makeConditionalExpr happy_var_1 happy_var_2+	)}}++happyReduce_185 = happySpecReduce_1  97# happyReduction_185+happyReduction_185 happy_x_1+	 =  case happyOut106 happy_x_1 of { happy_var_1 -> +	happyIn103+		 (happy_var_1+	)}++happyReduce_186 = happySpecReduce_0  98# happyReduction_186+happyReduction_186  =  happyIn104+		 (Nothing+	)++happyReduce_187 = happyReduce 4# 98# happyReduction_187+happyReduction_187 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut108 happy_x_2 of { happy_var_2 -> +	case happyOut103 happy_x_4 of { happy_var_4 -> +	happyIn104+		 (Just (happy_var_2, happy_var_4)+	) `HappyStk` happyRest}}++happyReduce_188 = happySpecReduce_1  99# happyReduction_188+happyReduction_188 happy_x_1+	 =  case happyOut108 happy_x_1 of { happy_var_1 -> +	happyIn105+		 (happy_var_1+	)}++happyReduce_189 = happySpecReduce_1  99# happyReduction_189+happyReduction_189 happy_x_1+	 =  case happyOut107 happy_x_1 of { happy_var_1 -> +	happyIn105+		 (happy_var_1+	)}++happyReduce_190 = happyReduce 4# 100# happyReduction_190+happyReduction_190 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut31 happy_x_2 of { happy_var_2 -> +	case happyOut103 happy_x_4 of { happy_var_4 -> +	happyIn106+		 (AST.Lambda happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_191 = happyReduce 4# 101# happyReduction_191+happyReduction_191 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut31 happy_x_2 of { happy_var_2 -> +	case happyOut105 happy_x_4 of { happy_var_4 -> +	happyIn107+		 (AST.Lambda happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_192 = happySpecReduce_2  102# happyReduction_192+happyReduction_192 happy_x_2+	happy_x_1+	 =  case happyOut110 happy_x_1 of { happy_var_1 -> +	case happyOut109 happy_x_2 of { happy_var_2 -> +	happyIn108+		 (makeBinOp happy_var_1 happy_var_2+	)}}++happyReduce_193 = happySpecReduce_0  103# happyReduction_193+happyReduction_193  =  happyIn109+		 ([]+	)++happyReduce_194 = happySpecReduce_3  103# happyReduction_194+happyReduction_194 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut109 happy_x_1 of { happy_var_1 -> +	case happyOut110 happy_x_3 of { happy_var_3 -> +	happyIn109+		 ((AST.Or, happy_var_3) : happy_var_1+	)}}++happyReduce_195 = happySpecReduce_2  104# happyReduction_195+happyReduction_195 happy_x_2+	happy_x_1+	 =  case happyOut112 happy_x_1 of { happy_var_1 -> +	case happyOut111 happy_x_2 of { happy_var_2 -> +	happyIn110+		 (makeBinOp happy_var_1 happy_var_2+	)}}++happyReduce_196 = happySpecReduce_0  105# happyReduction_196+happyReduction_196  =  happyIn111+		 ([]+	)++happyReduce_197 = happySpecReduce_3  105# happyReduction_197+happyReduction_197 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut111 happy_x_1 of { happy_var_1 -> +	case happyOut112 happy_x_3 of { happy_var_3 -> +	happyIn111+		 ((AST.And, happy_var_3) : happy_var_1+	)}}++happyReduce_198 = happySpecReduce_2  106# happyReduction_198+happyReduction_198 happy_x_2+	happy_x_1+	 =  case happyOut112 happy_x_2 of { happy_var_2 -> +	happyIn112+		 (UnaryOp {operator = AST.Not, op_arg = happy_var_2}+	)}++happyReduce_199 = happySpecReduce_1  106# happyReduction_199+happyReduction_199 happy_x_1+	 =  case happyOut113 happy_x_1 of { happy_var_1 -> +	happyIn112+		 (happy_var_1+	)}++happyReduce_200 = happySpecReduce_2  107# happyReduction_200+happyReduction_200 happy_x_2+	happy_x_1+	 =  case happyOut118 happy_x_1 of { happy_var_1 -> +	case happyOut114 happy_x_2 of { happy_var_2 -> +	happyIn113+		 (makeBinOp happy_var_1 happy_var_2+	)}}++happyReduce_201 = happySpecReduce_0  108# happyReduction_201+happyReduction_201  =  happyIn114+		 ([]+	)++happyReduce_202 = happySpecReduce_3  108# happyReduction_202+happyReduction_202 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut114 happy_x_1 of { happy_var_1 -> +	case happyOut115 happy_x_2 of { happy_var_2 -> +	case happyOut118 happy_x_3 of { happy_var_3 -> +	happyIn114+		 ((happy_var_2, happy_var_3) : happy_var_1+	)}}}++happyReduce_203 = happySpecReduce_1  109# happyReduction_203+happyReduction_203 happy_x_1+	 =  happyIn115+		 (AST.LessThan+	)++happyReduce_204 = happySpecReduce_1  109# happyReduction_204+happyReduction_204 happy_x_1+	 =  happyIn115+		 (AST.GreaterThan+	)++happyReduce_205 = happySpecReduce_1  109# happyReduction_205+happyReduction_205 happy_x_1+	 =  happyIn115+		 (AST.Equality+	)++happyReduce_206 = happySpecReduce_1  109# happyReduction_206+happyReduction_206 happy_x_1+	 =  happyIn115+		 (AST.GreaterThanEquals+	)++happyReduce_207 = happySpecReduce_1  109# happyReduction_207+happyReduction_207 happy_x_1+	 =  happyIn115+		 (AST.LessThanEquals+	)++happyReduce_208 = happySpecReduce_1  109# happyReduction_208+happyReduction_208 happy_x_1+	 =  happyIn115+		 (AST.NotEquals+	)++happyReduce_209 = happySpecReduce_1  109# happyReduction_209+happyReduction_209 happy_x_1+	 =  happyIn115+		 (AST.In+	)++happyReduce_210 = happySpecReduce_2  109# happyReduction_210+happyReduction_210 happy_x_2+	happy_x_1+	 =  happyIn115+		 (AST.NotIn+	)++happyReduce_211 = happySpecReduce_1  109# happyReduction_211+happyReduction_211 happy_x_1+	 =  case happyOut116 happy_x_1 of { happy_var_1 -> +	happyIn115+		 (happy_var_1+	)}++happyReduce_212 = happySpecReduce_2  110# happyReduction_212+happyReduction_212 happy_x_2+	happy_x_1+	 =  case happyOut117 happy_x_2 of { happy_var_2 -> +	happyIn116+		 (happy_var_2+	)}++happyReduce_213 = happySpecReduce_0  111# happyReduction_213+happyReduction_213  =  happyIn117+		 (AST.Is+	)++happyReduce_214 = happySpecReduce_1  111# happyReduction_214+happyReduction_214 happy_x_1+	 =  happyIn117+		 (AST.IsNot+	)++happyReduce_215 = happySpecReduce_1  112# happyReduction_215+happyReduction_215 happy_x_1+	 =  case happyOut119 happy_x_1 of { happy_var_1 -> +	happyIn118+		 (happy_var_1+	)}++happyReduce_216 = happySpecReduce_2  113# happyReduction_216+happyReduction_216 happy_x_2+	happy_x_1+	 =  case happyOut121 happy_x_1 of { happy_var_1 -> +	case happyOut120 happy_x_2 of { happy_var_2 -> +	happyIn119+		 (makeBinOp happy_var_1 happy_var_2+	)}}++happyReduce_217 = happySpecReduce_0  114# happyReduction_217+happyReduction_217  =  happyIn120+		 ([]+	)++happyReduce_218 = happySpecReduce_3  114# happyReduction_218+happyReduction_218 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut120 happy_x_1 of { happy_var_1 -> +	case happyOut121 happy_x_3 of { happy_var_3 -> +	happyIn120+		 ((AST.BinaryOr, happy_var_3) : happy_var_1+	)}}++happyReduce_219 = happySpecReduce_2  115# happyReduction_219+happyReduction_219 happy_x_2+	happy_x_1+	 =  case happyOut123 happy_x_1 of { happy_var_1 -> +	case happyOut122 happy_x_2 of { happy_var_2 -> +	happyIn121+		 (makeBinOp happy_var_1 happy_var_2+	)}}++happyReduce_220 = happySpecReduce_0  116# happyReduction_220+happyReduction_220  =  happyIn122+		 ([]+	)++happyReduce_221 = happySpecReduce_3  116# happyReduction_221+happyReduction_221 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut122 happy_x_1 of { happy_var_1 -> +	case happyOut123 happy_x_3 of { happy_var_3 -> +	happyIn122+		 ((AST.Xor, happy_var_3) : happy_var_1+	)}}++happyReduce_222 = happySpecReduce_2  117# happyReduction_222+happyReduction_222 happy_x_2+	happy_x_1+	 =  case happyOut125 happy_x_1 of { happy_var_1 -> +	case happyOut124 happy_x_2 of { happy_var_2 -> +	happyIn123+		 (makeBinOp happy_var_1 happy_var_2+	)}}++happyReduce_223 = happySpecReduce_0  118# happyReduction_223+happyReduction_223  =  happyIn124+		 ([]+	)++happyReduce_224 = happySpecReduce_3  118# happyReduction_224+happyReduction_224 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut124 happy_x_1 of { happy_var_1 -> +	case happyOut125 happy_x_3 of { happy_var_3 -> +	happyIn124+		 ((AST.BinaryAnd, happy_var_3) : happy_var_1+	)}}++happyReduce_225 = happySpecReduce_2  119# happyReduction_225+happyReduction_225 happy_x_2+	happy_x_1+	 =  case happyOut128 happy_x_1 of { happy_var_1 -> +	case happyOut126 happy_x_2 of { happy_var_2 -> +	happyIn125+		 (makeBinOp happy_var_1 happy_var_2+	)}}++happyReduce_226 = happySpecReduce_0  120# happyReduction_226+happyReduction_226  =  happyIn126+		 ([]+	)++happyReduce_227 = happySpecReduce_3  120# happyReduction_227+happyReduction_227 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut126 happy_x_1 of { happy_var_1 -> +	case happyOut127 happy_x_2 of { happy_var_2 -> +	case happyOut128 happy_x_3 of { happy_var_3 -> +	happyIn126+		 ((happy_var_2, happy_var_3) : happy_var_1+	)}}}++happyReduce_228 = happySpecReduce_1  121# happyReduction_228+happyReduction_228 happy_x_1+	 =  happyIn127+		 (AST.ShiftLeft+	)++happyReduce_229 = happySpecReduce_1  121# happyReduction_229+happyReduction_229 happy_x_1+	 =  happyIn127+		 (AST.ShiftRight+	)++happyReduce_230 = happySpecReduce_2  122# happyReduction_230+happyReduction_230 happy_x_2+	happy_x_1+	 =  case happyOut131 happy_x_1 of { happy_var_1 -> +	case happyOut129 happy_x_2 of { happy_var_2 -> +	happyIn128+		 (makeBinOp happy_var_1 happy_var_2+	)}}++happyReduce_231 = happySpecReduce_0  123# happyReduction_231+happyReduction_231  =  happyIn129+		 ([]+	)++happyReduce_232 = happySpecReduce_3  123# happyReduction_232+happyReduction_232 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut129 happy_x_1 of { happy_var_1 -> +	case happyOut130 happy_x_2 of { happy_var_2 -> +	case happyOut131 happy_x_3 of { happy_var_3 -> +	happyIn129+		 ((happy_var_2, happy_var_3) : happy_var_1+	)}}}++happyReduce_233 = happySpecReduce_1  124# happyReduction_233+happyReduction_233 happy_x_1+	 =  happyIn130+		 (AST.Plus+	)++happyReduce_234 = happySpecReduce_1  124# happyReduction_234+happyReduction_234 happy_x_1+	 =  happyIn130+		 (AST.Minus+	)++happyReduce_235 = happySpecReduce_2  125# happyReduction_235+happyReduction_235 happy_x_2+	happy_x_1+	 =  case happyOut134 happy_x_1 of { happy_var_1 -> +	case happyOut132 happy_x_2 of { happy_var_2 -> +	happyIn131+		 (makeBinOp happy_var_1 happy_var_2+	)}}++happyReduce_236 = happySpecReduce_0  126# happyReduction_236+happyReduction_236  =  happyIn132+		 ([]+	)++happyReduce_237 = happySpecReduce_3  126# happyReduction_237+happyReduction_237 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut132 happy_x_1 of { happy_var_1 -> +	case happyOut133 happy_x_2 of { happy_var_2 -> +	case happyOut134 happy_x_3 of { happy_var_3 -> +	happyIn132+		 ((happy_var_2, happy_var_3) : happy_var_1+	)}}}++happyReduce_238 = happySpecReduce_1  127# happyReduction_238+happyReduction_238 happy_x_1+	 =  happyIn133+		 (AST.Multiply+	)++happyReduce_239 = happySpecReduce_1  127# happyReduction_239+happyReduction_239 happy_x_1+	 =  happyIn133+		 (AST.Divide+	)++happyReduce_240 = happySpecReduce_1  127# happyReduction_240+happyReduction_240 happy_x_1+	 =  happyIn133+		 (AST.Modulo+	)++happyReduce_241 = happySpecReduce_1  127# happyReduction_241+happyReduction_241 happy_x_1+	 =  happyIn133+		 (AST.FloorDivide+	)++happyReduce_242 = happySpecReduce_2  128# happyReduction_242+happyReduction_242 happy_x_2+	happy_x_1+	 =  case happyOut134 happy_x_2 of { happy_var_2 -> +	happyIn134+		 (UnaryOp { operator = AST.Plus, op_arg = happy_var_2 }+	)}++happyReduce_243 = happySpecReduce_2  128# happyReduction_243+happyReduction_243 happy_x_2+	happy_x_1+	 =  case happyOut134 happy_x_2 of { happy_var_2 -> +	happyIn134+		 (UnaryOp { operator = AST.Minus, op_arg = happy_var_2 }+	)}++happyReduce_244 = happySpecReduce_2  128# happyReduction_244+happyReduction_244 happy_x_2+	happy_x_1+	 =  case happyOut134 happy_x_2 of { happy_var_2 -> +	happyIn134+		 (UnaryOp { operator = AST.Invert, op_arg = happy_var_2 }+	)}++happyReduce_245 = happySpecReduce_1  128# happyReduction_245+happyReduction_245 happy_x_1+	 =  case happyOut135 happy_x_1 of { happy_var_1 -> +	happyIn134+		 (happy_var_1+	)}++happyReduce_246 = happySpecReduce_2  129# happyReduction_246+happyReduction_246 happy_x_2+	happy_x_1+	 =  case happyOut138 happy_x_1 of { happy_var_1 -> +	case happyOut136 happy_x_2 of { happy_var_2 -> +	happyIn135+		 (addTrailer happy_var_1 happy_var_2+	)}}++happyReduce_247 = happyReduce 4# 129# happyReduction_247+happyReduction_247 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut138 happy_x_1 of { happy_var_1 -> +	case happyOut136 happy_x_2 of { happy_var_2 -> +	case happyOut134 happy_x_4 of { happy_var_4 -> +	happyIn135+		 (makeBinOp (addTrailer happy_var_1 happy_var_2) [(AST.Exponent, happy_var_4)]+	) `HappyStk` happyRest}}}++happyReduce_248 = happySpecReduce_1  130# happyReduction_248+happyReduction_248 happy_x_1+	 =  case happyOut137 happy_x_1 of { happy_var_1 -> +	happyIn136+		 (reverse happy_var_1+	)}++happyReduce_249 = happySpecReduce_0  131# happyReduction_249+happyReduction_249  =  happyIn137+		 ([]+	)++happyReduce_250 = happySpecReduce_2  131# happyReduction_250+happyReduction_250 happy_x_2+	happy_x_1+	 =  case happyOut137 happy_x_1 of { happy_var_1 -> +	case happyOut146 happy_x_2 of { happy_var_2 -> +	happyIn137+		 (happy_var_2 : happy_var_1+	)}}++happyReduce_251 = happySpecReduce_1  132# happyReduction_251+happyReduction_251 happy_x_1+	 =  case happyOut139 happy_x_1 of { happy_var_1 -> +	happyIn138+		 (happy_var_1+	)}++happyReduce_252 = happySpecReduce_1  132# happyReduction_252+happyReduction_252 happy_x_1+	 =  case happyOut140 happy_x_1 of { happy_var_1 -> +	happyIn138+		 (happy_var_1+	)}++happyReduce_253 = happySpecReduce_1  132# happyReduction_253+happyReduction_253 happy_x_1+	 =  case happyOut141 happy_x_1 of { happy_var_1 -> +	happyIn138+		 (happy_var_1+	)}++happyReduce_254 = happySpecReduce_1  132# happyReduction_254+happyReduction_254 happy_x_1+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> +	happyIn138+		 (AST.Var happy_var_1+	)}++happyReduce_255 = happySpecReduce_1  132# happyReduction_255+happyReduction_255 happy_x_1+	 =  case happyOutTok happy_x_1 of { (Token.Integer _ happy_var_1) -> +	happyIn138+		 (AST.Int happy_var_1+	)}++happyReduce_256 = happySpecReduce_1  132# happyReduction_256+happyReduction_256 happy_x_1+	 =  case happyOutTok happy_x_1 of { (Token.Float _ happy_var_1) -> +	happyIn138+		 (AST.Float happy_var_1+	)}++happyReduce_257 = happySpecReduce_1  132# happyReduction_257+happyReduction_257 happy_x_1+	 =  case happyOutTok happy_x_1 of { (Token.Imaginary _ happy_var_1) -> +	happyIn138+		 (AST.Imaginary { imaginary_value = happy_var_1 }+	)}++happyReduce_258 = happySpecReduce_1  132# happyReduction_258+happyReduction_258 happy_x_1+	 =  case happyOut143 happy_x_1 of { happy_var_1 -> +	happyIn138+		 (AST.Strings (reverse happy_var_1)+	)}++happyReduce_259 = happySpecReduce_1  132# happyReduction_259+happyReduction_259 happy_x_1+	 =  case happyOut144 happy_x_1 of { happy_var_1 -> +	happyIn138+		 (AST.ByteStrings (reverse happy_var_1)+	)}++happyReduce_260 = happySpecReduce_1  132# happyReduction_260+happyReduction_260 happy_x_1+	 =  happyIn138+		 (AST.Ellipsis+	)++happyReduce_261 = happySpecReduce_1  132# happyReduction_261+happyReduction_261 happy_x_1+	 =  happyIn138+		 (AST.None+	)++happyReduce_262 = happySpecReduce_1  132# happyReduction_262+happyReduction_262 happy_x_1+	 =  happyIn138+		 (AST.Bool Prelude.True+	)++happyReduce_263 = happySpecReduce_1  132# happyReduction_263+happyReduction_263 happy_x_1+	 =  happyIn138+		 (AST.Bool Prelude.False+	)++happyReduce_264 = happySpecReduce_3  133# happyReduction_264+happyReduction_264 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut142 happy_x_2 of { happy_var_2 -> +	happyIn139+		 (happy_var_2+	)}++happyReduce_265 = happySpecReduce_2  134# happyReduction_265+happyReduction_265 happy_x_2+	happy_x_1+	 =  happyIn140+		 (List { list_exprs = [] }+	)++happyReduce_266 = happySpecReduce_3  134# happyReduction_266+happyReduction_266 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut145 happy_x_2 of { happy_var_2 -> +	happyIn140+		 (makeListForm happy_var_2+	)}++happyReduce_267 = happySpecReduce_2  135# happyReduction_267+happyReduction_267 happy_x_2+	happy_x_1+	 =  happyIn141+		 (Dictionary { dict_mappings = [] }+	)++happyReduce_268 = happySpecReduce_3  135# happyReduction_268+happyReduction_268 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut158 happy_x_2 of { happy_var_2 -> +	happyIn141+		 (happy_var_2+	)}++happyReduce_269 = happySpecReduce_0  136# happyReduction_269+happyReduction_269  =  happyIn142+		 (Tuple { tuple_exprs = [] }+	)++happyReduce_270 = happySpecReduce_1  136# happyReduction_270+happyReduction_270 happy_x_1+	 =  case happyOut172 happy_x_1 of { happy_var_1 -> +	happyIn142+		 (happy_var_1+	)}++happyReduce_271 = happySpecReduce_1  136# happyReduction_271+happyReduction_271 happy_x_1+	 =  case happyOut145 happy_x_1 of { happy_var_1 -> +	happyIn142+		 (either id (\c -> Generator { gen_comprehension = c }) happy_var_1+	)}++happyReduce_272 = happySpecReduce_1  137# happyReduction_272+happyReduction_272 happy_x_1+	 =  case happyOutTok happy_x_1 of { (Token.String _ happy_var_1) -> +	happyIn143+		 ([happy_var_1]+	)}++happyReduce_273 = happySpecReduce_2  137# happyReduction_273+happyReduction_273 happy_x_2+	happy_x_1+	 =  case happyOut143 happy_x_1 of { happy_var_1 -> +	case happyOutTok happy_x_2 of { (Token.String _ happy_var_2) -> +	happyIn143+		 (happy_var_2 : happy_var_1+	)}}++happyReduce_274 = happySpecReduce_1  138# happyReduction_274+happyReduction_274 happy_x_1+	 =  case happyOutTok happy_x_1 of { (Token.ByteString _ happy_var_1) -> +	happyIn144+		 ([happy_var_1]+	)}++happyReduce_275 = happySpecReduce_2  138# happyReduction_275+happyReduction_275 happy_x_2+	happy_x_1+	 =  case happyOut144 happy_x_1 of { happy_var_1 -> +	case happyOutTok happy_x_2 of { (Token.ByteString _ happy_var_2) -> +	happyIn144+		 (happy_var_2 : happy_var_1+	)}}++happyReduce_276 = happySpecReduce_1  139# happyReduction_276+happyReduction_276 happy_x_1+	 =  case happyOut156 happy_x_1 of { happy_var_1 -> +	happyIn145+		 (Left happy_var_1+	)}++happyReduce_277 = happySpecReduce_2  139# happyReduction_277+happyReduction_277 happy_x_2+	happy_x_1+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> +	case happyOut169 happy_x_2 of { happy_var_2 -> +	happyIn145+		 (Right (makeComprehension happy_var_1 happy_var_2)+	)}}++happyReduce_278 = happySpecReduce_3  140# happyReduction_278+happyReduction_278 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut165 happy_x_2 of { happy_var_2 -> +	happyIn146+		 (TrailerCall happy_var_2+	)}++happyReduce_279 = happySpecReduce_3  140# happyReduction_279+happyReduction_279 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut147 happy_x_2 of { happy_var_2 -> +	happyIn146+		 (TrailerSubscript happy_var_2+	)}++happyReduce_280 = happySpecReduce_2  140# happyReduction_280+happyReduction_280 happy_x_2+	happy_x_1+	 =  case happyOut39 happy_x_2 of { happy_var_2 -> +	happyIn146+		 (TrailerDot happy_var_2+	)}++happyReduce_281 = happySpecReduce_2  141# happyReduction_281+happyReduction_281 happy_x_2+	happy_x_1+	 =  case happyOut148 happy_x_1 of { happy_var_1 -> +	happyIn147+		 (reverse happy_var_1+	)}++happyReduce_282 = happySpecReduce_1  142# happyReduction_282+happyReduction_282 happy_x_1+	 =  case happyOut149 happy_x_1 of { happy_var_1 -> +	happyIn148+		 ([happy_var_1]+	)}++happyReduce_283 = happySpecReduce_3  142# happyReduction_283+happyReduction_283 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut148 happy_x_1 of { happy_var_1 -> +	case happyOut149 happy_x_3 of { happy_var_3 -> +	happyIn148+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_284 = happySpecReduce_1  143# happyReduction_284+happyReduction_284 happy_x_1+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> +	happyIn149+		 (SubscriptExpr happy_var_1+	)}++happyReduce_285 = happyReduce 4# 143# happyReduction_285+happyReduction_285 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut150 happy_x_1 of { happy_var_1 -> +	case happyOut150 happy_x_3 of { happy_var_3 -> +	case happyOut151 happy_x_4 of { happy_var_4 -> +	happyIn149+		 (SubscriptSlice happy_var_1 happy_var_3 happy_var_4+	) `HappyStk` happyRest}}}++happyReduce_286 = happySpecReduce_0  144# happyReduction_286+happyReduction_286  =  happyIn150+		 (Nothing+	)++happyReduce_287 = happySpecReduce_1  144# happyReduction_287+happyReduction_287 happy_x_1+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> +	happyIn150+		 (Just happy_var_1+	)}++happyReduce_288 = happySpecReduce_0  145# happyReduction_288+happyReduction_288  =  happyIn151+		 (Nothing+	)++happyReduce_289 = happySpecReduce_1  145# happyReduction_289+happyReduction_289 happy_x_1+	 =  case happyOut152 happy_x_1 of { happy_var_1 -> +	happyIn151+		 (Just happy_var_1+	)}++happyReduce_290 = happySpecReduce_2  146# happyReduction_290+happyReduction_290 happy_x_2+	happy_x_1+	 =  case happyOut150 happy_x_2 of { happy_var_2 -> +	happyIn152+		 (happy_var_2+	)}++happyReduce_291 = happySpecReduce_2  147# happyReduction_291+happyReduction_291 happy_x_2+	happy_x_1+	 =  case happyOut155 happy_x_1 of { happy_var_1 -> +	happyIn153+		 (reverse happy_var_1+	)}++happyReduce_292 = happySpecReduce_0  148# happyReduction_292+happyReduction_292  =  happyIn154+		 (False+	)++happyReduce_293 = happySpecReduce_1  148# happyReduction_293+happyReduction_293 happy_x_1+	 =  happyIn154+		 (True+	)++happyReduce_294 = happySpecReduce_1  149# happyReduction_294+happyReduction_294 happy_x_1+	 =  case happyOut118 happy_x_1 of { happy_var_1 -> +	happyIn155+		 ([happy_var_1]+	)}++happyReduce_295 = happySpecReduce_3  149# happyReduction_295+happyReduction_295 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut155 happy_x_1 of { happy_var_1 -> +	case happyOut118 happy_x_3 of { happy_var_3 -> +	happyIn155+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_296 = happySpecReduce_2  150# happyReduction_296+happyReduction_296 happy_x_2+	happy_x_1+	 =  case happyOut157 happy_x_1 of { happy_var_1 -> +	case happyOut154 happy_x_2 of { happy_var_2 -> +	happyIn156+		 (makeTupleOrExpr (reverse happy_var_1) happy_var_2+	)}}++happyReduce_297 = happySpecReduce_1  151# happyReduction_297+happyReduction_297 happy_x_1+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> +	happyIn157+		 ([happy_var_1]+	)}++happyReduce_298 = happySpecReduce_3  151# happyReduction_298+happyReduction_298 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut157 happy_x_1 of { happy_var_1 -> +	case happyOut103 happy_x_3 of { happy_var_3 -> +	happyIn157+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_299 = happyReduce 4# 152# happyReduction_299+happyReduction_299 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut103 happy_x_1 of { happy_var_1 -> +	case happyOut103 happy_x_3 of { happy_var_3 -> +	case happyOut159 happy_x_4 of { happy_var_4 -> +	happyIn158+		 (makeDictionary (happy_var_1, happy_var_3) happy_var_4+	) `HappyStk` happyRest}}}++happyReduce_300 = happySpecReduce_2  152# happyReduction_300+happyReduction_300 happy_x_2+	happy_x_1+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> +	case happyOut161 happy_x_2 of { happy_var_2 -> +	happyIn158+		 (makeSet happy_var_1 happy_var_2+	)}}++happyReduce_301 = happySpecReduce_1  153# happyReduction_301+happyReduction_301 happy_x_1+	 =  case happyOut169 happy_x_1 of { happy_var_1 -> +	happyIn159+		 (Left happy_var_1+	)}++happyReduce_302 = happySpecReduce_2  153# happyReduction_302+happyReduction_302 happy_x_2+	happy_x_1+	 =  case happyOut160 happy_x_1 of { happy_var_1 -> +	happyIn159+		 (Right (reverse happy_var_1)+	)}++happyReduce_303 = happySpecReduce_0  154# happyReduction_303+happyReduction_303  =  happyIn160+		 ([]+	)++happyReduce_304 = happyReduce 5# 154# happyReduction_304+happyReduction_304 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut160 happy_x_1 of { happy_var_1 -> +	case happyOut103 happy_x_3 of { happy_var_3 -> +	case happyOut103 happy_x_5 of { happy_var_5 -> +	happyIn160+		 ((happy_var_3,happy_var_5) : happy_var_1+	) `HappyStk` happyRest}}}++happyReduce_305 = happySpecReduce_1  155# happyReduction_305+happyReduction_305 happy_x_1+	 =  case happyOut169 happy_x_1 of { happy_var_1 -> +	happyIn161+		 (Left happy_var_1+	)}++happyReduce_306 = happySpecReduce_2  155# happyReduction_306+happyReduction_306 happy_x_2+	happy_x_1+	 =  case happyOut162 happy_x_1 of { happy_var_1 -> +	happyIn161+		 (Right (reverse happy_var_1)+	)}++happyReduce_307 = happySpecReduce_0  156# happyReduction_307+happyReduction_307  =  happyIn162+		 ([]+	)++happyReduce_308 = happySpecReduce_3  156# happyReduction_308+happyReduction_308 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut162 happy_x_1 of { happy_var_1 -> +	case happyOut103 happy_x_3 of { happy_var_3 -> +	happyIn162+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_309 = happyReduce 5# 157# happyReduction_309+happyReduction_309 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut39 happy_x_2 of { happy_var_2 -> +	case happyOut164 happy_x_3 of { happy_var_3 -> +	case happyOut100 happy_x_5 of { happy_var_5 -> +	happyIn163+		 (AST.Class { class_name = happy_var_2, class_args = happy_var_3, class_body = happy_var_5 }+	) `HappyStk` happyRest}}}++happyReduce_310 = happySpecReduce_0  158# happyReduction_310+happyReduction_310  =  happyIn164+		 ([]+	)++happyReduce_311 = happySpecReduce_3  158# happyReduction_311+happyReduction_311 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut165 happy_x_2 of { happy_var_2 -> +	happyIn164+		 (happy_var_2+	)}++happyReduce_312 = happySpecReduce_0  159# happyReduction_312+happyReduction_312  =  happyIn165+		 ([]+	)++happyReduce_313 = happySpecReduce_2  159# happyReduction_313+happyReduction_313 happy_x_2+	happy_x_1+	 =  case happyOut103 happy_x_2 of { happy_var_2 -> +	happyIn165+		 ([ArgVarArgsPos { arg_expr = happy_var_2 }]+	)}++happyReduce_314 = happySpecReduce_2  159# happyReduction_314+happyReduction_314 happy_x_2+	happy_x_1+	 =  case happyOut103 happy_x_2 of { happy_var_2 -> +	happyIn165+		 ([ArgVarArgsKeyword { arg_expr = happy_var_2 }]+	)}++happyReduce_315 = happySpecReduce_1  159# happyReduction_315+happyReduction_315 happy_x_1+	 =  case happyOut167 happy_x_1 of { happy_var_1 -> +	happyIn165+		 ([happy_var_1]+	)}++happyReduce_316 = happySpecReduce_3  159# happyReduction_316+happyReduction_316 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut167 happy_x_1 of { happy_var_1 -> +	case happyOut165 happy_x_3 of { happy_var_3 -> +	happyIn165+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_317 = happyReduce 4# 159# happyReduction_317+happyReduction_317 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut103 happy_x_2 of { happy_var_2 -> +	case happyOut166 happy_x_4 of { happy_var_4 -> +	happyIn165+		 (ArgVarArgsPos { arg_expr = happy_var_2 } : happy_var_4+	) `HappyStk` happyRest}}++happyReduce_318 = happySpecReduce_1  160# happyReduction_318+happyReduction_318 happy_x_1+	 =  case happyOut167 happy_x_1 of { happy_var_1 -> +	happyIn166+		 ([happy_var_1]+	)}++happyReduce_319 = happySpecReduce_3  160# happyReduction_319+happyReduction_319 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut167 happy_x_1 of { happy_var_1 -> +	case happyOut166 happy_x_3 of { happy_var_3 -> +	happyIn166+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_320 = happySpecReduce_2  160# happyReduction_320+happyReduction_320 happy_x_2+	happy_x_1+	 =  case happyOut103 happy_x_2 of { happy_var_2 -> +	happyIn166+		 ([ArgVarArgsKeyword { arg_expr = happy_var_2 }]+	)}++happyReduce_321 = happySpecReduce_3  161# happyReduction_321+happyReduction_321 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> +	case happyOut103 happy_x_3 of { happy_var_3 -> +	happyIn167+		 (ArgKeyword { arg_keyword = happy_var_1, arg_expr = happy_var_3 }+	)}}++happyReduce_322 = happySpecReduce_1  161# happyReduction_322+happyReduction_322 happy_x_1+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> +	happyIn167+		 (ArgExpr { arg_expr = happy_var_1 }+	)}++happyReduce_323 = happySpecReduce_2  161# happyReduction_323+happyReduction_323 happy_x_2+	happy_x_1+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> +	case happyOut169 happy_x_2 of { happy_var_2 -> +	happyIn167+		 (ArgExpr { arg_expr = Generator { gen_comprehension = makeComprehension happy_var_1 happy_var_2 }}+	)}}++happyReduce_324 = happySpecReduce_1  162# happyReduction_324+happyReduction_324 happy_x_1+	 =  case happyOut169 happy_x_1 of { happy_var_1 -> +	happyIn168+		 (IterFor happy_var_1+	)}++happyReduce_325 = happySpecReduce_1  162# happyReduction_325+happyReduction_325 happy_x_1+	 =  case happyOut171 happy_x_1 of { happy_var_1 -> +	happyIn168+		 (IterIf happy_var_1+	)}++happyReduce_326 = happyReduce 5# 163# happyReduction_326+happyReduction_326 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut153 happy_x_2 of { happy_var_2 -> +	case happyOut108 happy_x_4 of { happy_var_4 -> +	case happyOut170 happy_x_5 of { happy_var_5 -> +	happyIn169+		 (CompFor { comp_for_exprs = happy_var_2, comp_in_expr = happy_var_4, comp_for_iter = happy_var_5 }+	) `HappyStk` happyRest}}}++happyReduce_327 = happySpecReduce_0  164# happyReduction_327+happyReduction_327  =  happyIn170+		 (Nothing+	)++happyReduce_328 = happySpecReduce_1  164# happyReduction_328+happyReduction_328 happy_x_1+	 =  case happyOut168 happy_x_1 of { happy_var_1 -> +	happyIn170+		 (Just happy_var_1+	)}++happyReduce_329 = happySpecReduce_3  165# happyReduction_329+happyReduction_329 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut105 happy_x_2 of { happy_var_2 -> +	case happyOut170 happy_x_3 of { happy_var_3 -> +	happyIn171+		 (CompIf { comp_if = happy_var_2, comp_if_iter = happy_var_3 }+	)}}++happyReduce_330 = happySpecReduce_2  166# happyReduction_330+happyReduction_330 happy_x_2+	happy_x_1+	 =  case happyOut173 happy_x_2 of { happy_var_2 -> +	happyIn172+		 (AST.Yield { yield_expr = happy_var_2 }+	)}++happyReduce_331 = happySpecReduce_0  167# happyReduction_331+happyReduction_331  =  happyIn173+		 (Nothing+	)++happyReduce_332 = happySpecReduce_1  167# happyReduction_332+happyReduction_332 happy_x_1+	 =  case happyOut156 happy_x_1 of { happy_var_1 -> +	happyIn173+		 (Just happy_var_1+	)}++happyNewToken action sts stk+	= lexCont(\tk -> +	let cont i = happyDoAction i tk action sts stk in+	case tk of {+	Token.EOF -> happyDoAction 89# tk action sts stk;+	Token.Import _ -> cont 1#;+	Token.Identifier _ happy_dollar_dollar -> cont 2#;+	Token.String _ happy_dollar_dollar -> cont 3#;+	Token.ByteString _ happy_dollar_dollar -> cont 4#;+	Token.Integer _ happy_dollar_dollar -> cont 5#;+	Token.Float _ happy_dollar_dollar -> cont 6#;+	Token.Imaginary _ happy_dollar_dollar -> cont 7#;+	Token.Assign _ -> cont 8#;+	Token.LeftRoundBracket _ -> cont 9#;+	Token.RightRoundBracket _ -> cont 10#;+	Token.LeftSquareBracket _ -> cont 11#;+	Token.RightSquareBracket _ -> cont 12#;+	Token.LeftBrace _ -> cont 13#;+	Token.RightBrace _ -> cont 14#;+	Token.Comma _ -> cont 15#;+	Token.SemiColon _ -> cont 16#;+	Token.Colon _ -> cont 17#;+	Token.Def _ -> cont 18#;+	Token.Class _ -> cont 19#;+	Token.While _ -> cont 20#;+	Token.For _ -> cont 21#;+	Token.If _ -> cont 22#;+	Token.With _ -> cont 23#;+	Token.As _ -> cont 24#;+	Token.True _ -> cont 25#;+	Token.False _ -> cont 26#;+	Token.None _ -> cont 27#;+	Token.Return _ -> cont 28#;+	Token.Yield _ -> cont 29#;+	Token.Indent _ -> cont 30#;+	Token.Dedent _ -> cont 31#;+	Token.Newline _ -> cont 32#;+	Token.Try _ -> cont 33#;+	Token.Except _ -> cont 34#;+	Token.Finally _ -> cont 35#;+	Token.Raise _ -> cont 36#;+	Token.Plus _ -> cont 37#;+	Token.Minus _ -> cont 38#;+	Token.Mult _ -> cont 39#;+	Token.Div _ -> cont 40#;+	Token.GreaterThan _ -> cont 41#;+	Token.LessThan _ -> cont 42#;+	Token.Equality _ -> cont 43#;+	Token.GreaterThanEquals _ -> cont 44#;+	Token.LessThanEquals _ -> cont 45#;+	Token.And _ -> cont 46#;+	Token.Or _ -> cont 47#;+	Token.Exponent _ -> cont 48#;+	Token.Pass _ -> cont 49#;+	Token.Break _ -> cont 50#;+	Token.Continue _ -> cont 51#;+	Token.Delete _ -> cont 52#;+	Token.Else _ -> cont 53#;+	Token.Elif _ -> cont 54#;+	Token.Not _ -> cont 55#;+	Token.BinaryOr _ -> cont 56#;+	Token.Xor _ -> cont 57#;+	Token.BinaryAnd _ -> cont 58#;+	Token.ShiftLeft _ -> cont 59#;+	Token.ShiftRight _ -> cont 60#;+	Token.Modulo _ -> cont 61#;+	Token.FloorDiv _ -> cont 62#;+	Token.Tilde _ -> cont 63#;+	Token.NotEquals _ -> cont 64#;+	Token.In _ -> cont 65#;+	Token.Is _ -> cont 66#;+	Token.Lambda _ -> cont 67#;+	Token.Dot _ -> cont 68#;+	Token.Ellipsis _ -> cont 69#;+	Token.PlusAssign _ -> cont 70#;+	Token.MinusAssign _ -> cont 71#;+	Token.MultAssign _ -> cont 72#;+	Token.DivAssign _ -> cont 73#;+	Token.ModAssign _ -> cont 74#;+	Token.PowAssign _ -> cont 75#;+	Token.BinAndAssign _ -> cont 76#;+	Token.BinOrAssign _ -> cont 77#;+	Token.BinXorAssign _ -> cont 78#;+	Token.LeftShiftAssign _ -> cont 79#;+	Token.RightShiftAssign _ -> cont 80#;+	Token.FloorDivAssign _ -> cont 81#;+	Token.At _ -> cont 82#;+	Token.RightArrow _ -> cont 83#;+	Token.From _ -> cont 84#;+	Token.Global _ -> cont 85#;+	Token.NonLocal _ -> cont 86#;+	Token.Assert _ -> cont 87#;+	Token.EOF -> cont 88#;+	_ -> happyError' tk+	})++happyError_ tk = happyError' tk++happyThen :: () => P a -> (a -> P b) -> P b+happyThen = (thenP)+happyReturn :: () => a -> P a+happyReturn = (returnP)+happyThen1 = happyThen+happyReturn1 :: () => a -> P a+happyReturn1 = happyReturn+happyError' :: () => Token -> P a+happyError' tk = parseError tk++parseFileInput = happySomeParser where+  happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut7 x))++parseSingleInput = happySomeParser where+  happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut6 x))++parseEval = happySomeParser where+  happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut11 x))++happySeq = happyDontSeq+++-- Put additional Haskell code in here if needed.+{-# 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 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 <# (0# :: Int#)) -> {- nothing -}++				     (happyReduceArr ! rule) i tk st+				     where rule = (I# ((negateInt# ((n +# (1# :: Int#))))))+		n		  -> {- nothing -}+++				     happyShift new_state i tk st+				     where new_state = (n -# (1# :: Int#))+   where off    = indexShortOffAddr happyActOffsets st+	 off_i  = (off +# i)+	 check  = if (off_i >=# (0# :: Int#))+			then (indexShortOffAddr happyCheck off_i ==#  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+	narrow16Int# i+#elif __GLASGOW_HASKELL__ == 500+	intToInt16# i+#else+	(i `iShiftL#` 16#) `iShiftRA#` 16#+#endif+  where+#if __GLASGOW_HASKELL__ >= 503+	i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)+#else+	i = word2Int# ((high `shiftL#` 8#) `or#` low)+#endif+	high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+	low  = int2Word# (ord# (indexCharOffAddr# arr off'))+	off' = off *# 2#++++++data HappyAddr = HappyA# 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 unsafeCoerce# x of { (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 -# (1# :: 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 +# nt)+             new_state = indexShortOffAddr happyTable off_i+++++happyDrop 0# l = l+happyDrop n (HappyCons (_) (t)) = happyDrop (n -# (1# :: Int#)) t++happyDropStk 0# l = l+happyDropStk n (x `HappyStk` xs) = happyDropStk (n -# (1#::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 +# 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 ( (unsafeCoerce# (I# (i))) `HappyStk` stk)++-- Internal happy errors:++notHappyAtAll = error "Internal Happy error\n"++-----------------------------------------------------------------------------+-- Hack to get the typechecker to accept our action functions+++happyTcHack :: 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.
+ language-python.cabal view
@@ -0,0 +1,36 @@+name:                language-python+version:             0.1.1+cabal-version:       >= 1.2+synopsis:            Parsing and pretty printing of Python code. +description:         language-python is a Haskell library for parsing and pretty printing+                     Python code. Currently it only supports Python version 3.0. +category:            Language+license:             BSD3+license-file:        LICENSE+copyright:           (c) 2008-2009 Bernard James Pope+author:              Bernard James Pope +maintainer:          bjpop@csse.unimelb.edu.au+homepage:            http://projects.haskell.org/language-python/+build-depends:       base+build-type:          Simple+stability:           experimental+extra-source-files:  src/Language/Python/Version3/Parser/Parser.y +                     src/Language/Python/Version3/Parser/Lexer.x ++Library+   hs-source-dirs:   src+   build-depends:    base, containers, pretty, bytestring, array+   build-tools:      happy, alex+   exposed-modules:+      Language.Python.Data.SrcLocation+      Language.Python.Version3.Parser+      Language.Python.Version3.Lexer+      Language.Python.Version3.Syntax.AST+      Language.Python.Version3.Syntax.Pretty+   other-modules:+      Language.Python.Version3.Parser.Parser+      Language.Python.Version3.Parser.Lexer+      Language.Python.Version3.Parser.ParserMonad+      Language.Python.Version3.Parser.ParserUtils+      Language.Python.Version3.Parser.Token+
+ src/Language/Python/Data/SrcLocation.hs view
@@ -0,0 +1,69 @@+{-# OPTIONS  #-}+-----------------------------------------------------------------------------+-- |+-- Module      : Language.Python.Data.SrcLocation +-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Maintainer  : bjpop@csse.unimelb.edu.au+-- Stability   : experimental+-- Portability : ghc+--+-- Source location information for the Python parser. +-- XXX We will probably move to source spans at some point.+-----------------------------------------------------------------------------++module Language.Python.Data.SrcLocation (+  -- * Projection of locations from values +  Location (..),+  -- * Construction +  SrcLocation (..),+  initialSrcLocation,+  -- * Modification+  incColumn, +  incLine,+  incTab +) where++-- | A location for a syntactic entity from the source code.+-- The location is specified by its filename, and starting row+-- and column. +data SrcLocation = +   Sloc { sloc_filename :: String+        , sloc_row :: !Int+        , sloc_column :: !Int +        } +   | NoLocation+   deriving (Eq, Ord, Show)++-- | Types which have a source location.+class Location a where+   -- | Project the location from a value.+   location :: a -> SrcLocation +   -- | By default a value has no location. +   location x = NoLocation++-- | Construct the initial source location for a file.+initialSrcLocation :: String -> SrcLocation+initialSrcLocation filename +    = Sloc +      { sloc_filename = filename+      , sloc_row = 1+      , sloc_column = 1+      }++-- | Increment the column of a location by one. +incColumn :: Int -> SrcLocation -> SrcLocation+incColumn n loc@(Sloc { sloc_column = col })+   = loc { sloc_column = col + n }++-- | Increment the column of a location by one tab stop.+incTab :: SrcLocation -> SrcLocation+incTab loc@(Sloc { sloc_column = col })+   = loc { sloc_column = newCol } +   where+   newCol = col + 8 - (col - 1) `mod` 8++-- | Increment the line number (row) of a location by one.+incLine :: Int -> SrcLocation -> SrcLocation+incLine n loc@(Sloc { sloc_row = row }) +   = loc { sloc_column = 1, sloc_row = row + n }
+ src/Language/Python/Version3/Lexer.hs view
@@ -0,0 +1,61 @@+{-# OPTIONS  #-}+-----------------------------------------------------------------------------+-- |+-- Module      : Language.Python.Version3.Lexer+-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Maintainer  : bjpop@csse.unimelb.edu.au+-- Stability   : experimental+-- Portability : ghc+--+-- A lexer and set of tokens for Python version 3 programs. +-- See: <http://docs.python.org/dev/3.0/reference/lexical_analysis.html>.+-----------------------------------------------------------------------------++module Language.Python.Version3.Lexer (+   -- * Lexical analysis+   lex, +   lexOneToken,+   -- * Tokens+   Token(..), +   -- * Parse errors+   ParseError(ParseError)) where++import Prelude hiding (lex)+import Language.Python.Version3.Parser.Lexer (lexToken, initStartCodeStack)+import Language.Python.Version3.Parser.Token (Token (..))+import Language.Python.Data.SrcLocation (initialSrcLocation)+import Language.Python.Version3.Parser.ParserMonad +       (State(input), P, runParser, execParser, ParseError(ParseError), initialState)++-- | Parse a string into a list of Python Tokens, or return an error. +lex :: String -- ^ The input stream (python source code). +    -> String -- ^ The name of the python source (filename or input device).+    -> Either ParseError [Token] -- ^ An error or a list of tokens.+lex input srcName =+   execParser lexer state+   where+   initLoc = initialSrcLocation srcName+   state = initialState initLoc input initStartCodeStack++-- | Try to lex the first token in an input string. Return either a parse error+-- or a pair containing the next token and the rest of the input after the token.+lexOneToken :: String -- ^ The input stream (python source code).+         -> String -- ^ The name of the python source (filename or input device).+         -> Either ParseError (Token, String) -- ^ An error or the next token and the rest of the input after the token. +lexOneToken source srcName =+   case runParser lexToken state of+      Left err -> Left err+      Right (st, tok) -> Right (tok, input st)+   where+   initLoc = initialSrcLocation srcName+   state = initialState initLoc source initStartCodeStack++lexer :: P [Token]+lexer = loop []+   where+   loop toks = do+      tok <- lexToken+      if tok == EOF+         then return (reverse toks)+         else loop (tok:toks)
+ src/Language/Python/Version3/Parser.hs view
@@ -0,0 +1,68 @@+{-# OPTIONS  #-}+-----------------------------------------------------------------------------+-- |+-- Module      : Language.Python.Version3.Parser+-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Maintainer  : bjpop@csse.unimelb.edu.au+-- Stability   : experimental+-- Portability : ghc+--+-- A parser for Python version 3 programs. Parsers are provided for +-- modules, statements, and expressions. +--+-- See: +--+-- * <http://docs.python.org/dev/3.0/reference/index.html> for an overview of the language. +--+-- * <http://docs.python.org/dev/3.0/reference/grammar.html> for the full grammar.+-- +-- * <http://docs.python.org/dev/3.0/reference/toplevel_components.html> for a description of +-- the various Python top-levels, which correspond to the parsers provided here.+-----------------------------------------------------------------------------++module Language.Python.Version3.Parser (+   -- * Parsing modules+   parseModule, +   -- * Parsing statements+   parseStmt, +   -- * Parsing expressions+   parseExpr, +   -- * Parse errors+   ParseError(ParseError)) where++import Language.Python.Version3.Parser.Parser (parseFileInput, parseSingleInput, parseEval)+import Language.Python.Version3.Syntax.AST (Module, Statement, Expr)+import Language.Python.Data.SrcLocation (initialSrcLocation)+import Language.Python.Version3.Parser.ParserMonad (execParser, ParseError(ParseError), initialState)+import Language.Python.Version3.Parser.Lexer (initStartCodeStack)++-- | Parse a whole Python source file.+parseModule :: String -- ^ The input stream (python module source code). +      -> String -- ^ The name of the python source (filename or input device). +      -> Either ParseError Module -- ^ An error or the abstract syntax tree (AST) of the python module. +parseModule input srcName = +   execParser parseFileInput state +   where+   initLoc = initialSrcLocation srcName+   state = initialState initLoc input initStartCodeStack++-- | Parse one compound statement, or a sequence of simple statements. Generally used for interactive input, such as from the command line of an interpreter.+parseStmt :: String -- ^ The input stream (python statement source code). +      -> String -- ^ The name of the python source (filename or input device). +      -> Either ParseError [Statement] -- ^ An error or maybe the abstract syntax tree (AST) of zero or more python statements. +parseStmt input srcName = +   execParser parseSingleInput state +   where+   initLoc = initialSrcLocation srcName+   state = initialState initLoc input initStartCodeStack++-- | Parse an expression. Generally used as input for the \'eval\' primitive. +parseExpr :: String -- ^ The input stream (python statement source code). +      -> String -- ^ The name of the python source (filename or input device). +      -> Either ParseError Expr -- ^ An error or maybe the abstract syntax tree (AST) of the python expression. +parseExpr input srcName = +   execParser parseEval state +   where+   initLoc = initialSrcLocation srcName+   state = initialState initLoc input initStartCodeStack
+ src/Language/Python/Version3/Parser/Lexer.x view
@@ -0,0 +1,485 @@+{+-----------------------------------------------------------------------------+-- |+-- Module      : Language.Python.Version3.Parser.Lexer +-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Maintainer  : bjpop@csse.unimelb.edu.au+-- Stability   : experimental+-- Portability : ghc+--+-- Implementation of a lexer for Python version 3 programs. Generated by+-- alex. +-----------------------------------------------------------------------------++module Language.Python.Version3.Parser.Lexer +   (initStartCodeStack, lexToken, endOfFileToken, lexCont) where++import Language.Python.Version3.Parser.Token hiding (True, False)+import qualified Language.Python.Version3.Parser.Token as Token+import Language.Python.Version3.Parser.ParserMonad hiding (location)+import Language.Python.Data.SrcLocation+import qualified Data.Map as Map+import Control.Monad (liftM)+import Data.List (foldl')+import Numeric (readHex, readOct)+import qualified Data.ByteString.Char8 as BS (pack)+}++-- character sets+$lf = \n  -- line feed+$cr = \r  -- carriage return+$eol_char = [$lf $cr] -- any end of line character+$not_eol_char = ~$eol_char -- anything but an end of line character+$white_char   = [\ \n\r\f\v\t]+$white_no_nl = $white_char # $eol_char+$ident_letter = [a-zA-Z_]+$digit    = 0-9+$non_zero_digit = 1-9+$oct_digit = 0-7+$hex_digit = [$digit a-fA-F]+$bin_digit = 0-1 +$short_str_char = [^ \n \r ' \" \\]+$long_str_char = [. \n] # [' \"]+$short_byte_str_char = \0-\127 # [\n \r ' \" \\]+$long_byte_str_char = \0-\127 # [' \"]+$not_single_quote = [. \n] # '+$not_double_quote = [. \n] # \"++-- macro definitions+@exponent = (e | E) (\+ | \-)? $digit+ +@fraction = \. $digit++@int_part = $digit++@point_float = (@int_part? @fraction) | @int_part \.+@exponent_float = (@int_part | @point_float) @exponent+@float_number = @point_float | @exponent_float+@eol_pattern = $lf | $cr $lf | $cr $lf  +@one_single_quote = ' $not_single_quote+@two_single_quotes = '' $not_single_quote+@one_double_quote = \" $not_double_quote+@two_double_quotes = \"\" $not_double_quote+@byte_str_prefix = b | B+@raw_str_prefix = r | R+@raw_byte_str_prefix = @byte_str_prefix @raw_str_prefix+@backslash_pair = \\ (\\|'|\"|@eol_pattern|$short_str_char)+@backslash_pair_bs = \\ (\\|'|\"|@eol_pattern|$short_byte_str_char)+@short_str_item_single = $short_str_char|@backslash_pair|\"+@short_str_item_double = $short_str_char|@backslash_pair|'+@short_byte_str_item_single = $short_byte_str_char|@backslash_pair_bs|\"+@short_byte_str_item_double = $short_byte_str_char|@backslash_pair_bs|'+@long_str_item_single = $long_str_char|@backslash_pair|@one_single_quote|@two_single_quotes|\"+@long_str_item_double = $long_str_char|@backslash_pair|@one_double_quote|@two_double_quotes|'+@long_byte_str_item_single = $long_byte_str_char|@backslash_pair_bs|@one_single_quote|@two_single_quotes|\"+@long_byte_str_item_double = $long_byte_str_char|@backslash_pair_bs|@one_double_quote|@two_double_quotes|'++tokens :-++-- these rules below could match inside a string literal, but they+-- will not be applied because the rule for the literal will always+-- match a longer sequence of characters. ++\# ($not_eol_char)* ;  -- skip comments +$white_no_nl+  ;  -- skip whitespace ++\\ @eol_pattern ; -- line join ++<0> {+   @float_number { token Token.Float readFloat }+   $non_zero_digit $digit* { token Token.Integer read }  +   (@float_number | @int_part) (j | J) { token Token.Imaginary (readFloat.init) }+   0+ { token Token.Integer read }  +   0 (o | O) $oct_digit+ { token Token.Integer read }+   0 (x | X) $hex_digit+ { token Token.Integer read }+   0 (b | B) $bin_digit+ { token Token.Integer readBinary }+}++-- String literals ++<0> {+   ' @short_str_item_single* ' { mkString 1 1 stringToken }+   @raw_str_prefix ' @short_str_item_single* ' { mkString 2 1 rawStringToken }+   @byte_str_prefix ' @short_byte_str_item_single* ' { mkString 2 1 byteStringToken }+   @raw_byte_str_prefix ' @short_byte_str_item_single* ' { mkString 3 1 rawByteStringToken }++   \" @short_str_item_double* \" { mkString 1 1 stringToken }+   @raw_str_prefix \" @short_str_item_double* \" { mkString 2 1 rawStringToken }+   @byte_str_prefix \" @short_byte_str_item_double* \" { mkString 2 1 byteStringToken }+   @raw_byte_str_prefix \" @short_byte_str_item_double* \" { mkString 3 1 rawByteStringToken }++   ''' @long_str_item_single* ''' { mkString 3 3 stringToken }+   @raw_str_prefix ''' @long_str_item_single* ''' { mkString 4 3 rawStringToken }+   @byte_str_prefix ''' @long_byte_str_item_single* ''' { mkString 4 3 byteStringToken }+   @raw_byte_str_prefix ''' @long_byte_str_item_single* ''' { mkString 5 3 rawByteStringToken }++   \"\"\" @long_str_item_double* \"\"\" { mkString 3 3 stringToken }+   @raw_str_prefix \"\"\" @long_str_item_double* \"\"\" { mkString 4 3 rawStringToken }+   @byte_str_prefix \"\"\" @long_byte_str_item_double* \"\"\" { mkString 4 3 byteStringToken }+   @raw_byte_str_prefix \"\"\" @long_byte_str_item_double* \"\"\" { mkString 5 3 rawByteStringToken }+}++<0> {+   @eol_pattern     { begin bol }  +}++<dedent> ()                             { dedentation }++-- beginning of line+<bol> {+   @eol_pattern                         ;+   ()                                   { indentation BOL }+}++-- beginning of file+<bof> {+   @eol_pattern                         ;+   ()                                   { indentation BOF }+}+++<0> $ident_letter($ident_letter|$digit)*  { \loc len str -> keywordOrIdent (take len str) loc }++-- operators and separators+--+<0> {+    "("   { openParen Token.LeftRoundBracket }+    ")"   { closeParen Token.RightRoundBracket }+    "["   { openParen Token.LeftSquareBracket }+    "]"   { closeParen Token.RightSquareBracket }+    "{"   { openParen Token.LeftBrace }+    "}"   { closeParen Token.RightBrace }+    "->"  { symbolToken Token.RightArrow }+    "."   { symbolToken Token.Dot }+    "..." { symbolToken Token.Ellipsis }+    "~"   { symbolToken Token.Tilde }+    "+"   { symbolToken Token.Plus }+    "-"   { symbolToken Token.Minus }+    "**"  { symbolToken Token.Exponent }+    "*"   { symbolToken Token.Mult }+    "/"   { symbolToken Token.Div }+    "//"  { symbolToken Token.FloorDiv }+    "%"   { symbolToken Token.Modulo }+    "<<"  { symbolToken Token.ShiftLeft }+    ">>"  { symbolToken Token.ShiftRight }+    "<"   { symbolToken Token.LessThan }+    "<="  { symbolToken Token.LessThanEquals }+    ">"   { symbolToken Token.GreaterThan }+    ">="  { symbolToken Token.GreaterThanEquals }+    "=="  { symbolToken Token.Equality }+    "!="  { symbolToken Token.NotEquals }+    "^"   { symbolToken Token.Xor }+    "|"   { symbolToken Token.BinaryOr }+    "&&"  { symbolToken Token.And }+    "&"   { symbolToken Token.BinaryAnd }+    "||"  { symbolToken Token.Or }+    ":"   { symbolToken Token.Colon }+    "="   { symbolToken Token.Assign }+    "+="  { symbolToken Token.PlusAssign }+    "-="  { symbolToken Token.MinusAssign }+    "*="  { symbolToken Token.MultAssign }+    "/="  { symbolToken Token.DivAssign }+    "%="  { symbolToken Token.ModAssign }+    "**=" { symbolToken Token.PowAssign }+    "&="  { symbolToken Token.BinAndAssign }+    "|="  { symbolToken Token.BinOrAssign }+    "^="  { symbolToken Token.BinXorAssign }+    "<<=" { symbolToken Token.LeftShiftAssign }+    ">>=" { symbolToken Token.RightShiftAssign }+    "//=" { symbolToken Token.FloorDivAssign } +    ","   { symbolToken Token.Comma }+    "@"   { symbolToken Token.At }+    \;    { symbolToken Token.SemiColon }+}++{+-- Functions for building tokens ++type StartCode = Int+type Action = SrcLocation -> Int -> String -> P Token ++dedentation :: Action+dedentation loc _len _str = do+   let endCol = sloc_column loc +   topIndent <- getIndent+   case compare endCol topIndent of+      EQ -> do popStartCode+               lexToken +      LT -> do popIndent+               return dedentToken +      GT -> failP loc ["indentation error"]++-- Beginning of. BOF = beginning of file, BOL = beginning of line+data BO = BOF | BOL++indentation :: BO -> Action +-- Check if we are at the EOF. If yes, we may need to generate a newline,+-- in case we came here from BOL (but not BOF).+indentation bo _loc _len [] = do+   popStartCode+   case bo of+      BOF -> lexToken+      BOL -> return newlineToken+indentation bo loc _len _str = do+   popStartCode+   parenDepth <- getParenStackDepth+   if parenDepth > 0+      then lexToken+      else do +         topIndent <- getIndent+         let endCol = sloc_column loc +         case compare endCol topIndent of+            EQ -> case bo of+                     BOF -> lexToken+                     BOL -> return newlineToken   +            LT -> do pushStartCode dedent+                     return newlineToken +            GT -> do pushIndent endCol +                     return indentToken +   where+   -- the location of the newline is not known here +   newlineToken = Newline NoLocation+   indentToken = Indent loc ++begin :: StartCode -> Action +begin code loc len inp = do+   pushStartCode code+   lexToken ++symbolToken :: (SrcLocation -> Token) -> Action +symbolToken mkToken location _ _ = return (mkToken location)++token_fail :: String -> Action +token_fail message location _ _ +   = failP location [ "Lexical Error !", message]++token :: (SrcLocation -> a -> Token) -> (String -> a) -> Action +token mkToken read location len str +   = return $ mkToken location (read $ take len str)++-- a keyword or an identifier (the syntax overlaps)+keywordOrIdent :: String -> SrcLocation -> P Token+keywordOrIdent str location+   = return $ case Map.lookup str keywords of+         Just symbol -> symbol location+         Nothing -> Identifier location str  ++-- mapping from strings to keywords+keywords :: Map.Map String (SrcLocation -> Token) +keywords = Map.fromList keywordNames ++keywordNames :: [(String, SrcLocation -> Token)]+keywordNames =+   [ ("False", Token.False), ("class", Class), ("finally", Finally), ("is", Is), ("return", Return)+   , ("None", None), ("continue", Continue), ("for", For), ("lambda", Lambda), ("try", Try)+   , ("True", Token.True), ("def", Def), ("from", From), ("nonlocal", NonLocal), ("while", While)+   , ("and", And), ("del", Delete), ("global", Global), ("not", Not), ("with", With)+   , ("as", As), ("elif", Elif), ("if", If), ("or", Or), ("yield", Yield)+   , ("assert", Assert), ("else", Else), ("import", Import), ("pass", Pass)+   , ("break", Break), ("except", Except), ("in", In), ("raise", Raise)+   ]++-- The lexer starts off in the beginning of file state (bof)+initStartCodeStack :: [Int]+initStartCodeStack = [bof,0]++-- special tokens for the end of file and end of line+endOfFileToken :: Token+endOfFileToken = EOF+newlineToken = Newline NoLocation+dedentToken = Dedent NoLocation++-- Test if we are at the end of the line or file+atEOLorEOF :: a -> AlexInput -> Int -> AlexInput -> Bool+atEOLorEOF _user _inputBeforeToken _tokenLength (_loc, inputAfterToken) +   = null inputAfterToken || nextChar == '\n' || nextChar == '\r'+   where+   nextChar = head inputAfterToken ++notEOF :: a -> AlexInput -> Int -> AlexInput -> Bool+notEOF _user _inputBeforeToken _tokenLength (_loc, inputAfterToken) +   = not (null inputAfterToken)++readBinary :: String -> Integer+readBinary +   = toBinary . drop 2 +   where+   toBinary = foldl' acc 0+   acc b '0' = 2 * b+   acc b '1' = 2 * b + 1++{-+floatnumber   ::=  pointfloat | exponentfloat+pointfloat    ::=  [intpart] fraction | intpart "."+exponentfloat ::=  (intpart | pointfloat) exponent+intpart       ::=  digit++fraction      ::=  "." digit++exponent      ::=  ("e" | "E") ["+" | "-"] digit++-}+readFloat :: String -> Double+readFloat str@('.':cs) = read ('0':readFloatRest str)+readFloat str = read (readFloatRest str)+readFloatRest :: String -> String+readFloatRest [] = []+readFloatRest ['.'] = ".0"+readFloatRest (c:cs) = c : readFloatRest cs++mkString :: Int -> Int -> (SrcLocation -> String -> Token) -> Action+mkString leftSkip rightSkip toToken loc len str = do+   let contentLen = len - (leftSkip + rightSkip)+   let contents = take contentLen $ drop leftSkip str+   -- return $ String loc $ processString contents +   return $ toToken loc contents ++stringToken :: SrcLocation -> String -> Token+stringToken loc str = String loc $ unescapeString str++rawStringToken :: SrcLocation -> String -> Token+rawStringToken loc str = String loc $ unescapeRawString str++byteStringToken :: SrcLocation -> String -> Token+byteStringToken loc str = ByteString loc $ BS.pack $ unescapeString str++rawByteStringToken :: SrcLocation -> String -> Token+rawByteStringToken loc str = ByteString loc $ BS.pack $ unescapeRawString str++openParen :: (SrcLocation -> Token) -> Action+openParen mkToken loc _len _str = do+   let token = mkToken loc+   pushParen token +   return token ++closeParen :: (SrcLocation -> Token) -> Action+closeParen mkToken loc _len _str = do+  let token = mkToken loc+  topParen <- getParen+  case topParen of+     Nothing -> failP loc err1 +     Just open -> if matchParen open token +                    then popParen >> return token+                    else failP loc err2+   where+   -- XXX fix these error messages+   err1 = ["Lexical error ! unmatched closing paren"]+   err2 = ["Lexical error ! unmatched closing paren"]++matchParen :: Token -> Token -> Bool+matchParen (LeftRoundBracket {}) (RightRoundBracket {}) = True+matchParen (LeftBrace {}) (RightBrace {}) = True+matchParen (LeftSquareBracket {}) (RightSquareBracket {}) = True+matchParen _ _ = False++unescapeString :: String -> String+unescapeString ('\\':'\\':cs) = '\\' : unescapeString cs -- Backslash (\)+unescapeString ('\\':'\'':cs) = '\'' : unescapeString cs -- Single quote (')+unescapeString ('\\':'"':cs) = '"' : unescapeString cs -- Double quote (")+unescapeString ('\\':'a':cs) = '\a' : unescapeString cs -- ASCII Bell (BEL)+unescapeString ('\\':'b':cs) = '\b' : unescapeString cs -- ASCII Backspace (BS)+unescapeString ('\\':'f':cs) = '\f' : unescapeString cs -- ASCII Formfeed (FF)+unescapeString ('\\':'n':cs) = '\n' : unescapeString cs -- ASCII Linefeed (LF)+unescapeString ('\\':'r':cs) = '\r' : unescapeString cs -- ASCII Carriage Return (CR)+unescapeString ('\\':'t':cs) = '\t' : unescapeString cs -- ASCII Horizontal Tab (TAB)+unescapeString ('\\':'v':cs) = '\v' : unescapeString cs -- ASCII Vertical Tab (VT)+unescapeString ('\\':'\n':cs) = unescapeString cs -- line continuation+unescapeString ('\\':rest@(o:_))+   | o `elem` octalDigits = unescapeNumeric 3 octalDigits (fst . head . readOct) rest +unescapeString ('\\':'x':rest@(h:_))+   | h `elem` hexDigits = unescapeNumeric 2 hexDigits (fst . head . readHex) rest +unescapeString (c:cs) = c : unescapeString cs +unescapeString [] = []++unescapeRawString :: String -> String+unescapeRawString ('\\':'\'':cs) = '\'' : unescapeRawString cs -- Single quote (')+unescapeRawString ('\\':'"':cs) = '"' : unescapeRawString cs -- Double quote (")+unescapeRawString ('\\':'\n':cs) = unescapeRawString cs -- line continuation+unescapeRawString (c:cs) = c : unescapeRawString cs+unescapeRawString [] = []++{- +   This is a bit complicated because Python allows between 1 and 3 octal+   characters after the \, and 1 and 2 hex characters after a \x.+-}+unescapeNumeric :: Int -> String -> (String -> Int) -> String -> String+unescapeNumeric n numericDigits readNumeric str+   = loop n [] str +   where+   loop _ acc [] = [numericToChar acc]+   loop 0 acc rest+      = numericToChar acc : unescapeString rest+   loop n acc (c:cs)+      | c `elem` numericDigits = loop (n-1) (c:acc) cs+      | otherwise = numericToChar acc : unescapeString (c:cs)+   numericToChar :: String -> Char+   numericToChar = toEnum . readNumeric . reverse++octalDigits, hexDigits :: String+octalDigits = "01234567"+hexDigits = "0123456789abcdef"+ ++-- -----------------------------------------------------------------------------+-- Functionality required by Alex ++type AlexInput = (SrcLocation, String)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar _ = error "alexInputPrevChar not used"++alexGetChar :: AlexInput -> Maybe (Char, AlexInput)+alexGetChar (loc, input) +   | null input  = Nothing+   | otherwise = Just (nextChar, (nextLoc, rest))+   where+   nextChar = head input+   rest = tail input +   nextLoc = moveChar nextChar loc++moveChar :: Char -> SrcLocation -> SrcLocation +moveChar '\n' = incLine 1 +moveChar '\t' = incTab +moveChar '\r' = id +moveChar _    = incColumn 1 ++lexicalError :: P a+lexicalError = do+  location <- getLocation+  c <- liftM head getInput+  failP location +        ["Lexical error !",+         "The character " ++ show c ++ " does not fit here."]++parseError :: P a+parseError = do+  token <- getLastToken+  failP (location token)+        ["Syntax error !",+         "The symbol `" ++ show token ++ "' does not fit here."]++lexToken :: P Token+lexToken = do+  location <- getLocation+  input <- getInput+  startCode <- getStartCode+  case alexScan (location, input) startCode of+    AlexEOF -> do+       depth <- getIndentStackDepth+       if depth <= 1 +          then return endOfFileToken+          else do +             popIndent+             return dedentToken+    AlexError _ -> lexicalError+    AlexSkip (nextLocation, rest) len -> do+       setLocation nextLocation +       setInput rest +       lexToken+    AlexToken (nextLocation, rest) len action -> do+       setLocation nextLocation +       setInput rest +       token <- action location len input +       setLastToken token+       return token++lexCont :: (Token -> P a) -> P a+lexCont cont = do+  tok <- lexToken+  cont tok+}
+ src/Language/Python/Version3/Parser/Parser.y view
@@ -0,0 +1,1238 @@+{+-----------------------------------------------------------------------------+-- |+-- Module      : Language.Python.Version3.Parser.Parser +-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Maintainer  : bjpop@csse.unimelb.edu.au+-- Stability   : experimental+-- Portability : ghc+--+-- Implementation of the Python version 3 parser. Generated by happy. +-----------------------------------------------------------------------------++module Language.Python.Version3.Parser.Parser (parseFileInput, parseSingleInput, parseEval) where++import Data.Char (isSpace, isAlpha, isDigit)+import Language.Python.Version3.Parser.Lexer+import Language.Python.Version3.Parser.Token hiding (True, False)+import qualified Language.Python.Version3.Parser.Token as Token+import Language.Python.Version3.Syntax.AST as AST+import Language.Python.Version3.Parser.ParserUtils+import Language.Python.Version3.Parser.ParserMonad+import Language.Python.Data.SrcLocation+import Data.List (foldl')+import qualified Data.ByteString.Char8 as BS (ByteString)+}++%name parseFileInput FileInput +%name parseSingleInput SingleInput+%name parseEval EvalInput  ++%tokentype { Token } +%error { parseError } +%monad { P } { thenP } { returnP }+%lexer { lexCont } { Token.EOF }++%token +   import          { Token.Import _ }+   ident           { Token.Identifier _ $$ }+   string          { Token.String _ $$ }+   bytestring      { Token.ByteString _ $$ }+   integer         { Token.Integer _ $$ }+   float           { Token.Float _ $$ }+   imaginary       { Token.Imaginary _ $$ }+   '='             { Token.Assign _ }+   '('             { Token.LeftRoundBracket _ }+   ')'             { Token.RightRoundBracket _ }+   '['             { Token.LeftSquareBracket _ }+   ']'             { Token.RightSquareBracket _ }+   '{'             { Token.LeftBrace _ }+   '}'             { Token.RightBrace _ }+   ','             { Token.Comma _ }+   ';'             { Token.SemiColon _ }+   ':'             { Token.Colon _ }+   def             { Token.Def _ }+   class           { Token.Class _ }+   while           { Token.While _ }+   for             { Token.For _ }+   if              { Token.If _ }+   with            { Token.With _ }+   as              { Token.As _ }+   true            { Token.True _ }+   false           { Token.False _ }+   none            { Token.None _ }+   return          { Token.Return _ }+   yield           { Token.Yield _ }+   indent          { Token.Indent _ }+   dedent          { Token.Dedent _ }+   newline         { Token.Newline _ }+   try             { Token.Try _ }+   except          { Token.Except _ }+   finally         { Token.Finally _ }+   raise           { Token.Raise _ }+   '+'             { Token.Plus _ }+   '-'             { Token.Minus _ }+   '*'             { Token.Mult _ }+   '/'             { Token.Div _ }+   '>'             { Token.GreaterThan _ }+   '<'             { Token.LessThan _ }+   '=='            { Token.Equality _ }+   '>='            { Token.GreaterThanEquals _ }+   '<='            { Token.LessThanEquals _ }+   and             { Token.And _ }+   or              { Token.Or _ }+   '**'            { Token.Exponent _ }+   pass            { Token.Pass _ }+   break           { Token.Break _ }+   continue        { Token.Continue _ }+   del             { Token.Delete _ }+   else            { Token.Else _ }+   elif            { Token.Elif _ }+   not             { Token.Not _ }+   '|'             { Token.BinaryOr _ }+   '^'             { Token.Xor _ }      +   '&'             { Token.BinaryAnd _ }      +   '>>'            { Token.ShiftLeft _ }+   '<<'            { Token.ShiftRight _ }+   '%'             { Token.Modulo _ }+   floordiv        { Token.FloorDiv _ }+   '~'             { Token.Tilde _ }+   '!='            { Token.NotEquals _ }+   in              { Token.In _ }+   is              { Token.Is _ }+   lambda          { Token.Lambda _ }+   '.'             { Token.Dot _ }+   '...'           { Token.Ellipsis _ }+   '+='            { Token.PlusAssign _ }+   '-='            { Token.MinusAssign _ }+   '*='            { Token.MultAssign _ }+   '/='            { Token.DivAssign _ }+   '%='            { Token.ModAssign _ }+   '**='           { Token.PowAssign _ }+   '&='            { Token.BinAndAssign _ }+   '|='            { Token.BinOrAssign _ }+   '^='            { Token.BinXorAssign _ }+   '<<='           { Token.LeftShiftAssign _ }+   '>>='           { Token.RightShiftAssign _ }+   '//='           { Token.FloorDivAssign _ } +   '@'             { Token.At _ }+   '->'            { Token.RightArrow _ }+   from            { Token.From _ }+   global          { Token.Global _ }+   nonlocal        { Token.NonLocal _ }+   assert          { Token.Assert _ }+   eof             { Token.EOF }++%%++{- +   Note: newline tokens in the grammar:+   It seems there are some dubious uses of NEWLINE in the grammar. +   This is corroborated by this posting:+   http://mail.python.org/pipermail/python-dev/2005-October/057014.html+   The general idea is that the lexer does not generate NEWLINE tokens for+   lines which contain only spaces or comments. However, the grammar sometimes+   suggests that such tokens may exist. +-}+++-- single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE ++{- +   Complete: but we don't support the newline at the end of a compound stmt +   because the lexer would not produce a newline there. It seems like a weirdness+   in the way the interactive input works. +-}++SingleInput :: { [Statement] }+SingleInput +   : newline { [] }+   | SimpleStmt { $1 } +   | CompoundStmt {- No newline here! -} { [$1] } ++-- file_input: (NEWLINE | stmt)* ENDMARKER++-- Complete: there is no need to mention the ENDMARKER, happy takes care of that.++FileInput :: { Module }+FileInput : ManyStmtOrNewline {- No ENDMARKER here! -} { Module $1 }++ManyStmtOrNewline :: { [Statement] }+ManyStmtOrNewline : ManyStmtOrNewlineRec { concat (reverse $1) }++ManyStmtOrNewlineRec :: { [[Statement]] }+ManyStmtOrNewlineRec +   : {- empty -} { [] } +   | ManyStmtOrNewlineRec NewLineOrStmt { $2 : $1 }++NewLineOrStmt :: { [Statement] }+NewLineOrStmt +   : newline { [] }+   | Stmt    { $1 }++-- eval_input: testlist NEWLINE* ENDMARKER++-- Complete.++EvalInput :: { Expr }+EvalInput : TestList ZeroOrMoreNewline { $1 }++ZeroOrMoreNewline :: { () }+ZeroOrMoreNewline +   : {- empty -} { () }+   | ZeroOrMoreNewline newline { () }+ +{-+  decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE+  decorators: decorator++  decorated: decorators (classdef | funcdef)+-}++-- Complete++Decorator :: { Decorator }+Decorator +   : '@' DottedName OptionalArgList newline { Decorator { decorator_name = $2, decorator_args = $3 } }++Decorators :: { [Decorator] }+Decorators : DecoratorsRev { reverse $1 }++DecoratorsRev :: { [Decorator] }+DecoratorsRev +   : Decorator { [$1] }+   | DecoratorsRev Decorator { $2 : $1 }++Decorated :: { Statement }+Decorated +   : Decorators ClassOrFunction { Decorated { decorated_decorators = $1, decorated_def = $2 } } ++ClassOrFunction :: { Statement }+ClassOrFunction +   : ClassDef { $1 }+   | FuncDef { $1 }++-- funcdef: 'def' NAME parameters ['->' test] ':' suite ++-- Complete++FuncDef :: { Statement }+FuncDef +   : def Name Parameters OptionalResultAnnotation ':' Suite+     { Fun { fun_name = $2 , fun_args = $3, fun_result_annotation = $4, fun_body = $6 } }++OptionalResultAnnotation :: { Maybe Expr }+OptionalResultAnnotation+   : {- empty -} { Nothing }+   | '->' Test { Just $2 }++-- parameters: '(' [typedargslist] ')'++Parameters :: { [Parameter] }+Parameters : '(' TypedArgsList ')' { $2 }++{- +   typedargslist: ((tfpdef ['=' test] ',')*+       ('*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef)+       | tfpdef ['=' test] (',' tfpdef ['=' test])* [',']) +-} ++-- Complete. ++{- Note the grammar allows an optional trailing comma, but only after the+   positional arguments. If varargs are used (the star forms) then the+   optional comma is not allowed. Why is this so? I don't know.++   The code below uses right recursion extensively. The Happy docs say that+   there can be problems with this:++   http://www.haskell.org/happy/doc/html/sec-sequences.html#sec-separators++   "right-recursive rules require stack space proportional to the length +   of the list being parsed. This can be extremely important where long sequences +   are involved, for instance in automatically generated output."++   At the moment it seems easier to write using right recursion, but+   we may want to re-visit the use of right recursion at some point.+-} ++TypedArgsList :: { [Parameter] }+TypedArgsList : Params { $1 }++Params :: { [Parameter] }+Params+   : {- empty -} { [] }+   | Star { [$1] }+   | StarStar { [$1] }+   | Param { [$1] }+   | Param ',' Params { $1 : $3 }+   | Star ',' StarParams { $1 : $3 }++StarParams :: { [Parameter] }+StarParams +   : Param { [$1] }+   | Param ',' StarParams { $1 : $3 }+   | StarStar { [$1] }+  +-- tfpdef: NAME [':' test]+-- Complete++TfpDef :: { (Ident, Maybe Expr) }+TfpDef : Name OptionalColonTest { ($1, $2) }++OptionalColonTest :: { Maybe Expr }+OptionalColonTest +   : {- empty -} { Nothing }+   | ':' Test { Just $2 }++OptionalDefault :: { Maybe Expr }+OptionalDefault +   : {- empty -} { Nothing }+   | '=' Test { Just $2 }++Param :: { Parameter }+Param +   : TfpDef OptionalDefault { makeParam $1 $2 }++Star :: { Parameter }+Star : '*' OptionalTfpDef { makeStarParam $2 }++OptionalTfpDef :: { Maybe (Ident, Maybe Expr) }+OptionalTfpDef +   : {- empty -} { Nothing }+   | TfpDef { Just $1 }++StarStar :: { Parameter }+StarStar : '**' TfpDef { makeStarStarParam $2 }++{- +   varargslist: ((vfpdef ['=' test] ',')* ('*' [vfpdef] (',' vfpdef ['=' test])*  [',' '**' vfpdef] | '**' vfpdef) | vfpdef ['=' test] (',' vfpdef ['=' test])* [','])  ++   vfpdef: NAME+-}++-- Complete++{- +   There is some tedious similarity in these rules to the ones for+   TypedArgsList. VarArgsList is used for lambda functions, and they+   do not have parentheses around them (unlike function definitions).+   Therefore lambda parameters cannot have the optional annotations+   that normal functions can, because the annotations are introduced+   using a colon. This would cause ambibguity with the colon+   that marks the end of the lambda parameter list!++   See the remarks about right recursion in the comments for+   TypedArgsList.+-}++VarArgsList :: { [Parameter] }+VarArgsList : VParams { $1 }++VParams :: { [Parameter] }+VParams+   : {- empty -} { [] }+   | VStar { [$1] }+   | VStarStar { [$1] }+   | VParam { [$1] }+   | VParam ',' VParams { $1 : $3 }+   | VStar ',' VStarParams { $1 : $3 }++VStarParams :: { [Parameter] }+VStarParams +   : VParam { [$1] }+   | VParam ',' VStarParams { $1 : $3 }+   | VStarStar { [$1] }++VParam :: { Parameter }+VParam : VfpDef OptionalDefault { makeParam ($1, Nothing) $2 }++VStar :: { Parameter }+VStar : '*' OptionalVfpDef { makeStarParam $2 }++OptionalVfpDef :: { Maybe (Ident, Maybe Expr) }+OptionalVfpDef +   : {- empty -} { Nothing }+   | VfpDef { Just ($1, Nothing) }++VStarStar :: { Parameter }+VStarStar : '**' VfpDef { makeStarStarParam ($2, Nothing) }++VfpDef :: { Ident }+VfpDef : ident { Ident $1 }++Name :: { Ident }+Name : ident { Ident $1 }++-- stmt: simple_stmt | compound_stmt ++-- Complete++Stmt :: { [Statement] }+Stmt +   : SimpleStmt { $1 }+   | CompoundStmt { [$1] } ++-- simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE ++-- Complete++SimpleStmt :: { [Statement] }+SimpleStmt : SmallStmts OptionalSemiColon newline { reverse $1 }++OptionalSemiColon :: { () }+OptionalSemiColon +   : {- empty -} { () }+   | ';' { () }++SmallStmts :: { [Statement] }+SmallStmts : SmallStmt              { [$1] }+           | SmallStmts ';' SmallStmt { $3 : $1 }++{-+small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt |+             import_stmt | global_stmt | nonlocal_stmt | assert_stmt)+-}++-- Complete++SmallStmt :: { Statement }+SmallStmt +   : ExprStmt              { $1 }+   | DelStmt               { $1 }+   | PassStmt              { $1 }+   | FlowStmt              { $1 }+   | ImportStmt            { $1 }+   | GlobalStmt            { $1 }+   | NonLocalStmt          { $1 }+   | AssertStmt            { $1 }++-- expr_stmt: testlist (augassign (yield_expr|testlist) | ('=' (yield_expr|testlist))*)++-- Complete++ExprStmt :: { Statement }+ExprStmt : TestList Assignment { makeAssignmentOrExpr $1 $2 }++Assignment :: { Either [Expr] (AssignOp, Expr) }+Assignment +   : NormalAssign { Left $1 }+   | AugAssign { Right $1 }++NormalAssign :: { [Expr] }+NormalAssign : ZeroOrMoreAssignRev { reverse $1 }++ZeroOrMoreAssignRev :: { [Expr] }+ZeroOrMoreAssignRev +   : {- empty -} { [] }+   | ZeroOrMoreAssignRev '=' YieldOrTestList { $3 : $1 }++YieldOrTestList :: { Expr }+YieldOrTestList +   : YieldExpr { $1 }+   | TestList { $1 }++{- +   augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' |+            '<<=' | '>>=' | '**=' | '//=') +-}++-- Complete++AugAssign :: { (AssignOp, Expr) }+AugAssign : AugAssignOp YieldOrTestList { ($1, $2) }++AugAssignOp :: { AssignOp }+AugAssignOp +   : '+=' { AST.PlusAssign }+   | '-=' { AST.MinusAssign } +   | '*=' { AST.MultAssign }+   | '/=' { AST.DivAssign }+   | '%=' { AST.ModAssign } +   | '**=' { AST.PowAssign }+   | '&=' { AST.BinAndAssign } +   | '|=' { AST.BinOrAssign }+   | '^=' { AST.BinXorAssign }+   | '<<=' { AST.LeftShiftAssign }+   | '>>=' { AST.RightShiftAssign }+   | '//=' { AST.FloorDivAssign } ++-- del_stmt: 'del' exprlist+-- Complete++DelStmt :: { Statement }+DelStmt : del ExprList { AST.Delete { del_exprs = $2 } }++-- pass_stmt: 'pass'+-- Complete++PassStmt :: { Statement }+PassStmt : pass { AST.Pass }++-- flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt+-- Complete++FlowStmt :: { Statement }+FlowStmt +   : BreakStmt { $1 }+   | ContinueStmt { $1 }+   | ReturnStmt { $1 }+   | RaiseStmt { $1 }+   | YieldStmt { $1 }++-- break_stmt: 'break'+-- Complete++BreakStmt :: { Statement }+BreakStmt : break { AST.Break }  ++-- continue_stmt: 'continue'+-- Complete++ContinueStmt :: { Statement }+ContinueStmt : continue { AST.Continue }  ++-- return_stmt: 'return' [testlist]+-- Complete ++ReturnStmt :: { Statement }+ReturnStmt : return OptionalTestList { AST.Return { return_expr = $2 }}++-- yield_stmt: yield_expr+-- Complete++YieldStmt :: { Statement }+YieldStmt : YieldExpr { StmtExpr { stmt_expr = $1 } } ++-- raise_stmt: 'raise' [test ['from' test]]+-- Complete ++RaiseStmt :: { Statement }+RaiseStmt : raise OptionalTestFrom { AST.Raise { raise_expr = $2 }}++OptionalTestFrom :: { Maybe (Expr, Maybe Expr) }+OptionalTestFrom +   : {- empty -} { Nothing }+   | Test OptionalFrom { Just ($1, $2) }++OptionalFrom :: { Maybe Expr }+OptionalFrom +   : {- empty -} { Nothing }+   | from Test { Just $2 }++-- import_stmt: import_name | import_from+-- Complete++ImportStmt :: { Statement }+ImportStmt +   : ImportName { $1 }+   | ImportFrom { $1 }++{-+   # note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS+   import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+)+                 'import' ('*' | '(' import_as_names ')' | import_as_names))+-}++ImportFrom :: { Statement }+ImportFrom : from ImportModule import StarOrAsNames { FromImport { from_module = $2, from_items = $4 }}++StarOrAsNames :: { FromItems }+StarOrAsNames+   : '*' { ImportEverything }+   | '(' ImportAsNames ')' { $2 }+   | ImportAsNames { $1 } ++ImportModule :: { ImportModule }+ImportModule +   : '.' { ImportDot }+   | '...' { ImportRelative (ImportRelative ImportDot) }+   | DottedName { ImportName $1 }+   | '.' ImportModule { ImportRelative $2 }+   | '...' ImportModule { ImportRelative (ImportRelative (ImportRelative $2)) }++-- import_as_name: NAME ['as' NAME]+ImportAsName :: { FromItem }+ImportAsName +   : Name OptionalAsName { FromItem { from_item_name = $1, from_as_name = $2 }}++-- import_as_names: import_as_name (',' import_as_name)* [',']+ImportAsNames :: { FromItems }+ImportAsNames : ImportAsNamesRev OptionalComma { FromItems (reverse $1) }++ImportAsNamesRev :: { [FromItem] }+ImportAsNamesRev+   : ImportAsName { [$1] }+   | ImportAsNamesRev ',' ImportAsName { $3 : $1 }++-- import_name: 'import' dotted_as_names++ImportName :: { Statement }+ImportName : import DottedAsNames { AST.Import { import_items = $2 }}++-- dotted_as_names: dotted_as_name (',' dotted_as_name)*++DottedAsNames :: { [ImportItem] }+DottedAsNames : OneOrMoreDottedAsNamesRev { reverse $1 }++OneOrMoreDottedAsNamesRev :: { [ImportItem] }+OneOrMoreDottedAsNamesRev+   : DottedAsName { [$1] }+   | OneOrMoreDottedAsNamesRev ',' DottedAsName { $3 : $1 }++-- dotted_as_name: dotted_name ['as' NAME]++DottedAsName :: { ImportItem }+DottedAsName +   : DottedName OptionalAsName  +        { ImportItem { import_item_name = $1, import_as_name = $2 }}++-- dotted_name: NAME ('.' NAME)* +-- Complete++DottedName :: { DottedName }+DottedName : Name DotNames { $1 : reverse $2 }++DotNames :: { DottedName }+DotNames +   : {- empty -} { [] }+   | DotNames '.' Name { $3 : $1 }++-- global_stmt: 'global' NAME (',' NAME)*+-- Complete++GlobalStmt :: { Statement }+GlobalStmt : global OneOrMoreNames { AST.Global { global_vars = $2 }}++OneOrMoreNames :: { [Ident] }+OneOrMoreNames : OneOrMoreNamesRev { reverse $1 }++OneOrMoreNamesRev :: { [Ident] }+OneOrMoreNamesRev+   : Name { [$1] }+   | OneOrMoreNamesRev ',' Name { $3 : $1 }++-- nonlocal_stmt: 'nonlocal' NAME (',' NAME)*++NonLocalStmt :: { Statement }+NonLocalStmt : nonlocal OneOrMoreNames { AST.NonLocal { nonLocal_vars = $2 }}++-- assert_stmt: 'assert' test [',' test]++AssertStmt :: { Statement }+AssertStmt : assert TestListRev { AST.Assert { assert_exprs = reverse $2 }}++-- compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated +-- Complete++CompoundStmt :: { Statement }+CompoundStmt +   : IfStmt { $1 } +   | WhileStmt { $1 }+   | ForStmt { $1 }+   | TryStmt { $1 }+   | WithStmt { $1 }+   | FuncDef { $1 } +   | ClassDef { $1 }+   | Decorated { $1 }++-- if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite]+-- Complete++IfStmt :: { Statement }+IfStmt : IfConditionals OptionalElse { Conditional { cond_guards = $1, cond_else = $2 } }++IfConditionals :: { [(Expr,[Statement])] }+IfConditionals : If ZeroOrMoreElifs { $1 : $2 }++If :: { (Expr, [Statement]) }+If : if Test ':' Suite { ($2, $4) }++ZeroOrMoreElifs :: { [(Expr, [Statement])]}+ZeroOrMoreElifs : ZeroOrMoreElifsRev { reverse $1 }++ZeroOrMoreElifsRev :: { [(Expr, [Statement])]}+ZeroOrMoreElifsRev +   : {- empty -} { [] }+   | ZeroOrMoreElifsRev elif Test ':' Suite { ($3, $5) : $1 }++OptionalElse :: { [Statement] }+OptionalElse +   : {- empty -} { [] }+   | else ':' Suite { $3 }++-- while_stmt: 'while' test ':' suite ['else' ':' suite] +-- Complete++WhileStmt :: { Statement }+WhileStmt : while Test ':' Suite OptionalElse { AST.While { while_cond = $2 , while_body = $4, while_else = $5 } }++-- for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +-- Complete++ForStmt :: { Statement }+ForStmt +   : for ExprList in TestList ':' Suite OptionalElse +     { AST.For { for_targets = $2, for_generator = $4, for_body = $6, for_else = $7 } }++{- +   try_stmt: ('try' ':' suite +               ((except_clause ':' suite)+ ['else' ':' suite] ['finally' ':' suite] | 'finally' ':' suite))+-}+-- Complete++TryStmt :: { Statement }+TryStmt : try ':' Suite Handlers { makeTry $3 $4 }++Handlers :: { ([Handler], [Statement], [Statement]) }+Handlers +   : OneOrMoreExceptClauses OptionalElse OptionalFinally { ($1, $2, $3) }+   | finally ':' Suite { ([], [], $3) }++OptionalFinally :: { [Statement] }+OptionalFinally +   : {- empty -} { [] }+   | finally ':' Suite { $3 }++OneOrMoreExceptClauses :: { [Handler] }+OneOrMoreExceptClauses : OneOrMoreExceptClausesRev { reverse $1 }++OneOrMoreExceptClausesRev :: { [Handler] }+OneOrMoreExceptClausesRev +   : Handler { [$1] }+   | OneOrMoreExceptClausesRev Handler { $2 : $1 }++Handler :: { Handler }+Handler : ExceptClause ':' Suite { ($1, $3) }++{- +   with_stmt: 'with' test [ with_var ] ':' suite+   with_var: 'as' expr+-}+-- Complete++WithStmt :: { Statement }+WithStmt : with Test OptionalAs ':' Suite +           { AST.With { with_context = $2, with_as = $3, with_body = $5 } }++OptionalAs :: { Maybe Expr }+OptionalAs +   : {- empty -} { Nothing }+   | as Expr { Just $2 }++-- except_clause: 'except' [test ['as' NAME]] +-- Complete++ExceptClause :: { ExceptClause }+ExceptClause : except ExceptExpr { $2 }++ExceptExpr :: { ExceptClause }+ExceptExpr +   : {- empty -} { Nothing }+   | Test OptionalAsName { Just ($1, $2) }++OptionalAsName :: { Maybe Ident }+OptionalAsName +   : {- empty -} { Nothing }+   | as Name     { Just $2 }++-- suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT +-- Complete, but we don't have a newline before indent b/c it is redundant++Suite :: { [Statement] }+Suite +   : SimpleStmt { $1 }+   | {- no newline here! -} indent OneOrMoreStmts dedent { $2 } ++OneOrMoreStmts :: { [Statement] }+OneOrMoreStmts : OneOrMoreStmtsRec { reverse (concat $1) }++OneOrMoreStmtsRec :: { [[Statement]] }+OneOrMoreStmtsRec +   : Stmt { [$1] }+   | OneOrMoreStmtsRec Stmt { $2 : $1 }++-- test: or_test ['if' or_test 'else' test] | lambdef+-- Complete++Test :: { Expr }+Test +   : OrTest TestCond { makeConditionalExpr $1 $2 }+   | LambDef { $1 }++TestCond :: { Maybe (Expr, Expr) }+TestCond +   : {- empty -} { Nothing }+   | if OrTest else Test { Just ($2, $4) }++-- test_nocond: or_test | lambdef_nocond+-- Complete ++TestNoCond :: { Expr }+TestNoCond+   : OrTest { $1 }+   | LambDefNoCond { $1 }++-- lambdef: 'lambda' [varargslist] ':' test+-- Complete++LambDef :: { Expr }+LambDef : lambda VarArgsList ':' Test { AST.Lambda $2 $4 }++-- lambdef_nocond: 'lambda' [varargslist] ':' test_nocond+-- Complete++LambDefNoCond :: { Expr }+LambDefNoCond : lambda VarArgsList ':' TestNoCond { AST.Lambda $2 $4 }++-- or_test: and_test ('or' and_test)* +-- Complete++OrTest :: { Expr }+OrTest : AndTest OrSequence { makeBinOp $1 $2 }++OrSequence :: { [(Op, Expr)] }+OrSequence +   : {- empty -} { [] }+   | OrSequence or AndTest { (AST.Or, $3) : $1 }++-- and_test: not_test ('and' not_test)* +-- Complete ++AndTest :: { Expr }+AndTest : NotTest AndSequence { makeBinOp $1 $2 }++AndSequence :: { [(Op, Expr)] }+AndSequence +   : {- empty -} { [] }+   | AndSequence and NotTest { (AST.And, $3) : $1 }++-- not_test: 'not' not_test | comparison +-- Complete++NotTest :: { Expr }+NotTest +   : not NotTest { UnaryOp {operator = AST.Not, op_arg = $2} }+   | Comparison { $1 }++-- comparison: star_expr (comp_op star_expr)*+-- Complete++Comparison :: { Expr }+Comparison : StarExpr CompSequence { makeBinOp $1 $2 }++CompSequence :: { [(Op, Expr)] }+CompSequence +   : {- empty -} { [] }+   | CompSequence CompOp StarExpr { ($2, $3) : $1 }++-- comp_op: '<'|'>'|'=='|'>='|'<='|'!='|'in'|'not' 'in'|'is'|'is' 'not' +-- Complete++CompOp :: { Op }+CompOp +   : '<'    { AST.LessThan }+   | '>'    { AST.GreaterThan }+   | '=='   { AST.Equality }+   | '>='   { AST.GreaterThanEquals }+   | '<='   { AST.LessThanEquals }+   | '!='   { AST.NotEquals }+   | in     { AST.In }+   | not in { AST.NotIn }+   | IsOp   { $1 }++IsOp :: { Op }+IsOp : is NotPart { $2 }++NotPart :: { Op }+NotPart +   : {- empty -} { AST.Is }+   | not { AST.IsNot } ++-- star_expr: ['*'] expr +-- Incomplete+{- +   XXX The grammar grossly over-states the places where a starred expression can occur.+   It leads to an ambiguity because of the starred argument lists. ++   I think this is a bug in the grammar, and it will need more investigation to see if+   it can be fixed.+-}++StarExpr :: { Expr }+StarExpr : Expr { $1 }+{-+   : '*' Expr { Starred { starred_expr = $2 }} +   | Expr { $1 }+-}++-- expr: xor_expr ('|' xor_expr)* +-- Complete++Expr :: { Expr }+Expr : XorExpr BinaryOrSequence { makeBinOp $1 $2 }++BinaryOrSequence :: { [(Op, Expr)] }+BinaryOrSequence +   : {- empty -} { [] }+   | BinaryOrSequence '|' XorExpr { (AST.BinaryOr, $3) : $1 }++-- xor_expr: and_expr ('^' and_expr)* +-- Complete++XorExpr :: { Expr }+XorExpr : AndExpr XorSequence { makeBinOp $1 $2 }++XorSequence :: { [(Op, Expr)] }+XorSequence +   : {- empty -} { [] }+   | XorSequence '^' AndExpr { (AST.Xor, $3) : $1 }++-- and_expr: shift_expr ('&' shift_expr)* +-- Complete++AndExpr :: { Expr }+AndExpr : ShiftExpr BinaryAndSequence { makeBinOp $1 $2 }++BinaryAndSequence :: { [(Op, Expr)] }+BinaryAndSequence +   : {- empty -} { [] }+   | BinaryAndSequence '&' ShiftExpr { (AST.BinaryAnd, $3) : $1 }++-- shift_expr: arith_expr (('<<'|'>>') arith_expr)* +-- Complete++ShiftExpr :: { Expr }+ShiftExpr : ArithExpr ShiftSequence { makeBinOp $1 $2 }++ShiftSequence :: { [(Op, Expr)] }+ShiftSequence +   : {- empty -} { [] }+   | ShiftSequence ShiftOp ArithExpr { ($2, $3) : $1 }++ShiftOp :: { Op }+ShiftOp +   : '<<' { AST.ShiftLeft }+   | '>>' { AST.ShiftRight }++-- arith_expr: term (('+'|'-') term)*+-- Complete++ArithExpr :: { Expr }+ArithExpr : Term TermSequence { makeBinOp $1 $2 }++TermSequence :: { [(Op, Expr)] }+TermSequence +   : {- empty -} { [] }+   | TermSequence ArithOp Term { ($2, $3) : $1 }++ArithOp :: { Op }+ArithOp +   : '+' { AST.Plus }+   | '-' { AST.Minus }++-- term: factor (('*'|'/'|'%'|'//') factor)* +-- Complete++Term :: { Expr }+Term : Factor FactorSequence { makeBinOp $1 $2 }++FactorSequence :: { [(Op, Expr)] }+FactorSequence +   : {- empty -} { [] }+   | FactorSequence MultDivOp Factor { ($2, $3) : $1 }++MultDivOp :: { Op }+MultDivOP +   : '*' { AST.Multiply } +   | '/' { AST.Divide }+   | '%' { AST.Modulo }+   | floordiv { AST.FloorDivide }++-- factor: ('+'|'-'|'~') factor | power +-- Complete++Factor :: { Expr }+Factor +   : '+' Factor { UnaryOp { operator = AST.Plus, op_arg = $2 } } +   | '-' Factor { UnaryOp { operator = AST.Minus, op_arg = $2 } } +   | '~' Factor { UnaryOp { operator = AST.Invert, op_arg = $2 } } +   | Power { $1 }++-- power: atom trailer* ['**' factor]+-- Complete, but maybe we should factor out the common prefix?++Power :: { Expr }+Power : Atom ZeroOrMoreTrailer { addTrailer $1 $2 }+      | Atom ZeroOrMoreTrailer '**' Factor +        { makeBinOp (addTrailer $1 $2) [(AST.Exponent, $4)] } ++ZeroOrMoreTrailer :: { [Trailer] }+ZeroOrMoreTrailer : ZeroOrMoreTrailerRev { reverse $1 }++ZeroOrMoreTrailerRev :: { [Trailer] }+ZeroOrMoreTrailerRev +   : {- empty -} { [] }+   | ZeroOrMoreTrailerRev Trailer { $2 : $1 }++{- +   atom: ('(' [yield_expr|testlist_comp] ')' |+          '[' [testlist_comp] ']' |+          '{' [dictorsetmaker] '}' |+           NAME | NUMBER | STRING+ | '...' | 'None' | 'True' | 'False')+-}+-- Incomplete++Atom :: { Expr }+Atom : ParenForm { $1 } +     | ListForm { $1 }+     | DictOrSetForm { $1 }+     | Name { AST.Var $1 }+     | integer { AST.Int $1 }+     | float { AST.Float $1 }+     | imaginary { AST.Imaginary { imaginary_value = $1 }}+     | OneOrMoreStrings { AST.Strings (reverse $1) }+     | OneOrMoreByteStrings { AST.ByteStrings (reverse $1) }+     | '...' { AST.Ellipsis }+     | none { AST.None }+     | true { AST.Bool Prelude.True }+     | false { AST.Bool Prelude.False }++ParenForm :: { Expr }+ParenForm : '(' YieldOrTestListComp ')' { $2 }++ListForm :: { Expr }+ListForm +   : '[' ']' { List { list_exprs = [] } }+   | '[' TestListComp ']' { makeListForm $2 }++DictOrSetForm :: { Expr }+DictOrSetForm+   : '{' '}' { Dictionary { dict_mappings = [] }}+   | '{' DictOrSetMaker '}' { $2 }++YieldOrTestListComp :: { Expr }+YieldOrTestListComp +   : {- empty -} { Tuple { tuple_exprs = [] } }+   | YieldExpr { $1 }+   | TestListComp { either id (\c -> Generator { gen_comprehension = c }) $1 } ++OneOrMoreStrings :: { [String] }+OneOrMoreStrings+   : string { [$1] }+   | OneOrMoreStrings string { $2 : $1 }++OneOrMoreByteStrings :: { [BS.ByteString] }+OneOrMoreByteStrings+   : bytestring { [$1] }+   | OneOrMoreByteStrings bytestring { $2 : $1 }++-- testlist_comp: test ( comp_for | (',' test)* [','] )+-- Complete ++TestListComp :: { Either Expr (Comprehension Expr) }+TestListComp+   : TestList { Left $1 }+   | Test CompFor { Right (makeComprehension $1 $2) }++-- trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +-- Complete ++Trailer :: { Trailer }+Trailer +   : '(' ArgList ')' { TrailerCall $2 }+   | '[' SubscriptList ']' { TrailerSubscript $2 } +   | '.' Name { TrailerDot $2 }++-- subscriptlist: subscript (',' subscript)* [',']++SubscriptList :: { [Subscript] }+SubscriptList : OneOrMoreSubsRev OptionalComma { reverse $1 }++OneOrMoreSubsRev :: { [Subscript] }+OneOrMoreSubsRev+   : Subscript { [$1] }+   | OneOrMoreSubsRev ',' Subscript { $3 : $1 }++-- subscript: test | [test] ':' [test] [sliceop]++Subscript :: { Subscript }+Subscript+   : Test { SubscriptExpr $1 }+   | OptionalTest ':' OptionalTest OptionalSliceOp { SubscriptSlice $1 $3 $4 }++OptionalTest :: { Maybe Expr }+OptionalTest+   : {- empty -} { Nothing }+   | Test { Just $1 }++OptionalSliceOp :: { Maybe (Maybe Expr) }+OptionalSliceOp +   : {- empty -} { Nothing }+   | SliceOp { Just $1 }++-- sliceop: ':' [test]++SliceOp :: { Maybe Expr }+SliceOp : ':' OptionalTest { $2 }++-- exprlist: star_expr (',' star_expr)* [',']+-- Complete++ExprList :: { [Expr] }+ExprList : ExprListRev OptionalComma { reverse $1 }+       +OptionalComma :: { Bool }+OptionalComma +   : {- empty -} { False }+   | ',' { True }  ++ExprListRev :: { [Expr] }+ExprListRev +   : StarExpr { [$1] }+   | ExprListRev ',' StarExpr { $3 : $1 }++-- testlist: test (',' test)* [',']+-- Complete++-- Some trickery here because the of the optional trailing comma, which+-- could turn a normal expression into a tuple.+-- Very occasionally, TestList is used to generate something which is not+-- a tuple (such as the square bracket notation in list literals). Therefore+-- it would seem like a good idea to not return a tuple in this case, but+-- a list of expressions. However this would complicate a lot of code+-- since we would have to carry around the optional comma information.+-- I've decided to leave it as a tuple, and in special cases, unpack the+-- tuple and pull out the list of expressions.++TestList :: { Expr }+TestList : TestListRev OptionalComma { makeTupleOrExpr (reverse $1) $2 }+       +TestListRev :: { [Expr] }+TestListRev +   : Test { [$1] }+   | TestListRev ',' Test { $3 : $1 }++{- +   dictorsetmaker: ( (test ':' test (comp_for | (',' test ':' test)* [','])) |+                   (test (comp_for | (',' test)* [','])) )+-}++DictOrSetMaker :: { Expr }+DictOrSetMaker+   : Test ':' Test DictRest { makeDictionary ($1, $3) $4 } +   | Test SetRest { makeSet $1 $2 } ++DictRest :: { Either CompFor [(Expr, Expr)] }+DictRest+   : CompFor { Left $1 }+   | ZeroOrMoreDictMappings OptionalComma { Right (reverse $1) }++ZeroOrMoreDictMappings :: { [(Expr, Expr)] }+ZeroOrMoreDictMappings+   : {- empty -} { [] }+   | ZeroOrMoreDictMappings ',' Test ':' Test { ($3,$5) : $1 }++SetRest :: { Either CompFor [Expr] }+SetRest+   : CompFor { Left $1 }+   | ZeroOrMoreCommaTest OptionalComma { Right (reverse $1) }++ZeroOrMoreCommaTest :: { [Expr] }+ZeroOrMoreCommaTest +   : {- empty -} { [] }+   | ZeroOrMoreCommaTest ',' Test { $3 : $1 }++-- classdef: 'class' NAME ['(' [arglist] ')'] ':' suite+-- Complete++ClassDef :: { Statement }+ClassDef +   : class Name OptionalArgList ':' Suite +     { AST.Class { class_name = $2, class_args = $3, class_body = $5 }}++OptionalArgList :: { [Argument] }+OptionalArgList +   : {- empty -} { [] }+   | '(' ArgList ')' { $2 }++{- +   arglist: (argument ',')* (argument [',']+                         |'*' test (',' argument)* [',' '**' test]+                         |'**' test)+-}++{-+   Deviates slightly from the grammar because we allow empty arg lists.+   The grammar allows for this by making arg lists non-empty but optional.+   Works out the same in the end.+-}++ArgList :: { [Argument] }+ArgList +   : {- empty -} { [] }+   | '*' Test { [ArgVarArgsPos { arg_expr = $2 }] }+   | '**' Test { [ArgVarArgsKeyword { arg_expr = $2 }] }+   | Argument { [$1] }+   | Argument ',' ArgList { $1 : $3 }+   | '*' Test ',' StarArgs { ArgVarArgsPos { arg_expr = $2 } : $4 }++StarArgs :: { [Argument] }+StarArgs+   : Argument { [$1] }+   | Argument ',' StarArgs { $1 : $3 }+   | '**' Test { [ArgVarArgsKeyword { arg_expr = $2 }] }++-- argument: test [comp_for] | test '=' test  # Really [keyword '='] test++Argument :: { Argument }+Argument+   : Name '=' Test { ArgKeyword { arg_keyword = $1, arg_expr = $3 }}+   | Test { ArgExpr { arg_expr = $1 }} +   | Test CompFor { ArgExpr { arg_expr = Generator { gen_comprehension = makeComprehension $1 $2 }}}++-- comp_iter: comp_for | comp_if+-- Complete++CompIter :: { CompIter }+CompIter+   : CompFor { IterFor $1 }+   | CompIf { IterIf $1 } ++-- comp_for: 'for' exprlist 'in' or_test [comp_iter]++CompFor :: { CompFor }+CompFor : for ExprList in OrTest OptionalCompIter +          { CompFor { comp_for_exprs = $2, comp_in_expr = $4, comp_for_iter = $5 }}++OptionalCompIter :: { Maybe CompIter }+OptionalCompIter+   : {- empty -} { Nothing }+   | CompIter { Just $1 }++-- comp_if: 'if' test_nocond [comp_iter]++CompIf :: { CompIf }+CompIf : if TestNoCond OptionalCompIter { CompIf { comp_if = $2, comp_if_iter = $3 } }++-- testlist1: test (',' test)*+-- Not used in the rest of the grammar!++-- encoding_decl: NAME+-- Not used in the rest of the grammqr!++-- yield_expr: 'yield' [testlist] +-- Complete++YieldExpr :: { Expr }+YieldExpr : yield OptionalTestList { AST.Yield { yield_expr = $2 } }++OptionalTestList :: { Maybe Expr }+OptionalTestList +   : {- empty -} { Nothing }+   | TestList    { Just $1 }++{+-- Put additional Haskell code in here if needed.++}
+ src/Language/Python/Version3/Parser/ParserMonad.hs view
@@ -0,0 +1,211 @@+{-# OPTIONS  #-}+-----------------------------------------------------------------------------+-- |+-- Module      : Language.Python.Version3.Parser.ParserMonad +-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Maintainer  : bjpop@csse.unimelb.edu.au+-- Stability   : experimental+-- Portability : ghc+--+-- Monad support for Python parser and lexer. +-----------------------------------------------------------------------------++module Language.Python.Version3.Parser.ParserMonad +   ( P+   , execParser+   , runParser+   , failP+   , thenP+   , returnP+   , setLocation+   , getLocation+   , getInput+   , setInput+   , getLastToken+   , setLastToken+   , ParseError (ParseError)+   , State (..)+   , initialState+   , pushStartCode+   , popStartCode+   , getStartCode+   , getIndent+   , pushIndent+   , popIndent+   , getIndentStackDepth+   , getParen+   , pushParen+   , popParen+   , getParenStackDepth+   ) where++import Language.Python.Data.SrcLocation (SrcLocation (..))+import Language.Python.Version3.Parser.Token (Token (..))++-- | Parse error. A list of error messages and a source location.+newtype ParseError = ParseError ([String], SrcLocation) +   deriving Show++data ParseResult a+   = POk !State a+   | PFailed [String] SrcLocation   -- The error message and position++data State = +   State +   { location :: !SrcLocation -- position at current input location+   , input :: !String         -- the current input+   , previousToken :: Token   -- the previous token+   , startCodeStack :: [Int]  -- a stack of start codes for the state of the lexer+   , indentStack :: [Int]     -- a stack of source column positions of indentation levels+   , parenStack :: [Token]   -- a stack of parens and brackets for indentation handling+   }++initialState :: SrcLocation -> String -> [Int] -> State+initialState initLoc inp scStack+   = State+   { location = initLoc +   , input = inp+   , previousToken = initToken+   , startCodeStack = scStack+   , indentStack = [1]+   , parenStack = []+   }++newtype P a = P { unP :: State -> ParseResult a }++instance Monad P where+   return = returnP+   (>>=) = thenP+   fail m = getLocation >>= \loc -> failP loc [m]++execParser :: P a -> State -> Either ParseError a+execParser (P parser) initialState =+   case parser initialState of+      PFailed message errloc -> Left (ParseError (message, errloc))+      POk st result -> Right result++runParser :: P a -> State -> Either ParseError (State, a)+runParser (P parser) initialState =+   case parser initialState of+      PFailed message errloc -> Left (ParseError (message, errloc))+      POk st result -> Right (st, result)++initToken :: Token+initToken = Newline NoLocation++{-# INLINE returnP #-}+returnP :: a -> P a+returnP a = P $ \s -> POk s a++{-# INLINE thenP #-}+thenP :: P a -> (a -> P b) -> P b+(P m) `thenP` k = P $ \s ->+        case m s of+                POk s' a        -> (unP (k a)) s'+                PFailed err loc -> PFailed err loc ++failP :: SrcLocation -> [String] -> P a+failP loc msg = P $ \_ -> PFailed msg loc ++setLocation :: SrcLocation -> P ()+setLocation loc = P $ \s -> POk (s { location = loc }) ()++getLocation :: P SrcLocation+getLocation = P $ \s@State{ location = loc } -> POk s loc ++getInput :: P String +getInput = P $ \s@State{ input = inp } -> POk s inp++setInput :: String -> P ()+setInput inp = P $ \s -> POk (s { input = inp }) ()++getLastToken :: P Token+getLastToken = P $ \s@State{ previousToken = tok } -> POk s tok++setLastToken :: Token -> P ()+setLastToken tok = P $ \s -> POk (s { previousToken = tok }) ()++pushStartCode :: Int -> P () +pushStartCode code = P newStack+   where +   newStack s@State{ startCodeStack = scStack } +      = POk (s { startCodeStack = code : scStack}) () ++popStartCode :: P ()+popStartCode = P newStack+   where +   newStack s@State{ startCodeStack = scStack, location = loc } +      = case scStack of+           [] ->  PFailed err loc+           _:rest -> POk (s { startCodeStack = rest }) () +   err = ["fatal error in lexer: attempt to pop empty start code stack"]++getStartCode :: P Int+getStartCode = P getCode+   where+   getCode s@State{ startCodeStack = scStack, location = loc }+      = case scStack of+           [] ->  PFailed err loc+           code:_ -> POk s code+   err = ["fatal error in lexer: start code stack empty on getStartCode"]++pushIndent :: Int -> P () +pushIndent indent = P newStack+   where +   newStack s@State{ indentStack = iStack } +      = POk (s { indentStack = indent : iStack }) () ++popIndent :: P ()+popIndent = P newStack+   where +   newStack s@State{ indentStack = iStack, location = loc } +      = case iStack of+           [] -> PFailed err loc+           _:rest -> POk (s { indentStack = rest }) () +   -- XXX this message needs fixing+   err = ["fatal error in lexer: attempt to pop empty indentation stack"]++getIndent :: P Int+getIndent = P get+   where+   get s@State{ indentStack = iStack, location = loc }+      = case iStack of+           [] -> PFailed err loc+           indent:_ -> POk s indent +   -- XXX this message needs fixing+   err = ["fatal error in lexer: indent stack empty on getIndent"]++getIndentStackDepth :: P Int+getIndentStackDepth = P get+   where+   get s@State{ indentStack = iStack } = POk s (length iStack)++pushParen :: Token -> P () +pushParen symbol = P newStack+   where +   newStack s@State{ parenStack = pStack } +      = POk (s { parenStack = symbol : pStack }) () ++popParen :: P ()+popParen = P newStack+   where +   newStack s@State{ parenStack = pStack, location = loc } +      = case pStack of+           [] -> PFailed err loc+           _:rest -> POk (s { parenStack = rest }) () +   -- XXX this message needs fixing+   err = ["fatal error in lexer: attempt to pop empty paren stack"]++getParen :: P (Maybe Token)+getParen = P get+   where+   get s@State{ parenStack = pStack }+      = case pStack of+           [] -> POk s Nothing +           symbol:_ -> POk s (Just symbol) ++getParenStackDepth :: P Int+getParenStackDepth = P get+   where+   get s@State{ parenStack = pStack } = POk s (length pStack)
+ src/Language/Python/Version3/Parser/ParserUtils.hs view
@@ -0,0 +1,136 @@+{-# OPTIONS  #-}+-----------------------------------------------------------------------------+-- |+-- Module      : Language.Python.Version3.Parser.ParserUtils +-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Maintainer  : bjpop@csse.unimelb.edu.au+-- Stability   : experimental+-- Portability : ghc+--+-- Various utilities to support the Python parser. +-----------------------------------------------------------------------------++module Language.Python.Version3.Parser.ParserUtils where++import Language.Python.Version3.Syntax.AST as AST+import Language.Python.Version3.Parser.Token hiding (True, False)+import Language.Python.Version3.Parser.ParserMonad hiding (location)+import Language.Python.Data.SrcLocation +import Data.List (foldl')++makeConditionalExpr :: Expr -> Maybe (Expr, Expr) -> Expr+makeConditionalExpr e Nothing = e+makeConditionalExpr e (Just (cond, false_branch))+    = CondExpr+      { ce_true_branch = e+      , ce_condition = cond+      , ce_false_branch = false_branch+      }++makeBinOp :: Expr -> [(Op, Expr)] -> Expr+makeBinOp e es+   = foldl' (\e1 (op, e2) -> BinaryOp { operator = op, left_op_arg = e1, right_op_arg = e2 } )+     e (reverse es)++parseError :: Token -> P a +parseError token +   = failP (location token) ["Unexpected token", show token] ++data Trailer+   = TrailerCall [Argument]+   | TrailerSubscript [Subscript] +   | TrailerDot Ident++data Subscript+   = SubscriptExpr Expr+   | SubscriptSlice (Maybe Expr) (Maybe Expr) (Maybe (Maybe Expr)) ++isProperSlice :: Subscript -> Bool+isProperSlice (SubscriptSlice {}) = True+isProperSlice other = False++subscriptToSlice :: Subscript -> Slice+subscriptToSlice (SubscriptSlice lower upper stride)+   = SliceProper { slice_lower = lower, slice_upper = upper, slice_stride = stride }+subscriptToSlice (SubscriptExpr e)+   = SliceExpr { slice_expr = e }++subscriptToExpr :: Subscript -> Expr+subscriptToExpr (SubscriptExpr e) = e+-- this should never happen:+subscriptToExpr (SubscriptSlice {}) +   = error "subscriptToExpr applied to a proper slice"++addTrailer :: Expr -> [Trailer] -> Expr+addTrailer+   = foldl' trail+   where+   trail :: Expr -> Trailer -> Expr+   trail e (TrailerCall args) = Call { call_fun = e, call_args = args }+   trail e (TrailerSubscript subs) +      | any isProperSlice subs+           = SlicedExpr { slicee = e, slices = map subscriptToSlice subs }+      | otherwise +           = Subscript { subscriptee = e, subscript_exprs = map subscriptToExpr subs }+   trail e (TrailerDot ident)+      = BinaryOp { operator = AST.Dot, left_op_arg = e, right_op_arg = Var ident }++makeTupleOrExpr :: [Expr] -> Bool -> Expr+makeTupleOrExpr [e] False = e+makeTupleOrExpr es@[e] True = Tuple { tuple_exprs = es }+makeTupleOrExpr es@(_:_) _ = Tuple { tuple_exprs = es } ++makeAssignmentOrExpr :: Expr -> Either [Expr] (AssignOp, Expr) -> Statement+makeAssignmentOrExpr e (Left es) +   = makeNormalAssignment e es+   where+   makeNormalAssignment :: Expr -> [Expr] -> Statement+   makeNormalAssignment e [] = StmtExpr { stmt_expr = e } +   makeNormalAssignment e es +      = AST.Assign { assign_to = e : front, assign_expr = head back }+      where+      (front, back) = splitAt (len - 1) es+      len = length es +makeAssignmentOrExpr e1 (Right (op, e2)) +   = makeAugAssignment e1 op e2+   where+   makeAugAssignment :: Expr -> AssignOp -> Expr -> Statement+   makeAugAssignment e1 op e2+      = AST.AugmentedAssign { aug_assign_to = e1, aug_assign_op = op, aug_assign_expr = e2 } ++makeTry :: Suite -> ([Handler], [Statement], [Statement]) -> Statement+makeTry body (handlers, elses, finally)+   = AST.Try { try_body = body, try_excepts = handlers, try_else = elses, try_finally = finally }++makeParam :: (Ident, Maybe Expr) -> Maybe Expr -> Parameter+makeParam (name, annot) defaultVal+   = Param { param_name = name, param_annotation = annot, param_default = defaultVal }++makeStarParam :: Maybe (Ident, Maybe Expr) -> Parameter+makeStarParam Nothing = EndPositional+makeStarParam (Just (name, annot))+   = VarArgsPos { param_name = name, param_annotation = annot }++makeStarStarParam :: (Ident, Maybe Expr) -> Parameter+makeStarStarParam (name, annot)+   = VarArgsKeyword { param_name = name, param_annotation = annot }++makeComprehension :: Expr -> CompFor -> Comprehension Expr+makeComprehension e for+   = Comprehension { comprehension_expr = e, comprehension_for = for }++makeListForm :: Either Expr (Comprehension Expr) -> Expr+makeListForm (Left tuple@(Tuple {})) = List { list_exprs = tuple_exprs tuple }+makeListForm (Left other) = List { list_exprs = [other] }+makeListForm (Right comprehension) = ListComp { list_comprehension = comprehension }++makeSet :: Expr -> Either CompFor [Expr] -> Expr+makeSet e (Left compFor)+   = SetComp { set_comprehension = Comprehension { comprehension_expr = e, comprehension_for = compFor }}+makeSet e (Right es) = Set { set_exprs = e:es }++makeDictionary :: (Expr, Expr) -> Either CompFor [(Expr,Expr)] -> Expr+makeDictionary e (Left compFor)+   = DictComp { dict_comprehension = Comprehension { comprehension_expr = e, comprehension_for = compFor }}+makeDictionary e (Right es) = Dictionary { dict_mappings = e:es }
+ src/Language/Python/Version3/Parser/Token.hs view
@@ -0,0 +1,136 @@+{-# OPTIONS  #-}+-----------------------------------------------------------------------------+-- |+-- Module      : Language.Python.Version3.Parser.Token +-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Maintainer  : bjpop@csse.unimelb.edu.au+-- Stability   : experimental+-- Portability : ghc+--+-- Lexical tokens for the Python version 3 lexer. +-- See: <http://docs.python.org/dev/3.0/reference/lexical_analysis.html>+-----------------------------------------------------------------------------++module Language.Python.Version3.Parser.Token +   ( Token (..)+   , Ident (..)+   )+where++import Language.Python.Data.SrcLocation (SrcLocation (..), Location (location))+import qualified Data.ByteString.Char8 as BS (ByteString)++-- | Identifier.+newtype Ident = Ident String+   deriving (Eq, Show, Ord)++-- | Lexical tokens.+data Token +   -- Whitespace+   = Indent SrcLocation                       -- ^ Indentation: increase.+   | Dedent SrcLocation                       -- ^ Indentation: decrease.+   | Newline SrcLocation                      -- ^ Newline.++   -- Identifiers +   | Identifier SrcLocation !String           -- ^ Identifier.++   -- Literals+   | String SrcLocation !String               -- ^ Literal: string.+   | ByteString SrcLocation !BS.ByteString    -- ^ Literal: byte string.+   | Integer SrcLocation !Integer             -- ^ Literal: integer.+   | Float SrcLocation !Double                -- ^ Literal: floating point.+   | Imaginary SrcLocation !Double            -- ^ Literal: imaginary number.++   -- Keywords+   | Def SrcLocation                          -- ^ Keyword: \'def\'. +   | While SrcLocation                        -- ^ Keyword: \'while\'.+   | If SrcLocation                           -- ^ Keyword: \'if\'.+   | True SrcLocation                         -- ^ Keyword: \'True\'.+   | False SrcLocation                        -- ^ Keyword: \'False\'.+   | Return SrcLocation                       -- ^ Keyword: \'Return\'.+   | Try SrcLocation                          -- ^ Keyword: \'try\'.+   | Except SrcLocation                       -- ^ Keyword: \'except\'.+   | Raise SrcLocation                        -- ^ Keyword: \'raise\'.+   | In SrcLocation                           -- ^ Keyword: \'in\'.+   | Is SrcLocation                           -- ^ Keyword: \'is\'.+   | Lambda SrcLocation                       -- ^ Keyword: \'lambda\'.+   | Class SrcLocation                        -- ^ Keyword: \'class\'.+   | Finally SrcLocation                      -- ^ Keyword: \'finally\'.+   | None SrcLocation                         -- ^ Keyword: \'None\'+   | For SrcLocation                          -- ^ Keyword: \'for\'.+   | From SrcLocation                         -- ^ Keyword: \'from\'.+   | NonLocal SrcLocation                     -- ^ Keyword: \'nonlocal\'.+   | Global SrcLocation                       -- ^ Keyword: \'global\'.+   | With SrcLocation                         -- ^ Keyword: \'with\'.+   | As SrcLocation                           -- ^ Keyword: \'as\'.+   | Elif SrcLocation                         -- ^ Keyword: \'elif\'.+   | Yield SrcLocation                        -- ^ Keyword: \'yield\'.+   | Assert SrcLocation                       -- ^ Keyword: \'assert\'.+   | Import SrcLocation                       -- ^ Keyword: \'import\'.+   | Pass SrcLocation                         -- ^ Keyword: \'pass\'.+   | Break SrcLocation                        -- ^ Keyword: \'break\'.+   | Continue SrcLocation                     -- ^ Keyword: \'continue\'.+   | Delete SrcLocation                       -- ^ Keyword: \'del\'.+   | Else SrcLocation                         -- ^ Keyword: \'else\'.+   | Not SrcLocation                          -- ^ Keyword: \'not\'.+   | And SrcLocation                          -- ^ Keyword: boolean conjunction \'and\'.+   | Or SrcLocation                           -- ^ Keyword: boolean disjunction \'or\'.++   -- Delimiters+   | At SrcLocation                           -- ^ Delimiter: at sign \'\@\'. +   | LeftRoundBracket SrcLocation             -- ^ Delimiter: left round bracket \'(\'.+   | RightRoundBracket SrcLocation            -- ^ Delimiter: right round bracket \')\'.+   | LeftSquareBracket SrcLocation            -- ^ Delimiter: left square bracket \'[\'.+   | RightSquareBracket SrcLocation           -- ^ Delimiter: right square bracket \']\'.+   | LeftBrace SrcLocation                    -- ^ Delimiter: left curly bracket \'{\'.+   | RightBrace SrcLocation                   -- ^ Delimiter: right curly bracket \'}\'.+   | Dot SrcLocation                          -- ^ Delimiter: dot (full stop) \'.\'.+   | Comma SrcLocation                        -- ^ Delimiter: comma \',\'.+   | SemiColon SrcLocation                    -- ^ Delimiter: semicolon \';\'.+   | Colon SrcLocation                        -- ^ Delimiter: colon \':\'.+   | Ellipsis SrcLocation                     -- ^ Delimiter: ellipses (three dots) \'...\'.+   | RightArrow SrcLocation                   -- ^ Delimiter: right facing arrow \'->\'.+   | Assign SrcLocation                       -- ^ Delimiter: assignment \'=\'.+   | PlusAssign SrcLocation                   -- ^ Delimiter: plus assignment \'+=\'.+   | MinusAssign SrcLocation                  -- ^ Delimiter: minus assignment \'-=\'.+   | MultAssign SrcLocation                   -- ^ Delimiter: multiply assignment \'*=\'+   | DivAssign SrcLocation                    -- ^ Delimiter: divide assignment \'/=\'.+   | ModAssign SrcLocation                    -- ^ Delimiter: modulus assignment \'%=\'.+   | PowAssign SrcLocation                    -- ^ Delimiter: power assignment \'**=\'.+   | BinAndAssign SrcLocation                 -- ^ Delimiter: binary-and assignment \'&=\'.+   | BinOrAssign SrcLocation                  -- ^ Delimiter: binary-or assignment \'|=\'.+   | BinXorAssign SrcLocation                 -- ^ Delimiter: binary-xor assignment \'^=\'.+   | LeftShiftAssign SrcLocation              -- ^ Delimiter: binary-left-shift assignment \'<<=\'.+   | RightShiftAssign SrcLocation             -- ^ Delimiter: binary-right-shift assignment \'>>=\'.+   | FloorDivAssign SrcLocation               -- ^ Delimiter: floor-divide assignment \'//=\'.++   -- Operators+   | Plus SrcLocation                         -- ^ Operator: plus \'+\'.+   | Minus SrcLocation                        -- ^ Operator: minus: \'-\'.+   | Mult SrcLocation                         -- ^ Operator: multiply \'*\'.+   | Div SrcLocation                          -- ^ Operator: divide \'/\'.+   | GreaterThan SrcLocation                  -- ^ Operator: greater-than \'>\'.+   | LessThan SrcLocation                     -- ^ Operator: less-than \'<\'.+   | Equality SrcLocation                     -- ^ Operator: equals \'==\'.+   | GreaterThanEquals SrcLocation            -- ^ Operator: greater-than-or-equals \'>=\'.+   | LessThanEquals SrcLocation               -- ^ Operator: less-than-or-equals \'<=\'.+   | Exponent SrcLocation                     -- ^ Operator: exponential \'**\'.+   | BinaryOr SrcLocation                     -- ^ Operator: binary-or \'|\'.+   | Xor SrcLocation                          -- ^ Operator: binary-xor \'^\'.+   | BinaryAnd SrcLocation                    -- ^ Operator: binary-and \'&\'.+   | ShiftLeft SrcLocation                    -- ^ Operator: binary-shift-left \'<<\'.+   | ShiftRight SrcLocation                   -- ^ Operator: binary-shift-right \'>>\'.+   | Modulo SrcLocation                       -- ^ Operator: modulus \'%\'.+   | FloorDiv SrcLocation                     -- ^ Operator: floor-divide \'//\'.+   | Tilde SrcLocation                        -- ^ Operator: tilde \'~\'.+   | NotEquals SrcLocation                    -- ^ Operator: not-equals \'!=\'.++   -- Special cases+   | EOF                                      -- ^ End of file (no source location). +   deriving (Show, Eq, Ord)++-- XXX fixme+instance Location Token where+   location x = NoLocation+
+ src/Language/Python/Version3/Syntax/AST.hs view
@@ -0,0 +1,405 @@+{-# OPTIONS  #-}+-----------------------------------------------------------------------------+-- |+-- Module      : Language.Python.Version3.Syntax.AST +-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Maintainer  : bjpop@csse.unimelb.edu.au+-- Stability   : experimental+-- Portability : ghc+--+-- Representation of the Python version 3 abstract syntax. +--+-- See: +--+-- * <http://docs.python.org/dev/3.0/reference/index.html> for an overview of the language. +--+-- * <http://docs.python.org/dev/3.0/reference/grammar.html> for the full grammar.+--+-- Note: there are cases where the AST is more liberal than the formal grammar+-- of the language. Therefore some care must be taken when constructing+-- Python programs using the raw AST. XXX At some point we should provide+-- smart constructors which ensure syntactic correctness of the AST.+-----------------------------------------------------------------------------++module Language.Python.Version3.Syntax.AST ( +   -- * Modules+   Module (..)+   -- * Identifiers and dotted names+   , Ident (..)+   , DottedName+   -- * Statements, suites, parameters, decorators and assignment operators+   , Statement (..)+   , Suite+   , Parameter (..)+   , Decorator (..)+   , AssignOp (..)+   -- * Expressions, operators, arguments and slices+   , Expr (..)+   , Op (..)+   , Argument (..)+   , Slice (..)+   -- * Imports+   , ImportItem (..)+   , FromItem (..)+   , FromItems (..)+   , ImportModule (..)+   -- * Exceptions+   , Handler+   , ExceptClause+   -- * Comprehensions+   , Comprehension (..)+   , CompFor (..)+   , CompIf (..)+   , CompIter (..)+   )+   where++import Language.Python.Version3.Parser.Token ( Ident (..) ) +import qualified Data.ByteString.Char8 as BS++--------------------------------------------------------------------------------++-- | A module (Python source file). See <http://docs.python.org/dev/3.0/reference/toplevel_components.html>.+newtype Module = Module [Statement] -- ^ A module is just a sequence of top-level statements.+   deriving Show++-- | A block of statements. A suite is a group of statements controlled by a clause, +-- for example, the body of a loop. See <http://docs.python.org/dev/3.0/reference/compound_stmts.html>.+type Suite = [Statement] ++-- | A compound name constructed with the dot operator.+type DottedName = [Ident]++-- | An entity imported using the \'import\' keyword.+-- See <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-import-statement>.+data ImportItem = +   ImportItem +   { import_item_name :: DottedName -- ^ The name of module to import.+   , import_as_name :: Maybe Ident  -- ^ An optional name to refer to the entity (the \'as\' name). +   }+   deriving Show++-- | An entity imported using the \'from ... import\' construct.+-- See <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-import-statement>+data FromItem = +   FromItem +   { from_item_name :: Ident -- ^ The name of the entity imported. +   , from_as_name :: Maybe Ident -- ^ An optional name to refer to the entity (the \'as\' name).+   }+   deriving Show++-- | Items imported using the \'from ... import\' construct.+data FromItems +   = ImportEverything -- ^ Import everything exported from the module.+   | FromItems [FromItem] -- ^ Import a specific list of items from the module.+   deriving Show++-- | A reference to the module to import from using the \'from ... import\' construct.+data ImportModule +    = ImportRelative ImportModule  -- ^ Relative import. A dot followed by something.+    | ImportDot                    -- ^ Relative import. Dot on its own.+    | ImportName DottedName        -- ^ The name of the module to import from. +    deriving Show++-- | Statements.+--+--  See:+--+-- * <http://docs.python.org/dev/3.0/reference/simple_stmts.html>+--+-- * <http://docs.python.org/dev/3.0/reference/compound_stmts.html>+data Statement +   -- | Import statement.+   = Import { import_items :: [ImportItem] -- ^ Items to import.+     } +   -- | From ... import statement.+   | FromImport +     { from_module :: ImportModule -- ^ Module to import from.+     , from_items :: FromItems  -- ^ Items to import.+     }+   -- | While loop. See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-while-statement>.+   | While +     { while_cond :: Expr -- ^ Loop condition.+     , while_body :: Suite -- ^ Loop body.+     , while_else :: Suite -- ^ Else clause.+     }+   -- | For loop. See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-for-statement>.+   | For +     { for_targets :: [Expr] -- ^ Loop variables.+     , for_generator :: Expr -- ^ Loop generator. +     , for_body :: Suite -- ^ Loop body+     , for_else :: Suite  -- ^ Else clause.+     }+   -- | Function definition. See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#function-definitions>.+   | Fun +     { fun_name :: Ident -- ^ Function name.+     , fun_args :: [Parameter] -- ^ Function parameter list.+     , fun_result_annotation :: Maybe Expr -- ^ Optional result annotation.+     , fun_body :: Suite -- ^ Function body.+     }+   -- | Class definition. See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#class-definitions>.+   | Class +     { class_name :: Ident -- ^ Class name.+     , class_args :: [Argument] -- ^ Class argument list.+     , class_body :: Suite -- ^ Class body.+     }+   -- | Conditional statement (if-elif-else). See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-if-statement>.  +   | Conditional +     { cond_guards :: [(Expr, Suite)] -- ^ Sequence of if-elif conditional clauses.+     , cond_else :: Suite -- ^ Possibly empty unconditional else clause.+     }+   -- | Assignment statement. See <http://docs.python.org/dev/3.0/reference/simple_stmts.html#assignment-statements>.+   | Assign +     { assign_to :: [Expr] -- ^ Entity to assign to. XXX perhaps this should not be a list.+     , assign_expr :: Expr -- ^ Expression to evaluate.+     }+   -- | Augmented assignment statement. See <http://docs.python.org/dev/3.0/reference/simple_stmts.html#augmented-assignment-statements>.+   | AugmentedAssign +     { aug_assign_to :: Expr -- ^ Entity to assign to.+     , aug_assign_op :: AssignOp -- ^ Assignment operator (for example \'+=\').+     , aug_assign_expr :: Expr  -- ^ Expression to evaluate.+     }+   -- | Decorated definition of a function or class.+   | Decorated +     { decorated_decorators :: [Decorator] -- ^ Decorators.+     , decorated_def :: Statement -- ^ Function or class definition to be decorated.+     }+   -- | Return statement (may only occur syntactically nested in a function definition). See <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-return-statement>.+   | Return +     { return_expr :: Maybe Expr -- ^ Optional expression to evaluate and return to caller.+     }+   -- | Try statement (exception handling). See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-try-statement>.+   | Try +     { try_body :: Suite -- ^ Try clause.+     , try_excepts :: [Handler] -- ^ Exception handlers.+     , try_else :: Suite -- ^ Possibly empty else clause, executed if and when control flows off the end of the try clause.+     , try_finally :: Suite -- ^ Possibly empty finally clause.+     }+   -- | Raise statement (exception throwing). See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-raise-statement>+   | Raise +    { raise_expr :: Maybe (Expr, Maybe Expr) -- ^ Optional expression to evaluate, and optional \'from\' clause.+    }+   -- | With statement (context management). See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-with-statement>. And also see: <http://www.python.org/dev/peps/pep-0343/>.+   | With +     { with_context :: Expr -- ^ Context expression (yields a context manager).+     , with_as :: Maybe Expr -- ^ Optional target.+     , with_body :: Suite -- ^ Suite to be managed.+     }+   -- | Pass statement (null operation). See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-pass-statement>+   | Pass+   -- | Break statement (may only occur syntactically nested in a for or while loop, but not nested in a function or class definition within that loop). See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-break-statement>.+   | Break+   -- | Continue statement (may only occur syntactically nested in a for or while loop, but not nested in a function or class definition or finally clause within that loop). See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-continue-statement>.+   | Continue+   -- | Del statement (delete). See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-del-statement>. +   | Delete +     { del_exprs :: [Expr] -- ^ Items to delete.+     }+   -- | Expression statement. See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#expression-statements>. +   | StmtExpr { stmt_expr :: Expr }+   -- | Global declaration. See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-global-statement>. +   | Global +     { global_vars :: [Ident] -- ^ Variables declared global in the current block.+     }+   -- | Nonlocal declaration. See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-nonlocal-statement>.+   | NonLocal +     { nonLocal_vars :: [Ident] -- ^ Variables declared nonlocal in the current block (their binding comes from bound the nearest enclosing scope).+     }+   -- | Assertion. See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-assert-statement>.+   | Assert +     { assert_exprs :: [Expr] -- ^ Expressions being asserted.+     }+   deriving Show++-- | Decorator.+data Decorator = +   Decorator +   { decorator_name :: DottedName -- ^ Decorator name.+   , decorator_args :: [Argument] -- ^ Decorator arguments.+   }+   deriving Show++-- | Formal parameter of function definitions and lambda expressions.+-- +-- See:+--+-- * <http://docs.python.org/dev/3.0/reference/compound_stmts.html#function-definitions>+--+-- * <http://docs.python.org/dev/3.0/reference/expressions.html#calls>+data Parameter+   -- | Ordinary named parameter.+   = Param +     { param_name :: Ident -- ^ Parameter name.+     , param_annotation :: Maybe Expr -- ^ Optional annotation.+     , param_default :: Maybe Expr -- ^ Optional default value.+     }+   -- | Excess positional parameter (single asterisk before its name in the concrete syntax). +   | VarArgsPos +     { param_name :: Ident -- ^ Parameter name.+     , param_annotation :: Maybe Expr -- ^ Optional annotation.+     }+   -- | Excess keyword parameter (double asterisk before its name in the concrete syntax).+   | VarArgsKeyword +     { param_name :: Ident -- ^ Parameter name.+     , param_annotation :: Maybe Expr -- ^ Optional annotation.+     }+   -- | Marker for the end of positional parameters (not a parameter itself).+   | EndPositional +   deriving Show++-- | Arguments to function calls, class declarations and decorators.+data Argument+   -- | Ordinary argument expression.+   = ArgExpr { arg_expr :: Expr }+   -- | Excess positional argument.+   | ArgVarArgsPos { arg_expr :: Expr }+   -- | Excess keyword argument.+   | ArgVarArgsKeyword { arg_expr :: Expr }+   -- | Keyword argument.+   | ArgKeyword +     { arg_keyword :: Ident -- ^ Keyword name.+     , arg_expr :: Expr -- ^ Argument expression.+     }+   deriving Show ++-- | Exception handler. See: <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-try-statement>.+type Handler = (ExceptClause, Suite)+-- | Exception clause. See: <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-try-statement>.+type ExceptClause = Maybe (Expr, Maybe Ident)++-- | Comprehension. See: <http://docs.python.org/dev/3.0/reference/expressions.html#displays-for-lists-sets-and-dictionaries> +data Comprehension e+   = Comprehension { comprehension_expr :: e, comprehension_for :: CompFor }+   deriving Show++-- | Comprehension \'for\' component. See: <http://docs.python.org/dev/3.0/reference/expressions.html#displays-for-lists-sets-and-dictionaries>+data CompFor = CompFor { comp_for_exprs :: [Expr], comp_in_expr :: Expr, comp_for_iter :: Maybe CompIter }+   deriving Show++-- | Comprehension guard. See: <http://docs.python.org/dev/3.0/reference/expressions.html#displays-for-lists-sets-and-dictionaries>.+data CompIf = CompIf { comp_if :: Expr, comp_if_iter :: Maybe CompIter }+   deriving Show++-- | Comprehension iterator (either a \'for\' or an \'if\'). See: <http://docs.python.org/dev/3.0/reference/expressions.html#displays-for-lists-sets-and-dictionaries>.+data CompIter = IterFor CompFor | IterIf CompIf+   deriving Show++-- | Expression.+-- +-- See: <http://docs.python.org/dev/3.0/reference/expressions.html>.+data Expr+   -- | Variable.+   = Var Ident+   -- | Literal integer.+   | Int Integer+   -- | Literal floating point number.+   | Float Double +   -- | Literal imaginary number.+   | Imaginary { imaginary_value :: Double } +   -- | Literal boolean.+   | Bool Bool+   -- | Literal \'None\' value.+   | None +   -- | Ellipsis \'...\'.+   | Ellipsis+   -- | Literal byte string.+   | ByteStrings [BS.ByteString]+   -- | Literal strings (to be concatentated together).+   | Strings [String]+   -- | Function call. See: <http://docs.python.org/dev/3.0/reference/expressions.html#calls>.+   | Call +     { call_fun :: Expr -- ^ Expression yielding a callable object (such as a function).+     , call_args :: [Argument] -- ^ Call arguments.+     }+   -- | Subscription, for example \'x [y]\'. See: <http://docs.python.org/dev/3.0/reference/expressions.html#id5>.+   | Subscript { subscriptee :: Expr, subscript_exprs :: [Expr] }+   -- | Slicing, for example \'w [x:y:z]\'. See: <http://docs.python.org/dev/3.0/reference/expressions.html#id6>.+   | SlicedExpr { slicee :: Expr, slices :: [Slice] } +   -- | Conditional expresison. See: <http://docs.python.org/dev/3.0/reference/expressions.html#boolean-operations>. +   | CondExpr +     { ce_true_branch :: Expr -- ^ Expression to evaluate if condition is True.+     , ce_condition :: Expr -- ^ Boolean condition.+     , ce_false_branch :: Expr -- ^ Expression to evaluate if condition is False.+     }+   -- | Binary operator application.+   | BinaryOp { operator :: Op, left_op_arg :: Expr, right_op_arg :: Expr }+   -- | Unary operator application.+   | UnaryOp { operator :: Op, op_arg :: Expr }+   -- | Anonymous function definition (lambda). See: <http://docs.python.org/dev/3.0/reference/expressions.html#id15>.+   | Lambda { lambda_args :: [Parameter], lambda_body :: Expr }+   -- | N-ary tuple of arity greater than 0. The list should not be empty.+   | Tuple { tuple_exprs :: [Expr] }+   -- | Generator yield. See: <http://docs.python.org/dev/3.0/reference/expressions.html#yield-expressions>.+   | Yield +     { yield_expr :: Maybe Expr -- ^ Optional expression to yield.+     }+   -- | Generator. See: <http://docs.python.org/dev/3.0/reference/expressions.html#generator-expressions>.+   | Generator { gen_comprehension :: Comprehension Expr }+   -- | List comprehension. See: <http://docs.python.org/dev/3.0/reference/expressions.html#list-displays>.+   | ListComp { list_comprehension :: Comprehension Expr }+   -- | List. See: <http://docs.python.org/dev/3.0/reference/expressions.html#list-displays>.+   | List { list_exprs :: [Expr] }+   -- | Dictionary. See: <http://docs.python.org/dev/3.0/reference/expressions.html#dictionary-displays>.+   | Dictionary { dict_mappings :: [(Expr, Expr)] }+   -- | Dictionary comprehension. See: <http://docs.python.org/dev/3.0/reference/expressions.html#dictionary-displays>.+   | DictComp { dict_comprehension :: Comprehension (Expr, Expr) }+   -- | Set. See: <http://docs.python.org/dev/3.0/reference/expressions.html#set-displays>.+   | Set { set_exprs :: [Expr] } +   -- | Set comprehension. <http://docs.python.org/dev/3.0/reference/expressions.html#set-displays>.+   | SetComp { set_comprehension :: Comprehension Expr }+   -- | Starred expression. +   | Starred { starred_expr :: Expr }+   deriving Show++data Slice+   = SliceProper { slice_lower :: Maybe Expr, slice_upper :: Maybe Expr, slice_stride :: Maybe (Maybe Expr) } +   | SliceExpr { slice_expr :: Expr }+   deriving Show++-- | Operators.+data Op +   = And -- ^ \'and\'+   | Or -- ^ \'or\'+   | Not -- ^ \'not\'+   | Exponent -- ^ \'**\'+   | LessThan -- ^ \'<\'+   | GreaterThan -- ^ \'>\'+   | Equality -- ^ \'==\'+   | GreaterThanEquals -- ^ \'>=\'+   | LessThanEquals -- ^ \'<=\'+   | NotEquals  -- ^ \'!=\'+   | In -- ^ \'in\'+   | Is -- ^ \'is\'+   | IsNot -- ^ \'is not\'+   | NotIn -- ^ \'not in\'+   | BinaryOr -- ^ \'|\'+   | Xor -- ^ \'^\'+   | BinaryAnd -- ^ \'&\'+   | ShiftLeft -- ^ \'<<\'+   | ShiftRight -- ^ \'>>\'+   | Multiply -- ^ \'*\'+   | Plus -- ^ \'+\'+   | Minus -- ^ \'-\'+   | Divide -- ^ \'\/\'+   | FloorDivide -- ^ \'\/\/\'+   | Invert -- ^ \'~\' (bitwise inversion of its integer argument)+   | Modulo -- ^ \'%\'+   | Dot -- ^ \'.\'+   deriving (Eq, Show)++-- | Augmented assignment operators.+data AssignOp+   = PlusAssign -- ^ \'+=\'+   | MinusAssign -- ^ \'-=\'+   | MultAssign -- ^ \'*=\'+   | DivAssign -- ^ \'\/=\'+   | ModAssign -- ^ \'%=\'+   | PowAssign -- ^ \'*=\'+   | BinAndAssign -- ^ \'&=\'+   | BinOrAssign -- ^ \'|=\'+   | BinXorAssign -- ^ \'^=\' +   | LeftShiftAssign -- ^ \'<<=\'+   | RightShiftAssign -- ^ \'>>=\'+   | FloorDivAssign -- ^ \'\/\/=\'+   deriving (Eq, Show)
+ src/Language/Python/Version3/Syntax/Pretty.hs view
@@ -0,0 +1,299 @@+-----------------------------------------------------------------------------+-- |+-- Module      : Language.Python.Version3.Syntax.Pretty +-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Maintainer  : bjpop@csse.unimelb.edu.au+-- Stability   : experimental+-- Portability : ghc+--+-- Pretty printing of the Python version 3 abstract syntax. XXX not quite+-- complete.+-----------------------------------------------------------------------------++module Language.Python.Version3.Syntax.Pretty where++import Language.Python.Version3.Syntax.AST ++import Text.PrettyPrint as TextPP+import qualified Data.ByteString.Char8 as BS++--------------------------------------------------------------------------------++-- | All types which can be transformed into a 'Doc'.+class Pretty a where+   pretty :: a -> Doc++-- | Transform values into strings.+prettyText :: Pretty a => a -> String+prettyText = render . pretty++-- | Conditionally wrap parentheses around an item.+parensIf :: Pretty a => (a -> Bool) -> a -> Doc+parensIf test x = if test x then parens $ pretty x else pretty x ++-- | A list of things separated by commas.+commaList :: Pretty a => [a] -> Doc+commaList = hsep . punctuate comma . map pretty ++instance Pretty BS.ByteString where+   -- XXX should handle the escaping properly+   pretty b = text "b" <> text (show $ BS.unpack b)++instance Pretty Int where+  pretty = int++instance Pretty Integer where+  pretty = integer++instance Pretty Double where+   pretty = double++instance Pretty Bool where+  pretty True = text "True"+  pretty False = text "False"++instance Pretty a => Pretty (Maybe a) where+   pretty Nothing = empty+   pretty (Just x) = pretty x++prettyString :: String -> Doc+   -- XXX should handle the escaping properly+prettyString str = text (show str)++instance Pretty Module where+   -- pretty :: Module -> Doc +   pretty (Module stmts) = vcat $ map pretty stmts ++instance Pretty Ident where+   pretty (Ident name) = text name++dot :: Doc+dot = char '.'++prettyDottedName :: DottedName -> Doc+prettyDottedName [] = empty+prettyDottedName [name] = pretty name+prettyDottedName (name:rest@(_:_))+   = pretty name <> dot <> prettyDottedName rest++instance Pretty ImportItem where+   pretty (ImportItem {import_item_name = name, import_as_name = asName})+      = prettyDottedName name <+> (maybe empty (\n -> text "as" <+> pretty n) asName)++instance Pretty FromItem where+   pretty (FromItem { from_item_name = name, from_as_name = asName })+      = pretty name <+> (maybe empty (\n -> text "as" <+> pretty n) asName) ++instance Pretty FromItems where+   pretty ImportEverything = char '*'+   pretty (FromItems [item]) = pretty item +   pretty (FromItems items) = parens (commaList items)++instance Pretty ImportModule where+   pretty (ImportRelative importModule) = dot <> pretty importModule+   pretty ImportDot = dot+   pretty (ImportName dottedName) = prettyDottedName dottedName ++prettySuite :: [Statement] -> Doc+prettySuite stmts = vcat $ map pretty stmts ++optionalKeywordSuite :: String -> [Statement] -> Doc+optionalKeywordSuite _ [] = empty+optionalKeywordSuite keyword stmts = text keyword <> colon $+$ indent (prettySuite stmts)++prettyArgList :: [Argument] -> Doc+prettyArgList = parens . commaList ++prettyOptionalArgList :: [Argument] -> Doc+prettyOptionalArgList [] = empty+prettyOptionalArgList list = parens $ commaList list++prettyGuards :: [(Expr, Suite)] -> Doc+prettyGuards [] = empty+prettyGuards ((cond,body):guards)+   = text "elif" <+> pretty cond <> colon $+$ indent (prettySuite body) $+$+     prettyGuards guards++indent :: Doc -> Doc+indent doc = nest 4 doc++-- XXX is there a better way to do this?+blankLine :: Doc+blankLine = text []++instance Pretty Statement where+   -- pretty :: Statement -> Doc +   pretty (Import { import_items = items}) = text "import" <+> commaList items +   pretty stmt@(FromImport {})+      = text "from" <+> pretty (from_module stmt) <+> text "import" <+> pretty (from_items stmt)+   pretty stmt@(While {})+      = text "while" <+> pretty (while_cond stmt) <> colon $+$+        indent (prettySuite (while_body stmt)) $+$ optionalKeywordSuite "else" (while_else stmt)+   pretty stmt@(For {})+      = text "for" <+> commaList (for_targets stmt) <+> text "in" <+> pretty (for_generator stmt) <> colon $+$+        indent (prettySuite (for_body stmt)) $+$ optionalKeywordSuite "else" (for_else stmt)+   pretty stmt@(Fun {})+      = text "def" <+> pretty (fun_name stmt) <> parens (commaList (fun_args stmt)) <+> +        pretty (fun_result_annotation stmt) <> colon $+$ indent (prettySuite (fun_body stmt)) +   pretty stmt@(Class {})+      = text "class" <+> pretty (class_name stmt) <> prettyOptionalArgList (class_args stmt) <> +        colon $+$ indent (prettySuite (class_body stmt)) +   pretty stmt@(Conditional { cond_guards = guards, cond_else = optionalElse })+      = case guards of+           (cond,body):xs -> +              text "if" <+> pretty cond <> colon $+$ indent (prettySuite body) $+$ +              prettyGuards xs $+$+              optionalKeywordSuite "else" optionalElse+   -- XXX is the assign_to always a singleton?+   pretty (Assign { assign_to = pattern, assign_expr = e })+      = commaList pattern <+> equals <+> pretty e+   pretty (AugmentedAssign { aug_assign_to = to_expr, aug_assign_op = op, aug_assign_expr = e})+      = pretty to_expr <+> pretty op <+> pretty e +   pretty (Decorated { decorated_decorators = decs, decorated_def = stmt})+      = vcat (map pretty decs) $+$ pretty stmt+   pretty (Return { return_expr = e }) = text "return" <+> pretty e+   pretty (Try { try_body = body, try_excepts = handlers, try_else = optionalElse, try_finally = finally})+      = text "try" <> colon $+$ indent (prettySuite body) $+$+        prettyHandlers handlers $+$ optionalKeywordSuite "else" optionalElse $+$ +        optionalKeywordSuite "finally" finally +   pretty (Raise { raise_expr = e })+      = text "raise" <+> +        maybe empty (\ (x, fromE) -> pretty x <+> (maybe empty (\f -> text "from" <+> pretty f) fromE)) e+   pretty (With { with_context = context, with_as = asExpr, with_body = body })+      = text "with" <+> maybe empty (\e -> text "as" <+> pretty e) asExpr <> colon $+$+        indent (prettySuite body)+   pretty Pass = text "pass"+   pretty Break = text "break"+   pretty Continue = text "continue"+   pretty (Delete { del_exprs = es }) = text "del" <+> commaList es+   pretty (StmtExpr { stmt_expr = e }) = pretty e+   pretty (Global { global_vars = idents }) = text "global" <+> commaList idents+   pretty (NonLocal { nonLocal_vars = idents }) = text "nonlocal" <+> commaList idents+   pretty (Assert { assert_exprs = es }) = text "assert" <+> commaList es++prettyHandlers :: [Handler] -> Doc+prettyHandlers = foldr (\next rec -> prettyHandler next $+$ rec) empty++prettyHandler :: Handler -> Doc+prettyHandler (exceptClause, suite) +   = text "except" <+> prettyExceptClause exceptClause <> colon $+$ indent (prettySuite suite)+prettyExceptClause :: ExceptClause -> Doc+prettyExceptClause Nothing = empty+prettyExceptClause (Just (e, target))+   = pretty e <+> maybe empty (\t -> text "as" <+> pretty t) target++instance Pretty Decorator where+   pretty (Decorator { decorator_name = name, decorator_args = args })+      = char '@' <> prettyDottedName name <+> prettyOptionalArgList args++instance Pretty Parameter where+   pretty (Param { param_name = ident, param_annotation = annot, param_default = def})+      = pretty ident <> (maybe empty (\e -> colon <> pretty e <> space) annot) <> +        maybe empty (\e -> equals <> pretty e) def +   pretty (VarArgsPos { param_name = ident, param_annotation = annot})+      = char '*' <> pretty ident <> (maybe empty (\e -> colon <> pretty e) annot)+   pretty (VarArgsKeyword { param_name = ident, param_annotation = annot })+      = text "**" <> pretty ident <> (maybe empty (\e -> colon <> pretty e) annot)+   pretty EndPositional = char '*' ++instance Pretty Argument where+   pretty (ArgExpr { arg_expr = e }) = pretty e+   pretty (ArgVarArgsPos { arg_expr = e}) = char '*' <> pretty e+   pretty (ArgVarArgsKeyword { arg_expr = e }) = text "**" <> pretty e+   pretty (ArgKeyword { arg_keyword = ident, arg_expr = e }) +      = pretty ident <> equals <> pretty e++instance Pretty a => Pretty (Comprehension a) where+   pretty (Comprehension { comprehension_expr = e, comprehension_for = for }) +      = pretty e <+> pretty for ++instance Pretty CompFor where+   pretty (CompFor { comp_for_exprs = es, comp_in_expr = e, comp_for_iter = iter }) +      = text "for" <+> commaList es <+> text "in" <+> pretty e <+> pretty iter++instance Pretty CompIf where+   pretty (CompIf { comp_if = e, comp_if_iter = iter }) +      = text "if" <+> pretty e <+> pretty iter ++instance Pretty CompIter where+   pretty (IterFor compFor) = pretty compFor +   pretty (IterIf compIf) = pretty compIf++instance Pretty Expr where+   pretty (Var i) = pretty i+   pretty (Int i) = pretty i+   pretty (Float d) = pretty d+   pretty (Imaginary { imaginary_value = i }) = pretty i <> char 'j' +   pretty (Bool b) = pretty b+   pretty None = text "None"+   pretty Ellipsis = text "..."+   pretty (ByteStrings bs) = hcat (map pretty bs)+   pretty (Strings ss) = hcat (map prettyString ss)+   pretty (Call { call_fun = f, call_args = args }) = pretty f <> prettyArgList args+   pretty (Subscript { subscriptee = e, subscript_exprs = subs })+      = pretty e <> brackets (commaList subs)+   pretty (SlicedExpr { slicee = e, slices = ss })+      = pretty e <> brackets (commaList ss) +   pretty (CondExpr { ce_true_branch = trueBranch, ce_condition = cond, ce_false_branch = falseBranch })+      = pretty trueBranch <+> text "if" <+> pretty cond <+> text "else" <+> pretty falseBranch+   pretty (BinaryOp { operator = op, left_op_arg = left, right_op_arg = right })+      = pretty left <> (if op == Dot then dot else space <> pretty op <> space) <> pretty right+   pretty (UnaryOp { operator = op, op_arg = e }) = pretty op <+> pretty e+   pretty (Lambda { lambda_args = args, lambda_body = body })+      = text "lambda" <+> commaList args <> colon <+> pretty body+   pretty (Tuple { tuple_exprs = es }) = parens $ commaList es+   pretty (Yield { yield_expr = e })+      = text "yield" <+> pretty e+   pretty (List { list_exprs = es }) = brackets (commaList es)+   pretty (Dictionary { dict_mappings = mappings })+      = braces (hsep (punctuate comma $ map (\ (e1,e2) -> pretty e1 <> colon <> pretty e2) mappings))+   pretty (Set { set_exprs = es }) = braces $ commaList es++instance Pretty Slice where+   pretty (SliceProper { slice_lower = lower, slice_upper = upper, slice_stride = stride })+      = pretty lower <> colon <> pretty upper <> (maybe empty (\s -> colon <> pretty s) stride)+   pretty (SliceExpr { slice_expr = e }) = pretty e++instance Pretty Op where+   pretty And = text "and"+   pretty Or = text "or"+   pretty Not = text "not"+   pretty Exponent = text "**"+   pretty LessThan = text "<"+   pretty GreaterThan = text ">"+   pretty Equality = text "=="+   pretty GreaterThanEquals = text ">="+   pretty LessThanEquals = text "<="+   pretty NotEquals = text "!="+   pretty In = text "in"+   pretty Is = text "is"+   pretty IsNot = text "is not"+   pretty NotIn = text "not in"+   pretty BinaryOr = text "|"+   pretty Xor = text "^"+   pretty BinaryAnd = text "&"+   pretty ShiftLeft = text "<<"+   pretty ShiftRight = text ">>"+   pretty Multiply = text "*"+   pretty Plus = text "+"+   pretty Minus = text "-"+   pretty Divide = text "/"+   pretty FloorDivide = text "//"+   pretty Invert = text "~"+   pretty Modulo = text "%"+   pretty Dot = dot++instance Pretty AssignOp where+   pretty PlusAssign = text "+="+   pretty MinusAssign = text "-="+   pretty MultAssign = text "*="+   pretty DivAssign = text "/="+   pretty ModAssign = text "%="+   pretty PowAssign = text "**="+   pretty BinAndAssign = text "&="+   pretty BinOrAssign = text "|="+   pretty BinXorAssign = text "^="+   pretty LeftShiftAssign = text "<<="+   pretty RightShiftAssign = text ">>="+   pretty FloorDivAssign = text "//="