packages feed

haddock 2.13.2.1 → 2.14.1

raw patch · 155 files changed

+10212/−5494 lines, 155 filesdep +QuickCheckdep +bytestringdep +hspecdep ~Cabaldep ~basedep ~ghcnew-uploader

Dependencies added: QuickCheck, bytestring, hspec

Dependency ranges changed: Cabal, base, ghc

Files

CHANGES view
@@ -1,6 +1,63 @@+Changes in version 2.14.1++ * Render * and -> with their UnicodeSyntax equivalents if -U is enabled++ * Display minimal complete definitions for type classes++ * Hide right hand side of TF instances with hidden names on the RHS++Changes in version 2.14.0++ * Print entities with missing documentation (#258)++ * Print a warning message when given `-optghc` instead of `--optghc` (#5)++ * Add `--compatible-interface-versions` (#231)++ * Allow to generate latex documentation for FFI declarations (#247)++ * Add copyright and license information to generated documentation++ * Improved to Unicode support++ * Bold markup support++ * Nested paragraphs++ * Better escaping++ * Header markup++ * Parser should no longer fail to parse any markup++ * {-# OPTIONS_HADDOCK show-extensions #-} pragma will show the GHC extensions+   enabled in the module.++ * Properly render License field (#271)++ * Print type/data family instances (for exported types only)++ * Fix display of poly-kinded type operators (#189)++ * PatternSynonyms support++ * Fix display of implicit parameters (#260)++ * Fix rendering of Contents when links are present (#276)++ * Fix documentation duplication on record fields (#195)++ * Add `--source-entity-line` for exact line links (eg. things defined+   inside TH splices) (#79)++ * Display fixity information for names with nonstandard fixities++ * Bird tracks specified like "> code" no longer suffer from an extra leading+   space in the code output+ Changes in version 2.13.2 - * Handle HsExplicitListTy in renameer (#213)+ * Handle HsExplicitListTy in renamer (#213)   * Allow haddock markup in deprecation messages @@ -107,7 +164,7 @@   * Minor changes to the API  Changes in the version that comes with GHC 7.0.1-  +   [This version claims it is 2.8.0 but is actually based on 2.8.1]    * Fix URL creation on Windows: Use / not \ in URLs.@@ -253,7 +310,7 @@     (#65)    * Fixes to the Hoogle backend-  +   * Improvements to the haddock library    * Many other fixes (including #67, #69, #58, #57)@@ -344,7 +401,7 @@     in GHC 6.8.2    * Format of module attributes has changed. The only way of specifiying-    module attributes is via a new OPTIONS_HADDOCK pragma. Example: +    module attributes is via a new OPTIONS_HADDOCK pragma. Example:     {-# OPTIONS_HADDOCK hide, prune #-}    * Haddock understands literate source files@@ -460,7 +517,7 @@     now turned off by default; Haddock should be a little less noisy     in general. -  * Markup for definition lists has been added.  See the documentation +  * Markup for definition lists has been added.  See the documentation     for details.    * New option: --package for setting the package name.  The package@@ -500,7 +557,7 @@     which describe the exports of a set of modules.  This is useful     for generating documentation which hyperlinks to     previously-generated documentation.-    +   * Support for generating the extra files required by the Microsoft     Help compiler. @@ -511,9 +568,9 @@  ----------------------------------------------------------------------------- Changes in version 0.3:-  -  * Documentation on individual function arguments is now implemented -  ++  * Documentation on individual function arguments is now implemented+   * Links can be made to identifiers that aren't in scope, by using     the fully qualified name. 
− dist/build/Haddock/Lex.hs
@@ -1,429 +0,0 @@-{-# LANGUAGE CPP,MagicHash #-}-{-# LINE 10 "src/Haddock/Lex.x" #-}--{-# LANGUAGE BangPatterns #-}   -- Generated by Alex-{-# OPTIONS -Wwarn -w #-}--- The above warning supression flag is a temporary kludge.--- While working on this module you are encouraged to remove it and fix--- any warnings in the module. See---     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings--- for details--module Haddock.Lex (-	Token(..),-	LToken,-	tokenise- ) where--import Lexer hiding (Token)-import Parser ( parseIdentifier )-import StringBuffer-import RdrName-import SrcLoc-import DynFlags-import FastString--import Data.Char-import Data.Word (Word8)-import Numeric-import System.IO.Unsafe-import Debug.Trace--#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\xfc\xff\xff\xff\xf2\x00\x00\x00\xfe\xff\xff\xff\xe8\x01\x00\x00\xde\x02\x00\x00\x03\x00\x00\x00\xea\x01\x00\x00\x00\x00\x00\x00\xd4\x03\x00\x00\x12\x00\x00\x00\xca\x04\x00\x00\xc0\x05\x00\x00\xc8\x02\x00\x00\x24\x00\x00\x00\xf4\x00\x00\x00\x40\x06\x00\x00\xc0\x06\x00\x00\x40\x07\x00\x00\xc0\x07\x00\x00\x40\x08\x00\x00\xc0\x08\x00\x00\x40\x09\x00\x00\xc0\x09\x00\x00\x40\x0a\x00\x00\xc0\x0a\x00\x00\x40\x0b\x00\x00\xc0\x0b\x00\x00\x40\x0c\x00\x00\xc0\x0c\x00\x00\xa2\xff\xff\xff\x40\x0d\x00\x00\xc0\x0d\x00\x00\x40\x0e\x00\x00\xc0\x0e\x00\x00\x40\x0f\x00\x00\xc0\x0f\x00\x00\xa0\xff\xff\xff\x00\x00\x00\x00\x31\x10\x00\x00\x00\x00\x00\x00\xa2\x10\x00\x00\x00\x00\x00\x00\x13\x11\x00\x00\x00\x00\x00\x00\x84\x11\x00\x00\x00\x00\x00\x00\xf5\x11\x00\x00\x00\x00\x00\x00\x66\x12\x00\x00\x00\x00\x00\x00\xd7\x12\x00\x00\x00\x00\x00\x00\x48\x13\x00\x00\x00\x00\x00\x00\xb9\x13\x00\x00\x00\x00\x00\x00\x2f\x04\x00\x00\x00\x00\x00\x00\x31\x05\x00\x00\x00\x00\x00\x00\xfa\x13\x00\x00\x00\x00\x00\x00\x3b\x14\x00\x00\x00\x00\x00\x00\x7c\x14\x00\x00\x00\x00\x00\x00\xbd\x14\x00\x00\x00\x00\x00\x00\x2e\x15\x00\x00\xa3\xff\xff\xff\x00\x00\x00\x00\x6f\x15\x00\x00\x00\x00\x00\x00\xb0\x15\x00\x00\xda\x00\x00\x00\xcc\x01\x00\x00\x00\x00\x00\x00\xf1\x15\x00\x00\xf1\x16\x00\x00\xb1\x16\x00\x00\x00\x00\x00\x00\xb1\x17\x00\x00\x71\x17\x00\x00\x00\x00\x00\x00\x71\x18\x00\x00\x31\x18\x00\x00\x00\x00\x00\x00\x31\x19\x00\x00\xf1\x18\x00\x00\x00\x00\x00\x00\xf1\x19\x00\x00\xb1\x19\x00\x00\x00\x00\x00\x00\xb1\x1a\x00\x00\x71\x1a\x00\x00\x00\x00\x00\x00\xd6\xff\xff\xff\x00\x00\x00\x00\xb2\x1a\x00\x00\x39\x00\x00\x00\xb2\x1b\x00\x00\xd7\xff\xff\xff\x72\x1b\x00\x00\x00\x00\x00\x00\x72\x1c\x00\x00\x32\x1c\x00\x00\x00\x00\x00\x00\x32\x1d\x00\x00\xf2\x1c\x00\x00\x00\x00\x00\x00\xe8\x1d\x00\x00\xde\x1e\x00\x00\xd8\xff\xff\xff\xf6\x00\x00\x00\xde\x1f\x00\x00\x67\x1d\x00\x00\x00\x00\x00\x00\xd9\xff\xff\xff\x20\x02\x00\x00\x13\x01\x00\x00\xdb\xff\xff\xff\x54\x20\x00\x00\x00\x00\x00\x00\xdc\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x21\x00\x00\x40\x22\x00\x00\x41\x21\x00\x00\xfa\xff\xff\xff\x36\x23\x00\x00\x2c\x24\x00\x00\x00\x00\x00\x00\x22\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--alex_table :: AlexAddr-alex_table = AlexA# "\x00\x00\x07\x00\x7b\x00\x07\x00\x07\x00\x07\x00\x86\x00\x72\x00\x87\x00\x72\x00\x72\x00\x72\x00\x77\x00\x85\x00\x77\x00\x77\x00\x77\x00\x46\x00\x1e\x00\x66\x00\x71\x00\x7a\x00\x88\x00\x84\x00\x07\x00\x7e\x00\x79\x00\x76\x00\x8c\x00\x4c\x00\x72\x00\x00\x00\x64\x00\x00\x00\x7f\x00\x77\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x25\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x74\x00\x10\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x63\x00\x14\x00\x44\x00\x44\x00\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x00\x00\x00\x00\x00\x72\x00\x87\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x8b\x00\x96\x00\x72\x00\x00\x00\x99\x00\x98\x00\x00\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x97\x00\x00\x00\x00\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x9b\x00\x95\x00\x00\x00\x00\x00\x8b\x00\x00\x00\x61\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x82\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x00\x00\x9a\x00\x9e\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x6a\x00\x12\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x4a\x00\x1c\x00\x34\x00\x34\x00\x34\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x89\x00\x07\x00\x7b\x00\x07\x00\x07\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x77\x00\x85\x00\x77\x00\x77\x00\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x5f\x00\x15\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x43\x00\x1f\x00\x30\x00\x30\x00\x30\x00\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x91\x00\x00\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x92\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5c\x00\x16\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x41\x00\x20\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x96\x00\x00\x00\x00\x00\x99\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x00\x9f\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x6a\x00\x12\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x4a\x00\x1c\x00\x34\x00\x34\x00\x34\x00\x35\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x50\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x53\x00\x19\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3b\x00\x23\x00\x28\x00\x28\x00\x28\x00\x29\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x53\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x50\x00\x1a\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x39\x00\x24\x00\x26\x00\x26\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x6c\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\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\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x65\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x10\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x5e\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x5b\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x58\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x55\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x52\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x4f\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x11\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x12\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x13\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x15\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x16\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x17\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x18\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x19\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x1a\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x39\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\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\x48\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\x4a\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\x4e\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\x56\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\x59\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\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\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\x67\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\x6a\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\x6d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\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\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x56\x00\x18\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3d\x00\x22\x00\x2a\x00\x2a\x00\x2a\x00\x2b\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x59\x00\x17\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3f\x00\x21\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x91\x00\x00\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x92\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x67\x00\x13\x00\x47\x00\x47\x00\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\x1d\x00\x32\x00\x32\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x00\x00\x0d\x00\x0d\x00\x8f\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x53\x00\x19\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3b\x00\x23\x00\x28\x00\x28\x00\x28\x00\x29\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x50\x00\x1a\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x39\x00\x24\x00\x26\x00\x26\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6d\x00\x11\x00\x4d\x00\x4d\x00\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\x1b\x00\x36\x00\x36\x00\x36\x00\x37\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x56\x00\x18\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3d\x00\x22\x00\x2a\x00\x2a\x00\x2a\x00\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x6a\x00\x12\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x4a\x00\x1c\x00\x34\x00\x34\x00\x34\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#--alex_check :: AlexAddr-alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x6f\x00\x72\x00\x70\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x20\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x23\x00\x20\x00\xff\xff\x28\x00\xff\xff\x2a\x00\x20\x00\xff\xff\x2d\x00\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\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3e\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\x5b\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\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\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\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\x22\x00\x23\x00\x20\x00\xff\xff\x26\x00\x27\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x2f\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3c\x00\x3b\x00\xff\xff\xff\xff\x40\x00\xff\xff\x3e\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x5c\x00\x5d\x00\xff\xff\xff\xff\x60\x00\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\x2a\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x58\x00\xff\xff\xff\xff\xff\xff\x3e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x78\x00\x5b\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\x70\x00\xff\xff\xff\xff\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\x22\x00\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\xff\xff\xff\xff\x60\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\x2f\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\x3e\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x23\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\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\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\xff\xff\x3e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\xff\xff\xff\xff\x60\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00"#--alex_deflt :: AlexAddr-alex_deflt = AlexA# "\xff\xff\x01\x00\x9d\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\x9d\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x38\x00\x3a\x00\x3a\x00\x3c\x00\x3c\x00\x3e\x00\x3e\x00\x40\x00\x40\x00\x42\x00\x42\x00\x47\x00\x47\x00\x49\x00\x49\x00\x4d\x00\x4d\x00\x51\x00\x51\x00\x54\x00\x54\x00\x57\x00\x57\x00\x5a\x00\x5a\x00\x5d\x00\x5d\x00\x60\x00\x60\x00\x62\x00\x62\x00\xff\xff\x68\x00\x68\x00\x6b\x00\x6b\x00\xff\xff\xff\xff\x6e\x00\x6e\x00\x0c\x00\x0c\x00\x0c\x00\x0b\x00\x0b\x00\x0b\x00\x6f\x00\x6f\x00\x6f\x00\x70\x00\x70\x00\x70\x00\x05\x00\x05\x00\x05\x00\x04\x00\x04\x00\x04\x00\xff\xff\x75\x00\x75\x00\xff\xff\x7a\x00\xff\xff\x7a\x00\x7a\x00\x9d\x00\x9d\x00\x9d\x00\x93\x00\x93\x00\x93\x00\x6f\x00\x70\x00\xff\xff\xff\xff\x01\x00\x01\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\x0b\x00\x0c\x00\xff\xff\xff\xff\x93\x00\x6f\x00\xff\xff\x9d\x00\xff\xff\xff\xff"#--alex_accept = listArray (0::Int,159) [[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_13))],[],[(AlexAcc (alex_action_17))],[],[],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_14))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAccSkip)],[(AlexAcc (alex_action_1))],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_4))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_6))],[(AlexAcc (alex_action_7))],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_21))],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_25))],[(AlexAcc (alex_action_25))],[(AlexAcc (alex_action_26))],[(AlexAcc (alex_action_27))],[(AlexAcc (alex_action_28))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_30))],[(AlexAcc (alex_action_31))],[(AlexAcc (alex_action_32))],[(AlexAcc (alex_action_33))]]-{-# LINE 117 "src/Haddock/Lex.x" #-}---- | A located token-type LToken = (Token, AlexPosn)--data Token-  = TokPara-  | TokNumber-  | TokBullet-  | TokDefStart-  | TokDefEnd-  | TokSpecial Char-  | TokIdent RdrName-  | TokString String-  | TokURL String-  | TokPic String-  | TokEmphasis String-  | TokAName String-  | TokBirdTrack String-  | TokProperty String-  | TokExamplePrompt String-  | TokExampleExpression String-  | TokExampleResult String---  deriving Show--tokenPos :: LToken -> (Int, Int)-tokenPos t = let AlexPn _ line col = snd t in (line, col)---- -------------------------------------------------------------------------------- Alex support stuff---- XXX: copied the posn wrapper code from Alex to make this lexer work--- with both Alex 2.x and Alex 3.x.  However, we are not using the--- Unicode/UTF-8 support in Alex 3.x, and Unicode documentation will--- probably get mangled.--type AlexInput = (AlexPosn,     -- current position,-                  Char,         -- previous char-                  String)       -- current input string--alexInputPrevChar :: AlexInput -> Char-alexInputPrevChar (p,c,s) = c--alexGetByte :: AlexInput -> Maybe (Word8,AlexInput)-alexGetByte (p,c,[]) = Nothing-alexGetByte (p,_,(c:s))  = let p' = alexMove p c-                              in p' `seq`  Just (fromIntegral (ord c), (p', c, s))---- for compat with Alex 2.x:-alexGetChar :: AlexInput -> Maybe (Char,AlexInput)-alexGetChar i = case alexGetByte i of-                  Nothing     -> Nothing-                  Just (b,i') -> Just (chr (fromIntegral b), i')--alexMove :: AlexPosn -> Char -> AlexPosn-alexMove (AlexPn a l c) '\t' = AlexPn (a+1)  l     (((c+7) `div` 8)*8+1)-alexMove (AlexPn a l c) '\n' = AlexPn (a+1) (l+1)   1-alexMove (AlexPn a l c) _    = AlexPn (a+1)  l     (c+1)--data AlexPosn = AlexPn !Int !Int !Int-        deriving (Eq,Show)--type StartCode = Int-type Action = AlexPosn -> String -> StartCode -> (StartCode -> [LToken]) -> DynFlags -> [LToken]--tokenise :: DynFlags -> String -> (Int, Int) -> [LToken]-tokenise dflags str (line, col) = let toks = go (posn, '\n', eofHack str) para in {-trace (show toks)-} toks-  where-    posn = AlexPn 0 line col--    go inp@(pos, _, str) sc =-	  case alexScan inp sc of-		AlexEOF -> []-		AlexError _ -> []-		AlexSkip  inp' _       -> go inp' sc-		AlexToken inp'@(pos',_,_) len act -> act pos (take len str) sc (\sc -> go inp' sc) dflags---- NB. we add a final \n to the string, (see comment in the beginning of line--- production above).-eofHack str = str++"\n"--andBegin  :: Action -> StartCode -> Action-andBegin act new_sc = \pos str _ cont dflags -> act pos str new_sc cont dflags--token :: Token -> Action-token t = \pos _ sc cont _ -> (t, pos) : cont sc--strtoken, strtokenNL :: (String -> Token) -> Action-strtoken t = \pos str sc cont _ -> (t str, pos) : cont sc-strtokenNL t = \pos str sc cont _ -> (t (filter (/= '\r') str), pos) : cont sc--- ^ We only want LF line endings in our internal doc string format, so we--- filter out all CRs.--begin :: StartCode -> Action-begin sc = \_ _ _ cont _ -> cont sc---- -------------------------------------------------------------------------------- Lex a string as a Haskell identifier--ident :: Action-ident pos str sc cont dflags = -  case parseIdent dflags loc id of-	Just names -> (TokIdent names, pos) : cont sc-	Nothing -> (TokString str, pos) : cont sc- where id = init (tail str)-       -- TODO: Get the real filename here. Maybe we should just be-       --       using GHC SrcLoc's ourself?-       filename = mkFastString "<unknown file>"-       loc = case pos of-             AlexPn _ line col ->-                 mkRealSrcLoc filename line col--parseIdent :: DynFlags -> RealSrcLoc -> String -> Maybe RdrName-parseIdent dflags loc str0 = -  let buffer = stringToStringBuffer str0-      pstate = mkPState dflags buffer loc-      result = unP parseIdentifier pstate -  in case result of -       POk _ name -> Just (unLoc name)-       _ -> Nothing---birdtrack,def,example,exampleexpr,exampleresult,line,para,property,string :: Int-birdtrack = 1-def = 2-example = 3-exampleexpr = 4-exampleresult = 5-line = 6-para = 7-property = 8-string = 9-alex_action_1 =  begin birdtrack -alex_action_2 =  strtoken TokProperty `andBegin` property-alex_action_3 =  strtoken TokExamplePrompt `andBegin` exampleexpr -alex_action_4 =  token TokBullet `andBegin` string -alex_action_5 =  token TokDefStart `andBegin` def -alex_action_6 =  token TokNumber `andBegin` string -alex_action_7 =  token TokNumber `andBegin` string -alex_action_8 =  begin string -alex_action_9 =  begin birdtrack -alex_action_10 =  strtoken TokExamplePrompt `andBegin` exampleexpr -alex_action_11 =  token TokPara `andBegin` para -alex_action_12 =  begin string -alex_action_13 =  strtokenNL TokBirdTrack `andBegin` line -alex_action_14 =  token TokPara `andBegin` para -alex_action_15 =  token TokPara `andBegin` para -alex_action_16 =  strtoken TokExamplePrompt `andBegin` exampleexpr -alex_action_17 =  begin exampleresult -alex_action_18 =  strtokenNL TokExampleExpression `andBegin` example -alex_action_19 =  strtokenNL TokExampleResult `andBegin` example -alex_action_20 =  strtoken $ \s -> TokSpecial (head s) -alex_action_21 =  strtoken $ \s -> TokPic (init $ init $ tail $ tail s) -alex_action_22 =  strtoken $ \s -> TokURL (init (tail s)) -alex_action_23 =  strtoken $ \s -> TokAName (init (tail s)) -alex_action_24 =  strtoken $ \s -> TokEmphasis (init (tail s)) -alex_action_25 =  ident -alex_action_26 =  strtoken (TokString . tail) -alex_action_27 =  strtoken $ \s -> TokString [chr (read (init (drop 2 s)))] -alex_action_28 =  strtoken $ \s -> case readHex (init (drop 3 s)) of [(n,_)] -> TokString [chr n] -alex_action_29 =  strtoken TokString -alex_action_30 =  strtokenNL TokString `andBegin` line -alex_action_31 =  strtoken TokString -alex_action_32 =  token TokDefEnd `andBegin` string -alex_action_33 =  strtoken TokString -{-# 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 37 "templates/GenericTemplate.hs" #-}--{-# LINE 47 "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 alexGetByte input of-			Nothing -> ----				   AlexEOF-			Just _ ->----				   AlexError input'--	(AlexLastSkip input'' len, _) ->----		AlexSkip input'' len--	(AlexLastAcc k input''' len, _) ->----		AlexToken input''' len k----- Push the input through the DFA, remembering the most recent accepting--- state it encountered.--alex_scan_tkn user orig_input len input s last_acc =-  input `seq` -- strict in the input-  let -	new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))-  in-  new_acc `seq`-  case alexGetByte input of-     Nothing -> (new_acc, input)-     Just (c, new_input) -> ----	let-		(base) = alexIndexInt32OffAddr alex_base s-		((I# (ord_c))) = fromIntegral 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 (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)-                                                -- note that the length is increased ONLY if this is the 1st byte in a char encoding)-			new_input new_s new_acc--  where-	check_accs [] = last_acc-	check_accs (AlexAcc a : _) = AlexLastAcc a input (I# (len))-	check_accs (AlexAccSkip : _)  = AlexLastSkip  input (I# (len))-	check_accs (AlexAccPred a predx : rest)-	   | predx user orig_input (I# (len)) input-	   = AlexLastAcc a input (I# (len))-	check_accs (AlexAccSkipPred predx : rest)-	   | predx 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--instance Functor AlexLastAcc where-    fmap f AlexNone = AlexNone-    fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z-    fmap f (AlexLastSkip x y) = AlexLastSkip x y--data AlexAcc a user-  = 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--alexPrevCharMatches f _ input _ _ = f (alexInputPrevChar input)----alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _ -alexPrevCharIsOneOf arr _ input _ _ = arr ! alexInputPrevChar input----alexRightContext :: Int -> AlexAccPred _-alexRightContext (I# (sc)) user _ _ input = -     case alex_scan_tkn user input 0# input sc AlexNone of-	  (AlexNone, _) -> False-	  _ -> True-	-- TODO: there's no need to find the longest-	-- match when checking the right context, just-	-- the first match will do.---- used by wrappers-iUnbox (I# (i)) = i
− dist/build/Haddock/Parse.hs
@@ -1,859 +0,0 @@-{-# OPTIONS_GHC -w #-}-{-# OPTIONS -fglasgow-exts -cpp #-}-{-# LANGUAGE BangPatterns #-} -- required for versions of Happy before 1.18.6-{-# OPTIONS -Wwarn -w #-}--- The above warning supression flag is a temporary kludge.--- While working on this module you are encouraged to remove it and fix--- any warnings in the module. See---     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings--- for details--module Haddock.Parse (parseString, parseParas) where--import Haddock.Lex-import Haddock.Types (Doc(..), Example(Example), Hyperlink(..))-import Haddock.Doc-import HsSyn-import RdrName-import Data.Char  (isSpace)-import Data.Maybe (fromMaybe)-import Data.List  (stripPrefix)-import qualified Data.Array as Happy_Data_Array-import qualified GHC.Exts as Happy_GHC_Exts---- parser produced by Happy Version 1.18.10--newtype HappyAbsSyn  = HappyAbsSyn HappyAny-#if __GLASGOW_HASKELL__ >= 607-type HappyAny = Happy_GHC_Exts.Any-#else-type HappyAny = forall a . a-#endif-happyIn5 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn5 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn5 #-}-happyOut5 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut5 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut5 #-}-happyIn6 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn6 #-}-happyOut6 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut6 #-}-happyIn7 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn7 #-}-happyOut7 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut7 #-}-happyIn8 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn8 #-}-happyOut8 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut8 #-}-happyIn9 :: ((Doc RdrName, Doc RdrName)) -> (HappyAbsSyn )-happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn9 #-}-happyOut9 :: (HappyAbsSyn ) -> ((Doc RdrName, Doc RdrName))-happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut9 #-}-happyIn10 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn10 #-}-happyOut10 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut10 #-}-happyIn11 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn11 #-}-happyOut11 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut11 #-}-happyIn12 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn12 #-}-happyOut12 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut12 #-}-happyIn13 :: ([Example]) -> (HappyAbsSyn )-happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn13 #-}-happyOut13 :: (HappyAbsSyn ) -> ([Example])-happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut13 #-}-happyIn14 :: (Example) -> (HappyAbsSyn )-happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn14 #-}-happyOut14 :: (HappyAbsSyn ) -> (Example)-happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut14 #-}-happyIn15 :: (String) -> (HappyAbsSyn )-happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn15 #-}-happyOut15 :: (HappyAbsSyn ) -> (String)-happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut15 #-}-happyIn16 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn16 #-}-happyOut16 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut16 #-}-happyIn17 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn17 #-}-happyOut17 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut17 #-}-happyIn18 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn18 #-}-happyOut18 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut18 #-}-happyIn19 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn19 #-}-happyOut19 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut19 #-}-happyIn20 :: (String) -> (HappyAbsSyn )-happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn20 #-}-happyOut20 :: (HappyAbsSyn ) -> (String)-happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut20 #-}-happyInTok :: (LToken) -> (HappyAbsSyn )-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyInTok #-}-happyOutTok :: (HappyAbsSyn ) -> (LToken)-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOutTok #-}---happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\xff\xff\x31\x00\x11\x00\x7b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x31\x00\x00\x00\x6d\x00\x31\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x21\x00\x6f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x68\x00\x68\x00\x67\x00\xff\xff\x00\x00\xff\xff\x5e\x00\x00\x00\x00\x00\x00\x00\x5c\x00\x4b\x00\x4e\x00\x3d\x00\x6d\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\x63\x00\x98\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x6c\x00\x00\x00\x1e\x00\x35\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x8a\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x45\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x13\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\xf9\xff\x00\x00\x00\x00\x00\x00\x00\x00"#--happyDefActions :: HappyAddr-happyDefActions = HappyA# "\xfa\xff\x00\x00\x00\x00\x00\x00\xf9\xff\xf8\xff\xf7\xff\xf6\xff\xf1\xff\xf0\xff\xef\xff\xea\xff\xf2\xff\xe4\xff\xe3\xff\x00\x00\x00\x00\x00\x00\xdc\xff\xdb\xff\xda\xff\xdd\xff\x00\x00\x00\x00\xed\xff\xec\xff\x00\x00\xd9\xff\xde\xff\x00\x00\x00\x00\xfb\xff\xfa\xff\xfc\xff\xfa\xff\xe8\xff\xee\xff\xf4\xff\xf5\xff\x00\x00\xd7\xff\x00\x00\x00\x00\xdf\xff\x00\x00\xe5\xff\xeb\xff\xe1\xff\xe0\xff\xe2\xff\x00\x00\xd6\xff\xd8\xff\xe9\xff\xe6\xff\xfd\xff\xe7\xff\xf3\xff"#--happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x02\x00\x03\x00\x0a\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0d\x00\x0e\x00\x11\x00\x12\x00\x13\x00\x02\x00\x03\x00\x0f\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0d\x00\x0e\x00\x11\x00\x02\x00\x13\x00\x0a\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0d\x00\x0e\x00\x0c\x00\x0d\x00\x0e\x00\x08\x00\x09\x00\x11\x00\x02\x00\x13\x00\x06\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0b\x00\x0c\x00\x0f\x00\x0e\x00\x02\x00\x0b\x00\x0c\x00\x11\x00\x0e\x00\x13\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0f\x00\x0b\x00\x0c\x00\x04\x00\x0e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x13\x00\x0b\x00\x0c\x00\x05\x00\x0e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0f\x00\x0b\x00\x0c\x00\x10\x00\x0e\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0b\x00\x0c\x00\x12\x00\x0e\x00\x0c\x00\x14\x00\x13\x00\x11\x00\x12\x00\x13\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0e\x00\x0b\x00\x0c\x00\x12\x00\x0e\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#--happyTable :: HappyAddr-happyTable = HappyA# "\x00\x00\x10\x00\x11\x00\x38\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x2f\x00\x2b\x00\x1c\x00\x21\x00\x1d\x00\x10\x00\x11\x00\x33\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x30\x00\x2b\x00\x1c\x00\x10\x00\x1d\x00\x35\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x2a\x00\x2b\x00\x19\x00\x1a\x00\x1b\x00\x2e\x00\x0b\x00\x1c\x00\x10\x00\x1d\x00\x24\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x39\x00\x0d\x00\x27\x00\x0e\x00\x32\x00\x29\x00\x0d\x00\x1c\x00\x0e\x00\x1d\x00\x37\x00\x1f\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x37\x00\x0c\x00\x0d\x00\x33\x00\x0e\x00\x21\x00\x1f\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x29\x00\x0c\x00\x0d\x00\x35\x00\x0e\x00\x1e\x00\x1f\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x37\x00\x0c\x00\x0d\x00\x24\x00\x0e\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x2d\x00\x0d\x00\x23\x00\x0e\x00\x19\x00\xff\xff\x29\x00\x1c\x00\x2d\x00\x1d\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x1b\x00\x0c\x00\x0d\x00\x23\x00\x0e\x00\x25\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x0d\x00\x00\x00\x0e\x00\x26\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x0d\x00\x00\x00\x0e\x00\x1d\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyReduceArr = Happy_Data_Array.array (2, 41) [-	(2 , happyReduce_2),-	(3 , happyReduce_3),-	(4 , happyReduce_4),-	(5 , happyReduce_5),-	(6 , happyReduce_6),-	(7 , happyReduce_7),-	(8 , happyReduce_8),-	(9 , happyReduce_9),-	(10 , happyReduce_10),-	(11 , happyReduce_11),-	(12 , happyReduce_12),-	(13 , happyReduce_13),-	(14 , happyReduce_14),-	(15 , happyReduce_15),-	(16 , happyReduce_16),-	(17 , happyReduce_17),-	(18 , happyReduce_18),-	(19 , happyReduce_19),-	(20 , happyReduce_20),-	(21 , happyReduce_21),-	(22 , happyReduce_22),-	(23 , happyReduce_23),-	(24 , happyReduce_24),-	(25 , happyReduce_25),-	(26 , happyReduce_26),-	(27 , happyReduce_27),-	(28 , happyReduce_28),-	(29 , happyReduce_29),-	(30 , happyReduce_30),-	(31 , happyReduce_31),-	(32 , happyReduce_32),-	(33 , happyReduce_33),-	(34 , happyReduce_34),-	(35 , happyReduce_35),-	(36 , happyReduce_36),-	(37 , happyReduce_37),-	(38 , happyReduce_38),-	(39 , happyReduce_39),-	(40 , happyReduce_40),-	(41 , happyReduce_41)-	]--happy_n_terms = 21 :: Int-happy_n_nonterms = 16 :: Int--happyReduce_2 = happySpecReduce_3  0# happyReduction_2-happyReduction_2 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut6 happy_x_1 of { happy_var_1 -> -	case happyOut5 happy_x_3 of { happy_var_3 -> -	happyIn5-		 (docAppend happy_var_1 happy_var_3-	)}}--happyReduce_3 = happySpecReduce_2  0# happyReduction_3-happyReduction_3 happy_x_2-	happy_x_1-	 =  case happyOut5 happy_x_2 of { happy_var_2 -> -	happyIn5-		 (happy_var_2-	)}--happyReduce_4 = happySpecReduce_1  0# happyReduction_4-happyReduction_4 happy_x_1-	 =  case happyOut6 happy_x_1 of { happy_var_1 -> -	happyIn5-		 (happy_var_1-	)}--happyReduce_5 = happySpecReduce_0  0# happyReduction_5-happyReduction_5  =  happyIn5-		 (DocEmpty-	)--happyReduce_6 = happySpecReduce_1  1# happyReduction_6-happyReduction_6 happy_x_1-	 =  case happyOut7 happy_x_1 of { happy_var_1 -> -	happyIn6-		 (DocUnorderedList [happy_var_1]-	)}--happyReduce_7 = happySpecReduce_1  1# happyReduction_7-happyReduction_7 happy_x_1-	 =  case happyOut8 happy_x_1 of { happy_var_1 -> -	happyIn6-		 (DocOrderedList [happy_var_1]-	)}--happyReduce_8 = happySpecReduce_1  1# happyReduction_8-happyReduction_8 happy_x_1-	 =  case happyOut9 happy_x_1 of { happy_var_1 -> -	happyIn6-		 (DocDefList [happy_var_1]-	)}--happyReduce_9 = happySpecReduce_1  1# happyReduction_9-happyReduction_9 happy_x_1-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> -	happyIn6-		 (happy_var_1-	)}--happyReduce_10 = happySpecReduce_2  2# happyReduction_10-happyReduction_10 happy_x_2-	happy_x_1-	 =  case happyOut10 happy_x_2 of { happy_var_2 -> -	happyIn7-		 (happy_var_2-	)}--happyReduce_11 = happySpecReduce_2  3# happyReduction_11-happyReduction_11 happy_x_2-	happy_x_1-	 =  case happyOut10 happy_x_2 of { happy_var_2 -> -	happyIn8-		 (happy_var_2-	)}--happyReduce_12 = happyReduce 4# 4# happyReduction_12-happyReduction_12 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut16 happy_x_4 of { happy_var_4 -> -	happyIn9-		 ((happy_var_2, happy_var_4)-	) `HappyStk` happyRest}}--happyReduce_13 = happySpecReduce_1  5# happyReduction_13-happyReduction_13 happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	happyIn10-		 (docParagraph happy_var_1-	)}--happyReduce_14 = happySpecReduce_1  5# happyReduction_14-happyReduction_14 happy_x_1-	 =  case happyOut11 happy_x_1 of { happy_var_1 -> -	happyIn10-		 (DocCodeBlock happy_var_1-	)}--happyReduce_15 = happySpecReduce_1  5# happyReduction_15-happyReduction_15 happy_x_1-	 =  case happyOut12 happy_x_1 of { happy_var_1 -> -	happyIn10-		 (happy_var_1-	)}--happyReduce_16 = happySpecReduce_1  5# happyReduction_16-happyReduction_16 happy_x_1-	 =  case happyOut13 happy_x_1 of { happy_var_1 -> -	happyIn10-		 (DocExamples happy_var_1-	)}--happyReduce_17 = happySpecReduce_2  6# happyReduction_17-happyReduction_17 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokBirdTrack happy_var_1,_)) -> -	case happyOut11 happy_x_2 of { happy_var_2 -> -	happyIn11-		 (docAppend (DocString happy_var_1) happy_var_2-	)}}--happyReduce_18 = happySpecReduce_1  6# happyReduction_18-happyReduction_18 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokBirdTrack happy_var_1,_)) -> -	happyIn11-		 (DocString happy_var_1-	)}--happyReduce_19 = happySpecReduce_1  7# happyReduction_19-happyReduction_19 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokProperty happy_var_1,_)) -> -	happyIn12-		 (makeProperty happy_var_1-	)}--happyReduce_20 = happySpecReduce_2  8# happyReduction_20-happyReduction_20 happy_x_2-	happy_x_1-	 =  case happyOut14 happy_x_1 of { happy_var_1 -> -	case happyOut13 happy_x_2 of { happy_var_2 -> -	happyIn13-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_21 = happySpecReduce_1  8# happyReduction_21-happyReduction_21 happy_x_1-	 =  case happyOut14 happy_x_1 of { happy_var_1 -> -	happyIn13-		 ([happy_var_1]-	)}--happyReduce_22 = happySpecReduce_3  9# happyReduction_22-happyReduction_22 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokExamplePrompt happy_var_1,_)) -> -	case happyOutTok happy_x_2 of { ((TokExampleExpression happy_var_2,_)) -> -	case happyOut15 happy_x_3 of { happy_var_3 -> -	happyIn14-		 (makeExample happy_var_1 happy_var_2 (lines happy_var_3)-	)}}}--happyReduce_23 = happySpecReduce_2  9# happyReduction_23-happyReduction_23 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokExamplePrompt happy_var_1,_)) -> -	case happyOutTok happy_x_2 of { ((TokExampleExpression happy_var_2,_)) -> -	happyIn14-		 (makeExample happy_var_1 happy_var_2 []-	)}}--happyReduce_24 = happySpecReduce_2  10# happyReduction_24-happyReduction_24 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokExampleResult happy_var_1,_)) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	happyIn15-		 (happy_var_1 ++ happy_var_2-	)}}--happyReduce_25 = happySpecReduce_1  10# happyReduction_25-happyReduction_25 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokExampleResult happy_var_1,_)) -> -	happyIn15-		 (happy_var_1-	)}--happyReduce_26 = happySpecReduce_2  11# happyReduction_26-happyReduction_26 happy_x_2-	happy_x_1-	 =  case happyOut17 happy_x_1 of { happy_var_1 -> -	case happyOut16 happy_x_2 of { happy_var_2 -> -	happyIn16-		 (docAppend happy_var_1 happy_var_2-	)}}--happyReduce_27 = happySpecReduce_1  11# happyReduction_27-happyReduction_27 happy_x_1-	 =  case happyOut17 happy_x_1 of { happy_var_1 -> -	happyIn16-		 (happy_var_1-	)}--happyReduce_28 = happySpecReduce_1  12# happyReduction_28-happyReduction_28 happy_x_1-	 =  case happyOut19 happy_x_1 of { happy_var_1 -> -	happyIn17-		 (happy_var_1-	)}--happyReduce_29 = happySpecReduce_3  12# happyReduction_29-happyReduction_29 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_2 of { happy_var_2 -> -	happyIn17-		 (DocMonospaced happy_var_2-	)}--happyReduce_30 = happySpecReduce_2  13# happyReduction_30-happyReduction_30 happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_2 of { happy_var_2 -> -	happyIn18-		 (docAppend (DocString "\n") happy_var_2-	)}--happyReduce_31 = happySpecReduce_2  13# happyReduction_31-happyReduction_31 happy_x_2-	happy_x_1-	 =  case happyOut19 happy_x_1 of { happy_var_1 -> -	case happyOut18 happy_x_2 of { happy_var_2 -> -	happyIn18-		 (docAppend happy_var_1 happy_var_2-	)}}--happyReduce_32 = happySpecReduce_1  13# happyReduction_32-happyReduction_32 happy_x_1-	 =  case happyOut19 happy_x_1 of { happy_var_1 -> -	happyIn18-		 (happy_var_1-	)}--happyReduce_33 = happySpecReduce_1  14# happyReduction_33-happyReduction_33 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokString happy_var_1,_)) -> -	happyIn19-		 (DocString happy_var_1-	)}--happyReduce_34 = happySpecReduce_1  14# happyReduction_34-happyReduction_34 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokEmphasis happy_var_1,_)) -> -	happyIn19-		 (DocEmphasis (DocString happy_var_1)-	)}--happyReduce_35 = happySpecReduce_1  14# happyReduction_35-happyReduction_35 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokURL happy_var_1,_)) -> -	happyIn19-		 (DocHyperlink (makeHyperlink happy_var_1)-	)}--happyReduce_36 = happySpecReduce_1  14# happyReduction_36-happyReduction_36 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokPic happy_var_1,_)) -> -	happyIn19-		 (DocPic happy_var_1-	)}--happyReduce_37 = happySpecReduce_1  14# happyReduction_37-happyReduction_37 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokAName happy_var_1,_)) -> -	happyIn19-		 (DocAName happy_var_1-	)}--happyReduce_38 = happySpecReduce_1  14# happyReduction_38-happyReduction_38 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokIdent happy_var_1,_)) -> -	happyIn19-		 (DocIdentifier happy_var_1-	)}--happyReduce_39 = happySpecReduce_3  14# happyReduction_39-happyReduction_39 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut20 happy_x_2 of { happy_var_2 -> -	happyIn19-		 (DocModule happy_var_2-	)}--happyReduce_40 = happySpecReduce_1  15# happyReduction_40-happyReduction_40 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokString happy_var_1,_)) -> -	happyIn20-		 (happy_var_1-	)}--happyReduce_41 = happySpecReduce_2  15# happyReduction_41-happyReduction_41 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokString happy_var_1,_)) -> -	case happyOut20 happy_x_2 of { happy_var_2 -> -	happyIn20-		 (happy_var_1 ++ happy_var_2-	)}}--happyNewToken action sts stk [] =-	happyDoAction 20# notHappyAtAll action sts stk []--happyNewToken action sts stk (tk:tks) =-	let cont i = happyDoAction i tk action sts stk tks in-	case tk of {-	(TokSpecial '/',_) -> cont 1#;-	(TokSpecial '@',_) -> cont 2#;-	(TokDefStart,_) -> cont 3#;-	(TokDefEnd,_) -> cont 4#;-	(TokSpecial '\"',_) -> cont 5#;-	(TokURL happy_dollar_dollar,_) -> cont 6#;-	(TokPic happy_dollar_dollar,_) -> cont 7#;-	(TokAName happy_dollar_dollar,_) -> cont 8#;-	(TokEmphasis happy_dollar_dollar,_) -> cont 9#;-	(TokBullet,_) -> cont 10#;-	(TokNumber,_) -> cont 11#;-	(TokBirdTrack happy_dollar_dollar,_) -> cont 12#;-	(TokProperty happy_dollar_dollar,_) -> cont 13#;-	(TokExamplePrompt happy_dollar_dollar,_) -> cont 14#;-	(TokExampleResult happy_dollar_dollar,_) -> cont 15#;-	(TokExampleExpression happy_dollar_dollar,_) -> cont 16#;-	(TokIdent happy_dollar_dollar,_) -> cont 17#;-	(TokPara,_) -> cont 18#;-	(TokString happy_dollar_dollar,_) -> cont 19#;-	_ -> happyError' (tk:tks)-	}--happyError_ 20# tk tks = happyError' tks-happyError_ _ tk tks = happyError' (tk:tks)--happyThen :: () => Maybe a -> (a -> Maybe b) -> Maybe b-happyThen = (>>=)-happyReturn :: () => a -> Maybe a-happyReturn = (return)-happyThen1 m k tks = (>>=) m (\a -> k a tks)-happyReturn1 :: () => a -> b -> Maybe a-happyReturn1 = \a tks -> (return) a-happyError' :: () => [(LToken)] -> Maybe a-happyError' = happyError--parseParas tks = happySomeParser where-  happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut5 x))--parseString tks = happySomeParser where-  happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut16 x))--happySeq = happyDontSeq---happyError :: [LToken] -> Maybe a-happyError toks = Nothing---- | Create a `Hyperlink` from given string.------ A hyperlink consists of a URL and an optional label.  The label is separated--- from the url by one or more whitespace characters.-makeHyperlink :: String -> Hyperlink-makeHyperlink input = case break isSpace $ strip input of-  (url, "")    -> Hyperlink url Nothing-  (url, label) -> Hyperlink url (Just . dropWhile isSpace $ label)--makeProperty :: String -> Doc RdrName-makeProperty s = case strip s of-  'p':'r':'o':'p':'>':xs ->-	DocProperty (dropWhile isSpace xs)-  xs ->-	error $ "makeProperty: invalid input " ++ show xs---- | Create an 'Example', stripping superfluous characters as appropriate-makeExample :: String -> String -> [String] -> Example-makeExample prompt expression result =-  Example-	(strip expression)	-- we do not care about leading and trailing-				-- whitespace in expressions, so drop them-	result'-  where-	-- 1. drop trailing whitespace from the prompt, remember the prefix-	(prefix, _) = span isSpace prompt--	-- 2. drop, if possible, the exact same sequence of whitespace-	-- characters from each result line-	---	-- 3. interpret lines that only contain the string "<BLANKLINE>" as an-	-- empty line-	result' = map (substituteBlankLine . tryStripPrefix prefix) result-	  where-		tryStripPrefix xs ys = fromMaybe ys $ stripPrefix xs ys--		substituteBlankLine "<BLANKLINE>" = ""-		substituteBlankLine line          = line---- | Remove all leading and trailing whitespace-strip :: String -> String-strip = dropWhile isSpace . reverse . dropWhile isSpace . reverse-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<command-line>" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp --{-# LINE 30 "templates/GenericTemplate.hs" #-}---data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList------{-# LINE 51 "templates/GenericTemplate.hs" #-}--{-# LINE 61 "templates/GenericTemplate.hs" #-}--{-# LINE 70 "templates/GenericTemplate.hs" #-}--infixr 9 `HappyStk`-data HappyStk a = HappyStk a (HappyStk a)---------------------------------------------------------------------------------- starting the parse--happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll---------------------------------------------------------------------------------- Accepting the parse---- If the current token is 0#, it means we've just accepted a partial--- parse (a %partial parser).  We must ignore the saved token on the top of--- the stack in this case.-happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =-	happyReturn1 ans-happyAccept j tk st sts (HappyStk ans _) = -	(happyTcHack j (happyTcHack st)) (happyReturn1 ans)---------------------------------------------------------------------------------- Arrays only: do the next action----happyDoAction i tk st-	= {- nothing -}---	  case action of-		0#		  -> {- nothing -}-				     happyFail i tk st-		-1# 	  -> {- nothing -}-				     happyAccept i tk st-		n | (n Happy_GHC_Exts.<# (0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}--				     (happyReduceArr Happy_Data_Array.! rule) i tk st-				     where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))-		n		  -> {- nothing -}---				     happyShift new_state i tk st-				     where (new_state) = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))-   where (off)    = indexShortOffAddr happyActOffsets st-         (off_i)  = (off Happy_GHC_Exts.+# i)-	 check  = if (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#))-			then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==#  i)-			else False-         (action)-          | check     = indexShortOffAddr happyTable off_i-          | otherwise = indexShortOffAddr happyDefActions st--{-# LINE 130 "templates/GenericTemplate.hs" #-}---indexShortOffAddr (HappyA# arr) off =-	Happy_GHC_Exts.narrow16Int# i-  where-        i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)-        high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))-        low  = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))-        off' = off Happy_GHC_Exts.*# 2#------data HappyAddr = HappyA# Happy_GHC_Exts.Addr#------------------------------------------------------------------------------------- HappyState data type (not arrays)--{-# LINE 163 "templates/GenericTemplate.hs" #-}---------------------------------------------------------------------------------- Shifting a token--happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =-     let (i) = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in---     trace "shifting the error token" $-     happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)--happyShift new_state i tk st sts stk =-     happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)---- happyReduce is specialised for the common cases.--happySpecReduce_0 i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happySpecReduce_0 nt fn j tk st@((action)) sts stk-     = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)--happySpecReduce_1 i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')-     = let r = fn v1 in-       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_2 i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')-     = let r = fn v1 v2 in-       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_3 i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')-     = let r = fn v1 v2 v3 in-       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happyReduce k i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happyReduce k nt fn j tk st sts stk-     = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of-	 sts1@((HappyCons (st1@(action)) (_))) ->-        	let r = fn stk in  -- it doesn't hurt to always seq here...-       		happyDoSeq r (happyGoto nt j tk st1 sts1 r)--happyMonadReduce k nt fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happyMonadReduce k nt fn j tk st sts stk =-        happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))-       where (sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))-             drop_stk = happyDropStk k stk--happyMonad2Reduce k nt fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happyMonad2Reduce k nt fn j tk st sts stk =-       happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))-       where (sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))-             drop_stk = happyDropStk k stk--             (off) = indexShortOffAddr happyGotoOffsets st1-             (off_i) = (off Happy_GHC_Exts.+# nt)-             (new_state) = indexShortOffAddr happyTable off_i-----happyDrop 0# l = l-happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t--happyDropStk 0# l = l-happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs---------------------------------------------------------------------------------- Moving to a new state after a reduction---happyGoto nt j tk st = -   {- nothing -}-   happyDoAction j tk new_state-   where (off) = indexShortOffAddr happyGotoOffsets st-         (off_i) = (off Happy_GHC_Exts.+# nt)-         (new_state) = indexShortOffAddr happyTable off_i------------------------------------------------------------------------------------- Error recovery (0# is the error token)---- parse error if we are in recovery and we fail again-happyFail 0# tk old_st _ stk@(x `HappyStk` _) =-     let (i) = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in---	trace "failing" $ -        happyError_ i tk--{-  We don't need state discarding for our restricted implementation of-    "error".  In fact, it can cause some bogus parses, so I've disabled it-    for now --SDM---- discard a state-happyFail  0# tk old_st (HappyCons ((action)) (sts)) -						(saved_tok `HappyStk` _ `HappyStk` stk) =---	trace ("discarding state, depth " ++ show (length stk))  $-	happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))--}---- Enter error recovery: generate an error token,---                       save the old token and carry on.-happyFail  i tk (action) sts stk =---      trace "entering error recovery" $-	happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)---- Internal happy errors:--notHappyAtAll :: a-notHappyAtAll = error "Internal Happy error\n"---------------------------------------------------------------------------------- Hack to get the typechecker to accept our action functions---happyTcHack :: Happy_GHC_Exts.Int# -> a -> a-happyTcHack x y = y-{-# INLINE happyTcHack #-}----------------------------------------------------------------------------------- Seq-ing.  If the --strict flag is given, then Happy emits ---	happySeq = happyDoSeq--- otherwise it emits--- 	happySeq = happyDontSeq--happyDoSeq, happyDontSeq :: a -> b -> b-happyDoSeq   a b = a `seq` b-happyDontSeq a b = b---------------------------------------------------------------------------------- Don't inline any functions from the template.  GHC has a nasty habit--- of deciding to inline happyGoto everywhere, which increases the size of--- the generated parser quite a bit.---{-# NOINLINE happyDoAction #-}-{-# NOINLINE happyTable #-}-{-# NOINLINE happyCheck #-}-{-# NOINLINE happyActOffsets #-}-{-# NOINLINE happyGotoOffsets #-}-{-# NOINLINE happyDefActions #-}--{-# NOINLINE happyShift #-}-{-# NOINLINE happySpecReduce_0 #-}-{-# NOINLINE happySpecReduce_1 #-}-{-# NOINLINE happySpecReduce_2 #-}-{-# NOINLINE happySpecReduce_3 #-}-{-# NOINLINE happyReduce #-}-{-# NOINLINE happyMonadReduce #-}-{-# NOINLINE happyGoto #-}-{-# NOINLINE happyFail #-}---- end of Happy Template.
− dist/build/haddock/haddock-tmp/Haddock/Lex.hs
@@ -1,429 +0,0 @@-{-# LANGUAGE CPP,MagicHash #-}-{-# LINE 10 "src/Haddock/Lex.x" #-}--{-# LANGUAGE BangPatterns #-}   -- Generated by Alex-{-# OPTIONS -Wwarn -w #-}--- The above warning supression flag is a temporary kludge.--- While working on this module you are encouraged to remove it and fix--- any warnings in the module. See---     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings--- for details--module Haddock.Lex (-	Token(..),-	LToken,-	tokenise- ) where--import Lexer hiding (Token)-import Parser ( parseIdentifier )-import StringBuffer-import RdrName-import SrcLoc-import DynFlags-import FastString--import Data.Char-import Data.Word (Word8)-import Numeric-import System.IO.Unsafe-import Debug.Trace--#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\xfc\xff\xff\xff\xf2\x00\x00\x00\xfe\xff\xff\xff\xe8\x01\x00\x00\xde\x02\x00\x00\x03\x00\x00\x00\xea\x01\x00\x00\x00\x00\x00\x00\xd4\x03\x00\x00\x12\x00\x00\x00\xca\x04\x00\x00\xc0\x05\x00\x00\xc8\x02\x00\x00\x24\x00\x00\x00\xf4\x00\x00\x00\x40\x06\x00\x00\xc0\x06\x00\x00\x40\x07\x00\x00\xc0\x07\x00\x00\x40\x08\x00\x00\xc0\x08\x00\x00\x40\x09\x00\x00\xc0\x09\x00\x00\x40\x0a\x00\x00\xc0\x0a\x00\x00\x40\x0b\x00\x00\xc0\x0b\x00\x00\x40\x0c\x00\x00\xc0\x0c\x00\x00\xa2\xff\xff\xff\x40\x0d\x00\x00\xc0\x0d\x00\x00\x40\x0e\x00\x00\xc0\x0e\x00\x00\x40\x0f\x00\x00\xc0\x0f\x00\x00\xa0\xff\xff\xff\x00\x00\x00\x00\x31\x10\x00\x00\x00\x00\x00\x00\xa2\x10\x00\x00\x00\x00\x00\x00\x13\x11\x00\x00\x00\x00\x00\x00\x84\x11\x00\x00\x00\x00\x00\x00\xf5\x11\x00\x00\x00\x00\x00\x00\x66\x12\x00\x00\x00\x00\x00\x00\xd7\x12\x00\x00\x00\x00\x00\x00\x48\x13\x00\x00\x00\x00\x00\x00\xb9\x13\x00\x00\x00\x00\x00\x00\x2f\x04\x00\x00\x00\x00\x00\x00\x31\x05\x00\x00\x00\x00\x00\x00\xfa\x13\x00\x00\x00\x00\x00\x00\x3b\x14\x00\x00\x00\x00\x00\x00\x7c\x14\x00\x00\x00\x00\x00\x00\xbd\x14\x00\x00\x00\x00\x00\x00\x2e\x15\x00\x00\xa3\xff\xff\xff\x00\x00\x00\x00\x6f\x15\x00\x00\x00\x00\x00\x00\xb0\x15\x00\x00\xda\x00\x00\x00\xcc\x01\x00\x00\x00\x00\x00\x00\xf1\x15\x00\x00\xf1\x16\x00\x00\xb1\x16\x00\x00\x00\x00\x00\x00\xb1\x17\x00\x00\x71\x17\x00\x00\x00\x00\x00\x00\x71\x18\x00\x00\x31\x18\x00\x00\x00\x00\x00\x00\x31\x19\x00\x00\xf1\x18\x00\x00\x00\x00\x00\x00\xf1\x19\x00\x00\xb1\x19\x00\x00\x00\x00\x00\x00\xb1\x1a\x00\x00\x71\x1a\x00\x00\x00\x00\x00\x00\xd6\xff\xff\xff\x00\x00\x00\x00\xb2\x1a\x00\x00\x39\x00\x00\x00\xb2\x1b\x00\x00\xd7\xff\xff\xff\x72\x1b\x00\x00\x00\x00\x00\x00\x72\x1c\x00\x00\x32\x1c\x00\x00\x00\x00\x00\x00\x32\x1d\x00\x00\xf2\x1c\x00\x00\x00\x00\x00\x00\xe8\x1d\x00\x00\xde\x1e\x00\x00\xd8\xff\xff\xff\xf6\x00\x00\x00\xde\x1f\x00\x00\x67\x1d\x00\x00\x00\x00\x00\x00\xd9\xff\xff\xff\x20\x02\x00\x00\x13\x01\x00\x00\xdb\xff\xff\xff\x54\x20\x00\x00\x00\x00\x00\x00\xdc\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x21\x00\x00\x40\x22\x00\x00\x41\x21\x00\x00\xfa\xff\xff\xff\x36\x23\x00\x00\x2c\x24\x00\x00\x00\x00\x00\x00\x22\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--alex_table :: AlexAddr-alex_table = AlexA# "\x00\x00\x07\x00\x7b\x00\x07\x00\x07\x00\x07\x00\x86\x00\x72\x00\x87\x00\x72\x00\x72\x00\x72\x00\x77\x00\x85\x00\x77\x00\x77\x00\x77\x00\x46\x00\x1e\x00\x66\x00\x71\x00\x7a\x00\x88\x00\x84\x00\x07\x00\x7e\x00\x79\x00\x76\x00\x8c\x00\x4c\x00\x72\x00\x00\x00\x64\x00\x00\x00\x7f\x00\x77\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x25\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x74\x00\x10\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x63\x00\x14\x00\x44\x00\x44\x00\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x00\x00\x00\x00\x00\x72\x00\x87\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x8b\x00\x96\x00\x72\x00\x00\x00\x99\x00\x98\x00\x00\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x97\x00\x00\x00\x00\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x9b\x00\x95\x00\x00\x00\x00\x00\x8b\x00\x00\x00\x61\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x82\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x00\x00\x9a\x00\x9e\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x6a\x00\x12\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x4a\x00\x1c\x00\x34\x00\x34\x00\x34\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x89\x00\x07\x00\x7b\x00\x07\x00\x07\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x77\x00\x85\x00\x77\x00\x77\x00\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x5f\x00\x15\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x43\x00\x1f\x00\x30\x00\x30\x00\x30\x00\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x91\x00\x00\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x92\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5c\x00\x16\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x41\x00\x20\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x96\x00\x00\x00\x00\x00\x99\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x00\x9f\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x6a\x00\x12\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x4a\x00\x1c\x00\x34\x00\x34\x00\x34\x00\x35\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x50\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x53\x00\x19\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3b\x00\x23\x00\x28\x00\x28\x00\x28\x00\x29\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x53\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x50\x00\x1a\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x39\x00\x24\x00\x26\x00\x26\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x6c\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\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\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x65\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x10\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x5e\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x5b\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x58\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x55\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x52\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x4f\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x11\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x12\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x13\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x15\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x16\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x17\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x18\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x19\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x1a\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x39\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\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\x48\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\x4a\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\x4e\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\x56\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\x59\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\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\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\x67\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\x6a\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\x6d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\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\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x56\x00\x18\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3d\x00\x22\x00\x2a\x00\x2a\x00\x2a\x00\x2b\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x59\x00\x17\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3f\x00\x21\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x91\x00\x00\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x92\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x67\x00\x13\x00\x47\x00\x47\x00\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\x1d\x00\x32\x00\x32\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x00\x00\x0d\x00\x0d\x00\x8f\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x53\x00\x19\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3b\x00\x23\x00\x28\x00\x28\x00\x28\x00\x29\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x50\x00\x1a\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x39\x00\x24\x00\x26\x00\x26\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6d\x00\x11\x00\x4d\x00\x4d\x00\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\x1b\x00\x36\x00\x36\x00\x36\x00\x37\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x56\x00\x18\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3d\x00\x22\x00\x2a\x00\x2a\x00\x2a\x00\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x6a\x00\x12\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x4a\x00\x1c\x00\x34\x00\x34\x00\x34\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#--alex_check :: AlexAddr-alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x6f\x00\x72\x00\x70\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x20\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x23\x00\x20\x00\xff\xff\x28\x00\xff\xff\x2a\x00\x20\x00\xff\xff\x2d\x00\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\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3e\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\x5b\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\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\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\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\x22\x00\x23\x00\x20\x00\xff\xff\x26\x00\x27\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x2f\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3c\x00\x3b\x00\xff\xff\xff\xff\x40\x00\xff\xff\x3e\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x5c\x00\x5d\x00\xff\xff\xff\xff\x60\x00\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\x2a\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x58\x00\xff\xff\xff\xff\xff\xff\x3e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x78\x00\x5b\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\x70\x00\xff\xff\xff\xff\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\x22\x00\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\xff\xff\xff\xff\x60\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\x2f\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\x3e\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x23\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\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\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\xff\xff\x3e\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\xff\xff\xff\xff\x60\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00"#--alex_deflt :: AlexAddr-alex_deflt = AlexA# "\xff\xff\x01\x00\x9d\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\x9d\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x38\x00\x3a\x00\x3a\x00\x3c\x00\x3c\x00\x3e\x00\x3e\x00\x40\x00\x40\x00\x42\x00\x42\x00\x47\x00\x47\x00\x49\x00\x49\x00\x4d\x00\x4d\x00\x51\x00\x51\x00\x54\x00\x54\x00\x57\x00\x57\x00\x5a\x00\x5a\x00\x5d\x00\x5d\x00\x60\x00\x60\x00\x62\x00\x62\x00\xff\xff\x68\x00\x68\x00\x6b\x00\x6b\x00\xff\xff\xff\xff\x6e\x00\x6e\x00\x0c\x00\x0c\x00\x0c\x00\x0b\x00\x0b\x00\x0b\x00\x6f\x00\x6f\x00\x6f\x00\x70\x00\x70\x00\x70\x00\x05\x00\x05\x00\x05\x00\x04\x00\x04\x00\x04\x00\xff\xff\x75\x00\x75\x00\xff\xff\x7a\x00\xff\xff\x7a\x00\x7a\x00\x9d\x00\x9d\x00\x9d\x00\x93\x00\x93\x00\x93\x00\x6f\x00\x70\x00\xff\xff\xff\xff\x01\x00\x01\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\x0b\x00\x0c\x00\xff\xff\xff\xff\x93\x00\x6f\x00\xff\xff\x9d\x00\xff\xff\xff\xff"#--alex_accept = listArray (0::Int,159) [[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_13))],[],[(AlexAcc (alex_action_17))],[],[],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_14))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAccSkip)],[(AlexAcc (alex_action_1))],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_4))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_6))],[(AlexAcc (alex_action_7))],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_21))],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_25))],[(AlexAcc (alex_action_25))],[(AlexAcc (alex_action_26))],[(AlexAcc (alex_action_27))],[(AlexAcc (alex_action_28))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_30))],[(AlexAcc (alex_action_31))],[(AlexAcc (alex_action_32))],[(AlexAcc (alex_action_33))]]-{-# LINE 117 "src/Haddock/Lex.x" #-}---- | A located token-type LToken = (Token, AlexPosn)--data Token-  = TokPara-  | TokNumber-  | TokBullet-  | TokDefStart-  | TokDefEnd-  | TokSpecial Char-  | TokIdent RdrName-  | TokString String-  | TokURL String-  | TokPic String-  | TokEmphasis String-  | TokAName String-  | TokBirdTrack String-  | TokProperty String-  | TokExamplePrompt String-  | TokExampleExpression String-  | TokExampleResult String---  deriving Show--tokenPos :: LToken -> (Int, Int)-tokenPos t = let AlexPn _ line col = snd t in (line, col)---- -------------------------------------------------------------------------------- Alex support stuff---- XXX: copied the posn wrapper code from Alex to make this lexer work--- with both Alex 2.x and Alex 3.x.  However, we are not using the--- Unicode/UTF-8 support in Alex 3.x, and Unicode documentation will--- probably get mangled.--type AlexInput = (AlexPosn,     -- current position,-                  Char,         -- previous char-                  String)       -- current input string--alexInputPrevChar :: AlexInput -> Char-alexInputPrevChar (p,c,s) = c--alexGetByte :: AlexInput -> Maybe (Word8,AlexInput)-alexGetByte (p,c,[]) = Nothing-alexGetByte (p,_,(c:s))  = let p' = alexMove p c-                              in p' `seq`  Just (fromIntegral (ord c), (p', c, s))---- for compat with Alex 2.x:-alexGetChar :: AlexInput -> Maybe (Char,AlexInput)-alexGetChar i = case alexGetByte i of-                  Nothing     -> Nothing-                  Just (b,i') -> Just (chr (fromIntegral b), i')--alexMove :: AlexPosn -> Char -> AlexPosn-alexMove (AlexPn a l c) '\t' = AlexPn (a+1)  l     (((c+7) `div` 8)*8+1)-alexMove (AlexPn a l c) '\n' = AlexPn (a+1) (l+1)   1-alexMove (AlexPn a l c) _    = AlexPn (a+1)  l     (c+1)--data AlexPosn = AlexPn !Int !Int !Int-        deriving (Eq,Show)--type StartCode = Int-type Action = AlexPosn -> String -> StartCode -> (StartCode -> [LToken]) -> DynFlags -> [LToken]--tokenise :: DynFlags -> String -> (Int, Int) -> [LToken]-tokenise dflags str (line, col) = let toks = go (posn, '\n', eofHack str) para in {-trace (show toks)-} toks-  where-    posn = AlexPn 0 line col--    go inp@(pos, _, str) sc =-	  case alexScan inp sc of-		AlexEOF -> []-		AlexError _ -> []-		AlexSkip  inp' _       -> go inp' sc-		AlexToken inp'@(pos',_,_) len act -> act pos (take len str) sc (\sc -> go inp' sc) dflags---- NB. we add a final \n to the string, (see comment in the beginning of line--- production above).-eofHack str = str++"\n"--andBegin  :: Action -> StartCode -> Action-andBegin act new_sc = \pos str _ cont dflags -> act pos str new_sc cont dflags--token :: Token -> Action-token t = \pos _ sc cont _ -> (t, pos) : cont sc--strtoken, strtokenNL :: (String -> Token) -> Action-strtoken t = \pos str sc cont _ -> (t str, pos) : cont sc-strtokenNL t = \pos str sc cont _ -> (t (filter (/= '\r') str), pos) : cont sc--- ^ We only want LF line endings in our internal doc string format, so we--- filter out all CRs.--begin :: StartCode -> Action-begin sc = \_ _ _ cont _ -> cont sc---- -------------------------------------------------------------------------------- Lex a string as a Haskell identifier--ident :: Action-ident pos str sc cont dflags = -  case parseIdent dflags loc id of-	Just names -> (TokIdent names, pos) : cont sc-	Nothing -> (TokString str, pos) : cont sc- where id = init (tail str)-       -- TODO: Get the real filename here. Maybe we should just be-       --       using GHC SrcLoc's ourself?-       filename = mkFastString "<unknown file>"-       loc = case pos of-             AlexPn _ line col ->-                 mkRealSrcLoc filename line col--parseIdent :: DynFlags -> RealSrcLoc -> String -> Maybe RdrName-parseIdent dflags loc str0 = -  let buffer = stringToStringBuffer str0-      pstate = mkPState dflags buffer loc-      result = unP parseIdentifier pstate -  in case result of -       POk _ name -> Just (unLoc name)-       _ -> Nothing---birdtrack,def,example,exampleexpr,exampleresult,line,para,property,string :: Int-birdtrack = 1-def = 2-example = 3-exampleexpr = 4-exampleresult = 5-line = 6-para = 7-property = 8-string = 9-alex_action_1 =  begin birdtrack -alex_action_2 =  strtoken TokProperty `andBegin` property-alex_action_3 =  strtoken TokExamplePrompt `andBegin` exampleexpr -alex_action_4 =  token TokBullet `andBegin` string -alex_action_5 =  token TokDefStart `andBegin` def -alex_action_6 =  token TokNumber `andBegin` string -alex_action_7 =  token TokNumber `andBegin` string -alex_action_8 =  begin string -alex_action_9 =  begin birdtrack -alex_action_10 =  strtoken TokExamplePrompt `andBegin` exampleexpr -alex_action_11 =  token TokPara `andBegin` para -alex_action_12 =  begin string -alex_action_13 =  strtokenNL TokBirdTrack `andBegin` line -alex_action_14 =  token TokPara `andBegin` para -alex_action_15 =  token TokPara `andBegin` para -alex_action_16 =  strtoken TokExamplePrompt `andBegin` exampleexpr -alex_action_17 =  begin exampleresult -alex_action_18 =  strtokenNL TokExampleExpression `andBegin` example -alex_action_19 =  strtokenNL TokExampleResult `andBegin` example -alex_action_20 =  strtoken $ \s -> TokSpecial (head s) -alex_action_21 =  strtoken $ \s -> TokPic (init $ init $ tail $ tail s) -alex_action_22 =  strtoken $ \s -> TokURL (init (tail s)) -alex_action_23 =  strtoken $ \s -> TokAName (init (tail s)) -alex_action_24 =  strtoken $ \s -> TokEmphasis (init (tail s)) -alex_action_25 =  ident -alex_action_26 =  strtoken (TokString . tail) -alex_action_27 =  strtoken $ \s -> TokString [chr (read (init (drop 2 s)))] -alex_action_28 =  strtoken $ \s -> case readHex (init (drop 3 s)) of [(n,_)] -> TokString [chr n] -alex_action_29 =  strtoken TokString -alex_action_30 =  strtokenNL TokString `andBegin` line -alex_action_31 =  strtoken TokString -alex_action_32 =  token TokDefEnd `andBegin` string -alex_action_33 =  strtoken TokString -{-# 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 37 "templates/GenericTemplate.hs" #-}--{-# LINE 47 "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 alexGetByte input of-			Nothing -> ----				   AlexEOF-			Just _ ->----				   AlexError input'--	(AlexLastSkip input'' len, _) ->----		AlexSkip input'' len--	(AlexLastAcc k input''' len, _) ->----		AlexToken input''' len k----- Push the input through the DFA, remembering the most recent accepting--- state it encountered.--alex_scan_tkn user orig_input len input s last_acc =-  input `seq` -- strict in the input-  let -	new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))-  in-  new_acc `seq`-  case alexGetByte input of-     Nothing -> (new_acc, input)-     Just (c, new_input) -> ----	let-		(base) = alexIndexInt32OffAddr alex_base s-		((I# (ord_c))) = fromIntegral 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 (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)-                                                -- note that the length is increased ONLY if this is the 1st byte in a char encoding)-			new_input new_s new_acc--  where-	check_accs [] = last_acc-	check_accs (AlexAcc a : _) = AlexLastAcc a input (I# (len))-	check_accs (AlexAccSkip : _)  = AlexLastSkip  input (I# (len))-	check_accs (AlexAccPred a predx : rest)-	   | predx user orig_input (I# (len)) input-	   = AlexLastAcc a input (I# (len))-	check_accs (AlexAccSkipPred predx : rest)-	   | predx 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--instance Functor AlexLastAcc where-    fmap f AlexNone = AlexNone-    fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z-    fmap f (AlexLastSkip x y) = AlexLastSkip x y--data AlexAcc a user-  = 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--alexPrevCharMatches f _ input _ _ = f (alexInputPrevChar input)----alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _ -alexPrevCharIsOneOf arr _ input _ _ = arr ! alexInputPrevChar input----alexRightContext :: Int -> AlexAccPred _-alexRightContext (I# (sc)) user _ _ input = -     case alex_scan_tkn user input 0# input sc AlexNone of-	  (AlexNone, _) -> False-	  _ -> True-	-- TODO: there's no need to find the longest-	-- match when checking the right context, just-	-- the first match will do.---- used by wrappers-iUnbox (I# (i)) = i
− dist/build/haddock/haddock-tmp/Haddock/Parse.hs
@@ -1,859 +0,0 @@-{-# OPTIONS_GHC -w #-}-{-# OPTIONS -fglasgow-exts -cpp #-}-{-# LANGUAGE BangPatterns #-} -- required for versions of Happy before 1.18.6-{-# OPTIONS -Wwarn -w #-}--- The above warning supression flag is a temporary kludge.--- While working on this module you are encouraged to remove it and fix--- any warnings in the module. See---     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings--- for details--module Haddock.Parse (parseString, parseParas) where--import Haddock.Lex-import Haddock.Types (Doc(..), Example(Example), Hyperlink(..))-import Haddock.Doc-import HsSyn-import RdrName-import Data.Char  (isSpace)-import Data.Maybe (fromMaybe)-import Data.List  (stripPrefix)-import qualified Data.Array as Happy_Data_Array-import qualified GHC.Exts as Happy_GHC_Exts---- parser produced by Happy Version 1.18.10--newtype HappyAbsSyn  = HappyAbsSyn HappyAny-#if __GLASGOW_HASKELL__ >= 607-type HappyAny = Happy_GHC_Exts.Any-#else-type HappyAny = forall a . a-#endif-happyIn5 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn5 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn5 #-}-happyOut5 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut5 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut5 #-}-happyIn6 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn6 #-}-happyOut6 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut6 #-}-happyIn7 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn7 #-}-happyOut7 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut7 #-}-happyIn8 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn8 #-}-happyOut8 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut8 #-}-happyIn9 :: ((Doc RdrName, Doc RdrName)) -> (HappyAbsSyn )-happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn9 #-}-happyOut9 :: (HappyAbsSyn ) -> ((Doc RdrName, Doc RdrName))-happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut9 #-}-happyIn10 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn10 #-}-happyOut10 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut10 #-}-happyIn11 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn11 #-}-happyOut11 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut11 #-}-happyIn12 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn12 #-}-happyOut12 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut12 #-}-happyIn13 :: ([Example]) -> (HappyAbsSyn )-happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn13 #-}-happyOut13 :: (HappyAbsSyn ) -> ([Example])-happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut13 #-}-happyIn14 :: (Example) -> (HappyAbsSyn )-happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn14 #-}-happyOut14 :: (HappyAbsSyn ) -> (Example)-happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut14 #-}-happyIn15 :: (String) -> (HappyAbsSyn )-happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn15 #-}-happyOut15 :: (HappyAbsSyn ) -> (String)-happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut15 #-}-happyIn16 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn16 #-}-happyOut16 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut16 #-}-happyIn17 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn17 #-}-happyOut17 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut17 #-}-happyIn18 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn18 #-}-happyOut18 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut18 #-}-happyIn19 :: (Doc RdrName) -> (HappyAbsSyn )-happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn19 #-}-happyOut19 :: (HappyAbsSyn ) -> (Doc RdrName)-happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut19 #-}-happyIn20 :: (String) -> (HappyAbsSyn )-happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn20 #-}-happyOut20 :: (HappyAbsSyn ) -> (String)-happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut20 #-}-happyInTok :: (LToken) -> (HappyAbsSyn )-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyInTok #-}-happyOutTok :: (HappyAbsSyn ) -> (LToken)-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOutTok #-}---happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\xff\xff\x31\x00\x11\x00\x7b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x31\x00\x00\x00\x6d\x00\x31\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x21\x00\x6f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x68\x00\x68\x00\x67\x00\xff\xff\x00\x00\xff\xff\x5e\x00\x00\x00\x00\x00\x00\x00\x5c\x00\x4b\x00\x4e\x00\x3d\x00\x6d\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\x63\x00\x98\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x6c\x00\x00\x00\x1e\x00\x35\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x8a\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x45\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x13\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\xf9\xff\x00\x00\x00\x00\x00\x00\x00\x00"#--happyDefActions :: HappyAddr-happyDefActions = HappyA# "\xfa\xff\x00\x00\x00\x00\x00\x00\xf9\xff\xf8\xff\xf7\xff\xf6\xff\xf1\xff\xf0\xff\xef\xff\xea\xff\xf2\xff\xe4\xff\xe3\xff\x00\x00\x00\x00\x00\x00\xdc\xff\xdb\xff\xda\xff\xdd\xff\x00\x00\x00\x00\xed\xff\xec\xff\x00\x00\xd9\xff\xde\xff\x00\x00\x00\x00\xfb\xff\xfa\xff\xfc\xff\xfa\xff\xe8\xff\xee\xff\xf4\xff\xf5\xff\x00\x00\xd7\xff\x00\x00\x00\x00\xdf\xff\x00\x00\xe5\xff\xeb\xff\xe1\xff\xe0\xff\xe2\xff\x00\x00\xd6\xff\xd8\xff\xe9\xff\xe6\xff\xfd\xff\xe7\xff\xf3\xff"#--happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x02\x00\x03\x00\x0a\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0d\x00\x0e\x00\x11\x00\x12\x00\x13\x00\x02\x00\x03\x00\x0f\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0d\x00\x0e\x00\x11\x00\x02\x00\x13\x00\x0a\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0d\x00\x0e\x00\x0c\x00\x0d\x00\x0e\x00\x08\x00\x09\x00\x11\x00\x02\x00\x13\x00\x06\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0b\x00\x0c\x00\x0f\x00\x0e\x00\x02\x00\x0b\x00\x0c\x00\x11\x00\x0e\x00\x13\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0f\x00\x0b\x00\x0c\x00\x04\x00\x0e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x13\x00\x0b\x00\x0c\x00\x05\x00\x0e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0f\x00\x0b\x00\x0c\x00\x10\x00\x0e\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0b\x00\x0c\x00\x12\x00\x0e\x00\x0c\x00\x14\x00\x13\x00\x11\x00\x12\x00\x13\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0e\x00\x0b\x00\x0c\x00\x12\x00\x0e\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#--happyTable :: HappyAddr-happyTable = HappyA# "\x00\x00\x10\x00\x11\x00\x38\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x2f\x00\x2b\x00\x1c\x00\x21\x00\x1d\x00\x10\x00\x11\x00\x33\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x30\x00\x2b\x00\x1c\x00\x10\x00\x1d\x00\x35\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x2a\x00\x2b\x00\x19\x00\x1a\x00\x1b\x00\x2e\x00\x0b\x00\x1c\x00\x10\x00\x1d\x00\x24\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x39\x00\x0d\x00\x27\x00\x0e\x00\x32\x00\x29\x00\x0d\x00\x1c\x00\x0e\x00\x1d\x00\x37\x00\x1f\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x37\x00\x0c\x00\x0d\x00\x33\x00\x0e\x00\x21\x00\x1f\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x29\x00\x0c\x00\x0d\x00\x35\x00\x0e\x00\x1e\x00\x1f\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x37\x00\x0c\x00\x0d\x00\x24\x00\x0e\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x2d\x00\x0d\x00\x23\x00\x0e\x00\x19\x00\xff\xff\x29\x00\x1c\x00\x2d\x00\x1d\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x1b\x00\x0c\x00\x0d\x00\x23\x00\x0e\x00\x25\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x0d\x00\x00\x00\x0e\x00\x26\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x0d\x00\x00\x00\x0e\x00\x1d\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyReduceArr = Happy_Data_Array.array (2, 41) [-	(2 , happyReduce_2),-	(3 , happyReduce_3),-	(4 , happyReduce_4),-	(5 , happyReduce_5),-	(6 , happyReduce_6),-	(7 , happyReduce_7),-	(8 , happyReduce_8),-	(9 , happyReduce_9),-	(10 , happyReduce_10),-	(11 , happyReduce_11),-	(12 , happyReduce_12),-	(13 , happyReduce_13),-	(14 , happyReduce_14),-	(15 , happyReduce_15),-	(16 , happyReduce_16),-	(17 , happyReduce_17),-	(18 , happyReduce_18),-	(19 , happyReduce_19),-	(20 , happyReduce_20),-	(21 , happyReduce_21),-	(22 , happyReduce_22),-	(23 , happyReduce_23),-	(24 , happyReduce_24),-	(25 , happyReduce_25),-	(26 , happyReduce_26),-	(27 , happyReduce_27),-	(28 , happyReduce_28),-	(29 , happyReduce_29),-	(30 , happyReduce_30),-	(31 , happyReduce_31),-	(32 , happyReduce_32),-	(33 , happyReduce_33),-	(34 , happyReduce_34),-	(35 , happyReduce_35),-	(36 , happyReduce_36),-	(37 , happyReduce_37),-	(38 , happyReduce_38),-	(39 , happyReduce_39),-	(40 , happyReduce_40),-	(41 , happyReduce_41)-	]--happy_n_terms = 21 :: Int-happy_n_nonterms = 16 :: Int--happyReduce_2 = happySpecReduce_3  0# happyReduction_2-happyReduction_2 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut6 happy_x_1 of { happy_var_1 -> -	case happyOut5 happy_x_3 of { happy_var_3 -> -	happyIn5-		 (docAppend happy_var_1 happy_var_3-	)}}--happyReduce_3 = happySpecReduce_2  0# happyReduction_3-happyReduction_3 happy_x_2-	happy_x_1-	 =  case happyOut5 happy_x_2 of { happy_var_2 -> -	happyIn5-		 (happy_var_2-	)}--happyReduce_4 = happySpecReduce_1  0# happyReduction_4-happyReduction_4 happy_x_1-	 =  case happyOut6 happy_x_1 of { happy_var_1 -> -	happyIn5-		 (happy_var_1-	)}--happyReduce_5 = happySpecReduce_0  0# happyReduction_5-happyReduction_5  =  happyIn5-		 (DocEmpty-	)--happyReduce_6 = happySpecReduce_1  1# happyReduction_6-happyReduction_6 happy_x_1-	 =  case happyOut7 happy_x_1 of { happy_var_1 -> -	happyIn6-		 (DocUnorderedList [happy_var_1]-	)}--happyReduce_7 = happySpecReduce_1  1# happyReduction_7-happyReduction_7 happy_x_1-	 =  case happyOut8 happy_x_1 of { happy_var_1 -> -	happyIn6-		 (DocOrderedList [happy_var_1]-	)}--happyReduce_8 = happySpecReduce_1  1# happyReduction_8-happyReduction_8 happy_x_1-	 =  case happyOut9 happy_x_1 of { happy_var_1 -> -	happyIn6-		 (DocDefList [happy_var_1]-	)}--happyReduce_9 = happySpecReduce_1  1# happyReduction_9-happyReduction_9 happy_x_1-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> -	happyIn6-		 (happy_var_1-	)}--happyReduce_10 = happySpecReduce_2  2# happyReduction_10-happyReduction_10 happy_x_2-	happy_x_1-	 =  case happyOut10 happy_x_2 of { happy_var_2 -> -	happyIn7-		 (happy_var_2-	)}--happyReduce_11 = happySpecReduce_2  3# happyReduction_11-happyReduction_11 happy_x_2-	happy_x_1-	 =  case happyOut10 happy_x_2 of { happy_var_2 -> -	happyIn8-		 (happy_var_2-	)}--happyReduce_12 = happyReduce 4# 4# happyReduction_12-happyReduction_12 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut16 happy_x_4 of { happy_var_4 -> -	happyIn9-		 ((happy_var_2, happy_var_4)-	) `HappyStk` happyRest}}--happyReduce_13 = happySpecReduce_1  5# happyReduction_13-happyReduction_13 happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	happyIn10-		 (docParagraph happy_var_1-	)}--happyReduce_14 = happySpecReduce_1  5# happyReduction_14-happyReduction_14 happy_x_1-	 =  case happyOut11 happy_x_1 of { happy_var_1 -> -	happyIn10-		 (DocCodeBlock happy_var_1-	)}--happyReduce_15 = happySpecReduce_1  5# happyReduction_15-happyReduction_15 happy_x_1-	 =  case happyOut12 happy_x_1 of { happy_var_1 -> -	happyIn10-		 (happy_var_1-	)}--happyReduce_16 = happySpecReduce_1  5# happyReduction_16-happyReduction_16 happy_x_1-	 =  case happyOut13 happy_x_1 of { happy_var_1 -> -	happyIn10-		 (DocExamples happy_var_1-	)}--happyReduce_17 = happySpecReduce_2  6# happyReduction_17-happyReduction_17 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokBirdTrack happy_var_1,_)) -> -	case happyOut11 happy_x_2 of { happy_var_2 -> -	happyIn11-		 (docAppend (DocString happy_var_1) happy_var_2-	)}}--happyReduce_18 = happySpecReduce_1  6# happyReduction_18-happyReduction_18 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokBirdTrack happy_var_1,_)) -> -	happyIn11-		 (DocString happy_var_1-	)}--happyReduce_19 = happySpecReduce_1  7# happyReduction_19-happyReduction_19 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokProperty happy_var_1,_)) -> -	happyIn12-		 (makeProperty happy_var_1-	)}--happyReduce_20 = happySpecReduce_2  8# happyReduction_20-happyReduction_20 happy_x_2-	happy_x_1-	 =  case happyOut14 happy_x_1 of { happy_var_1 -> -	case happyOut13 happy_x_2 of { happy_var_2 -> -	happyIn13-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_21 = happySpecReduce_1  8# happyReduction_21-happyReduction_21 happy_x_1-	 =  case happyOut14 happy_x_1 of { happy_var_1 -> -	happyIn13-		 ([happy_var_1]-	)}--happyReduce_22 = happySpecReduce_3  9# happyReduction_22-happyReduction_22 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokExamplePrompt happy_var_1,_)) -> -	case happyOutTok happy_x_2 of { ((TokExampleExpression happy_var_2,_)) -> -	case happyOut15 happy_x_3 of { happy_var_3 -> -	happyIn14-		 (makeExample happy_var_1 happy_var_2 (lines happy_var_3)-	)}}}--happyReduce_23 = happySpecReduce_2  9# happyReduction_23-happyReduction_23 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokExamplePrompt happy_var_1,_)) -> -	case happyOutTok happy_x_2 of { ((TokExampleExpression happy_var_2,_)) -> -	happyIn14-		 (makeExample happy_var_1 happy_var_2 []-	)}}--happyReduce_24 = happySpecReduce_2  10# happyReduction_24-happyReduction_24 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokExampleResult happy_var_1,_)) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	happyIn15-		 (happy_var_1 ++ happy_var_2-	)}}--happyReduce_25 = happySpecReduce_1  10# happyReduction_25-happyReduction_25 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokExampleResult happy_var_1,_)) -> -	happyIn15-		 (happy_var_1-	)}--happyReduce_26 = happySpecReduce_2  11# happyReduction_26-happyReduction_26 happy_x_2-	happy_x_1-	 =  case happyOut17 happy_x_1 of { happy_var_1 -> -	case happyOut16 happy_x_2 of { happy_var_2 -> -	happyIn16-		 (docAppend happy_var_1 happy_var_2-	)}}--happyReduce_27 = happySpecReduce_1  11# happyReduction_27-happyReduction_27 happy_x_1-	 =  case happyOut17 happy_x_1 of { happy_var_1 -> -	happyIn16-		 (happy_var_1-	)}--happyReduce_28 = happySpecReduce_1  12# happyReduction_28-happyReduction_28 happy_x_1-	 =  case happyOut19 happy_x_1 of { happy_var_1 -> -	happyIn17-		 (happy_var_1-	)}--happyReduce_29 = happySpecReduce_3  12# happyReduction_29-happyReduction_29 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_2 of { happy_var_2 -> -	happyIn17-		 (DocMonospaced happy_var_2-	)}--happyReduce_30 = happySpecReduce_2  13# happyReduction_30-happyReduction_30 happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_2 of { happy_var_2 -> -	happyIn18-		 (docAppend (DocString "\n") happy_var_2-	)}--happyReduce_31 = happySpecReduce_2  13# happyReduction_31-happyReduction_31 happy_x_2-	happy_x_1-	 =  case happyOut19 happy_x_1 of { happy_var_1 -> -	case happyOut18 happy_x_2 of { happy_var_2 -> -	happyIn18-		 (docAppend happy_var_1 happy_var_2-	)}}--happyReduce_32 = happySpecReduce_1  13# happyReduction_32-happyReduction_32 happy_x_1-	 =  case happyOut19 happy_x_1 of { happy_var_1 -> -	happyIn18-		 (happy_var_1-	)}--happyReduce_33 = happySpecReduce_1  14# happyReduction_33-happyReduction_33 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokString happy_var_1,_)) -> -	happyIn19-		 (DocString happy_var_1-	)}--happyReduce_34 = happySpecReduce_1  14# happyReduction_34-happyReduction_34 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokEmphasis happy_var_1,_)) -> -	happyIn19-		 (DocEmphasis (DocString happy_var_1)-	)}--happyReduce_35 = happySpecReduce_1  14# happyReduction_35-happyReduction_35 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokURL happy_var_1,_)) -> -	happyIn19-		 (DocHyperlink (makeHyperlink happy_var_1)-	)}--happyReduce_36 = happySpecReduce_1  14# happyReduction_36-happyReduction_36 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokPic happy_var_1,_)) -> -	happyIn19-		 (DocPic happy_var_1-	)}--happyReduce_37 = happySpecReduce_1  14# happyReduction_37-happyReduction_37 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokAName happy_var_1,_)) -> -	happyIn19-		 (DocAName happy_var_1-	)}--happyReduce_38 = happySpecReduce_1  14# happyReduction_38-happyReduction_38 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokIdent happy_var_1,_)) -> -	happyIn19-		 (DocIdentifier happy_var_1-	)}--happyReduce_39 = happySpecReduce_3  14# happyReduction_39-happyReduction_39 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut20 happy_x_2 of { happy_var_2 -> -	happyIn19-		 (DocModule happy_var_2-	)}--happyReduce_40 = happySpecReduce_1  15# happyReduction_40-happyReduction_40 happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokString happy_var_1,_)) -> -	happyIn20-		 (happy_var_1-	)}--happyReduce_41 = happySpecReduce_2  15# happyReduction_41-happyReduction_41 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { ((TokString happy_var_1,_)) -> -	case happyOut20 happy_x_2 of { happy_var_2 -> -	happyIn20-		 (happy_var_1 ++ happy_var_2-	)}}--happyNewToken action sts stk [] =-	happyDoAction 20# notHappyAtAll action sts stk []--happyNewToken action sts stk (tk:tks) =-	let cont i = happyDoAction i tk action sts stk tks in-	case tk of {-	(TokSpecial '/',_) -> cont 1#;-	(TokSpecial '@',_) -> cont 2#;-	(TokDefStart,_) -> cont 3#;-	(TokDefEnd,_) -> cont 4#;-	(TokSpecial '\"',_) -> cont 5#;-	(TokURL happy_dollar_dollar,_) -> cont 6#;-	(TokPic happy_dollar_dollar,_) -> cont 7#;-	(TokAName happy_dollar_dollar,_) -> cont 8#;-	(TokEmphasis happy_dollar_dollar,_) -> cont 9#;-	(TokBullet,_) -> cont 10#;-	(TokNumber,_) -> cont 11#;-	(TokBirdTrack happy_dollar_dollar,_) -> cont 12#;-	(TokProperty happy_dollar_dollar,_) -> cont 13#;-	(TokExamplePrompt happy_dollar_dollar,_) -> cont 14#;-	(TokExampleResult happy_dollar_dollar,_) -> cont 15#;-	(TokExampleExpression happy_dollar_dollar,_) -> cont 16#;-	(TokIdent happy_dollar_dollar,_) -> cont 17#;-	(TokPara,_) -> cont 18#;-	(TokString happy_dollar_dollar,_) -> cont 19#;-	_ -> happyError' (tk:tks)-	}--happyError_ 20# tk tks = happyError' tks-happyError_ _ tk tks = happyError' (tk:tks)--happyThen :: () => Maybe a -> (a -> Maybe b) -> Maybe b-happyThen = (>>=)-happyReturn :: () => a -> Maybe a-happyReturn = (return)-happyThen1 m k tks = (>>=) m (\a -> k a tks)-happyReturn1 :: () => a -> b -> Maybe a-happyReturn1 = \a tks -> (return) a-happyError' :: () => [(LToken)] -> Maybe a-happyError' = happyError--parseParas tks = happySomeParser where-  happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut5 x))--parseString tks = happySomeParser where-  happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut16 x))--happySeq = happyDontSeq---happyError :: [LToken] -> Maybe a-happyError toks = Nothing---- | Create a `Hyperlink` from given string.------ A hyperlink consists of a URL and an optional label.  The label is separated--- from the url by one or more whitespace characters.-makeHyperlink :: String -> Hyperlink-makeHyperlink input = case break isSpace $ strip input of-  (url, "")    -> Hyperlink url Nothing-  (url, label) -> Hyperlink url (Just . dropWhile isSpace $ label)--makeProperty :: String -> Doc RdrName-makeProperty s = case strip s of-  'p':'r':'o':'p':'>':xs ->-	DocProperty (dropWhile isSpace xs)-  xs ->-	error $ "makeProperty: invalid input " ++ show xs---- | Create an 'Example', stripping superfluous characters as appropriate-makeExample :: String -> String -> [String] -> Example-makeExample prompt expression result =-  Example-	(strip expression)	-- we do not care about leading and trailing-				-- whitespace in expressions, so drop them-	result'-  where-	-- 1. drop trailing whitespace from the prompt, remember the prefix-	(prefix, _) = span isSpace prompt--	-- 2. drop, if possible, the exact same sequence of whitespace-	-- characters from each result line-	---	-- 3. interpret lines that only contain the string "<BLANKLINE>" as an-	-- empty line-	result' = map (substituteBlankLine . tryStripPrefix prefix) result-	  where-		tryStripPrefix xs ys = fromMaybe ys $ stripPrefix xs ys--		substituteBlankLine "<BLANKLINE>" = ""-		substituteBlankLine line          = line---- | Remove all leading and trailing whitespace-strip :: String -> String-strip = dropWhile isSpace . reverse . dropWhile isSpace . reverse-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<command-line>" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp --{-# LINE 30 "templates/GenericTemplate.hs" #-}---data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList------{-# LINE 51 "templates/GenericTemplate.hs" #-}--{-# LINE 61 "templates/GenericTemplate.hs" #-}--{-# LINE 70 "templates/GenericTemplate.hs" #-}--infixr 9 `HappyStk`-data HappyStk a = HappyStk a (HappyStk a)---------------------------------------------------------------------------------- starting the parse--happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll---------------------------------------------------------------------------------- Accepting the parse---- If the current token is 0#, it means we've just accepted a partial--- parse (a %partial parser).  We must ignore the saved token on the top of--- the stack in this case.-happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =-	happyReturn1 ans-happyAccept j tk st sts (HappyStk ans _) = -	(happyTcHack j (happyTcHack st)) (happyReturn1 ans)---------------------------------------------------------------------------------- Arrays only: do the next action----happyDoAction i tk st-	= {- nothing -}---	  case action of-		0#		  -> {- nothing -}-				     happyFail i tk st-		-1# 	  -> {- nothing -}-				     happyAccept i tk st-		n | (n Happy_GHC_Exts.<# (0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}--				     (happyReduceArr Happy_Data_Array.! rule) i tk st-				     where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))-		n		  -> {- nothing -}---				     happyShift new_state i tk st-				     where (new_state) = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))-   where (off)    = indexShortOffAddr happyActOffsets st-         (off_i)  = (off Happy_GHC_Exts.+# i)-	 check  = if (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#))-			then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==#  i)-			else False-         (action)-          | check     = indexShortOffAddr happyTable off_i-          | otherwise = indexShortOffAddr happyDefActions st--{-# LINE 130 "templates/GenericTemplate.hs" #-}---indexShortOffAddr (HappyA# arr) off =-	Happy_GHC_Exts.narrow16Int# i-  where-        i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)-        high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))-        low  = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))-        off' = off Happy_GHC_Exts.*# 2#------data HappyAddr = HappyA# Happy_GHC_Exts.Addr#------------------------------------------------------------------------------------- HappyState data type (not arrays)--{-# LINE 163 "templates/GenericTemplate.hs" #-}---------------------------------------------------------------------------------- Shifting a token--happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =-     let (i) = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in---     trace "shifting the error token" $-     happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)--happyShift new_state i tk st sts stk =-     happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)---- happyReduce is specialised for the common cases.--happySpecReduce_0 i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happySpecReduce_0 nt fn j tk st@((action)) sts stk-     = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)--happySpecReduce_1 i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')-     = let r = fn v1 in-       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_2 i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')-     = let r = fn v1 v2 in-       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_3 i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')-     = let r = fn v1 v2 v3 in-       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happyReduce k i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happyReduce k nt fn j tk st sts stk-     = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of-	 sts1@((HappyCons (st1@(action)) (_))) ->-        	let r = fn stk in  -- it doesn't hurt to always seq here...-       		happyDoSeq r (happyGoto nt j tk st1 sts1 r)--happyMonadReduce k nt fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happyMonadReduce k nt fn j tk st sts stk =-        happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))-       where (sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))-             drop_stk = happyDropStk k stk--happyMonad2Reduce k nt fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happyMonad2Reduce k nt fn j tk st sts stk =-       happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))-       where (sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))-             drop_stk = happyDropStk k stk--             (off) = indexShortOffAddr happyGotoOffsets st1-             (off_i) = (off Happy_GHC_Exts.+# nt)-             (new_state) = indexShortOffAddr happyTable off_i-----happyDrop 0# l = l-happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t--happyDropStk 0# l = l-happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs---------------------------------------------------------------------------------- Moving to a new state after a reduction---happyGoto nt j tk st = -   {- nothing -}-   happyDoAction j tk new_state-   where (off) = indexShortOffAddr happyGotoOffsets st-         (off_i) = (off Happy_GHC_Exts.+# nt)-         (new_state) = indexShortOffAddr happyTable off_i------------------------------------------------------------------------------------- Error recovery (0# is the error token)---- parse error if we are in recovery and we fail again-happyFail 0# tk old_st _ stk@(x `HappyStk` _) =-     let (i) = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in---	trace "failing" $ -        happyError_ i tk--{-  We don't need state discarding for our restricted implementation of-    "error".  In fact, it can cause some bogus parses, so I've disabled it-    for now --SDM---- discard a state-happyFail  0# tk old_st (HappyCons ((action)) (sts)) -						(saved_tok `HappyStk` _ `HappyStk` stk) =---	trace ("discarding state, depth " ++ show (length stk))  $-	happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))--}---- Enter error recovery: generate an error token,---                       save the old token and carry on.-happyFail  i tk (action) sts stk =---      trace "entering error recovery" $-	happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)---- Internal happy errors:--notHappyAtAll :: a-notHappyAtAll = error "Internal Happy error\n"---------------------------------------------------------------------------------- Hack to get the typechecker to accept our action functions---happyTcHack :: Happy_GHC_Exts.Int# -> a -> a-happyTcHack x y = y-{-# INLINE happyTcHack #-}----------------------------------------------------------------------------------- Seq-ing.  If the --strict flag is given, then Happy emits ---	happySeq = happyDoSeq--- otherwise it emits--- 	happySeq = happyDontSeq--happyDoSeq, happyDontSeq :: a -> b -> b-happyDoSeq   a b = a `seq` b-happyDontSeq a b = b---------------------------------------------------------------------------------- Don't inline any functions from the template.  GHC has a nasty habit--- of deciding to inline happyGoto everywhere, which increases the size of--- the generated parser quite a bit.---{-# NOINLINE happyDoAction #-}-{-# NOINLINE happyTable #-}-{-# NOINLINE happyCheck #-}-{-# NOINLINE happyActOffsets #-}-{-# NOINLINE happyGotoOffsets #-}-{-# NOINLINE happyDefActions #-}--{-# NOINLINE happyShift #-}-{-# NOINLINE happySpecReduce_0 #-}-{-# NOINLINE happySpecReduce_1 #-}-{-# NOINLINE happySpecReduce_2 #-}-{-# NOINLINE happySpecReduce_3 #-}-{-# NOINLINE happyReduce #-}-{-# NOINLINE happyMonadReduce #-}-{-# NOINLINE happyGoto #-}-{-# NOINLINE happyFail #-}---- end of Happy Template.
doc/haddock.xml view
@@ -21,7 +21,7 @@       <holder>Simon Marlow, David Waern</holder>     </copyright>     <abstract>-      <para>This document describes Haddock version 2.13.2.1, a Haskell+      <para>This document describes Haddock version 2.14.1, a Haskell       documentation tool.</para>     </abstract>   </bookinfo>@@ -58,7 +58,7 @@       <listitem> 	<para>Documentation annotations in the source code should be 	easy on the eye when editing the source code itself, so as not-	to obsure the code and to make reading and writing+	to obscure the code and to make reading and writing 	documentation annotations easy.  The easier it is to write 	documentation, the more likely the programmer is to do it. 	Haddock therefore uses lightweight markup in its annotations,@@ -100,7 +100,7 @@ 	<para>We might want documentation in multiple formats - online 	and printed, for example.  Haddock comes with HTML, LaTeX,   and Hoogle backends, and it is structured in such a way that adding new-	back-ends is straightforward.</para>+	backends is straightforward.</para>       </listitem>     </itemizedlist> @@ -170,40 +170,41 @@       us.       </para>       <itemizedlist>-	<listitem>Ashley Yakeley</listitem>-	<listitem>Benjamin Franksen</listitem>-	<listitem>Brett Letner</listitem>-        <listitem>Clemens Fruhwirth</listitem>-        <listitem>Conal Elliott</listitem>-        <listitem>David Waern</listitem> -        <listitem>Duncan Coutts</listitem>-        <listitem>George Pollard</listitem>-        <listitem>George Russel</listitem>-        <listitem>Hal Daume</listitem>-        <listitem>Ian Lynagh</listitem>-        <listitem>Isaac Dupree</listitem>-        <listitem>Joachim Breitner</listitem>-        <listitem>Krasimir Angelov</listitem>-        <listitem>Lennart Augustsson</listitem>-        <listitem>Luke Plant</listitem>-        <listitem>Malcolm Wallace</listitem>-        <listitem>Mark Lentczner</listitem>-        <listitem>Mark Shields</listitem>-        <listitem>Neil Mitchell</listitem>-        <listitem>Mike Thomas</listitem>-        <listitem>Manuel Chakravarty</listitem>-        <listitem>Oliver Brown</listitem>-        <listitem>Roman Cheplyaka</listitem>-        <listitem>Ross Paterson</listitem>-        <listitem>Simon Hengel</listitem>-        <listitem>Simon Marlow</listitem>-        <listitem>Simon Peyton-Jones</listitem>-        <listitem>Sigbjorn Finne</listitem>-        <listitem>Stefan O'Rear</listitem>-        <listitem>Sven Panne</listitem>-        <listitem>Thomas Schilling</listitem>-        <listitem>Wolfgang Jeltsch</listitem>-        <listitem>Yitzchak Gale</listitem>+	<listitem><simpara>Ashley Yakeley</simpara></listitem>+	<listitem><simpara>Benjamin Franksen</simpara></listitem>+	<listitem><simpara>Brett Letner</simpara></listitem>+        <listitem><simpara>Clemens Fruhwirth</simpara></listitem>+        <listitem><simpara>Conal Elliott</simpara></listitem>+        <listitem><simpara>David Waern</simpara></listitem>+        <listitem><simpara>Duncan Coutts</simpara></listitem>+        <listitem><simpara>George Pollard</simpara></listitem>+        <listitem><simpara>George Russel</simpara></listitem>+        <listitem><simpara>Hal Daume</simpara></listitem>+        <listitem><simpara>Ian Lynagh</simpara></listitem>+        <listitem><simpara>Isaac Dupree</simpara></listitem>+        <listitem><simpara>Joachim Breitner</simpara></listitem>+        <listitem><simpara>Krasimir Angelov</simpara></listitem>+        <listitem><simpara>Lennart Augustsson</simpara></listitem>+        <listitem><simpara>Luke Plant</simpara></listitem>+        <listitem><simpara>Malcolm Wallace</simpara></listitem>+        <listitem><simpara>Manuel Chakravarty</simpara></listitem>+        <listitem><simpara>Mark Lentczner</simpara></listitem>+        <listitem><simpara>Mark Shields</simpara></listitem>+        <listitem><simpara>Mateusz Kowalczyk</simpara></listitem>+        <listitem><simpara>Mike Thomas</simpara></listitem>+        <listitem><simpara>Neil Mitchell</simpara></listitem>+        <listitem><simpara>Oliver Brown</simpara></listitem>+        <listitem><simpara>Roman Cheplyaka</simpara></listitem>+        <listitem><simpara>Ross Paterson</simpara></listitem>+        <listitem><simpara>Sigbjorn Finne</simpara></listitem>+        <listitem><simpara>Simon Hengel</simpara></listitem>+        <listitem><simpara>Simon Marlow</simpara></listitem>+        <listitem><simpara>Simon Peyton-Jones</simpara></listitem>+        <listitem><simpara>Stefan O'Rear</simpara></listitem>+        <listitem><simpara>Sven Panne</simpara></listitem>+        <listitem><simpara>Thomas Schilling</simpara></listitem>+        <listitem><simpara>Wolfgang Jeltsch</simpara></listitem>+        <listitem><simpara>Yitzchak Gale</simpara></listitem>       </itemizedlist>     </section>     <section>@@ -262,11 +263,14 @@     in a module that isn't being processed as part of the current     batch, simply won't be hyperlinked in the generated     documentation.  Haddock will emit warnings listing all the-    indentifiers it couldn't resolve.</para>+    identifiers it couldn't resolve.</para>      <para>The modules should <emphasis>not</emphasis> be mutually     recursive, as Haddock don't like swimming in circles.</para> +    <para>Note that while older version would fail on invalid markup, this is considered a bug in the+    new versions. If you ever get failed parsing message, please report it.</para>+     <para>You must also specify an option for the output format.     Currently only the <option>-h</option> option for HTML and the     <option>--hoogle</option> option for outputting Hoogle data are@@ -435,7 +439,7 @@ 	      <term><filename>haddock-util.js</filename></term> 	      <listitem> 		<para>Some JavaScript utilities used to implement some of the-		dynamic features like collapsable sections, and switching to+		dynamic features like collapsible sections, and switching to 		frames view.</para> 	      </listitem> 	    </varlistentry>@@ -453,7 +457,7 @@           will be generated into the current directory (or the             specified directory if the <option>-o</option> option is             given), including the following:</para>-          + 	  <variablelist> 	    <varlistentry> 	      <term><filename><replaceable>package</replaceable>.tex</filename></term>@@ -535,6 +539,10 @@ 	  <indexterm><primary><option>--source-entity</option></primary></indexterm>           <option>--source-entity</option>=<replaceable>URL</replaceable>         </term>+        <term>+	  <indexterm><primary><option>--source-entity-line</option></primary></indexterm>+	  <option>--source-entity-line</option>=<replaceable>URL</replaceable>+        </term> 	<listitem> 	  <para>Include links to the source files in the generated 	  documentation. Use the <option>--source-base</option> option to add a@@ -543,8 +551,11 @@ 	  the header bar of each module page. Use the 	  <option>--source-entity</option> option to add a source code link 	  next to the documentation for every value and type in each module.+	  <option>--source-entity-line</option> is a flag that gets used for+	  entities that need to link to an exact source location rather than a+	  name, eg. since they were defined inside a Template Haskell splice. 	  </para>-	  + 	  <para>In each case <replaceable>URL</replaceable> is the base URL 	  where the source files can be found.  For the per-module and 	  per-entity URLs, the following substitutions are made within the@@ -590,7 +601,7 @@ 	  you would say 	  <literal>haddock --source-base=<replaceable>url</replaceable>/ 	  --source-module=<replaceable>url</replaceable>/%F</literal></para>-	  + 	  <para>If you have html versions of your sources online with anchors 	  for each type and function name, you would say 	  <literal>haddock --source-base=<replaceable>url</replaceable>/@@ -650,7 +661,7 @@ 	  <para>Include links to pages where readers may comment on the 	  documentation. This feature would typically be used in conjunction 	  with a Wiki system.</para>-	  + 	  <para>Use the <option>--comments-base</option> option to add a 	  user comments link in the header bar of the contents and index pages. 	  Use the <option>--comments-module</option> to add a user comments@@ -658,7 +669,7 @@ 	  <option>--comments-entity</option> option to add a comments link 	  next to the documentation for every value and type in each module. 	  </para>-	  + 	  <para>In each case <replaceable>URL</replaceable> is the base URL 	  where the corresponding comments page can be found.  For the 	  per-module and per-entity URLs the same substitutions are made as@@ -669,7 +680,7 @@ 	  page, and every module to subpages, you would say 	  <literal>haddock --comments-base=<replaceable>url</replaceable> 	  --comments-module=<replaceable>url</replaceable>/%M</literal></para>-	  + 	  <para>If your Wiki system doesn't like the '<literal>.</literal>' character 	  in Haskell module names, you can replace it with a different character. For 	  example to replace the '<literal>.</literal>' characters with@@ -692,12 +703,12 @@ 	  documentation. If given multiple times then the pages will use the 	  first theme given by default, and have alternate style sheets for 	  the others. The reader can switch between themes with browsers that-	  support alternate style sheets, or with the "Style" menu that gets +	  support alternate style sheets, or with the "Style" menu that gets 	  added when the page is loaded. If 	  no themes are specified, then just the default built-in theme 	  ("Ocean") is used. 	  </para>-	  + 	  <para>The <replaceable>path</replaceable> parameter can be one of: 	  </para> @@ -825,16 +836,16 @@             <para>                 <itemizedlist>                     <listitem>-                        none: x, y, z+                        <simpara>none: x, y, z</simpara>                     </listitem>                     <listitem>-                        full: A.x, A.B.y, C.z+                        <simpara>full: A.x, A.B.y, C.z</simpara>                     </listitem>                     <listitem>-                        local: x, A.B.y, C.z+                        <simpara>local: x, A.B.y, C.z</simpara>                     </listitem>                     <listitem>-                        relative: x, B.y, C.z+                        <simpara>relative: x, B.y, C.z</simpara>                     </listitem>                 </itemizedlist> 	        </para>@@ -900,7 +911,7 @@ 	  <para>When generating HTML, do not generate an index. 	  Instead, redirect the Contents and/or Index link on each page to 	  <replaceable>URL</replaceable>.  This option is intended for-	  use in conjuction with <option>--gen-contents</option> and/or +	  use in conjunction with <option>--gen-contents</option> and/or 	  <option>--gen-index</option> for 	  generating a separate contents and/or index covering multiple 	  libraries.</para>@@ -917,10 +928,10 @@           <option>--gen-index</option>         </term> 	<listitem>-	  <para>Generate an HTML contents and/or index containing entries pulled +	  <para>Generate an HTML contents and/or index containing entries pulled 	  from all the specified interfaces (interfaces are specified using 	  <option>-i</option> or <option>--read-interface</option>).-	  This is used to generate a single contents and/or index for multiple +	  This is used to generate a single contents and/or index for multiple 	  sets of Haddock documentation.</para> 	</listitem>       </varlistentry>@@ -932,7 +943,7 @@ 	  <option>--ignore-all-exports</option> 	</term> 	<listitem>-	  <para>Causes Haddock to behaves as if every module has the+	  <para>Causes Haddock to behave as if every module has the 	    <literal>ignore-exports</literal> attribute (<xref 	      linkend="module-attributes" />).  This might be useful for 	    generating implementation documentation rather than interface@@ -947,19 +958,32 @@ 	  <option>--hide</option>&nbsp;<replaceable>module</replaceable> 	</term> 	<listitem>-	  <para>Causes Haddock to behaves as if module+	  <para>Causes Haddock to behave as if module 	    <replaceable>module</replaceable> has the <literal>hide</literal>-	    atribute. (<xref linkend="module-attributes" />).</para>+	    attribute. (<xref linkend="module-attributes" />).</para> 	</listitem>       </varlistentry>-      +       <varlistentry> 	<term>+	  <indexterm><primary><option>--show-extensions</option></primary>+	  </indexterm>+	  <option>--show-extensions</option>&nbsp;<replaceable>module</replaceable>+	</term>+	<listitem>+	  <para>Causes Haddock to behave as if module+	    <replaceable>module</replaceable> has the <literal>show-extensions</literal>+	    attribute. (<xref linkend="module-attributes" />).</para>+	</listitem>+      </varlistentry>++      <varlistentry>+	<term>           <indexterm><primary><option>--optghc</option></primary></indexterm>           <option>--optghc</option>=<replaceable>option</replaceable>         </term> 	<listitem>-	  <para>Pass <replaceable>option</replaceable> to GHC.</para>+	  <para>Pass <replaceable>option</replaceable> to GHC. Note that there is a double dash there, unlike for GHC.</para> 	</listitem>       </varlistentry> @@ -979,6 +1003,19 @@        <varlistentry>         <term>+          <indexterm><primary><option>--compatible-interface-versions</option></primary></indexterm>+          <option>--compatible-interface-versions</option>+        </term>+	<listitem>+          <para>+            Prints out space-separated versions of binary Haddock interface files that this version is compatible+            with.+          </para>+	</listitem>+      </varlistentry>++      <varlistentry>+        <term>           <indexterm><primary><option>--no-tmp-comp-dir</option></primary></indexterm>           <option>--no-tmp-comp-dir</option>         </term>@@ -992,7 +1029,7 @@           <para>           This flag can be used to avoid recompilation if compilation files already exist.           Compilation files are produced when Haddock has to process modules that make use of-          Template Haskell, in which case Haddock compiles the modules using the GHC API.  +          Template Haskell, in which case Haddock compiles the modules using the GHC API.           </para> 	</listitem>       </varlistentry>@@ -1001,10 +1038,10 @@     <section id="cpp">       <title>Using literate or pre-processed source</title> -      <para>Since Haddock uses GHC internally, both plain and +      <para>Since Haddock uses GHC internally, both plain and             literate Haskell sources are accepted without the need for the user             to do anything. To use the C pre-processor, however,-            the user must pass the the <option>-cpp</option> option to GHC +            the user must pass the the <option>-cpp</option> option to GHC             using <option>--optghc</option>.       </para>     </section>@@ -1063,11 +1100,19 @@ 	  <para>A <literal>newtype</literal> declaration,</para> 	</listitem> 	<listitem>-	  <para>A <literal>type</literal> declaration, or</para>+	  <para>A <literal>type</literal> declaration</para> 	</listitem> 	<listitem>-	  <para>A <literal>class</literal> declaration.</para>+	  <para>A <literal>class</literal> declaration,</para> 	</listitem>+        <listitem>+          <para>A <literal>data family</literal> or+            <literal>type family</literal> declaration, or</para>+        </listitem>+        <listitem>+          <para>A <literal>data instance</literal> or+            <literal>type instance</literal> declaration.</para>+        </listitem>       </itemizedlist>        <para>If the annotation is followed by a different kind of@@ -1180,6 +1225,29 @@         Haddock - for example doc comments can appear before or after         the comma in separated lists such as the list of record fields         above.</para>++        <para>In case that more than one constructor exports a field+        with the same name, the documentation attached to the first+        occurence of the field will be used, even if a comment is not+        present.+        </para>++<programlisting>+data T a = A { someField :: a -- ^ Doc for someField of A+             }+         | B { someField :: a -- ^ Doc for someField of B+             }+</programlisting>++        <para>In the above example, all occurences of+        <literal>someField</literal> in the documentation are going to+        be documented with <literal>Doc for someField of A</literal>.+        Note that Haddock versions 2.14.0 and before would join up+        documentation of each field and render the result. The reason+        for this seemingly weird behaviour is the fact that+        <literal>someField</literal> is actually the same (partial)+        function.</para>+       </section>        <section>@@ -1199,17 +1267,71 @@     <section>       <title>The module description</title> -      <para>A module may contain a documentation comment before the-      module header, in which case this comment is interpreted by-      Haddock as an overall description of the module itself, and-      placed in a section entitled <quote>Description</quote> in the-      documentation for the module.  For example:</para>+      <para>A module itself may be documented with multiple fields+      that can then be displayed by the backend. In particular, the+      HTML backend displays all the fields it currently knows+      about. We first show the most complete module documentation+      example and then talk about the fields.</para>  <programlisting>--- | This is the description for module "Foo"-module Foo where+{-|+Module      : W+Description : Short description+Copyright   : (c) Some Guy, 2013+                  Someone Else, 2014+License     : GPL-3+Maintainer  : sample@email.com+Stability   : experimental+Portability : POSIX++Here is a longer description of this module, containing some+commentary with @some markup@.+-}+module W where ... </programlisting>++      <para>The <quote>Module</quote> field should be clear. It+      currently doesn't affect the output of any of the backends but+      you might want to include it for human information or for any+      other tools that might be parsing these comments without the+      help of GHC.</para>++      <para>The <quote>Description</quote> field accepts some short text+      which outlines the general purpose of the module. If you're+      generating HTML, it will show up next to the module link in+      the module index.</para>++      <para>The <quote>Copyright</quote>, <quote>License</quote>,+      <quote>Maintainer</quote> and <quote>Stability</quote> fields+      should be obvious. An alternative spelling for the+      <quote>License</quote> field is accepted as+      <quote>Licence</quote> but the output will always prefer+      <quote>License</quote>.</para>++      <para>The <quote>Portability</quote> field has seen varied use+      by different library authors. Some people put down things like+      operating system constraints there while others put down which GHC+      extensions are used in the module. Note that you might want to+      consider using the <quote>show-extensions</quote> module flag for the+      latter.</para>++      <para>Finally, a module may contain a documentation comment+      before the module header, in which case this comment is+      interpreted by Haddock as an overall description of the module+      itself, and placed in a section entitled+      <quote>Description</quote> in the documentation for the module.+      All usual Haddock markup is valid in this comment.</para>++      <para>All fields are optional but they must be in order if they+      do appear. Multi-line fields are accepted but the consecutive+      lines have to start indented more than their label. If your+      label is indented one space as is often the case with+      <quote>--</quote> syntax, the consecutive lines have to start at+      two spaces at the very least. Please note that we do not enforce+      the format for any of the fields and the established formats are+      just a convention.</para>+     </section>      <section>@@ -1349,6 +1471,17 @@ 	defined in the module.  In this special case the module body 	may also include section headings (normally they would be 	ignored by Haddock).</para>++<programlisting>+module Foo where++-- * This heading will now appear before foo.++-- | Documentation for 'foo'.+foo :: Integer+foo = 5+</programlisting>+       </section>     </section> @@ -1461,7 +1594,7 @@ 	    chosen as the home.</para> 	</listitem> 	<listitem>-	  <para>A module with the <literal>not-home</literal> atribute is only+	  <para>A module with the <literal>not-home</literal> attribute is only 	    chosen if there are no other modules to choose.</para> 	</listitem>       </itemizedlist>@@ -1555,6 +1688,20 @@ 	      <xref linkend="hyperlinking" /> for more details.</para> 	  </listitem> 	</varlistentry>++	<varlistentry>+	  <term>+	    <indexterm><primary><literal>show-extensions</literal></primary></indexterm>+      <literal>show-extensions</literal>+	  </term>+	  <listitem>+	    <para>Indicates that we should render the extensions used in this module in the+            resulting documentation. This will only render if the output format supports it.+            If Language is set, it will be shown as well and all the extensions implied by it won't.+            All enabled extensions will be rendered, including those implied by their more powerful versions.</para>+	  </listitem>+	</varlistentry>+       </variablelist>      </section>@@ -1669,7 +1816,7 @@ </programlisting> 	<para>Result lines that only contain the string 	<literal>&lt;BLANKLINE&gt;</literal> are rendered as blank lines in the-	generated documenation.</para>+	generated documentation.</para>       </section>        <section>@@ -1736,11 +1883,18 @@       </section>        <section>-	<title>Emphasis and Monospaced text</title>+	<title>Emphasis, Bold and Monospaced text</title>  	<para>Emphasis may be added by surrounding text with-	<literal>/.../</literal>.</para>+	<literal>/.../</literal>. Other markup is valid inside emphasis. To have a forward+        slash inside of emphasis, just escape it: <literal>/fo\/o/</literal></para> +        <para>Bold (strong) text is indicated by surrounding it with <literal>__...__</literal>.+        Other markup is valid inside bold. For example, <literal>__/foo/__</literal> will make the emphasised+        text <literal>foo</literal> bold. You don't have to escape a single underscore if you need it bold:+        <literal>__This_text_with_underscores_is_bold__</literal>.+        </para>+ 	<para>Monospaced (or typewriter) text is indicated by 	surrounding it with <literal>@...@</literal>.  Other markup is 	valid inside a monospaced span: for example@@ -1758,6 +1912,11 @@ -- | This is a reference to the "Foo" module. </programlisting> +        <para>A basic check is done on the syntax of the header name to ensure that it is valid+        before turning it into a link but unlike with identifiers, whether the module is in scope isn't checked+        and will always be turned into a link.+        </para>+       </section>        <section>@@ -1791,6 +1950,59 @@ -- --     2. second item </programlisting>++      <para>Lists of the same type don't have to be separated by a newline:</para>+<programlisting>+-- | This is an enumerated list:+--+--     (1) first item+--     2. second item+--+-- This is a bulleted list:+--+--     * first item+--     * second item+</programlisting>++      <para>You can have more than one line of content in a list element:+      </para>+<programlisting>+-- |+-- * first item+-- and more content for the first item+-- * second item+-- and more content for the second item+</programlisting>++     <para>You can even nest whole paragraphs inside of list elements. The rules+     are 4 spaces for each indentation level. You're required to use a newline before+     such nested paragraph:+     </para>+<programlisting>+{-|+* Beginning of list+This belongs to the list above!++    > nested+    > bird+    > tracks++    * Next list+    More of the indented list.++        * Deeper++            @+            even code blocks work+            @++            * Deeper++                    1. Even deeper!+                    2. No newline separation even in indented lists.+-}+</programlisting>+       </section>        <section>@@ -1831,7 +2043,11 @@ 	it is assumed to be a definition paragraph, and the next 	<literal>]</literal> character found will close the definition 	term.  Other markup operators may be used freely within the-	definition term.</para>+	definition term. You can escape <literal>]</literal> with a backslash as usual.</para>++      <para>Same rules about nesting and no newline separation as for bulleted and numbered lists apply.+      </para>+       </section>        <section>@@ -1843,15 +2059,34 @@ 	it, the URL will be turned into a hyperlink when 	rendered.</para> -        The URL can be followed by an optional label:+        <para>The URL can be followed by an optional label:</para> <programlisting> &lt;http://example.com label&gt; </programlisting>-        The label is then used as a descriptive text for the hyperlink, if the-        output format supports it.+      <para>The label is then used as a descriptive text for the hyperlink, if the+        output format supports it.</para>++      <para>If Haddock sees something that looks like a URL (such as something starting with+      <literal>http://</literal> or <literal>ssh://</literal>) where the URL markup is valid,+      it will automatically make it a hyperlink.</para>       </section>        <section>+	<title>Images</title>++	<para>An image can be included in a documentation comment by+	surrounding it in double angle brackets:+	<literal>&lt;&lt;...&gt;&gt;</literal>.  If the output format supports+	it, the image will be rendered inside the documentation.</para>++        <para>Title text can be included using an optional label:</para>+<programlisting>+&lt;&lt;pathtoimage.png title&gt;&gt;+</programlisting>++      </section>++      <section> 	<title>Anchors</title>  	<para>Sometimes it is useful to be able to link to a point in@@ -1869,6 +2104,45 @@ 	the anchor label.  The module does not have to be local, it 	can be imported via an interface.</para>       </section>++      <section>+	<title>Headings</title>+        <para>Headings inside of comment documentation are possible be preceding them with+        a number of <literal>=</literal>s. From 1 to 6 are accepted. Extra <literal>=</literal>s will+        be treated as belonging to the text of the heading. Note that it's up to the output format to decide+        how to render the different levels.+        </para>++<programlisting>+-- |+-- = Heading level 1 with some __bold__+-- Something underneath the heading.+--+-- == /Subheading/+-- More content.+--+-- === Subsubheading+-- Even more content.+</programlisting>++        <para>Note that while headings have to start on a new paragraph, we allow paragraph-level content to+        follow these immediately.+        </para>++<programlisting>+-- |+-- = Heading level 1 with some __bold__+-- Something underneath the heading.+--+-- == /Subheading/+-- More content.+--+-- === Subsubheading+-- >>> examples are only allowed at the start of paragraphs+</programlisting>++      </section>+     </section>   </chapter>   <index/>
haddock.cabal view
@@ -1,12 +1,12 @@ name:                 haddock-version:              2.13.2.1+version:              2.14.1 synopsis:             A documentation-generation tool for Haskell libraries description:          Haddock is a documentation-generation tool for Haskell                       libraries license:              BSD3 license-file:         LICENSE author:               Simon Marlow, David Waern-maintainer:           David Waern <david.waern@gmail.com>+maintainer:           Simon Hengel <sol@typeful.net>, Mateusz Kowalczyk <fuuzetsu@fuuzetsu.co.uk> homepage:             http://www.haskell.org/haddock/ bug-reports:          http://trac.haskell.org/haddock copyright:            (c) Simon Marlow, David Waern@@ -31,6 +31,9 @@   src/haddock.sh   html-test/src/*.hs   html-test/ref/*.html+  latex-test/src/Simple/*.hs+  latex-test/ref/Simple/*.tex+  latex-test/ref/Simple/*.sty  data-dir:   resources data-files: html/frames.html@@ -62,16 +65,15 @@   default-language:     Haskell2010   main-is:              Main.hs   hs-source-dirs:       driver-   if flag(dev)     ghc-options:          -funbox-strict-fields -Wall -fwarn-tabs   else     ghc-options:          -funbox-strict-fields -Wall -fwarn-tabs -O2    build-depends:-    base >= 4.3 && < 4.7+    base >= 4.3 && < 4.8   if flag(in-ghc-tree)-    hs-source-dirs: src+    hs-source-dirs: src, vendor/attoparsec-0.10.4.0     cpp-options: -DIN_GHC_TREE     build-depends:       filepath,@@ -81,9 +83,20 @@       array,       xhtml >= 3000.2 && < 3000.3,       Cabal >= 1.10,-      ghc == 7.6.*+      ghc >= 7.7 && < 7.10,+      bytestring+     other-modules:       Documentation.Haddock+      Data.Attoparsec+      Data.Attoparsec.ByteString+      Data.Attoparsec.ByteString.Char8+      Data.Attoparsec.Combinator+      Data.Attoparsec.Number+      Data.Attoparsec.ByteString.FastSet+      Data.Attoparsec.ByteString.Internal+      Data.Attoparsec.Internal+      Data.Attoparsec.Internal.Types       Haddock       Haddock.Interface       Haddock.Interface.Rename@@ -91,8 +104,9 @@       Haddock.Interface.AttachInstances       Haddock.Interface.LexParseRn       Haddock.Interface.ParseModuleHeader-      Haddock.Lex-      Haddock.Parse+      Haddock.Parser+      Haddock.Parser.Util+      Haddock.Utf8       Haddock.Utils       Haddock.Backends.Xhtml       Haddock.Backends.Xhtml.Decl@@ -118,12 +132,10 @@  library   default-language:     Haskell2010-  -- In a GHC tree - in particular, in a source tarball - we don't-  -- require alex or happy-  if !flag(in-ghc-tree)-    build-tools: alex >= 2.3, happy >= 1.18+   build-depends:-    base >= 4.3 && < 4.7,+    base >= 4.3 && < 4.8,+    bytestring,     filepath,     directory,     containers,@@ -131,14 +143,14 @@     array,     xhtml >= 3000.2 && < 3000.3,     Cabal >= 1.10,-    ghc == 7.6.*+    ghc >= 7.4 && < 7.10    if flag(in-ghc-tree)     cpp-options: -DIN_GHC_TREE   else     build-depends: ghc-paths -  hs-source-dirs:       src+  hs-source-dirs:       src, vendor/attoparsec-0.10.4.0   if flag(dev)     ghc-options:          -funbox-strict-fields -Wall -fwarn-tabs   else@@ -148,6 +160,15 @@     Documentation.Haddock    other-modules:+    Data.Attoparsec+    Data.Attoparsec.ByteString+    Data.Attoparsec.ByteString.Char8+    Data.Attoparsec.Combinator+    Data.Attoparsec.Number+    Data.Attoparsec.ByteString.FastSet+    Data.Attoparsec.ByteString.Internal+    Data.Attoparsec.Internal+    Data.Attoparsec.Internal.Types     Haddock     Haddock.Interface     Haddock.Interface.Rename@@ -155,8 +176,9 @@     Haddock.Interface.AttachInstances     Haddock.Interface.LexParseRn     Haddock.Interface.ParseModuleHeader-    Haddock.Lex-    Haddock.Parse+    Haddock.Parser+    Haddock.Parser.Util+    Haddock.Utf8     Haddock.Utils     Haddock.Backends.Xhtml     Haddock.Backends.Xhtml.Decl@@ -189,39 +211,38 @@   hs-source-dirs:   html-test   build-depends:    base, directory, process, filepath, Cabal +test-suite latex-test+  type:             exitcode-stdio-1.0+  default-language: Haskell2010+  main-is:          run.lhs+  hs-source-dirs:   latex-test+  build-depends:    base, directory, process, filepath, Cabal+ test-suite spec   type:             exitcode-stdio-1.0   default-language: Haskell2010   main-is:          Spec.hs   hs-source-dirs:       test-    , test/nanospec     , src+    , vendor/attoparsec-0.10.4.0    other-modules:-      Test.Hspec-      Haddock.ParseSpec+      Haddock.ParserSpec    build-depends:       base+    , bytestring     , ghc     , containers     , deepseq     , array+    , hspec+    , QuickCheck == 2.* -  -- NOTE: As of this writing, Cabal does not properly handle alex/happy for-  -- test suites.  We work around this by adding dist/build to hs-source-dirs,-  -- so that the the generated lexer/parser from the library is used.  In-  -- addition we depend on 'haddock', so that the library is compiled before-  -- the test suite.-  ---  -- The corresponding cabal ticket is here:-  -- https://github.com/haskell/cabal/issues/943-  hs-source-dirs:-      dist/build   build-depends:       haddock  source-repository head   type:     git-  location: http://darcs.haskell.org/haddock.git+  location: http://git.haskell.org/haddock.git
haddock.spec view
@@ -17,7 +17,7 @@ # version label of your release tarball.  %define name    haddock-%define version 2.13.2.1+%define version 2.14.1 %define release 1  Name:           %{name}
html-test/ref/A.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -48,9 +48,9 @@ 	><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >A</a-	    >  = <a href=""+	    > = <a href="" 	    >A</a 	    ></li 	  ><li class="src short"@@ -68,9 +68,9 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >X</a-	    >  = <a href=""+	    > = <a href="" 	    >X</a 	    ></li 	  ><li class="src short"@@ -88,9 +88,9 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:A" class="def"+	    > <a name="t:A" class="def" 	    >A</a-	    >  </p+	    ></p 	  ><div class="subs constructors" 	  ><p class="caption" 	    >Constructors</p@@ -123,21 +123,19 @@ 	    ></p 	  ><div class="doc" 	  ><p-	    >Doc for test2-</p+	    >Doc for test2</p 	    ></div 	  ></div 	><div class="top" 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:X" class="def"+	    > <a name="t:X" class="def" 	    >X</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><p-	    >Should show up on the page for both modules A and B-</p+	    >Should show up on the page for both modules A and B</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -150,8 +148,7 @@ 		  ></td 		><td class="doc" 		><p-		  >Doc for consructor-</p+		  >Doc for consructor</p 		  ></td 		></tr 	      ></table@@ -166,8 +163,7 @@ 	    ></p 	  ><div class="doc" 	  ><p-	    >Should show up on the page for both modules A and B-</p+	    >Should show up on the page for both modules A and B</p 	    ></div 	  ></div 	></div@@ -176,7 +172,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/AdvanceTypes.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -48,9 +48,9 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:Pattern" class="def"+	    > <a name="t:Pattern" class="def" 	    >Pattern</a-	    >  <span class="keyword"+	    > <span class="keyword" 	    >where</span 	    ></p 	  ><div class="subs constructors"@@ -63,7 +63,7 @@ 		  >Nil</a 		  > ::  <a href="" 		  >Pattern</a-		  > `[]`</td+		  > []</td 		><td class="doc empty" 		>&nbsp;</td 		></tr@@ -90,7 +90,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/B.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -64,9 +64,9 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >X</a-	    >  = <a href=""+	    > = <a href="" 	    >X</a 	    ></li 	  ></ul@@ -115,8 +115,7 @@ 	      >.    Module link: <a href="" 	      >Prelude</a-	      >.-</p+	      >.</p 	    ></div 	  ></div 	><div class="top"@@ -128,21 +127,19 @@ 	    ></p 	  ><div class="doc" 	  ><p-	    >Should show up on the page for both modules A and B-</p+	    >Should show up on the page for both modules A and B</p 	    ></div 	  ></div 	><div class="top" 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:X" class="def"+	    > <a name="t:X" class="def" 	    >X</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><p-	    >Should show up on the page for both modules A and B-</p+	    >Should show up on the page for both modules A and B</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -155,8 +152,7 @@ 		  ></td 		><td class="doc" 		><p-		  >Doc for consructor-</p+		  >Doc for consructor</p 		  ></td 		></tr 	      ></table@@ -168,7 +164,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
+ html-test/ref/Bold.html view
@@ -0,0 +1,99 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"+     /><title+    >Bold</title+    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"+     /><script src="haddock-util.js" type="text/javascript"+    ></script+    ><script type="text/javascript"+    >//<![CDATA[+window.onload = function () {pageLoad();setSynopsis("mini_Bold.html");};+//]]>+</script+    ></head+  ><body+  ><div id="package-header"+    ><ul class="links" id="page-menu"+      ><li+	><a href="index.html"+	  >Contents</a+	  ></li+	><li+	><a href="doc-index.html"+	  >Index</a+	  ></li+	></ul+      ><p class="caption empty"+      >&nbsp;</p+      ></div+    ><div id="content"+    ><div id="module-header"+      ><table class="info"+	><tr+	  ><th+	    >Safe Haskell</th+	    ><td+	    >Safe-Inferred</td+	    ></tr+	  ></table+	><p class="caption"+	>Bold</p+	></div+      ><div id="synopsis"+      ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')"+	>Synopsis</p+	><ul id="section.syn" class="hide" onclick="toggleSection('syn')"+	><li class="src short"+	  ><a href="#v:foo"+	    >foo</a+	    > ::  t</li+	  ></ul+	></div+      ><div id="interface"+      ><h1+	>Documentation</h1+	><div class="top"+	><p class="src"+	  ><a name="v:foo" class="def"+	    >foo</a+	    > ::  t</p+	  ><div class="doc"+	  ><p+	    >Some <strong+	      >bold text</strong+	      >.</p+	    ><ul+	    ><li+	      ><strong+		>Bold</strong+		> in a list</li+	      ></ul+	    ><dl+	    ><dt+	      ><strong+		>bold in a definition</strong+		></dt+	      ><dd+	      >list</dd+	      ></dl+	    ><pre+	    > bold <strong+	      >in</strong+	      > a <strong+	      >code</strong+	      > block</pre+	    ></div+	  ></div+	></div+      ></div+    ><div id="footer"+    ><p+      >Produced by <a href="http://www.haskell.org/haddock/"+	>Haddock</a+	> version 2.14.1</p+      ></div+    ></body+  ></html+>
html-test/ref/Bug1.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -48,9 +48,9 @@ 	><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >T</a-	    >  = <a href=""+	    > = <a href="" 	    >T</a 	    ></li 	  ></ul@@ -62,9 +62,9 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:T" class="def"+	    > <a name="t:T" class="def" 	    >T</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><p 	    >We should have different anchors for constructors and types/classes.  This@@ -72,8 +72,7 @@ 	      ><a href="" 		>T</a 		></code-	      >.-</p+	      >.</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -96,7 +95,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
+ html-test/ref/Bug195.html view
@@ -0,0 +1,179 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"+     /><title+    >Bug195</title+    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"+     /><script src="haddock-util.js" type="text/javascript"+    ></script+    ><script type="text/javascript"+    >//<![CDATA[+window.onload = function () {pageLoad();setSynopsis("mini_Bug195.html");};+//]]>+</script+    ></head+  ><body+  ><div id="package-header"+    ><ul class="links" id="page-menu"+      ><li+	><a href=""+	  >Contents</a+	  ></li+	><li+	><a href=""+	  >Index</a+	  ></li+	></ul+      ><p class="caption empty"+      >&nbsp;</p+      ></div+    ><div id="content"+    ><div id="module-header"+      ><table class="info"+	><tr+	  ><th+	    >Safe Haskell</th+	    ><td+	    >Safe-Inferred</td+	    ></tr+	  ></table+	><p class="caption"+	>Bug195</p+	></div+      ><div id="interface"+      ><h1+	>Documentation</h1+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >data</span+	    > <a name="t:T" class="def"+	    >T</a+	    ></p+	  ><div class="subs constructors"+	  ><p class="caption"+	    >Constructors</p+	    ><table+	    ><tr+	      ><td class="src"+		><a name="v:A" class="def"+		  >A</a+		  ></td+		><td class="doc empty"+		>&nbsp;</td+		></tr+	      ><tr+	      ><td colspan="2"+		><div class="subs fields"+		  ><p class="caption"+		    >Fields</p+		    ><dl+		    ><dt class="src"+		      ><a name="v:someField" class="def"+			>someField</a+			> :: ()</dt+		      ><dd class="doc"+		      ><p+			>Doc for someField of A</p+			></dd+		      ><dt class="src"+		      ><a name="v:someOtherField" class="def"+			>someOtherField</a+			> :: ()</dt+		      ><dd class="doc"+		      ><p+			>Doc for someOtherField of A</p+			></dd+		      ></dl+		    ><div class="clear"+		    ></div+		    ></div+		  ></td+		></tr+	      ><tr+	      ><td class="src"+		><a name="v:B" class="def"+		  >B</a+		  ></td+		><td class="doc empty"+		>&nbsp;</td+		></tr+	      ><tr+	      ><td colspan="2"+		><div class="subs fields"+		  ><p class="caption"+		    >Fields</p+		    ><dl+		    ><dt class="src"+		      ><a name="v:someField" class="def"+			>someField</a+			> :: ()</dt+		      ><dd class="doc"+		      ><p+			>Doc for someField of A</p+			></dd+		      ><dt class="src"+		      ><a name="v:someOtherField" class="def"+			>someOtherField</a+			> :: ()</dt+		      ><dd class="doc"+		      ><p+			>Doc for someOtherField of A</p+			></dd+		      ></dl+		    ><div class="clear"+		    ></div+		    ></div+		  ></td+		></tr+	      ><tr+	      ><td class="src"+		><a name="v:C" class="def"+		  >C</a+		  ></td+		><td class="doc empty"+		>&nbsp;</td+		></tr+	      ><tr+	      ><td colspan="2"+		><div class="subs fields"+		  ><p class="caption"+		    >Fields</p+		    ><dl+		    ><dt class="src"+		      ><a name="v:someField" class="def"+			>someField</a+			> :: ()</dt+		      ><dd class="doc"+		      ><p+			>Doc for someField of A</p+			></dd+		      ><dt class="src"+		      ><a name="v:someOtherField" class="def"+			>someOtherField</a+			> :: ()</dt+		      ><dd class="doc"+		      ><p+			>Doc for someOtherField of A</p+			></dd+		      ></dl+		    ><div class="clear"+		    ></div+		    ></div+		  ></td+		></tr+	      ></table+	    ></div+	  ></div+	></div+      ></div+    ><div id="footer"+    ><p+      >Produced by <a href=""+	>Haddock</a+	> version 2.14.1</p+      ></div+    ></body+  ></html+>
html-test/ref/Bug2.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -58,7 +58,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/Bug3.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -66,8 +66,7 @@ 	  ><div class="doc" 	  ><p 	    >/multi-line- emphasis/-</p+ emphasis/</p 	    ></div 	  ></div 	></div@@ -76,7 +75,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/Bug4.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -65,8 +65,7 @@ 	    ></p 	  ><div class="doc" 	  ><p-	    >don't use apostrophe's in the wrong place's-</p+	    >don't use apostrophe's in the wrong place's</p 	    ></div 	  ></div 	></div@@ -75,7 +74,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/Bug6.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -46,8 +46,7 @@ 	>Description</p 	><div class="doc" 	><p-	  >Exporting records.-</p+	  >Exporting records.</p 	  ></div 	></div       ><div id="synopsis"@@ -57,9 +56,9 @@ 	><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >A</a-	    >  = <a href=""+	    > = <a href="" 	    >A</a 	    > <a href="" 	    >Int</a@@ -67,9 +66,9 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >B</a-	    >  = <a href=""+	    > = <a href="" 	    >B</a 	    > {<ul class="subs" 	    ><li@@ -83,9 +82,9 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >C</a-	    >  = <a href=""+	    > = <a href="" 	    >C</a 	    > {<ul class="subs" 	    ><li@@ -105,9 +104,9 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >D</a-	    >  = <a href=""+	    > = <a href="" 	    >D</a 	    > <a href="" 	    >Int</a@@ -117,9 +116,9 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >newtype</span-	    >  <a href=""+	    > <a href="" 	    >E</a-	    >  = <a href=""+	    > = <a href="" 	    >E</a 	    > <a href="" 	    >Int</a@@ -133,13 +132,12 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:A" class="def"+	    > <a name="t:A" class="def" 	    >A</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><p-	    >This record is exported without its field-</p+	    >This record is exported without its field</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -162,14 +160,13 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:B" class="def"+	    > <a name="t:B" class="def" 	    >B</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><p 	    >.. with its field, but the field is named separately in the export list- (the field isn't documented separately since it is already documented here)-</p+ (the field isn't documented separately since it is already documented here)</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -210,13 +207,12 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:C" class="def"+	    > <a name="t:C" class="def" 	    >C</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><p-	    >.. with fields names as subordinate names in the export-</p+	    >.. with fields names as subordinate names in the export</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -265,14 +261,13 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:D" class="def"+	    > <a name="t:D" class="def" 	    >D</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><p 	    >.. with only some of the fields exported (we can't handle this one -- how do we render the declaration?)-</p+ how do we render the declaration?)</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -297,13 +292,12 @@ 	><p class="src" 	  ><span class="keyword" 	    >newtype</span-	    >  <a name="t:E" class="def"+	    > <a name="t:E" class="def" 	    >E</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><p-	    >a newtype with a field-</p+	    >a newtype with a field</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -328,7 +322,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/Bug7.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -47,8 +47,7 @@ 	><div class="doc" 	><p 	  >This module caused a duplicate instance in the documentation for the Foo- type.-</p+ type.</p 	  ></div 	></div       ><div id="synopsis"@@ -58,17 +57,17 @@ 	><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >Foo</a-	    >  = <a href=""+	    > = <a href="" 	    >Foo</a 	    ></li 	  ><li class="src short" 	  ><span class="keyword" 	    >class</span-	    >  <a href=""+	    > <a href="" 	    >Bar</a-	    > x y </li+	    > x y</li 	  ></ul 	></div       ><div id="interface"@@ -78,13 +77,12 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:Foo" class="def"+	    > <a name="t:Foo" class="def" 	    >Foo</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><p-	    >The Foo datatype-</p+	    >The Foo datatype</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -116,8 +114,7 @@ 		    ></td 		  ><td class="doc" 		  ><p-		    >Just one instance-</p+		    >Just one instance</p 		    ></td 		  ></tr 		></table@@ -128,13 +125,12 @@ 	><p class="src" 	  ><span class="keyword" 	    >class</span-	    >  <a name="t:Bar" class="def"+	    > <a name="t:Bar" class="def" 	    >Bar</a-	    > x y </p+	    > x y</p 	  ><div class="doc" 	  ><p-	    >The Bar class-</p+	    >The Bar class</p 	    ></div 	  ><div class="subs instances" 	  ><p id="control.i:Bar" class="caption collapser" onclick="toggleSection('i:Bar')"@@ -152,8 +148,7 @@ 		    ></td 		  ><td class="doc" 		  ><p-		    >Just one instance-</p+		    >Just one instance</p 		    ></td 		  ></tr 		></table@@ -166,7 +161,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/Bug8.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -48,9 +48,9 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:Typ" class="def"+	    > <a name="t:Typ" class="def" 	    >Typ</a-	    >  </p+	    ></p 	  ><div class="subs constructors" 	  ><p class="caption" 	    >Constructors</p@@ -60,7 +60,7 @@ 		><a name="v:Type" class="def" 		  >Type</a 		  > (<a href=""-		  >String</a+		  >Typ</a 		  >, [<a href="" 		  >Typ</a 		  >])</td@@ -72,9 +72,9 @@ 		><a name="v:TFree" class="def" 		  >TFree</a 		  > (<a href=""-		  >String</a+		  >Typ</a 		  >, [<a href=""-		  >String</a+		  >Typ</a 		  >])</td 		><td class="doc empty" 		>&nbsp;</td@@ -86,37 +86,45 @@ 	><p class="src" 	  ><a name="v:-45--45--62-" class="def" 	    >(--&gt;)</a-	    > ::  t -&gt; t1 -&gt; <a href=""+	    > ::  t -&gt; t1 -&gt; <a href="Bug8.html#t:Typ" 	    >Typ</a+	    > <span class="fixity"+	    >infix 9</span+	    ><span class="rightedge"+	    ></span 	    ></p 	  ></div 	><div class="top" 	><p class="src" 	  ><a name="v:-45--45--45--62-" class="def" 	    >(---&gt;)</a-	    > ::  [a] -&gt; <a href=""+	    > ::  [a] -&gt; <a href="Bug8.html#t:Typ" 	    >Typ</a-	    > -&gt; <a href=""+	    > -&gt; <a href="Bug8.html#t:Typ" 	    >Typ</a+	    > <span class="fixity"+	    >infix 9</span+	    ><span class="rightedge"+	    ></span 	    ></p 	  ></div 	><div class="top" 	><p class="src" 	  ><a name="v:s" class="def" 	    >s</a-	    > ::  a</p+	    > ::  t</p 	  ></div 	><div class="top" 	><p class="src" 	  ><a name="v:t" class="def" 	    >t</a-	    > ::  a</p+	    > ::  t</p 	  ></div 	><div class="top" 	><p class="src" 	  ><a name="v:main" class="def" 	    >main</a-	    > ::  a</p+	    > ::  t</p 	  ></div 	></div       ></div@@ -124,7 +132,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/BugDeprecated.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -96,8 +96,7 @@ 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: for foo-</p+	      >Deprecated: for foo</p 	      ></div 	    ></div 	  ></div@@ -111,8 +110,7 @@ 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: for baz-</p+	      >Deprecated: for baz</p 	      ></div 	    ></div 	  ></div@@ -126,8 +124,7 @@ 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: for bar-</p+	      >Deprecated: for bar</p 	      ></div 	    ></div 	  ></div@@ -141,12 +138,10 @@ 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: for one-</p+	      >Deprecated: for one</p 	      ></div 	    ><p-	    >some documentation for one, two and three-</p+	    >some documentation for one, two and three</p 	    ></div 	  ></div 	><div class="top"@@ -159,12 +154,10 @@ 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: for three-</p+	      >Deprecated: for three</p 	      ></div 	    ><p-	    >some documentation for one, two and three-</p+	    >some documentation for one, two and three</p 	    ></div 	  ></div 	><div class="top"@@ -177,12 +170,10 @@ 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: for two-</p+	      >Deprecated: for two</p 	      ></div 	    ><p-	    >some documentation for one, two and three-</p+	    >some documentation for one, two and three</p 	    ></div 	  ></div 	></div@@ -191,7 +182,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/BugExportHeadings.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -47,33 +47,27 @@ 	><ul 	><li 	  ><a href=""-	    >Foo-</a+	    >Foo</a 	    ></li 	  ><li 	  ><a href=""-	    >Bar-</a+	    >Bar</a 	    ></li 	  ><li 	  ><a href=""-	    >Baz-</a+	    >Baz</a 	    ></li 	  ><li 	  ><a href=""-	    >One-</a+	    >One</a 	    ></li 	  ><li 	  ><a href=""-	    >Two-</a+	    >Two</a 	    ></li 	  ><li 	  ><a href=""-	    >Three-</a+	    >Three</a 	    ></li 	  ></ul 	></div@@ -121,8 +115,7 @@ 	></div       ><div id="interface"       ><h1 id="g:1"-	>Foo-</h1+	>Foo</h1 	><div class="top" 	><p class="src" 	  ><a name="v:foo" class="def"@@ -132,8 +125,7 @@ 	    ></p 	  ></div 	><h1 id="g:2"-	>Bar-</h1+	>Bar</h1 	><div class="top" 	><p class="src" 	  ><a name="v:bar" class="def"@@ -143,8 +135,7 @@ 	    ></p 	  ></div 	><h1 id="g:3"-	>Baz-</h1+	>Baz</h1 	><div class="top" 	><p class="src" 	  ><a name="v:baz" class="def"@@ -154,8 +145,7 @@ 	    ></p 	  ></div 	><h1 id="g:4"-	>One-</h1+	>One</h1 	><div class="top" 	><p class="src" 	  ><a name="v:one" class="def"@@ -166,14 +156,12 @@ 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: for one-</p+	      >Deprecated: for one</p 	      ></div 	    ></div 	  ></div 	><h1 id="g:5"-	>Two-</h1+	>Two</h1 	><div class="top" 	><p class="src" 	  ><a name="v:two" class="def"@@ -184,14 +172,12 @@ 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: for two-</p+	      >Deprecated: for two</p 	      ></div 	    ></div 	  ></div 	><h1 id="g:6"-	>Three-</h1+	>Three</h1 	><div class="top" 	><p class="src" 	  ><a name="v:three" class="def"@@ -202,8 +188,7 @@ 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: for three-</p+	      >Deprecated: for three</p 	      ></div 	    ></div 	  ></div@@ -213,7 +198,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/Bugs.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -48,9 +48,9 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:A" class="def"+	    > <a name="t:A" class="def" 	    >A</a-	    > a </p+	    > a</p 	  ><div class="subs constructors" 	  ><p class="caption" 	    >Constructors</p@@ -74,7 +74,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/CrossPackageDocs.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -52,9 +52,9 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >class</span-	    >  <a href=""+	    > <a href="" 	    >IsString</a-	    > a  <span class="keyword"+	    > a <span class="keyword" 	    >where</span 	    ><ul class="subs" 	    ><li@@ -116,28 +116,25 @@ 	      > to each element  of <code 	      >xs</code-	      >, i.e.,-</p+	      >, i.e.,</p 	    ><pre 	    > map f [x1, x2, ..., xn] == [f x1, f x2, ..., f xn]- map f [x1, x2, ...] == [f x1, f x2, ...]-</pre+ map f [x1, x2, ...] == [f x1, f x2, ...]</pre 	    ></div 	  ></div 	><div class="top" 	><p class="src" 	  ><span class="keyword" 	    >class</span-	    >  <a name="t:IsString" class="def"+	    > <a name="t:IsString" class="def" 	    >IsString</a-	    > a  <span class="keyword"+	    > a <span class="keyword" 	    >where</span 	    ></p 	  ><div class="doc" 	  ><p 	    >Class for string-like datastructures; used by the overloaded string-   extension (-foverloaded-strings in GHC).-</p+   extension (-XOverloadedStrings in GHC).</p 	    ></div 	  ><div class="subs methods" 	  ><p class="caption"@@ -188,8 +185,7 @@ 		    ><a href="" 		      >proc</a 		      ></code-		    > for details)-</p+		    > for details)</p 		  ></td 		></tr 	      ><tr@@ -199,8 +195,7 @@ 		  >]</td 		><td class="doc" 		><p-		  >Arguments to pass to the executable-</p+		  >Arguments to pass to the executable</p 		  ></td 		></tr 	      ><tr@@ -212,8 +207,7 @@ 		  ></td 		><td class="doc" 		><p-		  >Optional path to the working directory-</p+		  >Optional path to the working directory</p 		  ></td 		></tr 	      ><tr@@ -227,8 +221,7 @@ 		  >)]</td 		><td class="doc" 		><p-		  >Optional environment (otherwise inherit)-</p+		  >Optional environment (otherwise inherit)</p 		  ></td 		></tr 	      ><tr@@ -262,15 +255,12 @@ 	      >stdout</code 	      > and <code 	      >stderr</code-	      > respectively.-</p+	      > respectively.</p 	    ><p-	    >For example, to start a process and feed a string to its stdin:-</p+	    >For example, to start a process and feed a string to its stdin:</p 	    ><pre 	    >   (inp,out,err,pid) &lt;- runInteractiveProcess &quot;...&quot;-   forkIO (hPutStr inp str)-</pre+   forkIO (hPutStr inp str)</pre 	    ><p 	    >The <code 	      ><a href=""@@ -281,8 +271,7 @@ 	      ><a href="" 		>hSetBinaryMode</a 		></code-	      >.-</p+	      >.</p 	    ></div 	  ></div 	></div@@ -291,7 +280,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.0</p       ></div     ></body   ></html
html-test/ref/DeprecatedClass.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -48,9 +48,9 @@ 	><li class="src short" 	  ><span class="keyword" 	    >class</span-	    >  <a href=""+	    > <a href="" 	    >SomeClass</a-	    > a  <span class="keyword"+	    > a <span class="keyword" 	    >where</span 	    ><ul class="subs" 	    ><li@@ -62,9 +62,9 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >class</span-	    >  <a href=""+	    > <a href="" 	    >SomeOtherClass</a-	    > a  <span class="keyword"+	    > a <span class="keyword" 	    >where</span 	    ><ul class="subs" 	    ><li@@ -82,20 +82,18 @@ 	><p class="src" 	  ><span class="keyword" 	    >class</span-	    >  <a name="t:SomeClass" class="def"+	    > <a name="t:SomeClass" class="def" 	    >SomeClass</a-	    > a  <span class="keyword"+	    > a <span class="keyword" 	    >where</span 	    ></p 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: SomeClass-</p+	      >Deprecated: SomeClass</p 	      ></div 	    ><p-	    >some class-</p+	    >some class</p 	    ></div 	  ><div class="subs methods" 	  ><p class="caption"@@ -107,12 +105,10 @@ 	    ><div class="doc" 	    ><div class="warning" 	      ><p-		>Deprecated: foo-</p+		>Deprecated: foo</p 		></div 	      ><p-	      >documentation for foo-</p+	      >documentation for foo</p 	      ></div 	    ></div 	  ></div@@ -120,16 +116,15 @@ 	><p class="src" 	  ><span class="keyword" 	    >class</span-	    >  <a name="t:SomeOtherClass" class="def"+	    > <a name="t:SomeOtherClass" class="def" 	    >SomeOtherClass</a-	    > a  <span class="keyword"+	    > a <span class="keyword" 	    >where</span 	    ></p 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: SomeOtherClass-</p+	      >Deprecated: SomeOtherClass</p 	      ></div 	    ></div 	  ><div class="subs methods"@@ -142,8 +137,7 @@ 	    ><div class="doc" 	    ><div class="warning" 	      ><p-		>Deprecated: bar-</p+		>Deprecated: bar</p 		></div 	      ></div 	    ></div@@ -154,7 +148,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/DeprecatedData.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -48,33 +48,33 @@ 	><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >Foo</a-	    > <ul class="subs"+	    ><ul class="subs" 	    ><li 	      >= <a href="" 		>Foo</a-		>  </li+		></li 	      ><li 	      >| <a href="" 		>Bar</a-		>  </li+		></li 	      ></ul 	    ></li 	  ><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >One</a-	    > <ul class="subs"+	    ><ul class="subs" 	    ><li 	      >= <a href="" 		>One</a-		>  </li+		></li 	      ><li 	      >| <a href="" 		>Two</a-		>  </li+		></li 	      ></ul 	    ></li 	  ></ul@@ -86,18 +86,16 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:Foo" class="def"+	    > <a name="t:Foo" class="def" 	    >Foo</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: Foo-</p+	      >Deprecated: Foo</p 	      ></div 	    ><p-	    >type Foo-</p+	    >type Foo</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -111,12 +109,10 @@ 		><td class="doc" 		><div class="warning" 		  ><p-		    >Deprecated: Foo-</p+		    >Deprecated: Foo</p 		    ></div 		  ><p-		  >constructor Foo-</p+		  >constructor Foo</p 		  ></td 		></tr 	      ><tr@@ -127,12 +123,10 @@ 		><td class="doc" 		><div class="warning" 		  ><p-		    >Deprecated: Bar-</p+		    >Deprecated: Bar</p 		    ></div 		  ><p-		  >constructor Bar-</p+		  >constructor Bar</p 		  ></td 		></tr 	      ></table@@ -142,14 +136,13 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:One" class="def"+	    > <a name="t:One" class="def" 	    >One</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: One-</p+	      >Deprecated: One</p 	      ></div 	    ></div 	  ><div class="subs constructors"@@ -164,8 +157,7 @@ 		><td class="doc" 		><div class="warning" 		  ><p-		    >Deprecated: One-</p+		    >Deprecated: One</p 		    ></div 		  ></td 		></tr@@ -177,8 +169,7 @@ 		><td class="doc" 		><div class="warning" 		  ><p-		    >Deprecated: Two-</p+		    >Deprecated: Two</p 		    ></div 		  ></td 		></tr@@ -191,7 +182,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/DeprecatedFunction.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -76,12 +76,10 @@ 		><a href="" 		  >bar</a 		  ></code-		> instead-</p+		> instead</p 	      ></div 	    ><p-	    >some documentation for foo-</p+	    >some documentation for foo</p 	    ></div 	  ></div 	><div class="top"@@ -93,8 +91,7 @@ 	    ></p 	  ><div class="doc" 	  ><p-	    >some documentation for bar-</p+	    >some documentation for bar</p 	    ></div 	  ></div 	></div@@ -103,7 +100,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/DeprecatedFunction2.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -66,8 +66,7 @@ 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: use bar instead-</p+	      >Deprecated: use bar instead</p 	      ></div 	    ></div 	  ></div@@ -77,7 +76,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/DeprecatedFunction3.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -66,8 +66,7 @@ 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: use bar instead-</p+	      >Deprecated: use bar instead</p 	      ></div 	    ></div 	  ></div@@ -77,7 +76,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/DeprecatedModule.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -49,14 +49,12 @@ 	  ><p 	    >Deprecated: Use <a href="" 	      >Foo</a-	      > instead-</p+	      > instead</p 	    ></div 	  ><p 	  >Documentation for <a href="" 	    >DeprecatedModule</a-	    >.-</p+	    >.</p 	  ></div 	></div       ><div id="interface"@@ -76,7 +74,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/DeprecatedModule2.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -47,8 +47,7 @@ 	><div class="doc" 	><div class="warning" 	  ><p-	    >Deprecated: Use Foo instead-</p+	    >Deprecated: Use Foo instead</p 	    ></div 	  ></div 	></div@@ -69,7 +68,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/DeprecatedNewtype.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -48,9 +48,9 @@ 	><li class="src short" 	  ><span class="keyword" 	    >newtype</span-	    >  <a href=""+	    > <a href="" 	    >SomeNewType</a-	    >  = <a href=""+	    > = <a href="" 	    >SomeNewTypeConst</a 	    > <a href="" 	    >String</a@@ -58,9 +58,9 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >newtype</span-	    >  <a href=""+	    > <a href="" 	    >SomeOtherNewType</a-	    >  = <a href=""+	    > = <a href="" 	    >SomeOtherNewTypeConst</a 	    > <a href="" 	    >String</a@@ -74,18 +74,16 @@ 	><p class="src" 	  ><span class="keyword" 	    >newtype</span-	    >  <a name="t:SomeNewType" class="def"+	    > <a name="t:SomeNewType" class="def" 	    >SomeNewType</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: SomeNewType-</p+	      >Deprecated: SomeNewType</p 	      ></div 	    ><p-	    >some documentation-</p+	    >some documentation</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -101,12 +99,10 @@ 		><td class="doc" 		><div class="warning" 		  ><p-		    >Deprecated: SomeNewTypeConst-</p+		    >Deprecated: SomeNewTypeConst</p 		    ></div 		  ><p-		  >constructor docu -</p+		  >constructor docu </p 		  ></td 		></tr 	      ></table@@ -116,14 +112,13 @@ 	><p class="src" 	  ><span class="keyword" 	    >newtype</span-	    >  <a name="t:SomeOtherNewType" class="def"+	    > <a name="t:SomeOtherNewType" class="def" 	    >SomeOtherNewType</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: SomeOtherNewType-</p+	      >Deprecated: SomeOtherNewType</p 	      ></div 	    ></div 	  ><div class="subs constructors"@@ -140,8 +135,7 @@ 		><td class="doc" 		><div class="warning" 		  ><p-		    >Deprecated: SomeOtherNewTypeConst-</p+		    >Deprecated: SomeOtherNewTypeConst</p 		    ></div 		  ></td 		></tr@@ -154,7 +148,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/DeprecatedReExport.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -47,13 +47,11 @@ 	><ul 	><li 	  ><a href=""-	    >Re-exported from an other module-</a+	    >Re-exported from an other module</a 	    ></li 	  ><li 	  ><a href=""-	    >Re-exported from an other package-</a+	    >Re-exported from an other package</a 	    ></li 	  ></ul 	></div@@ -62,12 +60,10 @@ 	>Description</p 	><div class="doc" 	><p-	  >What is tested here:-</p+	  >What is tested here:</p 	  ><ul 	  ><li-	    > Deprecation messages are shown for re-exported items.-</li+	    >Deprecation messages are shown for re-exported items.</li 	    ></ul 	  ></div 	></div@@ -85,8 +81,7 @@ 	></div       ><div id="interface"       ><h1 id="g:1"-	>Re-exported from an other module-</h1+	>Re-exported from an other module</h1 	><div class="top" 	><p class="src" 	  ><a name="v:foo" class="def"@@ -101,24 +96,20 @@ 		><a href="" 		  >bar</a 		  ></code-		> instead-</p+		> instead</p 	      ></div 	    ><p-	    >some documentation for foo-</p+	    >some documentation for foo</p 	    ></div 	  ></div 	><h1 id="g:2"-	>Re-exported from an other package-</h1+	>Re-exported from an other package</h1 	><div class="doc" 	><p 	  >Not yet working, see <a href="" 	    >http://trac.haskell.org/haddock/ticket/223</a 	    >- , isEmptyChan-</p+ , isEmptyChan</p 	  ></div 	></div       ></div@@ -126,7 +117,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/DeprecatedRecord.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -48,9 +48,9 @@ 	><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >Foo</a-	    >  = <a href=""+	    > = <a href="" 	    >Foo</a 	    > {<ul class="subs" 	    ><li@@ -76,13 +76,12 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:Foo" class="def"+	    > <a name="t:Foo" class="def" 	    >Foo</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><p-	    >type Foo-</p+	    >type Foo</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -110,8 +109,7 @@ 			></dt 		      ><dd class="doc" 		      ><p-			>some name-</p+			>some name</p 			></dd 		      ><dt class="src" 		      ><a name="v:fooValue" class="def"@@ -122,12 +120,10 @@ 		      ><dd class="doc" 		      ><div class="warning" 			><p-			  >Deprecated: do not use this-</p+			  >Deprecated: do not use this</p 			  ></div 			><p-			>some value-</p+			>some value</p 			></dd 		      ></dl 		    ><div class="clear"@@ -144,7 +140,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/DeprecatedTypeFamily.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -72,12 +72,10 @@ 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: SomeTypeFamily-</p+	      >Deprecated: SomeTypeFamily</p 	      ></div 	    ><p-	    >some documentation-</p+	    >some documentation</p 	    ></div 	  ></div 	><div class="top"@@ -90,8 +88,7 @@ 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: SomeOtherTypeFamily-</p+	      >Deprecated: SomeOtherTypeFamily</p 	      ></div 	    ></div 	  ></div@@ -101,7 +98,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/DeprecatedTypeSynonym.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -78,12 +78,10 @@ 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: TypeSyn-</p+	      >Deprecated: TypeSyn</p 	      ></div 	    ><p-	    >some documentation-</p+	    >some documentation</p 	    ></div 	  ></div 	><div class="top"@@ -98,8 +96,7 @@ 	  ><div class="doc" 	  ><div class="warning" 	    ><p-	      >Deprecated: OtherTypeSyn-</p+	      >Deprecated: OtherTypeSyn</p 	      ></div 	    ></div 	  ></div@@ -109,7 +106,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
− html-test/ref/DeprecationMessageParseError.html
@@ -1,101 +0,0 @@-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">-<html xmlns="http://www.w3.org/1999/xhtml"-><head-  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"-     /><title-    >DeprecationMessageParseError</title-    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"-     /><script src="haddock-util.js" type="text/javascript"-    ></script-    ><script type="text/javascript"-    >//<![CDATA[-window.onload = function () {pageLoad();setSynopsis("mini_DeprecationMessageParseError.html");};-//]]>-</script-    ></head-  ><body-  ><div id="package-header"-    ><ul class="links" id="page-menu"-      ><li-	><a href=""-	  >Contents</a-	  ></li-	><li-	><a href=""-	  >Index</a-	  ></li-	></ul-      ><p class="caption empty"-      >&nbsp;</p-      ></div-    ><div id="content"-    ><div id="module-header"-      ><table class="info"-	><tr-	  ><th-	    >Safe Haskell</th-	    ><td-	    >None</td-	    ></tr-	  ></table-	><p class="caption"-	>DeprecationMessageParseError</p-	></div-      ><div id="description"-      ><p class="caption"-	>Description</p-	><div class="doc"-	><p-	  >What is tested here:-</p-	  ><ul-	  ><li-	    > If parsing of a deprecation message fails, the message is included-   verbatim.-</li-	    ></ul-	  ></div-	></div-      ><div id="synopsis"-      ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')"-	>Synopsis</p-	><ul id="section.syn" class="hide" onclick="toggleSection('syn')"-	><li class="src short"-	  ><a href=""-	    >foo</a-	    > :: <a href=""-	    >Int</a-	    ></li-	  ></ul-	></div-      ><div id="interface"-      ><h1-	>Documentation</h1-	><div class="top"-	><p class="src"-	  ><a name="v:foo" class="def"-	    >foo</a-	    > :: <a href=""-	    >Int</a-	    ></p-	  ><div class="doc"-	  ><div class="warning"-	    ><p-	      >Deprecated: use @bar instead</p-	      ></div-	    ><p-	    >some documentation for foo-</p-	    ></div-	  ></div-	></div-      ></div-    ><div id="footer"-    ><p-      >Produced by <a href=""-	>Haddock</a-	> version 2.13.2.1</p-      ></div-    ></body-  ></html->
html-test/ref/Examples.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -73,11 +73,9 @@ 	      ><a href="" 		>Integer</a 		></code-	      >.-</p+	      >.</p 	    ><p-	    >Examples:-</p+	    >Examples:</p 	    ><pre class="screen" 	    ><code class="prompt" 	      >&gt;&gt;&gt; </code@@ -107,8 +105,7 @@ 	      >55 </pre 	    ><p-	    >One more Example:-</p+	    >One more Example:</p 	    ><pre class="screen" 	    ><code class="prompt" 	      >&gt;&gt;&gt; </code@@ -120,8 +117,7 @@ 	      >5 </pre 	    ><p-	    >One more Example:-</p+	    >One more Example:</p 	    ><pre class="screen" 	    ><code class="prompt" 	      >&gt;&gt;&gt; </code@@ -133,8 +129,7 @@ 	      >5 </pre 	    ><p-	    >Example with an import:-</p+	    >Example with an import:</p 	    ><pre class="screen" 	    ><code class="prompt" 	      >&gt;&gt;&gt; </code@@ -172,7 +167,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
+ html-test/ref/Extensions.html view
@@ -0,0 +1,89 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"+     /><title+    >Extensions</title+    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"+     /><script src="haddock-util.js" type="text/javascript"+    ></script+    ><script type="text/javascript"+    >//<![CDATA[+window.onload = function () {pageLoad();setSynopsis("mini_Extensions.html");};+//]]>+</script+    ></head+  ><body+  ><div id="package-header"+    ><ul class="links" id="page-menu"+      ><li+	><a href=""+	  >Contents</a+	  ></li+	><li+	><a href=""+	  >Index</a+	  ></li+	></ul+      ><p class="caption empty"+      >&nbsp;</p+      ></div+    ><div id="content"+    ><div id="module-header"+      ><table class="info"+	><tr+	  ><th+	    >Safe Haskell</th+	    ><td+	    >Safe-Inferred</td+	    ></tr+	  ><tr+	  ><th+	    >Language</th+	    ><td+	    >Haskell2010</td+	    ></tr+	  ><tr+	  ><th+	    >Extensions</th+	    ><td+	    >ExplicitForAll</td+	    ></tr+	  ></table+	><p class="caption"+	>Extensions</p+	></div+      ><div id="synopsis"+      ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')"+	>Synopsis</p+	><ul id="section.syn" class="hide" onclick="toggleSection('syn')"+	><li class="src short"+	  ><a href=""+	    >foobar</a+	    > ::  t</li+	  ></ul+	></div+      ><div id="interface"+      ><h1+	>Documentation</h1+	><div class="top"+	><p class="src"+	  ><a name="v:foobar" class="def"+	    >foobar</a+	    > ::  t</p+	  ><div class="doc"+	  ><p+	    >Bar</p+	    ></div+	  ></div+	></div+      ></div+    ><div id="footer"+    ><p+      >Produced by <a href=""+	>Haddock</a+	> version 2.14.1</p+      ></div+    ></body+  ></html+>
html-test/ref/FunArgs.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -70,8 +70,7 @@ 		  ></td 		><td class="doc" 		><p-		  >First argument-</p+		  >First argument</p 		  ></td 		></tr 	      ><tr@@ -79,8 +78,7 @@ 		>-&gt; a</td 		><td class="doc" 		><p-		  >Second argument-</p+		  >Second argument</p 		  ></td 		></tr 	      ><tr@@ -90,8 +88,7 @@ 		  ></td 		><td class="doc" 		><p-		  >Third argument-</p+		  >Third argument</p 		  ></td 		></tr 	      ><tr@@ -99,8 +96,7 @@ 		>-&gt; (a -&gt; a)</td 		><td class="doc" 		><p-		  >Fourth argument-</p+		  >Fourth argument</p 		  ></td 		></tr 	      ><tr@@ -108,8 +104,7 @@ 		>-&gt; ()</td 		><td class="doc" 		><p-		  >Result-</p+		  >Result</p 		  ></td 		></tr 	      ></table@@ -129,8 +124,7 @@ 		>:: a</td 		><td class="doc" 		><p-		  >First argument-</p+		  >First argument</p 		  ></td 		></tr 	      ><tr@@ -138,8 +132,7 @@ 		>-&gt; b</td 		><td class="doc" 		><p-		  >Second argument-</p+		  >Second argument</p 		  ></td 		></tr 	      ><tr@@ -147,8 +140,7 @@ 		>-&gt; c</td 		><td class="doc" 		><p-		  >Third argument-</p+		  >Third argument</p 		  ></td 		></tr 	      ><tr@@ -156,8 +148,7 @@ 		>-&gt; d</td 		><td class="doc" 		><p-		  >Result-</p+		  >Result</p 		  ></td 		></tr 	      ></table@@ -169,7 +160,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/GADTRecords.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -48,7 +48,7 @@ 	><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >H1</a 	    > a b <span class="keyword" 	    >where</span@@ -58,7 +58,7 @@ 		>C1</a 		> ::  <a href="" 		>H1</a-		> a b  </li+		> a b</li 	      ><li 	      ><a href="" 		>C2</a@@ -66,11 +66,11 @@ 		>Ord</a 		> a =&gt; [a] -&gt; <a href="" 		>H1</a-		> a a  </li+		> a a</li 	      ><li 	      ><a href="" 		>C3</a-		> ::  { <ul class="subs"+		> :: { <ul class="subs" 		><li 		  ><a href="" 		    >field</a@@ -88,7 +88,7 @@ 	      ><li 	      ><a href="" 		>C4</a-		> ::  { <ul class="subs"+		> :: { <ul class="subs" 		><li 		  ><a href="" 		    >field2</a@@ -110,15 +110,14 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:H1" class="def"+	    > <a name="t:H1" class="def" 	    >H1</a 	    > a b <span class="keyword" 	    >where</span 	    ></p 	  ><div class="doc" 	  ><p-	    >h1-</p+	    >h1</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -176,8 +175,7 @@ 			></dt 		      ><dd class="doc" 		      ><p-			>hello docs-</p+			>hello docs</p 			></dd 		      ></dl 		    ><div class="clear"@@ -209,8 +207,7 @@ 			> :: a</dt 		      ><dd class="doc" 		      ><p-			>hello2 docs-</p+			>hello2 docs</p 			></dd 		      ></dl 		    ><div class="clear"@@ -227,7 +224,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/Hash.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -49,15 +49,13 @@ 	  ><a href="" 	    >The <code 	      >HashTable</code-	      > type-</a+	      > type</a 	    ><ul 	    ><li 	      ><a href="" 		>Operations on <code 		  >HashTable</code-		  >s-</a+		  >s</a 		></li 	      ></ul 	    ></li@@ -65,8 +63,7 @@ 	  ><a href="" 	    >The <code 	      >Hash</code-	      > class-</a+	      > class</a 	    ></li 	  ></ul 	></div@@ -76,8 +73,7 @@ 	><div class="doc" 	><p 	  >Implementation of fixed-size hash tables, with a type -  class for constructing hash values for structured types.-</p+  class for constructing hash values for structured types.</p 	  ></div 	></div       ><div id="synopsis"@@ -87,7 +83,7 @@ 	><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >HashTable</a 	    > key val</li 	  ><li class="src short"@@ -127,9 +123,9 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >class</span-	    >  <a href=""+	    > <a href="" 	    >Hash</a-	    > a  <span class="keyword"+	    > a <span class="keyword" 	    >where</span 	    ><ul class="subs" 	    ><li@@ -146,15 +142,14 @@       ><h1 id="g:1" 	>The <code 	  >HashTable</code-	  > type-</h1+	  > type</h1 	><div class="top" 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:HashTable" class="def"+	    > <a name="t:HashTable" class="def" 	    >HashTable</a-	    > key val </p+	    > key val</p 	  ><div class="doc" 	  ><p 	    >A hash table with keys of type <code@@ -168,15 +163,13 @@ 	      ><a href="" 		>Eq</a 		></code-	      >.-</p+	      >.</p 	    ></div 	  ></div 	><h2 id="g:2" 	>Operations on <code 	  >HashTable</code-	  >s-</h2+	  >s</h2 	><div class="top" 	><p class="src" 	  ><a name="v:new" class="def"@@ -194,8 +187,7 @@ 	    > key val)</p 	  ><div class="doc" 	  ><p-	    >Builds a new hash table with a given size-</p+	    >Builds a new hash table with a given size</p 	    ></div 	  ></div 	><div class="top"@@ -211,8 +203,7 @@ 	    > ()</p 	  ><div class="doc" 	  ><p-	    >Inserts a new element into the hash table-</p+	    >Inserts a new element into the hash table</p 	    ></div 	  ></div 	><div class="top"@@ -239,28 +230,25 @@ 	      ><a href="" 		>Nothing</a 		></code-	      > otherwise.-</p+	      > otherwise.</p 	    ></div 	  ></div 	><h1 id="g:3" 	>The <code 	  >Hash</code-	  > class-</h1+	  > class</h1 	><div class="top" 	><p class="src" 	  ><span class="keyword" 	    >class</span-	    >  <a name="t:Hash" class="def"+	    > <a name="t:Hash" class="def" 	    >Hash</a-	    > a  <span class="keyword"+	    > a <span class="keyword" 	    >where</span 	    ></p 	  ><div class="doc" 	  ><p-	    >A class of types which can be hashed.-</p+	    >A class of types which can be hashed.</p 	    ></div 	  ><div class="subs methods" 	  ><p class="caption"@@ -279,8 +267,7 @@ 		><a href="" 		  >Int</a 		  ></code-		>-</p+		></p 	      ></div 	    ></div 	  ><div class="subs instances"@@ -330,7 +317,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/HiddenInstances.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -48,15 +48,15 @@ 	><li class="src short" 	  ><span class="keyword" 	    >class</span-	    >  <a href=""+	    > <a href="" 	    >VisibleClass</a-	    > a </li+	    > a</li 	  ><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >VisibleData</a-	    > </li+	    ></li 	  ></ul 	></div       ><div id="interface"@@ -66,13 +66,12 @@ 	><p class="src" 	  ><span class="keyword" 	    >class</span-	    >  <a name="t:VisibleClass" class="def"+	    > <a name="t:VisibleClass" class="def" 	    >VisibleClass</a-	    > a </p+	    > a</p 	  ><div class="doc" 	  ><p-	    >Should be visible-</p+	    >Should be visible</p 	    ></div 	  ><div class="subs instances" 	  ><p id="control.i:VisibleClass" class="caption collapser" onclick="toggleSection('i:VisibleClass')"@@ -88,8 +87,7 @@ 		    ></td 		  ><td class="doc" 		  ><p-		    >Should be visible-</p+		    >Should be visible</p 		    ></td 		  ></tr 		><tr@@ -101,8 +99,7 @@ 		    ></td 		  ><td class="doc" 		  ><p-		    >Should be visible-</p+		    >Should be visible</p 		    ></td 		  ></tr 		></table@@ -113,13 +110,12 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:VisibleData" class="def"+	    > <a name="t:VisibleData" class="def" 	    >VisibleData</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><p-	    >Should be visible-</p+	    >Should be visible</p 	    ></div 	  ><div class="subs instances" 	  ><p id="control.i:VisibleData" class="caption collapser" onclick="toggleSection('i:VisibleData')"@@ -135,8 +131,7 @@ 		    ></td 		  ><td class="doc" 		  ><p-		    >Should be visible-</p+		    >Should be visible</p 		    ></td 		  ></tr 		><tr@@ -148,8 +143,7 @@ 		    ></td 		  ><td class="doc" 		  ><p-		    >Should be visible-</p+		    >Should be visible</p 		    ></td 		  ></tr 		></table@@ -162,7 +156,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/HiddenInstancesB.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -48,15 +48,15 @@ 	><li class="src short" 	  ><span class="keyword" 	    >class</span-	    >  <a href=""+	    > <a href="" 	    >Foo</a-	    > a </li+	    > a</li 	  ><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >Bar</a-	    > </li+	    ></li 	  ></ul 	></div       ><div id="interface"@@ -66,13 +66,12 @@ 	><p class="src" 	  ><span class="keyword" 	    >class</span-	    >  <a name="t:Foo" class="def"+	    > <a name="t:Foo" class="def" 	    >Foo</a-	    > a </p+	    > a</p 	  ><div class="doc" 	  ><p-	    >Should be visible-</p+	    >Should be visible</p 	    ></div 	  ><div class="subs instances" 	  ><p id="control.i:Foo" class="caption collapser" onclick="toggleSection('i:Foo')"@@ -88,8 +87,7 @@ 		    ></td 		  ><td class="doc" 		  ><p-		    >Should be visible-</p+		    >Should be visible</p 		    ></td 		  ></tr 		></table@@ -100,13 +98,12 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:Bar" class="def"+	    > <a name="t:Bar" class="def" 	    >Bar</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><p-	    >Should be visible-</p+	    >Should be visible</p 	    ></div 	  ><div class="subs instances" 	  ><p id="control.i:Bar" class="caption collapser" onclick="toggleSection('i:Bar')"@@ -122,8 +119,7 @@ 		    ></td 		  ><td class="doc" 		  ><p-		    >Should be visible-</p+		    >Should be visible</p 		    ></td 		  ></tr 		></table@@ -136,7 +132,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/Hyperlinks.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -67,13 +67,11 @@ 	  ><p 	    >A plain URL: <a href="" 	      >http://example.com/</a-	      >-</p+	      ></p 	    ><p 	    >A URL with a label: <a href="" 	      >some link</a-	      >-</p+	      ></p 	    ></div 	  ></div 	></div@@ -82,7 +80,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/IgnoreExports.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -71,8 +71,7 @@ 	    ></p 	  ><div class="doc" 	  ><p-	    >documentation for foo-</p+	    >documentation for foo</p 	    ></div 	  ></div 	><div class="top"@@ -84,8 +83,7 @@ 	    ></p 	  ><div class="doc" 	  ><p-	    >documentation for bar-</p+	    >documentation for bar</p 	    ></div 	  ></div 	></div@@ -94,7 +92,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
+ html-test/ref/ImplicitParams.html view
@@ -0,0 +1,111 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"+     /><title+    >ImplicitParams</title+    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"+     /><script src="haddock-util.js" type="text/javascript"+    ></script+    ><script type="text/javascript"+    >//<![CDATA[+window.onload = function () {pageLoad();setSynopsis("mini_ImplicitParams.html");};+//]]>+</script+    ></head+  ><body+  ><div id="package-header"+    ><ul class="links" id="page-menu"+      ><li+	><a href=""+	  >Contents</a+	  ></li+	><li+	><a href=""+	  >Index</a+	  ></li+	></ul+      ><p class="caption empty"+      >&nbsp;</p+      ></div+    ><div id="content"+    ><div id="module-header"+      ><table class="info"+	><tr+	  ><th+	    >Safe Haskell</th+	    ><td+	    >Safe-Inferred</td+	    ></tr+	  ></table+	><p class="caption"+	>ImplicitParams</p+	></div+      ><div id="interface"+      ><h1+	>Documentation</h1+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >data</span+	    > <a name="t:X" class="def"+	    >X</a+	    ></p+	  ><div class="subs constructors"+	  ><p class="caption"+	    >Constructors</p+	    ><table+	    ><tr+	      ><td class="src"+		><a name="v:X" class="def"+		  >X</a+		  ></td+		><td class="doc empty"+		>&nbsp;</td+		></tr+	      ></table+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><a name="v:c" class="def"+	    >c</a+	    > :: (?x :: <a href=""+	    >X</a+	    >) =&gt; <a href=""+	    >X</a+	    ></p+	  ></div+	><div class="top"+	><p class="src"+	  ><a name="v:d" class="def"+	    >d</a+	    > :: (?x :: <a href=""+	    >X</a+	    >, ?y :: <a href=""+	    >X</a+	    >) =&gt; (<a href=""+	    >X</a+	    >, <a href=""+	    >X</a+	    >)</p+	  ></div+	><div class="top"+	><p class="src"+	  ><a name="v:f" class="def"+	    >f</a+	    > ::  ((?x :: <a href=""+	    >X</a+	    >) =&gt; a) -&gt; a</p+	  ></div+	></div+      ></div+    ><div id="footer"+    ><p+      >Produced by <a href=""+	>Haddock</a+	> version 2.14.1</p+      ></div+    ></body+  ></html+>
+ html-test/ref/Minimal.html view
@@ -0,0 +1,273 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"+     /><title+    >Minimal</title+    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"+     /><script src="haddock-util.js" type="text/javascript"+    ></script+    ><script type="text/javascript"+    >//<![CDATA[+window.onload = function () {pageLoad();setSynopsis("mini_Minimal.html");};+//]]>+</script+    ></head+  ><body+  ><div id="package-header"+    ><ul class="links" id="page-menu"+      ><li+	><a href=""+	  >Contents</a+	  ></li+	><li+	><a href=""+	  >Index</a+	  ></li+	></ul+      ><p class="caption empty"+      >&nbsp;</p+      ></div+    ><div id="content"+    ><div id="module-header"+      ><table class="info"+	><tr+	  ><th+	    >Safe Haskell</th+	    ><td+	    >Safe-Inferred</td+	    ></tr+	  ></table+	><p class="caption"+	>Minimal</p+	></div+      ><div id="description"+      ><p class="caption"+	>Description</p+	><div class="doc"+	><p+	  >This tests the new MINIMAL pragma present in GHC 7.8</p+	  ></div+	></div+      ><div id="interface"+      ><h1+	>Documentation</h1+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >class</span+	    > <a name="t:Foo" class="def"+	    >Foo</a+	    > a <span class="keyword"+	    >where</span+	    ></p+	  ><div class="subs minimal"+	  ><p class="caption"+	    >Minimal complete definition</p+	    ><p class="src"+	    ><a href=""+	      >foo</a+	      >, <a href=""+	      >bar</a+	      > | <a href=""+	      >bar</a+	      >, <a href=""+	      >bat</a+	      > | <a href=""+	      >foo</a+	      >, <a href=""+	      >bat</a+	      > | <a href=""+	      >fooBarBat</a+	      ></p+	    ></div+	  ><div class="subs methods"+	  ><p class="caption"+	    >Methods</p+	    ><p class="src"+	    ><a name="v:foo" class="def"+	      >foo</a+	      >, <a name="v:bat" class="def"+	      >bat</a+	      >, <a name="v:bar" class="def"+	      >bar</a+	      > :: a</p+	    ><div class="doc"+	    ><p+	      >Any two of these are required...</p+	      ></div+	    ><p class="src"+	    ><a name="v:fooBarBat" class="def"+	      >fooBarBat</a+	      > :: (a, a, a)</p+	    ><div class="doc"+	    ><p+	      >.. or just this</p+	      ></div+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >class</span+	    > <a name="t:Weird" class="def"+	    >Weird</a+	    > a <span class="keyword"+	    >where</span+	    ></p+	  ><div class="subs minimal"+	  ><p class="caption"+	    >Minimal complete definition</p+	    ><p class="src"+	    ><a href=""+	      >a</a+	      >, <a href=""+	      >b</a+	      >, <a href=""+	      >c</a+	      > | <a href=""+	      >d</a+	      > | <a href=""+	      >e</a+	      >, (<a href=""+	      >f</a+	      > | <a href=""+	      >g</a+	      >)</p+	    ></div+	  ><div class="subs methods"+	  ><p class="caption"+	    >Methods</p+	    ><p class="src"+	    ><a name="v:a" class="def"+	      >a</a+	      >, <a name="v:g" class="def"+	      >g</a+	      >, <a name="v:f" class="def"+	      >f</a+	      >, <a name="v:e" class="def"+	      >e</a+	      >, <a name="v:d" class="def"+	      >d</a+	      >, <a name="v:c" class="def"+	      >c</a+	      >, <a name="v:b" class="def"+	      >b</a+	      > :: a</p+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >class</span+	    > <a name="t:NoMins" class="def"+	    >NoMins</a+	    > a <span class="keyword"+	    >where</span+	    ></p+	  ><div class="subs minimal"+	  ><p class="caption"+	    >Minimal complete definition</p+	    ><p class="src"+	    ><a href=""+	      >x</a+	      >, <a href=""+	      >y</a+	      ></p+	    ></div+	  ><div class="subs methods"+	  ><p class="caption"+	    >Methods</p+	    ><p class="src"+	    ><a name="v:x" class="def"+	      >x</a+	      >, <a name="v:z" class="def"+	      >z</a+	      >, <a name="v:y" class="def"+	      >y</a+	      > :: a</p+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >class</span+	    > <a name="t:FullMin" class="def"+	    >FullMin</a+	    > a <span class="keyword"+	    >where</span+	    ></p+	  ><div class="subs methods"+	  ><p class="caption"+	    >Methods</p+	    ><p class="src"+	    ><a name="v:aaa" class="def"+	      >aaa</a+	      >, <a name="v:bbb" class="def"+	      >bbb</a+	      > :: a</p+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >class</span+	    > <a name="t:PartialMin" class="def"+	    >PartialMin</a+	    > a <span class="keyword"+	    >where</span+	    ></p+	  ><div class="subs minimal"+	  ><p class="caption"+	    >Minimal complete definition</p+	    ><p class="src"+	    ><a href=""+	      >ccc</a+	      >, ddd</p+	    ></div+	  ><div class="subs methods"+	  ><p class="caption"+	    >Methods</p+	    ><p class="src"+	    ><a name="v:ccc" class="def"+	      >ccc</a+	      > :: a</p+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >class</span+	    > <a name="t:EmptyMin" class="def"+	    >EmptyMin</a+	    > a <span class="keyword"+	    >where</span+	    ></p+	  ><div class="subs minimal"+	  ><p class="caption"+	    >Minimal complete definition</p+	    ><p class="src"+	    >Nothing</p+	    ></div+	  ><div class="subs methods"+	  ><p class="caption"+	    >Methods</p+	    ><p class="src"+	    ><a name="v:eee" class="def"+	      >eee</a+	      >, <a name="v:fff" class="def"+	      >fff</a+	      > :: a</p+	    ></div+	  ></div+	></div+      ></div+    ><div id="footer"+    ><p+      >Produced by <a href=""+	>Haddock</a+	> version 2.14.1</p+      ></div+    ></body+  ></html+>
html-test/ref/ModuleWithWarning.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -49,14 +49,12 @@ 	  ><p 	    >Warning: This is an unstable interface.  Prefer functions from <a href="" 	      >Prelude</a-	      > instead!-</p+	      > instead!</p 	    ></div 	  ><p 	  >Documentation for <a href="" 	    >ModuleWithWarning</a-	    >.-</p+	    >.</p 	  ></div 	></div       ><div id="interface"@@ -76,7 +74,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/NamedDoc.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -52,8 +52,7 @@ 	>Documentation</h1 	><div class="doc" 	><p-	  >bar-</p+	  >bar</p 	  ></div 	></div       ></div@@ -61,7 +60,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
+ html-test/ref/Nesting.html view
@@ -0,0 +1,294 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"+     /><title+    >Nesting</title+    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"+     /><script src="haddock-util.js" type="text/javascript"+    ></script+    ><script type="text/javascript"+    >//<![CDATA[+window.onload = function () {pageLoad();setSynopsis("mini_Nesting.html");};+//]]>+</script+    ></head+  ><body+  ><div id="package-header"+    ><ul class="links" id="page-menu"+      ><li+	><a href=""+	  >Contents</a+	  ></li+	><li+	><a href=""+	  >Index</a+	  ></li+	></ul+      ><p class="caption empty"+      >&nbsp;</p+      ></div+    ><div id="content"+    ><div id="module-header"+      ><table class="info"+	><tr+	  ><th+	    >Safe Haskell</th+	    ><td+	    >Safe-Inferred</td+	    ></tr+	  ></table+	><p class="caption"+	>Nesting</p+	></div+      ><div id="synopsis"+      ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')"+	>Synopsis</p+	><ul id="section.syn" class="hide" onclick="toggleSection('syn')"+	><li class="src short"+	  ><a href=""+	    >d</a+	    > ::  t</li+	  ><li class="src short"+	  ><a href=""+	    >e</a+	    > ::  t</li+	  ><li class="src short"+	  ><a href=""+	    >f</a+	    > ::  t</li+	  ><li class="src short"+	  ><a href=""+	    >g</a+	    > ::  t</li+	  ><li class="src short"+	  ><a href=""+	    >h</a+	    > ::  t</li+	  ><li class="src short"+	  ><a href=""+	    >i</a+	    > ::  t</li+	  ><li class="src short"+	  ><a href=""+	    >j</a+	    > ::  t</li+	  ></ul+	></div+      ><div id="interface"+      ><h1+	>Documentation</h1+	><div class="top"+	><p class="src"+	  ><a name="v:d" class="def"+	    >d</a+	    > ::  t</p+	  ><div class="doc"+	  ><ul+	    ><li+	      >We can<ul+		><li+		  >easily go back<ol+		    ><li+		      >some indentation</li+		      ></ol+		    ></li+		  ><li+		  >levels</li+		  ></ul+		></li+	      ></ul+	    ><ol+	    ><li+	      ><pre+		>back at the top</pre+		></li+	      ></ol+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><a name="v:e" class="def"+	    >e</a+	    > ::  t</p+	  ><div class="doc"+	  ><ul+	    ><li+	      >Beginning of list<ul+		><li+		  >second list</li+		  ></ul+		></li+	      ><li+	      >Some indented list but+the presence of this text pushes it out of nesting back to the top.</li+	      ></ul+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><a name="v:f" class="def"+	    >f</a+	    > ::  t</p+	  ><div class="doc"+	  ><ul+	    ><li+	      >Beginning of list<pre+		>nested code+    we preserve the space correctly+</pre+		></li+	      ></ul+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><a name="v:g" class="def"+	    >g</a+	    > ::  t</p+	  ><div class="doc"+	  ><ul+	    ><li+	      >Beginning of list<ul+		><li+		  >Nested list</li+		  ></ul+		></li+	      ></ul+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><a name="v:h" class="def"+	    >h</a+	    > ::  t</p+	  ><div class="doc"+	  ><ul+	    ><li+	      >Beginning of list<pre+		>nested+bird+tracks</pre+		></li+	      ></ul+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><a name="v:i" class="def"+	    >i</a+	    > ::  t</p+	  ><div class="doc"+	  ><ul+	    ><li+	      >Beginning of list+This belongs to the list above!<pre+		>nested+bird+tracks++another line+  with indentation</pre+		><pre+		>nested bird tracks+  without leading space</pre+		><ul+		><li+		  >Next list+More of the indented list.<ul+		    ><li+		      >Deeper<ul+			><li+			  >Deeper<ul+			    ><li+			      >Even deeper!</li+			      ><li+			      >No newline separation even in indented lists.</li+			      ></ul+			    ></li+			  ></ul+			></li+		      ></ul+		    ></li+		  ></ul+		></li+	      ></ul+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><a name="v:j" class="def"+	    >j</a+	    > ::  t</p+	  ><div class="doc"+	  ><dl+	    ><dt+	      >All this</dt+	      ><dd+	      >Works for+definition lists too.<pre+		>nested+bird+tracks</pre+		><ul+		><li+		  >Next list+with more of the indented list content.<p+		    >Even more content on a new line.</p+		    ><ol+		    ><li+		      >Different type of list<ol+			><li+			  >Deeper</li+			  ></ol+			><pre class="screen"+			><code class="prompt"+			  >&gt;&gt;&gt; </code+			  ><strong class="userinput"+			  ><code+			    >Here's an example in a list+</code+			    ></strong+			  >example result+</pre+			><dl+			><dt+			  >b</dt+			  ><dd+			  >Even deeper!</dd+			  ><dt+			  >c</dt+			  ><dd+			  >No newline separation even in indented lists.+        We can have any paragraph level element that we normally+        can, like headers<p+			    ><h3+			      >Level 3 header</h3+			      ></p+			    ><p+			    >with some content&#8230;</p+			    ><ul+			    ><li+			      >and even more lists inside</li+			      ></ul+			    ></dd+			  ></dl+			></li+		      ></ol+		    ></li+		  ></ul+		></dd+	      ></dl+	    ></div+	  ></div+	></div+      ></div+    ><div id="footer"+    ><p+      >Produced by <a href=""+	>Haddock</a+	> version 2.14.1</p+      ></div+    ></body+  ></html+>
html-test/ref/NoLayout.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -69,8 +69,7 @@ 	      ><a href="" 		>g</a 		></code-	      >-</p+	      ></p 	    ></div 	  ></div 	></div@@ -79,7 +78,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/NonGreedy.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -65,8 +65,7 @@ 	      >url1</a 	      > <a href="" 	      >url2</a-	      >-</p+	      ></p 	    ></div 	  ></div 	></div@@ -75,7 +74,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
+ html-test/ref/Operators.html view
@@ -0,0 +1,457 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"+     /><title+    >Operators</title+    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"+     /><script src="haddock-util.js" type="text/javascript"+    ></script+    ><script type="text/javascript"+    >//<![CDATA[+window.onload = function () {pageLoad();setSynopsis("mini_Operators.html");};+//]]>+</script+    ></head+  ><body+  ><div id="package-header"+    ><ul class="links" id="page-menu"+      ><li+	><a href=""+	  >Contents</a+	  ></li+	><li+	><a href=""+	  >Index</a+	  ></li+	></ul+      ><p class="caption empty"+      >&nbsp;</p+      ></div+    ><div id="content"+    ><div id="module-header"+      ><table class="info"+	><tr+	  ><th+	    >Safe Haskell</th+	    ><td+	    >Safe-Inferred</td+	    ></tr+	  ></table+	><p class="caption"+	>Operators</p+	></div+      ><div id="description"+      ><p class="caption"+	>Description</p+	><div class="doc"+	><p+	  >Test operators with or without fixity declarations</p+	  ></div+	></div+      ><div id="synopsis"+      ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')"+	>Synopsis</p+	><ul id="section.syn" class="hide" onclick="toggleSection('syn')"+	><li class="src short"+	  ><a href=""+	    >(+-)</a+	    > ::  a -&gt; a -&gt; a</li+	  ><li class="src short"+	  ><a href=""+	    >(*/)</a+	    > ::  a -&gt; a -&gt; a</li+	  ><li class="src short"+	  ><a href=""+	    >foo</a+	    > ::  a -&gt; a -&gt; a</li+	  ><li class="src short"+	  ><span class="keyword"+	    >data</span+	    > <a href=""+	    >Foo</a+	    ><ul class="subs"+	    ><li+	      >= <a href=""+		>Foo</a+		> <a href=""+		>`Bar`</a+		> <a href=""+		>Foo</a+		></li+	      ><li+	      >| <a href=""+		>Foo</a+		> <a href=""+		>:-</a+		> <a href=""+		>Foo</a+		></li+	      ></ul+	    ></li+	  ><li class="src short"+	  >pattern  <a href=""+	    >(:+)</a+	    > t t ::  [t]</li+	  ><li class="src short"+	  ><span class="keyword"+	    >data</span+	    > a <a href=""+	    >&lt;-&gt;</a+	    > b <span class="keyword"+	    >where</span+	    ><ul class="subs"+	    ><li+	      ><a href=""+		>(:&lt;-&gt;)</a+		> ::  a -&gt; b -&gt; a <a href=""+		>&lt;-&gt;</a+		> b</li+	      ></ul+	    ></li+	  ><li class="src short"+	  ><span class="keyword"+	    >type family</span+	    > a <a href=""+	    >++</a+	    > b</li+	  ><li class="src short"+	  ><span class="keyword"+	    >data family</span+	    > a <a href=""+	    >**</a+	    > b</li+	  ><li class="src short"+	  ><span class="keyword"+	    >class</span+	    > a <a href=""+	    >&gt;&lt;&gt;</a+	    > b <span class="keyword"+	    >where</span+	    ><ul class="subs"+	    ><li+	      ><span class="keyword"+		>type</span+		> a <a href=""+		>&lt;&gt;&lt;</a+		> b :: *</li+	      ><li+	      ><span class="keyword"+		>data</span+		> a <a href=""+		>&gt;&lt;&lt;</a+		> b</li+	      ><li+	      ><a href=""+		>(&gt;&gt;&lt;)</a+		>, <a href=""+		>(&lt;&lt;&gt;)</a+		> :: a -&gt; b -&gt; ()</li+	      ><li+	      ><a href=""+		>(**&gt;)</a+		>, <a href=""+		>(&lt;**)</a+		>, <a href=""+		>(&gt;**)</a+		>, <a href=""+		>(**&lt;)</a+		> :: a -&gt; a -&gt; ()</li+	      ></ul+	    ></li+	  ><li class="src short"+	  ><span class="keyword"+	    >type</span+	    > <a href=""+	    >(&gt;-&lt;)</a+	    > a b = a <a href=""+	    >&lt;-&gt;</a+	    > b</li+	  ></ul+	></div+      ><div id="interface"+      ><h1+	>Documentation</h1+	><div class="top"+	><p class="src"+	  ><a name="v:-43--45-" class="def"+	    >(+-)</a+	    > ::  a -&gt; a -&gt; a</p+	  ><div class="doc"+	  ><p+	    >Operator with no fixity</p+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><a name="v:-42--47-" class="def"+	    >(*/)</a+	    > ::  a -&gt; a -&gt; a <span class="fixity"+	    >infixr 7</span+	    ><span class="rightedge"+	    ></span+	    ></p+	  ><div class="doc"+	  ><p+	    >Operator with infixr 7</p+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><a name="v:foo" class="def"+	    >foo</a+	    > ::  a -&gt; a -&gt; a <span class="fixity"+	    >infixl 3</span+	    ><span class="rightedge"+	    ></span+	    ></p+	  ><div class="doc"+	  ><p+	    >Named function with infixl 3</p+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >data</span+	    > <a name="t:Foo" class="def"+	    >Foo</a+	    ></p+	  ><div class="doc"+	  ><p+	    >Data type with operator constructors</p+	    ></div+	  ><div class="subs constructors"+	  ><p class="caption"+	    >Constructors</p+	    ><table+	    ><tr+	      ><td class="src"+		><a href=""+		  >Foo</a+		  > <a name="v:Bar" class="def"+		  >`Bar`</a+		  > <a href=""+		  >Foo</a+		  > <span class="fixity"+		  >infixl 3</span+		  ><span class="rightedge"+		  ></span+		  ></td+		><td class="doc"+		><p+		  >Has infixl 3</p+		  ></td+		></tr+	      ><tr+	      ><td class="src"+		><a href=""+		  >Foo</a+		  > <a name="v::-45-" class="def"+		  >:-</a+		  > <a href=""+		  >Foo</a+		  > <span class="fixity"+		  >infixr 5</span+		  ><span class="rightedge"+		  ></span+		  ></td+		><td class="doc"+		><p+		  >Has infixr 5</p+		  ></td+		></tr+	      ></table+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  >pattern  <a name="v::-43-" class="def"+	    >(:+)</a+	    > t t ::  [t] <span class="fixity"+	    >infixr 3</span+	    ><span class="rightedge"+	    ></span+	    ></p+	  ><div class="doc"+	  ><p+	    >Pattern synonym, infixr 3</p+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >data</span+	    > a <a name="t:-60--45--62-" class="def"+	    >&lt;-&gt;</a+	    > b <span class="keyword"+	    >where</span+	    > <span class="fixity"+	    >infixl 6</span+	    ><span class="rightedge"+	    ></span+	    ></p+	  ><div class="doc"+	  ><p+	    >Type name, infixl 6 and GADT constructor</p+	    ></div+	  ><div class="subs constructors"+	  ><p class="caption"+	    >Constructors</p+	    ><table+	    ><tr+	      ><td class="src"+		><a name="v::-60--45--62-" class="def"+		  >(:&lt;-&gt;)</a+		  > ::  a -&gt; b -&gt; a <a href=""+		  >&lt;-&gt;</a+		  > b <span class="fixity"+		  >infixr 6</span+		  ><span class="rightedge"+		  ></span+		  ></td+		><td class="doc empty"+		>&nbsp;</td+		></tr+	      ></table+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >type family</span+	    > a <a name="t:-43--43-" class="def"+	    >++</a+	    > b <span class="fixity"+	    >infix 3</span+	    ><span class="rightedge"+	    ></span+	    ></p+	  ><div class="doc"+	  ><p+	    >Type family with fixity</p+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >data family</span+	    > a <a name="t:-42--42-" class="def"+	    >**</a+	    > b <span class="fixity"+	    >infix 9</span+	    ><span class="rightedge"+	    ></span+	    ></p+	  ><div class="doc"+	  ><p+	    >Data family with fixity</p+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >class</span+	    > a <a name="t:-62--60--62-" class="def"+	    >&gt;&lt;&gt;</a+	    > b <span class="keyword"+	    >where</span+	    > <span class="fixity"+	    >infixr 1</span+	    ><span class="rightedge"+	    ></span+	    ></p+	  ><div class="doc"+	  ><p+	    >Class with fixity, including associated types</p+	    ></div+	  ><div class="subs associated-types"+	  ><p class="caption"+	    >Associated Types</p+	    ><p class="src"+	    ><span class="keyword"+	      >type</span+	      > a <a name="t:-60--62--60-" class="def"+	      >&lt;&gt;&lt;</a+	      > b :: * <span class="fixity"+	      >infixl 2</span+	      ><span class="rightedge"+	      ></span+	      ></p+	    ><p class="src"+	    ><span class="keyword"+	      >data</span+	      > a <a name="t:-62--60--60-" class="def"+	      >&gt;&lt;&lt;</a+	      > b <span class="fixity"+	      >infixl 3</span+	      ><span class="rightedge"+	      ></span+	      ></p+	    ></div+	  ><div class="subs methods"+	  ><p class="caption"+	    >Methods</p+	    ><p class="src"+	    ><a name="v:-62--62--60-" class="def"+	      >(&gt;&gt;&lt;)</a+	      >, <a name="v:-60--60--62-" class="def"+	      >(&lt;&lt;&gt;)</a+	      > :: a -&gt; b -&gt; () <span class="fixity"+	      >infixl 5 &lt;&lt;&gt;</span+	      ><span class="fixity"+	      >infixr 4 &gt;&gt;&lt;</span+	      ><span class="rightedge"+	      ></span+	      ></p+	    ><p class="src"+	    ><a name="v:-42--42--62-" class="def"+	      >(**&gt;)</a+	      >, <a name="v:-60--42--42-" class="def"+	      >(&lt;**)</a+	      >, <a name="v:-62--42--42-" class="def"+	      >(&gt;**)</a+	      >, <a name="v:-42--42--60-" class="def"+	      >(**&lt;)</a+	      > :: a -&gt; a -&gt; () <span class="fixity"+	      >infixr 8 **&gt;, &gt;**</span+	      ><span class="fixity"+	      >infixl 8 &lt;**, **&lt;</span+	      ><span class="rightedge"+	      ></span+	      ></p+	    ><div class="doc"+	    ><p+	      >Multiple fixities</p+	      ></div+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >type</span+	    > <a name="t:-62--45--60-" class="def"+	    >(&gt;-&lt;)</a+	    > a b = a <a href=""+	    >&lt;-&gt;</a+	    > b <span class="fixity"+	    >infixl 6</span+	    ><span class="rightedge"+	    ></span+	    ></p+	  ><div class="doc"+	  ><p+	    >Type synonym with fixity</p+	    ></div+	  ></div+	></div+      ></div+    ><div id="footer"+    ><p+      >Produced by <a href=""+	>Haddock</a+	> version 2.14.1</p+      ></div+    ></body+  ></html+>
+ html-test/ref/PatternSyns.html view
@@ -0,0 +1,241 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"+     /><title+    >PatternSyns</title+    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"+     /><script src="haddock-util.js" type="text/javascript"+    ></script+    ><script type="text/javascript"+    >//<![CDATA[+window.onload = function () {pageLoad();setSynopsis("mini_PatternSyns.html");};+//]]>+</script+    ></head+  ><body+  ><div id="package-header"+    ><ul class="links" id="page-menu"+      ><li+	><a href=""+	  >Contents</a+	  ></li+	><li+	><a href=""+	  >Index</a+	  ></li+	></ul+      ><p class="caption empty"+      >&nbsp;</p+      ></div+    ><div id="content"+    ><div id="module-header"+      ><table class="info"+	><tr+	  ><th+	    >Safe Haskell</th+	    ><td+	    >Safe-Inferred</td+	    ></tr+	  ></table+	><p class="caption"+	>PatternSyns</p+	></div+      ><div id="description"+      ><p class="caption"+	>Description</p+	><div class="doc"+	><p+	  >Testing some pattern synonyms</p+	  ></div+	></div+      ><div id="synopsis"+      ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')"+	>Synopsis</p+	><ul id="section.syn" class="hide" onclick="toggleSection('syn')"+	><li class="src short"+	  ><span class="keyword"+	    >data</span+	    > <a href=""+	    >FooType</a+	    > x = <a href=""+	    >FooCtor</a+	    > x</li+	  ><li class="src short"+	  >pattern  <a href=""+	    >Foo</a+	    > t ::  <a href=""+	    >FooType</a+	    > t</li+	  ><li class="src short"+	  >pattern  <a href=""+	    >Bar</a+	    > t ::  <a href=""+	    >FooType</a+	    > (<a href=""+	    >FooType</a+	    > t)</li+	  ><li class="src short"+	  >pattern  t <a href=""+	    >:&lt;-&gt;</a+	    > t ::  (<a href=""+	    >FooType</a+	    > t, <a href=""+	    >FooType</a+	    > (<a href=""+	    >FooType</a+	    > t))</li+	  ><li class="src short"+	  ><span class="keyword"+	    >data</span+	    > a <a href=""+	    >&gt;&lt;</a+	    > b = <a href=""+	    >Empty</a+	    ></li+	  ><li class="src short"+	  >pattern  <a href=""+	    >E</a+	    > ::  <a href=""+	    >(&gt;&lt;)</a+	    > k t t</li+	  ></ul+	></div+      ><div id="interface"+      ><h1+	>Documentation</h1+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >data</span+	    > <a name="t:FooType" class="def"+	    >FooType</a+	    > x</p+	  ><div class="doc"+	  ><p+	    >FooType doc</p+	    ></div+	  ><div class="subs constructors"+	  ><p class="caption"+	    >Constructors</p+	    ><table+	    ><tr+	      ><td class="src"+		><a name="v:FooCtor" class="def"+		  >FooCtor</a+		  > x</td+		><td class="doc empty"+		>&nbsp;</td+		></tr+	      ></table+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  >pattern  <a name="v:Foo" class="def"+	    >Foo</a+	    > t ::  <a href=""+	    >FooType</a+	    > t</p+	  ><div class="doc"+	  ><p+	    >Pattern synonym for <code+	      ><a href=""+		>Foo</a+		></code+	      > x</p+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  >pattern  <a name="v:Bar" class="def"+	    >Bar</a+	    > t ::  <a href=""+	    >FooType</a+	    > (<a href=""+	    >FooType</a+	    > t)</p+	  ><div class="doc"+	  ><p+	    >Pattern synonym for <code+	      ><a href=""+		>Bar</a+		></code+	      > x</p+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  >pattern  t <a name="v::-60--45--62-" class="def"+	    >:&lt;-&gt;</a+	    > t ::  (<a href=""+	    >FooType</a+	    > t, <a href=""+	    >FooType</a+	    > (<a href=""+	    >FooType</a+	    > t))</p+	  ><div class="doc"+	  ><p+	    >Pattern synonym for (<code+	      ><a href=""+		>:&lt;-&gt;</a+		></code+	      >)</p+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >data</span+	    > a <a name="t:-62--60-" class="def"+	    >&gt;&lt;</a+	    > b</p+	  ><div class="doc"+	  ><p+	    >Doc for (<code+	      >&gt;&lt;</code+	      >)</p+	    ></div+	  ><div class="subs constructors"+	  ><p class="caption"+	    >Constructors</p+	    ><table+	    ><tr+	      ><td class="src"+		><a name="v:Empty" class="def"+		  >Empty</a+		  ></td+		><td class="doc empty"+		>&nbsp;</td+		></tr+	      ></table+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  >pattern  <a name="v:E" class="def"+	    >E</a+	    > ::  <a href=""+	    >(&gt;&lt;)</a+	    > k t t</p+	  ><div class="doc"+	  ><p+	    >Pattern for <code+	      ><a href=""+		>Empty</a+		></code+	      ></p+	    ></div+	  ></div+	></div+      ></div+    ><div id="footer"+    ><p+      >Produced by <a href=""+	>Haddock</a+	> version 2.14.1</p+      ></div+    ></body+  ></html+>
html-test/ref/Properties.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -73,8 +73,7 @@ 	      ><a href="" 		>Integer</a 		></code-	      >.-</p+	      >.</p 	    ><pre 	    >fib n &lt;= fib (n + 1)</pre 	    ></div@@ -85,7 +84,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/PruneWithWarning.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -46,15 +46,13 @@ 	>Description</p 	><div class="doc" 	><p-	  >What is tested here:-</p+	  >What is tested here:</p 	  ><ul 	  ><li-	    > If a binding has a deprecation message but no documentation, it is pruned+	    >If a binding has a deprecation message but no documentation, it is pruned    when <code 	      >OPTIONS_HADDOCK prune</code-	      > is used.-</li+	      > is used.</li 	    ></ul 	  ></div 	></div@@ -65,7 +63,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/QuasiExpr.html view
@@ -48,9 +48,9 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:Expr" class="def"+	    > <a name="t:Expr" class="def" 	    >Expr</a-	    >  </p+	    ></p 	  ><div class="subs constructors" 	  ><p class="caption" 	    >Constructors</p@@ -124,9 +124,9 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:BinOp" class="def"+	    > <a name="t:BinOp" class="def" 	    >BinOp</a-	    >  </p+	    ></p 	  ><div class="subs constructors" 	  ><p class="caption" 	    >Constructors</p@@ -214,7 +214,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/QuasiQuote.html view
@@ -58,7 +58,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/SpuriousSuperclassConstraints.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -46,32 +46,25 @@ 	>Description</p 	><div class="doc" 	><p-	  >What is tested here:-</p+	  >What is tested here:</p 	  ><p 	  >Due to a change in GHC 7.6.1 we had a bug that superclass contraints were- included in the instances list.  Edward K. repported it here:-</p+ included in the instances list.  Edward K. repported it here:</p 	  ><p 	  ><a href="" 	    >http://www.haskell.org/pipermail/haskell-cafe/2012-September/103600.html</a-	    >-</p+	    ></p 	  ><p-	  >And here is the corresponding theard on glasgow-haskell-users:-</p+	  >And here is the corresponding theard on glasgow-haskell-users:</p 	  ><p 	  ><a href="" 	    >http://www.haskell.org/pipermail/glasgow-haskell-users/2012-September/022914.html</a-	    >-</p+	    ></p 	  ><p-	  >It has been fixed in:-</p+	  >It has been fixed in:</p 	  ><pre-	  > 6ccf78e15a525282fef61bc4f58a279aa9c21771- Fix spurious superclass constraints bug.-</pre+	  >6ccf78e15a525282fef61bc4f58a279aa9c21771+Fix spurious superclass constraints bug.</pre 	  ></div 	></div       ><div id="interface"@@ -81,9 +74,9 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:SomeType" class="def"+	    > <a name="t:SomeType" class="def" 	    >SomeType</a-	    > f a </p+	    > f a</p 	  ><div class="subs instances" 	  ><p id="control.i:SomeType" class="caption collapser" onclick="toggleSection('i:SomeType')" 	    >Instances</p@@ -121,7 +114,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/TH.html view
@@ -56,7 +56,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/TH2.html view
@@ -56,7 +56,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/Test.html view
@@ -33,15 +33,15 @@       ><table class="info" 	><tr 	  ><th-	    >Portability</th+	    >Copyright</th 	    ><td-	    >portable</td+	    >(c) Simon Marlow 2002</td 	    ></tr 	  ><tr 	  ><th-	    >Stability</th+	    >License</th 	    ><td-	    >provisional</td+	    >BSD-style</td 	    ></tr 	  ><tr 	  ><th@@ -51,9 +51,21 @@ 	    ></tr 	  ><tr 	  ><th+	    >Stability</th+	    ><td+	    >provisional</td+	    ></tr+	  ><tr+	  ><th+	    >Portability</th+	    ><td+	    >portable</td+	    ></tr+	  ><tr+	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -65,65 +77,53 @@ 	><ul 	><li 	  ><a href=""-	    >Type declarations-</a+	    >Type declarations</a 	    ><ul 	    ><li 	      ><a href=""-		>Data types-</a+		>Data types</a 		></li 	      ><li 	      ><a href=""-		>Records-</a+		>Records</a 		></li 	      ></ul 	    ></li 	  ><li 	  ><a href=""-	    >Class declarations-</a+	    >Class declarations</a 	    ></li 	  ><li 	  ><a href=""-	    >Function types-</a+	    >Function types</a 	    ></li 	  ><li 	  ><a href=""-	    >Auxiliary stuff-</a+	    >Auxiliary stuff</a 	    ></li 	  ><li 	  ><a href=""-	    >A hidden module-</a+	    >A hidden module</a 	    ></li 	  ><li 	  ><a href=""-	    >A visible module-</a+	    >A visible module</a 	    ></li 	  ><li 	  ><a href=""-	    >Existential / Universal types-</a+	    >Existential / Universal types</a 	    ></li 	  ><li 	  ><a href=""-	    >Type signatures with argument docs-</a+	    >Type signatures with argument docs</a 	    ></li 	  ><li 	  ><a href=""-	    >A section-</a+	    >A section</a 	    ><ul 	    ><li 	      ><a href=""-		>A subsection -</a+		>A subsection</a 		></li 	      ></ul 	    ></li@@ -151,8 +151,7 @@ 	    ><a href="" 	      >visible</a 	      ></code-	    >.-</p+	    >.</p 	  ></div 	></div       ><div id="synopsis"@@ -162,7 +161,7 @@ 	><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >T</a 	    > a b<ul class="subs" 	    ><li@@ -174,7 +173,7 @@ 		>Maybe</a 		> <a href="" 		>Float</a-		>)  </li+		>)</li 	      ><li 	      >| <a href="" 		>B</a@@ -186,87 +185,87 @@ 		>Int</a 		> <a href="" 		>Float</a-		>)  </li+		>)</li 	      ></ul 	    ></li 	  ><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >T2</a 	    > a b</li 	  ><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >T3</a 	    > a b<ul class="subs" 	    ><li 	      >= <a href="" 		>A1</a-		> a  </li+		> a</li 	      ><li 	      >| <a href="" 		>B1</a-		> b  </li+		> b</li 	      ></ul 	    ></li 	  ><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >T4</a 	    > a b<ul class="subs" 	    ><li 	      >= <a href="" 		>A2</a-		> a  </li+		> a</li 	      ><li 	      >| <a href="" 		>B2</a-		> b  </li+		> b</li 	      ></ul 	    ></li 	  ><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >T5</a 	    > a b<ul class="subs" 	    ><li 	      >= <a href="" 		>A3</a-		> a  </li+		> a</li 	      ><li 	      >| <a href="" 		>B3</a-		> b  </li+		> b</li 	      ></ul 	    ></li 	  ><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >T6</a-	    > <ul class="subs"+	    ><ul class="subs" 	    ><li 	      >= <a href="" 		>A4</a-		>  </li+		></li 	      ><li 	      >| <a href="" 		>B4</a-		>  </li+		></li 	      ><li 	      >| <a href="" 		>C4</a-		>  </li+		></li 	      ></ul 	    ></li 	  ><li class="src short" 	  ><span class="keyword" 	    >newtype</span-	    >  <a href=""+	    > <a href="" 	    >N1</a 	    > a = <a href="" 	    >N1</a@@ -274,7 +273,7 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >newtype</span-	    >  <a href=""+	    > <a href="" 	    >N2</a 	    > a b = <a href="" 	    >N2</a@@ -288,7 +287,7 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >newtype</span-	    >  <a href=""+	    > <a href="" 	    >N3</a 	    > a b = <a href="" 	    >N3</a@@ -302,13 +301,13 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >N4</a 	    > a b</li 	  ><li class="src short" 	  ><span class="keyword" 	    >newtype</span-	    >  <a href=""+	    > <a href="" 	    >N5</a 	    > a b = <a href="" 	    >N5</a@@ -322,7 +321,7 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >newtype</span-	    >  <a href=""+	    > <a href="" 	    >N6</a 	    > a b = <a href="" 	    >N6</a@@ -336,7 +335,7 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >newtype</span-	    >  <a href=""+	    > <a href="" 	    >N7</a 	    > a b = <a href="" 	    >N7</a@@ -350,9 +349,9 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >R</a-	    > <ul class="subs"+	    ><ul class="subs" 	    ><li 	      >= <a href="" 		>C1</a@@ -368,7 +367,7 @@ 		    >q</a 		    > :: <span class="keyword" 		    >forall</span-		    > a.  a -&gt; a</li+		    > a. a -&gt; a</li 		  ><li 		  ><a href="" 		    >r</a@@ -430,9 +429,9 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >R1</a-	    >  = <a href=""+	    > = <a href="" 	    >C3</a 	    > {<ul class="subs" 	    ><li@@ -462,7 +461,7 @@ 	    >D</a 	    > a =&gt; <a href="" 	    >C</a-	    > a  <span class="keyword"+	    > a <span class="keyword" 	    >where</span 	    ><ul class="subs" 	    ><li@@ -480,9 +479,9 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >class</span-	    >  <a href=""+	    > <a href="" 	    >D</a-	    > a  <span class="keyword"+	    > a <span class="keyword" 	    >where</span 	    ><ul class="subs" 	    ><li@@ -500,15 +499,15 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >class</span-	    >  <a href=""+	    > <a href="" 	    >E</a-	    > a </li+	    > a</li 	  ><li class="src short" 	  ><span class="keyword" 	    >class</span-	    >  <a href=""+	    > <a href="" 	    >F</a-	    > a  <span class="keyword"+	    > a <span class="keyword" 	    >where</span 	    ><ul class="subs" 	    ><li@@ -548,7 +547,7 @@ 	  ><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  <a href=""+	    > <a href="" 	    >Ex</a 	    > a<ul class="subs" 	    ><li@@ -558,13 +557,13 @@ 		>C</a 		> b =&gt; <a href="" 		>Ex1</a-		> b  </li+		> b</li 	      ><li 	      >| <span class="keyword" 		>forall</span 		> b . <a href="" 		>Ex2</a-		> b  </li+		> b</li 	      ><li 	      >| <span class="keyword" 		>forall</span@@ -572,13 +571,13 @@ 		>C</a 		> a =&gt; <a href="" 		>Ex3</a-		> b  </li+		> b</li 	      ><li 	      >| <a href="" 		>Ex4</a 		> (<span class="keyword" 		>forall</span-		> a.  a -&gt; a)  </li+		> a. a -&gt; a)</li 	      ></ul 	    ></li 	  ><li class="src short"@@ -658,30 +657,27 @@ 	  ><li class="src short" 	  ><a href="" 	    >withoutType</a-	    > ::  a</li+	    > ::  t</li 	  ></ul 	></div       ><div id="interface"       ><h1 id="g:1"-	>Type declarations-</h1+	>Type declarations</h1 	><h2 id="g:2"-	>Data types-</h2+	>Data types</h2 	><div class="top" 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:T" class="def"+	    > <a name="t:T" class="def" 	    >T</a-	    > a b </p+	    > a b</p 	  ><div class="doc" 	  ><p 	    >This comment applies to the <em 	      >following</em 	      > declaration- and it continues until the next non-comment line-</p+ and it continues until the next non-comment line</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -704,8 +700,7 @@ 		    ><a href="" 		      >A</a 		      ></code-		    > constructor-</p+		    > constructor</p 		  ></td 		></tr 	      ><tr@@ -727,8 +722,7 @@ 		    ><a href="" 		      >B</a 		      ></code-		    > constructor-</p+		    > constructor</p 		  ></td 		></tr 	      ></table@@ -738,26 +732,24 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:T2" class="def"+	    > <a name="t:T2" class="def" 	    >T2</a-	    > a b </p+	    > a b</p 	  ><div class="doc" 	  ><p-	    >An abstract data declaration-</p+	    >An abstract data declaration</p 	    ></div 	  ></div 	><div class="top" 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:T3" class="def"+	    > <a name="t:T3" class="def" 	    >T3</a-	    > a b </p+	    > a b</p 	  ><div class="doc" 	  ><p-	    >A data declaration with no documentation annotations on the constructors-</p+	    >A data declaration with no documentation annotations on the constructors</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -786,9 +778,9 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:T4" class="def"+	    > <a name="t:T4" class="def" 	    >T4</a-	    > a b </p+	    > a b</p 	  ><div class="subs constructors" 	  ><p class="caption" 	    >Constructors</p@@ -816,9 +808,9 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:T5" class="def"+	    > <a name="t:T5" class="def" 	    >T5</a-	    > a b </p+	    > a b</p 	  ><div class="subs constructors" 	  ><p class="caption" 	    >Constructors</p@@ -834,8 +826,7 @@ 		    ><a href="" 		      >A3</a 		      ></code-		    >-</p+		    ></p 		  ></td 		></tr 	      ><tr@@ -849,8 +840,7 @@ 		    ><a href="" 		      >B3</a 		      ></code-		    >-</p+		    ></p 		  ></td 		></tr 	      ></table@@ -860,13 +850,12 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:T6" class="def"+	    > <a name="t:T6" class="def" 	    >T6</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><p-	    >Testing alternative comment styles-</p+	    >Testing alternative comment styles</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -883,8 +872,7 @@ 		    ><a href="" 		      >A4</a 		      ></code-		    >-</p+		    ></p 		  ></td 		></tr 	      ><tr@@ -898,8 +886,7 @@ 		    ><a href="" 		      >B4</a 		      ></code-		    >-</p+		    ></p 		  ></td 		></tr 	      ><tr@@ -913,8 +900,7 @@ 		    ><a href="" 		      >C4</a 		      ></code-		    >-</p+		    ></p 		  ></td 		></tr 	      ></table@@ -924,13 +910,12 @@ 	><p class="src" 	  ><span class="keyword" 	    >newtype</span-	    >  <a name="t:N1" class="def"+	    > <a name="t:N1" class="def" 	    >N1</a-	    > a </p+	    > a</p 	  ><div class="doc" 	  ><p-	    >A newtype-</p+	    >A newtype</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -951,13 +936,12 @@ 	><p class="src" 	  ><span class="keyword" 	    >newtype</span-	    >  <a name="t:N2" class="def"+	    > <a name="t:N2" class="def" 	    >N2</a-	    > a b </p+	    > a b</p 	  ><div class="doc" 	  ><p-	    >A newtype with a fieldname-</p+	    >A newtype with a fieldname</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -996,13 +980,12 @@ 	><p class="src" 	  ><span class="keyword" 	    >newtype</span-	    >  <a name="t:N3" class="def"+	    > <a name="t:N3" class="def" 	    >N3</a-	    > a b </p+	    > a b</p 	  ><div class="doc" 	  ><p-	    >A newtype with a fieldname, documentation on the field-</p+	    >A newtype with a fieldname, documentation on the field</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -1032,8 +1015,7 @@ 			  ><a href="" 			    >n3</a 			    ></code-			  > field -</p+			  > field</p 			></dd 		      ></dl 		    ><div class="clear"@@ -1048,23 +1030,22 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:N4" class="def"+	    > <a name="t:N4" class="def" 	    >N4</a-	    > a b </p+	    > a b</p 	  ><div class="doc" 	  ><p 	    >An abstract newtype - we show this one as data rather than newtype because- the difference isn't visible to the programmer for an abstract type.-</p+ the difference isn't visible to the programmer for an abstract type.</p 	    ></div 	  ></div 	><div class="top" 	><p class="src" 	  ><span class="keyword" 	    >newtype</span-	    >  <a name="t:N5" class="def"+	    > <a name="t:N5" class="def" 	    >N5</a-	    > a b </p+	    > a b</p 	  ><div class="subs constructors" 	  ><p class="caption" 	    >Constructors</p@@ -1089,8 +1070,7 @@ 			> :: a b</dt 		      ><dd class="doc" 		      ><p-			>no docs on the datatype or the constructor-</p+			>no docs on the datatype or the constructor</p 			></dd 		      ></dl 		    ><div class="clear"@@ -1105,9 +1085,9 @@ 	><p class="src" 	  ><span class="keyword" 	    >newtype</span-	    >  <a name="t:N6" class="def"+	    > <a name="t:N6" class="def" 	    >N6</a-	    > a b </p+	    > a b</p 	  ><div class="subs constructors" 	  ><p class="caption" 	    >Constructors</p@@ -1119,8 +1099,7 @@ 		  ></td 		><td class="doc" 		><p-		  >docs on the constructor only-</p+		  >docs on the constructor only</p 		  ></td 		></tr 	      ><tr@@ -1148,13 +1127,12 @@ 	><p class="src" 	  ><span class="keyword" 	    >newtype</span-	    >  <a name="t:N7" class="def"+	    > <a name="t:N7" class="def" 	    >N7</a-	    > a b </p+	    > a b</p 	  ><div class="doc" 	  ><p-	    >docs on the newtype and the constructor-</p+	    >docs on the newtype and the constructor</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -1171,8 +1149,7 @@ 		    ><a href="" 		      >N7</a 		      ></code-		    > constructor-</p+		    > constructor</p 		  ></td 		></tr 	      ><tr@@ -1197,15 +1174,14 @@ 	    ></div 	  ></div 	><h2 id="g:3"-	>Records-</h2+	>Records</h2 	><div class="top" 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:R" class="def"+	    > <a name="t:R" class="def" 	    >R</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><p 	    >This is the documentation for the <code@@ -1229,8 +1205,7 @@ 	      ><a href="" 		>s</a 		></code-	      >.-</p+	      >.</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -1247,8 +1222,7 @@ 		    ><a href="" 		      >C1</a 		      ></code-		    > record constructor, with the following fields:-</p+		    > record constructor, with the following fields:</p 		  ></td 		></tr 	      ><tr@@ -1269,23 +1243,21 @@ 			  ><a href="" 			    >p</a 			    ></code-			  > field-</p+			  > field</p 			></dd 		      ><dt class="src" 		      ><a name="v:q" class="def" 			>q</a 			> :: <span class="keyword" 			>forall</span-			> a.  a -&gt; a</dt+			> a. a -&gt; a</dt 		      ><dd class="doc" 		      ><p 			>This comment applies to the <code 			  ><a href="" 			    >q</a 			    ></code-			  > field-</p+			  > field</p 			></dd 		      ><dt class="src" 		      ><a name="v:r" class="def"@@ -1303,8 +1275,7 @@ 			  ><a href="" 			    >s</a 			    ></code-			  >-</p+			  ></p 			></dd 		      ><dt class="src" 		      ><a name="v:s" class="def"@@ -1322,8 +1293,7 @@ 			  ><a href="" 			    >s</a 			    ></code-			  >-</p+			  ></p 			></dd 		      ></dl 		    ><div class="clear"@@ -1342,8 +1312,7 @@ 		    ><a href="" 		      >C2</a 		      ></code-		    > record constructor, also with some fields:-</p+		    > record constructor, also with some fields:</p 		  ></td 		></tr 	      ><tr@@ -1407,13 +1376,12 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:R1" class="def"+	    > <a name="t:R1" class="def" 	    >R1</a-	    >  </p+	    ></p 	  ><div class="doc" 	  ><p-	    >Testing different record commenting styles-</p+	    >Testing different record commenting styles</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -1430,8 +1398,7 @@ 		    ><a href="" 		      >C3</a 		      ></code-		    > record constructor-</p+		    > record constructor</p 		  ></td 		></tr 	      ><tr@@ -1452,8 +1419,7 @@ 			  ><a href="" 			    >s1</a 			    ></code-			  > record selector-</p+			  > record selector</p 			></dd 		      ><dt class="src" 		      ><a name="v:s2" class="def"@@ -1467,8 +1433,7 @@ 			  ><a href="" 			    >s2</a 			    ></code-			  > record selector-</p+			  > record selector</p 			></dd 		      ><dt class="src" 		      ><a name="v:s3" class="def"@@ -1482,8 +1447,7 @@ 			  ><a href="" 			    >s3</a 			    ></code-			  > record selector-</p+			  > record selector</p 			></dd 		      ></dl 		    ><div class="clear"@@ -1496,12 +1460,10 @@ 	  ></div 	><div class="doc" 	><p-	  >test that we can export record selectors on their own:-</p+	  >test that we can export record selectors on their own:</p 	  ></div 	><h1 id="g:4"-	>Class declarations-</h1+	>Class declarations</h1 	><div class="top" 	><p class="src" 	  ><span class="keyword"@@ -1510,7 +1472,7 @@ 	    >D</a 	    > a =&gt; <a name="t:C" class="def" 	    >C</a-	    > a  <span class="keyword"+	    > a <span class="keyword" 	    >where</span 	    ></p 	  ><div class="doc"@@ -1521,8 +1483,7 @@ 	      ><a href="" 		>C</a 		></code-	      > class)-</p+	      > class)</p 	    ></div 	  ><div class="subs methods" 	  ><p class="caption"@@ -1539,8 +1500,7 @@ 		><a href="" 		  >a</a 		  ></code-		> method-</p+		> method</p 	      ></div 	    ><p class="src" 	    ><a name="v:b" class="def"@@ -1552,8 +1512,7 @@ 		><a href="" 		  >b</a 		  ></code-		> method-</p+		> method</p 	      ></div 	    ></div 	  ></div@@ -1561,15 +1520,14 @@ 	><p class="src" 	  ><span class="keyword" 	    >class</span-	    >  <a name="t:D" class="def"+	    > <a name="t:D" class="def" 	    >D</a-	    > a  <span class="keyword"+	    > a <span class="keyword" 	    >where</span 	    ></p 	  ><div class="doc" 	  ><p-	    >This is a class declaration with no separate docs for the methods-</p+	    >This is a class declaration with no separate docs for the methods</p 	    ></div 	  ><div class="subs methods" 	  ><p class="caption"@@ -1618,22 +1576,27 @@ 	><p class="src" 	  ><span class="keyword" 	    >class</span-	    >  <a name="t:E" class="def"+	    > <a name="t:E" class="def" 	    >E</a-	    > a </p+	    > a</p 	  ><div class="doc" 	  ><p-	    >This is a class declaration with no methods (or no methods exported)-</p+	    >This is a class declaration with no methods (or no methods exported)</p 	    ></div+	  ><div class="subs minimal"+	  ><p class="caption"+	    >Minimal complete definition</p+	    ><p class="src"+	    >ee</p+	    ></div 	  ></div 	><div class="top" 	><p class="src" 	  ><span class="keyword" 	    >class</span-	    >  <a name="t:F" class="def"+	    > <a name="t:F" class="def" 	    >F</a-	    > a  <span class="keyword"+	    > a <span class="keyword" 	    >where</span 	    ></p 	  ><div class="subs methods"@@ -1647,12 +1610,10 @@ 	  ></div 	><div class="doc" 	><p-	  >Test that we can export a class method on its own:-</p+	  >Test that we can export a class method on its own:</p 	  ></div 	><h1 id="g:5"-	>Function types-</h1+	>Function types</h1 	><div class="top" 	><p class="src" 	  ><a name="v:f" class="def"@@ -1674,39 +1635,31 @@ 	      >Foo</a 	      >.  We can add emphasis <em 	      >like this</em-	      >.-</p+	      >.</p 	    ><ul 	    ><li-	      > This is a bulleted list-</li+	      >This is a bulleted list</li 	      ><li-	      > This is the next item (different kind of bullet)-</li+	      >This is the next item (different kind of bullet)</li 	      ></ul 	    ><ol 	    ><li-	      > This is an ordered list-</li+	      >This is an ordered list</li 	      ><li-	      > This is the next item (different kind of bullet)-</li+	      >This is the next item (different kind of bullet)</li 	      ></ol 	    ><dl 	    ><dt 	      >cat</dt 	      ><dd-	      > a small, furry, domesticated mammal-</dd+	      >a small, furry, domesticated mammal</dd 	      ><dt 	      >pineapple</dt 	      ><dd-	      > a fruit grown in the tropics-</dd+	      >a fruit grown in the tropics</dd 	      ></dl 	    ><pre-	    >-     This is a block of code, which can include other markup: <code+	    >     This is a block of code, which can include other markup: <code 	      ><a href="" 		>R</a 		></code@@ -1716,13 +1669,11 @@                  significant </pre 	    ><pre-	    > this is another block of code-</pre+	    >this is another block of code</pre 	    ><p 	    >We can also include URLs in documentation: <a href="" 	      >http://www.haskell.org/</a-	      >.-</p+	      >.</p 	    ></div 	  ></div 	><div class="top"@@ -1736,26 +1687,22 @@ 	    > CInt</p 	  ><div class="doc" 	  ><p-	    >we can export foreign declarations too-</p+	    >we can export foreign declarations too</p 	    ></div 	  ></div 	><h1 id="g:6"-	>Auxiliary stuff-</h1+	>Auxiliary stuff</h1 	><div class="doc" 	><p 	  >This is some documentation that is attached to a name ($aux1)  rather than a source declaration.  The documentation may be- referred to in the export list using its name.-</p+ referred to in the export list using its name.</p 	  ><pre 	  > code block in named doc</pre 	  ></div 	><div class="doc" 	><p-	  >This is some documentation that is attached to a name ($aux2)-</p+	  >This is some documentation that is attached to a name ($aux2)</p 	  ></div 	><div class="doc" 	><pre@@ -1767,19 +1714,16 @@ 	  ></div 	><div class="doc" 	><p-	  >a nested, named doc comment-</p+	  >a nested, named doc comment</p 	  ><p-	  >with a paragraph,-</p+	  >with a paragraph,</p 	  ><pre 	  > and a code block</pre 	  ></div 	><div class="doc" 	><pre 	  >test-test1-</pre+test1</pre 	  ><pre 	  > test2   test3@@ -1787,74 +1731,60 @@ 	  ></div 	><div class="doc" 	><pre-	  >-test1+	  >test1 test2 </pre 	  ></div 	><div class="doc" 	><pre 	  >test3-test4-</pre+test4</pre 	  ></div 	><div class="doc" 	><pre-	  >-test1+	  >test1 test2 </pre 	  ><pre 	  >test3-test4-</pre+test4</pre 	  ></div 	><div class="doc" 	><pre 	  >test3-test4-</pre+test4</pre 	  ><pre-	  >-test1+	  >test1 test2 </pre 	  ></div 	><div class="doc" 	><p-	  >aux11:-</p+	  >aux11:</p 	  ><pre 	  >test3-test4-</pre+test4</pre 	  ><pre-	  >-test1+	  >test1 test2 </pre 	  ></div 	><div class="doc" 	><pre-	  > foo-</pre+	  >foo</pre 	  ><pre-	  > bar-</pre+	  >bar</pre 	  ></div 	><div class="doc" 	><p-	  >This is some inline documentation in the export list-</p+	  >This is some inline documentation in the export list</p 	  ><pre-	  > a code block using bird-tracks- each line must begin with &gt; (which isn't significant unless it- is at the beginning of the line).-</pre+	  >a code block using bird-tracks+each line must begin with &gt; (which isn't significant unless it+is at the beginning of the line).</pre 	  ></div 	><h1 id="g:7"-	>A hidden module-</h1+	>A hidden module</h1 	><div class="top" 	><p class="src" 	  ><a name="v:hidden" class="def"@@ -1866,8 +1796,7 @@ 	    ></p 	  ></div 	><h1 id="g:8"-	>A visible module-</h1+	>A visible module</h1 	><div class="top" 	><p class="src" 	  >module <a href=""@@ -1876,23 +1805,20 @@ 	  ></div 	><div class="doc" 	><p-	  >nested-style doc comments -</p+	  >nested-style doc comments </p 	  ></div 	><h1 id="g:9"-	>Existential / Universal types-</h1+	>Existential / Universal types</h1 	><div class="top" 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:Ex" class="def"+	    > <a name="t:Ex" class="def" 	    >Ex</a-	    > a </p+	    > a</p 	  ><div class="doc" 	  ><p-	    >A data-type using existential/universal types-</p+	    >A data-type using existential/universal types</p 	    ></div 	  ><div class="subs constructors" 	  ><p class="caption"@@ -1938,7 +1864,7 @@ 		  >Ex4</a 		  > (<span class="keyword" 		  >forall</span-		  > a.  a -&gt; a)</td+		  > a. a -&gt; a)</td 		><td class="doc empty" 		>&nbsp;</td 		></tr@@ -1946,8 +1872,7 @@ 	    ></div 	  ></div 	><h1 id="g:10"-	>Type signatures with argument docs-</h1+	>Type signatures with argument docs</h1 	><div class="top" 	><p class="src" 	  ><a name="v:k" class="def"@@ -1968,8 +1893,7 @@ 		    ><a href="" 		      >T</a 		      ></code-		    >-</p+		    ></p 		  ></td 		></tr 	      ><tr@@ -1983,8 +1907,7 @@ 		  ></td 		><td class="doc" 		><p-		  >This argument has type 'T2 Int Int'-</p+		  >This argument has type 'T2 Int Int'</p 		  ></td 		></tr 	      ><tr@@ -2006,8 +1929,7 @@ 		><p 		  >This argument has type <code 		    >T3 Bool Bool -&gt; T4 Float Float</code-		    >-</p+		    ></p 		  ></td 		></tr 	      ><tr@@ -2019,8 +1941,7 @@ 		><p 		  >This argument has a very long description that should  hopefully cause some wrapping to happen when it is finally- rendered by Haddock in the generated HTML page.-</p+ rendered by Haddock in the generated HTML page.</p 		  ></td 		></tr 	      ><tr@@ -2030,16 +1951,14 @@ 		  > ()</td 		><td class="doc" 		><p-		  >This is the result type-</p+		  >This is the result type</p 		  ></td 		></tr 	      ></table 	    ></div 	  ><div class="doc" 	  ><p-	    >This is a function with documentation for each argument-</p+	    >This is a function with documentation for each argument</p 	    ></div 	  ></div 	><div class="top"@@ -2062,8 +1981,7 @@ 		  >)</td 		><td class="doc" 		><p-		  >takes a triple-</p+		  >takes a triple</p 		  ></td 		></tr 	      ><tr@@ -2077,8 +1995,7 @@ 		    ><a href="" 		      >Int</a 		      ></code-		    >-</p+		    ></p 		  ></td 		></tr 	      ></table@@ -2108,8 +2025,7 @@ 		  > ()</td 		><td class="doc" 		><p-		  >one of the arguments-</p+		  >one of the arguments</p 		  ></td 		></tr 	      ><tr@@ -2121,16 +2037,14 @@ 		  ></td 		><td class="doc" 		><p-		  >and the return value-</p+		  >and the return value</p 		  ></td 		></tr 	      ></table 	    ></div 	  ><div class="doc" 	  ><p-	    >This function has some arg docs -</p+	    >This function has some arg docs</p 	    ></div 	  ></div 	><div class="top"@@ -2149,8 +2063,7 @@ 		  ></td 		><td class="doc" 		><p-		  >The input float-</p+		  >The input float</p 		  ></td 		></tr 	      ><tr@@ -2162,33 +2075,27 @@ 		  ></td 		><td class="doc" 		><p-		  >The output float-</p+		  >The output float</p 		  ></td 		></tr 	      ></table 	    ></div 	  ><div class="doc" 	  ><p-	    >A foreign import with argument docs-</p+	    >A foreign import with argument docs</p 	    ></div 	  ></div 	><h1 id="g:11"-	>A section-</h1+	>A section</h1 	><h2 id="g:12"-	>A subsection -</h2+	>A subsection</h2 	><div class="doc" 	><pre-	  > a literal line-</pre+	  >a literal line</pre 	  ><p 	  >$ a non <em 	    >literal</em-	    > line $-</p+	    > line $</p 	  ></div 	><div class="top" 	><p class="src"@@ -2203,9 +2110,8 @@ 	      ><a href="" 		>f'</a 		></code-	      > - but f' doesn't get link'd 'f\''-</p+	      >+ but f' doesn't get link'd 'f\''</p 	    ></div 	  ></div 	><div class="top"@@ -2217,19 +2123,17 @@ 	    ></p 	  ><div class="doc" 	  ><p-	    >Comment on a definition with type signature-</p+	    >Comment on a definition with type signature</p 	    ></div 	  ></div 	><div class="top" 	><p class="src" 	  ><a name="v:withoutType" class="def" 	    >withoutType</a-	    > ::  a</p+	    > ::  t</p 	  ><div class="doc" 	  ><p-	    >Comment on a definition without type signature-</p+	    >Comment on a definition without type signature</p 	    ></div 	  ></div 	></div@@ -2238,7 +2142,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/Ticket112.html view
@@ -65,8 +65,7 @@ 	      ><a href="" 		>Addr#</a 		></code-	      > to the string, and the length of the string.-</p+	      > to the string, and the length of the string.</p 	    ></div 	  ></div 	></div@@ -75,7 +74,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
+ html-test/ref/Ticket253_1.html view
@@ -0,0 +1,91 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"+     /><title+    >Ticket253_1</title+    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"+     /><script src="haddock-util.js" type="text/javascript"+    ></script+    ><script type="text/javascript"+    >//<![CDATA[+window.onload = function () {pageLoad();setSynopsis("mini_Ticket253_1.html");};+//]]>+</script+    ></head+  ><body+  ><div id="package-header"+    ><ul class="links" id="page-menu"+      ><li+	><a href=""+	  >Contents</a+	  ></li+	><li+	><a href=""+	  >Index</a+	  ></li+	></ul+      ><p class="caption empty"+      >&nbsp;</p+      ></div+    ><div id="content"+    ><div id="module-header"+      ><table class="info"+	><tr+	  ><th+	    >Safe Haskell</th+	    ><td+	    >Safe-Inferred</td+	    ></tr+	  ></table+	><p class="caption"+	>Ticket253_1</p+	></div+      ><div id="synopsis"+      ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')"+	>Synopsis</p+	><ul id="section.syn" class="hide" onclick="toggleSection('syn')"+	><li class="src short"+	  ><a href=""+	    >foo</a+	    > :: <a href=""+	    >Int</a+	    ></li+	  ></ul+	></div+      ><div id="interface"+      ><h1+	>Documentation</h1+	><div class="top"+	><p class="src"+	  ><a name="v:foo" class="def"+	    >foo</a+	    > :: <a href=""+	    >Int</a+	    ></p+	  ><div class="doc"+	  ><p+	    >See <code+	      ><a href=""+		>bar</a+		></code+	      >.</p+	    ><p+	    >Also see <code+	      ><a href=""+		>Baz</a+		></code+	      ></p+	    ></div+	  ></div+	></div+      ></div+    ><div id="footer"+    ><p+      >Produced by <a href=""+	>Haddock</a+	> version 2.14.1</p+      ></div+    ></body+  ></html+>
+ html-test/ref/Ticket253_2.html view
@@ -0,0 +1,111 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"+     /><title+    >Ticket253_2</title+    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"+     /><script src="haddock-util.js" type="text/javascript"+    ></script+    ><script type="text/javascript"+    >//<![CDATA[+window.onload = function () {pageLoad();setSynopsis("mini_Ticket253_2.html");};+//]]>+</script+    ></head+  ><body+  ><div id="package-header"+    ><ul class="links" id="page-menu"+      ><li+	><a href=""+	  >Contents</a+	  ></li+	><li+	><a href=""+	  >Index</a+	  ></li+	></ul+      ><p class="caption empty"+      >&nbsp;</p+      ></div+    ><div id="content"+    ><div id="module-header"+      ><table class="info"+	><tr+	  ><th+	    >Safe Haskell</th+	    ><td+	    >Safe-Inferred</td+	    ></tr+	  ></table+	><p class="caption"+	>Ticket253_2</p+	></div+      ><div id="synopsis"+      ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')"+	>Synopsis</p+	><ul id="section.syn" class="hide" onclick="toggleSection('syn')"+	><li class="src short"+	  ><a href=""+	    >bar</a+	    > :: <a href=""+	    >Int</a+	    ></li+	  ><li class="src short"+	  ><span class="keyword"+	    >data</span+	    > <a href=""+	    >Baz</a+	    > = <a href=""+	    >Baz</a+	    ></li+	  ></ul+	></div+      ><div id="interface"+      ><h1+	>Documentation</h1+	><div class="top"+	><p class="src"+	  ><a name="v:bar" class="def"+	    >bar</a+	    > :: <a href=""+	    >Int</a+	    ></p+	  ><div class="doc"+	  ><p+	    >Comment</p+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >data</span+	    > <a name="t:Baz" class="def"+	    >Baz</a+	    ></p+	  ><div class="subs constructors"+	  ><p class="caption"+	    >Constructors</p+	    ><table+	    ><tr+	      ><td class="src"+		><a name="v:Baz" class="def"+		  >Baz</a+		  ></td+		><td class="doc empty"+		>&nbsp;</td+		></tr+	      ></table+	    ></div+	  ></div+	></div+      ></div+    ><div id="footer"+    ><p+      >Produced by <a href=""+	>Haddock</a+	> version 2.14.1</p+      ></div+    ></body+  ></html+>
html-test/ref/Ticket61.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -48,9 +48,9 @@ 	><p class="src" 	  ><span class="keyword" 	    >class</span-	    >  <a name="t:C" class="def"+	    > <a name="t:C" class="def" 	    >C</a-	    > a  <span class="keyword"+	    > a <span class="keyword" 	    >where</span 	    ></p 	  ><div class="subs methods"@@ -62,8 +62,7 @@ 	      > :: a</p 	    ><div class="doc" 	    ><p-	      >A comment about f-</p+	      >A comment about f</p 	      ></div 	    ></div 	  ></div@@ -73,7 +72,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/Ticket75.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -48,7 +48,7 @@ 	><li class="src short" 	  ><span class="keyword" 	    >data</span-	    >  a <a href=""+	    > a <a href="" 	    >:-</a 	    > b = <a href="" 	    >Q</a@@ -68,9 +68,9 @@ 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  a <a name="t::-45-" class="def"+	    > a <a name="t::-45-" class="def" 	    >:-</a-	    > b </p+	    > b</p 	  ><div class="subs constructors" 	  ><p class="caption" 	    >Constructors</p@@ -99,8 +99,7 @@ 	      ><a href="" 		>:-</a 		></code-	      >-</p+	      ></p 	    ></div 	  ></div 	></div@@ -109,7 +108,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
+ html-test/ref/TitledPicture.html view
@@ -0,0 +1,109 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"+     /><title+    >TitledPicture</title+    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"+     /><script src="haddock-util.js" type="text/javascript"+    ></script+    ><script type="text/javascript"+    >//<![CDATA[+window.onload = function () {pageLoad();setSynopsis("mini_TitledPicture.html");};+//]]>+</script+    ></head+  ><body+  ><div id="package-header"+    ><ul class="links" id="page-menu"+      ><li+	><a href=""+	  >Contents</a+	  ></li+	><li+	><a href=""+	  >Index</a+	  ></li+	></ul+      ><p class="caption empty"+      >&nbsp;</p+      ></div+    ><div id="content"+    ><div id="module-header"+      ><table class="info"+	><tr+	  ><th+	    >Safe Haskell</th+	    ><td+	    >Safe-Inferred</td+	    ></tr+	  ></table+	><p class="caption"+	>TitledPicture</p+	></div+      ><div id="synopsis"+      ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')"+	>Synopsis</p+	><ul id="section.syn" class="hide" onclick="toggleSection('syn')"+	><li class="src short"+	  ><a href=""+	    >foo</a+	    > :: <a href=""+	    >Integer</a+	    ></li+	  ><li class="src short"+	  ><a href=""+	    >bar</a+	    > :: <a href=""+	    >Integer</a+	    ></li+	  ></ul+	></div+      ><div id="interface"+      ><h1+	>Documentation</h1+	><div class="top"+	><p class="src"+	  ><a name="v:foo" class="def"+	    >foo</a+	    > :: <a href=""+	    >Integer</a+	    ></p+	  ><div class="doc"+	  ><p+	    >Picture for <code+	      ><a href=""+		>foo</a+		></code+	      > without a title <img src="bar"+	       /></p+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><a name="v:bar" class="def"+	    >bar</a+	    > :: <a href=""+	    >Integer</a+	    ></p+	  ><div class="doc"+	  ><p+	    >Picture for <code+	      ><a href=""+		>bar</a+		></code+	      > with title <img src="un&#8739;&#8705;&#8728;" title="&#948;&#8712;"+	       /></p+	    ></div+	  ></div+	></div+      ></div+    ><div id="footer"+    ><p+      >Produced by <a href=""+	>Haddock</a+	> version 2.14.1</p+      ></div+    ></body+  ></html+>
html-test/ref/TypeFamilies.html view
@@ -35,62 +35,124 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption" 	>TypeFamilies</p 	></div+      ><div id="description"+      ><p class="caption"+	>Description</p+	><div class="doc"+	><p+	  >Doc for: module TypeFamilies</p+	  ></div+	></div       ><div id="synopsis"       ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')" 	>Synopsis</p 	><ul id="section.syn" class="hide" onclick="toggleSection('syn')" 	><li class="src short" 	  ><span class="keyword"+	    >data</span+	    > <a href=""+	    >X</a+	    ><ul class="subs"+	    ><li+	      >= <a href=""+		>X</a+		></li+	      ><li+	      >| <a href=""+		>XX</a+		></li+	      ><li+	      >| <a href=""+		>XXX</a+		></li+	      ></ul+	    ></li+	  ><li class="src short"+	  ><span class="keyword"+	    >data</span+	    > <a href=""+	    >Y</a+	    ></li+	  ><li class="src short"+	  ><span class="keyword"+	    >data</span+	    > <a href=""+	    >Z</a+	    ><ul class="subs"+	    ><li+	      >= <a href=""+		>ZA</a+		></li+	      ><li+	      >| <a href=""+		>ZB</a+		></li+	      ></ul+	    ></li+	  ><li class="src short"+	  ><span class="keyword"+	    >class</span+	    > <a href=""+	    >Test</a+	    > a</li+	  ><li class="src short"+	  ><span class="keyword" 	    >type family</span 	    > <a href=""-	    >G</a+	    >Foo</a+	    > a :: k</li+	  ><li class="src short"+	  ><span class="keyword"+	    >data family</span+	    > <a href=""+	    >Bat</a 	    > a :: *</li 	  ><li class="src short" 	  ><span class="keyword" 	    >class</span-	    >  <a href=""-	    >A</a-	    > a  <span class="keyword"+	    > <a href=""+	    >Assoc</a+	    > a <span class="keyword" 	    >where</span 	    ><ul class="subs" 	    ><li 	      ><span class="keyword" 		>data</span 		> <a href=""-		>B</a-		> a :: * -&gt; *</li+		>AssocD</a+		> a :: *</li 	      ><li-	      ><a href=""-		>f</a-		> :: <a href=""-		>B</a-		> a <a href=""-		>Int</a-		></li+	      ><span class="keyword"+		>type</span+		> <a href=""+		>AssocT</a+		> a :: *</li 	      ></ul 	    ></li 	  ><li class="src short" 	  ><span class="keyword" 	    >type family</span 	    > <a href=""-	    >F</a-	    > a </li+	    >Bar</a+	    > b</li 	  ><li class="src short"-	  ><a href=""-	    >g</a-	    > :: <a href=""-	    >B</a-	    > <a href=""-	    >Int</a-	    > <a href=""-	    >Integer</a-	    ></li+	  ><span class="keyword"+	    >type family</span+	    > a <a href=""+	    >&lt;&gt;</a+	    > b :: k</li+	  ><li class="src short"+	  ><span class="keyword"+	    >class</span+	    > a <a href=""+	    >&gt;&lt;</a+	    > b</li 	  ></ul 	></div       ><div id="interface"@@ -99,29 +161,697 @@ 	><div class="top" 	><p class="src" 	  ><span class="keyword"+	    >data</span+	    > <a name="t:X" class="def"+	    >X</a+	    ></p+	  ><div class="doc"+	  ><p+	    >Doc for: data X</p+	    ></div+	  ><div class="subs constructors"+	  ><p class="caption"+	    >Constructors</p+	    ><table+	    ><tr+	      ><td class="src"+		><a name="v:X" class="def"+		  >X</a+		  ></td+		><td class="doc"+		><p+		  >Doc for: X</p+		  ></td+		></tr+	      ><tr+	      ><td class="src"+		><a name="v:XX" class="def"+		  >XX</a+		  ></td+		><td class="doc"+		><p+		  >Doc for: XX</p+		  ></td+		></tr+	      ><tr+	      ><td class="src"+		><a name="v:XXX" class="def"+		  >XXX</a+		  ></td+		><td class="doc"+		><p+		  >Doc for: XXX</p+		  ></td+		></tr+	      ></table+	    ></div+	  ><div class="subs instances"+	  ><p id="control.i:X" class="caption collapser" onclick="toggleSection('i:X')"+	    >Instances</p+	    ><div id="section.i:X" class="show"+	    ><table+	      ><tr+		><td class="src"+		  ><a href=""+		    >Assoc</a+		    > * <a href=""+		    >X</a+		    ></td+		  ><td class="doc"+		  ><p+		    >Doc for: instance Assoc X</p+		    ></td+		  ></tr+		><tr+		><td class="src"+		  ><a href=""+		    >Test</a+		    > * <a href=""+		    >X</a+		    ></td+		  ><td class="doc"+		  ><p+		    >Doc for: instance Test X</p+		    ></td+		  ></tr+		><tr+		><td class="src"+		  ><a href=""+		    >(&gt;&lt;)</a+		    > <a href=""+		    >X</a+		    > <a href=""+		    >XX</a+		    > <a href=""+		    >XXX</a+		    ></td+		  ><td class="doc empty"+		  >&nbsp;</td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >type</span+		    > <a href=""+		    >Foo</a+		    > <a href=""+		    >X</a+		    > = <a href=""+		    >Y</a+		    ></td+		  ><td class="doc"+		  ><p+		    >External instance</p+		    ></td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >data</span+		    > <a href=""+		    >AssocD</a+		    > * <a href=""+		    >X</a+		    > = <a name="v:AssocX" class="def"+		    >AssocX</a+		    ></td+		  ><td class="doc empty"+		  >&nbsp;</td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >type</span+		    > <a href=""+		    >AssocT</a+		    > * <a href=""+		    >X</a+		    > = <a href=""+		    >Foo</a+		    > * <a href=""+		    >X</a+		    ></td+		  ><td class="doc empty"+		  >&nbsp;</td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >data</span+		    > <a href=""+		    >Bat</a+		    > * <a href=""+		    >X</a+		    > <ul class="inst"+		    ><li class="inst"+		      >= <a name="v:BatX" class="def"+			>BatX</a+			> <a href=""+			>X</a+			></li+		      ><li class="inst"+		      >| <a name="v:BatXX" class="def"+			>BatXX</a+			> { <ul class="subs"+			><li+			  ><a name="v:aaa" class="def"+			    >aaa</a+			    > :: <a href=""+			    >X</a+			    ></li+			  ><li+			  ><a name="v:bbb" class="def"+			    >bbb</a+			    > :: <a href=""+			    >Y</a+			    ></li+			  ></ul+			> }</li+		      ></ul+		    ></td+		  ><td class="doc"+		  ><p+		    >Doc for: data instance Bat X</p+		    ></td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >type</span+		    > <a href=""+		    >Foo</a+		    > * <a href=""+		    >X</a+		    > = <a href=""+		    >Y</a+		    ></td+		  ><td class="doc"+		  ><p+		    >Doc for: type instance Foo X = Y</p+		    ></td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >type</span+		    > <a href=""+		    >(&lt;&gt;)</a+		    > * <a href=""+		    >X</a+		    > a = <a href=""+		    >X</a+		    ></td+		  ><td class="doc empty"+		  >&nbsp;</td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >type</span+		    > <a href=""+		    >(&lt;&gt;)</a+		    > <a href=""+		    >X</a+		    > <a href=""+		    >XXX</a+		    > <a href=""+		    >XX</a+		    > = <a href=""+		    >X</a+		    ></td+		  ><td class="doc empty"+		  >&nbsp;</td+		  ></tr+		></table+	      ></div+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >data</span+	    > <a name="t:Y" class="def"+	    >Y</a+	    ></p+	  ><div class="doc"+	  ><p+	    >Doc for: data Y</p+	    ></div+	  ><div class="subs instances"+	  ><p id="control.i:Y" class="caption collapser" onclick="toggleSection('i:Y')"+	    >Instances</p+	    ><div id="section.i:Y" class="show"+	    ><table+	      ><tr+		><td class="src"+		  ><a href=""+		    >Assoc</a+		    > * <a href=""+		    >Y</a+		    ></td+		  ><td class="doc"+		  ><p+		    >Doc for: instance Assoc Y</p+		    ></td+		  ></tr+		><tr+		><td class="src"+		  ><a href=""+		    >Test</a+		    > * <a href=""+		    >Y</a+		    ></td+		  ><td class="doc"+		  ><p+		    >Doc for: instance Test Y</p+		    ></td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >data</span+		    > <a href=""+		    >Bar</a+		    > <a href=""+		    >Y</a+		    ></td+		  ><td class="doc empty"+		  >&nbsp;</td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >data</span+		    > <a href=""+		    >AssocD</a+		    > * <a href=""+		    >Y</a+		    > = <a name="v:AssocY" class="def"+		    >AssocY</a+		    ></td+		  ><td class="doc empty"+		  >&nbsp;</td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >type</span+		    > <a href=""+		    >AssocT</a+		    > * <a href=""+		    >Y</a+		    > = <a href=""+		    >Bat</a+		    > * <a href=""+		    >Y</a+		    ></td+		  ><td class="doc empty"+		  >&nbsp;</td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >data</span+		    > <a href=""+		    >Bat</a+		    > * <a href=""+		    >Y</a+		    > = <a name="v:BatY" class="def"+		    >BatY</a+		    > <a href=""+		    >Y</a+		    ></td+		  ><td class="doc"+		  ><p+		    >Doc for: data instance Bat Y</p+		    ></td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >type</span+		    > <a href=""+		    >Foo</a+		    > * <a href=""+		    >Y</a+		    > = <a href=""+		    >X</a+		    ></td+		  ><td class="doc"+		  ><p+		    >Doc for: type instance Foo Y = X</p+		    ></td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >type</span+		    > <a href=""+		    >(&lt;&gt;)</a+		    > * <a href=""+		    >Y</a+		    > a = a</td+		  ><td class="doc empty"+		  >&nbsp;</td+		  ></tr+		></table+	      ></div+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >data</span+	    > <a name="t:Z" class="def"+	    >Z</a+	    ></p+	  ><div class="doc"+	  ><p+	    >Doc for: data Z</p+	    ></div+	  ><div class="subs constructors"+	  ><p class="caption"+	    >Constructors</p+	    ><table+	    ><tr+	      ><td class="src"+		><a name="v:ZA" class="def"+		  >ZA</a+		  ></td+		><td class="doc empty"+		>&nbsp;</td+		></tr+	      ><tr+	      ><td class="src"+		><a name="v:ZB" class="def"+		  >ZB</a+		  ></td+		><td class="doc empty"+		>&nbsp;</td+		></tr+	      ></table+	    ></div+	  ><div class="subs instances"+	  ><p id="control.i:Z" class="caption collapser" onclick="toggleSection('i:Z')"+	    >Instances</p+	    ><div id="section.i:Z" class="show"+	    ><table+	      ><tr+		><td class="src"+		  ><span class="keyword"+		    >data</span+		    > <a href=""+		    >Bat</a+		    > <a href=""+		    >Z</a+		    > <span class="keyword"+		    >where</span+		    ><ul class="inst"+		    ><li class="inst"+		      ><a name="v:BatZ1" class="def"+			>BatZ1</a+			> ::  <a href=""+			>Z</a+			> -&gt; <a href=""+			>Bat</a+			> <a href=""+			>Z</a+			> <a href=""+			>ZA</a+			></li+		      ><li class="inst"+		      ><a name="v:BatZ2" class="def"+			>BatZ2</a+			> :: { <ul class="subs"+			><li+			  ><a name="v:batx" class="def"+			    >batx</a+			    > :: <a href=""+			    >X</a+			    ></li+			  ><li+			  ><a name="v:baty" class="def"+			    >baty</a+			    > :: <a href=""+			    >Y</a+			    ></li+			  ></ul+			> } -&gt; <a href=""+			>Bat</a+			> <a href=""+			>Z</a+			> <a href=""+			>ZB</a+			></li+		      ></ul+		    ></td+		  ><td class="doc"+		  ><p+		    >Doc for: data instance Bat Z</p+		    ></td+		  ></tr+		></table+	      ></div+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >class</span+	    > <a name="t:Test" class="def"+	    >Test</a+	    > a</p+	  ><div class="doc"+	  ><p+	    >Doc for: class Test a</p+	    ></div+	  ><div class="subs instances"+	  ><p id="control.i:Test" class="caption collapser" onclick="toggleSection('i:Test')"+	    >Instances</p+	    ><div id="section.i:Test" class="show"+	    ><table+	      ><tr+		><td class="src"+		  ><a href=""+		    >Test</a+		    > * <a href=""+		    >Y</a+		    ></td+		  ><td class="doc"+		  ><p+		    >Doc for: instance Test Y</p+		    ></td+		  ></tr+		><tr+		><td class="src"+		  ><a href=""+		    >Test</a+		    > * <a href=""+		    >X</a+		    ></td+		  ><td class="doc"+		  ><p+		    >Doc for: instance Test X</p+		    ></td+		  ></tr+		></table+	      ></div+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword" 	    >type family</span-	    > <a name="t:G" class="def"-	    >G</a+	    > <a name="t:Foo" class="def"+	    >Foo</a+	    > a :: k</p+	  ><div class="doc"+	  ><p+	    >Doc for: type family Foo a</p+	    ></div+	  ><div class="subs instances"+	  ><p id="control.i:Foo" class="caption collapser" onclick="toggleSection('i:Foo')"+	    >Instances</p+	    ><div id="section.i:Foo" class="show"+	    ><table+	      ><tr+		><td class="src"+		  ><span class="keyword"+		    >type</span+		    > <a href=""+		    >Foo</a+		    > * <a href=""+		    >Y</a+		    > = <a href=""+		    >X</a+		    ></td+		  ><td class="doc"+		  ><p+		    >Doc for: type instance Foo Y = X</p+		    ></td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >type</span+		    > <a href=""+		    >Foo</a+		    > * <a href=""+		    >X</a+		    > = <a href=""+		    >Y</a+		    ></td+		  ><td class="doc"+		  ><p+		    >Doc for: type instance Foo X = Y</p+		    ></td+		  ></tr+		></table+	      ></div+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >data family</span+	    > <a name="t:Bat" class="def"+	    >Bat</a 	    > a :: *</p 	  ><div class="doc" 	  ><p-	    >Type family G-</p+	    >Doc for: data family Bat a</p 	    ></div+	  ><div class="subs instances"+	  ><p id="control.i:Bat" class="caption collapser" onclick="toggleSection('i:Bat')"+	    >Instances</p+	    ><div id="section.i:Bat" class="show"+	    ><table+	      ><tr+		><td class="src"+		  ><span class="keyword"+		    >data</span+		    > <a href=""+		    >Bat</a+		    > <a href=""+		    >Z</a+		    > <span class="keyword"+		    >where</span+		    ><ul class="inst"+		    ><li class="inst"+		      ><a name="v:BatZ1" class="def"+			>BatZ1</a+			> ::  <a href=""+			>Z</a+			> -&gt; <a href=""+			>Bat</a+			> <a href=""+			>Z</a+			> <a href=""+			>ZA</a+			></li+		      ><li class="inst"+		      ><a name="v:BatZ2" class="def"+			>BatZ2</a+			> :: { <ul class="subs"+			><li+			  ><a name="v:batx" class="def"+			    >batx</a+			    > :: <a href=""+			    >X</a+			    ></li+			  ><li+			  ><a name="v:baty" class="def"+			    >baty</a+			    > :: <a href=""+			    >Y</a+			    ></li+			  ></ul+			> } -&gt; <a href=""+			>Bat</a+			> <a href=""+			>Z</a+			> <a href=""+			>ZB</a+			></li+		      ></ul+		    ></td+		  ><td class="doc"+		  ><p+		    >Doc for: data instance Bat Z</p+		    ></td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >data</span+		    > <a href=""+		    >Bat</a+		    > * <a href=""+		    >Y</a+		    > = <a name="v:BatY" class="def"+		    >BatY</a+		    > <a href=""+		    >Y</a+		    ></td+		  ><td class="doc"+		  ><p+		    >Doc for: data instance Bat Y</p+		    ></td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >data</span+		    > <a href=""+		    >Bat</a+		    > * <a href=""+		    >X</a+		    > <ul class="inst"+		    ><li class="inst"+		      >= <a name="v:BatX" class="def"+			>BatX</a+			> <a href=""+			>X</a+			></li+		      ><li class="inst"+		      >| <a name="v:BatXX" class="def"+			>BatXX</a+			> { <ul class="subs"+			><li+			  ><a name="v:aaa" class="def"+			    >aaa</a+			    > :: <a href=""+			    >X</a+			    ></li+			  ><li+			  ><a name="v:bbb" class="def"+			    >bbb</a+			    > :: <a href=""+			    >Y</a+			    ></li+			  ></ul+			> }</li+		      ></ul+		    ></td+		  ><td class="doc"+		  ><p+		    >Doc for: data instance Bat X</p+		    ></td+		  ></tr+		></table+	      ></div+	    ></div 	  ></div 	><div class="top" 	><p class="src" 	  ><span class="keyword" 	    >class</span-	    >  <a name="t:A" class="def"-	    >A</a-	    > a  <span class="keyword"-	    >where</span-	    ></p+	    > <a name="t:Assoc" class="def"+	    >Assoc</a+	    > a</p 	  ><div class="doc" 	  ><p-	    >A class with an associated type-</p+	    >Doc for: class Assoc a</p 	    ></div 	  ><div class="subs associated-types" 	  ><p class="caption"@@ -129,47 +859,53 @@ 	    ><p class="src" 	    ><span class="keyword" 	      >data</span-	      > <a name="t:B" class="def"-	      >B</a-	      > a :: * -&gt; *</p+	      > <a name="t:AssocD" class="def"+	      >AssocD</a+	      > a :: *</p 	    ><div class="doc" 	    ><p-	      >An associated type-</p+	      >Doc for: data AssocD a</p 	      ></div-	    ></div-	  ><div class="subs methods"-	  ><p class="caption"-	    >Methods</p 	    ><p class="src"-	    ><a name="v:f" class="def"-	      >f</a-	      > :: <a href=""-	      >B</a-	      > a <a href=""-	      >Int</a-	      ></p+	    ><span class="keyword"+	      >type</span+	      > <a name="t:AssocT" class="def"+	      >AssocT</a+	      > a :: *</p 	    ><div class="doc" 	    ><p-	      >A method-</p+	      >Doc for: type AssocT a</p 	      ></div 	    ></div 	  ><div class="subs instances"-	  ><p id="control.i:A" class="caption collapser" onclick="toggleSection('i:A')"+	  ><p id="control.i:Assoc" class="caption collapser" onclick="toggleSection('i:Assoc')" 	    >Instances</p-	    ><div id="section.i:A" class="show"+	    ><div id="section.i:Assoc" class="show" 	    ><table 	      ><tr 		><td class="src" 		  ><a href=""-		    >A</a-		    > <a href=""-		    >Int</a+		    >Assoc</a+		    > * <a href=""+		    >Y</a 		    ></td-		  ><td class="doc empty"-		  >&nbsp;</td+		  ><td class="doc"+		  ><p+		    >Doc for: instance Assoc Y</p+		    ></td 		  ></tr+		><tr+		><td class="src"+		  ><a href=""+		    >Assoc</a+		    > * <a href=""+		    >X</a+		    ></td+		  ><td class="doc"+		  ><p+		    >Doc for: instance Assoc X</p+		    ></td+		  ></tr 		></table 	      ></div 	    ></div@@ -178,34 +914,139 @@ 	><p class="src" 	  ><span class="keyword" 	    >type family</span-	    > <a name="t:F" class="def"-	    >F</a-	    > a </p+	    > <a name="t:Bar" class="def"+	    >Bar</a+	    > b</p 	  ><div class="doc" 	  ><p-	    >Doc for family-</p+	    >Doc for: type family Bar b</p 	    ></div+	  ><div class="subs equations"+	  ><p class="caption"+	    >Equations</p+	    ><table+	    ><tr+	      ><td class="src"+		><a href=""+		  >Bar</a+		  > <a href=""+		  >X</a+		  > = <a href=""+		  >X</a+		  ></td+		><td class="doc empty"+		>&nbsp;</td+		></tr+	      ><tr+	      ><td class="src"+		><a href=""+		  >Bar</a+		  > y = <a href=""+		  >Y</a+		  ></td+		><td class="doc empty"+		>&nbsp;</td+		></tr+	      ></table+	    ></div 	  ></div 	><div class="top" 	><p class="src"-	  ><a name="v:g" class="def"-	    >g</a-	    > :: <a href=""-	    >B</a-	    > <a href=""-	    >Int</a-	    > <a href=""-	    >Integer</a-	    ></p+	  ><span class="keyword"+	    >type family</span+	    > a <a name="t:-60--62-" class="def"+	    >&lt;&gt;</a+	    > b :: k</p+	  ><div class="subs instances"+	  ><p id="control.i:-60--62-" class="caption collapser" onclick="toggleSection('i:-60--62-')"+	    >Instances</p+	    ><div id="section.i:-60--62-" class="show"+	    ><table+	      ><tr+		><td class="src"+		  ><span class="keyword"+		    >type</span+		    > <a href=""+		    >(&lt;&gt;)</a+		    > * <a href=""+		    >Y</a+		    > a = a</td+		  ><td class="doc empty"+		  >&nbsp;</td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >type</span+		    > <a href=""+		    >(&lt;&gt;)</a+		    > * <a href=""+		    >X</a+		    > a = <a href=""+		    >X</a+		    ></td+		  ><td class="doc empty"+		  >&nbsp;</td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >type</span+		    > <a href=""+		    >(&lt;&gt;)</a+		    > <a href=""+		    >X</a+		    > <a href=""+		    >XXX</a+		    > <a href=""+		    >XX</a+		    > = <a href=""+		    >X</a+		    ></td+		  ><td class="doc empty"+		  >&nbsp;</td+		  ></tr+		></table+	      ></div+	    ></div 	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >class</span+	    > a <a name="t:-62--60-" class="def"+	    >&gt;&lt;</a+	    > b</p+	  ><div class="subs instances"+	  ><p id="control.i:-62--60-" class="caption collapser" onclick="toggleSection('i:-62--60-')"+	    >Instances</p+	    ><div id="section.i:-62--60-" class="show"+	    ><table+	      ><tr+		><td class="src"+		  ><a href=""+		    >(&gt;&lt;)</a+		    > <a href=""+		    >X</a+		    > <a href=""+		    >XX</a+		    > <a href=""+		    >XXX</a+		    ></td+		  ><td class="doc empty"+		  >&nbsp;</td+		  ></tr+		></table+	      ></div+	    ></div+	  ></div 	></div       ></div     ><div id="footer"     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
+ html-test/ref/TypeFamilies2.html view
@@ -0,0 +1,229 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"+     /><title+    >TypeFamilies2</title+    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"+     /><script src="haddock-util.js" type="text/javascript"+    ></script+    ><script type="text/javascript"+    >//<![CDATA[+window.onload = function () {pageLoad();setSynopsis("mini_TypeFamilies2.html");};+//]]>+</script+    ></head+  ><body+  ><div id="package-header"+    ><ul class="links" id="page-menu"+      ><li+	><a href=""+	  >Contents</a+	  ></li+	><li+	><a href=""+	  >Index</a+	  ></li+	></ul+      ><p class="caption empty"+      >&nbsp;</p+      ></div+    ><div id="content"+    ><div id="module-header"+      ><table class="info"+	><tr+	  ><th+	    >Safe Haskell</th+	    ><td+	    >Safe-Inferred</td+	    ></tr+	  ></table+	><p class="caption"+	>TypeFamilies2</p+	></div+      ><div id="synopsis"+      ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')"+	>Synopsis</p+	><ul id="section.syn" class="hide" onclick="toggleSection('syn')"+	><li class="src short"+	  ><span class="keyword"+	    >data</span+	    > <a href=""+	    >W</a+	    ></li+	  ><li class="src short"+	  ><span class="keyword"+	    >type family</span+	    > <a href=""+	    >Foo</a+	    > a</li+	  ><li class="src short"+	  ><span class="keyword"+	    >data family</span+	    > <a href=""+	    >Bar</a+	    > a</li+	  ></ul+	></div+      ><div id="interface"+      ><h1+	>Documentation</h1+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >data</span+	    > <a name="t:W" class="def"+	    >W</a+	    ></p+	  ><div class="doc"+	  ><p+	    >Exported type</p+	    ></div+	  ><div class="subs instances"+	  ><p id="control.i:W" class="caption collapser" onclick="toggleSection('i:W')"+	    >Instances</p+	    ><div id="section.i:W" class="show"+	    ><table+	      ><tr+		><td class="src"+		  ><span class="keyword"+		    >data</span+		    > <a href=""+		    >Bar</a+		    > <a href=""+		    >W</a+		    > = <a name="v:BarX" class="def"+		    >BarX</a+		    > Z</td+		  ><td class="doc"+		  ><p+		    >Shown because BarX is still exported despite Z being hidden</p+		    ></td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >type</span+		    > <a href=""+		    >Foo</a+		    > <a href=""+		    >W</a+		    ></td+		  ><td class="doc"+		  ><p+		    >Should be visible, but with a hidden right hand side</p+		    ></td+		  ></tr+		></table+	      ></div+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >type family</span+	    > <a name="t:Foo" class="def"+	    >Foo</a+	    > a</p+	  ><div class="doc"+	  ><p+	    >Exported type family</p+	    ></div+	  ><div class="subs instances"+	  ><p id="control.i:Foo" class="caption collapser" onclick="toggleSection('i:Foo')"+	    >Instances</p+	    ><div id="section.i:Foo" class="show"+	    ><table+	      ><tr+		><td class="src"+		  ><span class="keyword"+		    >type</span+		    > <a href=""+		    >Foo</a+		    > <a href=""+		    >W</a+		    ></td+		  ><td class="doc"+		  ><p+		    >Should be visible, but with a hidden right hand side</p+		    ></td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >type</span+		    > <a href=""+		    >Foo</a+		    > <a href=""+		    >X</a+		    > = <a href=""+		    >Y</a+		    ></td+		  ><td class="doc"+		  ><p+		    >External instance</p+		    ></td+		  ></tr+		></table+	      ></div+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >data family</span+	    > <a name="t:Bar" class="def"+	    >Bar</a+	    > a</p+	  ><div class="doc"+	  ><p+	    >Exported data family</p+	    ></div+	  ><div class="subs instances"+	  ><p id="control.i:Bar" class="caption collapser" onclick="toggleSection('i:Bar')"+	    >Instances</p+	    ><div id="section.i:Bar" class="show"+	    ><table+	      ><tr+		><td class="src"+		  ><span class="keyword"+		    >data</span+		    > <a href=""+		    >Bar</a+		    > <a href=""+		    >W</a+		    > = <a name="v:BarX" class="def"+		    >BarX</a+		    > Z</td+		  ><td class="doc"+		  ><p+		    >Shown because BarX is still exported despite Z being hidden</p+		    ></td+		  ></tr+		><tr+		><td class="src"+		  ><span class="keyword"+		    >data</span+		    > <a href=""+		    >Bar</a+		    > <a href=""+		    >Y</a+		    ></td+		  ><td class="doc empty"+		  >&nbsp;</td+		  ></tr+		></table+	      ></div+	    ></div+	  ></div+	></div+      ></div+    ><div id="footer"+    ><p+      >Produced by <a href=""+	>Haddock</a+	> version 2.14.1</p+      ></div+    ></body+  ></html+>
html-test/ref/TypeOperators.html view
@@ -35,102 +35,46 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption" 	>TypeOperators</p 	></div-      ><div id="table-of-contents"-      ><p class="caption"-	>Contents</p-	><ul-	><li-	  ><a href=""-	    >stuff-</a-	    ></li-	  ></ul-	></div-      ><div id="synopsis"-      ><p id="control.syn" class="caption expander" onclick="toggleSection('syn')"-	>Synopsis</p-	><ul id="section.syn" class="hide" onclick="toggleSection('syn')"-	><li class="src short"-	  ><span class="keyword"-	    >data</span-	    >  a <a href=""-	    >:-:</a-	    > b</li-	  ><li class="src short"-	  ><span class="keyword"-	    >data</span-	    >  (a <a href=""-	    >:+:</a-	    > b) c</li-	  ><li class="src short"-	  ><span class="keyword"-	    >data</span-	    >  <a href=""-	    >Op</a-	    > a b</li-	  ><li class="src short"-	  ><span class="keyword"-	    >newtype</span-	    >  <a href=""-	    >O</a-	    > g f a = <a href=""-	    >O</a-	    > {<ul class="subs"-	    ><li-	      ><a href=""-		>unO</a-		> :: g (f a)</li-	      ></ul-	    >}</li-	  ><li class="src short"-	  ><a href=""-	    >biO</a-	    > ::  (g `<a href=""-	    >O</a-	    >` f) a</li-	  ></ul-	></div       ><div id="interface"-      ><h1 id="g:1"-	>stuff-</h1+      ><h1+	>Documentation</h1 	><div class="top" 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  a <a name="t::-45-:" class="def"+	    > a <a name="t::-45-:" class="def" 	    >:-:</a-	    > b </p+	    > b</p 	  ></div 	><div class="top" 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  (a <a name="t::-43-:" class="def"+	    > (a <a name="t::-43-:" class="def" 	    >:+:</a-	    > b) c </p+	    > b) c</p 	  ></div 	><div class="top" 	><p class="src" 	  ><span class="keyword" 	    >data</span-	    >  <a name="t:Op" class="def"+	    > <a name="t:Op" class="def" 	    >Op</a-	    > a b </p+	    > a b</p 	  ></div 	><div class="top" 	><p class="src" 	  ><span class="keyword" 	    >newtype</span-	    >  <a name="t:O" class="def"+	    > <a name="t:O" class="def" 	    >O</a-	    > g f a </p+	    > g f a</p 	  ><div class="subs constructors" 	  ><p class="caption" 	    >Constructors</p@@ -166,19 +110,63 @@ 	  ></div 	><div class="top" 	><p class="src"+	  ><span class="keyword"+	    >class</span+	    > a <a name="t:-60--61--62-" class="def"+	    >&lt;=&gt;</a+	    > b</p+	  ></div+	><div class="top"+	><p class="src" 	  ><a name="v:biO" class="def" 	    >biO</a-	    > ::  (g `<a href=""-	    >O</a-	    >` f) a</p+	    > ::  (g <a href=""+	    >`O`</a+	    > f) a</p 	  ></div+	><div class="top"+	><p class="src"+	  ><a name="v:f" class="def"+	    >f</a+	    > :: (a ~ b) =&gt; a -&gt; b</p+	  ></div+	><div class="top"+	><p class="src"+	  ><a name="v:g" class="def"+	    >g</a+	    > :: (a ~ b, b ~ c) =&gt; a -&gt; c</p+	  ></div+	><div class="top"+	><p class="src"+	  ><a name="v:x" class="def"+	    >x</a+	    > :: (a <a href=""+	    >:-:</a+	    > a) <a href=""+	    >&lt;=&gt;</a+	    > (a <a href=""+	    >`Op`</a+	    > a) =&gt; a</p+	  ></div+	><div class="top"+	><p class="src"+	  ><a name="v:y" class="def"+	    >y</a+	    > :: (a <a href=""+	    >&lt;=&gt;</a+	    > a, (a <a href=""+	    >`Op`</a+	    > a) <a href=""+	    >&lt;=&gt;</a+	    > a) =&gt; a</p+	  ></div 	></div       ></div     ><div id="footer"     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/Unicode.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -65,8 +65,7 @@ 	    ></p 	  ><div class="doc" 	  ><p-	    >&#947;&#955;&#974;&#963;&#963;&#945;-</p+	    >&#947;&#955;&#974;&#963;&#963;&#945;</p 	    ></div 	  ></div 	></div@@ -75,7 +74,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/Visible.html view
@@ -35,7 +35,7 @@ 	  ><th 	    >Safe Haskell</th 	    ><td-	    >None</td+	    >Safe-Inferred</td 	    ></tr 	  ></table 	><p class="caption"@@ -60,7 +60,7 @@     ><p       >Produced by <a href="" 	>Haddock</a-	> version 2.13.2.1</p+	> version 2.14.1</p       ></div     ></body   ></html
html-test/ref/mini_BugExportHeadings.html view
@@ -20,8 +20,7 @@       ></div     ><div id="interface"     ><h1-      >Foo-</h1+      >Foo</h1       ><div class="top"       ><p class="src" 	><a href="" target="main"@@ -29,8 +28,7 @@ 	  ></p 	></div       ><h1-      >Bar-</h1+      >Bar</h1       ><div class="top"       ><p class="src" 	><a href="" target="main"@@ -38,8 +36,7 @@ 	  ></p 	></div       ><h1-      >Baz-</h1+      >Baz</h1       ><div class="top"       ><p class="src" 	><a href="" target="main"@@ -47,8 +44,7 @@ 	  ></p 	></div       ><h1-      >One-</h1+      >One</h1       ><div class="top"       ><p class="src" 	><a href="" target="main"@@ -56,8 +52,7 @@ 	  ></p 	></div       ><h1-      >Two-</h1+      >Two</h1       ><div class="top"       ><p class="src" 	><a href="" target="main"@@ -65,8 +60,7 @@ 	  ></p 	></div       ><h1-      >Three-</h1+      >Three</h1       ><div class="top"       ><p class="src" 	><a href="" target="main"
html-test/ref/mini_DeprecatedReExport.html view
@@ -20,8 +20,7 @@       ></div     ><div id="interface"     ><h1-      >Re-exported from an other module-</h1+      >Re-exported from an other module</h1       ><div class="top"       ><p class="src" 	><a href="" target="main"@@ -29,8 +28,7 @@ 	  ></p 	></div       ><h1-      >Re-exported from an other package-</h1+      >Re-exported from an other package</h1       ></div     ></body   ></html
− html-test/ref/mini_DeprecationMessageParseError.html
@@ -1,31 +0,0 @@-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">-<html xmlns="http://www.w3.org/1999/xhtml"-><head-  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"-     /><title-    >DeprecationMessageParseError</title-    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"-     /><script src="haddock-util.js" type="text/javascript"-    ></script-    ><script type="text/javascript"-    >//<![CDATA[-window.onload = function () {pageLoad();};-//]]>-</script-    ></head-  ><body id="mini"-  ><div id="module-header"-    ><p class="caption"-      >DeprecationMessageParseError</p-      ></div-    ><div id="interface"-    ><div class="top"-      ><p class="src"-	><a href="" target="main"-	  >foo</a-	  ></p-	></div-      ></div-    ></body-  ></html->
html-test/ref/mini_Hash.html view
@@ -22,8 +22,7 @@     ><h1       >The <code 	>HashTable</code-	> type-</h1+	> type</h1       ><div class="top"       ><p class="src" 	><span class="keyword"@@ -35,8 +34,7 @@       ><h2       >Operations on <code 	>HashTable</code-	>s-</h2+	>s</h2       ><div class="top"       ><p class="src" 	><a href="" target="main"@@ -58,8 +56,7 @@       ><h1       >The <code 	>Hash</code-	> class-</h1+	> class</h1       ><div class="top"       ><p class="src" 	><span class="keyword"
html-test/ref/mini_Test.html view
@@ -20,11 +20,9 @@       ></div     ><div id="interface"     ><h1-      >Type declarations-</h1+      >Type declarations</h1       ><h2-      >Data types-</h2+      >Data types</h2       ><div class="top"       ><p class="src" 	><span class="keyword"@@ -130,8 +128,7 @@ 	  > a b</p 	></div       ><h2-      >Records-</h2+      >Records</h2       ><div class="top"       ><p class="src" 	><span class="keyword"@@ -149,8 +146,7 @@ 	  > </p 	></div       ><h1-      >Class declarations-</h1+      >Class declarations</h1       ><div class="top"       ><p class="src" 	><span class="keyword"@@ -184,8 +180,7 @@ 	  > a</p 	></div       ><h1-      >Function types-</h1+      >Function types</h1       ><div class="top"       ><p class="src" 	><a href="" target="main"@@ -193,11 +188,9 @@ 	  ></p 	></div       ><h1-      >Auxiliary stuff-</h1+      >Auxiliary stuff</h1       ><h1-      >A hidden module-</h1+      >A hidden module</h1       ><div class="top"       ><p class="src" 	><a href="" target="main"@@ -205,11 +198,9 @@ 	  ></p 	></div       ><h1-      >A visible module-</h1+      >A visible module</h1       ><h1-      >Existential / Universal types-</h1+      >Existential / Universal types</h1       ><div class="top"       ><p class="src" 	><span class="keyword"@@ -219,8 +210,7 @@ 	  > a</p 	></div       ><h1-      >Type signatures with argument docs-</h1+      >Type signatures with argument docs</h1       ><div class="top"       ><p class="src" 	><a href="" target="main"@@ -240,11 +230,9 @@ 	  ></p 	></div       ><h1-      >A section-</h1+      >A section</h1       ><h2-      >A subsection -</h2+      >A subsection</h2       ><div class="top"       ><p class="src" 	><a href="" target="main"
+ html-test/ref/mini_Ticket253_1.html view
@@ -0,0 +1,31 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"+     /><title+    >Ticket253_1</title+    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"+     /><script src="haddock-util.js" type="text/javascript"+    ></script+    ><script type="text/javascript"+    >//<![CDATA[+window.onload = function () {pageLoad();};+//]]>+</script+    ></head+  ><body id="mini"+  ><div id="module-header"+    ><p class="caption"+      >Ticket253_1</p+      ></div+    ><div id="interface"+    ><div class="top"+      ><p class="src"+	><a href="" target="main"+	  >foo</a+	  ></p+	></div+      ></div+    ></body+  ></html+>
+ html-test/ref/mini_Ticket253_2.html view
@@ -0,0 +1,39 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"+     /><title+    >Ticket253_2</title+    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"+     /><script src="haddock-util.js" type="text/javascript"+    ></script+    ><script type="text/javascript"+    >//<![CDATA[+window.onload = function () {pageLoad();};+//]]>+</script+    ></head+  ><body id="mini"+  ><div id="module-header"+    ><p class="caption"+      >Ticket253_2</p+      ></div+    ><div id="interface"+    ><div class="top"+      ><p class="src"+	><a href="" target="main"+	  >bar</a+	  ></p+	></div+      ><div class="top"+      ><p class="src"+	><span class="keyword"+	  >data</span+	  > <a href="" target="main"+	  >Baz</a+	  > </p+	></div+      ></div+    ></body+  ></html+>
+ html-test/ref/mini_TitledPicture.html view
@@ -0,0 +1,37 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"+     /><title+    >TitledPicture</title+    ><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean"+     /><script src="haddock-util.js" type="text/javascript"+    ></script+    ><script type="text/javascript"+    >//<![CDATA[+window.onload = function () {pageLoad();};+//]]>+</script+    ></head+  ><body id="mini"+  ><div id="module-header"+    ><p class="caption"+      >TitledPicture</p+      ></div+    ><div id="interface"+    ><div class="top"+      ><p class="src"+	><a href="" target="main"+	  >foo</a+	  ></p+	></div+      ><div class="top"+      ><p class="src"+	><a href="" target="main"+	  >bar</a+	  ></p+	></div+      ></div+    ></body+  ></html+>
html-test/ref/mini_TypeOperators.html view
@@ -20,8 +20,7 @@       ></div     ><div id="interface"     ><h1-      >stuff-</h1+      >stuff</h1       ><div class="top"       ><p class="src" 	><span class="keyword"
html-test/run.lhs view
@@ -15,12 +15,11 @@ import Distribution.Simple.Utils import Distribution.Verbosity import System.IO-import System.Cmd import System.Directory import System.Environment import System.Exit import System.FilePath-import System.Process (ProcessHandle, runProcess, waitForProcess)+import System.Process (ProcessHandle, runProcess, waitForProcess, system)   packageRoot, dataDir, haddockPath, baseDir, testDir, outDir :: FilePath@@ -71,7 +70,7 @@    -- TODO: maybe do something more clever here using haddock.cabal   ghcPath <- fmap init $ rawSystemStdout normal haddockPath ["--print-ghc-path"]-  (_, conf) <- configure normal (Just ghcPath) Nothing defaultProgramConfiguration+  (_, _, conf) <- configure normal (Just ghcPath) Nothing defaultProgramConfiguration   pkgIndex <- getInstalledPackages normal [GlobalPackageDB] conf   let mkDep pkgName =         fromMaybe (error "Couldn't find test dependencies") $ do@@ -88,7 +87,7 @@    putStrLn "Running tests..."   handle <- runProcess haddockPath-                       (["-w", "-o", outDir, "-h", "--pretty-html", "--optghc=-fglasgow-exts"+                       (["-w", "-o", outDir, "-h", "--pretty-html"                         , "--optghc=-w", base, process, ghcprim] ++ opts ++ mods')                        Nothing env Nothing                        Nothing Nothing@@ -143,11 +142,25 @@ stripLinks str =   let prefix = "<a href=\"" in   case stripPrefix prefix str of-    Just str' -> prefix ++ stripLinks (dropWhile (/= '"') str')+    Just str' -> case dropWhile (/= '>') (dropWhile (/= '"') str') of+      [] -> []+      x:xs -> stripLinks (stripHrefEnd xs)     Nothing ->       case str of         [] -> []         x : xs -> x : stripLinks xs++stripHrefEnd :: String -> String+stripHrefEnd s =+  let pref = "</a" in+  case stripPrefix pref s of+    Just str' -> case dropWhile (/= '>') str' of+      [] -> []+      x:xs -> xs+    Nothing ->+      case s of+        [] -> []+        x : xs -> x : stripHrefEnd xs  programOnPath :: FilePath -> IO Bool programOnPath p = do
+ html-test/src/Bold.hs view
@@ -0,0 +1,9 @@+module Bold where+-- | Some __bold text__.+--+-- * __Bold__ in a list+--+-- [__bold in a definition__] list+--+-- @ bold __in__ a __code__ block @+foo = undefined
+ html-test/src/Bug195.hs view
@@ -0,0 +1,11 @@+module Bug195 where++data T = A { someField :: () -- ^ Doc for someField of A+           , someOtherField :: () -- ^ Doc for someOtherField of A+           }+       | B { someField :: () -- ^ Doc for someField of B+           , someOtherField :: () -- ^ Doc for someOtherField of B+           }+       | C { someField :: () -- ^ Doc for someField of C+           , someOtherField :: () -- ^ Doc for someOtherField of C+           }
html-test/src/Bug7.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE MultiParamTypeClasses #-} -- | This module caused a duplicate instance in the documentation for the Foo -- type. module Bug7  where
html-test/src/Bug8.hs view
@@ -3,10 +3,10 @@ infix --> infix ---> -data Typ = Type (String,[Typ])-         | TFree (String, [String])+data Typ = Type (Typ,[Typ])+         | TFree (Typ, [Typ]) -x --> y = Type("fun",[s,t])+x --> y = Type(s,[s,t]) (--->) = flip $ foldr (-->)  s = undefined
− html-test/src/CrossPackageDocs.hs
@@ -1,4 +0,0 @@-module CrossPackageDocs (map, IsString(..), runInteractiveProcess) where--import System.Process-import Data.String
− html-test/src/DeprecationMessageParseError.hs
@@ -1,12 +0,0 @@--- |--- What is tested here:------ * If parsing of a deprecation message fails, the message is included---   verbatim.----module DeprecationMessageParseError where---- | some documentation for foo-foo :: Int-foo = 23-{-# DEPRECATED foo "use @bar instead" #-}
+ html-test/src/Extensions.hs view
@@ -0,0 +1,7 @@+{-# LANGUAGE Haskell2010, ExplicitForAll, MonomorphismRestriction #-}+{-# OPTIONS_HADDOCK show-extensions #-}+module Extensions where++-- | Bar+foobar :: t+foobar = undefined
html-test/src/FunArgs.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE ExplicitForAll #-} module FunArgs where  f :: forall a. Ord a
html-test/src/GADTRecords.hs view
@@ -5,8 +5,7 @@ data H1 a b where   C1 :: H1 a b   C2 :: Ord a => [a] -> H1 a a-  C3 { field :: Int -- ^ hello docs-     } :: H1 Int Int-  C4 { field2 :: a -- ^ hello2 docs-     } :: H1 Int a-+  C3 :: { field :: Int -- ^ hello docs+        } -> H1 Int Int+  C4 :: { field2 :: a -- ^ hello2 docs+        } -> H1 Int a
+ html-test/src/ImplicitParams.hs view
@@ -0,0 +1,13 @@+{-# LANGUAGE ImplicitParams, RankNTypes #-}+module ImplicitParams where++data X = X++c :: (?x :: X) => X+c = ?x++d :: (?x :: X, ?y :: X) => (X, X)+d = (?x, ?y)++f :: ((?x :: X) => a) -> a+f a = let ?x = X in a
+ html-test/src/Minimal.hs view
@@ -0,0 +1,40 @@+-- | This tests the new MINIMAL pragma present in GHC 7.8+module Minimal+  ( Foo(..)+  , Weird(..)+  , NoMins(..)+  , FullMin(..)+  , PartialMin(ccc)+  , EmptyMin(..)+  ) where++class Foo a where+  -- | Any two of these are required...+  foo, bar, bat :: a++  -- | .. or just this+  fooBarBat :: (a,a,a)++  {-# MINIMAL (foo, bar) | (bar, bat) | (foo, bat) | fooBarBat #-}++class Weird a where+  a,b,c,d,e,f,g :: a++  {-# MINIMAL ((a, b), c | (d | (e, (f | g)))) #-}++class NoMins a where+  x,y,z :: a++  -- | Has a default implementation!+  z = x++class FullMin a where+  aaa,bbb :: a++class PartialMin a where+  ccc,ddd :: a++class EmptyMin a where+  eee,fff :: a+  eee = fff+  fff = undefined
+ html-test/src/Nesting.hs view
@@ -0,0 +1,121 @@+module Nesting where++{-|+* We can++    * easily go back++        1. some indentation++    * levels++1. @back at the top@++-}+d :: t+d = undefined+++{-|+* Beginning of list++    * second list++        * Some indented list but+the presence of this text pushes it out of nesting back to the top.+-}+e :: t+e = undefined+++{-|+* Beginning of list++    @+    nested code+        we preserve the space correctly+    @+-}+f :: t+f = undefined+++{-|+* Beginning of list++    * Nested list+-}+g :: t+g = undefined++{-|+* Beginning of list++    > nested+    > bird+    > tracks+-}+h :: t+h = undefined++{-|+* Beginning of list+This belongs to the list above!++    > nested+    > bird+    > tracks+    >+    > another line+    >   with indentation++    >nested bird tracks+    >  without leading space++    * Next list+    More of the indented list.++        * Deeper++            * Deeper++                    * Even deeper!+                    * No newline separation even in indented lists.+-}+i :: t+i = undefined++++{-|+[All this] Works for+definition lists too.++    > nested+    > bird+    > tracks++    * Next list+    with more of the indented list content.++        Even more content on a new line.++        1. Different type of list++            (2) Deeper++            >>> Here's an example in a list+            example result++                    [b] Even deeper!+                    [c] No newline separation even in indented lists.+                    We can have any paragraph level element that we normally+                    can, like headers++                    === Level 3 header+                    with some content…++                    * and even more lists inside+-}+j :: t+j = undefined
+ html-test/src/Operators.hs view
@@ -0,0 +1,64 @@+{-# LANGUAGE PatternSynonyms, TypeOperators, TypeFamilies, MultiParamTypeClasses, GADTs #-}+-- | Test operators with or without fixity declarations+module Operators where++-- | Operator with no fixity+(+-) :: a -> a -> a+a +- _ = a++-- | Operator with infixr 7+(*/) :: a -> a -> a+_ */ b = b+infixr 7 */++-- | Named function with infixl 3+foo :: a -> a -> a+foo a _ = a+infixl 3 `foo`++-- | Data type with operator constructors+data Foo+  = Foo `Bar` Foo -- ^ Has infixl 3+  | Foo :- Foo  -- ^ Has infixr 5+infixr 5 :-+infixl 3 `Bar`++-- | Pattern synonym, infixr 3+pattern (:+) a b <- [a,b]+infixr 3 :+++-- | Type name, infixl 6 and GADT constructor+data (a <-> b) where+  (:<->) :: a -> b -> a <-> b+infixl 6 <->+infixr 6 :<->++-- | Type family with fixity+type family a ++ b+infix 3 ++++-- | Data family with fixity+data family a ** b+infix 9 **++-- | Class with fixity, including associated types+class a ><> b where+  type a <>< b :: *+  data a ><< b+  (>><), (<<>) :: a -> b -> ()++  -- | Multiple fixities+  (**>), (**<), (>**), (<**) :: a -> a -> ()++infixr 1 ><>+infixl 2 <><+infixl 3 ><<+infixr 4 >><+infixl 5 <<>++infixr 8 **>, >**+infixl 8 **<, <**++-- | Type synonym with fixity+type (a >-< b) = a <-> b+infixl 6 >-<
+ html-test/src/PatternSyns.hs view
@@ -0,0 +1,22 @@+{-# LANGUAGE PatternSynonyms, PolyKinds, TypeOperators #-}++-- | Testing some pattern synonyms+module PatternSyns where++-- | FooType doc+data FooType x = FooCtor x++-- | Pattern synonym for 'Foo' x+pattern Foo x = FooCtor x++-- | Pattern synonym for 'Bar' x+pattern Bar x = FooCtor (Foo x)++-- | Pattern synonym for (':<->')+pattern x :<-> y = (Foo x, Bar y)++-- | Doc for ('><')+data (a :: *) >< b = Empty++-- | Pattern for 'Empty'+pattern E = Empty
html-test/src/Test.hs view
@@ -3,7 +3,7 @@ -- Module      :  Test -- Copyright   :  (c) Simon Marlow 2002 -- License     :  BSD-style--- +-- -- Maintainer  :  libraries@haskell.org -- Stability   :  provisional -- Portability :  portable@@ -14,8 +14,8 @@ -----------------------------------------------------------------------------  -- This is plain comment, ignored by Haddock.--module Test ( +{-# LANGUAGE Rank2Types, GADTs #-}+module Test (  	-- Section headings are introduced with '-- *': 	-- * Type declarations@@ -33,7 +33,7 @@  	-- * Class declarations 	C(a,b), D(..), E, F(..),-	+ 	-- | Test that we can export a class method on its own: 	a, @@ -88,7 +88,7 @@  	-- * A section 	-- and without an intervening comma:-	-- ** A subsection +	-- ** A subsection  {-|  > a literal line@@ -112,7 +112,7 @@ data T a b  = A Int (Maybe Float) -- ^ This comment describes the 'A' constructor  | -- | This comment describes the 'B' constructor-   B (T a b, T Int Float) -- ^ +   B (T a b, T Int Float) -- ^  -- | An abstract data declaration data T2 a b = T2 a b@@ -145,7 +145,7 @@ newtype N2 a b = N2 {n :: a b}  -- | A newtype with a fieldname, documentation on the field-newtype N3 a b = N3 {n3 :: a b -- ^ this is the 'n3' field +newtype N3 a b = N3 {n3 :: a b -- ^ this is the 'n3' field 		    }  -- | An abstract newtype - we show this one as data rather than newtype because@@ -163,14 +163,15 @@ newtype N7 a b = N7 {n7 :: a b 		    } 		-- ^ The 'N7' constructor-		  + class (D a) => C a  where    -- |this is a description of the 'a' method    a :: IO a    b :: [a]    -- ^ this is a description of the 'b' method    c :: a -- c is hidden in the export list+   c = undefined  -- ^ This comment applies to the /previous/ declaration (the 'C' class) @@ -198,7 +199,7 @@  -- | This is the documentation for the 'R' record, which has four fields, -- 'p', 'q', 'r', and 's'.-data R = +data R =   -- | This is the 'C1' record constructor, with the following fields:   C1 { p :: Int -- ^ This comment applies to the 'p' field      , q :: forall a . a->a  -- ^ This comment applies to the 'q' field@@ -211,15 +212,15 @@   -- ^ This is the 'C2' record constructor, also with some fields:  -- | Testing different record commenting styles-data R1 +data R1   -- | This is the 'C3' record constructor-  = C3 { +  = C3 { 	-- | The 's1' record selector 	  s1 :: Int 	-- | The 's2' record selector 	, s2 :: Int 	, s3 :: Int  -- NOTE: In the original examples/Test.hs in Haddock, there is an extra "," here.-                     -- Since GHC doesn't allow that, I have removed it in this file. +                     -- Since GHC doesn't allow that, I have removed it in this file. 	-- ^ The 's3' record selector      } @@ -240,11 +241,11 @@    - This is the next item (different kind of bullet)     (1) This is an ordered list- +    2. This is the next item (different kind of bullet)-   +    [cat] a small, furry, domesticated mammal-   +    [pineapple] a fruit grown in the tropics  @@@ -350,15 +351,15 @@  -- $aux12 -- > foo--- +-- -- > bar--- +--  -- | A data-type using existential\/universal types-data Ex a +data Ex a   = forall b . C b => Ex1 b   | forall b . Ex2 b-  | forall b . C a => Ex3 b -- NOTE: I have added "forall b" here make GHC accept this file +  | forall b . C a => Ex3 b -- NOTE: I have added "forall b" here make GHC accept this file   | Ex4 (forall a . a -> a)  -- | This is a function with documentation for each argument@@ -374,7 +375,7 @@ l :: (Int, Int, Float) -- ^ takes a triple   -> Int -- ^ returns an 'Int' --- | This function has some arg docs +-- | This function has some arg docs m :: R   -> N1 ()	-- ^ one of the arguments   -> IO Int	-- ^ and the return value@@ -385,22 +386,22 @@ newn :: R		-- ^ one of the arguments, an 'R'      -> N1 ()		-- ^ one of the arguments      -> IO Int-newn = undefined +newn = undefined   -- | A foreign import with argument docs-foreign import ccall unsafe +foreign import ccall unsafe  o :: Float  -- ^ The input float    -> IO Float  -- ^ The output float  -- | We should be able to escape this: \#\#\# --- p :: Int +-- p :: Int -- can't use the above original definition with GHC-newp :: Int  +newp :: Int newp = undefined --- | a function with a prime can be referred to as 'f'' +-- | a function with a prime can be referred to as 'f'' -- but f' doesn't get link'd 'f\'' f' :: Int @@ -416,7 +417,7 @@ data T1 f = undefined f' = undefined-type CInt = Int  +type CInt = Int k = undefined l = undefined m = undefined
+ html-test/src/Ticket253_1.hs view
@@ -0,0 +1,6 @@+module Ticket253_1 where+-- | See 'Ticket253_2.bar'.+--+-- Also see 'Ticket253_2.Baz'+foo :: Int+foo = 0
+ html-test/src/Ticket253_2.hs view
@@ -0,0 +1,6 @@+module Ticket253_2 where+-- | Comment+bar :: Int+bar = 0++data Baz = Baz
html-test/src/Ticket75.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE TypeOperators #-} module Ticket75 where  data a :- b = Q
+ html-test/src/TitledPicture.hs view
@@ -0,0 +1,7 @@+module TitledPicture where++-- | Picture for 'foo' without a title <<bar>>+foo = 5++-- | Picture for 'bar' with title <<un∣∁∘ δ∈>>+bar = 6
html-test/src/TypeFamilies.hs view
@@ -1,28 +1,92 @@-{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeFamilies, UndecidableInstances, PolyKinds, TypeOperators, DataKinds, MultiParamTypeClasses, GADTs #-} +-- | Doc for: module TypeFamilies module TypeFamilies where --- | Type family G-type family G a :: *+import qualified TypeFamilies2 as TF --- | A class with an associated type-class A a where-  -- | An associated type-  data B a :: * -> *-  -- | A method-  f :: B a Int+-- | Doc for: data X+data X+  = X   -- ^ Doc for: X+  | XX  -- ^ Doc for: XX+  | XXX -- ^ Doc for: XXX --- | Doc for family-type family F a+-- | Doc for: data Y+data Y +-- | Doc for: data Z+data Z = ZA | ZB --- | Doc for G Int-type instance G Int = Bool-type instance G Float = Int+-- | Doc for: class Test a+class Test a +-- | Doc for: instance Test X+instance Test X+-- | Doc for: instance Test Y+instance Test Y -instance A Int where-  data B Int x = Con x-  f = Con 3+-- | Doc for: type family Foo a+type family Foo a :: k -g = Con 5+-- | Doc for: type instance Foo X = Y+type instance Foo X = Y+-- | Doc for: type instance Foo Y = X+type instance Foo Y = X++-- | Doc for: data family Bat a+data family Bat (a :: k) :: *++-- | Doc for: data instance Bat X+data instance Bat X+  = BatX X -- ^ Doc for: BatX X+  | BatXX { aaa :: X , bbb :: Y } -- ^ Doc for: BatXX { ... }++-- | Doc for: data instance Bat Y+data instance Bat Y = BatY Y -- ^ Doc for: BatY Y++-- | Doc for: data instance Bat Z+data instance Bat (z :: Z) where+  BatZ1 :: Z -> Bat ZA+  BatZ2 :: { batx :: X, baty :: Y } -> Bat ZB++-- | Doc for: class Assoc a+class Assoc a where+  -- | Doc for: data AssocD a+  data AssocD a :: *+  -- | Doc for: type AssocT a+  type AssocT a :: *++-- | Doc for: instance Assoc X+instance Assoc X where+  -- | Doc for: data AssocD X = AssocX+  data AssocD X = AssocX -- ^ Doc for: AssocX+  -- | Doc for: type AssocT X = Foo X+  type AssocT X = Foo X++-- | Doc for: instance Assoc Y+instance Assoc Y where+  -- | Doc for: data AssocD Y = AssocY+  data AssocD Y = AssocY -- ^ Doc for: AssocY+  -- | Doc for: type AssocT Y = Bat Y+  type AssocT Y = Bat Y++-- | Doc for: type family Bar b+type family Bar b where+  Bar X = X+  Bar y = Y++type family (<>) (a :: k) (b :: k) :: k++type instance X <> a = X+type instance Y <> a = a++type instance XXX <> XX = 'X++class (><) (a :: k) (b :: k)+instance XX >< XXX++-- | External instance++type instance TF.Foo X = Y++data instance TF.Bar Y
+ html-test/src/TypeFamilies2.hs view
@@ -0,0 +1,39 @@+{-# LANGUAGE TypeFamilies #-}+-- This tests what happens if we have unexported types+-- in type instances. The expected behaviour is+-- that we get the instance, Y is not linked and+-- Haddock shows a linking warning.+--+-- The other families and instances that are not exported should not+-- show up at all+module TypeFamilies2 (W, Foo, Bar) where++-- | Exported type+data W++-- | Hidden type+data Z++-- | Exported type family+type family Foo a++-- | Should be visible, but with a hidden right hand side+type instance Foo W = Z++-- | Should be hidden+type instance Foo Z = W++-- | Exported data family+data family Bar a++-- | Shown because BarX is still exported despite Z being hidden+data instance Bar W = BarX Z++-- | Should be completely invisible, including instances+type family Invisible a+type instance Invisible W = Z+type instance Invisible Z = W++data family Invisible2 a+data instance Invisible2 W = Invis  Z+data instance Invisible2 Z = Invis' W
html-test/src/TypeOperators.hs view
@@ -1,12 +1,5 @@-{-# LANGUAGE TypeOperators #-}-module TypeOperators (-  -- * stuff-  (:-:),-  (:+:),-  Op,-  O(..),-  biO,-) where+{-# LANGUAGE TypeOperators, GADTs, MultiParamTypeClasses, FlexibleContexts #-}+module TypeOperators where  data a :-: b @@ -16,5 +9,19 @@  newtype (g `O` f) a = O { unO :: g (f a) } +class a <=> b+ biO :: (g `O` f) a biO = undefined++f :: (a ~ b) => a -> b+f = id++g :: (a ~ b, b ~ c) => a -> c+g = id++x :: ((a :-: a) <=> (a `Op` a)) => a+x = undefined++y :: (a <=> a, (a `Op` a) <=> a) => a+y = undefined
+ html-test/src/Unicode.hs view
@@ -0,0 +1,6 @@+module Unicode where++-- | γλώσσα+x :: Int+x = 1+
+ latex-test/ref/Simple/Simple.tex view
@@ -0,0 +1,17 @@+\haddockmoduleheading{Simple}+\label{module:Simple}+\haddockbeginheader+{\haddockverb\begin{verbatim}+module Simple (+    foo+  ) where\end{verbatim}}+\haddockendheader++\begin{haddockdesc}+\item[\begin{tabular}{@{}l}+foo\ ::\ t+\end{tabular}]\haddockbegindoc+This is foo.+\par++\end{haddockdesc}
+ latex-test/ref/Simple/haddock.sty view
@@ -0,0 +1,57 @@+% Default Haddock style definitions.  To use your own style, invoke+% Haddock with the option --latex-style=mystyle.++\usepackage{tabulary} % see below++% make hyperlinks in the PDF, and add an expandabale index+\usepackage[pdftex,bookmarks=true]{hyperref}++\newenvironment{haddocktitle}+  {\begin{center}\bgroup\large\bfseries}+  {\egroup\end{center}}+\newenvironment{haddockprologue}{\vspace{1in}}{}++\newcommand{\haddockmoduleheading}[1]{\chapter{\texttt{#1}}}++\newcommand{\haddockbeginheader}{\hrulefill}+\newcommand{\haddockendheader}{\noindent\hrulefill}++% a little gap before the ``Methods'' header+\newcommand{\haddockpremethods}{\vspace{2ex}}++% inserted before \\begin{verbatim}+\newcommand{\haddockverb}{\small}++% an identifier: add an index entry+\newcommand{\haddockid}[1]{\haddocktt{#1}\index{#1@\texttt{#1}}}++% The tabulary environment lets us have a column that takes up ``the+% rest of the space''.  Unfortunately it doesn't allow+% the \end{tabulary} to be in the expansion of a macro, it must appear+% literally in the document text, so Haddock inserts+% the \end{tabulary} itself.+\newcommand{\haddockbeginconstrs}{\begin{tabulary}{\linewidth}{@{}llJ@{}}}+\newcommand{\haddockbeginargs}{\begin{tabulary}{\linewidth}{@{}llJ@{}}}++\newcommand{\haddocktt}[1]{{\small \texttt{#1}}}+\newcommand{\haddockdecltt}[1]{{\small\bfseries \texttt{#1}}}++\makeatletter+\newenvironment{haddockdesc}+               {\list{}{\labelwidth\z@ \itemindent-\leftmargin+                        \let\makelabel\haddocklabel}}+               {\endlist}+\newcommand*\haddocklabel[1]{\hspace\labelsep\haddockdecltt{#1}}+\makeatother++% after a declaration, start a new line for the documentation.+% Otherwise, the documentation starts right after the declaration,+% because we're using the list environment and the declaration is the+% ``label''.  I tried making this newline part of the label, but+% couldn't get that to work reliably (the space seemed to stretch+% sometimes).+\newcommand{\haddockbegindoc}{\hfill\\[1ex]}++% spacing between paragraphs and no \parindent looks better+\parskip=10pt plus2pt minus2pt+\setlength{\parindent}{0cm}
+ latex-test/ref/Simple/main.tex view
@@ -0,0 +1,11 @@+\documentclass{book}+\usepackage{haddock}+\begin{document}+\begin{titlepage}+\begin{haddocktitle}++\end{haddocktitle}+\end{titlepage}+\tableofcontents+\input{Simple}+\end{document}
+ latex-test/run.lhs view
@@ -0,0 +1,162 @@+#!/usr/bin/env runhaskell+\begin{code}+{-# LANGUAGE CPP #-}+import Prelude hiding (mod)+import Control.Monad+import Control.Applicative+import Data.List+import Data.Maybe+import Distribution.InstalledPackageInfo+import Distribution.Package (PackageName (..))+import Distribution.Simple.Compiler+import Distribution.Simple.GHC+import Distribution.Simple.PackageIndex+import Distribution.Simple.Program+import Distribution.Simple.Utils+import Distribution.Verbosity+import System.IO+import System.Directory+import System.Environment+import System.Exit+import System.FilePath+import System.Process (ProcessHandle, runProcess, waitForProcess, system)+++packageRoot, dataDir, haddockPath, baseDir, testDir, outDir, refDir :: FilePath+baseDir = takeDirectory __FILE__+testDir       = baseDir </> "src"+refDir        = baseDir </> "ref"+outDir        = baseDir </> "out"+packageRoot   = baseDir </> ".."+dataDir       = packageRoot </> "resources"+haddockPath   = packageRoot </> "dist" </> "build" </> "haddock" </> "haddock"+++main :: IO ()+main = do+  test+  putStrLn "All tests passed!"+++test :: IO ()+test = do+  x <- doesFileExist haddockPath+  unless x $ die "you need to run 'cabal build' successfully first"++  contents <- getDirectoryContents testDir++  args <- getArgs+  let (opts, spec) = span ("-" `isPrefixOf`) args+      isDir x' = liftM2 (&&) (doesDirectoryExist $ testDir </> x')+                             (return $ x' /= "." && x' /= "..")+  modDirs <- case spec of+    y:_ | y /= "all" -> return [y]+    _ -> filterM isDir contents++  let modDirs' = map (testDir </>) modDirs++  -- add haddock_datadir to environment for subprocesses+  env <- Just . (:) ("haddock_datadir", dataDir) <$> getEnvironment++  putStrLn ""+  putStrLn "Haddock version: "+  h1 <- runProcess haddockPath ["--version"] Nothing+                   env Nothing Nothing Nothing+  wait h1 "*** Running `haddock --version' failed!"+  putStrLn ""+  putStrLn "GHC version: "+  h2 <- runProcess haddockPath ["--ghc-version"] Nothing+                   env Nothing Nothing Nothing+  wait h2 "*** Running `haddock --ghc-version' failed!"+  putStrLn ""++  -- TODO: maybe do something more clever here using haddock.cabal+  ghcPath <- fmap init $ rawSystemStdout normal haddockPath ["--print-ghc-path"]+  (_, _, conf) <- configure normal (Just ghcPath) Nothing defaultProgramConfiguration+  pkgIndex <- getInstalledPackages normal [GlobalPackageDB] conf+  let mkDep pkgName =+        fromMaybe (error "Couldn't find test dependencies") $ do+          let pkgs = lookupPackageName pkgIndex (PackageName pkgName)+          (_, pkgs') <- listToMaybe pkgs+          pkg <- listToMaybe pkgs'+          ifacePath <- listToMaybe (haddockInterfaces pkg)+          htmlPath <- listToMaybe (haddockHTMLs pkg)+          return ("-i " ++ htmlPath ++ "," ++ ifacePath)++  let base    = mkDep "base"+      process = mkDep "process"+      ghcprim = mkDep "ghc-prim"++  putStrLn "Running tests..."++  forM_ modDirs' $ \modDir -> do+    testModules <- getDirectoryContents modDir++    let mods = filter ((==) ".hs" . takeExtension) testModules+        mods' = map (modDir </>) mods++    unless (null mods') $ do+      handle <- runProcess haddockPath+                (["-w", "-o", outDir </> last (splitPath modDir), "--latex"+                 , "--optghc=-fglasgow-exts"+                 , "--optghc=-w", base, process, ghcprim] ++ opts ++ mods')+                Nothing env Nothing+                Nothing Nothing++      wait handle "*** Haddock run failed! Exiting."++  check modDirs (if not (null args) && args !! 0 == "all" then False else True)+  where+    wait :: ProcessHandle -> String -> IO ()+    wait h msg = do+      r <- waitForProcess h+      unless (r == ExitSuccess) $ do+        hPutStrLn stderr msg+        exitFailure++check :: [FilePath] -> Bool -> IO ()+check modDirs strict = do+  forM_ modDirs $ \modDir -> do+    let oDir = outDir </> modDir+        rDir = refDir </> modDir++    refDirExists <- doesDirectoryExist rDir+    when refDirExists $ do+      -- we're not creating sub-directories, I think.+      refFiles <- getDirectoryContents rDir >>= filterM doesFileExist++      forM_ refFiles $ \rFile -> do+        let refFile = rDir </> rFile+            outFile = oDir </> rFile+        oe <- doesFileExist outFile+        if oe+          then do+            out <- readFile outFile+            ref <- readFile refFile++            if out /= ref+               then do+                 putStrLn $ "Output for " ++ modDir ++ " has changed! Exiting with diff:"++                 let reffile' = outDir </> takeFileName refFile ++ ".nolinks"+                     outfile' = outDir </> takeFileName outFile ++ ".ref.nolinks"+                 writeFile reffile' ref+                 writeFile outfile' out+                 r <- programOnPath "colordiff"+                 code <- if r+                   then system $ "colordiff " ++ reffile' ++ " " ++ outfile'+                   else system $ "diff " ++ reffile' ++ " " ++ outfile'+                 if strict then exitFailure else return ()+                 unless (code == ExitSuccess) $ do+                   hPutStrLn stderr "*** Running diff failed!"+                   exitFailure+               else do+                 putStrLn $ "Pass: " ++ modDir+           else do+             putStrLn $ "Pass: " ++ modDir ++ " (no .ref file)"++programOnPath :: FilePath -> IO Bool+programOnPath p = do+  result <- findProgramLocation silent p+  return (isJust result)+\end{code}
+ latex-test/src/Simple/Simple.hs view
@@ -0,0 +1,5 @@+module Simple (foo) where++-- | This is foo.+foo :: t+foo = undefined
resources/html/Classic.theme/xhaddock.css view
@@ -3,7 +3,13 @@ 	padding: 0; } -body { +.extension-list {+    list-style-type: none;+    margin-left: 0;+    padding-left: 0;+}++body {   	background-color: #ffffff;   	color: #000000;   	font-size: 100%;@@ -53,7 +59,7 @@ 	margin-bottom: 0.5em; } -p  { +p  { 	padding-top: 2px; 	padding-left: 10px; }@@ -64,7 +70,7 @@ 	margin-left: 2.5em; } -pre  { +pre  { 	padding-top: 2px; 	padding-left: 20px; }@@ -209,7 +215,7 @@ #index .caption {   padding-top: 15px;   font-weight: bold;-  font-size: 150%	+  font-size: 150% }  #synopsis {@@ -357,7 +363,7 @@ 	margin-bottom: 0; } p.arg span {-  background-color: #f0f0f0; +  background-color: #f0f0f0;   font-family: monospace;   white-space: nowrap; 	float: none;@@ -365,7 +371,7 @@   img.coll {-	width : 0.75em; height: 0.75em; margin-bottom: 0; margin-right: 0.5em +	width : 0.75em; height: 0.75em; margin-bottom: 0; margin-right: 0.5em }  @@ -387,7 +393,7 @@   color: #ffffff;   padding: 4px   }-  + #footer p { 	padding: 1px; 	margin: 0;
resources/html/Ocean.std-theme/ocean.css view
@@ -49,14 +49,14 @@    For reasons, see:       http://yui.yahooapis.com/3.1.1/build/cssfonts/fonts.css  */- + body { 	font:13px/1.4 sans-serif; 	*font-size:small; /* for IE */ 	*font:x-small; /* for IE in quirks mode */ } -h1 { font-size: 146.5%; /* 19pt */ } +h1 { font-size: 146.5%; /* 19pt */ } h2 { font-size: 131%;   /* 17pt */ } h3 { font-size: 116%;   /* 15pt */ } h4 { font-size: 100%;   /* 13pt */ }@@ -98,7 +98,7 @@  /* @group Common */ -.caption, h1, h2, h3, h4, h5, h6 { +.caption, h1, h2, h3, h4, h5, h6 {   font-weight: bold;   color: rgb(78,98,114);   margin: 0.8em 0 0.4em;@@ -122,7 +122,7 @@  ul.links li {   display: inline;-  border-left: 1px solid #d5d5d5; +  border-left: 1px solid #d5d5d5;   white-space: nowrap;   padding: 0; }@@ -378,6 +378,19 @@   margin: 0 -0.5em 0 0.5em; } +#interface span.fixity {+  color: #919191;+  border-left: 1px solid #919191;+  padding: 0.2em 0.5em 0.2em 0.5em;+  margin: 0 -1em 0 1em;+}++#interface span.rightedge {+  border-left: 1px solid #919191;+  padding: 0.2em 0 0.2em 0;+  margin: 0 0 0 1em;+}+ #interface table { border-spacing: 2px; } #interface td {   vertical-align: top;@@ -420,6 +433,18 @@   margin: 0; } +/* Render short-style data instances */+.inst ul {+  height: 100%;+  padding: 0.5em;+  margin: 0;+}++.inst, .inst li {+  list-style: none;+  margin-left: 1em;+}+ .top p.src {   border-top: 1px solid #ccc; }@@ -457,13 +482,19 @@  /* @group Auxillary Pages */ ++.extension-list {+    list-style-type: none;+    margin-left: 0;+}+ #mini {   margin: 0 auto;   padding: 0 1em 1em; }  #mini > * {-  font-size: 93%; /* 12pt */  +  font-size: 93%; /* 12pt */ }  #mini #module-list .caption,
src/Haddock.hs view
@@ -23,8 +23,7 @@ import Haddock.Backends.LaTeX import Haddock.Backends.Hoogle import Haddock.Interface-import Haddock.Lex-import Haddock.Parse+import Haddock.Parser import Haddock.Types import Haddock.Version import Haddock.InterfaceFile@@ -34,12 +33,14 @@  import Control.Monad hiding (forM_) import Data.Foldable (forM_)+import Data.List (isPrefixOf) import Control.Exception import Data.Maybe import Data.IORef import qualified Data.Map as Map import System.IO import System.Exit+import System.Directory  #if defined(mingw32_HOST_OS) import Foreign@@ -54,11 +55,11 @@ import Paths_haddock #endif -import GHC hiding (flags, verbosity)+import GHC hiding (verbosity) import Config-import DynFlags hiding (flags, verbosity)-import StaticFlags (saveStaticFlagGlobals, restoreStaticFlagGlobals)-import Panic (panic, handleGhcException)+import DynFlags hiding (verbosity)+import StaticFlags (discardStaticFlags)+import Panic (handleGhcException) import Module  --------------------------------------------------------------------------------@@ -136,8 +137,19 @@   shortcutFlags flags   qual <- case qualification flags of {Left msg -> throwE msg; Right q -> return q} -  withGhc' flags $ do+  -- inject dynamic-too into flags before we proceed+  flags' <- withGhc' flags $ do+        df <- getDynFlags+        case lookup "GHC Dynamic" (compilerInfo df) of+          Just "YES" -> return $ Flag_OptGhc "-dynamic-too" : flags+          _ -> return flags +  unless (Flag_NoWarnings `elem` flags) $ do+    forM_ (warnings args) $ \warning -> do+      hPutStrLn stderr warning++  withGhc' flags' $ do+     dflags <- getDynFlags      if not (null files) then do@@ -163,7 +175,13 @@       -- Render even though there are no input files (usually contents/index).       liftIO $ renderStep dflags flags qual packages [] +-- | Create warnings about potential misuse of -optghc+warnings :: [String] -> [String]+warnings = map format . filter (isPrefixOf "-optghc")+  where+    format arg = concat ["Warning: `", arg, "' means `-o ", drop 2 arg, "', did you mean `-", arg, "'?"] + withGhc' :: [Flag] -> Ghc a -> IO a withGhc' flags action = do   libDir <- fmap snd (getGhcDirs flags)@@ -224,12 +242,14 @@     pkgStr           = Just (packageIdString pkgId)     (pkgName,pkgVer) = modulePackageInfo pkgMod -    (srcBase, srcModule, srcEntity) = sourceUrls flags+    (srcBase, srcModule, srcEntity, srcLEntity) = sourceUrls flags     srcMap' = maybe srcMap (\path -> Map.insert pkgId path srcMap) srcEntity-    sourceUrls' = (srcBase, srcModule, srcMap')+    -- TODO: Get these from the interface files as with srcMap+    srcLMap' = maybe Map.empty (\path -> Map.singleton pkgId path) srcLEntity+    sourceUrls' = (srcBase, srcModule, srcMap', srcLMap')    libDir   <- getHaddockLibDir flags-  prologue <- getPrologue flags+  prologue <- getPrologue dflags flags   themes   <- getThemes libDir flags >>= either bye return    when (Flag_GenIndex `elem` flags) $ do@@ -294,36 +314,41 @@ -- | Start a GHC session with the -haddock flag set. Also turn off -- compilation and linking. Then run the given 'Ghc' action. withGhc :: String -> [String] -> (DynFlags -> Ghc a) -> IO a-withGhc libDir flags ghcActs = saveStaticFlagGlobals >>= \savedFlags -> do-  -- TODO: handle warnings?-  (restFlags, _) <- parseStaticFlags (map noLoc flags)+withGhc libDir flags ghcActs = do   runGhc (Just libDir) $ do     dynflags  <- getSessionDynFlags-    let dynflags' = dopt_set dynflags Opt_Haddock+    let dynflags' = gopt_set dynflags Opt_Haddock     let dynflags'' = dynflags' {         hscTarget = HscNothing,         ghcMode   = CompManager,         ghcLink   = NoLink       }-    dynflags''' <- parseGhcFlags dynflags'' restFlags flags+    dynflags''' <- parseGhcFlags dynflags''     defaultCleanupHandler dynflags''' $ do         -- ignore the following return-value, which is a list of packages         -- that may need to be re-linked: Haddock doesn't do any         -- dynamic or static linking at all!         _ <- setSessionDynFlags dynflags'''         ghcActs dynflags'''-  `finally` restoreStaticFlagGlobals savedFlags   where-    parseGhcFlags :: Monad m => DynFlags -> [Located String]-                  -> [String] -> m DynFlags-    parseGhcFlags dynflags flags_ origFlags = do+    parseGhcFlags :: MonadIO m => DynFlags -> m DynFlags+    parseGhcFlags dynflags = do       -- TODO: handle warnings?-      (dynflags', rest, _) <- parseDynamicFlags dynflags flags_++      -- NOTA BENE: We _MUST_ discard any static flags here, because we cannot+      -- rely on Haddock to parse them, as it only parses the DynFlags. Yet if+      -- we pass any, Haddock will fail. Since StaticFlags are global to the+      -- GHC invocation, there's also no way to reparse/save them to set them+      -- again properly.+      --+      -- This is a bit of a hack until we get rid of the rest of the remaining+      -- StaticFlags. See GHC issue #8276.+      let flags' = discardStaticFlags flags+      (dynflags', rest, _) <- parseDynamicFlags dynflags (map noLoc flags')       if not (null rest)-        then throwE ("Couldn't parse GHC options: " ++ unwords origFlags)+        then throwE ("Couldn't parse GHC options: " ++ unwords flags')         else return dynflags' - ------------------------------------------------------------------------------- -- * Misc -------------------------------------------------------------------------------@@ -332,11 +357,19 @@ getHaddockLibDir :: [Flag] -> IO String getHaddockLibDir flags =   case [str | Flag_Lib str <- flags] of-    [] ->+    [] -> do #ifdef IN_GHC_TREE       getInTreeDir #else-      getDataDir -- provided by Cabal+      d <- getDataDir -- provided by Cabal+      doesDirectoryExist d >>= \exists -> case exists of+        True -> return d+        False -> do+          -- If directory does not exist then we are probably invoking from+          -- ./dist/build/haddock/haddock so we use ./resources as a fallback.+          doesDirectoryExist "resources" >>= \exists_ -> case exists_ of+            True -> return "resources"+            False -> die ("Haddock's resource directory (" ++ d ++ ") does not exist!\n") #endif     fs -> return (last fs) @@ -367,6 +400,8 @@   when (Flag_Help             `elem` flags) (bye usage)   when (Flag_Version          `elem` flags) byeVersion   when (Flag_InterfaceVersion `elem` flags) (bye (show binaryInterfaceVersion ++ "\n"))+  when (Flag_CompatibleInterfaceVersions `elem` flags)+    (bye (unwords (map show binaryInterfaceVersionCompatibility) ++ "\n"))   when (Flag_GhcVersion       `elem` flags) (bye (cProjectVersion ++ "\n"))    when (Flag_PrintGhcPath `elem` flags) $ do@@ -407,14 +442,13 @@     mapping' = [ (moduleName m, html) | (m, html) <- mapping ]  -getPrologue :: [Flag] -> IO (Maybe (Doc RdrName))-getPrologue flags =+getPrologue :: DynFlags -> [Flag] -> IO (Maybe (Doc RdrName))+getPrologue dflags flags =   case [filename | Flag_Prologue filename <- flags ] of     [] -> return Nothing     [filename] -> do       str <- readFile filename-      case parseParas (tokenise (defaultDynFlags (panic "No settings")) str-                      (1,0) {- TODO: real position -}) of+      case parseParasMaybe dflags str of         Nothing -> throwE $ "failed to parse haddock prologue from file: " ++ filename         Just doc -> return (Just doc)     _otherwise -> throwE "multiple -p/--prologue options"@@ -448,4 +482,3 @@ #endif  #endif-
src/Haddock/Backends/Hoogle.hs view
@@ -11,7 +11,7 @@ -- Write out Hoogle compatible documentation -- http://www.haskell.org/hoogle/ ------------------------------------------------------------------------------module Haddock.Backends.Hoogle ( +module Haddock.Backends.Hoogle (     ppHoogle   ) where @@ -110,11 +110,13 @@ -- How to print each export  ppExport :: DynFlags -> ExportItem Name -> [String]-ppExport dflags (ExportDecl decl dc subdocs _) = ppDocumentation dflags (fst dc) ++ f (unL decl)+ppExport dflags ExportDecl { expItemDecl    = L _ decl+                           , expItemMbDoc   = (dc, _)+                           , expItemSubDocs = subdocs+                           } = ppDocumentation dflags dc ++ f decl     where-        f (TyClD d@TyDecl{})-            | isDataDecl d      = ppData dflags d subdocs-            | otherwise         = ppSynonym dflags d+        f (TyClD d@DataDecl{})  = ppData dflags d subdocs+        f (TyClD d@SynDecl{})   = ppSynonym dflags d         f (TyClD d@ClassDecl{}) = ppClass dflags d         f (ForD (ForeignImport name typ _ _)) = ppSig dflags $ TypeSig [name] typ         f (ForD (ForeignExport name typ _ _)) = ppSig dflags $ TypeSig [name] typ@@ -140,13 +142,14 @@             concatMap (ppSig dflags . addContext . unL) (tcdSigs x)     where         addContext (TypeSig name (L l sig)) = TypeSig name (L l $ f sig)+        addContext (MinimalSig sig) = MinimalSig sig         addContext _ = error "expected TypeSig"          f (HsForAllTy a b con d) = HsForAllTy a b (reL (context : unLoc con)) d         f t = HsForAllTy Implicit emptyHsQTvs (reL [context]) (reL t) -        context = nlHsTyConApp (unL $ tcdLName x)-            (map (reL . HsTyVar . hsTyVarName . unL) (hsQTvBndrs (tcdTyVars x)))+        context = nlHsTyConApp (tcdName x)+            (map (reL . HsTyVar . hsTyVarName . unL) (hsQTvBndrs (tyClDeclTyVars x)))   ppInstance :: DynFlags -> ClsInst -> [String]@@ -157,17 +160,17 @@ ppSynonym dflags x = [out dflags x]  ppData :: DynFlags -> TyClDecl Name -> [(Name, DocForDecl Name)] -> [String]-ppData dflags decl@(TyDecl { tcdTyDefn = defn }) subdocs-    = showData decl{ tcdTyDefn = defn { td_cons=[],td_derivs=Nothing }} :-      concatMap (ppCtor dflags decl subdocs . unL) (td_cons defn)+ppData dflags decl@(DataDecl { tcdDataDefn = defn }) subdocs+    = showData decl{ tcdDataDefn = defn { dd_cons=[],dd_derivs=Nothing }} :+      concatMap (ppCtor dflags decl subdocs . unL) (dd_cons defn)     where-        +         -- GHC gives out "data Bar =", we want to delete the equals         -- also writes data : a b, when we want data (:) a b         showData d = unwords $ map f $ if last xs == "=" then init xs else xs             where                 xs = words $ out dflags d-                nam = out dflags $ tcdLName d+                nam = out dflags $ tyClDeclLName d                 f w = if w == nam then operator nam else w ppData _ _ _ = panic "ppData" @@ -195,8 +198,8 @@         name = out dflags $ unL $ con_name con          resType = case con_res con of-            ResTyH98 -> apps $ map (reL . HsTyVar) $ -                        unL (tcdLName dat) : [hsTyVarName v | L _ (v@UserTyVar {}) <- hsQTvBndrs $ tcdTyVars dat]+            ResTyH98 -> apps $ map (reL . HsTyVar) $+                        (tcdName dat) : [hsTyVarName v | L _ v@(UserTyVar _) <- hsQTvBndrs $ tyClDeclTyVars dat]             ResTyGADT x -> x  @@ -248,6 +251,7 @@   markupModule               = box (TagInline "a") . str,   markupWarning              = box (TagInline "i"),   markupEmphasis             = box (TagInline "i"),+  markupBold                 = box (TagInline "b"),   markupMonospaced           = box (TagInline "tt"),   markupPic                  = const $ str " ",   markupUnorderedList        = box (TagL 'u'),@@ -257,7 +261,8 @@   markupHyperlink            = \(Hyperlink url mLabel) -> (box (TagInline "a") . str) (fromMaybe url mLabel),   markupAName                = const $ str "",   markupProperty             = box TagPre . str,-  markupExample              = box TagPre . str . unlines . map exampleToString+  markupExample              = box TagPre . str . unlines . map exampleToString,+  markupHeader               = \(Header l h) -> box (TagInline $ "h" ++ show l) h   }  
src/Haddock/Backends/LaTeX.hs view
@@ -2,7 +2,8 @@ ----------------------------------------------------------------------------- -- | -- Module      :  Haddock.Backends.LaTeX--- Copyright   :  (c) Simon Marlow 2010+-- Copyright   :  (c) Simon Marlow      2010,+--                    Mateusz Kowalczyk 2013 -- License     :  BSD-like -- -- Maintainer  :  haddock@projects.haskell.org@@ -24,7 +25,7 @@ import OccName import Name                 ( nameOccName ) import RdrName              ( rdrNameOcc )-import FastString           ( unpackFS, unpackLitString )+import FastString           ( unpackFS, unpackLitString, zString )  import qualified Data.Map as Map import System.Directory@@ -33,6 +34,9 @@ import Control.Monad import Data.Maybe import Data.List++import Haddock.Doc (combineDocumentation)+ -- import Debug.Trace  {- SAMPLE OUTPUT@@ -128,7 +132,7 @@        filename = odir </> (fromMaybe "haddock" packageStr <.> "tex") -  writeFile filename (render tex)+  writeFile filename (show tex)   ppLaTeXModule :: String -> FilePath -> Interface -> IO ()@@ -168,11 +172,12 @@ string_txt (Chr c)   s  = c:s string_txt (Str s1)  s2 = s1 ++ s2 string_txt (PStr s1) s2 = unpackFS s1 ++ s2+string_txt (ZStr s1) s2 = zString s1 ++ s2 string_txt (LStr s1 _) s2 = unpackLitString s1 ++ s2   exportListItem :: ExportItem DocName -> LaTeX-exportListItem (ExportDecl decl _doc subdocs _insts)+exportListItem ExportDecl { expItemDecl = decl, expItemSubDocs = subdocs }   = sep (punctuate comma . map ppDocBinder $ declNames decl) <>      case subdocs of        [] -> empty@@ -206,8 +211,8 @@   isSimpleSig :: ExportItem DocName -> Maybe ([DocName], HsType DocName)-isSimpleSig (ExportDecl (L _ (SigD (TypeSig lnames (L _ t))))-                        (Documentation Nothing Nothing, argDocs) _ _)+isSimpleSig ExportDecl { expItemDecl = L _ (SigD (TypeSig lnames (L _ t)))+                       , expItemMbDoc = (Documentation Nothing Nothing, argDocs) }   | Map.null argDocs = Just (map unLoc lnames, t) isSimpleSig _ = Nothing @@ -220,8 +225,8 @@ processExport :: ExportItem DocName -> LaTeX processExport (ExportGroup lev _id0 doc)   = ppDocGroup lev (docToLaTeX doc)-processExport (ExportDecl decl doc subdocs insts)-  = ppDecl decl doc insts subdocs+processExport (ExportDecl decl doc subdocs insts fixities _splice)+  = ppDecl decl doc insts subdocs fixities processExport (ExportNoDecl y [])   = ppDocName y processExport (ExportNoDecl y subs)@@ -242,8 +247,11 @@  declNames :: LHsDecl DocName -> [DocName] declNames (L _ decl) = case decl of-  TyClD d  -> [unLoc $ tcdLName d]+  TyClD d  -> [tcdName d]   SigD (TypeSig lnames _) -> map unLoc lnames+  SigD (PatSynSig lname _ _ _ _) -> [unLoc lname]+  ForD (ForeignImport (L _ n) _ _ _) -> [n]+  ForD (ForeignExport (L _ n) _ _ _) -> [n]   _ -> error "declaration not supported by declNames"  @@ -271,19 +279,22 @@        -> DocForDecl DocName        -> [DocInstance DocName]        -> [(DocName, DocForDecl DocName)]+       -> [(DocName, Fixity)]        -> LaTeX -ppDecl (L loc decl) (doc, fnArgsDoc) instances subdocs = case decl of-  TyClD d@(TyFamily {})          -> ppTyFam False loc doc d unicode-  TyClD d@(TyDecl{ tcdTyDefn = defn })   -      | isHsDataDefn defn        -> ppDataDecl instances subdocs loc doc d unicode-      | otherwise                -> ppTySyn loc (doc, fnArgsDoc) d unicode+ppDecl (L loc decl) (doc, fnArgsDoc) instances subdocs _fixities = case decl of+  TyClD d@(FamDecl {})          -> ppTyFam False loc doc d unicode+  TyClD d@(DataDecl {})+                                -> ppDataDecl instances subdocs loc (Just doc) d unicode+  TyClD d@(SynDecl {})          -> ppTySyn loc (doc, fnArgsDoc) d unicode -- Family instances happen via FamInst now---  TyClD d@(TySynonym {})         +--  TyClD d@(TySynonym {}) --    | Just _  <- tcdTyPats d    -> ppTyInst False loc doc d unicode -- Family instances happen via FamInst now   TyClD d@(ClassDecl {})         -> ppClassDecl instances loc doc subdocs d unicode   SigD (TypeSig lnames (L _ t))  -> ppFunSig loc (doc, fnArgsDoc) (map unLoc lnames) t unicode+  SigD (PatSynSig lname args ty prov req) ->+      ppLPatSig loc (doc, fnArgsDoc) lname args ty prov req unicode   ForD d                         -> ppFor loc (doc, fnArgsDoc) d unicode   InstD _                        -> empty   _                              -> error "declaration not supported by ppDecl"@@ -298,8 +309,10 @@   ppFor :: SrcSpan -> DocForDecl DocName -> ForeignDecl DocName -> Bool -> LaTeX-ppFor _ _ _ _ =-  error "foreign declarations are currently not supported by --latex"+ppFor loc doc (ForeignImport (L _ name) (L _ typ) _ _) unicode =+  ppFunSig loc doc [name] typ unicode+ppFor _ _ _ _ = error "ppFor error in Haddock.Backends.LaTeX"+--  error "foreign declarations are currently not supported by --latex"   -------------------------------------------------------------------------------@@ -310,8 +323,8 @@ -- we skip type patterns for now ppTySyn :: SrcSpan -> DocForDecl DocName -> TyClDecl DocName -> Bool -> LaTeX -ppTySyn loc doc (TyDecl { tcdLName = L _ name, tcdTyVars = ltyvars-                        , tcdTyDefn = TySynonym { td_synRhs = ltype } }) unicode+ppTySyn loc doc (SynDecl { tcdLName = L _ name, tcdTyVars = ltyvars+                         , tcdRhs = ltype }) unicode   = ppTypeOrFunSig loc [name] (unLoc ltype) doc (full, hdr, char '=') unicode   where     hdr  = hsep (keyword "type" : ppDocBinder name : ppTyVars ltyvars)@@ -336,7 +349,34 @@  where    names = map getName docnames +ppLPatSig :: SrcSpan -> DocForDecl DocName -> Located DocName+          -> HsPatSynDetails (LHsType DocName) -> LHsType DocName+          -> LHsContext DocName -> LHsContext DocName+          -> Bool -> LaTeX+ppLPatSig loc doc docname args typ prov req unicode =+    ppPatSig loc doc (unLoc docname) (fmap unLoc args) (unLoc typ) (unLoc prov) (unLoc req) unicode +ppPatSig :: SrcSpan -> DocForDecl DocName -> DocName+          -> HsPatSynDetails (HsType DocName) -> HsType DocName+          -> HsContext DocName -> HsContext DocName+          -> Bool -> LaTeX+ppPatSig _loc (doc, _argDocs) docname args typ prov req unicode = declWithDoc pref1 (documentationToLaTeX doc)+  where+    pref1 = hsep [ keyword "pattern"+                 , pp_ctx prov+                 , pp_head+                 , dcolon unicode+                 , pp_ctx req+                 , ppType unicode typ+                 ]++    pp_head = case args of+        PrefixPatSyn typs -> hsep $ ppDocBinder docname : map pp_type typs+        InfixPatSyn left right -> hsep [pp_type left, ppDocBinderInfix docname, pp_type right]++    pp_type = ppParendType unicode+    pp_ctx ctx = ppContext ctx unicode+ ppTypeOrFunSig :: SrcSpan -> [DocName] -> HsType DocName                -> DocForDecl DocName -> (LaTeX, LaTeX, LaTeX)                -> Bool -> LaTeX@@ -396,7 +436,7 @@ declWithDoc decl doc =    text "\\begin{haddockdesc}" $$    text "\\item[\\begin{tabular}{@{}l}" $$-   text (latexMonoFilter (render decl)) $$+   text (latexMonoFilter (show decl)) $$    text "\\end{tabular}]" <>        (if isNothing doc then empty else text "\\haddockbegindoc") $$    maybe empty id doc $$@@ -411,7 +451,7 @@    text "\\begin{haddockdesc}" $$    vcat [       text "\\item[" $$-      text (latexMonoFilter (render decl)) $$+      text (latexMonoFilter (show decl)) $$       text "]"       | decl <- decls ] $$    text "\\end{haddockdesc}"@@ -460,7 +500,7 @@             -> Documentation DocName -> [(DocName, DocForDecl DocName)]             -> TyClDecl DocName -> Bool -> LaTeX ppClassDecl instances loc doc subdocs-  (ClassDecl { tcdCtxt = lctxt, tcdLName = lname, tcdTyVars = ltyvars, tcdFDs = lfds +  (ClassDecl { tcdCtxt = lctxt, tcdLName = lname, tcdTyVars = ltyvars, tcdFDs = lfds              , tcdSigs = lsigs, tcdATs = ats, tcdATDefs = at_defs }) unicode   = declWithDoc classheader (if null body then Nothing else Just (vcat body)) $$     instancesBit@@ -499,7 +539,7 @@   | Just ihead <- isUndocdInstance i   = declWithDoc (vcat (map (ppInstDecl unicode) (ihead:is))) Nothing $$     ppDocInstances unicode rest'-  | otherwise +  | otherwise   = ppDocInstance unicode i $$ ppDocInstances unicode rest   where     (is, rest') = spanWith isUndocdInstance rest@@ -521,9 +561,12 @@   ppInstHead :: Bool -> InstHead DocName -> LaTeX-ppInstHead unicode ([],   n, ts) = ppAppNameTypes n ts unicode-ppInstHead unicode (ctxt, n, ts) = ppContextNoLocs ctxt unicode <+> ppAppNameTypes n ts unicode-+ppInstHead unicode (n, ks, ts, ClassInst ctx) = ppContextNoLocs ctx unicode <+> ppAppNameTypes n ks ts unicode+ppInstHead unicode (n, ks, ts, TypeInst rhs) = keyword "type"+  <+> ppAppNameTypes n ks ts unicode+  <+> maybe empty (\t -> equals <+> ppType unicode t) rhs+ppInstHead _unicode (_n, _ks, _ts, DataInst _dd) =+  error "data instances not supported by --latex yet"  lookupAnySubdoc :: (Eq name1) =>                    name1 -> [(name1, DocForDecl name2)] -> DocForDecl name2@@ -538,8 +581,8 @@   ppDataDecl :: [DocInstance DocName] ->-              [(DocName, DocForDecl DocName)] ->-              SrcSpan -> Documentation DocName -> TyClDecl DocName -> Bool ->+              [(DocName, DocForDecl DocName)] -> SrcSpan ->+              Maybe (Documentation DocName) -> TyClDecl DocName -> Bool ->               LaTeX ppDataDecl instances subdocs _loc doc dataDecl unicode @@ -548,10 +591,10 @@    $$ instancesBit    where-    cons      = td_cons (tcdTyDefn dataDecl)+    cons      = dd_cons (tcdDataDefn dataDecl)     resTy     = (con_res . unLoc . head) cons -    body = catMaybes [constrBit, documentationToLaTeX doc]+    body = catMaybes [constrBit, doc >>= documentationToLaTeX]      (whereBit, leaders)       | null cons = (empty,[])@@ -645,9 +688,9 @@  -- {- -- ppHsFullConstr :: HsConDecl -> LaTeX--- ppHsFullConstr (HsConDecl _ nm tvs ctxt typeList doc) = +-- ppHsFullConstr (HsConDecl _ nm tvs ctxt typeList doc) = --      declWithDoc False doc (--- 	hsep ((ppHsConstrHdr tvs ctxt +++ +-- 	hsep ((ppHsConstrHdr tvs ctxt +++ -- 		ppHsBinder False nm) : map ppHsBangType typeList) --       ) -- ppHsFullConstr (HsRecDecl _ nm tvs ctxt fields doc) =@@ -656,35 +699,35 @@ --        Nothing -> aboves [hdr, fields_html] --        Just _  -> aboves [hdr, constr_doc, fields_html] --    )--- +-- --   where hdr = declBox (ppHsConstrHdr tvs ctxt +++ ppHsBinder False nm)--- --- 	constr_doc	+--+-- 	constr_doc -- 	  | isJust doc = docBox (docToLaTeX (fromJust doc)) -- 	  | otherwise  = LaTeX.emptyTable--- --- 	fields_html = --- 	   td << +--+-- 	fields_html =+-- 	   td << -- 	      table ! [width "100%", cellpadding 0, cellspacing 8] << ( -- 		   aboves (map ppFullField (concat (map expandField fields))) -- 		) -- -}--- +-- -- ppShortField :: Bool -> Bool -> ConDeclField DocName -> LaTeX -- ppShortField summary unicode (ConDeclField (L _ name) ltype _) --   = tda [theclass "recfield"] << ( --       ppBinder summary (docNameOcc name) --       <+> dcolon unicode <+> ppLType unicode ltype --     )--- +-- -- {- -- ppFullField :: HsFieldDecl -> LaTeX--- ppFullField (HsFieldDecl [n] ty doc) +-- ppFullField (HsFieldDecl [n] ty doc) --   = declWithDoc False doc ( -- 	ppHsBinder False n <+> dcolon <+> ppHsBangType ty --     ) -- ppFullField _ = error "ppFullField"--- +-- -- expandField :: HsFieldDecl -> [HsFieldDecl] -- expandField (HsFieldDecl ns ty doc) = [ HsFieldDecl [n] ty doc | n <- ns ] -- -}@@ -693,8 +736,8 @@ -- | Print the LHS of a data\/newtype declaration. -- Currently doesn't handle 'data instance' decls or kind signatures ppDataHeader :: TyClDecl DocName -> Bool -> LaTeX-ppDataHeader (TyDecl { tcdLName = L _ name, tcdTyVars = tyvars-                     , tcdTyDefn = TyData { td_ND = nd, td_ctxt = ctxt } }) unicode+ppDataHeader (DataDecl { tcdLName = L _ name, tcdTyVars = tyvars+                       , tcdDataDefn = HsDataDefn { dd_ND = nd, dd_ctxt = ctxt } }) unicode   = -- newtype or data     (case nd of { NewType -> keyword "newtype"; DataType -> keyword "data" }) <+>     -- context@@ -708,27 +751,27 @@ --------------------------------------------------------------------------------  --- | Print an application of a DocName and a list of HsTypes-ppAppNameTypes :: DocName -> [HsType DocName] -> Bool -> LaTeX-ppAppNameTypes n ts unicode = ppTypeApp n ts ppDocName (ppParendType unicode)+-- | Print an application of a DocName and two lists of HsTypes (kinds, types)+ppAppNameTypes :: DocName -> [HsType DocName] -> [HsType DocName] -> Bool -> LaTeX+ppAppNameTypes n ks ts unicode = ppTypeApp n ks ts ppDocName (ppParendType unicode)  --- | Print an application of a DocName and a list of Names +-- | Print an application of a DocName and a list of Names ppAppDocNameNames :: Bool -> DocName -> [Name] -> LaTeX ppAppDocNameNames _summ n ns =-  ppTypeApp n ns (ppBinder . nameOccName . getName) ppSymName+  ppTypeApp n [] ns (ppBinder . nameOccName . getName) ppSymName   -- | General printing of type applications-ppTypeApp :: DocName -> [a] -> (DocName -> LaTeX) -> (a -> LaTeX) -> LaTeX-ppTypeApp n (t1:t2:rest) ppDN ppT+ppTypeApp :: DocName -> [a] -> [a] -> (DocName -> LaTeX) -> (a -> LaTeX) -> LaTeX+ppTypeApp n [] (t1:t2:rest) ppDN ppT   | operator, not . null $ rest = parens opApp <+> hsep (map ppT rest)   | operator                    = opApp   where     operator = isNameSym . getName $ n     opApp = ppT t1 <+> ppDN n <+> ppT t2 -ppTypeApp n ts ppDN ppT = ppDN n <+> hsep (map ppT ts)+ppTypeApp n ks ts ppDN ppT = ppDN n <+> hsep (map ppT $ ks ++ ts)   -------------------------------------------------------------------------------@@ -905,10 +948,17 @@  ppBinder :: OccName -> LaTeX ppBinder n-  | isVarSym n = parens $ ppOccName n-  | otherwise  = ppOccName n+  | isInfixName n = parens $ ppOccName n+  | otherwise     = ppOccName n +ppBinderInfix :: OccName -> LaTeX+ppBinderInfix n+  | isInfixName n = ppOccName n+  | otherwise     = quotes $ ppOccName n +isInfixName :: OccName -> Bool+isInfixName n = isVarSym n || isConSym n+ ppSymName :: Name -> LaTeX ppSymName name   | isNameSym name = parens $ ppName name@@ -944,7 +994,10 @@ ppDocBinder :: DocName -> LaTeX ppDocBinder = ppBinder . nameOccName . getName +ppDocBinderInfix :: DocName -> LaTeX+ppDocBinderInfix = ppBinderInfix . nameOccName . getName + ppName :: Name -> LaTeX ppName = ppOccName . nameOccName @@ -995,18 +1048,26 @@   markupModule               = \m _ -> let (mdl,_ref) = break (=='#') m in tt (text mdl),   markupWarning              = \p v -> emph (p v),   markupEmphasis             = \p v -> emph (p v),+  markupBold                 = \p v -> bold (p v),   markupMonospaced           = \p _ -> tt (p Mono),   markupUnorderedList        = \p v -> itemizedList (map ($v) p) $$ text "",-  markupPic                  = \path _ -> parens (text "image: " <> text path),+  markupPic                  = \p _ -> markupPic p,   markupOrderedList          = \p v -> enumeratedList (map ($v) p) $$ text "",   markupDefList              = \l v -> descriptionList (map (\(a,b) -> (a v, b v)) l),   markupCodeBlock            = \p _ -> quote (verb (p Verb)) $$ text "",   markupHyperlink            = \l _ -> markupLink l,   markupAName                = \_ _ -> empty,   markupProperty             = \p _ -> quote $ verb $ text p,-  markupExample              = \e _ -> quote $ verb $ text $ unlines $ map exampleToString e+  markupExample              = \e _ -> quote $ verb $ text $ unlines $ map exampleToString e,+  markupHeader               = \(Header l h) p -> header l (h p)   }   where+    header 1 d = text "\\section*" <> braces d+    header 2 d = text "\\subsection*" <> braces d+    header l d+      | l > 0 && l <= 6 = text "\\subsubsection*" <> braces d+    header l _ = error $ "impossible header level in LaTeX generation: " ++ show l+     fixString Plain s = latexFilter s     fixString Verb  s = s     fixString Mono  s = latexMonoFilter s@@ -1015,6 +1076,14 @@       Just label -> text "\\href" <> braces (text url) <> braces (text label)       Nothing    -> text "\\url"  <> braces (text url) +    -- Is there a better way of doing this? Just a space is an aribtrary choice.+    markupPic (Picture uri title) = parens (imageText title)+      where+        imageText Nothing = beg+        imageText (Just t) = beg <> text " " <> text t++        beg = text "image: " <> text uri+     markupId ppId_ id v =       case v of         Verb  -> theid@@ -1098,6 +1167,8 @@ emph :: LaTeX -> LaTeX emph ltx = text "\\emph" <> braces ltx +bold :: LaTeX -> LaTeX+bold ltx = text "\\textbf" <> braces ltx  verb :: LaTeX -> LaTeX verb doc = text "{\\haddockverb\\begin{verbatim}" $$ doc <> text "\\end{verbatim}}"
src/Haddock/Backends/Xhtml.hs view
@@ -1,15 +1,17 @@ ----------------------------------------------------------------------------- -- | -- Module      :  Haddock.Backends.Html--- Copyright   :  (c) Simon Marlow   2003-2006,---                    David Waern    2006-2009,---                    Mark Lentczner 2010+-- Copyright   :  (c) Simon Marlow      2003-2006,+--                    David Waern       2006-2009,+--                    Mark Lentczner    2010,+--                    Mateusz Kowalczyk 2013 -- License     :  BSD-like -- -- Maintainer  :  haddock@projects.haskell.org -- Stability   :  experimental -- Portability :  portable -----------------------------------------------------------------------------+{-# LANGUAGE CPP #-} module Haddock.Backends.Xhtml (   ppHtml, copyHtmlBits,   ppHtmlIndex, ppHtmlContents,@@ -33,9 +35,12 @@ import Haddock.GhcUtils  import Control.Monad         ( when, unless )+#if !MIN_VERSION_base(4,7,0) import Control.Monad.Instances ( ) -- for Functor Either a+#endif import Data.Char             ( toUpper )-import Data.List             ( sortBy, groupBy, intercalate )+import Data.Functor          ( (<$>) )+import Data.List             ( sortBy, groupBy, intercalate, isPrefixOf ) import Data.Maybe import System.FilePath hiding ( (</>) ) import System.Directory@@ -45,11 +50,11 @@ import Data.Function import Data.Ord              ( comparing ) +import DynFlags (Language(..)) import GHC hiding ( NoLink, moduleInfo ) import Name import Module - -------------------------------------------------------------------------------- -- * Generating HTML documentation --------------------------------------------------------------------------------@@ -125,9 +130,9 @@   srcButton :: SourceURLs -> Maybe Interface -> Maybe Html-srcButton (Just src_base_url, _, _) Nothing =+srcButton (Just src_base_url, _, _, _) Nothing =   Just (anchor ! [href src_base_url] << "Source")-srcButton (_, Just src_module_url, _) (Just iface) =+srcButton (_, Just src_module_url, _, _) (Just iface) =   let url = spliceURL (Just $ ifaceOrigFilename iface)                       (Just $ ifaceMod iface) Nothing Nothing src_module_url    in Just (anchor ! [href url] << "Source")@@ -171,7 +176,7 @@     divPackageHeader << [       unordList (catMaybes [         srcButton maybe_source_url iface,-        wikiButton maybe_wiki_url (ifaceMod `fmap` iface),+        wikiButton maybe_wiki_url (ifaceMod <$> iface),         contentsButton maybe_contents_url,         indexButton maybe_index_url])             ! [theclass "links", identifier "page-menu"],@@ -197,11 +202,31 @@        entries :: [HtmlTable]       entries = mapMaybe doOneEntry [-         ("Portability",hmi_portability),-         ("Stability",hmi_stability),-         ("Maintainer",hmi_maintainer),-         ("Safe Haskell",hmi_safety)-         ]+          ("Copyright",hmi_copyright),+          ("License",hmi_license),+          ("Maintainer",hmi_maintainer),+          ("Stability",hmi_stability),+          ("Portability",hmi_portability),+          ("Safe Haskell",hmi_safety),+          ("Language", lg)+          ] ++ extsForm+        where+          lg inf = case hmi_language inf of+            Nothing -> Nothing+            Just Haskell98 -> Just "Haskell98"+            Just Haskell2010 -> Just "Haskell2010"++          extsForm+            | OptShowExtensions `elem` ifaceOptions iface =+              let fs = map (dropOpt . show) (hmi_extensions info)+              in case map stringToHtml fs of+                [] -> []+                [x] -> extField x -- don't use a list for a single extension+                xs -> extField $ unordList xs ! [theclass "extension-list"]+            | otherwise = []+            where+              extField x = return $ th << "Extensions" <-> td << x+              dropOpt x = if "Opt_" `isPrefixOf` x then drop 4 x else x    in       case entries of          [] -> noHtml@@ -266,7 +291,7 @@  mkNode :: Qualification -> [String] -> String -> ModuleTree -> Html mkNode qual ss p (Node s leaf pkg short ts) =-  htmlModule +++ shortDescr +++ htmlPkg +++ subtree+  htmlModule <+> shortDescr +++ htmlPkg +++ subtree   where     modAttrs = case (ts, leaf) of       (_:_, False) -> collapseControl p True "module"@@ -278,7 +303,7 @@       -- We only need an explicit collapser button when the module name       -- is also a leaf, and so is a link to a module page. Indeed, the       -- spaceHtml is a minor hack and does upset the layout a fraction.-      +     htmlModule = thespan ! modAttrs << (cBtn +++       if leaf         then ppModule (mkModule (stringToPackageId (fromMaybe "" pkg))@@ -508,7 +533,7 @@      -- todo: if something has only sub-docs, or fn-args-docs, should     -- it be measured here and thus prevent omitting the synopsis?-    has_doc (ExportDecl _ (Documentation mDoc mWarning, _) _ _) = isJust mDoc || isJust mWarning+    has_doc ExportDecl { expItemMbDoc = (Documentation mDoc mWarning, _) } = isJust mDoc || isJust mWarning     has_doc (ExportNoDecl _ _) = False     has_doc (ExportModule _) = False     has_doc _ = True@@ -524,7 +549,7 @@       | no_doc_at_all = noHtml       | otherwise       = divSynposis $-            paragraph ! collapseControl "syn" False "caption" << "Synopsis" +++ +            paragraph ! collapseControl "syn" False "caption" << "Synopsis" +++             shortDeclList (                 mapMaybe (processExport True linksInfo unicode qual) exports             ) ! (collapseSection "syn" False "" ++ collapseToggle "syn")@@ -553,34 +578,34 @@  processForMiniSynopsis :: Module -> Bool -> Qualification -> ExportItem DocName                        -> [Html]-processForMiniSynopsis mdl unicode qual (ExportDecl (L _loc decl0) _doc _ _insts) =-  ((divTopDecl <<).(declElem <<)) `fmap` case decl0 of+processForMiniSynopsis mdl unicode qual ExportDecl { expItemDecl = L _loc decl0 } =+  ((divTopDecl <<).(declElem <<)) <$> case decl0 of     TyClD d -> let b = ppTyClBinderWithVarsMini mdl d in case d of-        (TyFamily{}) -> [ppTyFamHeader True False d unicode qual]-        (TyDecl{ tcdTyDefn = TyData {} }) -> [keyword "data" <+> b]-        (TyDecl{ tcdTyDefn = TySynonym {} }) -> [keyword "type" <+> b]-        (ClassDecl {})    -> [keyword "class" <+> b]+        (FamDecl decl)    -> [ppTyFamHeader True False decl unicode qual]+        (DataDecl{})   -> [keyword "data" <+> b]+        (SynDecl{})    -> [keyword "type" <+> b]+        (ClassDecl {}) -> [keyword "class" <+> b]         _ -> []     SigD (TypeSig lnames (L _ _)) ->-      map (ppNameMini mdl . nameOccName . getName . unLoc) lnames+      map (ppNameMini Prefix mdl . nameOccName . getName . unLoc) lnames     _ -> [] processForMiniSynopsis _ _ qual (ExportGroup lvl _id txt) =   [groupTag lvl << docToHtml qual txt] processForMiniSynopsis _ _ _ _ = []  -ppNameMini :: Module -> OccName -> Html-ppNameMini mdl nm =+ppNameMini :: Notation -> Module -> OccName -> Html+ppNameMini notation mdl nm =     anchor ! [ href (moduleNameUrl mdl nm)              , target mainFrameName ]-      << ppBinder' nm+      << ppBinder' notation nm   ppTyClBinderWithVarsMini :: Module -> TyClDecl DocName -> Html ppTyClBinderWithVarsMini mdl decl =-  let n = unLoc $ tcdLName decl-      ns = tyvarNames $ tcdTyVars decl-  in ppTypeApp n ns (ppNameMini mdl . nameOccName . getName) ppTyName+  let n = tcdName decl+      ns = tyvarNames $ tcdTyVars decl -- it's safe to use tcdTyVars, see code above+  in ppTypeApp n [] ns (\is_infix -> ppNameMini is_infix mdl . nameOccName . getName) ppTyName   ppModuleContents :: Qualification -> [ExportItem DocName] -> Html@@ -600,7 +625,8 @@     | lev <= n  = ( [], items )     | otherwise = ( html:secs, rest2 )     where-        html = linkedAnchor (groupId id0) << docToHtml qual doc +++ mk_subsections ssecs+        html = linkedAnchor (groupId id0)+               << docToHtmlNoAnchors qual doc +++ mk_subsections ssecs         (ssecs, rest1) = process lev rest         (secs,  rest2) = process n   rest1   process n (_ : rest) = process n rest@@ -608,7 +634,6 @@   mk_subsections [] = noHtml   mk_subsections ss = unordList ss - -- we need to assign a unique id to each section heading so we can hyperlink -- them from the contents: numberSectionHeadings :: [ExportItem DocName] -> [ExportItem DocName]@@ -623,15 +648,17 @@  processExport :: Bool -> LinksInfo -> Bool -> Qualification               -> ExportItem DocName -> Maybe Html+processExport _ _ _ _ ExportDecl { expItemDecl = L _ (InstD _) } = Nothing -- Hide empty instances processExport summary _ _ qual (ExportGroup lev id0 doc)   = nothingIf summary $ groupHeading lev id0 << docToHtml qual doc-processExport summary links unicode qual (ExportDecl decl doc subdocs insts)-  = processDecl summary $ ppDecl summary links decl doc insts subdocs unicode qual+processExport summary links unicode qual (ExportDecl decl doc subdocs insts fixities splice)+  = processDecl summary $ ppDecl summary links decl doc insts fixities subdocs splice unicode qual processExport summary _ _ qual (ExportNoDecl y [])-  = processDeclOneLiner summary $ ppDocName qual y+  = processDeclOneLiner summary $ ppDocName qual Prefix True y processExport summary _ _ qual (ExportNoDecl y subs)   = processDeclOneLiner summary $-      ppDocName qual y +++ parenList (map (ppDocName qual) subs)+      ppDocName qual Prefix True y+      +++ parenList (map (ppDocName qual Prefix True) subs) processExport summary _ _ qual (ExportDoc doc)   = nothingIf summary $ docSection_ qual doc processExport summary _ _ _ (ExportModule mdl)@@ -661,5 +688,3 @@   | lev == 2  = h2   | lev == 3  = h3   | otherwise = h4--
src/Haddock/Backends/Xhtml/Decl.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE TransformListComp #-} ----------------------------------------------------------------------------- -- | -- Module      :  Haddock.Backends.Html.Decl@@ -25,50 +26,113 @@ import Haddock.Backends.Xhtml.Utils import Haddock.GhcUtils import Haddock.Types+import Haddock.Doc (combineDocumentation) -import           Data.List             ( intersperse )+import           Data.List             ( intersperse, sort ) import qualified Data.Map as Map import           Data.Maybe+import           Data.Monoid           ( mempty ) import           Text.XHtml hiding     ( name, title, p, quote )  import GHC+import GHC.Exts import Name+import BooleanFormula  -ppDecl :: Bool -> LinksInfo -> LHsDecl DocName ->-          DocForDecl DocName -> [DocInstance DocName] -> [(DocName, DocForDecl DocName)] ->-          Bool -> Qualification -> Html-ppDecl summ links (L loc decl) (mbDoc, fnArgsDoc) instances subdocs unicode qual = case decl of-  TyClD d@(TyFamily {})          -> ppTyFam summ False links loc mbDoc d unicode qual-  TyClD d@(TyDecl{ tcdTyDefn = defn })   -      | isHsDataDefn defn        -> ppDataDecl summ links instances subdocs loc mbDoc d unicode qual-      | otherwise                -> ppTySyn summ links loc (mbDoc, fnArgsDoc) d unicode qual-  TyClD d@(ClassDecl {})         -> ppClassDecl summ links instances loc mbDoc subdocs d unicode qual-  SigD (TypeSig lnames (L _ t))  -> ppFunSig summ links loc (mbDoc, fnArgsDoc) (map unLoc lnames) t unicode qual-  ForD d                         -> ppFor summ links loc (mbDoc, fnArgsDoc) d unicode qual+ppDecl :: Bool -> LinksInfo -> LHsDecl DocName+       -> DocForDecl DocName -> [DocInstance DocName] -> [(DocName, Fixity)]+       -> [(DocName, DocForDecl DocName)] -> Splice -> Unicode -> Qualification -> Html+ppDecl summ links (L loc decl) (mbDoc, fnArgsDoc) instances fixities subdocs splice unicode qual = case decl of+  TyClD (FamDecl d)         -> ppTyFam summ False links instances fixities loc mbDoc d splice unicode qual+  TyClD d@(DataDecl {})     -> ppDataDecl summ links instances fixities subdocs loc mbDoc d splice unicode qual+  TyClD d@(SynDecl {})      -> ppTySyn summ links fixities loc (mbDoc, fnArgsDoc) d splice unicode qual+  TyClD d@(ClassDecl {})    -> ppClassDecl summ links instances fixities loc mbDoc subdocs d splice unicode qual+  SigD (TypeSig lnames lty) -> ppLFunSig summ links loc (mbDoc, fnArgsDoc) lnames lty fixities splice unicode qual+  SigD (PatSynSig lname args ty prov req) ->+      ppLPatSig summ links loc (mbDoc, fnArgsDoc) lname args ty prov req fixities splice unicode qual+  ForD d                         -> ppFor summ links loc (mbDoc, fnArgsDoc) d fixities splice unicode qual   InstD _                        -> noHtml   _                              -> error "declaration not supported by ppDecl"  +ppLFunSig :: Bool -> LinksInfo -> SrcSpan -> DocForDecl DocName ->+             [Located DocName] -> LHsType DocName -> [(DocName, Fixity)] ->+             Splice -> Unicode -> Qualification -> Html+ppLFunSig summary links loc doc lnames lty fixities splice unicode qual =+  ppFunSig summary links loc doc (map unLoc lnames) (unLoc lty) fixities+           splice unicode qual+ ppFunSig :: Bool -> LinksInfo -> SrcSpan -> DocForDecl DocName ->-            [DocName] -> HsType DocName -> Bool -> Qualification -> Html-ppFunSig summary links loc doc docnames typ unicode qual =+            [DocName] -> HsType DocName -> [(DocName, Fixity)] ->+            Splice -> Unicode -> Qualification -> Html+ppFunSig summary links loc doc docnames typ fixities splice unicode qual =+  ppSigLike summary links loc mempty doc docnames fixities (typ, pp_typ)+            splice unicode qual+  where+    pp_typ = ppType unicode qual typ++ppLPatSig :: Bool -> LinksInfo -> SrcSpan -> DocForDecl DocName ->+             Located DocName ->+             HsPatSynDetails (LHsType DocName) -> LHsType DocName ->+             LHsContext DocName -> LHsContext DocName -> [(DocName, Fixity)] ->+             Splice -> Unicode -> Qualification -> Html+ppLPatSig summary links loc doc lname args typ prov req fixities splice unicode qual =+    ppPatSig summary links loc doc (unLoc lname) (fmap unLoc args) (unLoc typ)+             (unLoc prov) (unLoc req) fixities splice unicode qual++ppPatSig :: Bool -> LinksInfo -> SrcSpan -> DocForDecl DocName ->+            DocName ->+            HsPatSynDetails (HsType DocName) -> HsType DocName ->+            HsContext DocName -> HsContext DocName -> [(DocName, Fixity)] ->+            Splice -> Unicode -> Qualification -> Html+ppPatSig summary links loc (doc, _argDocs) docname args typ prov req fixities+         splice unicode qual+  | summary = pref1+  | otherwise = topDeclElem links loc splice [docname] (pref1 <+> ppFixities fixities qual)+                +++ docSection qual doc+  where+    pref1 = hsep [ toHtml "pattern"+                 , pp_cxt prov+                 , pp_head+                 , dcolon unicode+                 , pp_cxt req+                 , ppType unicode qual typ+                 ]+    pp_head = case args of+        PrefixPatSyn typs -> hsep $ ppBinder summary occname : map pp_type typs+        InfixPatSyn left right -> hsep [pp_type left, ppBinderInfix summary occname, pp_type right]++    pp_cxt cxt = ppContext cxt unicode qual+    pp_type = ppParendType unicode qual++    occname = nameOccName . getName $ docname++ppSigLike :: Bool -> LinksInfo -> SrcSpan -> Html -> DocForDecl DocName ->+             [DocName] -> [(DocName, Fixity)] -> (HsType DocName, Html) ->+             Splice -> Unicode -> Qualification -> Html+ppSigLike summary links loc leader doc docnames fixities (typ, pp_typ)+          splice unicode qual =   ppTypeOrFunSig summary links loc docnames typ doc-    ( ppTypeSig summary occnames typ unicode qual-    , concatHtml . punctuate comma $ map (ppBinder False) occnames+    ( addFixities $ leader <+> ppTypeSig summary occnames pp_typ unicode+    , addFixities . concatHtml . punctuate comma $ map (ppBinder False) occnames     , dcolon unicode     )-    unicode qual+    splice unicode qual   where     occnames = map (nameOccName . getName) docnames+    addFixities html+      | summary   = html+      | otherwise = html <+> ppFixities fixities qual   ppTypeOrFunSig :: Bool -> LinksInfo -> SrcSpan -> [DocName] -> HsType DocName-               -> DocForDecl DocName -> (Html, Html, Html) -> Bool -> Qualification -> Html-ppTypeOrFunSig summary links loc docnames typ (doc, argDocs) (pref1, pref2, sep) unicode qual+               -> DocForDecl DocName -> (Html, Html, Html)+               -> Splice -> Unicode -> Qualification -> Html+ppTypeOrFunSig summary links loc docnames typ (doc, argDocs) (pref1, pref2, sep) splice unicode qual   | summary = pref1-  | Map.null argDocs = topDeclElem links loc docnames pref1 +++ docSection qual doc-  | otherwise = topDeclElem links loc docnames pref2 ++++  | Map.null argDocs = topDeclElem links loc splice docnames pref1 +++ docSection qual doc+  | otherwise = topDeclElem links loc splice docnames pref2 +++       subArguments qual (do_args 0 sep typ) +++ docSection qual doc   where     argDoc n = Map.lookup n argDocs@@ -96,7 +160,28 @@     do_args n leader t       = [(leader <+> ppType unicode qual t, argDoc n, [])] +ppFixities :: [(DocName, Fixity)] -> Qualification -> Html+ppFixities [] _ = noHtml+ppFixities fs qual = foldr1 (+++) (map ppFix uniq_fs) +++ rightEdge+  where+    ppFix (ns, p, d) = thespan ! [theclass "fixity"] <<+                         (toHtml d <+> toHtml (show p) <+> ppNames ns) +    ppDir InfixR = "infixr"+    ppDir InfixL = "infixl"+    ppDir InfixN = "infix"++    ppNames = case fs of+      _:[] -> const noHtml -- Don't display names for fixities on single names+      _    -> concatHtml . intersperse (stringToHtml ", ") . map (ppDocName qual Infix False)++    uniq_fs = [ (n, the p, the d') | (n, Fixity p d) <- fs+                                   , let d' = ppDir d+                                   , then group by Down (p,d') using groupWith ]++    rightEdge = thespan ! [theclass "rightedge"] << noHtml++ ppTyVars :: LHsTyVarBndrs DocName -> [Html] ppTyVars tvs = map ppTyName (tyvarNames tvs) @@ -106,38 +191,43 @@   ppFor :: Bool -> LinksInfo -> SrcSpan -> DocForDecl DocName-      -> ForeignDecl DocName -> Bool -> Qualification -> Html-ppFor summary links loc doc (ForeignImport (L _ name) (L _ typ) _ _) unicode qual-  = ppFunSig summary links loc doc [name] typ unicode qual-ppFor _ _ _ _ _ _ _ = error "ppFor"+      -> ForeignDecl DocName -> [(DocName, Fixity)]+      -> Splice -> Unicode -> Qualification -> Html+ppFor summary links loc doc (ForeignImport (L _ name) (L _ typ) _ _) fixities+      splice unicode qual+  = ppFunSig summary links loc doc [name] typ fixities splice unicode qual+ppFor _ _ _ _ _ _ _ _ _ = error "ppFor"   -- we skip type patterns for now-ppTySyn :: Bool -> LinksInfo -> SrcSpan -> DocForDecl DocName -> TyClDecl DocName -> Bool-        -> Qualification -> Html-ppTySyn summary links loc doc (TyDecl { tcdLName = L _ name, tcdTyVars = ltyvars-                                      , tcdTyDefn = TySynonym { td_synRhs = ltype } }) -        unicode qual+ppTySyn :: Bool -> LinksInfo -> [(DocName, Fixity)] -> SrcSpan+        -> DocForDecl DocName -> TyClDecl DocName+        -> Splice -> Unicode -> Qualification -> Html+ppTySyn summary links fixities loc doc (SynDecl { tcdLName = L _ name, tcdTyVars = ltyvars+                                                , tcdRhs = ltype })+        splice unicode qual   = ppTypeOrFunSig summary links loc [name] (unLoc ltype) doc-                   (full, hdr, spaceHtml +++ equals) unicode qual+                   (full <+> fixs, hdr <+> fixs, spaceHtml +++ equals)+                   splice unicode qual   where     hdr  = hsep ([keyword "type", ppBinder summary occ] ++ ppTyVars ltyvars)     full = hdr <+> equals <+> ppLType unicode qual ltype     occ  = nameOccName . getName $ name-ppTySyn _ _ _ _ _ _ _ = error "declaration not supported by ppTySyn"+    fixs+      | summary   = noHtml+      | otherwise = ppFixities fixities qual+ppTySyn _ _ _ _ _ _ _ _ _ = error "declaration not supported by ppTySyn"  -ppTypeSig :: Bool -> [OccName] -> HsType DocName  -> Bool -> Qualification -> Html-ppTypeSig summary nms ty unicode qual =-  concatHtml htmlNames <+> dcolon unicode <+> ppType unicode qual ty+ppTypeSig :: Bool -> [OccName] -> Html  -> Bool -> Html+ppTypeSig summary nms pp_ty unicode =+  concatHtml htmlNames <+> dcolon unicode <+> pp_ty   where     htmlNames = intersperse (stringToHtml ", ") $ map (ppBinder summary) nms   ppTyName :: Name -> Html-ppTyName name-  | isNameSym name = parens (ppName name)-  | otherwise = ppName name+ppTyName = ppName Prefix   --------------------------------------------------------------------------------@@ -145,65 +235,82 @@ --------------------------------------------------------------------------------  -ppTyFamHeader :: Bool -> Bool -> TyClDecl DocName -> Bool -> Qualification -> Html-ppTyFamHeader summary associated decl unicode qual =--  (case tcdFlavour decl of-     TypeFamily+ppTyFamHeader :: Bool -> Bool -> FamilyDecl DocName+              -> Unicode -> Qualification -> Html+ppTyFamHeader summary associated d@(FamilyDecl { fdInfo = info+                                               , fdKindSig = mkind })+              unicode qual =+  (case info of+     OpenTypeFamily        | associated -> keyword "type"        | otherwise  -> keyword "type family"      DataFamily        | associated -> keyword "data"        | otherwise  -> keyword "data family"+     ClosedTypeFamily _+                    -> keyword "type family"   ) <+> -  ppTyClBinderWithVars summary decl <+>+  ppFamDeclBinderWithVars summary d <+> -  case tcdKindSig decl of+  (case mkind of     Just kind -> dcolon unicode  <+> ppLKind unicode qual kind     Nothing   -> noHtml-+  ) -ppTyFam :: Bool -> Bool -> LinksInfo -> SrcSpan -> Documentation DocName ->-              TyClDecl DocName -> Bool -> Qualification -> Html-ppTyFam summary associated links loc doc decl unicode qual+ppTyFam :: Bool -> Bool -> LinksInfo -> [DocInstance DocName] ->+           [(DocName, Fixity)] -> SrcSpan -> Documentation DocName ->+           FamilyDecl DocName -> Splice -> Unicode -> Qualification -> Html+ppTyFam summary associated links instances fixities loc doc decl splice unicode qual    | summary   = ppTyFamHeader True associated decl unicode qual   | otherwise = header_ +++ docSection qual doc +++ instancesBit    where-    docname = tcdName decl+    docname = unLoc $ fdLName decl -    header_ = topDeclElem links loc [docname] (ppTyFamHeader summary associated decl unicode qual)+    header_ = topDeclElem links loc splice [docname] $+       ppTyFamHeader summary associated decl unicode qual <+> ppFixities fixities qual -    instancesBit = ppInstances instances docname unicode qual+    instancesBit+      | FamilyDecl { fdInfo = ClosedTypeFamily eqns } <- decl+      , not summary+      = subEquations qual $ map (ppTyFamEqn . unLoc) eqns -    -- TODO: get the instances-    instances = []+      | otherwise+      = ppInstances instances docname unicode qual +    -- Individual equation of a closed type family+    ppTyFamEqn TyFamInstEqn { tfie_tycon = n, tfie_rhs = rhs+                            , tfie_pats = HsWB { hswb_cts = ts }}+      = ( ppAppNameTypes (unLoc n) [] (map unLoc ts) unicode qual+          <+> equals <+> ppType unicode qual (unLoc rhs)+        , Nothing, [] )  -------------------------------------------------------------------------------- -- * Associated Types --------------------------------------------------------------------------------  -ppAssocType :: Bool -> LinksInfo -> DocForDecl DocName -> LTyClDecl DocName -> Bool-            -> Qualification -> Html-ppAssocType summ links doc (L loc decl) unicode qual =-  case decl of-    TyFamily  {} -> ppTyFam summ True links loc (fst doc) decl unicode qual-    _            -> error "declaration type not supported by ppAssocType"+ppAssocType :: Bool -> LinksInfo -> DocForDecl DocName -> LFamilyDecl DocName+            -> [(DocName, Fixity)] -> Splice -> Unicode -> Qualification -> Html+ppAssocType summ links doc (L loc decl) fixities splice unicode qual =+   ppTyFam summ True links [] fixities loc (fst doc) decl splice unicode qual   -------------------------------------------------------------------------------- -- * TyClDecl helpers -------------------------------------------------------------------------------- +-- | Print a type family and its variables+ppFamDeclBinderWithVars :: Bool -> FamilyDecl DocName -> Html+ppFamDeclBinderWithVars summ (FamilyDecl { fdLName = lname, fdTyVars = tvs }) =+  ppAppDocNameNames summ (unLoc lname) (tyvarNames tvs) --- | Print a type family / newtype / data / class binder and its variables -ppTyClBinderWithVars :: Bool -> TyClDecl DocName -> Html-ppTyClBinderWithVars summ decl =-  ppAppDocNameNames summ (unLoc $ tcdLName decl) (tyvarNames $ tcdTyVars decl)+-- | Print a newtype / data binder and its variables+ppDataBinderWithVars :: Bool -> TyClDecl DocName -> Html+ppDataBinderWithVars summ decl =+  ppAppDocNameNames summ (tcdName decl) (tyvarNames $ tcdTyVars decl)   --------------------------------------------------------------------------------@@ -211,28 +318,32 @@ --------------------------------------------------------------------------------  --- | Print an application of a DocName and a list of HsTypes-ppAppNameTypes :: DocName -> [HsType DocName] -> Bool -> Qualification -> Html-ppAppNameTypes n ts unicode qual =-    ppTypeApp n ts (ppDocName qual) (ppParendType unicode qual)+-- | Print an application of a DocName and two lists of HsTypes (kinds, types)+ppAppNameTypes :: DocName -> [HsType DocName] -> [HsType DocName]+               -> Unicode -> Qualification -> Html+ppAppNameTypes n ks ts unicode qual =+    ppTypeApp n ks ts (\p -> ppDocName qual p True) (ppParendType unicode qual)  --- | Print an application of a DocName and a list of Names +-- | Print an application of a DocName and a list of Names ppAppDocNameNames :: Bool -> DocName -> [Name] -> Html ppAppDocNameNames summ n ns =-  ppTypeApp n ns (ppBinder summ . nameOccName . getName) ppTyName-+    ppTypeApp n [] ns ppDN ppTyName+  where+    ppDN notation = ppBinderFixity notation summ . nameOccName . getName+    ppBinderFixity Infix = ppBinderInfix+    ppBinderFixity _ = ppBinder  -- | General printing of type applications-ppTypeApp :: DocName -> [a] -> (DocName -> Html) -> (a -> Html) -> Html-ppTypeApp n (t1:t2:rest) ppDN ppT+ppTypeApp :: DocName -> [a] -> [a] -> (Notation -> DocName -> Html) -> (a -> Html) -> Html+ppTypeApp n [] (t1:t2:rest) ppDN ppT   | operator, not . null $ rest = parens opApp <+> hsep (map ppT rest)   | operator                    = opApp   where     operator = isNameSym . getName $ n-    opApp = ppT t1 <+> ppDN n <+> ppT t2+    opApp = ppT t1 <+> ppDN Infix n <+> ppT t2 -ppTypeApp n ts ppDN ppT = ppDN n <+> hsep (map ppT ts)+ppTypeApp n ks ts ppDN ppT = ppDN Prefix n <+> hsep (map ppT $ ks ++ ts)   -------------------------------------------------------------------------------@@ -240,30 +351,30 @@ -------------------------------------------------------------------------------  -ppLContext, ppLContextNoArrow :: Located (HsContext DocName) -> Bool+ppLContext, ppLContextNoArrow :: Located (HsContext DocName) -> Unicode                               -> Qualification -> Html ppLContext        = ppContext        . unLoc ppLContextNoArrow = ppContextNoArrow . unLoc  -ppContextNoArrow :: HsContext DocName -> Bool -> Qualification -> Html+ppContextNoArrow :: HsContext DocName -> Unicode -> Qualification -> Html ppContextNoArrow []  _       _     = noHtml ppContextNoArrow cxt unicode qual = ppHsContext (map unLoc cxt) unicode qual  -ppContextNoLocs :: [HsType DocName] -> Bool -> Qualification -> Html+ppContextNoLocs :: [HsType DocName] -> Unicode -> Qualification -> Html ppContextNoLocs []  _       _     = noHtml ppContextNoLocs cxt unicode qual = ppHsContext cxt unicode qual     <+> darrow unicode  -ppContext :: HsContext DocName -> Bool -> Qualification -> Html+ppContext :: HsContext DocName -> Unicode -> Qualification -> Html ppContext cxt unicode qual = ppContextNoLocs (map unLoc cxt) unicode qual  -ppHsContext :: [HsType DocName] -> Bool -> Qualification-> Html+ppHsContext :: [HsType DocName] -> Unicode -> Qualification-> Html ppHsContext []  _       _     = noHtml-ppHsContext [p] unicode qual = ppType unicode qual p+ppHsContext [p] unicode qual = ppCtxType unicode qual p ppHsContext cxt unicode qual = parenList (map (ppType unicode qual) cxt)  @@ -274,7 +385,7 @@  ppClassHdr :: Bool -> Located [LHsType DocName] -> DocName            -> LHsTyVarBndrs DocName -> [Located ([DocName], [DocName])]-           -> Bool -> Qualification -> Html+           -> Unicode -> Qualification -> Html ppClassHdr summ lctxt n tvs fds unicode qual =   keyword "class"   <+> (if not . null . unLoc $ lctxt then ppLContext lctxt unicode qual else noHtml)@@ -282,32 +393,31 @@   <+> ppFds fds unicode qual  -ppFds :: [Located ([DocName], [DocName])] -> Bool -> Qualification -> Html+ppFds :: [Located ([DocName], [DocName])] -> Unicode -> Qualification -> Html ppFds fds unicode qual =   if null fds then noHtml else         char '|' <+> hsep (punctuate comma (map (fundep . unLoc) fds))   where-        fundep (vars1,vars2) = hsep (map (ppDocName qual) vars1) <+> arrow unicode <+>-                               hsep (map (ppDocName qual) vars2)-+        fundep (vars1,vars2) = ppVars vars1 <+> arrow unicode <+> ppVars vars2+        ppVars = hsep . map (ppDocName qual Prefix True)  ppShortClassDecl :: Bool -> LinksInfo -> TyClDecl DocName -> SrcSpan-                 -> [(DocName, DocForDecl DocName)] -> Bool -> Qualification-                 -> Html+                 -> [(DocName, DocForDecl DocName)]+                 -> Splice -> Unicode -> Qualification -> Html ppShortClassDecl summary links (ClassDecl { tcdCtxt = lctxt, tcdLName = lname, tcdTyVars = tvs                                           , tcdFDs = fds, tcdSigs = sigs, tcdATs = ats }) loc-    subdocs unicode qual = -  if null sigs && null ats-    then (if summary then id else topDeclElem links loc [nm]) hdr-    else (if summary then id else topDeclElem links loc [nm]) (hdr <+> keyword "where")-      +++ shortSubDecls+    subdocs splice unicode qual =+  if not (any isVanillaLSig sigs) && null ats+    then (if summary then id else topDeclElem links loc splice [nm]) hdr+    else (if summary then id else topDeclElem links loc splice [nm]) (hdr <+> keyword "where")+      +++ shortSubDecls False           (-            [ ppAssocType summary links doc at unicode qual | at <- ats-              , let doc = lookupAnySubdoc (tcdName $ unL at) subdocs ]  +++            [ ppAssocType summary links doc at [] splice unicode qual | at <- ats+              , let doc = lookupAnySubdoc (unL $ fdLName $ unL at) subdocs ]  ++                  -- ToDo: add associated type defaults -            [ ppFunSig summary links loc doc names typ unicode qual+            [ ppFunSig summary links loc doc names typ [] splice unicode qual               | L _ (TypeSig lnames (L _ typ)) <- sigs               , let doc = lookupAnySubdoc (head names) subdocs                     names = map unLoc lnames ]@@ -318,57 +428,93 @@   where     hdr = ppClassHdr summary lctxt (unLoc lname) tvs fds unicode qual     nm  = unLoc lname-ppShortClassDecl _ _ _ _ _ _ _ = error "declaration type not supported by ppShortClassDecl"+ppShortClassDecl _ _ _ _ _ _ _ _ = error "declaration type not supported by ppShortClassDecl"   -ppClassDecl :: Bool -> LinksInfo -> [DocInstance DocName] -> SrcSpan-            -> Documentation DocName -> [(DocName, DocForDecl DocName)]-            -> TyClDecl DocName -> Bool -> Qualification -> Html-ppClassDecl summary links instances loc d subdocs+ppClassDecl :: Bool -> LinksInfo -> [DocInstance DocName] -> [(DocName, Fixity)]+            -> SrcSpan -> Documentation DocName+            -> [(DocName, DocForDecl DocName)] -> TyClDecl DocName+            -> Splice -> Unicode -> Qualification -> Html+ppClassDecl summary links instances fixities loc d subdocs         decl@(ClassDecl { tcdCtxt = lctxt, tcdLName = lname, tcdTyVars = ltyvars-                        , tcdFDs = lfds, tcdSigs = lsigs, tcdATs = ats }) unicode qual-  | summary = ppShortClassDecl summary links decl loc subdocs unicode qual+                        , tcdFDs = lfds, tcdSigs = lsigs, tcdATs = ats })+            splice unicode qual+  | summary = ppShortClassDecl summary links decl loc subdocs splice unicode qual   | otherwise = classheader +++ docSection qual d-                  +++ atBit +++ methodBit  +++ instancesBit+                  +++ minimalBit +++ atBit +++ methodBit +++ instancesBit   where     classheader-      | null lsigs = topDeclElem links loc [nm] (hdr unicode qual)-      | otherwise  = topDeclElem links loc [nm] (hdr unicode qual <+> keyword "where")+      | any isVanillaLSig lsigs = topDeclElem links loc splice [nm] (hdr unicode qual <+> keyword "where" <+> fixs)+      | otherwise = topDeclElem links loc splice [nm] (hdr unicode qual <+> fixs) -    nm   = unLoc $ tcdLName decl+    -- Only the fixity relevant to the class header+    fixs = ppFixities [ f | f@(n,_) <- fixities, n == unLoc lname ] qual +    nm   = tcdName decl+     hdr = ppClassHdr summary lctxt (unLoc lname) ltyvars lfds      -- ToDo: add assocatied typ defaults-    atBit = subAssociatedTypes [ ppAssocType summary links doc at unicode qual+    atBit = subAssociatedTypes [ ppAssocType summary links doc at subfixs splice unicode qual                       | at <- ats-                      , let doc = lookupAnySubdoc (tcdName $ unL at) subdocs ]+                      , let n = unL . fdLName $ unL at+                            doc = lookupAnySubdoc (unL $ fdLName $ unL at) subdocs+                            subfixs = [ f | f@(n',_) <- fixities, n == n' ] ] -    methodBit = subMethods [ ppFunSig summary links loc doc names typ unicode qual+    methodBit = subMethods [ ppFunSig summary links loc doc names typ subfixs splice unicode qual                            | L _ (TypeSig lnames (L _ typ)) <- lsigs                            , let doc = lookupAnySubdoc (head names) subdocs+                                 subfixs = [ f | n <- names+                                               , f@(n',_) <- fixities+                                               , n == n' ]                                  names = map unLoc lnames ]                            -- FIXME: is taking just the first name ok? Is it possible that                            -- there are different subdocs for different names in a single                            -- type signature? +    minimalBit = case [ s | L _ (MinimalSig s) <- lsigs ] of+      -- Miminal complete definition = every shown method+      And xs : _ | sort [getName n | Var (L _ n) <- xs] ==+                   sort [getName n | L _ (TypeSig ns _) <- lsigs, L _ n <- ns]+        -> noHtml++      -- Minimal complete definition = the only shown method+      Var (L _ n) : _ | [getName n] ==+                        [getName n' | L _ (TypeSig ns _) <- lsigs, L _ n' <- ns]+        -> noHtml++      -- Minimal complete definition = nothing+      And [] : _ -> subMinimal $ toHtml "Nothing"++      m : _  -> subMinimal $ ppMinimal False m+      _ -> noHtml++    ppMinimal _ (Var (L _ n)) = ppDocName qual Prefix True n+    ppMinimal _ (And fs) = foldr1 (\a b -> a+++", "+++b) $ map (ppMinimal True) fs+    ppMinimal p (Or fs) = wrap $ foldr1 (\a b -> a+++" | "+++b) $ map (ppMinimal False) fs+      where wrap | p = parens | otherwise = id+     instancesBit = ppInstances instances nm unicode qual -ppClassDecl _ _ _ _ _ _ _ _ _ = error "declaration type not supported by ppShortClassDecl"+ppClassDecl _ _ _ _ _ _ _ _ _ _ _ = error "declaration type not supported by ppShortClassDecl"  -ppInstances :: [DocInstance DocName] -> DocName -> Bool -> Qualification -> Html+ppInstances :: [DocInstance DocName] -> DocName -> Unicode -> Qualification -> Html ppInstances instances baseName unicode qual   = subInstances qual instName (map instDecl instances)   where     instName = getOccString $ getName baseName     instDecl :: DocInstance DocName -> SubDecl     instDecl (inst, maybeDoc) = (instHead inst, maybeDoc, [])-    instHead ([],   n, ts) = ppAppNameTypes n ts unicode qual-    instHead (ctxt, n, ts) = ppContextNoLocs ctxt unicode qual-        <+> ppAppNameTypes n ts unicode qual-+    instHead (n, ks, ts, ClassInst cs) = ppContextNoLocs cs unicode qual+        <+> ppAppNameTypes n ks ts unicode qual+    instHead (n, ks, ts, TypeInst rhs) = keyword "type"+        <+> ppAppNameTypes n ks ts unicode qual+        <+> maybe noHtml (\t -> equals <+> ppType unicode qual t) rhs+    instHead (n, ks, ts, DataInst dd) = keyword "data"+        <+> ppAppNameTypes n ks ts unicode qual+        <+> ppShortDataDecl False True dd unicode qual  lookupAnySubdoc :: Eq id1 => id1 -> [(id1, DocForDecl id2)] -> DocForDecl id2 lookupAnySubdoc n = fromMaybe noDocForDecl . lookup n@@ -380,48 +526,52 @@   -- TODO: print contexts-ppShortDataDecl :: Bool -> LinksInfo -> SrcSpan -> TyClDecl DocName -> Bool-                -> Qualification -> Html-ppShortDataDecl summary _links _loc dataDecl unicode qual+ppShortDataDecl :: Bool -> Bool -> TyClDecl DocName -> Unicode -> Qualification -> Html+ppShortDataDecl summary dataInst dataDecl unicode qual    | [] <- cons = dataHeader    | [lcon] <- cons, ResTyH98 <- resTy,-    (cHead,cBody,cFoot) <- ppShortConstrParts summary (unLoc lcon) unicode qual+    (cHead,cBody,cFoot) <- ppShortConstrParts summary dataInst (unLoc lcon) unicode qual        = (dataHeader <+> equals <+> cHead) +++ cBody +++ cFoot    | ResTyH98 <- resTy = dataHeader-      +++ shortSubDecls (zipWith doConstr ('=':repeat '|') cons)+      +++ shortSubDecls dataInst (zipWith doConstr ('=':repeat '|') cons)    | otherwise = (dataHeader <+> keyword "where")-      +++ shortSubDecls (map doGADTConstr cons)+      +++ shortSubDecls dataInst (map doGADTConstr cons)    where-    dataHeader = ppDataHeader summary dataDecl unicode qual+    dataHeader+      | dataInst  = noHtml+      | otherwise = ppDataHeader summary dataDecl unicode qual     doConstr c con = toHtml [c] <+> ppShortConstr summary (unLoc con) unicode qual     doGADTConstr con = ppShortConstr summary (unLoc con) unicode qual -    cons      = td_cons (tcdTyDefn dataDecl)+    cons      = dd_cons (tcdDataDefn dataDecl)     resTy     = (con_res . unLoc . head) cons  -ppDataDecl :: Bool -> LinksInfo -> [DocInstance DocName] ->+ppDataDecl :: Bool -> LinksInfo -> [DocInstance DocName] -> [(DocName, Fixity)] ->               [(DocName, DocForDecl DocName)] ->-              SrcSpan -> Documentation DocName -> TyClDecl DocName -> Bool ->-              Qualification -> Html-ppDataDecl summary links instances subdocs loc doc dataDecl unicode qual+              SrcSpan -> Documentation DocName -> TyClDecl DocName ->+              Splice -> Unicode -> Qualification -> Html+ppDataDecl summary links instances fixities subdocs loc doc dataDecl+           splice unicode qual -  | summary   = ppShortDataDecl summary links loc dataDecl unicode qual+  | summary   = ppShortDataDecl summary False dataDecl unicode qual   | otherwise = header_ +++ docSection qual doc +++ constrBit +++ instancesBit    where-    docname   = unLoc . tcdLName $ dataDecl-    cons      = td_cons (tcdTyDefn dataDecl)+    docname   = tcdName dataDecl+    cons      = dd_cons (tcdDataDefn dataDecl)     resTy     = (con_res . unLoc . head) cons -    header_ = topDeclElem links loc [docname] (ppDataHeader summary dataDecl unicode qual-             <+> whereBit)+    header_ = topDeclElem links loc splice [docname] $+             ppDataHeader summary dataDecl unicode qual <+> whereBit <+> fix +    fix = ppFixities (filter (\(n,_) -> n == docname) fixities) qual+     whereBit       | null cons = noHtml       | otherwise = case resTy of@@ -429,22 +579,25 @@         _ -> noHtml      constrBit = subConstructors qual-      (map (ppSideBySideConstr subdocs unicode qual) cons)+      [ ppSideBySideConstr subdocs subfixs unicode qual c+      | c <- cons+      , let subfixs = filter (\(n,_) -> n == unLoc (con_name (unLoc c))) fixities+      ]      instancesBit = ppInstances instances docname unicode qual   -ppShortConstr :: Bool -> ConDecl DocName -> Bool -> Qualification -> Html+ppShortConstr :: Bool -> ConDecl DocName -> Unicode -> Qualification -> Html ppShortConstr summary con unicode qual = cHead <+> cBody <+> cFoot   where-    (cHead,cBody,cFoot) = ppShortConstrParts summary con unicode qual+    (cHead,cBody,cFoot) = ppShortConstrParts summary False con unicode qual   -- returns three pieces: header, body, footer so that header & footer can be -- incorporated into the declaration-ppShortConstrParts :: Bool -> ConDecl DocName -> Bool -> Qualification -> (Html, Html, Html)-ppShortConstrParts summary con unicode qual = case con_res con of+ppShortConstrParts :: Bool -> Bool -> ConDecl DocName -> Unicode -> Qualification -> (Html, Html, Html)+ppShortConstrParts summary dataInst con unicode qual = case con_res con of   ResTyH98 -> case con_details con of     PrefixCon args ->       (header_ unicode qual +++ hsep (ppBinder summary occ@@ -455,7 +608,7 @@        char '}')     InfixCon arg1 arg2 ->       (header_ unicode qual +++ hsep [ppLParendType unicode qual arg1,-            ppBinder summary occ, ppLParendType unicode qual arg2],+            ppBinderInfix summary occ, ppLParendType unicode qual arg2],        noHtml, noHtml)    ResTyGADT resTy -> case con_details con of@@ -473,7 +626,7 @@     InfixCon arg1 arg2 -> (doGADTCon [arg1, arg2] resTy, noHtml, noHtml)    where-    doRecordFields fields = shortSubDecls (map (ppShortField summary unicode qual) fields)+    doRecordFields fields = shortSubDecls dataInst (map (ppShortField summary unicode qual) fields)     doGADTCon args resTy = ppBinder summary occ <+> dcolon unicode <+> hsep [                              ppForAll forall_ ltvs lcontext unicode qual,                              ppLType unicode qual (foldr mkFunTy resTy args) ]@@ -489,7 +642,7 @@   -- ppConstrHdr is for (non-GADT) existentials constructors' syntax-ppConstrHdr :: HsExplicitFlag -> [Name] -> HsContext DocName -> Bool+ppConstrHdr :: HsExplicitFlag -> [Name] -> HsContext DocName -> Unicode             -> Qualification -> Html ppConstrHdr forall_ tvs ctxt unicode qual  = (if null tvs then noHtml else ppForall)@@ -498,26 +651,28 @@         <+> darrow unicode +++ toHtml " ")   where     ppForall = case forall_ of-      Explicit -> forallSymbol unicode <+> hsep (map ppName tvs) <+> toHtml ". "+      Explicit -> forallSymbol unicode <+> hsep (map (ppName Prefix) tvs) <+> toHtml ". "       Implicit -> noHtml  -ppSideBySideConstr :: [(DocName, DocForDecl DocName)] -> Bool -> Qualification-                   -> LConDecl DocName -> SubDecl-ppSideBySideConstr subdocs unicode qual (L _ con) = (decl, mbDoc, fieldPart)+ppSideBySideConstr :: [(DocName, DocForDecl DocName)] -> [(DocName, Fixity)]+                   -> Unicode -> Qualification -> LConDecl DocName -> SubDecl+ppSideBySideConstr subdocs fixities unicode qual (L _ con) = (decl, mbDoc, fieldPart)  where     decl = case con_res con of       ResTyH98 -> case con_details con of         PrefixCon args ->-          hsep ((header_ unicode qual +++ ppBinder False occ)+          hsep ((header_ +++ ppBinder False occ)             : map (ppLParendType unicode qual) args)+          <+> fixity -        RecCon _ -> header_ unicode qual +++ ppBinder False occ+        RecCon _ -> header_ +++ ppBinder False occ <+> fixity          InfixCon arg1 arg2 ->-          hsep [header_ unicode qual +++ ppLParendType unicode qual arg1,-            ppBinder False occ,+          hsep [header_ +++ ppLParendType unicode qual arg1,+            ppBinderInfix False occ,             ppLParendType unicode qual arg2]+          <+> fixity        ResTyGADT resTy -> case con_details con of         -- prefix & infix could also use hsConDeclArgTys if it seemed to@@ -533,12 +688,13 @@     doRecordFields fields = subFields qual       (map (ppSideBySideField subdocs unicode qual) fields)     doGADTCon :: [LHsType DocName] -> Located (HsType DocName) -> Html-    doGADTCon args resTy =-      ppBinder False occ <+> dcolon unicode+    doGADTCon args resTy = ppBinder False occ <+> dcolon unicode         <+> hsep [ppForAll forall_ ltvs (con_cxt con) unicode qual,                   ppLType unicode qual (foldr mkFunTy resTy args) ]+        <+> fixity -    header_ = ppConstrHdr forall_ tyVars context+    fixity  = ppFixities fixities qual+    header_ = ppConstrHdr forall_ tyVars context unicode qual     occ     = nameOccName . getName . unLoc . con_name $ con     ltvs    = con_qvars con     tyVars  = tyvarNames (con_qvars con)@@ -550,8 +706,8 @@     mkFunTy a b = noLoc (HsFunTy a b)  -ppSideBySideField :: [(DocName, DocForDecl DocName)] -> Bool -> Qualification-                  -> ConDeclField DocName ->  SubDecl+ppSideBySideField :: [(DocName, DocForDecl DocName)] -> Unicode -> Qualification+                  -> ConDeclField DocName -> SubDecl ppSideBySideField subdocs unicode qual (ConDeclField (L _ name) ltype _) =   (ppBinder False (nameOccName . getName $ name) <+> dcolon unicode <+> ppLType unicode qual ltype,     mbDoc,@@ -561,7 +717,7 @@     mbDoc = lookup name subdocs >>= combineDocumentation . fst  -ppShortField :: Bool -> Bool -> Qualification -> ConDeclField DocName -> Html+ppShortField :: Bool -> Unicode -> Qualification -> ConDeclField DocName -> Html ppShortField summary unicode qual (ConDeclField (L _ name) ltype _)   = ppBinder summary (nameOccName . getName $ name)     <+> dcolon unicode <+> ppLType unicode qual ltype@@ -569,15 +725,16 @@  -- | Print the LHS of a data\/newtype declaration. -- Currently doesn't handle 'data instance' decls or kind signatures-ppDataHeader :: Bool -> TyClDecl DocName -> Bool -> Qualification -> Html-ppDataHeader summary decl@(TyDecl { tcdTyDefn = TyData { td_ND = nd, td_ctxt = ctxt } }) +ppDataHeader :: Bool -> TyClDecl DocName -> Unicode -> Qualification -> Html+ppDataHeader summary decl@(DataDecl { tcdDataDefn = HsDataDefn { dd_ND = nd+                                                               , dd_ctxt = ctxt } })              unicode qual   = -- newtype or data     (case nd of { NewType -> keyword "newtype"; DataType -> keyword "data" }) <+>     -- context     ppLContext ctxt unicode qual <+>     -- T a b c ..., or a :+: b-    ppTyClBinderWithVars summary decl+    ppDataBinderWithVars summary decl ppDataHeader _ _ _ _ = error "ppDataHeader: illegal argument"  @@ -602,14 +759,16 @@ --------------------------------------------------------------------------------  -pREC_TOP, pREC_FUN, pREC_OP, pREC_CON :: Int+pREC_TOP, pREC_CTX, pREC_FUN, pREC_OP, pREC_CON :: Int  pREC_TOP = 0 :: Int   -- type in ParseIface.y in GHC-pREC_FUN = 1 :: Int   -- btype in ParseIface.y in GHC+pREC_CTX = 1 :: Int   -- Used for single contexts, eg. ctx => type+                      -- (as opposed to (ctx1, ctx2) => type)+pREC_FUN = 2 :: Int   -- btype in ParseIface.y in GHC                       -- Used for LH arg of (->)-pREC_OP  = 2 :: Int   -- Used for arg of any infix operator+pREC_OP  = 3 :: Int   -- Used for arg of any infix operator                       -- (we don't keep their fixities around)-pREC_CON = 3 :: Int   -- Used for arg of type applicn:+pREC_CON = 4 :: Int   -- Used for arg of type applicn:                       -- always parenthesise unless atomic  maybeParen :: Int           -- Precedence of context@@ -619,29 +778,31 @@                                | otherwise            = p  -ppLType, ppLParendType, ppLFunLhType :: Bool -> Qualification+ppLType, ppLParendType, ppLFunLhType :: Unicode -> Qualification                                      -> Located (HsType DocName) -> Html ppLType       unicode qual y = ppType unicode qual (unLoc y) ppLParendType unicode qual y = ppParendType unicode qual (unLoc y) ppLFunLhType  unicode qual y = ppFunLhType unicode qual (unLoc y)  -ppType, ppParendType, ppFunLhType :: Bool -> Qualification-> HsType DocName -> Html+ppType, ppCtxType, ppParendType, ppFunLhType :: Unicode -> Qualification+                                             -> HsType DocName -> Html ppType       unicode qual ty = ppr_mono_ty pREC_TOP ty unicode qual+ppCtxType    unicode qual ty = ppr_mono_ty pREC_CTX ty unicode qual ppParendType unicode qual ty = ppr_mono_ty pREC_CON ty unicode qual ppFunLhType  unicode qual ty = ppr_mono_ty pREC_FUN ty unicode qual -ppLKind :: Bool -> Qualification-> LHsKind DocName -> Html+ppLKind :: Unicode -> Qualification -> LHsKind DocName -> Html ppLKind unicode qual y = ppKind unicode qual (unLoc y) -ppKind :: Bool -> Qualification-> HsKind DocName -> Html+ppKind :: Unicode -> Qualification -> HsKind DocName -> Html ppKind unicode qual ki = ppr_mono_ty pREC_TOP ki unicode qual  -- Drop top-level for-all type variables in user style -- since they are implicit in Haskell  ppForAll :: HsExplicitFlag -> LHsTyVarBndrs DocName-         -> Located (HsContext DocName) -> Bool -> Qualification -> Html+         -> Located (HsContext DocName) -> Unicode -> Qualification -> Html ppForAll expl tvs cxt unicode qual   | show_forall = forall_part <+> ppLContext cxt unicode qual   | otherwise   = ppLContext cxt unicode qual@@ -651,24 +812,30 @@     forall_part = hsep (forallSymbol unicode : ppTyVars tvs) +++ dot  -ppr_mono_lty :: Int -> LHsType DocName -> Bool -> Qualification -> Html+ppr_mono_lty :: Int -> LHsType DocName -> Unicode -> Qualification -> Html ppr_mono_lty ctxt_prec ty = ppr_mono_ty ctxt_prec (unLoc ty)  -ppr_mono_ty :: Int -> HsType DocName -> Bool -> Qualification -> Html+ppr_mono_ty :: Int -> HsType DocName -> Unicode -> Qualification -> Html ppr_mono_ty ctxt_prec (HsForAllTy expl tvs ctxt ty) unicode qual   = maybeParen ctxt_prec pREC_FUN $     hsep [ppForAll expl tvs ctxt unicode qual, ppr_mono_lty pREC_TOP ty unicode qual] +-- UnicodeSyntax alternatives+ppr_mono_ty _ (HsTyVar name) True _+  | getOccString (getName name) == "*"    = toHtml "★"+  | getOccString (getName name) == "(->)" = toHtml "(→)"+ ppr_mono_ty _         (HsBangTy b ty)     u q = ppBang b +++ ppLParendType u q ty-ppr_mono_ty _         (HsTyVar name)      _ q = ppDocName q name+ppr_mono_ty _         (HsTyVar name)      _ q = ppDocName q Prefix True name ppr_mono_ty ctxt_prec (HsFunTy ty1 ty2)   u q = ppr_fun_ty ctxt_prec ty1 ty2 u q ppr_mono_ty _         (HsTupleTy con tys) u q = tupleParens con (map (ppLType u q) tys) ppr_mono_ty _         (HsKindSig ty kind) u q =     parens (ppr_mono_lty pREC_TOP ty u q <+> dcolon u <+> ppLKind u q kind) ppr_mono_ty _         (HsListTy ty)       u q = brackets (ppr_mono_lty pREC_TOP ty u q) ppr_mono_ty _         (HsPArrTy ty)       u q = pabrackets (ppr_mono_lty pREC_TOP ty u q)-ppr_mono_ty _         (HsIParamTy n ty)   u q = brackets (ppIPName n <+> dcolon u <+> ppr_mono_lty pREC_TOP ty u q)+ppr_mono_ty ctxt_prec (HsIParamTy n ty)   u q =+    maybeParen ctxt_prec pREC_CTX $ ppIPName n <+> dcolon u <+> ppr_mono_lty pREC_TOP ty u q ppr_mono_ty _         (HsSpliceTy {})     _ _ = error "ppr_mono_ty HsSpliceTy" ppr_mono_ty _         (HsQuasiQuoteTy {}) _ _ = error "ppr_mono_ty HsQuasiQuoteTy" ppr_mono_ty _         (HsRecTy {})        _ _ = error "ppr_mono_ty HsRecTy"@@ -678,7 +845,7 @@ ppr_mono_ty _         (HsWrapTy {})       _ _ = error "ppr_mono_ty HsWrapTy"  ppr_mono_ty ctxt_prec (HsEqTy ty1 ty2) unicode qual-  = maybeParen ctxt_prec pREC_OP $+  = maybeParen ctxt_prec pREC_CTX $     ppr_mono_lty pREC_OP ty1 unicode qual <+> char '~' <+> ppr_mono_lty pREC_OP ty2 unicode qual  ppr_mono_ty ctxt_prec (HsAppTy fun_ty arg_ty) unicode qual@@ -689,8 +856,7 @@   = maybeParen ctxt_prec pREC_FUN $     ppr_mono_lty pREC_OP ty1 unicode qual <+> ppr_op <+> ppr_mono_lty pREC_OP ty2 unicode qual   where-    ppr_op = if not (isSymOcc occ) then quote (ppLDocName qual op) else ppLDocName qual op-    occ = nameOccName . getName . unLoc $ op+    ppr_op = ppLDocName qual Infix op  ppr_mono_ty ctxt_prec (HsParTy ty) unicode qual --  = parens (ppr_mono_lty pREC_TOP ty)@@ -706,12 +872,10 @@ ppr_tylit (HsStrTy s) = toHtml (show s)  -ppr_fun_ty :: Int -> LHsType DocName -> LHsType DocName -> Bool -> Qualification -> Html+ppr_fun_ty :: Int -> LHsType DocName -> LHsType DocName -> Unicode -> Qualification -> Html ppr_fun_ty ctxt_prec ty1 ty2 unicode qual   = let p1 = ppr_mono_lty pREC_FUN ty1 unicode qual         p2 = ppr_mono_lty pREC_TOP ty2 unicode qual     in     maybeParen ctxt_prec pREC_FUN $     hsep [p1, arrow unicode <+> p2]--
src/Haddock/Backends/Xhtml/DocMarkup.hs view
@@ -14,46 +14,65 @@   docToHtml,   rdrDocToHtml,   origDocToHtml,+  docToHtmlNoAnchors,    docElement, docSection, docSection_, ) where +import Control.Applicative ((<$>))  import Haddock.Backends.Xhtml.Names import Haddock.Backends.Xhtml.Utils import Haddock.Types import Haddock.Utils+import Haddock.Doc (combineDocumentation) -import Text.XHtml hiding ( name, title, p, quote )+import Text.XHtml hiding ( name, p, quote ) import Data.Maybe (fromMaybe)  import GHC --parHtmlMarkup :: Qualification -> (a -> Html) -> DocMarkup a Html-parHtmlMarkup qual ppId = Markup {+parHtmlMarkup :: Qualification -> Bool+              -> (Bool -> a -> Html) -> DocMarkup a Html+parHtmlMarkup qual insertAnchors ppId = Markup {   markupEmpty                = noHtml,   markupString               = toHtml,   markupParagraph            = paragraph,   markupAppend               = (+++),-  markupIdentifier           = thecode . ppId,+  markupIdentifier           = thecode . ppId insertAnchors,   markupIdentifierUnchecked  = thecode . ppUncheckedLink qual,   markupModule               = \m -> let (mdl,ref) = break (=='#') m                                      in ppModuleRef (mkModuleName mdl) ref,   markupWarning              = thediv ! [theclass "warning"],   markupEmphasis             = emphasize,+  markupBold                 = strong,   markupMonospaced           = thecode,   markupUnorderedList        = unordList,   markupOrderedList          = ordList,   markupDefList              = defList,   markupCodeBlock            = pre,-  markupHyperlink            = \(Hyperlink url mLabel) -> anchor ! [href url] << fromMaybe url mLabel,+  markupHyperlink            = \(Hyperlink url mLabel)+                               -> if insertAnchors+                                  then anchor ! [href url]+                                       << fromMaybe url mLabel+                                  else toHtml $ fromMaybe url mLabel,   markupAName                = \aname -> namedAnchor aname << "",-  markupPic                  = \path -> image ! [src path],+  markupPic                  = \(Picture uri t) -> image ! ([src uri] ++ fromMaybe [] (return . title <$> t)),   markupProperty             = pre . toHtml,-  markupExample              = examplesToHtml+  markupExample              = examplesToHtml,+  markupHeader               = \(Header l t) -> makeHeader l t   }   where+    makeHeader :: Int -> Html -> Html+    makeHeader 1 mkup = h1 mkup+    makeHeader 2 mkup = h2 mkup+    makeHeader 3 mkup = h3 mkup+    makeHeader 4 mkup = h4 mkup+    makeHeader 5 mkup = h5 mkup+    makeHeader 6 mkup = h6 mkup+    makeHeader l _ = error $ "Somehow got a header level `" ++ show l ++ "' in DocMarkup!"++     examplesToHtml l = pre (concatHtml $ map exampleToHtml l) ! [theclass "screen"]      exampleToHtml (Example expression result) = htmlExample@@ -67,17 +86,22 @@ -- ugly extra whitespace with some browsers).  FIXME: Does this still apply? docToHtml :: Qualification -> Doc DocName -> Html docToHtml qual = markup fmt . cleanup-  where fmt = parHtmlMarkup qual (ppDocName qual)+  where fmt = parHtmlMarkup qual True (ppDocName qual Raw) +-- | Same as 'docToHtml' but it doesn't insert the 'anchor' element+-- in links. This is used to generate the Contents box elements.+docToHtmlNoAnchors :: Qualification -> Doc DocName -> Html+docToHtmlNoAnchors qual = markup fmt . cleanup+  where fmt = parHtmlMarkup qual False (ppDocName qual Raw)  origDocToHtml :: Qualification -> Doc Name -> Html origDocToHtml qual = markup fmt . cleanup-  where fmt = parHtmlMarkup qual ppName+  where fmt = parHtmlMarkup qual True (const $ ppName Raw)   rdrDocToHtml :: Qualification -> Doc RdrName -> Html rdrDocToHtml qual = markup fmt . cleanup-  where fmt = parHtmlMarkup qual ppRdrName+  where fmt = parHtmlMarkup qual True (const ppRdrName)   docElement :: (Html -> Html) -> Html -> Html
src/Haddock/Backends/Xhtml/Layout.hs view
@@ -29,9 +29,11 @@   subArguments,   subAssociatedTypes,   subConstructors,+  subEquations,   subFields,   subInstances,   subMethods,+  subMinimal,    topDeclElem, declElem, ) where@@ -102,8 +104,12 @@ shortDeclList items = ulist << map (li ! [theclass "src short"] <<) items  -shortSubDecls :: [Html] -> Html-shortSubDecls items = ulist ! [theclass "subs"] << map (li <<) items+shortSubDecls :: Bool -> [Html] -> Html+shortSubDecls inst items = ulist ! [theclass c] << map (i <<) items+  where i | inst      = li ! [theclass "inst"]+          | otherwise = li+        c | inst      = "inst"+          | otherwise = "subs"   divTopDecl :: Html -> Html@@ -165,6 +171,10 @@ subFields qual = divSubDecls "fields" "Fields" . subDlist qual  +subEquations :: Qualification -> [SubDecl] -> Html+subEquations qual = divSubDecls "equations" "Equations" . subTable qual++ subInstances :: Qualification -> String -> [SubDecl] -> Html subInstances qual nm = maybe noHtml wrap . instTable   where@@ -177,7 +187,10 @@ subMethods :: [Html] -> Html subMethods = divSubDecls "methods" "Methods" . subBlock +subMinimal :: Html -> Html+subMinimal = divSubDecls "minimal" "Minimal complete definition" . Just . declElem + -- a box for displaying code declElem :: Html -> Html declElem = paragraph ! [theclass "src"]@@ -185,11 +198,15 @@  -- a box for top level documented names -- it adds a source and wiki link at the right hand side of the box-topDeclElem :: LinksInfo -> SrcSpan -> [DocName] -> Html -> Html-topDeclElem ((_,_,sourceMap), (_,_,maybe_wiki_url)) loc names html =-    declElem << (html +++ srcLink +++ wikiLink)-  where srcLink =-          case Map.lookup origPkg sourceMap of+topDeclElem :: LinksInfo -> SrcSpan -> Bool -> [DocName] -> Html -> Html+topDeclElem ((_,_,sourceMap,lineMap), (_,_,maybe_wiki_url)) loc splice names html =+    declElem << (html <+> srcLink <+> wikiLink)+  where srcLink = let nameUrl = Map.lookup origPkg sourceMap+                      lineUrl = Map.lookup origPkg lineMap+                      mUrl | splice    = lineUrl+                                         -- Use the lineUrl as a backup+                           | otherwise = maybe lineUrl Just nameUrl in+          case mUrl of             Nothing  -> noHtml             Just url -> let url' = spliceURL (Just fname) (Just origMod)                                                (Just n) (Just loc) url@@ -216,4 +233,3 @@         fname = case loc of                 RealSrcSpan l -> unpackFS (srcSpanFile l)                 UnhelpfulSpan _ -> error "topDeclElem UnhelpfulSpan"-
src/Haddock/Backends/Xhtml/Names.hs view
@@ -12,10 +12,8 @@ ----------------------------------------------------------------------------- module Haddock.Backends.Xhtml.Names (   ppName, ppDocName, ppLDocName, ppRdrName, ppUncheckedLink,-  ppBinder, ppBinder',-  ppModule, ppModuleRef,-  ppIPName,-  linkId+  ppBinder, ppBinderInfix, ppBinder',+  ppModule, ppModuleRef, ppIPName, linkId, Notation(..) ) where  @@ -34,6 +32,12 @@ import FastString (unpackFS)  +-- | Indicator of how to render a 'DocName' into 'Html'+data Notation = Raw -- ^ Render as-is.+              | Infix -- ^ Render using infix notation.+              | Prefix -- ^ Render using prefix notation.+                deriving (Eq, Show)+ ppOccName :: OccName -> Html ppOccName = toHtml . occNameString @@ -42,86 +46,104 @@ ppRdrName = ppOccName . rdrNameOcc  ppIPName :: HsIPName -> Html-ppIPName = toHtml . unpackFS . hsIPNameFS+ppIPName = toHtml . ('?':) . unpackFS . hsIPNameFS   ppUncheckedLink :: Qualification -> (ModuleName, OccName) -> Html ppUncheckedLink _ (mdl, occ) = linkIdOcc' mdl (Just occ) << ppOccName occ -- TODO: apply ppQualifyName  -ppLDocName :: Qualification -> Located DocName -> Html-ppLDocName qual (L _ d) = ppDocName qual d-+-- The Bool indicates if it is to be rendered in infix notation+ppLDocName :: Qualification -> Notation -> Located DocName -> Html+ppLDocName qual notation (L _ d) = ppDocName qual notation True d -ppDocName :: Qualification -> DocName -> Html-ppDocName qual docName =+ppDocName :: Qualification -> Notation -> Bool -> DocName -> Html+ppDocName qual notation insertAnchors docName =   case docName of     Documented name mdl ->-      linkIdOcc mdl (Just (nameOccName name)) << ppQualifyName qual name mdl+      linkIdOcc mdl (Just (nameOccName name)) insertAnchors+      << ppQualifyName qual notation name mdl     Undocumented name       | isExternalName name || isWiredInName name ->-          ppQualifyName qual name (nameModule name)-      | otherwise -> ppName name-+          ppQualifyName qual notation name (nameModule name)+      | otherwise -> ppName notation name  -- | Render a name depending on the selected qualification mode-ppQualifyName :: Qualification -> Name -> Module -> Html-ppQualifyName qual name mdl =+ppQualifyName :: Qualification -> Notation -> Name -> Module -> Html+ppQualifyName qual notation name mdl =   case qual of-    NoQual   -> ppName name-    FullQual -> ppFullQualName mdl name+    NoQual   -> ppName notation name+    FullQual -> ppFullQualName notation mdl name     LocalQual localmdl ->       if moduleString mdl == moduleString localmdl-        then ppName name-        else ppFullQualName mdl name+        then ppName notation name+        else ppFullQualName notation mdl name     RelativeQual localmdl ->       case List.stripPrefix (moduleString localmdl) (moduleString mdl) of         -- local, A.x -> x-        Just []      -> ppName name+        Just []      -> ppName notation name         -- sub-module, A.B.x -> B.x         Just ('.':m) -> toHtml $ m ++ '.' : getOccString name         -- some module with same prefix, ABC.x -> ABC.x-        Just _       -> ppFullQualName mdl name+        Just _       -> ppFullQualName notation mdl name         -- some other module, D.x -> D.x-        Nothing      -> ppFullQualName mdl name+        Nothing      -> ppFullQualName notation mdl name     AliasedQual aliases localmdl ->       case (moduleString mdl == moduleString localmdl,             M.lookup mdl aliases) of-        (False, Just alias) -> ppQualName alias name-        _ -> ppName name+        (False, Just alias) -> ppQualName notation alias name+        _ -> ppName notation name  -ppFullQualName :: Module -> Name -> Html-ppFullQualName mdl name = toHtml $ moduleString mdl ++ '.' : getOccString name+ppFullQualName :: Notation -> Module -> Name -> Html+ppFullQualName notation mdl name = wrapInfix notation (getOccName name) qname+  where+    qname = toHtml $ moduleString mdl ++ '.' : getOccString name -ppQualName :: ModuleName -> Name -> Html-ppQualName mdlName name =-  toHtml $ moduleNameString mdlName ++ '.' : getOccString name+ppQualName :: Notation -> ModuleName -> Name -> Html+ppQualName notation mdlName name = wrapInfix notation (getOccName name) qname+  where+    qname = toHtml $ moduleNameString mdlName ++ '.' : getOccString name -ppName :: Name -> Html-ppName name = toHtml (getOccString name)+ppName :: Notation -> Name -> Html+ppName notation name = wrapInfix notation (getOccName name) $ toHtml (getOccString name)   ppBinder :: Bool -> OccName -> Html -- The Bool indicates whether we are generating the summary, in which case -- the binder will be a link to the full definition.-ppBinder True n = linkedAnchor (nameAnchorId n) << ppBinder' n+ppBinder True n = linkedAnchor (nameAnchorId n) << ppBinder' Prefix n ppBinder False n = namedAnchor (nameAnchorId n) ! [theclass "def"]-                        << ppBinder' n+                        << ppBinder' Prefix n +ppBinderInfix :: Bool -> OccName -> Html+ppBinderInfix True n = linkedAnchor (nameAnchorId n) << ppBinder' Infix n+ppBinderInfix False n = namedAnchor (nameAnchorId n) ! [theclass "def"]+                             << ppBinder' Infix n -ppBinder' :: OccName -> Html-ppBinder' n-  | isVarSym n = parens $ ppOccName n-  | otherwise  = ppOccName n+ppBinder' :: Notation -> OccName -> Html+ppBinder' notation n = wrapInfix notation n $ ppOccName n +wrapInfix :: Notation -> OccName -> Html -> Html+wrapInfix notation n = case notation of+  Infix | is_star_kind -> id+        | not is_sym -> quote+  Prefix | is_star_kind -> id+         | is_sym -> parens+  _ -> id+  where+    is_sym = isSymOcc n+    is_star_kind = isTcOcc n && occNameString n == "*"  linkId :: Module -> Maybe Name -> Html -> Html-linkId mdl mbName = linkIdOcc mdl (fmap nameOccName mbName)+linkId mdl mbName = linkIdOcc mdl (fmap nameOccName mbName) True  -linkIdOcc :: Module -> Maybe OccName -> Html -> Html-linkIdOcc mdl mbName = anchor ! [href url]+linkIdOcc :: Module -> Maybe OccName -> Bool -> Html -> Html+linkIdOcc mdl mbName insertAnchors =+  if insertAnchors+  then anchor ! [href url]+  else id   where     url = case mbName of       Nothing   -> moduleUrl mdl
src/Haddock/Backends/Xhtml/Types.hs view
@@ -12,7 +12,9 @@ ----------------------------------------------------------------------------- module Haddock.Backends.Xhtml.Types (   SourceURLs, WikiURLs,-  LinksInfo+  LinksInfo,+  Splice,+  Unicode, ) where  @@ -21,9 +23,15 @@   -- the base, module and entity URLs for the source code and wiki links.-type SourceURLs = (Maybe FilePath, Maybe FilePath, Map PackageId FilePath)+type SourceURLs = (Maybe FilePath, Maybe FilePath, Map PackageId FilePath, Map PackageId FilePath) type WikiURLs = (Maybe FilePath, Maybe FilePath, Maybe FilePath)   -- The URL for source and wiki links type LinksInfo = (SourceURLs, WikiURLs)++-- Whether something is a splice or not+type Splice = Bool++-- Whether unicode syntax is to be used+type Unicode = Bool
src/Haddock/Backends/Xhtml/Utils.hs view
@@ -17,13 +17,13 @@   spliceURL,   groupId, -  (<+>), char,+  (<+>), (<=>), char,   keyword, punctuate,    braces, brackets, pabrackets, parens, parenList, ubxParenList,   arrow, comma, dcolon, dot, darrow, equals, forallSymbol, quote, -  hsep,+  hsep, vcat,    collapseSection, collapseToggle, collapseControl, ) where@@ -100,10 +100,25 @@ hsep [] = noHtml hsep htmls = foldr1 (\a b -> a+++" "+++b) htmls +-- | Concatenate a series of 'Html' values vertically, with linebreaks in between.+vcat :: [Html] -> Html+vcat [] = noHtml+vcat htmls = foldr1 (\a b -> a+++br+++b) htmls + infixr 8 <+> (<+>) :: Html -> Html -> Html-a <+> b = a +++ toHtml " " +++ b+a <+> b = a +++ sep +++ b+  where+    sep = if isNoHtml a || isNoHtml b then noHtml else toHtml " "++-- | Join two 'Html' values together with a linebreak in between.+--   Has 'noHtml' as left identity.+infixr 8 <=>+(<=>) :: Html -> Html -> Html+a <=> b = a +++ sep +++ b+  where+    sep = if isNoHtml a then noHtml else br   keyword :: String -> Html
src/Haddock/Convert.hs view
@@ -18,22 +18,28 @@   import HsSyn-import TcType ( tcSplitTyConApp_maybe, tcSplitSigmaTy )+import TcType ( tcSplitSigmaTy ) import TypeRep import Type(isStrLitTy)-import Kind ( splitKindFunTys, synTyConResKind )+import Kind ( splitKindFunTys, synTyConResKind, isKind ) import Name import Var import Class import TyCon+import CoAxiom+import ConLike import DataCon+import PatSyn+import FamInstEnv import BasicTypes ( TupleSort(..) ) import TysPrim ( alphaTyVars ) import TysWiredIn ( listTyConName, eqTyCon ) import PrelNames (ipClassName) import Bag ( emptyBag )+import Unique ( getUnique ) import SrcLoc ( Located, noLoc, unLoc ) import Data.List( partition )+import Haddock.Types   -- the main function here! yay!@@ -53,95 +59,137 @@   -- later in the file (also it's used for class associated-types too.)   ATyCon tc     | Just cl <- tyConClass_maybe tc -- classes are just a little tedious-    -> TyClD $ ClassDecl+    -> let extractFamilyDecl :: TyClDecl a -> LFamilyDecl a+           extractFamilyDecl (FamDecl d) = noLoc d+           extractFamilyDecl _           =+             error "tyThingToLHsDecl: impossible associated tycon"++           atTyClDecls = [synifyTyCon Nothing at_tc | (at_tc, _) <- classATItems cl]+           atFamDecls  = map extractFamilyDecl atTyClDecls in+       TyClD $ ClassDecl          { tcdCtxt = synifyCtx (classSCTheta cl)          , tcdLName = synifyName cl          , tcdTyVars = synifyTyVars (classTyVars cl)          , tcdFDs = map (\ (l,r) -> noLoc                         (map getName l, map getName r) ) $                          snd $ classTvsFds cl-         , tcdSigs = map (noLoc . synifyIdSig DeleteTopLevelQuantification)-                         (classMethods cl)+         , tcdSigs = noLoc (MinimalSig . fmap noLoc $ classMinimalDef cl) :+                      map (noLoc . synifyIdSig DeleteTopLevelQuantification)+                        (classMethods cl)          , tcdMeths = emptyBag --ignore default method definitions, they don't affect signature          -- class associated-types are a subset of TyCon:-         , tcdATs = [noLoc (synifyTyCon at_tc) | (at_tc, _) <- classATItems cl]+         , tcdATs = atFamDecls          , tcdATDefs = [] --ignore associated type defaults          , tcdDocs = [] --we don't have any docs at this point          , tcdFVs = placeHolderNames }     | otherwise-    -> TyClD (synifyTyCon tc)+    -> TyClD (synifyTyCon Nothing tc)    -- type-constructors (e.g. Maybe) are complicated, put the definition   -- later in the file (also it's used for class associated-types too.)-  ACoAxiom ax -> InstD (FamInstD { lid_inst = synifyAxiom ax })+  ACoAxiom ax -> synifyAxiom ax    -- a data-constructor alone just gets rendered as a function:-  ADataCon dc -> SigD (TypeSig [synifyName dc]+  AConLike (RealDataCon dc) -> SigD (TypeSig [synifyName dc]     (synifyType ImplicitizeForAll (dataConUserType dc))) -synifyATDefault :: TyCon -> LFamInstDecl Name-synifyATDefault tc = noLoc (synifyAxiom ax)-  where Just ax = tyConFamilyCoercion_maybe tc+  AConLike (PatSynCon ps) ->+      let (_, _, (req_theta, prov_theta)) = patSynSig ps+      in SigD $ PatSynSig (synifyName ps)+                          (fmap (synifyType WithinType) (patSynTyDetails ps))+                          (synifyType WithinType (patSynType ps))+                          (synifyCtx req_theta)+                          (synifyCtx prov_theta) -synifyAxiom :: CoAxiom -> FamInstDecl Name-synifyAxiom (CoAxiom { co_ax_tvs = tvs, co_ax_lhs = lhs, co_ax_rhs = rhs })-  | Just (tc, args) <- tcSplitTyConApp_maybe lhs-  = let name      = synifyName tc-        typats    = map (synifyType WithinType) args-        hs_rhs_ty = synifyType WithinType rhs-    in FamInstDecl { fid_tycon = name -                   , fid_pats = HsWB { hswb_cts = typats, hswb_kvs = [], hswb_tvs = map tyVarName tvs }-                   , fid_defn = TySynonym hs_rhs_ty, fid_fvs = placeHolderNames }+synifyAxBranch :: TyCon -> CoAxBranch -> TyFamInstEqn Name+synifyAxBranch tc (CoAxBranch { cab_tvs = tkvs, cab_lhs = args, cab_rhs = rhs })+  = let name       = synifyName tc+        typats     = map (synifyType WithinType) args+        hs_rhs     = synifyType WithinType rhs+        (kvs, tvs) = partition isKindVar tkvs+    in TyFamInstEqn { tfie_tycon = name+                    , tfie_pats  = HsWB { hswb_cts = typats+                                        , hswb_kvs = map tyVarName kvs+                                        , hswb_tvs = map tyVarName tvs }+                    , tfie_rhs   = hs_rhs }++synifyAxiom :: CoAxiom br -> HsDecl Name+synifyAxiom ax@(CoAxiom { co_ax_tc = tc })+  | isOpenSynFamilyTyCon tc+  , Just branch <- coAxiomSingleBranch_maybe ax+  = InstD (TyFamInstD (TyFamInstDecl { tfid_eqn = noLoc $ synifyAxBranch tc branch+                                     , tfid_fvs = placeHolderNames }))++  | Just ax' <- isClosedSynFamilyTyCon_maybe tc+  , getUnique ax' == getUnique ax   -- without the getUniques, type error+  = TyClD (synifyTyCon (Just ax) tc)+   | otherwise-  = error "synifyAxiom" +  = error "synifyAxiom: closed/open family confusion" -synifyTyCon :: TyCon -> TyClDecl Name-synifyTyCon tc+synifyTyCon :: Maybe (CoAxiom br) -> TyCon -> TyClDecl Name+synifyTyCon coax tc   | isFunTyCon tc || isPrimTyCon tc -  = TyDecl { tcdLName = synifyName tc-           , tcdTyVars =       -- tyConTyVars doesn't work on fun/prim, but we can make them up:+  = DataDecl { tcdLName = synifyName tc+             , tcdTyVars =       -- tyConTyVars doesn't work on fun/prim, but we can make them up:                          let mk_hs_tv realKind fakeTyVar                                  = noLoc $ KindedTyVar (getName fakeTyVar)                                                        (synifyKindSig realKind)-                         in HsQTvs { hsq_kvs = []   -- No kind polymorhism+                         in HsQTvs { hsq_kvs = []   -- No kind polymorphism                                    , hsq_tvs = zipWith mk_hs_tv (fst (splitKindFunTys (tyConKind tc)))                                                                 alphaTyVars --a, b, c... which are unfortunately all kind *                                    }                             -           , tcdTyDefn = TyData { td_ND = DataType  -- arbitrary lie, they are neither +           , tcdDataDefn = HsDataDefn { dd_ND = DataType  -- arbitrary lie, they are neither                                                      -- algebraic data nor newtype:-                                , td_ctxt = noLoc []-                                , td_cType = Nothing-                                , td_kindSig = Just (synifyKindSig (tyConKind tc))+                                      , dd_ctxt = noLoc []+                                      , dd_cType = Nothing+                                      , dd_kindSig = Just (synifyKindSig (tyConKind tc))                                                -- we have their kind accurately:-                                , td_cons = []  -- No constructors-                                , td_derivs = Nothing }+                                      , dd_cons = []  -- No constructors+                                      , dd_derivs = Nothing }            , tcdFVs = placeHolderNames }+   | isSynFamilyTyCon tc -  = case synTyConRhs tc of-        SynFamilyTyCon ->-          TyFamily TypeFamily (synifyName tc) (synifyTyVars (tyConTyVars tc))-               (Just (synifyKindSig (synTyConResKind tc)))-        _ -> error "synifyTyCon: impossible open type synonym?"+  = case synTyConRhs_maybe tc of+      Just rhs ->+        let info = case rhs of+                     OpenSynFamilyTyCon -> OpenTypeFamily+                     ClosedSynFamilyTyCon (CoAxiom { co_ax_branches = branches }) ->+                       ClosedTypeFamily (brListMap (noLoc . synifyAxBranch tc) branches)+                     _ -> error "synifyTyCon: type/data family confusion"+        in FamDecl (FamilyDecl { fdInfo = info+                               , fdLName = synifyName tc+                               , fdTyVars = synifyTyVars (tyConTyVars tc)+                               , fdKindSig = Just (synifyKindSig (synTyConResKind tc)) })+      Nothing -> error "synifyTyCon: impossible open type synonym?"+   | isDataFamilyTyCon tc    = --(why no "isOpenAlgTyCon"?)     case algTyConRhs tc of         DataFamilyTyCon ->-          TyFamily DataFamily (synifyName tc) (synifyTyVars (tyConTyVars tc))-               Nothing --always kind '*'-               -- placeHolderKind+          FamDecl (FamilyDecl DataFamily (synifyName tc) (synifyTyVars (tyConTyVars tc))+                              Nothing) --always kind '*'         _ -> error "synifyTyCon: impossible open data type?"+  | isSynTyCon tc+  = case synTyConRhs_maybe tc of+        Just (SynonymTyCon ty) ->+          SynDecl { tcdLName = synifyName tc+                  , tcdTyVars = synifyTyVars (tyConTyVars tc)+                  , tcdRhs = synifyType WithinType ty+                  , tcdFVs = placeHolderNames }+        _ -> error "synifyTyCon: impossible synTyCon"   | otherwise =-  -- (closed) type, newtype, and data+  -- (closed) newtype and data   let-  -- alg_ only applies to newtype/data-  -- syn_ only applies to type-  -- others apply to both   alg_nd = if isNewTyCon tc then NewType else DataType   alg_ctx = synifyCtx (tyConStupidTheta tc)-  name = synifyName tc+  name = case coax of+    Just a -> synifyName a -- Data families are named according to their+                           -- CoAxioms, not their TyCons+    _ -> synifyName tc   tyvars = synifyTyVars (tyConTyVars tc)-  alg_kindSig = Just (tyConKind tc)+  kindSig = Just (tyConKind tc)   -- The data constructors.   --   -- Any data-constructors not exported from the module that *defines* the@@ -158,19 +206,18 @@   -- That seems like an acceptable compromise (they'll just be documented   -- in prefix position), since, otherwise, the logic (at best) gets much more   -- complicated. (would use dataConIsInfix.)-  alg_use_gadt_syntax = any (not . isVanillaDataCon) (tyConDataCons tc)-  alg_cons = map (synifyDataCon alg_use_gadt_syntax) (tyConDataCons tc)+  use_gadt_syntax = any (not . isVanillaDataCon) (tyConDataCons tc)+  cons = map (synifyDataCon use_gadt_syntax) (tyConDataCons tc)   -- "deriving" doesn't affect the signature, no need to specify any.   alg_deriv = Nothing-  syn_type = synifyType WithinType (synTyConType tc)-  defn | isSynTyCon tc = TySynonym syn_type-       | otherwise = TyData { td_ND = alg_nd, td_ctxt = alg_ctx-                            , td_cType = Nothing-                            , td_kindSig = fmap synifyKindSig alg_kindSig-                            , td_cons    = alg_cons -                            , td_derivs  = alg_deriv }- in TyDecl { tcdLName = name, tcdTyVars = tyvars, tcdTyDefn = defn-           , tcdFVs = placeHolderNames }+  defn = HsDataDefn { dd_ND      = alg_nd+                    , dd_ctxt    = alg_ctx+                    , dd_cType   = Nothing+                    , dd_kindSig = fmap synifyKindSig kindSig+                    , dd_cons    = cons +                    , dd_derivs  = alg_deriv }+ in DataDecl { tcdLName = name, tcdTyVars = tyvars, tcdDataDefn = defn+             , tcdFVs = placeHolderNames }  -- User beware: it is your responsibility to pass True (use_gadt_syntax) -- for any constructor that would be misrepresented by omitting its@@ -197,11 +244,14 @@    linear_tys = zipWith (\ty bang ->             let tySyn = synifyType WithinType ty-            in case bang of-                 HsUnpackFailed -> noLoc $ HsBangTy HsStrict tySyn-                 HsNoBang       -> tySyn-                      -- HsNoBang never appears, it's implied instead.-                 _              -> noLoc $ HsBangTy bang tySyn+                src_bang = case bang of+                             HsUnpack {} -> HsUserBang (Just True) True+                             HsStrict    -> HsUserBang (Just False) True+                             _           -> bang+            in case src_bang of+                 HsNoBang -> tySyn+                 _        -> noLoc $ HsBangTy bang tySyn+            -- HsNoBang never appears, it's implied instead.           )           arg_tys (dataConStrictMarks dc)   field_tys = zipWith (\field synTy -> ConDeclField@@ -319,12 +369,26 @@ synifyTyLit (StrTyLit s) = HsStrTy s  synifyKindSig :: Kind -> LHsKind Name-synifyKindSig k = synifyType (error "synifyKind") k+synifyKindSig k = synifyType WithinType k -synifyInstHead :: ([TyVar], [PredType], Class, [Type]) ->-                  ([HsType Name], Name, [HsType Name])-synifyInstHead (_, preds, cls, ts) =-  ( map (unLoc . synifyType WithinType) preds-  , getName cls+synifyInstHead :: ([TyVar], [PredType], Class, [Type]) -> InstHead Name+synifyInstHead (_, preds, cls, types) =+  ( getName cls+  , map (unLoc . synifyType WithinType) ks   , map (unLoc . synifyType WithinType) ts+  , ClassInst $ map (unLoc . synifyType WithinType) preds   )+  where (ks,ts) = break (not . isKind) types++-- Convert a family instance, this could be a type family or data family+synifyFamInst :: FamInst -> Bool -> InstHead Name+synifyFamInst fi opaque =+  ( fi_fam fi+  , map (unLoc . synifyType WithinType) ks+  , map (unLoc . synifyType WithinType) ts+  , case fi_flavor fi of+      SynFamilyInst | opaque -> TypeInst Nothing+      SynFamilyInst -> TypeInst . Just . unLoc . synifyType WithinType $ fi_rhs fi+      DataFamilyInst c -> DataInst $ synifyTyCon (Just $ famInstAxiom fi) c+  )+  where (ks,ts) = break (not . isKind) $ fi_tys fi
src/Haddock/Doc.hs view
@@ -1,32 +1,36 @@+{-# OPTIONS_GHC -fno-warn-orphans #-} module Haddock.Doc (-  docAppend,-  docParagraph-  ) where-+  docAppend+, docParagraph+, combineDocumentation+) where +import Data.Maybe+import Data.Monoid import Haddock.Types import Data.Char (isSpace) +-- We put it here so that we can avoid a circular import+-- anything relevant imports this module anyway+instance Monoid (Doc id) where+  mempty  = DocEmpty+  mappend = docAppend --- used to make parsing easier; we group the list items later+combineDocumentation :: Documentation name -> Maybe (Doc name)+combineDocumentation (Documentation Nothing Nothing) = Nothing+combineDocumentation (Documentation mDoc mWarning)   = Just (fromMaybe mempty mWarning `mappend` fromMaybe mempty mDoc)+ docAppend :: Doc id -> Doc id -> Doc id-docAppend (DocUnorderedList ds1) (DocUnorderedList ds2)-  = DocUnorderedList (ds1++ds2)-docAppend (DocUnorderedList ds1) (DocAppend (DocUnorderedList ds2) d)-  = DocAppend (DocUnorderedList (ds1++ds2)) d-docAppend (DocOrderedList ds1) (DocOrderedList ds2)-  = DocOrderedList (ds1++ds2)-docAppend (DocOrderedList ds1) (DocAppend (DocOrderedList ds2) d)-  = DocAppend (DocOrderedList (ds1++ds2)) d-docAppend (DocDefList ds1) (DocDefList ds2)-  = DocDefList (ds1++ds2)-docAppend (DocDefList ds1) (DocAppend (DocDefList ds2) d)-  = DocAppend (DocDefList (ds1++ds2)) d+docAppend (DocDefList ds1) (DocDefList ds2) = DocDefList (ds1++ds2)+docAppend (DocDefList ds1) (DocAppend (DocDefList ds2) d) = DocAppend (DocDefList (ds1++ds2)) d+docAppend (DocOrderedList ds1) (DocOrderedList ds2) = DocOrderedList (ds1 ++ ds2)+docAppend (DocUnorderedList ds1) (DocUnorderedList ds2) = DocUnorderedList (ds1 ++ ds2) docAppend DocEmpty d = d docAppend d DocEmpty = d-docAppend d1 d2-  = DocAppend d1 d2-+docAppend (DocString s1) (DocString s2) = DocString (s1 ++ s2)+docAppend (DocAppend d (DocString s1)) (DocString s2) = DocAppend d (DocString (s1 ++ s2))+docAppend (DocString s1) (DocAppend (DocString s2) d) = DocAppend (DocString (s1 ++ s2)) d+docAppend d1 d2 = DocAppend d1 d2  -- again to make parsing easier - we spot a paragraph whose only item -- is a DocMonospaced and make it into a DocCodeBlock
src/Haddock/GhcUtils.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FlexibleInstances, ViewPatterns #-} {-# OPTIONS_GHC -fno-warn-orphans #-} {-# OPTIONS_HADDOCK hide #-} -----------------------------------------------------------------------------@@ -35,6 +35,7 @@ import HscTypes import UniqFM import GHC+import Class   moduleString :: Module -> String@@ -76,7 +77,10 @@ isVarSym :: OccName -> Bool isVarSym = isLexVarSym . occNameFS +isConSym :: OccName -> Bool+isConSym = isLexConSym . occNameFS + getMainDeclBinder :: HsDecl name -> [name] getMainDeclBinder (TyClD d) = [tcdName d] getMainDeclBinder (ValD d) =@@ -88,6 +92,17 @@ getMainDeclBinder (ForD (ForeignExport _ _ _ _)) = [] getMainDeclBinder _ = [] +-- Extract the source location where an instance is defined. This is used+-- to correlate InstDecls with their Instance/CoAxiom Names, via the+-- instanceMap.+getInstLoc :: InstDecl name -> SrcSpan+getInstLoc (ClsInstD (ClsInstDecl { cid_poly_ty = L l _ })) = l+getInstLoc (DataFamInstD (DataFamInstDecl { dfid_tycon = L l _ })) = l+getInstLoc (TyFamInstD (TyFamInstDecl+  -- Since CoAxioms' Names refer to the whole line for type family instances+  -- in particular, we need to dig a bit deeper to pull out the entire+  -- equation. This does not happen for data family instances, for some reason.+  { tfid_eqn = L _ (TyFamInstEqn { tfie_rhs = L l _ })})) = l  -- Useful when there is a signature with multiple names, e.g. --   foo, bar :: Types..@@ -100,6 +115,7 @@ filterSigNames p orig@(SpecSig n _ _)          = ifTrueJust (p $ unLoc n) orig filterSigNames p orig@(InlineSig n _)          = ifTrueJust (p $ unLoc n) orig filterSigNames p orig@(FixSig (FixitySig n _)) = ifTrueJust (p $ unLoc n) orig+filterSigNames _ orig@(MinimalSig _)           = Just orig filterSigNames p (TypeSig ns ty)               =   case filter (p . unLoc) ns of     []       -> Nothing@@ -115,6 +131,7 @@  sigNameNoLoc :: Sig name -> [name] sigNameNoLoc (TypeSig   ns _)         = map unLoc ns+sigNameNoLoc (PatSynSig n _ _ _ _)    = [unLoc n] sigNameNoLoc (SpecSig   n _ _)        = [unLoc n] sigNameNoLoc (InlineSig n _)          = [unLoc n] sigNameNoLoc (FixSig (FixitySig n _)) = [unLoc n]@@ -147,7 +164,7 @@   declATs :: HsDecl a -> [a]-declATs (TyClD d) | isClassDecl d = map (tcdName . unL) $ tcdATs d+declATs (TyClD d) | isClassDecl d = map (unL . fdLName . unL) $ tcdATs d declATs _ = []  @@ -182,7 +199,7 @@  instance Traversable (GenLocated l) where   mapM f (L l x) = (return . L l) =<< f x-+  traverse f (L l x) = L l <$> f x  ------------------------------------------------------------------------------- -- * NamedThing instances@@ -215,9 +232,9 @@  instance Parent (TyClDecl Name) where   children d-    | isDataDecl  d = map (unL . con_name . unL) . td_cons . tcdTyDefn $ d+    | isDataDecl  d = map (unL . con_name . unL) . dd_cons . tcdDataDefn $ d     | isClassDecl d =-        map (tcdName . unL) (tcdATs d) +++        map (unL . fdLName . unL) (tcdATs d) ++         [ unL n | L _ (TypeSig ns _) <- tcdSigs d, n <- ns ]     | otherwise = [] @@ -231,8 +248,8 @@ -- child to its grand-children, recursively. families :: TyClDecl Name -> [(Name, [Name])] families d-  | isDataDecl  d = family d : map (family . unL) (td_cons (tcdTyDefn d))-  | isClassDecl d = family d : concatMap (families . unL) (tcdATs d)+  | isDataDecl  d = family d : map (family . unL) (dd_cons (tcdDataDefn d))+  | isClassDecl d = [family d]   | otherwise     = []  @@ -264,6 +281,13 @@ gbracket_ :: ExceptionMonad m => m a -> m b -> m c -> m c gbracket_ before_ after thing = gbracket before_ (const after) (const thing) +-- Extract the minimal complete definition of a Name, if one exists+minimalDef :: GhcMonad m => Name -> m (Maybe ClassMinimalDef)+minimalDef n = do+  mty <- lookupGlobalName n+  case mty of+    Just (ATyCon (tyConClass_maybe -> Just c)) -> return . Just $ classMinimalDef c+    _ -> return Nothing  ------------------------------------------------------------------------------- -- * DynFlags
src/Haddock/Interface.hs view
@@ -1,8 +1,9 @@ ----------------------------------------------------------------------------- -- | -- Module      :  Haddock.Interface--- Copyright   :  (c) Simon Marlow 2003-2006,---                    David Waern  2006-2010+-- Copyright   :  (c) Simon Marlow      2003-2006,+--                    David Waern       2006-2010,+--                    Mateusz Kowalczyk 2013 -- License     :  BSD-like -- -- Maintainer  :  haddock@projects.haskell.org@@ -50,11 +51,11 @@ import Text.Printf  import Digraph-import DynFlags hiding (verbosity, flags)+import DynFlags hiding (verbosity) import Exception-import GHC hiding (verbosity, flags)+import GHC hiding (verbosity) import HscTypes-+import FastString (unpackFS)  -- | Create 'Interface's and a link environment by typechecking the list of -- modules using the GHC API and processing the resulting syntax trees.@@ -138,7 +139,8 @@      enableCompilation :: ModuleGraph -> Ghc ModuleGraph     enableCompilation modGraph = do-      let enableComp d = d { hscTarget = defaultObjectTarget }+      let enableComp d = let platform = targetPlatform d+                         in d { hscTarget = defaultObjectTarget platform }       modifySessionDynFlags enableComp       -- We need to update the DynFlags of the ModSummaries as well.       let upd m = m { ms_hspp_opts = enableComp (ms_hspp_opts m) }@@ -168,11 +170,36 @@     out verbosity verbose "Creating interface..."     (interface, msg) <- runWriterGhc $ createInterface tm flags modMap instIfaceMap     liftIO $ mapM_ putStrLn msg+    dflags <- getDynFlags     let (haddockable, haddocked) = ifaceHaddockCoverage interface         percentage = round (fromIntegral haddocked * 100 / fromIntegral haddockable :: Double) :: Int         modString = moduleString (ifaceMod interface)         coverageMsg = printf " %3d%% (%3d /%3d) in '%s'" percentage haddocked haddockable modString+        header = case ifaceDoc interface of+          Documentation Nothing _ -> False+          _ -> True+        undocumentedExports = [ formatName s n | ExportDecl { expItemDecl = L s n+                                                            , expItemMbDoc = (Documentation Nothing _, _)+                                                            } <- ifaceExportItems interface ]+          where+            formatName :: SrcSpan -> HsDecl Name -> String+            formatName loc n = p (getMainDeclBinder n) ++ case loc of+              RealSrcSpan rss -> " (" ++ unpackFS (srcSpanFile rss) ++ ":" ++ show (srcSpanStartLine rss) ++ ")"+              _ -> ""++            p [] = ""+            p (x:_) = let n = pretty dflags x+                          ms = modString ++ "."+                      in if ms `isPrefixOf` n+                         then drop (length ms) n+                         else n+     out verbosity normal coverageMsg+    when (Flag_PrintMissingDocs `elem` flags+          && not (null undocumentedExports && header)) $ do+      out verbosity normal "  Missing documentation for:"+      unless header $ out verbosity normal "    Module header"+      mapM_ (out verbosity normal . ("    " ++)) undocumentedExports     interface' <- liftIO $ evaluate interface     return (Just interface')   else@@ -180,7 +207,7 @@   ----------------------------------------------------------------------------------- * Building of cross-linking environment  +-- * Building of cross-linking environment --------------------------------------------------------------------------------  @@ -215,4 +242,3 @@ withTempDir :: (ExceptionMonad m, MonadIO m) => FilePath -> m a -> m a withTempDir dir = gbracket_ (liftIO $ createDirectory dir)                             (liftIO $ removeDirectoryRecursive dir)-
src/Haddock/Interface/AttachInstances.hs view
@@ -16,13 +16,17 @@  import Haddock.Types import Haddock.Convert+import Haddock.GhcUtils  import Control.Arrow import Data.List+import Data.Ord (comparing)+import Data.Function (on) import qualified Data.Map as Map import qualified Data.Set as Set  import Class+import FamInstEnv import FastString import GHC import GhcMonad (withSession)@@ -32,6 +36,7 @@ import Name import PrelNames import TcRnDriver (tcRnGetInfo)+import TcType (tcSplitSigmaTy) import TyCon import TypeRep import TysPrim( funTyCon )@@ -42,6 +47,7 @@ type Modules = Set.Set Module type ExportInfo = (ExportedNames, Modules) +-- Also attaches fixities attachInstances :: ExportInfo -> [Interface] -> InstIfaceMap -> Ghc [Interface] attachInstances expInfo ifaces instIfaceMap = mapM attach ifaces   where@@ -56,52 +62,60 @@  attachToExportItem :: ExportInfo -> Interface -> IfaceMap -> InstIfaceMap -> ExportItem Name -> Ghc (ExportItem Name) attachToExportItem expInfo iface ifaceMap instIfaceMap export =-  case export of-    ExportDecl { expItemDecl = L _ (TyClD d) } -> do-      mb_info <- getAllInfo (unLoc (tcdLName d))+  case attachFixities export of+    e@ExportDecl { expItemDecl = L _ (TyClD d) } -> do+      mb_info <- getAllInfo (tcdName d)       let export' =-            export {+            e {               expItemInstances =                 case mb_info of-                  Just (_, _, instances) ->-                    let insts = map (first synifyInstHead) $ sortImage (first instHead) $-                                filter (\((_,_,cls,tys),_) -> not $ isInstanceHidden expInfo cls tys)-                                [ (instanceHead' i, getName i) | i <- instances ]-                    in [ (inst, lookupInstDoc name iface ifaceMap instIfaceMap)-                       | (inst, name) <- insts ]+                  Just (_, _, cls_instances, fam_instances) ->+                    let fam_insts = [ (synifyFamInst i opaque, n)+                                    | i <- sortBy (comparing instFam) fam_instances+                                    , let n = instLookup instDocMap (getName i) iface ifaceMap instIfaceMap+                                    , not $ isNameHidden expInfo (fi_fam i)+                                    , not $ any (isTypeHidden expInfo) (fi_tys i)+                                    , let opaque = isTypeHidden expInfo (fi_rhs i)+                                    ]+                        cls_insts = [ (synifyInstHead i, instLookup instDocMap n iface ifaceMap instIfaceMap)+                                    | let is = [ (instanceHead' i, getName i) | i <- cls_instances ]+                                    , (i@(_,_,cls,tys), n) <- sortBy (comparing $ first instHead) is+                                    , not $ isInstanceHidden expInfo cls tys+                                    ]+                    in cls_insts ++ fam_insts                   Nothing -> []             }       return export'-    _ -> return export+    e -> return e+  where+    attachFixities e@ExportDecl{ expItemDecl = L _ d } = e { expItemFixities =+      nubBy ((==) `on` fst) $ expItemFixities e +++      [ (n',f) | n <- getMainDeclBinder d+              , Just subs <- [instLookup instSubMap n iface ifaceMap instIfaceMap]+              , n' <- n : subs+              , Just f <- [instLookup instFixMap n' iface ifaceMap instIfaceMap]+      ] } +    attachFixities e = e -lookupInstDoc :: Name -> Interface -> IfaceMap -> InstIfaceMap -> Maybe (Doc Name)--- TODO: capture this pattern in a function (when we have streamlined the--- handling of instances)-lookupInstDoc name iface ifaceMap instIfaceMap =-  case Map.lookup name (ifaceDocMap iface) of-    Just doc -> Just doc-    Nothing ->-      case Map.lookup modName ifaceMap of-        Just iface2 ->-          case Map.lookup name (ifaceDocMap iface2) of-            Just doc -> Just doc-            Nothing -> Nothing-        Nothing ->-          case Map.lookup modName instIfaceMap of-            Just instIface -> Map.lookup name (instDocMap instIface)-            Nothing -> Nothing-  where-    modName = nameModule name +instLookup :: (InstalledInterface -> Map.Map Name a) -> Name+            -> Interface -> IfaceMap -> InstIfaceMap -> Maybe a+instLookup f name iface ifaceMap instIfaceMap =+  case Map.lookup name (f $ toInstalledIface iface) of+    res@(Just _) -> res+    Nothing -> do+      let ifaceMaps = Map.union (fmap toInstalledIface ifaceMap) instIfaceMap+      iface' <- Map.lookup (nameModule name) ifaceMaps+      Map.lookup name (f iface')  -- | Like GHC's 'instanceHead' but drops "silent" arguments. instanceHead' :: ClsInst -> ([TyVar], ThetaType, Class, [Type]) instanceHead' ispec = (tvs, dropSilentArgs dfun theta, cls, tys)   where     dfun = is_dfun ispec-    (tvs, theta, cls, tys) = instanceHead ispec-+    (tvs, cls, tys) = instanceHead ispec+    (_, theta, _) = tcSplitSigmaTy (idType dfun)  -- | Drop "silent" arguments. See GHC Note [Silent superclass -- arguments].@@ -111,7 +125,7 @@  -- | Like GHC's getInfo but doesn't cut things out depending on the -- interative context, which we don't set sufficiently anyway.-getAllInfo :: GhcMonad m => Name -> m (Maybe (TyThing,Fixity,[ClsInst]))+getAllInfo :: GhcMonad m => Name -> m (Maybe (TyThing,Fixity,[ClsInst],[FamInst])) getAllInfo name = withSession $ \hsc_env -> do     (_msgs, r) <- liftIO $ tcRnGetInfo hsc_env name    return r@@ -134,27 +148,27 @@ instHead :: ([TyVar], [PredType], Class, [Type]) -> ([Int], Name, [SimpleType]) instHead (_, _, cls, args)   = (map argCount args, className cls, map simplify args)-  where-    argCount (AppTy t _) = argCount t + 1-    argCount (TyConApp _ ts) = length ts-    argCount (FunTy _ _ ) = 2-    argCount (ForAllTy _ t) = argCount t-    argCount _ = 0 -    simplify (ForAllTy _ t) = simplify t-    simplify (FunTy t1 t2) = -      SimpleType funTyConName [simplify t1, simplify t2]-    simplify (AppTy t1 t2) = SimpleType s (ts ++ [simplify t2])-      where (SimpleType s ts) = simplify t1-    simplify (TyVarTy v) = SimpleType (tyVarName v) []-    simplify (TyConApp tc ts) = SimpleType (tyConName tc) (map simplify ts)-    simplify (LitTy l) = SimpleTyLit l+argCount :: Type -> Int+argCount (AppTy t _) = argCount t + 1+argCount (TyConApp _ ts) = length ts+argCount (FunTy _ _ ) = 2+argCount (ForAllTy _ t) = argCount t+argCount _ = 0 +simplify :: Type -> SimpleType+simplify (ForAllTy _ t) = simplify t+simplify (FunTy t1 t2) = SimpleType funTyConName [simplify t1, simplify t2]+simplify (AppTy t1 t2) = SimpleType s (ts ++ [simplify t2])+  where (SimpleType s ts) = simplify t1+simplify (TyVarTy v) = SimpleType (tyVarName v) []+simplify (TyConApp tc ts) = SimpleType (tyConName tc) (map simplify ts)+simplify (LitTy l) = SimpleTyLit l --- sortImage f = sortBy (\x y -> compare (f x) (f y))-sortImage :: Ord b => (a -> b) -> [a] -> [a]-sortImage f xs = map snd $ sortBy cmp_fst [(f x, x) | x <- xs]- where cmp_fst (x,_) (y,_) = compare x y+-- Used for sorting+instFam :: FamInst -> ([Int], Name, [SimpleType], Int, SimpleType)+instFam FamInst { fi_fam = n, fi_tys = ts, fi_rhs = t }+  = (map argCount ts, n, map simplify ts, argCount t, simplify t)   funTyConName :: Name@@ -188,11 +202,11 @@     instClassHidden = isNameHidden expInfo $ getName cls      instTypeHidden :: Bool-    instTypeHidden = any typeHidden tys--    nameHidden :: Name -> Bool-    nameHidden = isNameHidden expInfo+    instTypeHidden = any (isTypeHidden expInfo) tys +isTypeHidden :: ExportInfo -> Type -> Bool+isTypeHidden expInfo = typeHidden+  where     typeHidden :: Type -> Bool     typeHidden t =       case t of@@ -202,3 +216,6 @@         FunTy t1 t2 -> typeHidden t1 || typeHidden t2         ForAllTy _ ty -> typeHidden ty         LitTy _ -> False++    nameHidden :: Name -> Bool+    nameHidden = isNameHidden expInfo
src/Haddock/Interface/Create.hs view
@@ -3,8 +3,9 @@ ----------------------------------------------------------------------------- -- | -- Module      :  Haddock.Interface.Create--- Copyright   :  (c) Simon Marlow 2003-2006,---                    David Waern  2006-2009+-- Copyright   :  (c) Simon Marlow      2003-2006,+--                    David Waern       2006-2009,+--                    Mateusz Kowalczyk 2013 -- License     :  BSD-like -- -- Maintainer  :  haddock@projects.haskell.org@@ -30,12 +31,14 @@ import Control.Applicative import Control.DeepSeq import Control.Monad+import Data.Function (on)+import qualified Data.Foldable as F import qualified Data.Traversable as T  import qualified Packages import qualified Module import qualified SrcLoc-import GHC hiding (flags)+import GHC import HscTypes import Name import Bag@@ -52,13 +55,15 @@    let ms             = pm_mod_summary . tm_parsed_module $ tm       mi             = moduleInfo tm+      L _ hsm        = parsedSource tm       !safety        = modInfoSafe mi       mdl            = ms_mod ms       dflags         = ms_hspp_opts ms       !instances     = modInfoInstances mi+      !fam_instances = md_fam_insts md       !exportedNames = modInfoExports mi -      (TcGblEnv {tcg_rdr_env = gre, tcg_warns = warnings}, _) = tm_internals_ tm+      (TcGblEnv {tcg_rdr_env = gre, tcg_warns = warnings}, md) = tm_internals_ tm    -- The renamed source should always be available to us, but it's best   -- to be on the safe side.@@ -77,10 +82,14 @@   (!info, mbDoc) <- liftErrMsg $ processModuleHeader dflags gre safety mayDocHeader    let declsWithDocs = topDecls group_+      fixMap = mkFixMap group_       (decls, _) = unzip declsWithDocs-      localInsts = filter (nameIsLocalOrFrom mdl . getName) instances+      localInsts = filter (nameIsLocalOrFrom mdl) $  map getName instances+                                                  ++ map getName fam_instances+      -- Locations of all TH splices+      splices = [ l | L l (SpliceD _) <- hsmodDecls hsm ] -  maps@(!docMap, !argMap, !subMap, !declMap) <-+  maps@(!docMap, !argMap, !subMap, !declMap, _) <-     liftErrMsg $ mkMaps dflags gre localInsts declsWithDocs    let exports0 = fmap (reverse . map unLoc) mayExports@@ -88,16 +97,14 @@        | OptIgnoreExports `elem` opts = Nothing        | otherwise = exports0 -  liftErrMsg $ warnAboutFilteredDecls dflags mdl decls-   warningMap <- liftErrMsg $ mkWarningMap dflags warnings gre exportedNames    let allWarnings = M.unions (warningMap : map ifaceWarningMap (M.elems modMap)) -  exportItems <- mkExportItems modMap mdl allWarnings gre exportedNames decls maps exports-                   instances instIfaceMap dflags+  exportItems <- mkExportItems modMap mdl allWarnings gre exportedNames decls+                   maps fixMap splices exports instIfaceMap dflags -  let !visibleNames = mkVisibleNames exportItems opts+  let !visibleNames = mkVisibleNames maps exportItems opts    -- Measure haddock documentation coverage.   let prunedExportItems0 = pruneExportItems exportItems@@ -134,8 +141,10 @@   , ifaceVisibleExports  = visibleNames   , ifaceDeclMap         = declMap   , ifaceSubMap          = subMap+  , ifaceFixMap          = fixMap   , ifaceModuleAliases   = aliases   , ifaceInstances       = instances+  , ifaceFamInstances    = fam_instances   , ifaceHaddockCoverage = coverage   , ifaceWarningMap      = warningMap   }@@ -192,7 +201,6 @@     WarnSome _ -> return Nothing     WarnAll w  -> Just <$> parseWarning dflags gre w - parseWarning :: DynFlags -> GlobalRdrEnv -> WarningTxt -> ErrMsgM (Doc Name) parseWarning dflags gre w = do   r <- case w of@@ -219,16 +227,20 @@       [] -> tell ["No option supplied to DOC_OPTION/doc_option"] >> return []       xs -> liftM catMaybes (mapM parseOption xs)     Nothing -> return []-  if Flag_HideModule (moduleString mdl) `elem` flags-    then return $ OptHide : opts-    else return opts+  hm <- if Flag_HideModule (moduleString mdl) `elem` flags+        then return $ OptHide : opts+        else return opts+  if Flag_ShowExtensions (moduleString mdl) `elem` flags+    then return $ OptShowExtensions : hm+    else return hm   parseOption :: String -> ErrMsgM (Maybe DocOption)-parseOption "hide"           = return (Just OptHide)-parseOption "prune"          = return (Just OptPrune)-parseOption "ignore-exports" = return (Just OptIgnoreExports)-parseOption "not-home"       = return (Just OptNotHome)+parseOption "hide"            = return (Just OptHide)+parseOption "prune"           = return (Just OptPrune)+parseOption "ignore-exports"  = return (Just OptIgnoreExports)+parseOption "not-home"        = return (Just OptNotHome)+parseOption "show-extensions" = return (Just OptShowExtensions) parseOption other = tell ["Unrecognised option: " ++ other] >> return Nothing  @@ -237,33 +249,33 @@ --------------------------------------------------------------------------------  -type Maps = (DocMap Name, ArgMap Name, SubMap, DeclMap)+type Maps = (DocMap Name, ArgMap Name, SubMap, DeclMap, InstMap)  -- | Create 'Maps' by looping through the declarations. For each declaration, -- find its names, its subordinates, and its doc strings. Process doc strings -- into 'Doc's. mkMaps :: DynFlags        -> GlobalRdrEnv-       -> [ClsInst]+       -> [Name]        -> [(LHsDecl Name, [HsDocString])]        -> ErrMsgM Maps mkMaps dflags gre instances decls = do   (a, b, c, d) <- unzip4 <$> mapM mappings decls-  return (f a, f b, f c, f d)+  return (f $ map (nubBy ((==) `on` fst)) a , f b, f c, f d, instanceMap)   where     f :: (Ord a, Monoid b) => [[(a, b)]] -> Map a b     f = M.fromListWith (<>) . concat      mappings (ldecl, docStrs) = do-      let decl = unLoc ldecl+      let L l decl = ldecl       let declDoc strs m = do             doc <- processDocStrings dflags gre strs             m' <- M.mapMaybe id <$> T.mapM (processDocStringParas dflags gre) m             return (doc, m')       (doc, args) <- declDoc docStrs (typeDocs decl)-      let subs = subordinates decl+      let subs = subordinates instanceMap decl       (subDocs, subArgs) <- unzip <$> mapM (\(_, strs, m) -> declDoc strs m) subs-      let ns = names decl+      let ns = names l decl           subNs = [ n | (n, _, _) <- subs ]           dm = [ (n, d) | (n, Just d) <- zip ns (repeat doc) ++ zip subNs subDocs ]           am = [ (n, args) | n <- ns ] ++ zip subNs subArgs@@ -277,11 +289,14 @@           return (dm, am, sm, cm)      instanceMap :: Map SrcSpan Name-    instanceMap = M.fromList [ (getSrcSpan n, n) | i <- instances, let n = getName i ]+    instanceMap = M.fromList [ (getSrcSpan n, n) | n <- instances ] -    names :: HsDecl Name -> [Name]-    names (InstD (ClsInstD { cid_poly_ty = L l _ })) = maybeToList (M.lookup l instanceMap)  -- See note [2].-    names decl = getMainDeclBinder decl+    names :: SrcSpan -> HsDecl Name -> [Name]+    names l (InstD d) = maybeToList (M.lookup loc instanceMap) -- See note [2].+      where loc = case d of+              TyFamInstD _ -> l -- The CoAx's loc is the whole line, but only for TFs+              _ -> getInstLoc d+    names _ decl = getMainDeclBinder decl  -- Note [2]: ------------@@ -298,33 +313,41 @@   -- | Get all subordinate declarations inside a declaration, and their docs.-subordinates :: HsDecl Name -> [(Name, [HsDocString], Map Int HsDocString)]-subordinates (TyClD decl)-  | isClassDecl decl = classSubs-  | isDataDecl  decl = dataSubs+subordinates :: InstMap -> HsDecl Name -> [(Name, [HsDocString], Map Int HsDocString)]+subordinates instMap decl = case decl of+  InstD (ClsInstD d) -> do+    DataFamInstDecl { dfid_tycon = L l _+                    , dfid_defn = def    } <- unLoc <$> cid_datafam_insts d+    [ (n, [], M.empty) | Just n <- [M.lookup l instMap] ] ++ dataSubs def++  InstD (DataFamInstD d)  -> dataSubs (dfid_defn d)+  TyClD d | isClassDecl d -> classSubs d+          | isDataDecl  d -> dataSubs (tcdDataDefn d)+  _ -> []   where-    classSubs = [ (name, doc, typeDocs d) | (L _ d, doc) <- classDecls decl-                , name <- getMainDeclBinder d, not (isValD d)-                ]-    dataSubs = constrs ++ fields+    classSubs dd = [ (name, doc, typeDocs d) | (L _ d, doc) <- classDecls dd+                   , name <- getMainDeclBinder d, not (isValD d)+                   ]+    dataSubs dd = constrs ++ fields       where-        cons = map unL $ (td_cons (tcdTyDefn decl))+        cons = map unL $ (dd_cons dd)         constrs = [ (unL $ con_name c, maybeToList $ fmap unL $ con_doc c, M.empty)                   | c <- cons ]         fields  = [ (unL n, maybeToList $ fmap unL doc, M.empty)                   | RecCon flds <- map con_details cons                   , ConDeclField n _ doc <- flds ]-subordinates _ = [] - -- | Extract function argument docs from inside types. typeDocs :: HsDecl Name -> Map Int HsDocString typeDocs d =   let docs = go 0 in   case d of     SigD (TypeSig _ ty) -> docs (unLoc ty)+    SigD (PatSynSig _ arg_tys ty req prov) ->+        let allTys = ty : concat [ F.toList arg_tys, unLoc req, unLoc prov ]+        in F.foldMap (docs . unLoc) allTys     ForD (ForeignImport _ ty _ _) -> docs (unLoc ty)-    TyClD (TyDecl { tcdTyDefn = TySynonym {td_synRhs = ty}}) -> docs (unLoc ty)+    TyClD (SynDecl { tcdRhs = ty }) -> docs (unLoc ty)     _ -> M.empty   where     go n (HsForAllTy _ _ _ ty) = go n (unLoc ty)@@ -341,9 +364,9 @@   where     decls = docs ++ defs ++ sigs ++ ats     docs  = mkDecls tcdDocs DocD class_-    defs  = mkDecls (bagToList . tcdMeths) ValD class_+    defs  = mkDecls (map snd . bagToList . tcdMeths) ValD class_     sigs  = mkDecls tcdSigs SigD class_-    ats   = mkDecls tcdATs TyClD class_+    ats   = mkDecls tcdATs (TyClD . FamDecl) class_   -- | The top-level declarations of a module that we care about,@@ -351,18 +374,23 @@ topDecls :: HsGroup Name -> [(LHsDecl Name, [HsDocString])] topDecls = filterClasses . filterDecls . collectDocs . sortByLoc . ungroup +-- | Extract a map of fixity declarations only+mkFixMap :: HsGroup Name -> FixMap+mkFixMap group_ = M.fromList [ (n,f)+                             | L _ (FixitySig (L _ n) f) <- hs_fixds group_ ] + -- | Take all declarations except pragmas, infix decls, rules from an 'HsGroup'. ungroup :: HsGroup Name -> [LHsDecl Name] ungroup group_ =-  mkDecls (concat   . hs_tyclds) TyClD  group_ ++-  mkDecls hs_derivds             DerivD group_ ++-  mkDecls hs_defds               DefD   group_ ++-  mkDecls hs_fords               ForD   group_ ++-  mkDecls hs_docs                DocD   group_ ++-  mkDecls hs_instds              InstD  group_ ++-  mkDecls (typesigs . hs_valds)  SigD   group_ ++-  mkDecls (valbinds . hs_valds)  ValD   group_+  mkDecls (tyClGroupConcat . hs_tyclds) TyClD  group_ +++  mkDecls hs_derivds                       DerivD group_ +++  mkDecls hs_defds                         DefD   group_ +++  mkDecls hs_fords                         ForD   group_ +++  mkDecls hs_docs                          DocD   group_ +++  mkDecls hs_instds                        InstD  group_ +++  mkDecls (typesigs . hs_valds)            SigD   group_ +++  mkDecls (map snd . valbinds . hs_valds)  ValD   group_   where     typesigs (ValBindsOut _ sigs) = filter isVanillaLSig sigs     typesigs _ = error "expected ValBindsOut"@@ -382,28 +410,6 @@ sortByLoc = sortBy (comparing getLoc)  -warnAboutFilteredDecls :: DynFlags -> Module -> [LHsDecl Name] -> ErrMsgM ()-warnAboutFilteredDecls dflags mdl decls = do-  let modStr = moduleString mdl-  let typeInstances =-        nub [ unLoc (fid_tycon d) | L _ (InstD (FamInstD { lid_inst = d })) <- decls ]--  unless (null typeInstances) $-    tell [-      "Warning: " ++ modStr ++ ": Instances of type and data "-      ++ "families are not yet supported. Instances of the following families "-      ++ "will be filtered out:\n  " ++ (intercalate ", "-      $ map (occNameString . nameOccName) typeInstances) ]--  let instances = nub [ pretty dflags i | L _ (InstD (ClsInstD { cid_poly_ty = i, cid_fam_insts = ats })) <- decls-                                 , not (null ats) ]--  unless (null instances) $-    tell [-      "Warning: " ++ modStr ++ ": We do not support associated types in instances yet. "-      ++ "These instances are affected:\n" ++ intercalate ", " instances ]-- -------------------------------------------------------------------------------- -- Filtering of declarations --@@ -431,7 +437,7 @@                       | x@(L loc d, doc) <- decls ]   where     filterClass (TyClD c) =-      TyClD $ c { tcdSigs = filter isVanillaLSig $ tcdSigs c }+      TyClD $ c { tcdSigs = filter (liftA2 (||) isVanillaLSig isMinimalLSig) $ tcdSigs c }     filterClass _ = error "expected TyClD"  @@ -474,27 +480,25 @@   -> [Name]             -- exported names (orig)   -> [LHsDecl Name]   -> Maps+  -> FixMap+  -> [SrcSpan]          -- splice locations   -> Maybe [IE Name]-  -> [ClsInst]   -> InstIfaceMap   -> DynFlags   -> ErrMsgGhc [ExportItem Name] mkExportItems-  modMap thisMod warnings gre exportedNames decls0-  (maps@(docMap, argMap, subMap, declMap)) optExports _ instIfaceMap dflags =+  modMap thisMod warnings gre exportedNames decls+  maps@(docMap, argMap, subMap, declMap, instMap) fixMap splices optExports instIfaceMap dflags =   case optExports of-    Nothing -> fullModuleContents dflags warnings gre maps decls+    Nothing -> fullModuleContents dflags warnings gre maps fixMap splices decls     Just exports -> liftM concat $ mapM lookupExport exports   where-    decls = filter (not . isInstD . unLoc) decls0--     lookupExport (IEVar x)             = declWith x     lookupExport (IEThingAbs t)        = declWith t     lookupExport (IEThingAll t)        = declWith t     lookupExport (IEThingWith t _)     = declWith t     lookupExport (IEModuleContents m)  =-      moduleExports thisMod m dflags warnings gre exportedNames decls modMap instIfaceMap maps+      moduleExports thisMod m dflags warnings gre exportedNames decls modMap instIfaceMap maps fixMap splices     lookupExport (IEGroup lev docStr)  = liftErrMsg $       ifDoc (processDocString dflags gre docStr)             (\doc -> return [ ExportGroup lev "" doc ])@@ -517,9 +521,9 @@     declWith :: Name -> ErrMsgGhc [ ExportItem Name ]     declWith t =       case findDecl t of-        ([L _ (ValD _)], (doc, _)) -> do+        ([L l (ValD _)], (doc, _)) -> do           -- Top-level binding without type signature-          export <- hiValExportItem dflags t doc+          export <- hiValExportItem dflags t doc (l `elem` splices) $ M.lookup t fixMap           return [export]         (ds, docs_) | decl : _ <- filter (not . isValD . unLoc) ds ->           let declNames = getMainDeclBinder (unL decl)@@ -543,18 +547,24 @@                    return []                -- normal case-              | otherwise -> return [ mkExportDecl t newDecl docs_ ]-                  where-                    -- A single signature might refer to many names, but we-                    -- create an export item for a single name only.  So we-                    -- modify the signature to contain only that single name.-                    newDecl = case decl of-                      (L loc (SigD sig)) ->-                        L loc . SigD . fromJust $ filterSigNames (== t) sig-                        -- fromJust is safe since we already checked in guards-                        -- that 't' is a name declared in this declaration.-                      _                  -> decl+              | otherwise -> case decl of+                  -- A single signature might refer to many names, but we+                  -- create an export item for a single name only.  So we+                  -- modify the signature to contain only that single name.+                  L loc (SigD sig) ->+                    -- fromJust is safe since we already checked in guards+                    -- that 't' is a name declared in this declaration.+                    let newDecl = L loc . SigD . fromJust $ filterSigNames (== t) sig+                    in return [ mkExportDecl t newDecl docs_ ] +                  L loc (TyClD cl@ClassDecl{}) -> do+                    mdef <- liftGhcToErrMsgGhc $ minimalDef t+                    let sig = maybeToList $ fmap (noLoc . MinimalSig . fmap noLoc) mdef+                    return [ mkExportDecl t+                      (L loc $ TyClD cl { tcdSigs = sig ++ tcdSigs cl }) docs_ ]++                  _ -> return [ mkExportDecl t decl docs_ ]+         -- Declaration from another package         ([], _) -> do           mayDecl <- hiDecl dflags t@@ -567,7 +577,7 @@                 Nothing -> do                    liftErrMsg $ tell                       ["Warning: Couldn't find .haddock for export " ++ pretty dflags t]-                   let subs_ = [ (n, noDocForDecl) | (n, _, _) <- subordinates (unLoc decl) ]+                   let subs_ = [ (n, noDocForDecl) | (n, _, _) <- subordinates instMap (unLoc decl) ]                    return [ mkExportDecl t decl (noDocForDecl, subs_) ]                 Just iface ->                    return [ mkExportDecl t decl (lookupDocs t warnings (instDocMap iface) (instArgMap iface) (instSubMap iface)) ]@@ -576,12 +586,13 @@       mkExportDecl :: Name -> LHsDecl Name -> (DocForDecl Name, [(Name, DocForDecl Name)]) -> ExportItem Name-    mkExportDecl n decl (doc, subs) = decl'+    mkExportDecl name decl (doc, subs) = decl'       where-        decl' = ExportDecl (restrictTo sub_names (extractDecl n mdl decl)) doc subs' []-        mdl = nameModule n+        decl' = ExportDecl (restrictTo sub_names (extractDecl name mdl decl)) doc subs' [] fixities False+        mdl = nameModule name         subs' = filter (isExported . fst) subs         sub_names = map fst subs'+        fixities = [ (n, f) | n <- name:sub_names, Just f <- [M.lookup n fixMap] ]       isExported = (`elem` exportedNames)@@ -608,12 +619,16 @@     Just x -> return (Just (tyThingToLHsDecl x))  -hiValExportItem :: DynFlags -> Name -> DocForDecl Name -> ErrMsgGhc (ExportItem Name)-hiValExportItem dflags name doc = do+hiValExportItem :: DynFlags -> Name -> DocForDecl Name -> Bool -> Maybe Fixity -> ErrMsgGhc (ExportItem Name)+hiValExportItem dflags name doc splice fixity = do   mayDecl <- hiDecl dflags name   case mayDecl of     Nothing -> return (ExportNoDecl name [])-    Just decl -> return (ExportDecl decl doc [] [])+    Just decl -> return (ExportDecl decl doc [] [] fixities splice)+  where+    fixities = case fixity of+      Just f  -> [(name, f)]+      Nothing -> []   -- | Lookup docs for a declaration from maps.@@ -640,7 +655,7 @@ -- 2) B is visible, but not all its exports are in scope in A, in which case we --    only return those that are. -- 3) B is visible and all its exports are in scope, in which case we return---    a single 'ExportModule' item. +--    a single 'ExportModule' item. moduleExports :: Module           -- ^ Module A               -> ModuleName       -- ^ The real name of B, the exported module               -> DynFlags         -- ^ The flags used when typechecking A@@ -651,9 +666,11 @@               -> IfaceMap         -- ^ Already created interfaces               -> InstIfaceMap     -- ^ Interfaces in other packages               -> Maps+              -> FixMap+              -> [SrcSpan]        -- ^ Locations of all TH splices               -> ErrMsgGhc [ExportItem Name] -- ^ Resulting export items-moduleExports thisMod expMod dflags warnings gre _exports decls ifaceMap instIfaceMap maps-  | m == thisMod = fullModuleContents dflags warnings gre maps decls+moduleExports thisMod expMod dflags warnings gre _exports decls ifaceMap instIfaceMap maps fixMap splices+  | m == thisMod = fullModuleContents dflags warnings gre maps fixMap splices decls   | otherwise =     case M.lookup m ifaceMap of       Just iface@@ -691,8 +708,9 @@ -- (For more information, see Trac #69)  -fullModuleContents :: DynFlags -> WarningMap -> GlobalRdrEnv -> Maps -> [LHsDecl Name] -> ErrMsgGhc [ExportItem Name]-fullModuleContents dflags warnings gre (docMap, argMap, subMap, declMap) decls =+fullModuleContents :: DynFlags -> WarningMap -> GlobalRdrEnv -> Maps -> FixMap -> [SrcSpan]+                   -> [LHsDecl Name] -> ErrMsgGhc [ExportItem Name]+fullModuleContents dflags warnings gre (docMap, argMap, subMap, declMap, instMap) fixMap splices decls =   liftM catMaybes $ mapM mkExportItem (expandSig decls)   where     -- A type signature can have multiple names, like:@@ -704,8 +722,8 @@     expandSig = foldr f []       where         f :: LHsDecl name -> [LHsDecl name] -> [LHsDecl name]-        f (L l (SigD (TypeSig    names t))) xs = foldr (\n acc -> L l (SigD (TypeSig    [n] t)) : acc) xs names-        f (L l (SigD (GenericSig names t))) xs = foldr (\n acc -> L l (SigD (GenericSig [n] t)) : acc) xs names+        f (L l (SigD (TypeSig    names t)))          xs = foldr (\n acc -> L l (SigD (TypeSig    [n] t))          : acc) xs names+        f (L l (SigD (GenericSig names t)))          xs = foldr (\n acc -> L l (SigD (GenericSig [n] t))          : acc) xs names         f x xs = x : xs      mkExportItem :: LHsDecl Name -> ErrMsgGhc (Maybe (ExportItem Name))@@ -715,19 +733,31 @@     mkExportItem (L _ (DocD (DocCommentNamed _ docStr))) = do       mbDoc <- liftErrMsg $ processDocStringParas dflags gre docStr       return $ fmap ExportDoc mbDoc-    mkExportItem (L _ (ValD d))+    mkExportItem (L l (ValD d))       | name:_ <- collectHsBindBinders d, Just [L _ (ValD _)] <- M.lookup name declMap =           -- Top-level binding without type signature.           let (doc, _) = lookupDocs name warnings docMap argMap subMap in-          fmap Just (hiValExportItem dflags name doc)+          fmap Just (hiValExportItem dflags name doc (l `elem` splices) $ M.lookup name fixMap)       | otherwise = return Nothing-    mkExportItem decl-      | name:_ <- getMainDeclBinder (unLoc decl) =+    mkExportItem decl@(L l (InstD d))+      | Just name <- M.lookup (getInstLoc d) instMap =         let (doc, subs) = lookupDocs name warnings docMap argMap subMap in-        return $ Just (ExportDecl decl doc subs [])+        return $ Just (ExportDecl decl doc subs [] (fixities name subs) (l `elem` splices))+    mkExportItem (L l (TyClD cl@ClassDecl{ tcdLName = L _ name, tcdSigs = sigs })) = do+      mdef <- liftGhcToErrMsgGhc $ minimalDef name+      let sig = maybeToList $ fmap (noLoc . MinimalSig . fmap noLoc) mdef+      expDecl (L l (TyClD cl { tcdSigs = sig ++ sigs })) l name+    mkExportItem decl@(L l d)+      | name:_ <- getMainDeclBinder d = expDecl decl l name       | otherwise = return Nothing +    fixities name subs = [ (n,f) | n <- name : map fst subs+                                 , Just f <- [M.lookup n fixMap] ] +    expDecl decl l name = return $ Just (ExportDecl decl doc subs [] (fixities name subs) (l `elem` splices))+      where (doc, subs) = lookupDocs name warnings docMap argMap subMap++ -- | Sometimes the declaration we want to export is not the "main" declaration: -- it might be an individual record selector or a class method.  In these -- cases we have to extract the required declaration (and somehow cobble@@ -747,11 +777,11 @@           _ -> error "internal: extractDecl"       TyClD d | isDataDecl d ->         let (n, tyvar_names) = name_and_tyvars d-            L pos sig = extractRecSel name mdl n tyvar_names (td_cons (tcdTyDefn d))+            L pos sig = extractRecSel name mdl n tyvar_names (dd_cons (tcdDataDefn d))         in L pos (SigD sig)       _ -> error "internal: extractDecl"   where-    name_and_tyvars d = (unLoc (tcdLName d), hsLTyVarLocNames (tcdTyVars d))+    name_and_tyvars d = (tcdName d, hsLTyVarLocNames (tyClDeclTyVars d))   toTypeNoLoc :: Located Name -> LHsType Name@@ -791,14 +821,17 @@     hasDoc _ = True  -mkVisibleNames :: [ExportItem Name] -> [DocOption] -> [Name]-mkVisibleNames exports opts+mkVisibleNames :: Maps -> [ExportItem Name] -> [DocOption] -> [Name]+mkVisibleNames (_, _, _, _, instMap) exports opts   | OptHide `elem` opts = []   | otherwise = let ns = concatMap exportName exports                 in seqList ns `seq` ns   where-    exportName e@ExportDecl {} = getMainDeclBinder (unL $ expItemDecl e) ++ subs+    exportName e@ExportDecl {} = name ++ subs       where subs = map fst (expItemSubDocs e)+            name = case unLoc $ expItemDecl e of+              InstD d -> maybeToList $ M.lookup (getInstLoc d) instMap+              decl    -> getMainDeclBinder decl     exportName ExportNoDecl {} = [] -- we don't count these as visible, since                                     -- we don't want links to go to them.     exportName _ = []
src/Haddock/Interface/LexParseRn.hs view
@@ -4,6 +4,7 @@ -- | -- Module      :  Haddock.Interface.LexParseRn -- Copyright   :  (c) Isaac Dupree 2009,+--                    Mateusz Kowalczyk 2013 -- License     :  BSD-like -- -- Maintainer  :  haddock@projects.haskell.org@@ -17,10 +18,9 @@   , processModuleHeader   ) where -+import qualified Data.IntSet as IS import Haddock.Types-import Haddock.Lex-import Haddock.Parse+import Haddock.Parser import Haddock.Interface.ParseModuleHeader import Haddock.Doc @@ -29,12 +29,11 @@ import Data.Maybe import FastString import GHC+import DynFlags (ExtensionFlag(..), languageExtensions) import Name import Outputable import RdrName-import RnEnv - processDocStrings :: DynFlags -> GlobalRdrEnv -> [HsDocString] -> ErrMsgM (Maybe (Doc Name)) processDocStrings dflags gre strs = do   docs <- catMaybes <$> mapM (processDocStringParas dflags gre) strs@@ -45,25 +44,25 @@   processDocStringParas :: DynFlags -> GlobalRdrEnv -> HsDocString -> ErrMsgM (Maybe (Doc Name))-processDocStringParas = process parseParas+processDocStringParas = process parseParasMaybe   processDocString :: DynFlags -> GlobalRdrEnv -> HsDocString -> ErrMsgM (Maybe (Doc Name))-processDocString = process parseString+processDocString = process parseStringMaybe -process :: ([LToken] -> Maybe (Doc RdrName))+process :: (DynFlags -> String -> Maybe (Doc RdrName))         -> DynFlags         -> GlobalRdrEnv         -> HsDocString         -> ErrMsgM (Maybe (Doc Name)) process parse dflags gre (HsDocString fs) = do    let str = unpackFS fs-   let toks = tokenise dflags str (0,0)  -- TODO: real position-   case parse toks of+   case parse dflags str of      Nothing -> do        tell [ "doc comment parse failed: " ++ str ]        return Nothing-     Just doc -> return (Just (rename dflags gre doc))+     Just doc -> do+       return (Just (rename dflags gre doc))   processModuleHeader :: DynFlags -> GlobalRdrEnv -> SafeHaskellMode -> Maybe LHsDocString@@ -84,7 +83,14 @@                 hmi' = hmi { hmi_description = descr }                 doc' = rename dflags gre doc             return (hmi', Just doc')-  return (hmi { hmi_safety = Just $ showPpr dflags safety }, doc)++  let flags :: [ExtensionFlag]+      -- We remove the flags implied by the language setting and we display the language instead+      flags = map toEnum (IS.toList $ extensionFlags dflags) \\ languageExtensions (language dflags)+  return (hmi { hmi_safety = Just $ showPpr dflags safety+              , hmi_language = language dflags+              , hmi_extensions = flags+              } , doc)   where     failure = (emptyHaddockModInfo, Nothing) @@ -96,7 +102,7 @@       DocAppend a b -> DocAppend (rn a) (rn b)       DocParagraph doc -> DocParagraph (rn doc)       DocIdentifier x -> do-        let choices = dataTcOccs x+        let choices = dataTcOccs' x         let names = concatMap (\c -> map gre_name (lookupGRE_RdrName c gre)) choices         case names of           [] ->@@ -109,8 +115,10 @@           a:b:_ | isTyConName a -> DocIdentifier a | otherwise -> DocIdentifier b               -- If an id can refer to multiple things, we give precedence to type               -- constructors.+       DocWarning doc -> DocWarning (rn doc)       DocEmphasis doc -> DocEmphasis (rn doc)+      DocBold doc -> DocBold (rn doc)       DocMonospaced doc -> DocMonospaced (rn doc)       DocUnorderedList docs -> DocUnorderedList (map rn docs)       DocOrderedList docs -> DocOrderedList (map rn docs)@@ -125,6 +133,21 @@       DocExamples e -> DocExamples e       DocEmpty -> DocEmpty       DocString str -> DocString str+      DocHeader (Header l t) -> DocHeader $ Header l (rn t)++dataTcOccs' :: RdrName -> [RdrName]+-- If the input is a data constructor, return both it and a type+-- constructor.  This is useful when we aren't sure which we are+-- looking at.+--+-- We use this definition instead of the GHC's to provide proper linking to+-- functions accross modules. See ticket #253 on Haddock Trac.+dataTcOccs' rdr_name+  | isDataOcc occ             = [rdr_name, rdr_name_tc]+  | otherwise                 = [rdr_name]+  where+    occ = rdrNameOcc rdr_name+    rdr_name_tc = setRdrNameSpace rdr_name tcName   outOfScope :: DynFlags -> RdrName -> Doc a
src/Haddock/Interface/ParseModuleHeader.hs view
@@ -12,13 +12,13 @@ module Haddock.Interface.ParseModuleHeader (parseModuleHeader) where  import Haddock.Types-import Haddock.Lex-import Haddock.Parse+import Haddock.Parser  import RdrName import DynFlags  import Data.Char+import Control.Monad (mplus)  -- ----------------------------------------------------------------------------- -- Parsing module headers@@ -36,9 +36,9 @@        (_moduleOpt,str1) = getKey "Module" str0       (descriptionOpt,str2) = getKey "Description" str1-      (_copyrightOpt,str3) = getKey "Copyright" str2-      (_licenseOpt,str4) = getKey "License" str3-      (_licenceOpt,str5) = getKey "Licence" str4+      (copyrightOpt,str3) = getKey "Copyright" str2+      (licenseOpt,str4) = getKey "License" str3+      (licenceOpt,str5) = getKey "Licence" str4       (maintainerOpt,str6) = getKey "Maintainer" str5       (stabilityOpt,str7) = getKey "Stability" str6       (portabilityOpt,str8) = getKey "Portability" str7@@ -46,22 +46,24 @@       description1 :: Either String (Maybe (Doc RdrName))       description1 = case descriptionOpt of          Nothing -> Right Nothing-         -- TODO: pass real file position-         Just description -> case parseString $ tokenise dflags description (0,0) of+         Just description -> case parseStringMaybe dflags description of             Nothing -> Left ("Cannot parse Description: " ++ description)             Just doc -> Right (Just doc)    in       case description1 of          Left mess -> Left mess-         -- TODO: pass real file position-         Right docOpt -> case parseParas $ tokenise dflags str8 (0,0) of+         Right docOpt -> case parseParasMaybe dflags str8 of            Nothing -> Left "Cannot parse header documentation paragraphs"            Just doc -> Right (HaddockModInfo {             hmi_description = docOpt,-            hmi_portability = portabilityOpt,-            hmi_stability = stabilityOpt,+            hmi_copyright = copyrightOpt,+            hmi_license = licenseOpt `mplus` licenceOpt,             hmi_maintainer = maintainerOpt,-            hmi_safety = Nothing+            hmi_stability = stabilityOpt,+            hmi_portability = portabilityOpt,+            hmi_safety = Nothing,+            hmi_language = Nothing, -- set in LexParseRn+            hmi_extensions = [] -- also set in LexParseRn             }, doc)  -- | This function is how we read keys.@@ -158,4 +160,3 @@       extractPrefix (c1:cs1) (c2:cs2)          | toUpper c1 == toUpper c2 = extractPrefix cs1 cs2          | otherwise = Nothing-
src/Haddock/Interface/Rename.hs view
@@ -12,6 +12,8 @@ module Haddock.Interface.Rename (renameInterface) where  +import Data.Traversable (traverse)+ import Haddock.GhcUtils import Haddock.Types @@ -159,50 +161,7 @@   renameDoc :: Doc Name -> RnM (Doc DocName)-renameDoc d = case d of-  DocEmpty -> return DocEmpty-  DocAppend a b -> do-    a' <- renameDoc a-    b' <- renameDoc b-    return (DocAppend a' b')-  DocString str -> return (DocString str)-  DocParagraph doc -> do-    doc' <- renameDoc doc-    return (DocParagraph doc')-  DocIdentifier x -> do-    x' <- rename x-    return (DocIdentifier x')-  DocIdentifierUnchecked x -> return (DocIdentifierUnchecked x)-  DocModule str -> return (DocModule str)-  DocWarning doc -> do-    doc' <- renameDoc doc-    return (DocWarning doc')-  DocEmphasis doc -> do-    doc' <- renameDoc doc-    return (DocEmphasis doc')-  DocMonospaced doc -> do-    doc' <- renameDoc doc-    return (DocMonospaced doc')-  DocUnorderedList docs -> do-    docs' <- mapM renameDoc docs-    return (DocUnorderedList docs')-  DocOrderedList docs -> do-    docs' <- mapM renameDoc docs-    return (DocOrderedList docs')-  DocDefList docs -> do-    docs' <- mapM (\(a,b) -> do-      a' <- renameDoc a-      b' <- renameDoc b-      return (a',b')) docs-    return (DocDefList docs')-  DocCodeBlock doc -> do-    doc' <- renameDoc doc-    return (DocCodeBlock doc')-  DocHyperlink l -> return (DocHyperlink l)-  DocPic str -> return (DocPic str)-  DocAName str -> return (DocAName str)-  DocProperty p -> return (DocProperty p)-  DocExamples e -> return (DocExamples e)+renameDoc = traverse rename   renameFnArgsDoc :: FnArgsDoc Name -> RnM (FnArgsDoc DocName)@@ -215,12 +174,8 @@ renameLKind :: LHsKind Name -> RnM (LHsKind DocName) renameLKind = renameLType -renameMaybeLKind :: Maybe (LHsKind Name)-                 -> RnM (Maybe (LHsKind DocName))-renameMaybeLKind Nothing = return Nothing-renameMaybeLKind (Just ki)-  = do { ki' <- renameLKind ki-       ; return (Just ki') }+renameMaybeLKind :: Maybe (LHsKind Name) -> RnM (Maybe (LHsKind DocName))+renameMaybeLKind = traverse renameLKind  renameType :: HsType Name -> RnM (HsType DocName) renameType t = case t of@@ -276,7 +231,7 @@   HsExplicitListTy  a b   -> HsExplicitListTy  a <$> mapM renameLType b   HsExplicitTupleTy a b   -> HsExplicitTupleTy a <$> mapM renameLType b   HsQuasiQuoteTy a        -> HsQuasiQuoteTy <$> renameHsQuasiQuote a-  HsSpliceTy _ _ _        -> error "renameType: HsSpliceTy"+  HsSpliceTy _ _          -> error "renameType: HsSpliceTy"  renameHsQuasiQuote :: HsQuasiQuote Name -> RnM (HsQuasiQuote DocName) renameHsQuasiQuote (HsQuasiQuote a b c) = HsQuasiQuote <$> rename a <*> pure b <*> pure c@@ -291,10 +246,10 @@ renameLTyVarBndr (L loc (UserTyVar n))   = do { n' <- rename n        ; return (L loc (UserTyVar n')) }-renameLTyVarBndr (L loc (KindedTyVar n k))+renameLTyVarBndr (L loc (KindedTyVar n kind))   = do { n' <- rename n-       ; k' <- renameLKind k-       ; return (L loc (KindedTyVar n' k')) }+       ; kind' <- renameLKind kind+       ; return (L loc (KindedTyVar n' kind')) }  renameLContext :: Located [LHsType Name] -> RnM (Located [LHsType DocName]) renameLContext (L loc context) = do@@ -303,11 +258,15 @@   renameInstHead :: InstHead Name -> RnM (InstHead DocName)-renameInstHead (preds, className, types) = do-  preds' <- mapM renameType preds+renameInstHead (className, k, types, rest) = do   className' <- rename className+  k' <- mapM renameType k   types' <- mapM renameType types-  return (preds', className', types')+  rest' <- case rest of+    ClassInst cs -> ClassInst <$> mapM renameType cs+    TypeInst  ts -> TypeInst  <$> traverse renameType ts+    DataInst  dd -> DataInst  <$> renameTyClD dd+  return (className', k', types', rest')   renameLDecl :: LHsDecl Name -> RnM (LHsDecl DocName)@@ -330,10 +289,8 @@     return (InstD d')   _ -> error "renameDecl" --renameLTyClD :: LTyClDecl Name -> RnM (LTyClDecl DocName)-renameLTyClD (L loc d) = return . L loc =<< renameTyClD d-+renameLThing :: (a Name -> RnM (a DocName)) -> Located (a Name) -> RnM (Located (a DocName))+renameLThing fn (L loc x) = return . L loc =<< fn x  renameTyClD :: TyClDecl Name -> RnM (TyClDecl DocName) renameTyClD d = case d of@@ -342,20 +299,22 @@     return (ForeignType lname' b)  --  TyFamily flav lname ltyvars kind tckind -> do-  TyFamily flav lname ltyvars tckind -> do-    lname'   <- renameL lname-    ltyvars' <- renameLTyVarBndrs ltyvars---    kind'    <- renameMaybeLKind kind-    tckind'    <- renameMaybeLKind tckind---    return (TyFamily flav lname' ltyvars' kind' tckind)-    return (TyFamily flav lname' ltyvars' tckind')+  FamDecl { tcdFam = decl } -> do+    decl' <- renameFamilyDecl decl+    return (FamDecl { tcdFam = decl' }) -  TyDecl { tcdLName = lname, tcdTyVars = tyvars, tcdTyDefn = defn, tcdFVs = fvs } -> do+  SynDecl { tcdLName = lname, tcdTyVars = tyvars, tcdRhs = rhs, tcdFVs = fvs } -> do     lname'    <- renameL lname     tyvars'   <- renameLTyVarBndrs tyvars-    defn'     <- renameTyDefn defn-    return (TyDecl { tcdLName = lname', tcdTyVars = tyvars', tcdTyDefn = defn', tcdFVs = fvs })+    rhs'     <- renameLType rhs+    return (SynDecl { tcdLName = lname', tcdTyVars = tyvars', tcdRhs = rhs', tcdFVs = fvs }) +  DataDecl { tcdLName = lname, tcdTyVars = tyvars, tcdDataDefn = defn, tcdFVs = fvs } -> do+    lname'    <- renameL lname+    tyvars'   <- renameLTyVarBndrs tyvars+    defn'     <- renameDataDefn defn+    return (DataDecl { tcdLName = lname', tcdTyVars = tyvars', tcdDataDefn = defn', tcdFVs = fvs })+   ClassDecl { tcdCtxt = lcontext, tcdLName = lname, tcdTyVars = ltyvars             , tcdFDs = lfundeps, tcdSigs = lsigs, tcdATs = ats, tcdATDefs = at_defs } -> do     lcontext' <- renameLContext lcontext@@ -363,8 +322,8 @@     ltyvars'  <- renameLTyVarBndrs ltyvars     lfundeps' <- mapM renameLFunDep lfundeps     lsigs'    <- mapM renameLSig lsigs-    ats'      <- mapM renameLTyClD ats-    at_defs'  <- mapM (mapM renameFamInstD) at_defs+    ats'      <- mapM (renameLThing renameFamilyDecl) ats+    at_defs'  <- mapM (mapM renameTyFamInstD) at_defs     -- we don't need the default methods or the already collected doc entities     return (ClassDecl { tcdCtxt = lcontext', tcdLName = lname', tcdTyVars = ltyvars'                       , tcdFDs = lfundeps', tcdSigs = lsigs', tcdMeths= emptyBag@@ -378,19 +337,32 @@      renameLSig (L loc sig) = return . L loc =<< renameSig sig -renameTyDefn :: HsTyDefn Name -> RnM (HsTyDefn DocName)-renameTyDefn (TyData { td_ND = nd, td_ctxt = lcontext, td_cType = cType-                     , td_kindSig = k, td_cons = cons }) = do+renameFamilyDecl :: FamilyDecl Name -> RnM (FamilyDecl DocName)+renameFamilyDecl (FamilyDecl { fdInfo = info, fdLName = lname+                             , fdTyVars = ltyvars, fdKindSig = tckind }) = do+    info'    <- renameFamilyInfo info+    lname'   <- renameL lname+    ltyvars' <- renameLTyVarBndrs ltyvars+    tckind'  <- renameMaybeLKind tckind+    return (FamilyDecl { fdInfo = info', fdLName = lname'+                       , fdTyVars = ltyvars', fdKindSig = tckind' })++renameFamilyInfo :: FamilyInfo Name -> RnM (FamilyInfo DocName)+renameFamilyInfo DataFamily     = return DataFamily+renameFamilyInfo OpenTypeFamily = return OpenTypeFamily+renameFamilyInfo (ClosedTypeFamily eqns)+  = do { eqns' <- mapM (renameLThing renameTyFamInstEqn) eqns+       ; return $ ClosedTypeFamily eqns' }++renameDataDefn :: HsDataDefn Name -> RnM (HsDataDefn DocName)+renameDataDefn (HsDataDefn { dd_ND = nd, dd_ctxt = lcontext, dd_cType = cType+                           , dd_kindSig = k, dd_cons = cons }) = do     lcontext' <- renameLContext lcontext     k'        <- renameMaybeLKind k     cons'     <- mapM (mapM renameCon) cons     -- I don't think we need the derivings, so we return Nothing-    return (TyData { td_ND = nd, td_ctxt = lcontext', td_cType = cType-                   , td_kindSig = k', td_cons = cons', td_derivs = Nothing })--renameTyDefn (TySynonym { td_synRhs = ltype }) = do-    ltype'   <- renameLType ltype-    return (TySynonym { td_synRhs = ltype' })+    return (HsDataDefn { dd_ND = nd, dd_ctxt = lcontext', dd_cType = cType+                       , dd_kindSig = k', dd_cons = cons', dd_derivs = Nothing })  renameCon :: ConDecl Name -> RnM (ConDecl DocName) renameCon decl@(ConDecl { con_name = lname, con_qvars = ltyvars@@ -430,6 +402,19 @@     lnames' <- mapM renameL lnames     ltype' <- renameLType ltype     return (TypeSig lnames' ltype')+  PatSynSig lname args ltype lreq lprov -> do+    lname' <- renameL lname+    args' <- case args of+        PrefixPatSyn largs -> PrefixPatSyn <$> mapM renameLType largs+        InfixPatSyn lleft lright -> InfixPatSyn <$> renameLType lleft <*> renameLType lright+    ltype' <- renameLType ltype+    lreq' <- renameLContext lreq+    lprov' <- renameLContext lprov+    return $ PatSynSig lname' args' ltype' lreq' lprov'+  FixSig (FixitySig lname fixity) -> do+    lname' <- renameL lname+    return $ FixSig (FixitySig lname' fixity)+  MinimalSig s -> MinimalSig <$> traverse renameL s   -- we have filtered out all other kinds of signatures in Interface.Create   _ -> error "expected TypeSig" @@ -446,24 +431,46 @@   renameInstD :: InstDecl Name -> RnM (InstDecl DocName)-renameInstD (ClsInstD { cid_poly_ty =ltype, cid_fam_insts = lATs }) = do+renameInstD (ClsInstD { cid_inst = d }) = do+  d' <- renameClsInstD d+  return (ClsInstD { cid_inst = d' })+renameInstD (TyFamInstD { tfid_inst = d }) = do+  d' <- renameTyFamInstD d+  return (TyFamInstD { tfid_inst = d' })+renameInstD (DataFamInstD { dfid_inst = d }) = do+  d' <- renameDataFamInstD d+  return (DataFamInstD { dfid_inst = d' })++renameClsInstD :: ClsInstDecl Name -> RnM (ClsInstDecl DocName)+renameClsInstD (ClsInstDecl { cid_poly_ty =ltype, cid_tyfam_insts = lATs, cid_datafam_insts = lADTs }) = do   ltype' <- renameLType ltype-  lATs' <- mapM (mapM renameFamInstD) lATs-  return (ClsInstD { cid_poly_ty = ltype', cid_binds = emptyBag, cid_sigs = []-                   , cid_fam_insts = lATs' })+  lATs'  <- mapM (mapM renameTyFamInstD) lATs+  lADTs' <- mapM (mapM renameDataFamInstD) lADTs+  return (ClsInstDecl { cid_poly_ty = ltype', cid_binds = emptyBag, cid_sigs = []+                      , cid_tyfam_insts = lATs', cid_datafam_insts = lADTs' }) -renameInstD (FamInstD { lid_inst = d }) = do-  d' <- renameFamInstD d-  return (FamInstD { lid_inst = d' }) -renameFamInstD :: FamInstDecl Name -> RnM (FamInstDecl DocName)-renameFamInstD (FamInstDecl { fid_tycon = tc, fid_pats = pats_w_bndrs, fid_defn = defn })+renameTyFamInstD :: TyFamInstDecl Name -> RnM (TyFamInstDecl DocName)+renameTyFamInstD (TyFamInstDecl { tfid_eqn = eqn })+  = do { eqn' <- renameLThing renameTyFamInstEqn eqn+       ; return (TyFamInstDecl { tfid_eqn = eqn'+                               , tfid_fvs = placeHolderNames }) }++renameTyFamInstEqn :: TyFamInstEqn Name -> RnM (TyFamInstEqn DocName)+renameTyFamInstEqn (TyFamInstEqn { tfie_tycon = tc, tfie_pats = pats_w_bndrs, tfie_rhs = rhs })   = do { tc' <- renameL tc        ; pats' <- mapM renameLType (hswb_cts pats_w_bndrs)-       ; defn' <- renameTyDefn defn -       ; return (FamInstDecl { fid_tycon = tc', fid_pats = pats_w_bndrs { hswb_cts = pats' }-                             , fid_defn = defn', fid_fvs = placeHolderNames }) }+       ; rhs' <- renameLType rhs+       ; return (TyFamInstEqn { tfie_tycon = tc', tfie_pats = pats_w_bndrs { hswb_cts = pats' }+                              , tfie_rhs = rhs' }) } +renameDataFamInstD :: DataFamInstDecl Name -> RnM (DataFamInstDecl DocName)+renameDataFamInstD (DataFamInstDecl { dfid_tycon = tc, dfid_pats = pats_w_bndrs, dfid_defn = defn })+  = do { tc' <- renameL tc+       ; pats' <- mapM renameLType (hswb_cts pats_w_bndrs)+       ; defn' <- renameDataDefn defn+       ; return (DataFamInstDecl { dfid_tycon = tc', dfid_pats = pats_w_bndrs { hswb_cts = pats' }+                                 , dfid_defn = defn', dfid_fvs = placeHolderNames }) }  renameExportItem :: ExportItem Name -> RnM (ExportItem DocName) renameExportItem item = case item of@@ -471,7 +478,7 @@   ExportGroup lev id_ doc -> do     doc' <- renameDoc doc     return (ExportGroup lev id_ doc')-  ExportDecl decl doc subs instances -> do+  ExportDecl decl doc subs instances fixities splice -> do     decl' <- renameLDecl decl     doc'  <- renameDocForDecl doc     subs' <- mapM renameSub subs@@ -479,7 +486,10 @@       inst' <- renameInstHead inst       idoc' <- mapM renameDoc idoc       return (inst', idoc')-    return (ExportDecl decl' doc' subs' instances')+    fixities' <- forM fixities $ \(name, fixity) -> do+      name' <- lookupRn name+      return (name', fixity)+    return (ExportDecl decl' doc' subs' instances' fixities' splice)   ExportNoDecl x subs -> do     x'    <- lookupRn x     subs' <- mapM lookupRn subs
src/Haddock/InterfaceFile.hs view
@@ -3,7 +3,8 @@ ----------------------------------------------------------------------------- -- | -- Module      :  Haddock.InterfaceFile--- Copyright   :  (c) David Waern 2006-2009+-- Copyright   :  (c) David Waern       2006-2009,+--                    Mateusz Kowalczyk 2013 -- License     :  BSD-like -- -- Maintainer  :  haddock@projects.haskell.org@@ -15,7 +16,7 @@ module Haddock.InterfaceFile (   InterfaceFile(..), ifPackageId,   readInterfaceFile, nameCacheFromGhc, freshNameCache, NameCacheAccessor,-  writeInterfaceFile, binaryInterfaceVersion+  writeInterfaceFile, binaryInterfaceVersion, binaryInterfaceVersionCompatibility ) where  @@ -24,6 +25,7 @@  import Control.Monad import Data.Array+import Data.Functor ((<$>)) import Data.IORef import Data.List import qualified Data.Map as Map@@ -61,7 +63,6 @@ binaryInterfaceMagic = 0xD0Cface  -#if __GLASGOW_HASKELL__ == 706 -- IMPORTANT: Since datatypes in the GHC API might change between major -- versions, and because we store GHC datatypes in our interface files, we need -- to make sure we version our interface files accordingly.@@ -75,11 +76,11 @@ -- (2) set `binaryInterfaceVersionCompatibility` to [binaryInterfaceVersion] -- binaryInterfaceVersion :: Word16-binaryInterfaceVersion = 22+#if __GLASGOW_HASKELL__ == 708+binaryInterfaceVersion = 25  binaryInterfaceVersionCompatibility :: [Word16]-binaryInterfaceVersionCompatibility = [21, 22]-+binaryInterfaceVersionCompatibility = [binaryInterfaceVersion] #else #error Unsupported GHC version #endif@@ -90,7 +91,7 @@   writeInterfaceFile :: FilePath -> InterfaceFile -> IO ()-writeInterfaceFile filename iface = do +writeInterfaceFile filename iface = do   bh0 <- openBinMem initBinMemSize   put_ bh0 binaryInterfaceMagic   put_ bh0 binaryInterfaceVersion@@ -169,7 +170,7 @@        return (initNameCache u [])  --- | Read a Haddock (@.haddock@) interface file. Return either an +-- | Read a Haddock (@.haddock@) interface file. Return either an -- 'InterfaceFile' or an error message. -- -- This function can be called in two ways.  Within a GHC session it will@@ -197,7 +198,7 @@       | otherwise -> with_name_cache $ \update_nc -> do        dict  <- get_dictionary bh0-  +       -- read the symbol table so we are capable of reading the actual data       bh1 <- do           let bh1 = setUserData bh0 $ newReadState (error "getSymtabName")@@ -364,15 +365,17 @@   instance Binary InstalledInterface where-  put_ bh (InstalledInterface modu info docMap argMap exps visExps opts subMap) = do+  put_ bh (InstalledInterface modu info docMap argMap+           exps visExps opts subMap fixMap) = do     put_ bh modu     put_ bh info     put_ bh docMap-    put_  bh argMap+    put_ bh argMap     put_ bh exps     put_ bh visExps     put_ bh opts     put_ bh subMap+    put_ bh fixMap    get bh = do     modu    <- get bh@@ -383,9 +386,10 @@     visExps <- get bh     opts    <- get bh     subMap  <- get bh+    fixMap  <- get bh      return (InstalledInterface modu info docMap argMap-            exps visExps opts subMap)+            exps visExps opts subMap fixMap)   instance Binary DocOption where@@ -397,6 +401,8 @@             putByte bh 2     put_ bh OptNotHome = do             putByte bh 3+    put_ bh OptShowExtensions = do+            putByte bh 4     get bh = do             h <- getByte bh             case h of@@ -408,6 +414,8 @@                     return OptIgnoreExports               3 -> do                     return OptNotHome+              4 -> do+                    return OptShowExtensions               _ -> fail "invalid binary data found"  @@ -429,7 +437,24 @@         label <- get bh         return (Hyperlink url label) +instance Binary Picture where+    put_ bh (Picture uri title) = do+        put_ bh uri+        put_ bh title+    get bh = do+        uri <- get bh+        title <- get bh+        return (Picture uri title) +instance Binary a => Binary (Header a) where+    put_ bh (Header l t) = do+        put_ bh l+        put_ bh t+    get bh = do+        l <- get bh+        t <- get bh+        return (Header l t)+ {-* Generated by DrIFT : Look, but Don't Touch. *-} instance (Binary id) => Binary (Doc id) where     put_ bh DocEmpty = do@@ -489,6 +514,13 @@     put_ bh (DocProperty x) = do             putByte bh 18             put_ bh x+    put_ bh (DocBold x) = do+            putByte bh 19+            put_ bh x+    put_ bh (DocHeader aa) = do+            putByte bh 20+            put_ bh aa+     get bh = do             h <- getByte bh             case h of@@ -549,25 +581,38 @@               18 -> do                     x <- get bh                     return (DocProperty x)-              _ -> fail "invalid binary data found"+              19 -> do+                    x <- get bh+                    return (DocBold x)+              20 -> do+                    aa <- get bh+                    return (DocHeader aa)+              _ -> error "invalid binary data found in the interface file"   instance Binary name => Binary (HaddockModInfo name) where   put_ bh hmi = do     put_ bh (hmi_description hmi)-    put_ bh (hmi_portability hmi)-    put_ bh (hmi_stability   hmi)+    put_ bh (hmi_copyright   hmi)+    put_ bh (hmi_license     hmi)     put_ bh (hmi_maintainer  hmi)+    put_ bh (hmi_stability   hmi)+    put_ bh (hmi_portability hmi)     put_ bh (hmi_safety      hmi)+    put_ bh (fromEnum <$> hmi_language hmi)+    put_ bh (map fromEnum $ hmi_extensions hmi)    get bh = do     descr <- get bh-    porta <- get bh-    stabi <- get bh+    copyr <- get bh+    licen <- get bh     maint <- get bh+    stabi <- get bh+    porta <- get bh     safet <- get bh-    return (HaddockModInfo descr porta stabi maint safet)-+    langu <- fmap toEnum <$> get bh+    exten <- map toEnum <$> get bh+    return (HaddockModInfo descr copyr licen maint stabi porta safet langu exten)  instance Binary DocName where   put_ bh (Documented name modu) = do@@ -589,4 +634,3 @@         name <- get bh         return (Undocumented name)       _ -> error "get DocName: Bad h"-
− src/Haddock/Lex.x
@@ -1,236 +0,0 @@------ Haddock - A Haskell Documentation Tool------ (c) Simon Marlow 2002------ This file was modified and integrated into GHC by David Waern 2006.--- Then moved back into Haddock by Isaac Dupree in 2009 :-)-----{-{-# LANGUAGE BangPatterns #-}   -- Generated by Alex-{-# OPTIONS -Wwarn -w #-}--- The above warning supression flag is a temporary kludge.--- While working on this module you are encouraged to remove it and fix--- any warnings in the module. See---     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings--- for details--module Haddock.Lex (-	Token(..),-	LToken,-	tokenise- ) where--import Lexer hiding (Token)-import Parser ( parseIdentifier )-import StringBuffer-import RdrName-import SrcLoc-import DynFlags-import FastString--import Data.Char-import Data.Word (Word8)-import Numeric-import System.IO.Unsafe-import Debug.Trace-}--$ws    = $white # \n-$digit = [0-9]-$hexdigit = [0-9a-fA-F]-$special =  [\"\@]-$alphanum = [A-Za-z0-9]-$ident    = [$alphanum \'\_\.\!\#\$\%\&\*\+\/\<\=\>\?\@\\\\\^\|\-\~\:]--:----- beginning of a paragraph-<0,para> {- $ws* \n		;- $ws* \>		{ begin birdtrack }- $ws* prop \> .* \n	{ strtoken TokProperty `andBegin` property}- $ws* \>\>\>            { strtoken TokExamplePrompt `andBegin` exampleexpr }- $ws* [\*\-]		{ token TokBullet `andBegin` string }- $ws* \[		{ token TokDefStart `andBegin` def }- $ws* \( $digit+ \) 	{ token TokNumber `andBegin` string }- $ws* $digit+ \. 	{ token TokNumber `andBegin` string }- $ws*			{ begin string }		-}---- beginning of a line-<line> {-  $ws* \>		{ begin birdtrack }-  $ws* \>\>\>		{ strtoken TokExamplePrompt `andBegin` exampleexpr }-  $ws* \n		{ token TokPara `andBegin` para }-  -- Here, we really want to be able to say-  -- $ws* (\n | <eof>) 	{ token TokPara `andBegin` para}-  -- because otherwise a trailing line of whitespace will result in -  -- a spurious TokString at the end of a docstring.  We don't have <eof>,-  -- though (NOW I realise what it was for :-).  To get around this, we always-  -- append \n to the end of a docstring.-  () 			{ begin string }-}--<birdtrack> .*	\n?	{ strtokenNL TokBirdTrack `andBegin` line }--<property> ()           { token TokPara `andBegin` para }--<example> {-  $ws*	\n		{ token TokPara `andBegin` para }-  $ws* \>\>\>	        { strtoken TokExamplePrompt `andBegin` exampleexpr }-  ()			{ begin exampleresult }-}--<exampleexpr> .* \n	{ strtokenNL TokExampleExpression `andBegin` example }--<exampleresult> .* \n	{ strtokenNL TokExampleResult `andBegin` example }--<string,def> {-  $special			{ strtoken $ \s -> TokSpecial (head s) }-  \<\< [^\>]* \>\>              { strtoken $ \s -> TokPic (init $ init $ tail $ tail s) }-  \< [^\>]* \>			{ strtoken $ \s -> TokURL (init (tail s)) }-  \# [^\#]* \#			{ strtoken $ \s -> TokAName (init (tail s)) }-  \/ [^\/]* \/                  { strtoken $ \s -> TokEmphasis (init (tail s)) }-  [\'\`] $ident+ [\'\`]		{ ident }-  \\ .				{ strtoken (TokString . tail) }-  "&#" $digit+ \;		{ strtoken $ \s -> TokString [chr (read (init (drop 2 s)))] }-  "&#" [xX] $hexdigit+ \;	{ strtoken $ \s -> case readHex (init (drop 3 s)) of [(n,_)] -> TokString [chr n] }-  -- allow special characters through if they don't fit one of the previous-  -- patterns.-  [\/\'\`\<\#\&\\]			{ strtoken TokString }-  [^ $special \/ \< \# \n \'\` \& \\ \]]* \n { strtokenNL TokString `andBegin` line }-  [^ $special \/ \< \# \n \'\` \& \\ \]]+    { strtoken TokString }-}--<def> {-  \]				{ token TokDefEnd `andBegin` string }-}---- ']' doesn't have any special meaning outside of the [...] at the beginning--- of a definition paragraph.-<string> {-  \]				{ strtoken TokString }-}--{--- | A located token-type LToken = (Token, AlexPosn)--data Token-  = TokPara-  | TokNumber-  | TokBullet-  | TokDefStart-  | TokDefEnd-  | TokSpecial Char-  | TokIdent RdrName-  | TokString String-  | TokURL String-  | TokPic String-  | TokEmphasis String-  | TokAName String-  | TokBirdTrack String-  | TokProperty String-  | TokExamplePrompt String-  | TokExampleExpression String-  | TokExampleResult String---  deriving Show--tokenPos :: LToken -> (Int, Int)-tokenPos t = let AlexPn _ line col = snd t in (line, col)---- -------------------------------------------------------------------------------- Alex support stuff---- XXX: copied the posn wrapper code from Alex to make this lexer work--- with both Alex 2.x and Alex 3.x.  However, we are not using the--- Unicode/UTF-8 support in Alex 3.x, and Unicode documentation will--- probably get mangled.--type AlexInput = (AlexPosn,     -- current position,-                  Char,         -- previous char-                  String)       -- current input string--alexInputPrevChar :: AlexInput -> Char-alexInputPrevChar (p,c,s) = c--alexGetByte :: AlexInput -> Maybe (Word8,AlexInput)-alexGetByte (p,c,[]) = Nothing-alexGetByte (p,_,(c:s))  = let p' = alexMove p c-                              in p' `seq`  Just (fromIntegral (ord c), (p', c, s))---- for compat with Alex 2.x:-alexGetChar :: AlexInput -> Maybe (Char,AlexInput)-alexGetChar i = case alexGetByte i of-                  Nothing     -> Nothing-                  Just (b,i') -> Just (chr (fromIntegral b), i')--alexMove :: AlexPosn -> Char -> AlexPosn-alexMove (AlexPn a l c) '\t' = AlexPn (a+1)  l     (((c+7) `div` 8)*8+1)-alexMove (AlexPn a l c) '\n' = AlexPn (a+1) (l+1)   1-alexMove (AlexPn a l c) _    = AlexPn (a+1)  l     (c+1)--data AlexPosn = AlexPn !Int !Int !Int-        deriving (Eq,Show)--type StartCode = Int-type Action = AlexPosn -> String -> StartCode -> (StartCode -> [LToken]) -> DynFlags -> [LToken]--tokenise :: DynFlags -> String -> (Int, Int) -> [LToken]-tokenise dflags str (line, col) = let toks = go (posn, '\n', eofHack str) para in {-trace (show toks)-} toks-  where-    posn = AlexPn 0 line col--    go inp@(pos, _, str) sc =-	  case alexScan inp sc of-		AlexEOF -> []-		AlexError _ -> []-		AlexSkip  inp' _       -> go inp' sc-		AlexToken inp'@(pos',_,_) len act -> act pos (take len str) sc (\sc -> go inp' sc) dflags---- NB. we add a final \n to the string, (see comment in the beginning of line--- production above).-eofHack str = str++"\n"--andBegin  :: Action -> StartCode -> Action-andBegin act new_sc = \pos str _ cont dflags -> act pos str new_sc cont dflags--token :: Token -> Action-token t = \pos _ sc cont _ -> (t, pos) : cont sc--strtoken, strtokenNL :: (String -> Token) -> Action-strtoken t = \pos str sc cont _ -> (t str, pos) : cont sc-strtokenNL t = \pos str sc cont _ -> (t (filter (/= '\r') str), pos) : cont sc--- ^ We only want LF line endings in our internal doc string format, so we--- filter out all CRs.--begin :: StartCode -> Action-begin sc = \_ _ _ cont _ -> cont sc---- -------------------------------------------------------------------------------- Lex a string as a Haskell identifier--ident :: Action-ident pos str sc cont dflags = -  case parseIdent dflags loc id of-	Just names -> (TokIdent names, pos) : cont sc-	Nothing -> (TokString str, pos) : cont sc- where id = init (tail str)-       -- TODO: Get the real filename here. Maybe we should just be-       --       using GHC SrcLoc's ourself?-       filename = mkFastString "<unknown file>"-       loc = case pos of-             AlexPn _ line col ->-                 mkRealSrcLoc filename line col--parseIdent :: DynFlags -> RealSrcLoc -> String -> Maybe RdrName-parseIdent dflags loc str0 = -  let buffer = stringToStringBuffer str0-      pstate = mkPState dflags buffer loc-      result = unP parseIdentifier pstate -  in case result of -       POk _ name -> Just (unLoc name)-       _ -> Nothing-}
src/Haddock/Options.hs view
@@ -1,8 +1,9 @@ ----------------------------------------------------------------------------- -- | -- Module      :  Haddock.Options--- Copyright   :  (c) Simon Marlow 2003-2006,---                    David Waern  2006-2009+-- Copyright   :  (c) Simon Marlow      2003-2006,+--                    David Waern       2006-2009,+--                    Mateusz Kowalczyk 2013 -- License     :  BSD-like -- -- Maintainer  :  haddock@projects.haskell.org@@ -31,7 +32,6 @@ ) where  -import Data.Maybe import Distribution.Verbosity import Haddock.Utils import Haddock.Types@@ -51,9 +51,10 @@   | Flag_Lib String   | Flag_OutputDir FilePath   | Flag_Prologue FilePath-  | Flag_SourceBaseURL   String-  | Flag_SourceModuleURL String-  | Flag_SourceEntityURL String+  | Flag_SourceBaseURL    String+  | Flag_SourceModuleURL  String+  | Flag_SourceEntityURL  String+  | Flag_SourceLEntityURL String   | Flag_WikiBaseURL   String   | Flag_WikiModuleURL String   | Flag_WikiEntityURL String@@ -62,6 +63,7 @@   | Flag_Help   | Flag_Verbosity String   | Flag_Version+  | Flag_CompatibleInterfaceVersions   | Flag_InterfaceVersion   | Flag_UseContents String   | Flag_GenContents@@ -69,6 +71,7 @@   | Flag_GenIndex   | Flag_IgnoreAllExports   | Flag_HideModule String+  | Flag_ShowExtensions String   | Flag_OptGhc String   | Flag_GhcLibDir String   | Flag_GhcVersion@@ -79,6 +82,7 @@   | Flag_NoTmpCompDir   | Flag_Qualification String   | Flag_PrettyHtml+  | Flag_PrintMissingDocs   deriving (Eq)  @@ -111,6 +115,8 @@       "URL for a source code link for each module\n(using the %{FILE} or %{MODULE} vars)",     Option []  ["source-entity"]  (ReqArg Flag_SourceEntityURL "URL")       "URL for a source code link for each entity\n(using the %{FILE}, %{MODULE}, %{NAME},\n%{KIND} or %{LINE} vars)",+    Option []  ["source-entity-line"] (ReqArg Flag_SourceLEntityURL "URL")+      "URL for a source code link for each entity.\nUsed if name links are unavailable, eg. for TH splices.",     Option []  ["comments-base"]   (ReqArg Flag_WikiBaseURL "URL")       "URL for a comments link on the contents\nand index pages",     Option []  ["comments-module"]  (ReqArg Flag_WikiModuleURL "URL")@@ -131,6 +137,8 @@       "display this help and exit",     Option ['V']  ["version"]  (NoArg Flag_Version)       "output version information and exit",+    Option []  ["compatible-interface-versions"]  (NoArg Flag_CompatibleInterfaceVersions)+      "output compatible interface file versions and exit",     Option []  ["interface-version"]  (NoArg Flag_InterfaceVersion)       "output interface file version and exit",     Option ['v']  ["verbosity"]  (ReqArg Flag_Verbosity "VERBOSITY")@@ -147,6 +155,8 @@       "behave as if all modules have the\nignore-exports atribute",     Option [] ["hide"] (ReqArg Flag_HideModule "MODULE")       "behave as if MODULE has the hide attribute",+    Option [] ["show-extensions"] (ReqArg Flag_ShowExtensions "MODULE")+      "behave as if MODULE has the show-extensions attribute",     Option [] ["optghc"] (ReqArg Flag_OptGhc "OPTION")       "option to be forwarded to GHC",     Option []  ["ghc-version"]  (NoArg Flag_GhcVersion)@@ -159,7 +169,9 @@     Option [] ["no-tmp-comp-dir"] (NoArg Flag_NoTmpCompDir)       "do not re-direct compilation output to a temporary directory",     Option [] ["pretty-html"] (NoArg Flag_PrettyHtml)-      "generate html with newlines and indenting (for use with --html)"+      "generate html with newlines and indenting (for use with --html)",+    Option [] ["print-missing-docs"] (NoArg Flag_PrintMissingDocs)+      "print information about any undocumented entities"   ]  @@ -207,18 +219,19 @@ optCssFile flags = optLast [ str | Flag_CSS str <- flags ]  -sourceUrls :: [Flag] -> (Maybe String, Maybe String, Maybe String)+sourceUrls :: [Flag] -> (Maybe String, Maybe String, Maybe String, Maybe String) sourceUrls flags =-  (listToMaybe [str | Flag_SourceBaseURL   str <- flags]-  ,listToMaybe [str | Flag_SourceModuleURL str <- flags]-  ,listToMaybe [str | Flag_SourceEntityURL str <- flags])+  (optLast [str | Flag_SourceBaseURL    str <- flags]+  ,optLast [str | Flag_SourceModuleURL  str <- flags]+  ,optLast [str | Flag_SourceEntityURL  str <- flags]+  ,optLast [str | Flag_SourceLEntityURL str <- flags])   wikiUrls :: [Flag] -> (Maybe String, Maybe String, Maybe String) wikiUrls flags =-  (listToMaybe [str | Flag_WikiBaseURL   str <- flags]-  ,listToMaybe [str | Flag_WikiModuleURL str <- flags]-  ,listToMaybe [str | Flag_WikiEntityURL str <- flags])+  (optLast [str | Flag_WikiBaseURL   str <- flags]+  ,optLast [str | Flag_WikiModuleURL str <- flags]+  ,optLast [str | Flag_WikiEntityURL str <- flags])   optDumpInterfaceFile :: [Flag] -> Maybe FilePath@@ -272,4 +285,3 @@ optLast :: [a] -> Maybe a optLast [] = Nothing optLast xs = Just (last xs)-
− src/Haddock/Parse.y
@@ -1,171 +0,0 @@-{-{-# LANGUAGE BangPatterns #-} -- required for versions of Happy before 1.18.6-{-# OPTIONS -Wwarn -w #-}--- The above warning supression flag is a temporary kludge.--- While working on this module you are encouraged to remove it and fix--- any warnings in the module. See---     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings--- for details--module Haddock.Parse (parseString, parseParas) where--import Haddock.Lex-import Haddock.Types (Doc(..), Example(Example), Hyperlink(..))-import Haddock.Doc-import HsSyn-import RdrName-import Data.Char  (isSpace)-import Data.Maybe (fromMaybe)-import Data.List  (stripPrefix)-}--%expect 0--%tokentype { LToken }--%token	'/'	{ (TokSpecial '/',_) }-	'@'	{ (TokSpecial '@',_) }-	'['     { (TokDefStart,_) }-	']'     { (TokDefEnd,_) }-	DQUO 	{ (TokSpecial '\"',_) }-	URL	{ (TokURL $$,_) }-	PIC     { (TokPic $$,_) }-	ANAME	{ (TokAName $$,_) }-	'/../'  { (TokEmphasis $$,_) }-	'-'	{ (TokBullet,_) }-	'(n)'	{ (TokNumber,_) }-	'>..'	{ (TokBirdTrack $$,_) }-	PROP	{ (TokProperty $$,_) }-	PROMPT	{ (TokExamplePrompt $$,_) }-	RESULT	{ (TokExampleResult $$,_) }-	EXP	{ (TokExampleExpression $$,_) }-	IDENT   { (TokIdent $$,_) }-	PARA    { (TokPara,_) }-	STRING	{ (TokString $$,_) }--%monad { Maybe }--%name parseParas doc-%name parseString seq--%%--doc	:: { Doc RdrName }-	: apara PARA doc	{ docAppend $1 $3 }-	| PARA doc 		{ $2 }-	| apara			{ $1 }-	| {- empty -}		{ DocEmpty }--apara	:: { Doc RdrName }-	: ulpara		{ DocUnorderedList [$1] }-	| olpara		{ DocOrderedList [$1] }-        | defpara               { DocDefList [$1] }-	| para			{ $1 }--ulpara  :: { Doc RdrName }-	: '-' para		{ $2 }--olpara  :: { Doc RdrName } -	: '(n)' para		{ $2 }--defpara :: { (Doc RdrName, Doc RdrName) }-	: '[' seq ']' seq	{ ($2, $4) }--para    :: { Doc RdrName }-	: seq			{ docParagraph $1 }-	| codepara		{ DocCodeBlock $1 }-	| property		{ $1 }-	| examples		{ DocExamples $1 }--codepara :: { Doc RdrName }-	: '>..' codepara	{ docAppend (DocString $1) $2 }-	| '>..'			{ DocString $1 }--property :: { Doc RdrName }-	: PROP			{ makeProperty $1 }--examples :: { [Example] }-	: example examples	{ $1 : $2 }-	| example		{ [$1] }--example :: { Example }-	: PROMPT EXP result	{ makeExample $1 $2 (lines $3) }-	| PROMPT EXP		{ makeExample $1 $2 [] }--result :: { String }-	: RESULT result		{ $1 ++ $2 }-	| RESULT		{ $1 }--seq	:: { Doc RdrName }-	: elem seq		{ docAppend $1 $2 }-	| elem			{ $1 }--elem	:: { Doc RdrName }-	: elem1			{ $1 }-	| '@' seq1 '@'		{ DocMonospaced $2 }--seq1	:: { Doc RdrName }-	: PARA seq1             { docAppend (DocString "\n") $2 }-	| elem1 seq1            { docAppend $1 $2 }-	| elem1			{ $1 }--elem1	:: { Doc RdrName }-	: STRING		{ DocString $1 }-	| '/../'                { DocEmphasis (DocString $1) }-	| URL			{ DocHyperlink (makeHyperlink $1) }-	| PIC                   { DocPic $1 }-	| ANAME			{ DocAName $1 }-	| IDENT			{ DocIdentifier $1 }-	| DQUO strings DQUO	{ DocModule $2 }--strings  :: { String }-	: STRING		{ $1 }-	| STRING strings	{ $1 ++ $2 }--{-happyError :: [LToken] -> Maybe a-happyError toks = Nothing---- | Create a `Hyperlink` from given string.------ A hyperlink consists of a URL and an optional label.  The label is separated--- from the url by one or more whitespace characters.-makeHyperlink :: String -> Hyperlink-makeHyperlink input = case break isSpace $ strip input of-  (url, "")    -> Hyperlink url Nothing-  (url, label) -> Hyperlink url (Just . dropWhile isSpace $ label)--makeProperty :: String -> Doc RdrName-makeProperty s = case strip s of-  'p':'r':'o':'p':'>':xs ->-	DocProperty (dropWhile isSpace xs)-  xs ->-	error $ "makeProperty: invalid input " ++ show xs---- | Create an 'Example', stripping superfluous characters as appropriate-makeExample :: String -> String -> [String] -> Example-makeExample prompt expression result =-  Example-	(strip expression)	-- we do not care about leading and trailing-				-- whitespace in expressions, so drop them-	result'-  where-	-- 1. drop trailing whitespace from the prompt, remember the prefix-	(prefix, _) = span isSpace prompt--	-- 2. drop, if possible, the exact same sequence of whitespace-	-- characters from each result line-	---	-- 3. interpret lines that only contain the string "<BLANKLINE>" as an-	-- empty line-	result' = map (substituteBlankLine . tryStripPrefix prefix) result-	  where-		tryStripPrefix xs ys = fromMaybe ys $ stripPrefix xs ys--		substituteBlankLine "<BLANKLINE>" = ""-		substituteBlankLine line          = line---- | Remove all leading and trailing whitespace-strip :: String -> String-strip = dropWhile isSpace . reverse . dropWhile isSpace . reverse-}
+ src/Haddock/Parser.hs view
@@ -0,0 +1,449 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE StandaloneDeriving+             , FlexibleInstances, UndecidableInstances+             , IncoherentInstances #-}+-- |+-- Module      :  Haddock.Parser+-- Copyright   :  (c) Mateusz Kowalczyk 2013,+--                    Simon Hengel      2013+-- License     :  BSD-like+--+-- Maintainer  :  haddock@projects.haskell.org+-- Stability   :  experimental+-- Portability :  portable++module Haddock.Parser (parseString, parseParas, parseStringMaybe, parseParasMaybe) where++import           Prelude hiding (takeWhile)+import           Control.Arrow (first)+import           Control.Monad (void, mfilter)+import           Control.Applicative+import           Data.Attoparsec.ByteString.Char8 hiding (parse, take, endOfLine)+import qualified Data.ByteString.Char8 as BS+import           Data.Char (chr, isAsciiUpper)+import           Data.List (stripPrefix, intercalate)+import           Data.Maybe (fromMaybe)+import           Data.Monoid+import           DynFlags+import           FastString (mkFastString)+import           Haddock.Doc+import           Haddock.Types+import           Lexer (mkPState, unP, ParseResult(POk))+import           Parser (parseIdentifier)+import           RdrName+import           SrcLoc (mkRealSrcLoc, unLoc)+import           StringBuffer (stringToStringBuffer)+import           Haddock.Utf8+import           Haddock.Parser.Util++{-# DEPRECATED parseParasMaybe "use `parseParas` instead" #-}+parseParasMaybe :: DynFlags -> String -> Maybe (Doc RdrName)+parseParasMaybe d = Just . parseParas d++{-# DEPRECATED parseStringMaybe "use `parseString` instead" #-}+parseStringMaybe :: DynFlags -> String -> Maybe (Doc RdrName)+parseStringMaybe d = Just . parseString d++parse :: Parser a -> BS.ByteString -> a+parse p = either err id . parseOnly (p <* endOfInput)+  where+    err = error . ("Haddock.Parser.parse: " ++)++-- | Main entry point to the parser. Appends the newline character+-- to the input string.+parseParas :: DynFlags+              -> String -- ^ String to parse+              -> Doc RdrName+parseParas d = parse (p <* skipSpace) . encodeUtf8 . (++ "\n")+  where+    p :: Parser (Doc RdrName)+    p = mconcat <$> paragraph d `sepBy` many (skipHorizontalSpace *> "\n")++-- | Parse a text paragraph.+parseString :: DynFlags -> String -> Doc RdrName+parseString d = parseStringBS d . encodeUtf8 . dropWhile isSpace++parseStringBS :: DynFlags -> BS.ByteString -> Doc RdrName+parseStringBS d = parse p+  where+    p :: Parser (Doc RdrName)+    p = mconcat <$> many (monospace d <|> anchor <|> identifier d+                          <|> moduleName <|> picture <|> hyperlink <|> autoUrl <|> bold d+                          <|> emphasis d <|> encodedChar <|> string' <|> skipSpecialChar)++-- | Parses and processes+-- <https://en.wikipedia.org/wiki/Numeric_character_reference Numeric character references>+--+-- >>> parseOnly encodedChar "&#65;&#66;&#67;"+-- Right (DocString "ABC")+encodedChar :: Parser (Doc a)+encodedChar = "&#" *> c <* ";"+  where+    c = DocString . return . chr <$> num+    num = hex <|> decimal+    hex = ("x" <|> "X") *> hexadecimal++specialChar :: [Char]+specialChar = "_/<@\"&'`"++-- | Plain, regular parser for text. Called as one of the last parsers+-- to ensure that we have already given a chance to more meaningful parsers+-- before capturing their characers.+string' :: Parser (Doc a)+string' = DocString . unescape . decodeUtf8 <$> takeWhile1_ (`notElem` specialChar)+  where+    unescape "" = ""+    unescape ('\\':x:xs) = x : unescape xs+    unescape (x:xs) = x : unescape xs++-- | Skips a single special character and treats it as a plain string.+-- This is done to skip over any special characters belonging to other+-- elements but which were not deemed meaningful at their positions.+skipSpecialChar :: Parser (Doc a)+skipSpecialChar = DocString . return <$> satisfy (`elem` specialChar)++-- | Emphasis parser.+--+-- >>> parseOnly emphasis "/Hello world/"+-- Right (DocEmphasis (DocString "Hello world"))+emphasis :: DynFlags -> Parser (Doc RdrName)+emphasis d = DocEmphasis . parseStringBS d <$>+  mfilter ('\n' `BS.notElem`) ("/" *> takeWhile1_ (/= '/') <* "/")++-- | Bold parser.+--+-- >>> parseOnly bold "__Hello world__"+-- Right (DocBold (DocString "Hello world"))+bold :: DynFlags -> Parser (Doc RdrName)+bold d = DocBold . parseStringBS d <$> disallowNewline ("__" *> takeUntil "__")++disallowNewline :: Parser BS.ByteString -> Parser BS.ByteString+disallowNewline = mfilter ('\n' `BS.notElem`)++-- | Like `takeWhile`, but unconditionally take escaped characters.+takeWhile_ :: (Char -> Bool) -> Parser BS.ByteString+takeWhile_ p = scan False p_+  where+    p_ escaped c+      | escaped = Just False+      | not $ p c = Nothing+      | otherwise = Just (c == '\\')++-- | Like `takeWhile1`, but unconditionally take escaped characters.+takeWhile1_ :: (Char -> Bool) -> Parser BS.ByteString+takeWhile1_ = mfilter (not . BS.null) . takeWhile_++-- | Text anchors to allow for jumping around the generated documentation.+--+-- >>> parseOnly anchor "#Hello world#"+-- Right (DocAName "Hello world")+anchor :: Parser (Doc a)+anchor = DocAName . decodeUtf8 <$> ("#" *> takeWhile1 (`notElem` "#\n") <* "#")++-- | Monospaced strings.+--+-- >>> parseOnly (monospace dynflags) "@cruel@"+-- Right (DocMonospaced (DocString "cruel"))+monospace :: DynFlags -> Parser (Doc RdrName)+monospace d = DocMonospaced . parseStringBS d <$> ("@" *> takeWhile1_ (/= '@') <* "@")++moduleName :: Parser (Doc a)+moduleName = DocModule <$> (char '"' *> modid <* char '"')+  where+    modid = intercalate "." <$> conid `sepBy1` "."+    conid = (:)+      <$> satisfy isAsciiUpper+      -- NOTE: According to Haskell 2010 we shouldd actually only+      -- accept {small | large | digit | ' } here.  But as we can't+      -- match on unicode characters, this is currently not possible.+      <*> (decodeUtf8 <$> takeWhile (`notElem` " .&[{}(=*)+]!#|@/;,^?\"\n"))++-- | Picture parser, surrounded by \<\< and \>\>. It's possible to specify+-- a title for the picture.+--+-- >>> parseOnly picture "<<hello.png>>"+-- Right (DocPic (Picture "hello.png" Nothing))+-- >>> parseOnly picture "<<hello.png world>>"+-- Right (DocPic (Picture "hello.png" (Just "world")))+picture :: Parser (Doc a)+picture = DocPic . makeLabeled Picture . decodeUtf8+          <$> disallowNewline ("<<" *> takeUntil ">>")++-- | Paragraph parser, called by 'parseParas'.+paragraph :: DynFlags -> Parser (Doc RdrName)+paragraph d = examples <|> skipSpace *> (list d <|> birdtracks <|> codeblock d+                                         <|> property <|> header d+                                         <|> textParagraph d)++header :: DynFlags -> Parser (Doc RdrName)+header d = do+  let psers = map (string . encodeUtf8 . concat . flip replicate "=") [6, 5 .. 1]+      pser = foldl1 (<|>) psers+  delim <- decodeUtf8 <$> pser+  line <- skipHorizontalSpace *> nonEmptyLine >>= return . parseString d+  rest <- paragraph d <|> return mempty+  return $ docAppend (DocParagraph (DocHeader (Header (length delim) line))) rest++textParagraph :: DynFlags -> Parser (Doc RdrName)+textParagraph d = docParagraph . parseString d . intercalate "\n" <$> many1 nonEmptyLine++-- | List parser, called by 'paragraph'.+list :: DynFlags -> Parser (Doc RdrName)+list d = DocUnorderedList <$> unorderedList d+         <|> DocOrderedList <$> orderedList d+         <|> DocDefList <$> definitionList d++-- | Parses unordered (bullet) lists.+unorderedList :: DynFlags -> Parser [Doc RdrName]+unorderedList d = ("*" <|> "-") *> innerList (unorderedList d) d++-- | Parses ordered lists (numbered or dashed).+orderedList :: DynFlags -> Parser [Doc RdrName]+orderedList d = (paren <|> dot) *> innerList (orderedList d) d+  where+    dot = (decimal :: Parser Int) <* "."+    paren = "(" *> decimal <* ")"++-- | Generic function collecting any further lines belonging to the+-- list entry and recursively collecting any further lists in the+-- same paragraph. Usually used as+--+-- > someListFunction dynflags = listBeginning *> innerList someListFunction dynflags+innerList :: Parser [Doc RdrName] -> DynFlags -> Parser [Doc RdrName]+innerList item d = do+  c <- takeLine+  (cs, items) <- more item d+  let contents = docParagraph . parseString d . dropNLs . unlines $ c : cs+  return $ case items of+    Left p -> [contents `joinPara` p]+    Right i -> contents : i++-- | Parses definition lists.+definitionList :: DynFlags -> Parser [(Doc RdrName, Doc RdrName)]+definitionList d = do+  label <- "[" *> (parseStringBS d <$> takeWhile1 (`notElem` "]\n")) <* "]"+  c <- takeLine+  (cs, items) <- more (definitionList d) d+  let contents = parseString d . dropNLs . unlines $ c : cs+  return $ case items of+    Left p -> [(label, contents `joinPara` p)]+    Right i -> (label, contents) : i++-- | If possible, appends two 'Doc's under a 'DocParagraph' rather than+-- outside of it. This allows to get structures like+--+-- @DocParagraph (DocAppend … …)@+--+-- rather than+--+-- @DocAppend (DocParagraph …) …@+joinPara :: Doc id -> Doc id -> Doc id+joinPara (DocParagraph p) c = docParagraph $ docAppend p c+joinPara d p = docAppend d p++-- | Drops all trailing newlines.+dropNLs :: String -> String+dropNLs = reverse . dropWhile (== '\n') . reverse++-- | Main worker for 'innerList' and 'definitionList'.+-- We need the 'Either' here to be able to tell in the respective functions+-- whether we're dealing with the next list or a nested paragraph.+more :: Monoid a => Parser a -> DynFlags+     -> Parser ([String], Either (Doc RdrName) a)+more item d = innerParagraphs d <|> moreListItems item+              <|> moreContent item d <|> pure ([], Right mempty)++-- | Use by 'innerList' and 'definitionList' to parse any nested paragraphs.+innerParagraphs :: DynFlags+                -> Parser ([String], Either (Doc RdrName) a)+innerParagraphs d = (,) [] . Left <$> ("\n" *> indentedParagraphs d)++-- | Attemps to fetch the next list if possibly. Used by 'innerList' and+-- 'definitionList' to recursivly grab lists that aren't separated by a whole+-- paragraph.+moreListItems :: Parser a+              -> Parser ([String], Either (Doc RdrName) a)+moreListItems item = (,) [] . Right <$> (skipSpace *> item)++-- | Helper for 'innerList' and 'definitionList' which simply takes+-- a line of text and attempts to parse more list content with 'more'.+moreContent :: Monoid a => Parser a -> DynFlags+            -> Parser ([String], Either (Doc RdrName) a)+moreContent item d = first . (:) <$> nonEmptyLine <*> more item d++-- | Runs the 'parseParas' parser on an indented paragraph.+-- The indentation is 4 spaces.+indentedParagraphs :: DynFlags -> Parser (Doc RdrName)+indentedParagraphs d = parseParas d . concat <$> dropFrontOfPara "    "++-- | Grab as many fully indented paragraphs as we can.+dropFrontOfPara :: Parser BS.ByteString -> Parser [String]+dropFrontOfPara sp = do+  currentParagraph <- some (sp *> takeNonEmptyLine)+  followingParagraphs <-+    skipHorizontalSpace *> nextPar -- we have more paragraphs to take+    <|> skipHorizontalSpace *> nlList -- end of the ride, remember the newline+    <|> endOfInput *> return [] -- nothing more to take at all+  return (currentParagraph ++ followingParagraphs)+  where+    nextPar = (++) <$> nlList <*> dropFrontOfPara sp+    nlList = "\n" *> return ["\n"]++nonSpace :: BS.ByteString -> Parser BS.ByteString+nonSpace xs+  | not $ any (not . isSpace) $ decodeUtf8 xs = fail "empty line"+  | otherwise = return xs++-- | Takes a non-empty, not fully whitespace line.+--+--  Doesn't discard the trailing newline.+takeNonEmptyLine :: Parser String+takeNonEmptyLine = do+    (++ "\n") . decodeUtf8 <$> (takeWhile1 (/= '\n') >>= nonSpace) <* "\n"++birdtracks :: Parser (Doc a)+birdtracks = DocCodeBlock . DocString . intercalate "\n" . stripSpace <$> many1 line+  where+    line = skipHorizontalSpace *> ">" *> takeLine++stripSpace :: [String] -> [String]+stripSpace = fromMaybe <*> mapM strip'+  where+    strip' (' ':xs') = Just xs'+    strip' "" = Just ""+    strip' _  = Nothing++-- | Parses examples. Examples are a paragraph level entitity (separated by an empty line).+-- Consecutive examples are accepted.+examples :: Parser (Doc a)+examples = DocExamples <$> (many (skipHorizontalSpace *> "\n") *> go)+  where+    go :: Parser [Example]+    go = do+      prefix <- decodeUtf8 <$> takeHorizontalSpace <* ">>>"+      expr <- takeLine+      (rs, es) <- resultAndMoreExamples+      return (makeExample prefix expr rs : es)+      where+        resultAndMoreExamples :: Parser ([String], [Example])+        resultAndMoreExamples = moreExamples <|> result <|> pure ([], [])+          where+            moreExamples :: Parser ([String], [Example])+            moreExamples = (,) [] <$> go++            result :: Parser ([String], [Example])+            result = first . (:) <$> nonEmptyLine <*> resultAndMoreExamples++    makeExample :: String -> String -> [String] -> Example+    makeExample prefix expression res =+      Example (strip expression) result+      where+        result = map (substituteBlankLine . tryStripPrefix) res++        tryStripPrefix xs = fromMaybe xs (stripPrefix prefix xs)++        substituteBlankLine "<BLANKLINE>" = ""+        substituteBlankLine xs = xs++nonEmptyLine :: Parser String+nonEmptyLine = mfilter (any (not . isSpace)) takeLine++takeLine :: Parser String+takeLine = decodeUtf8 <$> takeWhile (/= '\n') <* endOfLine++endOfLine :: Parser ()+endOfLine = void "\n" <|> endOfInput++-- | Property parser.+--+-- >>> parseOnly property "prop> hello world"+-- Right (DocProperty "hello world")+property :: Parser (Doc a)+property = DocProperty . strip . decodeUtf8 <$> ("prop>" *> takeWhile1 (/= '\n'))++-- |+-- Paragraph level codeblock. Anything between the two delimiting @ is parsed+-- for markup.+codeblock :: DynFlags -> Parser (Doc RdrName)+codeblock d =+  DocCodeBlock . parseStringBS d <$> ("@" *> skipHorizontalSpace *> "\n" *> block' <* "@")+  where+    block' = scan False p+      where+        p isNewline c+          | isNewline && c == '@' = Nothing+          | isNewline && isSpace c = Just isNewline+          | otherwise = Just $ c == '\n'++hyperlink :: Parser (Doc a)+hyperlink = DocHyperlink . makeLabeled Hyperlink . decodeUtf8+              <$> disallowNewline ("<" *> takeUntil ">")+            <|> autoUrl++autoUrl :: Parser (Doc a)+autoUrl = mkLink <$> url+  where+    url = mappend <$> ("http://" <|> "https://" <|> "ftp://") <*> takeWhile1 (not . isSpace)+    mkLink :: BS.ByteString -> Doc a+    mkLink s = case BS.unsnoc s of+      Just (xs, x) | x `elem` ",.!?" -> DocHyperlink (Hyperlink (decodeUtf8 xs) Nothing) <> DocString [x]+      _ -> DocHyperlink (Hyperlink (decodeUtf8 s) Nothing)++-- | Parses strings between identifier delimiters. Consumes all input that it+-- deems to be valid in an identifier. Note that it simply blindly consumes+-- characters and does no actual validation itself.+parseValid :: Parser String+parseValid = do+  vs <- many' $ satisfy (`elem` "_.!#$%&*+/<=>?@\\|-~:") <|> digit <|> letter_ascii+  c <- peekChar+  case c of+    Just '`' -> return vs+    Just '\'' -> (\x -> vs ++ "'" ++ x) <$> ("'" *> parseValid)+                 <|> return vs+    _ -> fail "outofvalid"++-- | Parses identifiers with help of 'parseValid'. Asks GHC for 'RdrName' from the+-- string it deems valid.+identifier :: DynFlags -> Parser (Doc RdrName)+identifier dflags = do+  o <- idDelim+  vid <- parseValid+  e <- idDelim+  return $ validIdentifier o vid e+  where+    idDelim = char '\'' <|> char '`'+    validIdentifier o ident e = case parseIdent ident of+      Just identName -> DocIdentifier identName+      Nothing -> DocString $ o : ident ++ [e]++    parseIdent :: String -> Maybe RdrName+    parseIdent str0 =+      let buffer = stringToStringBuffer str0+          realSrcLc = mkRealSrcLoc (mkFastString "<unknown file>") 0 0+          pstate = mkPState dflags buffer realSrcLc+      in case unP parseIdentifier pstate of+        POk _ name -> Just (unLoc name)+        _ -> Nothing++-- | Remove all leading and trailing whitespace+strip :: String -> String+strip = (\f -> f . f) $ dropWhile isSpace . reverse++skipHorizontalSpace :: Parser ()+skipHorizontalSpace = skipWhile (`elem` " \t\f\v\r")++takeHorizontalSpace :: Parser BS.ByteString+takeHorizontalSpace = takeWhile (`elem` " \t\f\v\r")++makeLabeled :: (String -> Maybe String -> a) -> String -> a+makeLabeled f input = case break isSpace $ removeEscapes $ strip input of+  (uri, "")    -> f uri Nothing+  (uri, label) -> f uri (Just $ dropWhile isSpace label)+  where+    -- As we don't parse these any further, we don't do any processing to the+    -- string so we at least remove escape character here. Perhaps we should+    -- actually be parsing the label at the very least?+    removeEscapes "" = ""+    removeEscapes ('\\':'\\':xs) = '\\' : removeEscapes xs+    removeEscapes ('\\':xs) = removeEscapes xs+    removeEscapes (x:xs) = x : removeEscapes xs
+ src/Haddock/Parser/Util.hs view
@@ -0,0 +1,26 @@+module Haddock.Parser.Util where++import           Control.Applicative+import           Control.Monad+import           Data.Attoparsec.ByteString.Char8+import           Data.ByteString.Char8 (ByteString)+import qualified Data.ByteString.Char8 as BS++takeUntil :: ByteString -> Parser ByteString+takeUntil end_ = dropEnd <$> requireEnd (scan (False, end) p) >>= gotSome+  where+    end = BS.unpack end_++    p :: (Bool, String) -> Char -> Maybe (Bool, String)+    p acc c = case acc of+      (True, _) -> Just (False, end)+      (_, []) -> Nothing+      (_, x:xs) | x == c -> Just (False, xs)+      _ -> Just (c == '\\', end)++    dropEnd = BS.reverse . BS.drop (length end) . BS.reverse+    requireEnd = mfilter (BS.isSuffixOf end_)++    gotSome xs+      | BS.null xs = fail "didn't get any content"+      | otherwise = return xs
src/Haddock/Types.hs view
@@ -1,10 +1,11 @@-{-# LANGUAGE DeriveDataTypeable, DeriveFunctor #-}+{-# LANGUAGE DeriveDataTypeable, DeriveFunctor, DeriveFoldable, DeriveTraversable, StandaloneDeriving #-} {-# OPTIONS_GHC -fno-warn-orphans #-} ----------------------------------------------------------------------------- -- | -- Module      :  Haddock.Types--- Copyright   :  (c) Simon Marlow 2003-2006,---                    David Waern  2006-2009+-- Copyright   :  (c) Simon Marlow      2003-2006,+--                    David Waern       2006-2009,+--                    Mateusz Kowalczyk 2013 -- License     :  BSD-like -- -- Maintainer  :  haddock@projects.haskellorg@@ -17,20 +18,24 @@ module Haddock.Types (   module Haddock.Types   , HsDocString, LHsDocString+  , Fixity(..)  ) where -+import Data.Foldable+import Data.Traversable import Control.Exception-import Control.Arrow+import Control.Arrow hiding ((<+>)) import Control.DeepSeq import Data.Typeable import Data.Map (Map)-import Data.Maybe import qualified Data.Map as Map-import Data.Monoid+import BasicTypes (Fixity(..)) import GHC hiding (NoLink)+import DynFlags (ExtensionFlag, Language) import OccName-+import Outputable+import Control.Applicative (Applicative(..))+import Control.Monad (ap)  ----------------------------------------------------------------------------- -- * Convenient synonyms@@ -43,6 +48,8 @@ type ArgMap a      = Map Name (Map Int (Doc a)) type SubMap        = Map Name [Name] type DeclMap       = Map Name [LHsDecl Name]+type InstMap       = Map SrcSpan Name+type FixMap        = Map Name Fixity type SrcMap        = Map PackageId FilePath type DocPaths      = (FilePath, Maybe FilePath) -- paths to HTML and sources @@ -93,6 +100,7 @@   , ifaceRnArgMap        :: !(ArgMap DocName)    , ifaceSubMap          :: !(Map Name [Name])+  , ifaceFixMap          :: !(Map Name Fixity)    , ifaceExportItems     :: ![ExportItem Name]   , ifaceRnExportItems   :: ![ExportItem DocName]@@ -110,6 +118,7 @@      -- | Instances exported by the module.   , ifaceInstances       :: ![ClsInst]+  , ifaceFamInstances    :: ![FamInst]      -- | The number of haddockable and haddocked items in the module, as a     -- tuple. Haddockable items are the exports and the module itself.@@ -150,6 +159,7 @@   , instOptions        :: [DocOption]    , instSubMap         :: Map Name [Name]+  , instFixMap         :: Map Name Fixity   }  @@ -164,6 +174,7 @@   , instVisibleExports = ifaceVisibleExports interface   , instOptions        = ifaceOptions        interface   , instSubMap         = ifaceSubMap         interface+  , instFixMap         = ifaceFixMap         interface   }  @@ -190,6 +201,13 @@         -- | Instances relevant to this declaration, possibly with         -- documentation.       , expItemInstances :: ![DocInstance name]++        -- | Fixity decls relevant to this declaration (including subordinates).+      , expItemFixities :: ![(name, Fixity)]++        -- | Whether the ExportItem is from a TH splice or not, for generating+        -- the appropriate type of Source link.+      , expItemSpliced :: !Bool       }    -- | An exported entity for which we have no documentation (perhaps because it@@ -201,7 +219,7 @@       , expItemSubs :: ![name]       } -  -- | A section heading. +  -- | A section heading.   | ExportGroup       {         -- | Section level (1, 2, 3, ...).@@ -226,11 +244,6 @@   } deriving Functor  -combineDocumentation :: Documentation name -> Maybe (Doc name)-combineDocumentation (Documentation Nothing Nothing) = Nothing-combineDocumentation (Documentation mDoc mWarning)   = Just (fromMaybe mempty mWarning `mappend` fromMaybe mempty mDoc)-- -- | Arguments and result are indexed by Int, zero-based from the left, -- because that's the easiest to use when recursing over types. type FnArgsDoc name = Map Int (Doc name)@@ -276,15 +289,23 @@ -- * Instances ----------------------------------------------------------------------------- +-- | The three types of instances+data InstType name+  = ClassInst [HsType name]         -- ^ Context+  | TypeInst  (Maybe (HsType name)) -- ^ Body (right-hand side)+  | DataInst (TyClDecl name)        -- ^ Data constructors +instance OutputableBndr a => Outputable (InstType a) where+  ppr (ClassInst a) = text "ClassInst" <+> ppr a+  ppr (TypeInst  a) = text "TypeInst"  <+> ppr a+  ppr (DataInst  a) = text "DataInst"  <+> ppr a+ -- | An instance head that may have documentation. type DocInstance name = (InstHead name, Maybe (Doc name)) ---- | The head of an instance. Consists of a context, a class name and a list--- of instance types.-type InstHead name = ([HsType name], name, [HsType name])-+-- | The head of an instance. Consists of a class name, a list of kind+-- parameters, a list of type parameters and an instance type+type InstHead name = (name, [HsType name], [HsType name], InstType name)  ----------------------------------------------------------------------------- -- * Documentation comments@@ -305,22 +326,24 @@   | DocWarning (Doc id)   | DocEmphasis (Doc id)   | DocMonospaced (Doc id)+  | DocBold (Doc id)   | DocUnorderedList [Doc id]   | DocOrderedList [Doc id]   | DocDefList [(Doc id, Doc id)]   | DocCodeBlock (Doc id)   | DocHyperlink Hyperlink-  | DocPic String+  | DocPic Picture   | DocAName String   | DocProperty String   | DocExamples [Example]-  deriving (Functor)-+  | DocHeader (Header (Doc id))+  deriving (Functor, Foldable, Traversable) -instance Monoid (Doc id) where-  mempty  = DocEmpty-  mappend = DocAppend+instance Foldable Header where+  foldMap f (Header _ a) = f a +instance Traversable Header where+  traverse f (Header l a) = Header l `fmap` f a  instance NFData a => NFData (Doc a) where   rnf doc = case doc of@@ -333,6 +356,7 @@     DocModule a               -> a `deepseq` ()     DocWarning a              -> a `deepseq` ()     DocEmphasis a             -> a `deepseq` ()+    DocBold a                 -> a `deepseq` ()     DocMonospaced a           -> a `deepseq` ()     DocUnorderedList a        -> a `deepseq` ()     DocOrderedList a          -> a `deepseq` ()@@ -343,6 +367,7 @@     DocAName a                -> a `deepseq` ()     DocProperty a             -> a `deepseq` ()     DocExamples a             -> a `deepseq` ()+    DocHeader a               -> a `deepseq` ()   instance NFData Name@@ -356,10 +381,26 @@   } deriving (Eq, Show)  +data Picture = Picture+  { pictureUri   :: String+  , pictureTitle :: Maybe String+  } deriving (Eq, Show)++data Header id = Header+  { headerLevel :: Int+  , headerTitle :: id+  } deriving Functor++instance NFData id => NFData (Header id) where+  rnf (Header a b) = a `deepseq` b `deepseq` ()+ instance NFData Hyperlink where   rnf (Hyperlink a b) = a `deepseq` b `deepseq` () +instance NFData Picture where+  rnf (Picture a b) = a `deepseq` b `deepseq` () + data Example = Example   { exampleExpression :: String   , exampleResult     :: [String]@@ -385,6 +426,7 @@   , markupModule               :: String -> a   , markupWarning              :: a -> a   , markupEmphasis             :: a -> a+  , markupBold                 :: a -> a   , markupMonospaced           :: a -> a   , markupUnorderedList        :: [a] -> a   , markupOrderedList          :: [a] -> a@@ -392,28 +434,37 @@   , markupCodeBlock            :: a -> a   , markupHyperlink            :: Hyperlink -> a   , markupAName                :: String -> a-  , markupPic                  :: String -> a+  , markupPic                  :: Picture -> a   , markupProperty             :: String -> a   , markupExample              :: [Example] -> a+  , markupHeader               :: Header a -> a   }   data HaddockModInfo name = HaddockModInfo-  { hmi_description :: (Maybe (Doc name))-  , hmi_portability :: (Maybe String)-  , hmi_stability   :: (Maybe String)-  , hmi_maintainer  :: (Maybe String)-  , hmi_safety      :: (Maybe String)+  { hmi_description :: Maybe (Doc name)+  , hmi_copyright   :: Maybe String+  , hmi_license     :: Maybe String+  , hmi_maintainer  :: Maybe String+  , hmi_stability   :: Maybe String+  , hmi_portability :: Maybe String+  , hmi_safety      :: Maybe String+  , hmi_language    :: Maybe Language+  , hmi_extensions  :: [ExtensionFlag]   }   emptyHaddockModInfo :: HaddockModInfo a emptyHaddockModInfo = HaddockModInfo   { hmi_description = Nothing-  , hmi_portability = Nothing-  , hmi_stability   = Nothing+  , hmi_copyright   = Nothing+  , hmi_license     = Nothing   , hmi_maintainer  = Nothing+  , hmi_stability   = Nothing+  , hmi_portability = Nothing   , hmi_safety      = Nothing+  , hmi_language    = Nothing+  , hmi_extensions  = []   }  @@ -430,6 +481,7 @@   | OptIgnoreExports   -- ^ Pretend everything is exported.   | OptNotHome         -- ^ Not the best place to get docs for things                        -- exported by this module.+  | OptShowExtensions  -- ^ Render enabled extensions for this module.   deriving (Eq, Show)  @@ -489,6 +541,9 @@ instance Functor ErrMsgM where         fmap f (Writer (a, msgs)) = Writer (f a, msgs) +instance Applicative ErrMsgM where+    pure = return+    (<*>) = ap  instance Monad ErrMsgM where         return a = Writer (a, [])@@ -539,6 +594,9 @@ instance Functor ErrMsgGhc where   fmap f (WriterGhc x) = WriterGhc (fmap (first f) x) +instance Applicative ErrMsgGhc where+    pure = return+    (<*>) = ap  instance Monad ErrMsgGhc where   return a = WriterGhc (return (a, []))
+ src/Haddock/Utf8.hs view
@@ -0,0 +1,74 @@+module Haddock.Utf8 (encodeUtf8, decodeUtf8) where+import           Data.Bits ((.|.), (.&.), shiftL, shiftR)+import qualified Data.ByteString as BS+import           Data.Char (chr, ord)+import           Data.Word (Word8)++-- | Helper that encodes and packs a 'String' into a 'BS.ByteString'+encodeUtf8 :: String -> BS.ByteString+encodeUtf8 = BS.pack . encode++-- | Helper that unpacks and decodes a 'BS.ByteString' into a 'String'+decodeUtf8 :: BS.ByteString -> String+decodeUtf8 = decode . BS.unpack++-- Copy/pasted functions from Codec.Binary.UTF8.String for encoding/decoding+-- | Character to use when 'encode' or 'decode' fail for a byte.+replacementCharacter :: Char+replacementCharacter = '\xfffd'++-- | Encode a Haskell String to a list of Word8 values, in UTF8 format.+encode :: String -> [Word8]+encode = concatMap (map fromIntegral . go . ord)+ where+  go oc+   | oc <= 0x7f       = [oc]++   | oc <= 0x7ff      = [ 0xc0 + (oc `shiftR` 6)+                        , 0x80 + oc .&. 0x3f+                        ]++   | oc <= 0xffff     = [ 0xe0 + (oc `shiftR` 12)+                        , 0x80 + ((oc `shiftR` 6) .&. 0x3f)+                        , 0x80 + oc .&. 0x3f+                        ]+   | otherwise        = [ 0xf0 + (oc `shiftR` 18)+                        , 0x80 + ((oc `shiftR` 12) .&. 0x3f)+                        , 0x80 + ((oc `shiftR` 6) .&. 0x3f)+                        , 0x80 + oc .&. 0x3f+                        ]++-- | Decode a UTF8 string packed into a list of Word8 values, directly to String+decode :: [Word8] -> String+decode [    ] = ""+decode (c:cs)+  | c < 0x80  = chr (fromEnum c) : decode cs+  | c < 0xc0  = replacementCharacter : decode cs+  | c < 0xe0  = multi1+  | c < 0xf0  = multi_byte 2 0xf  0x800+  | c < 0xf8  = multi_byte 3 0x7  0x10000+  | c < 0xfc  = multi_byte 4 0x3  0x200000+  | c < 0xfe  = multi_byte 5 0x1  0x4000000+  | otherwise = replacementCharacter : decode cs+  where+    multi1 = case cs of+      c1 : ds | c1 .&. 0xc0 == 0x80 ->+        let d = ((fromEnum c .&. 0x1f) `shiftL` 6) .|.  fromEnum (c1 .&. 0x3f)+        in if d >= 0x000080 then toEnum d : decode ds+                            else replacementCharacter : decode ds+      _ -> replacementCharacter : decode cs++    multi_byte :: Int -> Word8 -> Int -> String+    multi_byte i mask overlong = aux i cs (fromEnum (c .&. mask))+      where+        aux 0 rs acc+          | overlong <= acc && acc <= 0x10ffff &&+            (acc < 0xd800 || 0xdfff < acc)     &&+            (acc < 0xfffe || 0xffff < acc)      = chr acc : decode rs+          | otherwise = replacementCharacter : decode rs++        aux n (r:rs) acc+          | r .&. 0xc0 == 0x80 = aux (n-1) rs+                               $ shiftL acc 6 .|. fromEnum (r .&. 0x3f)++        aux _ rs     _ = replacementCharacter : decode rs
src/Haddock/Utils.hs view
@@ -36,7 +36,7 @@   -- * HTML cross reference mapping   html_xrefs_ref, html_xrefs_ref', -  -- * Doc markup +  -- * Doc markup   markup,   idMarkup, @@ -126,23 +126,21 @@  restrictTo :: [Name] -> LHsDecl Name -> LHsDecl Name restrictTo names (L loc decl) = L loc $ case decl of-  TyClD d | isDataDecl d  -> -    TyClD (d { tcdTyDefn = restrictTyDefn names (tcdTyDefn d) })+  TyClD d | isDataDecl d  ->+    TyClD (d { tcdDataDefn = restrictDataDefn names (tcdDataDefn d) })   TyClD d | isClassDecl d ->     TyClD (d { tcdSigs = restrictDecls names (tcdSigs d),                tcdATs = restrictATs names (tcdATs d) })   _ -> decl -restrictTyDefn :: [Name] -> HsTyDefn Name -> HsTyDefn Name-restrictTyDefn _ defn@(TySynonym {})-  = defn-restrictTyDefn names defn@(TyData { td_ND = new_or_data, td_cons = cons })+restrictDataDefn :: [Name] -> HsDataDefn Name -> HsDataDefn Name+restrictDataDefn names defn@(HsDataDefn { dd_ND = new_or_data, dd_cons = cons })   | DataType <- new_or_data-  = defn { td_cons = restrictCons names cons }+  = defn { dd_cons = restrictCons names cons }   | otherwise    -- Newtype   = case restrictCons names cons of-      []    -> defn { td_ND = DataType, td_cons = [] }-      [con] -> defn { td_cons = [con] }+      []    -> defn { dd_ND = DataType, dd_cons = [] }+      [con] -> defn { dd_cons = [con] }       _ -> error "Should not happen"  restrictCons :: [Name] -> [LConDecl Name] -> [LConDecl Name]@@ -170,8 +168,8 @@ restrictDecls names = mapMaybe (filterLSigNames (`elem` names))  -restrictATs :: [Name] -> [LTyClDecl Name] -> [LTyClDecl Name]-restrictATs names ats = [ at | at <- ats , tcdName (unL at) `elem` names ]+restrictATs :: [Name] -> [LFamilyDecl Name] -> [LFamilyDecl Name]+restrictATs names ats = [ at | at <- ats , unL (fdLName (unL at)) `elem` names ]  emptyHsQTvs :: LHsTyVarBndrs Name -- This function is here, rather than in HsTypes, because it *renamed*, but@@ -241,8 +239,8 @@ -- isn't clear if such fragment identifiers should, or should not be unescaped -- before being matched with IDs in the target document. --------------------------------------------------------------------------------  + moduleUrl :: Module -> String moduleUrl = moduleHtmlFile @@ -287,7 +285,7 @@   ---------------------------------------------------------------------------------- * Misc. +-- * Misc. -------------------------------------------------------------------------------  @@ -424,6 +422,7 @@ markup m (DocModule mod0)            = markupModule m mod0 markup m (DocWarning d)              = markupWarning m (markup m d) markup m (DocEmphasis d)             = markupEmphasis m (markup m d)+markup m (DocBold d)                 = markupBold m (markup m d) markup m (DocMonospaced d)           = markupMonospaced m (markup m d) markup m (DocUnorderedList ds)       = markupUnorderedList m (map (markup m) ds) markup m (DocOrderedList ds)         = markupOrderedList m (map (markup m) ds)@@ -434,6 +433,7 @@ markup m (DocPic img)                = markupPic m img markup m (DocProperty p)             = markupProperty m p markup m (DocExamples e)             = markupExample m e+markup m (DocHeader (Header l t))    = markupHeader m (Header l (markup m t))   markupPair :: DocMarkup id a -> (Doc id, Doc id) -> (a, a)@@ -452,6 +452,7 @@   markupModule               = DocModule,   markupWarning              = DocWarning,   markupEmphasis             = DocEmphasis,+  markupBold                 = DocBold,   markupMonospaced           = DocMonospaced,   markupUnorderedList        = DocUnorderedList,   markupOrderedList          = DocOrderedList,@@ -461,7 +462,8 @@   markupAName                = DocAName,   markupPic                  = DocPic,   markupProperty             = DocProperty,-  markupExample              = DocExamples+  markupExample              = DocExamples,+  markupHeader               = DocHeader   }  @@ -476,4 +478,3 @@ getProcessID :: IO Int getProcessID = fmap fromIntegral System.Posix.Internals.c_getpid #endif-
− test/Haddock/ParseSpec.hs
@@ -1,81 +0,0 @@-{-# LANGUAGE OverloadedStrings, StandaloneDeriving, FlexibleInstances, UndecidableInstances, IncoherentInstances #-}-{-# OPTIONS_GHC -fno-warn-orphans #-}-module Haddock.ParseSpec (main, spec) where--import           Test.Hspec-import           RdrName (RdrName)-import           DynFlags (DynFlags, defaultDynFlags)-import           Haddock.Lex (tokenise)-import qualified Haddock.Parse as Parse-import           Haddock.Types-import           Outputable (Outputable, showSDoc, ppr)-import           Data.Monoid-import           Data.String--dynFlags :: DynFlags-dynFlags = defaultDynFlags (error "dynFlags for Haddock tests: undefined")--instance Outputable a => Show a where-  show = showSDoc dynFlags . ppr--deriving instance Show a => Show (Doc a)-deriving instance Eq a =>Eq (Doc a)--instance IsString (Doc RdrName) where-  fromString = DocString--parseParas :: String -> Maybe (Doc RdrName)-parseParas s = Parse.parseParas $ tokenise dynFlags s (0,0)--main :: IO ()-main = hspec spec--spec :: Spec-spec = do-  describe "parseParas" $ do-    it "parses a paragraph" $ do-      parseParas "foobar" `shouldBe` Just (DocParagraph "foobar\n")--    context "when parsing an example" $ do-      it "requires an example to be separated from a previous paragrap by an empty line" $ do-        parseParas "foobar\n\n>>> fib 10\n55" `shouldBe`-          Just (DocParagraph "foobar\n" <> DocExamples [Example "fib 10" ["55"]])--        -- parse error-        parseParas "foobar\n>>> fib 10\n55" `shouldBe` Nothing--      it "parses a result line that only contains <BLANKLINE> as an emptly line" $ do-        parseParas ">>> putFooBar\nfoo\n<BLANKLINE>\nbar" `shouldBe`-          Just (DocExamples [Example "putFooBar" ["foo","","bar"]])--    context "when parsing a code block" $ do-      it "requires a code blocks to be separated from a previous paragrap by an empty line" $ do-        parseParas "foobar\n\n> some code" `shouldBe`-          Just (DocParagraph "foobar\n" <> DocCodeBlock " some code\n")--        -- parse error-        parseParas "foobar\n> some code" `shouldBe` Nothing---    context "when parsing a URL" $ do-      it "parses a URL" $ do-        parseParas "<http://example.com/>" `shouldBe`-          Just (DocParagraph $ hyperlink "http://example.com/" Nothing <> "\n")--      it "accepts an optional label" $ do-        parseParas "<http://example.com/ some link>" `shouldBe`-          Just (DocParagraph $ hyperlink "http://example.com/" (Just "some link") <> "\n")--    context "when parsing properties" $ do-      it "can parse a single property" $ do-        parseParas "prop> 23 == 23" `shouldBe` Just (DocProperty "23 == 23")--      it "can parse multiple subsequent properties" $ do-        parseParas $ unlines [-              "prop> 23 == 23"-            , "prop> 42 == 42"-            ]-        `shouldBe` Just (DocProperty "23 == 23" <> DocProperty "42 == 42")-  where-    hyperlink :: String -> Maybe String -> Doc RdrName-    hyperlink url = DocHyperlink . Hyperlink url
+ test/Haddock/ParserSpec.hs view
@@ -0,0 +1,804 @@+{-# LANGUAGE OverloadedStrings, StandaloneDeriving+             , FlexibleInstances, UndecidableInstances+             , IncoherentInstances #-}+{-# OPTIONS_GHC -fno-warn-orphans #-}++module Haddock.ParserSpec (main, spec) where++import           Data.Monoid+import           Data.String+import qualified Haddock.Parser as Parse+import           Haddock.Types+import           Outputable (Outputable, showSDoc, ppr)+import           RdrName (RdrName, mkVarUnqual)+import           FastString (fsLit)+import           StaticFlags (initStaticOpts)+import           Test.Hspec+import           Test.QuickCheck++import           Helper++instance Outputable a => Show a where+  show = showSDoc dynFlags . ppr++deriving instance Show a => Show (Header a)+deriving instance Show a => Show (Doc a)+deriving instance Eq a => Eq (Header a)+deriving instance Eq a => Eq (Doc a)++instance IsString RdrName where+  fromString = mkVarUnqual . fsLit++instance IsString (Doc RdrName) where+  fromString = DocString++instance IsString a => IsString (Maybe a) where+  fromString = Just . fromString++parseParas :: String -> Doc RdrName+parseParas = Parse.parseParas dynFlags++parseString :: String -> Doc RdrName+parseString = Parse.parseString dynFlags++main :: IO ()+main = hspec spec++spec :: Spec+spec = before initStaticOpts $ do+  describe "parseString" $ do+    let infix 1 `shouldParseTo`+        shouldParseTo :: String -> Doc RdrName -> Expectation+        shouldParseTo input ast = parseString input `shouldBe` ast++    it "is total" $ do+      property $ \xs ->+        (length . show . parseString) xs `shouldSatisfy` (> 0)++    context "when parsing text" $ do+      it "can handle unicode" $ do+        "灼眼のシャナ" `shouldParseTo` "灼眼のシャナ"++      it "accepts numeric character references" $ do+        "foo b&#97;r b&#97;z &#955;" `shouldParseTo` "foo bar baz λ"++      it "accepts hexadecimal character references" $ do+        "&#x65;" `shouldParseTo` "e"++      it "allows to backslash-escape characters" $ do+        property $ \x -> ['\\', x] `shouldParseTo` DocString [x]++      context "when parsing strings contaning numeric character references" $ do+        it "will implicitly convert digits to characters" $ do+          "&#65;&#65;&#65;&#65;" `shouldParseTo` "AAAA"++          "&#28796;&#30524;&#12398;&#12471;&#12515;&#12490;"+            `shouldParseTo` "灼眼のシャナ"++        it "will implicitly convert hex encoded characters" $ do+          "&#x65;&#x65;&#x65;&#x65;" `shouldParseTo` "eeee"++    context "when parsing identifiers" $ do+      it "parses identifiers enclosed within single ticks" $ do+        "'foo'" `shouldParseTo` DocIdentifier "foo"++      it "parses identifiers enclosed within backticks" $ do+        "`foo`" `shouldParseTo` DocIdentifier "foo"++      it "parses a word with an one of the delimiters in it as DocString" $ do+          "don't" `shouldParseTo` "don't"++      it "doesn't pass pairs of delimiters with spaces between them" $ do+        "hel'lo w'orld" `shouldParseTo` "hel'lo w'orld"++      it "don't use apostrophe's in the wrong place's" $ do+        " don't use apostrophe's in the wrong place's" `shouldParseTo`+          "don't use apostrophe's in the wrong place's"++    context "when parsing URLs" $ do+      let hyperlink :: String -> Maybe String -> Doc RdrName+          hyperlink url = DocHyperlink . Hyperlink url++      it "parses a URL" $ do+        "<http://example.com/>" `shouldParseTo` hyperlink "http://example.com/" Nothing++      it "accepts an optional label" $ do+        "<http://example.com/ some link>" `shouldParseTo` hyperlink "http://example.com/" "some link"++      it "does not accept newlines in label" $ do+        "<foo bar\nbaz>" `shouldParseTo` "<foo bar\nbaz>"++      -- new behaviour test, this will be now consistent with other markup+      it "allows us to escape > inside the URL" $ do+        "<http://examp\\>le.com>" `shouldParseTo`+          hyperlink "http://examp>le.com" Nothing++        "<http://exa\\>mp\\>le.com>" `shouldParseTo`+          hyperlink "http://exa>mp>le.com" Nothing++        -- Likewise in label+        "<http://example.com f\\>oo>" `shouldParseTo`+          hyperlink "http://example.com" "f>oo"++      it "parses inline URLs" $ do+        "foo <http://example.com/> bar" `shouldParseTo`+          "foo " <> hyperlink "http://example.com/" Nothing <> " bar"++      it "doesn't allow for multi-line link tags" $ do+        "<ba\nz aar>" `shouldParseTo` "<ba\nz aar>"++      context "when autolinking URLs" $ do+        it "autolinks HTTP URLs" $ do+          "http://example.com/" `shouldParseTo` hyperlink "http://example.com/" Nothing++        it "autolinks HTTPS URLs" $ do+          "https://www.example.com/" `shouldParseTo` hyperlink "https://www.example.com/" Nothing++        it "autolinks FTP URLs" $ do+          "ftp://example.com/" `shouldParseTo` hyperlink "ftp://example.com/" Nothing++        it "does not include a trailing comma" $ do+          "http://example.com/, Some other sentence." `shouldParseTo`+            hyperlink "http://example.com/" Nothing <> ", Some other sentence."++        it "does not include a trailing dot" $ do+          "http://example.com/. Some other sentence." `shouldParseTo`+            hyperlink "http://example.com/" Nothing <> ". Some other sentence."++        it "does not include a trailing exclamation mark" $ do+          "http://example.com/! Some other sentence." `shouldParseTo`+            hyperlink "http://example.com/" Nothing <> "! Some other sentence."++        it "does not include a trailing question mark" $ do+          "http://example.com/? Some other sentence." `shouldParseTo`+            hyperlink "http://example.com/" Nothing <> "? Some other sentence."++    context "when parsing pictures" $ do+      let picture :: String -> Maybe String -> Doc RdrName+          picture uri = DocPic . Picture uri++      it "parses a simple picture" $ do+        "<<baz>>" `shouldParseTo` picture "baz" Nothing++      it "parses a picture with a title" $ do+        "<<b a z>>" `shouldParseTo` picture "b" (Just "a z")++      it "parses a picture with unicode" $ do+        "<<灼眼のシャナ>>" `shouldParseTo` picture "灼眼のシャナ" Nothing++      it "allows for escaping of the closing tags" $ do+        "<<ba\\>>z>>" `shouldParseTo` picture "ba>>z" Nothing++      it "doesn't allow for multi-line picture tags" $ do+        "<<ba\nz aar>>" `shouldParseTo` "<<ba\nz aar>>"++    context "when parsing anchors" $ do+      it "parses a single word anchor" $ do+        "#foo#" `shouldParseTo` DocAName "foo"++      it "parses a multi word anchor" $ do+        "#foo bar#" `shouldParseTo` DocAName "foo bar"++      it "parses a unicode anchor" $ do+        "#灼眼のシャナ#" `shouldParseTo` DocAName "灼眼のシャナ"++      it "does not accept newlines in anchors" $ do+        "#foo\nbar#" `shouldParseTo` "#foo\nbar#"++    context "when parsing emphasised text" $ do+      it "emphasises a word on its own" $ do+        "/foo/" `shouldParseTo` DocEmphasis "foo"++      it "emphasises inline correctly" $ do+        "foo /bar/ baz" `shouldParseTo` "foo " <> DocEmphasis "bar" <> " baz"++      it "emphasises unicode" $ do+        "/灼眼のシャナ/" `shouldParseTo` DocEmphasis "灼眼のシャナ"++      it "does not emphasise multi-line strings" $ do+        " /foo\nbar/" `shouldParseTo` "/foo\nbar/"++      it "does not emphasise the empty string" $ do+        "//" `shouldParseTo` "//"++      it "parses escaped slashes literally" $ do+        "/foo\\/bar/" `shouldParseTo` DocEmphasis "foo/bar"++      it "recognizes other markup constructs within emphasised text" $ do+        "/foo @bar@ baz/" `shouldParseTo`+          DocEmphasis ("foo " <> DocMonospaced "bar" <> " baz")++      it "allows other markup inside of emphasis" $ do+        "/__inner bold__/" `shouldParseTo` DocEmphasis (DocBold "inner bold")++      it "doesn't mangle inner markup unicode" $ do+        "/__灼眼のシャナ &#65;__/" `shouldParseTo` DocEmphasis (DocBold "灼眼のシャナ A")++      it "properly converts HTML escape sequences" $ do+        "/&#65;&#65;&#65;&#65;/" `shouldParseTo` DocEmphasis "AAAA"++      it "allows to escape the emphasis delimiter inside of emphasis" $ do+        "/empha\\/sis/" `shouldParseTo` DocEmphasis "empha/sis"++    context "when parsing monospaced text" $ do+      it "parses simple monospaced text" $ do+        "@foo@" `shouldParseTo` DocMonospaced "foo"++      it "parses inline monospaced text" $ do+        "foo @bar@ baz" `shouldParseTo` "foo " <> DocMonospaced "bar" <> " baz"++      it "allows to escape @" $ do+        "@foo \\@ bar@" `shouldParseTo` DocMonospaced "foo @ bar"++      it "accepts unicode" $ do+        "@foo 灼眼のシャナ bar@" `shouldParseTo` DocMonospaced "foo 灼眼のシャナ bar"++      it "accepts other markup in monospaced text" $ do+        "@/foo/@" `shouldParseTo` DocMonospaced (DocEmphasis "foo")++      it "requires the closing @" $ do+        "@foo /bar/ baz" `shouldParseTo` "@foo " <> DocEmphasis "bar" <> " baz"++    context "when parsing bold strings" $ do+      it "allows for a bold string on its own" $ do+        "__bold string__" `shouldParseTo`+          DocBold "bold string"++      it "bolds inline correctly" $ do+        "hello __everyone__ there" `shouldParseTo`+          "hello "+           <> DocBold "everyone" <> " there"++      it "bolds unicode" $ do+        "__灼眼のシャナ__" `shouldParseTo`+          DocBold "灼眼のシャナ"++      it "does not do __multi-line\\n bold__" $ do+        " __multi-line\n bold__" `shouldParseTo` "__multi-line\n bold__"++      it "allows other markup inside of bold" $ do+        "__/inner emphasis/__" `shouldParseTo`+          (DocBold $ DocEmphasis "inner emphasis")++      it "doesn't mangle inner markup unicode" $ do+        "__/灼眼のシャナ &#65;/__" `shouldParseTo`+          (DocBold $ DocEmphasis "灼眼のシャナ A")++      it "properly converts HTML escape sequences" $ do+        "__&#65;&#65;&#65;&#65;__" `shouldParseTo`+          DocBold "AAAA"++      it "allows to escape the bold delimiter inside of bold" $ do+        "__bo\\__ld__" `shouldParseTo`+          DocBold "bo__ld"++      it "doesn't allow for empty bold" $ do+        "____" `shouldParseTo` "____"++    context "when parsing module strings" $ do+      it "should parse a module on its own" $ do+        "\"Module\"" `shouldParseTo`+          DocModule "Module"++      it "should parse a module inline" $ do+        "This is a \"Module\"." `shouldParseTo`+          "This is a " <> DocModule "Module" <> "."++      it "can accept a simple module name" $ do+        "\"Hello\"" `shouldParseTo` DocModule "Hello"++      it "can accept a module name with dots" $ do+        "\"Hello.World\"" `shouldParseTo` DocModule "Hello.World"++      it "can accept a module name with unicode" $ do+        "\"Hello.Worldλ\"" `shouldParseTo` DocModule "Hello.Worldλ"++      it "parses a module name with a trailing dot as regular quoted string" $ do+        "\"Hello.\"" `shouldParseTo` "\"Hello.\""++      it "parses a module name with a space as regular quoted string" $ do+        "\"Hello World\"" `shouldParseTo` "\"Hello World\""++      it "parses a module name with invalid characters as regular quoted string" $ do+        "\"Hello&[{}(=*)+]!\"" `shouldParseTo` "\"Hello&[{}(=*)+]!\""++      it "accepts a module name with unicode" $ do+        "\"Foo.Barλ\"" `shouldParseTo` DocModule "Foo.Barλ"++      it "treats empty module name as regular double quotes" $ do+        "\"\"" `shouldParseTo` "\"\""++  describe "parseParas" $ do+    let infix 1 `shouldParseTo`+        shouldParseTo :: String -> Doc RdrName -> Expectation+        shouldParseTo input ast = parseParas input `shouldBe` ast++    it "is total" $ do+      property $ \xs ->+        (length . show . parseParas) xs `shouldSatisfy` (> 0)++    context "when parsing text paragraphs" $ do+      let filterSpecial = filter (`notElem` (".(=#-[*`\v\f\n\t\r\\\"'_/@<> " :: String))++      it "parses an empty paragraph" $ do+        "" `shouldParseTo` DocEmpty++      it "parses a simple text paragraph" $ do+        "foo bar baz" `shouldParseTo` DocParagraph "foo bar baz"++      it "accepts markup in text paragraphs" $ do+        "foo /bar/ baz" `shouldParseTo` DocParagraph ("foo " <> DocEmphasis "bar" <> " baz")++      it "preserve all regular characters" $ do+        property $ \xs -> let input = filterSpecial xs in (not . null) input ==>+          input `shouldParseTo` DocParagraph (DocString input)++      it "separates paragraphs by empty lines" $ do+        unlines [+            "foo"+          , " \t "+          , "bar"+          ] `shouldParseTo` DocParagraph "foo" <> DocParagraph "bar"++      context "when a pragraph only contains monospaced text" $ do+        it "turns it into a code block" $ do+          "@foo@" `shouldParseTo` DocCodeBlock "foo"++    context "when parsing birdtracks" $ do+      it "parses them as a code block" $ do+        unlines [+            ">foo"+          , ">bar"+          , ">baz"+          ] `shouldParseTo` DocCodeBlock "foo\nbar\nbaz"++      it "ignores leading whitespace" $ do+        unlines [+            " >foo"+          , " \t >bar"+          , " >baz"+          ]+        `shouldParseTo` DocCodeBlock "foo\nbar\nbaz"++      it "strips one leading space from each line of the block" $ do+        unlines [+            "> foo"+          , ">  bar"+          , "> baz"+          ] `shouldParseTo` DocCodeBlock "foo\n bar\nbaz"++      it "ignores empty lines when stripping spaces" $ do+        unlines [+            "> foo"+          , ">"+          , "> bar"+          ] `shouldParseTo` DocCodeBlock "foo\n\nbar"++      context "when any non-empty line does not start with a space" $ do+        it "does not strip any spaces" $ do+          unlines [+              ">foo"+            , ">  bar"+            ] `shouldParseTo` DocCodeBlock "foo\n  bar"++      it "ignores nested markup" $ do+        unlines [+            ">/foo/"+          ] `shouldParseTo` DocCodeBlock "/foo/"++      it "treats them as regular text inside text paragraphs" $ do+        unlines [+            "foo"+          , ">bar"+          ] `shouldParseTo` DocParagraph "foo\n>bar"++    context "when parsing code blocks" $ do+      it "accepts a simple code block" $ do+        unlines [+            "@"+          , "foo"+          , "bar"+          , "baz"+          , "@"+          ] `shouldParseTo` DocCodeBlock "foo\nbar\nbaz\n"++      it "ignores trailing whitespace after the opening @" $ do+        unlines [+            "@   "+          , "foo"+          , "@"+          ] `shouldParseTo` DocCodeBlock "foo\n"++      it "rejects code blocks that are not closed" $ do+        unlines [+            "@"+          , "foo"+          ] `shouldParseTo` DocParagraph "@\nfoo"++      it "accepts nested markup" $ do+        unlines [+            "@"+          , "/foo/"+          , "@"+          ] `shouldParseTo` DocCodeBlock (DocEmphasis "foo" <> "\n")++      it "allows to escape the @" $ do+        unlines [+            "@"+          , "foo"+          , "\\@"+          , "bar"+          , "@"+          ] `shouldParseTo` DocCodeBlock "foo\n@\nbar\n"++      it "accepts horizontal space before the @" $ do+        unlines [ " @"+                , " foo"+                , ""+                , " bar"+                , " @"+                ] `shouldParseTo` DocCodeBlock " foo\n\n bar\n "++      it "accepts unicode" $ do+        "@foo 灼眼のシャナ bar@" `shouldParseTo` DocCodeBlock "foo 灼眼のシャナ bar"++      it "requires the closing @" $ do+        "@foo /bar/ baz"+          `shouldParseTo` DocParagraph ("@foo " <> DocEmphasis "bar" <> " baz")+++    context "when parsing examples" $ do+      it "parses a simple example" $ do+        ">>> foo" `shouldParseTo` DocExamples [Example "foo" []]++      it "parses an example with result" $ do+        unlines [+            ">>> foo"+          , "bar"+          , "baz"+          ] `shouldParseTo` DocExamples [Example "foo" ["bar", "baz"]]++      it "parses consecutive examples" $ do+        unlines [+            ">>> fib 5"+          , "5"+          , ">>> fib 10"+          , "55"+          ] `shouldParseTo` DocExamples [+            Example "fib 5" ["5"]+          , Example "fib 10" ["55"]+          ]++      it ("requires an example to be separated"+          ++ " from a previous paragraph by an empty line") $ do+        "foobar\n\n>>> fib 10\n55" `shouldParseTo`+          DocParagraph "foobar"+                <> DocExamples [Example "fib 10" ["55"]]++      it "parses bird-tracks inside of paragraphs as plain strings" $ do+        let xs = "foo\n>>> bar"+        xs `shouldParseTo` DocParagraph (DocString xs)++      it "skips empty lines in front of an example" $ do+        "\n   \n\n>>> foo" `shouldParseTo` DocExamples [Example "foo" []]++      it "terminates example on empty line" $ do+        unlines [+            ">>> foo"+          , "bar"+          , "    "+          , "baz"+          ]+        `shouldParseTo`+          DocExamples [Example "foo" ["bar"]] <> DocParagraph "baz"++      it "parses a <BLANKLINE> result as an empty result" $ do+        unlines [+            ">>> foo"+          , "bar"+          , "<BLANKLINE>"+          , "baz"+          ]+        `shouldParseTo` DocExamples [Example "foo" ["bar", "", "baz"]]++      it "accepts unicode in examples" $ do+        ">>> 灼眼\nシャナ" `shouldParseTo` DocExamples [Example "灼眼" ["シャナ"]]++      context "when prompt is prefixed by whitespace" $ do+        it "strips the exact same amount of whitespace from result lines" $ do+          unlines [+              "   >>> foo"+            , "   bar"+            , "   baz"+            ] `shouldParseTo` DocExamples [Example "foo" ["bar", "baz"]]++        it "preserves additional whitespace" $ do+          unlines [+              "   >>> foo"+            , "    bar"+            ] `shouldParseTo` DocExamples [Example "foo" [" bar"]]++        it "keeps original if stripping is not possible" $ do+          unlines [+              "   >>> foo"+            , " bar"+            ] `shouldParseTo` DocExamples [Example "foo" [" bar"]]+++    context "when parsing paragraphs nested in lists" $ do+      it "can nest the same type of list" $ do+        "* foo\n\n    * bar" `shouldParseTo`+          DocUnorderedList [ DocParagraph $ "foo"+                             <> DocUnorderedList [DocParagraph "bar"]]++      it "can nest another type of list inside" $ do+        "* foo\n\n    1. bar" `shouldParseTo`+          DocUnorderedList [ DocParagraph $ "foo"+                             <> DocOrderedList [DocParagraph "bar"]]++      it "can nest a code block inside" $ do+        "* foo\n\n    @foo bar baz@" `shouldParseTo`+          DocUnorderedList [ DocParagraph $ "foo"+                             <> DocCodeBlock "foo bar baz"]++        "* foo\n\n    @\n    foo bar baz\n    @" `shouldParseTo`+          DocUnorderedList [ DocParagraph $ "foo"+                             <> DocCodeBlock "foo bar baz\n"]++      it "can nest more than one level" $ do+        "* foo\n\n    * bar\n\n        * baz\n        qux" `shouldParseTo`+          DocUnorderedList [ DocParagraph $ "foo"+                             <> DocUnorderedList [ DocParagraph $ "bar"+                                                   <> DocUnorderedList [DocParagraph "baz\nqux"]+                                                 ]+                           ]++      it "won't fail on not fully indented paragraph" $ do+        "* foo\n\n    * bar\n\n        * qux\nquux" `shouldParseTo`+          DocUnorderedList [ DocParagraph $ "foo"+                             <> DocUnorderedList [ DocParagraph "bar" ]+                           , DocParagraph "qux\nquux"]+++      it "can nest definition lists" $ do+        "[a] foo\n\n    [b] bar\n\n        [c] baz\n        qux" `shouldParseTo`+          DocDefList [ ("a", "foo"+                             <> DocDefList [ ("b", "bar"+                                                   <> DocDefList [("c", "baz\nqux")])+                                           ])+                     ]++      it "can come back to top level with a different list" $ do+        "* foo\n\n    * bar\n\n1. baz" `shouldParseTo`+          DocUnorderedList [ DocParagraph $ "foo"+                             <> DocUnorderedList [ DocParagraph "bar" ]+                           ]+          <> DocOrderedList [ DocParagraph "baz" ]++      it "definition lists can come back to top level with a different list" $ do+        "[foo] foov\n\n    [bar] barv\n\n1. baz" `shouldParseTo`+          DocDefList [ ("foo", "foov"+                               <> DocDefList [ ("bar", "barv") ])+                     ]+          <> DocOrderedList [ DocParagraph "baz" ]++    context "when parsing properties" $ do+      it "can parse a single property" $ do+        "prop> 23 == 23" `shouldParseTo` DocProperty "23 == 23"++      it "can parse multiple subsequent properties" $ do+        unlines [+              "prop> 23 == 23"+            , "prop> 42 == 42"+            ]+        `shouldParseTo`+          DocProperty "23 == 23" <> DocProperty "42 == 42"++      it "accepts unicode in properties" $ do+        "prop> 灼眼のシャナ ≡ 愛" `shouldParseTo`+          DocProperty "灼眼のシャナ ≡ 愛"++      it "can deal with whitespace before and after the prop> prompt" $ do+        "  prop>     xs == (reverse $ reverse xs)  " `shouldParseTo`+          DocProperty "xs == (reverse $ reverse xs)"++    context "when parsing unordered lists" $ do+      it "parses a simple list" $ do+        unlines [+            " * one"+          , " * two"+          , " * three"+          ]+        `shouldParseTo` DocUnorderedList [+            DocParagraph "one"+          , DocParagraph "two"+          , DocParagraph "three"+          ]++      it "ignores empty lines between list items" $ do+        unlines [+            "* one"+          , ""+          , "* two"+          ]+        `shouldParseTo` DocUnorderedList [+            DocParagraph "one"+          , DocParagraph "two"+          ]++      it "accepts an empty list item" $ do+        "*" `shouldParseTo` DocUnorderedList [DocParagraph DocEmpty]++      it "accepts multi-line list items" $ do+        unlines [+            "* point one"+          , "  more one"+          , "* point two"+          , "more two"+          ]+        `shouldParseTo` DocUnorderedList [+            DocParagraph "point one\n  more one"+          , DocParagraph "point two\nmore two"+          ]++      it "accepts markup in list items" $ do+        "* /foo/" `shouldParseTo` DocUnorderedList [DocParagraph (DocEmphasis "foo")]++      it "requires empty lines between list and other paragraphs" $ do+        unlines [+            "foo"+          , ""+          , "* bar"+          , ""+          , "baz"+          ]+        `shouldParseTo` DocParagraph "foo" <> DocUnorderedList [DocParagraph "bar"] <> DocParagraph "baz"++    context "when parsing ordered lists" $ do+      it "parses a simple list" $ do+        unlines [+            " 1. one"+          , " (1) two"+          , " 3. three"+          ]+        `shouldParseTo` DocOrderedList [+            DocParagraph "one"+          , DocParagraph "two"+          , DocParagraph "three"+          ]++      it "ignores empty lines between list items" $ do+        unlines [+            "1. one"+          , ""+          , "2. two"+          ]+        `shouldParseTo` DocOrderedList [+            DocParagraph "one"+          , DocParagraph "two"+          ]++      it "accepts an empty list item" $ do+        "1." `shouldParseTo` DocOrderedList [DocParagraph DocEmpty]++      it "accepts multi-line list items" $ do+        unlines [+            "1. point one"+          , "  more one"+          , "1. point two"+          , "more two"+          ]+        `shouldParseTo` DocOrderedList [+            DocParagraph "point one\n  more one"+          , DocParagraph "point two\nmore two"+          ]++      it "accepts markup in list items" $ do+        "1. /foo/" `shouldParseTo` DocOrderedList [DocParagraph (DocEmphasis "foo")]++      it "requires empty lines between list and other paragraphs" $ do+        unlines [+            "foo"+          , ""+          , "1. bar"+          , ""+          , "baz"+          ]+        `shouldParseTo` DocParagraph "foo" <> DocOrderedList [DocParagraph "bar"] <> DocParagraph "baz"++    context "when parsing definition lists" $ do+      it "parses a simple list" $ do+        unlines [+            " [foo] one"+          , " [bar] two"+          , " [baz] three"+          ]+        `shouldParseTo` DocDefList [+            ("foo", "one")+          , ("bar", "two")+          , ("baz", "three")+          ]++      it "ignores empty lines between list items" $ do+        unlines [+            "[foo] one"+          , ""+          , "[bar] two"+          ]+        `shouldParseTo` DocDefList [+            ("foo", "one")+          , ("bar", "two")+          ]++      it "accepts an empty list item" $ do+        "[foo]" `shouldParseTo` DocDefList [("foo", DocEmpty)]++      it "accepts multi-line list items" $ do+        unlines [+            "[foo] point one"+          , "  more one"+          , "[bar] point two"+          , "more two"+          ]+        `shouldParseTo` DocDefList [+            ("foo", "point one\n  more one")+          , ("bar", "point two\nmore two")+          ]++      it "accepts markup in list items" $ do+        "[foo] /foo/" `shouldParseTo` DocDefList [("foo", DocEmphasis "foo")]++      it "accepts markup for the label" $ do+        "[/foo/] bar" `shouldParseTo` DocDefList [(DocEmphasis "foo", "bar")]++      it "requires empty lines between list and other paragraphs" $ do+        unlines [+            "foo"+          , ""+          , "[foo] bar"+          , ""+          , "baz"+          ]+        `shouldParseTo` DocParagraph "foo" <> DocDefList [("foo", "bar")] <> DocParagraph "baz"++    context "when parsing consecutive paragraphs" $ do+      it "will not capture irrelevant consecutive lists" $ do+        unlines [ "   * bullet"+                , ""+                , ""+                , "   - different bullet"+                , ""+                , ""+                , "   (1) ordered"+                , " "+                , "   2. different bullet"+                , "   "+                , "   [cat] kitten"+                , "   "+                , "   [pineapple] fruit"+                ] `shouldParseTo`+          DocUnorderedList [ DocParagraph "bullet"+                           , DocParagraph "different bullet"]+          <> DocOrderedList [ DocParagraph "ordered"+                            , DocParagraph "different bullet"+                            ]+          <> DocDefList [ ("cat", "kitten")+                        , ("pineapple", "fruit")+                        ]++    context "when parsing function documentation headers" $ do+      it "can parse a simple header" $ do+        "= Header 1\nHello." `shouldParseTo`+          DocParagraph (DocHeader (Header 1 "Header 1"))+          <> DocParagraph "Hello."++      it "allow consecutive headers" $ do+        "= Header 1\n== Header 2" `shouldParseTo`+          DocParagraph (DocHeader (Header 1 "Header 1"))+          <> DocParagraph (DocHeader (Header 2 "Header 2"))++      it "accepts markup in the header" $ do+        "= /Header/ __1__\nFoo" `shouldParseTo`+          DocParagraph (DocHeader+                        (Header 1 (DocEmphasis "Header" <> " " <> DocBold "1")))+          <> DocParagraph "Foo"
test/Spec.hs view
@@ -1,9 +1,1 @@-module Main where--import           Test.Hspec--import qualified Haddock.ParseSpec--main :: IO ()-main = hspec $ do-  describe "Haddock.Parse" Haddock.ParseSpec.spec+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
− test/nanospec/Test/Hspec.hs
@@ -1,126 +0,0 @@-{-# LANGUAGE DeriveDataTypeable, CPP #-}--- | A lightweight implementation of a subset of Hspec's API.-module Test.Hspec (--- * Types-  SpecM-, Spec---- * Defining a spec-, describe-, context-, it---- ** Setting expectations-, Expectation-, expect-, shouldBe-, shouldReturn---- * Running a spec-, hspec-) where--import           Control.Applicative-import           Control.Monad-import           Data.Monoid-import           Data.List (intercalate)-import           Data.Typeable-import qualified Control.Exception as E-import           System.Exit---- a writer monad-data SpecM a = SpecM a [SpecTree]--add :: SpecTree -> SpecM ()-add s = SpecM () [s]--instance Monad SpecM where-  return a             = SpecM a []-  SpecM a xs >>= f = case f a of-    SpecM b ys -> SpecM b (xs ++ ys)--data SpecTree = SpecGroup String Spec-              | SpecExample String (IO Result)--data Result = Success | Failure String-  deriving (Eq, Show)--type Spec = SpecM ()--describe :: String -> Spec -> Spec-describe label = add . SpecGroup label--context :: String -> Spec -> Spec-context = describe--it :: String -> Expectation -> Spec-it label = add . SpecExample label . evaluateExpectation---- | Summary of a test run.-data Summary = Summary Int Int--instance Monoid Summary where-  mempty = Summary 0 0-  (Summary x1 x2) `mappend` (Summary y1 y2) = Summary (x1 + y1) (x2 + y2)--runSpec :: Spec -> IO Summary-runSpec = runForrest []-  where-    runForrest :: [String] -> Spec -> IO Summary-    runForrest labels (SpecM () xs) = mconcat <$> mapM (runTree labels) xs--    runTree :: [String] -> SpecTree -> IO Summary-    runTree labels spec = case spec of-      SpecExample label x -> do-        putStr $ "/" ++ (intercalate "/" . reverse) (label:labels) ++ "/ "-        r <- x-        case r of-          Success   -> do-            putStrLn "OK"-            return (Summary 1 0)-          Failure err -> do-            putStrLn "FAILED"-            putStrLn err-            return (Summary 1 1)-      SpecGroup label xs  -> do-        runForrest (label:labels) xs--hspec :: Spec -> IO ()-hspec spec = do-  Summary total failures <- runSpec spec-  putStrLn (show total ++ " example(s), " ++ show failures ++ " failure(s)")-  when (failures /= 0) exitFailure--type Expectation = IO ()--infix 1 `shouldBe`, `shouldReturn`--shouldBe :: (Show a, Eq a) => a -> a -> Expectation-actual `shouldBe` expected =-  expect ("expected: " ++ show expected ++ "\n but got: " ++ show actual) (actual == expected)--shouldReturn :: (Show a, Eq a) => IO a -> a -> Expectation-action `shouldReturn` expected = action >>= (`shouldBe` expected)--expect :: String -> Bool -> Expectation-expect label f-  | f         = return ()-  | otherwise = E.throwIO (ExpectationFailure label)--data ExpectationFailure = ExpectationFailure String-  deriving (Show, Eq, Typeable)--instance E.Exception ExpectationFailure--evaluateExpectation :: Expectation -> IO Result-evaluateExpectation action = (action >> return Success)-  `E.catches` [-  -- Re-throw AsyncException, otherwise execution will not terminate on SIGINT-  -- (ctrl-c).  All AsyncExceptions are re-thrown (not just UserInterrupt)-  -- because all of them indicate severe conditions and should not occur during-  -- normal operation.-    E.Handler $ \e -> E.throw (e :: E.AsyncException)--  , E.Handler $ \(ExpectationFailure err) -> return (Failure err)-  , E.Handler $ \e -> (return . Failure) ("*** Exception: " ++ show (e :: E.SomeException))-  ]
+ vendor/attoparsec-0.10.4.0/Data/Attoparsec.hs view
@@ -0,0 +1,18 @@+-- |+-- Module      :  Data.Attoparsec+-- Copyright   :  Bryan O'Sullivan 2007-2011+-- License     :  BSD3+--+-- Maintainer  :  bos@serpentine.com+-- Stability   :  experimental+-- Portability :  unknown+--+-- Simple, efficient combinator parsing for 'ByteString' strings,+-- loosely based on the Parsec library.++module Data.Attoparsec+    (+      module Data.Attoparsec.ByteString+    ) where++import Data.Attoparsec.ByteString
+ vendor/attoparsec-0.10.4.0/Data/Attoparsec/ByteString.hs view
@@ -0,0 +1,205 @@+-- |+-- Module      :  Data.Attoparsec.ByteString+-- Copyright   :  Bryan O'Sullivan 2007-2011+-- License     :  BSD3+--+-- Maintainer  :  bos@serpentine.com+-- Stability   :  experimental+-- Portability :  unknown+--+-- Simple, efficient combinator parsing for 'B.ByteString' strings,+-- loosely based on the Parsec library.++module Data.Attoparsec.ByteString+    (+    -- * Differences from Parsec+    -- $parsec++    -- * Incremental input+    -- $incremental++    -- * Performance considerations+    -- $performance++    -- * Parser types+      I.Parser+    , Result+    , T.IResult(..)+    , I.compareResults++    -- * Running parsers+    , parse+    , feed+    , I.parseOnly+    , parseWith+    , parseTest++    -- ** Result conversion+    , maybeResult+    , eitherResult++    -- * Combinators+    , (I.<?>)+    , I.try+    , module Data.Attoparsec.Combinator++    -- * Parsing individual bytes+    , I.word8+    , I.anyWord8+    , I.notWord8+    , I.peekWord8+    , I.satisfy+    , I.satisfyWith+    , I.skip++    -- ** Byte classes+    , I.inClass+    , I.notInClass++    -- * Efficient string handling+    , I.string+    , I.skipWhile+    , I.take+    , I.scan+    , I.takeWhile+    , I.takeWhile1+    , I.takeTill++    -- ** Consume all remaining input+    , I.takeByteString+    , I.takeLazyByteString++    -- * State observation and manipulation functions+    , I.endOfInput+    , I.atEnd+    ) where++import Data.Attoparsec.Combinator+import qualified Data.Attoparsec.ByteString.Internal as I+import qualified Data.Attoparsec.Internal as I+import qualified Data.ByteString as B+import Data.Attoparsec.ByteString.Internal (Result, parse)+import qualified Data.Attoparsec.Internal.Types as T++-- $parsec+--+-- Compared to Parsec 3, Attoparsec makes several tradeoffs.  It is+-- not intended for, or ideal for, all possible uses.+--+-- * While Attoparsec can consume input incrementally, Parsec cannot.+--   Incremental input is a huge deal for efficient and secure network+--   and system programming, since it gives much more control to users+--   of the library over matters such as resource usage and the I/O+--   model to use.+--+-- * Much of the performance advantage of Attoparsec is gained via+--   high-performance parsers such as 'I.takeWhile' and 'I.string'.+--   If you use complicated combinators that return lists of bytes or+--   characters, there is less performance difference between the two+--   libraries.+--+-- * Unlike Parsec 3, Attoparsec does not support being used as a+--   monad transformer.+--+-- * Attoparsec is specialised to deal only with strict 'B.ByteString'+--   input.  Efficiency concerns rule out both lists and lazy+--   bytestrings.  The usual use for lazy bytestrings would be to+--   allow consumption of very large input without a large footprint.+--   For this need, Attoparsec's incremental input provides an+--   excellent substitute, with much more control over when input+--   takes place.  If you must use lazy bytestrings, see the 'Lazy'+--   module, which feeds lazy chunks to a regular parser.+--+-- * Parsec parsers can produce more helpful error messages than+--   Attoparsec parsers.  This is a matter of focus: Attoparsec avoids+--   the extra book-keeping in favour of higher performance.++-- $incremental+--+-- Attoparsec supports incremental input, meaning that you can feed it+-- a bytestring that represents only part of the expected total amount+-- of data to parse. If your parser reaches the end of a fragment of+-- input and could consume more input, it will suspend parsing and+-- return a 'T.Partial' continuation.+--+-- Supplying the 'T.Partial' continuation with another bytestring will+-- resume parsing at the point where it was suspended. You must be+-- prepared for the result of the resumed parse to be another+-- 'T.Partial' continuation.+--+-- To indicate that you have no more input, supply the 'T.Partial'+-- continuation with an empty bytestring.+--+-- Remember that some parsing combinators will not return a result+-- until they reach the end of input.  They may thus cause 'T.Partial'+-- results to be returned.+--+-- If you do not need support for incremental input, consider using+-- the 'I.parseOnly' function to run your parser.  It will never+-- prompt for more input.++-- $performance+--+-- If you write an Attoparsec-based parser carefully, it can be+-- realistic to expect it to perform within a factor of 2 of a+-- hand-rolled C parser (measuring megabytes parsed per second).+--+-- To actually achieve high performance, there are a few guidelines+-- that it is useful to follow.+--+-- Use the 'B.ByteString'-oriented parsers whenever possible,+-- e.g. 'I.takeWhile1' instead of 'many1' 'I.anyWord8'.  There is+-- about a factor of 100 difference in performance between the two+-- kinds of parser.+--+-- For very simple byte-testing predicates, write them by hand instead+-- of using 'I.inClass' or 'I.notInClass'.  For instance, both of+-- these predicates test for an end-of-line byte, but the first is+-- much faster than the second:+--+-- >endOfLine_fast w = w == 13 || w == 10+-- >endOfLine_slow   = inClass "\r\n"+--+-- Make active use of benchmarking and profiling tools to measure,+-- find the problems with, and improve the performance of your parser.++-- | If a parser has returned a 'T.Partial' result, supply it with more+-- input.+feed :: Result r -> B.ByteString -> Result r+feed f@(T.Fail _ _ _) _ = f+feed (T.Partial k) d    = k d+feed (T.Done bs r) d    = T.Done (B.append bs d) r+{-# INLINE feed #-}++-- | Run a parser and print its result to standard output.+parseTest :: (Show a) => I.Parser a -> B.ByteString -> IO ()+parseTest p s = print (parse p s)++-- | Run a parser with an initial input string, and a monadic action+-- that can supply more input if needed.+parseWith :: Monad m =>+             (m B.ByteString)+          -- ^ An action that will be executed to provide the parser+          -- with more input, if necessary.  The action must return an+          -- 'B.empty' string when there is no more input available.+          -> I.Parser a+          -> B.ByteString+          -- ^ Initial input for the parser.+          -> m (Result a)+parseWith refill p s = step $ parse p s+  where step (T.Partial k) = (step . k) =<< refill+        step r             = return r+{-# INLINE parseWith #-}++-- | Convert a 'Result' value to a 'Maybe' value. A 'T.Partial' result+-- is treated as failure.+maybeResult :: Result r -> Maybe r+maybeResult (T.Done _ r) = Just r+maybeResult _            = Nothing++-- | Convert a 'Result' value to an 'Either' value. A 'T.Partial'+-- result is treated as failure.+eitherResult :: Result r -> Either String r+eitherResult (T.Done _ r)     = Right r+eitherResult (T.Fail _ _ msg) = Left msg+eitherResult _                = Left "Result: incomplete input"
+ vendor/attoparsec-0.10.4.0/Data/Attoparsec/ByteString/Char8.hs view
@@ -0,0 +1,549 @@+{-# LANGUAGE BangPatterns, FlexibleInstances, TypeFamilies,+    TypeSynonymInstances, GADTs #-}+{-# OPTIONS_GHC -fno-warn-orphans #-}++-- |+-- Module      :  Data.Attoparsec.ByteString.Char8+-- Copyright   :  Bryan O'Sullivan 2007-2011+-- License     :  BSD3+--+-- Maintainer  :  bos@serpentine.com+-- Stability   :  experimental+-- Portability :  unknown+--+-- Simple, efficient, character-oriented combinator parsing for+-- 'B.ByteString' strings, loosely based on the Parsec library.++module Data.Attoparsec.ByteString.Char8+    (+    -- * Character encodings+    -- $encodings++    -- * Parser types+      Parser+    , A.Result+    , A.IResult(..)+    , I.compareResults++    -- * Running parsers+    , A.parse+    , A.feed+    , A.parseOnly+    , A.parseTest+    , A.parseWith++    -- ** Result conversion+    , A.maybeResult+    , A.eitherResult++    -- * Combinators+    , (I.<?>)+    , I.try+    , module Data.Attoparsec.Combinator++    -- * Parsing individual characters+    , char+    , char8+    , anyChar+    , notChar+    , peekChar+    , satisfy++    -- ** Special character parsers+    , digit+    , letter_iso8859_15+    , letter_ascii+    , space++    -- ** Fast predicates+    , isDigit+    , isDigit_w8+    , isAlpha_iso8859_15+    , isAlpha_ascii+    , isSpace+    , isSpace_w8++    -- *** Character classes+    , inClass+    , notInClass++    -- * Efficient string handling+    , I.string+    , stringCI+    , skipSpace+    , skipWhile+    , I.take+    , scan+    , takeWhile+    , takeWhile1+    , takeTill++    -- ** String combinators+    -- $specalt+    , (.*>)+    , (<*.)++    -- ** Consume all remaining input+    , I.takeByteString+    , I.takeLazyByteString++    -- * Text parsing+    , I.endOfLine+    , isEndOfLine+    , isHorizontalSpace++    -- * Numeric parsers+    , decimal+    , hexadecimal+    , signed+    , double+    , Number(..)+    , number+    , rational++    -- * State observation and manipulation functions+    , I.endOfInput+    , I.atEnd+    ) where++import Control.Applicative ((*>), (<*), (<$>), (<|>))+import Data.Attoparsec.ByteString.FastSet (charClass, memberChar)+import Data.Attoparsec.ByteString.Internal (Parser, (<?>))+import Data.Attoparsec.Combinator+import Data.Attoparsec.Number (Number(..))+import Data.Bits (Bits, (.|.), shiftL)+import Data.ByteString.Internal (c2w, w2c)+import Data.Int (Int8, Int16, Int32, Int64)+import Data.Ratio ((%))+import Data.String (IsString(..))+import Data.Word (Word8, Word16, Word32, Word64, Word)+import Prelude hiding (takeWhile)+import qualified Data.Attoparsec.ByteString as A+import qualified Data.Attoparsec.ByteString.Internal as I+import qualified Data.Attoparsec.Internal as I+import qualified Data.ByteString as B8+import qualified Data.ByteString.Char8 as B++instance (a ~ B.ByteString) => IsString (Parser a) where+    fromString = I.string . B.pack++-- $encodings+--+-- This module is intended for parsing text that is+-- represented using an 8-bit character set, e.g. ASCII or+-- ISO-8859-15.  It /does not/ make any attempt to deal with character+-- encodings, multibyte characters, or wide characters.  In+-- particular, all attempts to use characters above code point U+00FF+-- will give wrong answers.+--+-- Code points below U+0100 are simply translated to and from their+-- numeric values, so e.g. the code point U+00A4 becomes the byte+-- @0xA4@ (which is the Euro symbol in ISO-8859-15, but the generic+-- currency sign in ISO-8859-1).  Haskell 'Char' values above U+00FF+-- are truncated, so e.g. U+1D6B7 is truncated to the byte @0xB7@.++-- ASCII-specific but fast, oh yes.+toLower :: Word8 -> Word8+toLower w | w >= 65 && w <= 90 = w + 32+          | otherwise          = w++-- | Satisfy a literal string, ignoring case.+stringCI :: B.ByteString -> Parser B.ByteString+stringCI = I.stringTransform (B8.map toLower)+{-# INLINE stringCI #-}++-- | Consume input as long as the predicate returns 'True', and return+-- the consumed input.+--+-- This parser requires the predicate to succeed on at least one byte+-- of input: it will fail if the predicate never returns 'True' or if+-- there is no input left.+takeWhile1 :: (Char -> Bool) -> Parser B.ByteString+takeWhile1 p = I.takeWhile1 (p . w2c)+{-# INLINE takeWhile1 #-}++-- | The parser @satisfy p@ succeeds for any byte for which the+-- predicate @p@ returns 'True'. Returns the byte that is actually+-- parsed.+--+-- >digit = satisfy isDigit+-- >    where isDigit c = c >= '0' && c <= '9'+satisfy :: (Char -> Bool) -> Parser Char+satisfy = I.satisfyWith w2c+{-# INLINE satisfy #-}++-- | Match a letter, in the ISO-8859-15 encoding.+letter_iso8859_15 :: Parser Char+letter_iso8859_15 = satisfy isAlpha_iso8859_15 <?> "letter_iso8859_15"+{-# INLINE letter_iso8859_15 #-}++-- | Match a letter, in the ASCII encoding.+letter_ascii :: Parser Char+letter_ascii = satisfy isAlpha_ascii <?> "letter_ascii"+{-# INLINE letter_ascii #-}++-- | A fast alphabetic predicate for the ISO-8859-15 encoding+--+-- /Note/: For all character encodings other than ISO-8859-15, and+-- almost all Unicode code points above U+00A3, this predicate gives+-- /wrong answers/.+isAlpha_iso8859_15 :: Char -> Bool+isAlpha_iso8859_15 c = (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') ||+                       (c >= '\166' && moby c)+  where moby = notInClass "\167\169\171-\179\182\183\185\187\191\215\247"+        {-# NOINLINE moby #-}+{-# INLINE isAlpha_iso8859_15 #-}++-- | A fast alphabetic predicate for the ASCII encoding+--+-- /Note/: For all character encodings other than ASCII, and+-- almost all Unicode code points above U+007F, this predicate gives+-- /wrong answers/.+isAlpha_ascii :: Char -> Bool+isAlpha_ascii c = (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')+{-# INLINE isAlpha_ascii #-}++-- | Parse a single digit.+digit :: Parser Char+digit = satisfy isDigit <?> "digit"+{-# INLINE digit #-}++-- | A fast digit predicate.+isDigit :: Char -> Bool+isDigit c = c >= '0' && c <= '9'+{-# INLINE isDigit #-}++-- | A fast digit predicate.+isDigit_w8 :: Word8 -> Bool+isDigit_w8 w = w >= 48 && w <= 57+{-# INLINE isDigit_w8 #-}++-- | Match any character.+anyChar :: Parser Char+anyChar = satisfy $ const True+{-# INLINE anyChar #-}++-- | Match any character. Returns 'Nothing' if end of input has been+-- reached. Does not consume any input.+--+-- /Note/: Because this parser does not fail, do not use it with+-- combinators such as 'many', because such parsers loop until a+-- failure occurs.  Careless use will thus result in an infinite loop.+peekChar :: Parser (Maybe Char)+peekChar = (fmap w2c) `fmap` I.peekWord8+{-# INLINE peekChar #-}++-- | Fast predicate for matching ASCII space characters.+--+-- /Note/: This predicate only gives correct answers for the ASCII+-- encoding.  For instance, it does not recognise U+00A0 (non-breaking+-- space) as a space character, even though it is a valid ISO-8859-15+-- byte. For a Unicode-aware and only slightly slower predicate,+-- use 'Data.Char.isSpace'+isSpace :: Char -> Bool+isSpace c = (c == ' ') || ('\t' <= c && c <= '\r')+{-# INLINE isSpace #-}++-- | Fast 'Word8' predicate for matching ASCII space characters.+isSpace_w8 :: Word8 -> Bool+isSpace_w8 w = (w == 32) || (9 <= w && w <= 13)+{-# INLINE isSpace_w8 #-}+++-- | Parse a space character.+--+-- /Note/: This parser only gives correct answers for the ASCII+-- encoding.  For instance, it does not recognise U+00A0 (non-breaking+-- space) as a space character, even though it is a valid ISO-8859-15+-- byte.+space :: Parser Char+space = satisfy isSpace <?> "space"+{-# INLINE space #-}++-- | Match a specific character.+char :: Char -> Parser Char+char c = satisfy (== c) <?> [c]+{-# INLINE char #-}++-- | Match a specific character, but return its 'Word8' value.+char8 :: Char -> Parser Word8+char8 c = I.satisfy (== c2w c) <?> [c]+{-# INLINE char8 #-}++-- | Match any character except the given one.+notChar :: Char -> Parser Char+notChar c = satisfy (/= c) <?> "not " ++ [c]+{-# INLINE notChar #-}++-- | Match any character in a set.+--+-- >vowel = inClass "aeiou"+--+-- Range notation is supported.+--+-- >halfAlphabet = inClass "a-nA-N"+--+-- To add a literal \'-\' to a set, place it at the beginning or end+-- of the string.+inClass :: String -> Char -> Bool+inClass s = (`memberChar` mySet)+    where mySet = charClass s+{-# INLINE inClass #-}++-- | Match any character not in a set.+notInClass :: String -> Char -> Bool+notInClass s = not . inClass s+{-# INLINE notInClass #-}++-- | Consume input as long as the predicate returns 'True', and return+-- the consumed input.+--+-- This parser does not fail.  It will return an empty string if the+-- predicate returns 'False' on the first byte of input.+--+-- /Note/: Because this parser does not fail, do not use it with+-- combinators such as 'many', because such parsers loop until a+-- failure occurs.  Careless use will thus result in an infinite loop.+takeWhile :: (Char -> Bool) -> Parser B.ByteString+takeWhile p = I.takeWhile (p . w2c)+{-# INLINE takeWhile #-}++-- | A stateful scanner.  The predicate consumes and transforms a+-- state argument, and each transformed state is passed to successive+-- invocations of the predicate on each byte of the input until one+-- returns 'Nothing' or the input ends.+--+-- This parser does not fail.  It will return an empty string if the+-- predicate returns 'Nothing' on the first byte of input.+--+-- /Note/: Because this parser does not fail, do not use it with+-- combinators such as 'many', because such parsers loop until a+-- failure occurs.  Careless use will thus result in an infinite loop.+scan :: s -> (s -> Char -> Maybe s) -> Parser B.ByteString+scan s0 p = I.scan s0 (\s -> p s . w2c)+{-# INLINE scan #-}++-- | Consume input as long as the predicate returns 'False'+-- (i.e. until it returns 'True'), and return the consumed input.+--+-- This parser does not fail.  It will return an empty string if the+-- predicate returns 'True' on the first byte of input.+--+-- /Note/: Because this parser does not fail, do not use it with+-- combinators such as 'many', because such parsers loop until a+-- failure occurs.  Careless use will thus result in an infinite loop.+takeTill :: (Char -> Bool) -> Parser B.ByteString+takeTill p = I.takeTill (p . w2c)+{-# INLINE takeTill #-}++-- | Skip past input for as long as the predicate returns 'True'.+skipWhile :: (Char -> Bool) -> Parser ()+skipWhile p = I.skipWhile (p . w2c)+{-# INLINE skipWhile #-}++-- | Skip over white space.+skipSpace :: Parser ()+skipSpace = I.skipWhile isSpace_w8+{-# INLINE skipSpace #-}++-- $specalt+--+-- The '.*>' and '<*.' combinators are intended for use with the+-- @OverloadedStrings@ language extension.  They simplify the common+-- task of matching a statically known string, then immediately+-- parsing something else.+--+-- An example makes this easier to understand:+--+-- @{-\# LANGUAGE OverloadedStrings #-}+--+-- shoeSize = \"Shoe size: \" '.*>' 'decimal'+-- @+--+-- If we were to try to use '*>' above instead, the type checker would+-- not be able to tell which 'IsString' instance to use for the text+-- in quotes.  We would have to be explicit, using either a type+-- signature or the 'I.string' parser.++-- | Type-specialized version of '*>' for 'B.ByteString'.+(.*>) :: B.ByteString -> Parser a -> Parser a+s .*> f = I.string s *> f++-- | Type-specialized version of '<*' for 'B.ByteString'.+(<*.) :: Parser a -> B.ByteString -> Parser a+f <*. s = f <* I.string s++-- | A predicate that matches either a carriage return @\'\\r\'@ or+-- newline @\'\\n\'@ character.+isEndOfLine :: Word8 -> Bool+isEndOfLine w = w == 13 || w == 10+{-# INLINE isEndOfLine #-}++-- | A predicate that matches either a space @\' \'@ or horizontal tab+-- @\'\\t\'@ character.+isHorizontalSpace :: Word8 -> Bool+isHorizontalSpace w = w == 32 || w == 9+{-# INLINE isHorizontalSpace #-}++-- | Parse and decode an unsigned hexadecimal number.  The hex digits+-- @\'a\'@ through @\'f\'@ may be upper or lower case.+--+-- This parser does not accept a leading @\"0x\"@ string.+hexadecimal :: (Integral a, Bits a) => Parser a+hexadecimal = B8.foldl' step 0 `fmap` I.takeWhile1 isHexDigit+  where+    isHexDigit w = (w >= 48 && w <= 57) ||+                   (w >= 97 && w <= 102) ||+                   (w >= 65 && w <= 70)+    step a w | w >= 48 && w <= 57  = (a `shiftL` 4) .|. fromIntegral (w - 48)+             | w >= 97             = (a `shiftL` 4) .|. fromIntegral (w - 87)+             | otherwise           = (a `shiftL` 4) .|. fromIntegral (w - 55)+{-# SPECIALISE hexadecimal :: Parser Int #-}+{-# SPECIALISE hexadecimal :: Parser Int8 #-}+{-# SPECIALISE hexadecimal :: Parser Int16 #-}+{-# SPECIALISE hexadecimal :: Parser Int32 #-}+{-# SPECIALISE hexadecimal :: Parser Int64 #-}+{-# SPECIALISE hexadecimal :: Parser Integer #-}+{-# SPECIALISE hexadecimal :: Parser Word #-}+{-# SPECIALISE hexadecimal :: Parser Word8 #-}+{-# SPECIALISE hexadecimal :: Parser Word16 #-}+{-# SPECIALISE hexadecimal :: Parser Word32 #-}+{-# SPECIALISE hexadecimal :: Parser Word64 #-}++-- | Parse and decode an unsigned decimal number.+decimal :: Integral a => Parser a+decimal = B8.foldl' step 0 `fmap` I.takeWhile1 isDig+  where isDig w  = w >= 48 && w <= 57+        step a w = a * 10 + fromIntegral (w - 48)+{-# SPECIALISE decimal :: Parser Int #-}+{-# SPECIALISE decimal :: Parser Int8 #-}+{-# SPECIALISE decimal :: Parser Int16 #-}+{-# SPECIALISE decimal :: Parser Int32 #-}+{-# SPECIALISE decimal :: Parser Int64 #-}+{-# SPECIALISE decimal :: Parser Integer #-}+{-# SPECIALISE decimal :: Parser Word #-}+{-# SPECIALISE decimal :: Parser Word8 #-}+{-# SPECIALISE decimal :: Parser Word16 #-}+{-# SPECIALISE decimal :: Parser Word32 #-}+{-# SPECIALISE decimal :: Parser Word64 #-}++-- | Parse a number with an optional leading @\'+\'@ or @\'-\'@ sign+-- character.+signed :: Num a => Parser a -> Parser a+{-# SPECIALISE signed :: Parser Int -> Parser Int #-}+{-# SPECIALISE signed :: Parser Int8 -> Parser Int8 #-}+{-# SPECIALISE signed :: Parser Int16 -> Parser Int16 #-}+{-# SPECIALISE signed :: Parser Int32 -> Parser Int32 #-}+{-# SPECIALISE signed :: Parser Int64 -> Parser Int64 #-}+{-# SPECIALISE signed :: Parser Integer -> Parser Integer #-}+signed p = (negate <$> (char8 '-' *> p))+       <|> (char8 '+' *> p)+       <|> p++-- | Parse a rational number.+--+-- This parser accepts an optional leading sign character, followed by+-- at least one decimal digit.  The syntax similar to that accepted by+-- the 'read' function, with the exception that a trailing @\'.\'@ or+-- @\'e\'@ /not/ followed by a number is not consumed.+--+-- Examples with behaviour identical to 'read', if you feed an empty+-- continuation to the first result:+--+-- >rational "3"     == Done 3.0 ""+-- >rational "3.1"   == Done 3.1 ""+-- >rational "3e4"   == Done 30000.0 ""+-- >rational "3.1e4" == Done 31000.0, ""+--+-- Examples with behaviour identical to 'read':+--+-- >rational ".3"    == Fail "input does not start with a digit"+-- >rational "e3"    == Fail "input does not start with a digit"+--+-- Examples of differences from 'read':+--+-- >rational "3.foo" == Done 3.0 ".foo"+-- >rational "3e"    == Done 3.0 "e"+--+-- This function does not accept string representations of \"NaN\" or+-- \"Infinity\".+rational :: Fractional a => Parser a+{-# SPECIALIZE rational :: Parser Double #-}+{-# SPECIALIZE rational :: Parser Float #-}+{-# SPECIALIZE rational :: Parser Rational #-}+rational = floaty $ \real frac fracDenom -> fromRational $+                     real % 1 + frac % fracDenom++-- | Parse a rational number.+--+-- The syntax accepted by this parser is the same as for 'rational'.+--+-- /Note/: This function is almost ten times faster than 'rational',+-- but is slightly less accurate.+--+-- The 'Double' type supports about 16 decimal places of accuracy.+-- For 94.2% of numbers, this function and 'rational' give identical+-- results, but for the remaining 5.8%, this function loses precision+-- around the 15th decimal place.  For 0.001% of numbers, this+-- function will lose precision at the 13th or 14th decimal place.+--+-- This function does not accept string representations of \"NaN\" or+-- \"Infinity\".+double :: Parser Double+double = floaty asDouble++asDouble :: Integer -> Integer -> Integer -> Double+asDouble real frac fracDenom =+    fromIntegral real + fromIntegral frac / fromIntegral fracDenom+{-# INLINE asDouble #-}++-- | Parse a number, attempting to preserve both speed and precision.+--+-- The syntax accepted by this parser is the same as for 'rational'.+--+-- /Note/: This function is almost ten times faster than 'rational'.+-- On integral inputs, it gives perfectly accurate answers, and on+-- floating point inputs, it is slightly less accurate than+-- 'rational'.+--+-- This function does not accept string representations of \"NaN\" or+-- \"Infinity\".+number :: Parser Number+number = floaty $ \real frac fracDenom ->+         if frac == 0 && fracDenom == 0+         then I real+         else D (asDouble real frac fracDenom)+{-# INLINE number #-}++data T = T !Integer !Int++floaty :: Fractional a => (Integer -> Integer -> Integer -> a) -> Parser a+{-# INLINE floaty #-}+floaty f = do+  let minus = 45+      plus  = 43+  !positive <- ((== plus) <$> I.satisfy (\c -> c == minus || c == plus)) <|>+               return True+  real <- decimal+  let tryFraction = do+        let dot = 46+        _ <- I.satisfy (==dot)+        ds <- I.takeWhile isDigit_w8+        case I.parseOnly decimal ds of+                Right n -> return $ T n (B.length ds)+                _       -> fail "no digits after decimal"+  T fraction fracDigits <- tryFraction <|> return (T 0 0)+  let littleE = 101+      bigE    = 69+      e w = w == littleE || w == bigE+  power <- (I.satisfy e *> signed decimal) <|> return (0::Int)+  let n = if fracDigits == 0+          then if power == 0+               then fromIntegral real+               else fromIntegral real * (10 ^^ power)+          else if power == 0+               then f real fraction (10 ^ fracDigits)+               else f real fraction (10 ^ fracDigits) * (10 ^^ power)+  return $ if positive+           then n+           else -n
+ vendor/attoparsec-0.10.4.0/Data/Attoparsec/ByteString/FastSet.hs view
@@ -0,0 +1,115 @@+{-# LANGUAGE BangPatterns, MagicHash #-}++-----------------------------------------------------------------------------+-- |+-- Module      :  Data.Attoparsec.ByteString.FastSet+-- Copyright   :  Bryan O'Sullivan 2008+-- License     :  BSD3+--+-- Maintainer  :  bos@serpentine.com+-- Stability   :  experimental+-- Portability :  unknown+--+-- Fast set membership tests for 'Word8' and 8-bit 'Char' values.  The+-- set representation is unboxed for efficiency.  For small sets, we+-- test for membership using a binary search.  For larger sets, we use+-- a lookup table.+--+-----------------------------------------------------------------------------+module Data.Attoparsec.ByteString.FastSet+    (+    -- * Data type+      FastSet+    -- * Construction+    , fromList+    , set+    -- * Lookup+    , memberChar+    , memberWord8+    -- * Debugging+    , fromSet+    -- * Handy interface+    , charClass+    ) where++import Data.Bits ((.&.), (.|.))+import Foreign.Storable (peekByteOff, pokeByteOff)+import GHC.Base (Int(I#), iShiftRA#, narrow8Word#, shiftL#)+import GHC.Word (Word8(W8#))+import qualified Data.ByteString as B+import qualified Data.ByteString.Char8 as B8+import qualified Data.ByteString.Internal as I+import qualified Data.ByteString.Unsafe as U++data FastSet = Sorted { fromSet :: !B.ByteString }+             | Table  { fromSet :: !B.ByteString }+    deriving (Eq, Ord)++instance Show FastSet where+    show (Sorted s) = "FastSet Sorted " ++ show (B8.unpack s)+    show (Table _) = "FastSet Table"++-- | The lower bound on the size of a lookup table.  We choose this to+-- balance table density against performance.+tableCutoff :: Int+tableCutoff = 8++-- | Create a set.+set :: B.ByteString -> FastSet+set s | B.length s < tableCutoff = Sorted . B.sort $ s+      | otherwise                = Table . mkTable $ s++fromList :: [Word8] -> FastSet+fromList = set . B.pack++data I = I {-# UNPACK #-} !Int {-# UNPACK #-} !Word8++shiftR :: Int -> Int -> Int+shiftR (I# x#) (I# i#) = I# (x# `iShiftRA#` i#)++shiftL :: Word8 -> Int -> Word8+shiftL (W8# x#) (I# i#) = W8# (narrow8Word# (x# `shiftL#` i#))++index :: Int -> I+index i = I (i `shiftR` 3) (1 `shiftL` (i .&. 7))+{-# INLINE index #-}++-- | Check the set for membership.+memberWord8 :: Word8 -> FastSet -> Bool+memberWord8 w (Table t)  =+    let I byte bit = index (fromIntegral w)+    in  U.unsafeIndex t byte .&. bit /= 0+memberWord8 w (Sorted s) = search 0 (B.length s - 1)+    where search lo hi+              | hi < lo = False+              | otherwise =+                  let mid = (lo + hi) `div` 2+                  in case compare w (U.unsafeIndex s mid) of+                       GT -> search (mid + 1) hi+                       LT -> search lo (mid - 1)+                       _ -> True++-- | Check the set for membership.  Only works with 8-bit characters:+-- characters above code point 255 will give wrong answers.+memberChar :: Char -> FastSet -> Bool+memberChar c = memberWord8 (I.c2w c)+{-# INLINE memberChar #-}++mkTable :: B.ByteString -> B.ByteString+mkTable s = I.unsafeCreate 32 $ \t -> do+            _ <- I.memset t 0 32+            U.unsafeUseAsCStringLen s $ \(p, l) ->+              let loop n | n == l = return ()+                         | otherwise = do+                    c <- peekByteOff p n :: IO Word8+                    let I byte bit = index (fromIntegral c)+                    prev <- peekByteOff t byte :: IO Word8+                    pokeByteOff t byte (prev .|. bit)+                    loop (n + 1)+              in loop 0++charClass :: String -> FastSet+charClass = set . B8.pack . go+    where go (a:'-':b:xs) = [a..b] ++ go xs+          go (x:xs) = x : go xs+          go _ = ""
+ vendor/attoparsec-0.10.4.0/Data/Attoparsec/ByteString/Internal.hs view
@@ -0,0 +1,516 @@+{-# LANGUAGE BangPatterns, CPP, Rank2Types, OverloadedStrings,+    RecordWildCards, MagicHash, UnboxedTuples #-}+-- |+-- Module      :  Data.Attoparsec.ByteString.Internal+-- Copyright   :  Bryan O'Sullivan 2007-2011+-- License     :  BSD3+--+-- Maintainer  :  bos@serpentine.com+-- Stability   :  experimental+-- Portability :  unknown+--+-- Simple, efficient parser combinators for 'B.ByteString' strings,+-- loosely based on the Parsec library.++module Data.Attoparsec.ByteString.Internal+    (+    -- * Parser types+      Parser+    , Result++    -- * Running parsers+    , parse+    , parseOnly++    -- * Combinators+    , (<?>)+    , try+    , module Data.Attoparsec.Combinator++    -- * Parsing individual bytes+    , satisfy+    , satisfyWith+    , anyWord8+    , skip+    , word8+    , notWord8+    , peekWord8++    -- ** Byte classes+    , inClass+    , notInClass++    -- * Parsing more complicated structures+    , storable++    -- * Efficient string handling+    , skipWhile+    , string+    , stringTransform+    , take+    , scan+    , takeWhile+    , takeWhile1+    , takeTill++    -- ** Consume all remaining input+    , takeByteString+    , takeLazyByteString++    -- * State observation and manipulation functions+    , endOfInput+    , atEnd++    -- * Utilities+    , endOfLine+    ) where++import Control.Applicative ((<|>), (<$>))+import Control.Monad (when)+import Data.Attoparsec.ByteString.FastSet (charClass, memberWord8)+import Data.Attoparsec.Combinator+import Data.Attoparsec.Internal.Types+    hiding (Parser, Input, Added, Failure, Success)+import Data.Monoid (Monoid(..))+import Data.Word (Word8)+import Foreign.ForeignPtr (withForeignPtr)+import Foreign.Ptr (castPtr, minusPtr, plusPtr)+import Foreign.Storable (Storable(peek, sizeOf))+import Prelude hiding (getChar, take, takeWhile)+import qualified Data.Attoparsec.Internal.Types as T+import qualified Data.ByteString as B8+import qualified Data.ByteString.Char8 as B+import qualified Data.ByteString.Internal as B+import qualified Data.ByteString.Lazy as L+import qualified Data.ByteString.Unsafe as B++#if defined(__GLASGOW_HASKELL__)+import GHC.Base (realWorld#)+import GHC.IO (IO(IO))+#else+import System.IO.Unsafe (unsafePerformIO)+#endif++type Parser = T.Parser B.ByteString+type Result = IResult B.ByteString+type Input = T.Input B.ByteString+type Added = T.Added B.ByteString+type Failure r = T.Failure B.ByteString r+type Success a r = T.Success B.ByteString a r++ensure' :: Int -> Input -> Added -> More -> Failure r -> Success B.ByteString r+        -> IResult B.ByteString r+ensure' !n0 i0 a0 m0 kf0 ks0 =+    T.runParser (demandInput >> go n0) i0 a0 m0 kf0 ks0+  where+    go !n = T.Parser $ \i a m kf ks ->+        if B.length (unI i) >= n+        then ks i a m (unI i)+        else T.runParser (demandInput >> go n) i a m kf ks++-- | If at least @n@ bytes of input are available, return the current+-- input, otherwise fail.+ensure :: Int -> Parser B.ByteString+ensure !n = T.Parser $ \i0 a0 m0 kf ks ->+    if B.length (unI i0) >= n+    then ks i0 a0 m0 (unI i0)+    -- The uncommon case is kept out-of-line to reduce code size:+    else ensure' n i0 a0 m0 kf ks+-- Non-recursive so the bounds check can be inlined:+{-# INLINE ensure #-}++-- | Ask for input.  If we receive any, pass it to a success+-- continuation, otherwise to a failure continuation.+prompt :: Input -> Added -> More+       -> (Input -> Added -> More -> Result r)+       -> (Input -> Added -> More -> Result r)+       -> Result r+prompt i0 a0 _m0 kf ks = Partial $ \s ->+    if B.null s+    then kf i0 a0 Complete+    else ks (i0 <> I s) (a0 <> A s) Incomplete++-- | Immediately demand more input via a 'Partial' continuation+-- result.+demandInput :: Parser ()+demandInput = T.Parser $ \i0 a0 m0 kf ks ->+    if m0 == Complete+    then kf i0 a0 m0 ["demandInput"] "not enough bytes"+    else let kf' i a m = kf i a m ["demandInput"] "not enough bytes"+             ks' i a m = ks i a m ()+         in prompt i0 a0 m0 kf' ks'++-- | This parser always succeeds.  It returns 'True' if any input is+-- available either immediately or on demand, and 'False' if the end+-- of all input has been reached.+wantInput :: Parser Bool+wantInput = T.Parser $ \i0 a0 m0 _kf ks ->+  case () of+    _ | not (B.null (unI i0)) -> ks i0 a0 m0 True+      | m0 == Complete  -> ks i0 a0 m0 False+      | otherwise       -> let kf' i a m = ks i a m False+                               ks' i a m = ks i a m True+                           in prompt i0 a0 m0 kf' ks'++get :: Parser B.ByteString+get  = T.Parser $ \i0 a0 m0 _kf ks -> ks i0 a0 m0 (unI i0)++put :: B.ByteString -> Parser ()+put s = T.Parser $ \_i0 a0 m0 _kf ks -> ks (I s) a0 m0 ()++-- | Attempt a parse, and if it fails, rewind the input so that no+-- input appears to have been consumed.+--+-- This combinator is provided for compatibility with Parsec.+-- Attoparsec parsers always backtrack on failure.+try :: Parser a -> Parser a+try p = p+{-# INLINE try #-}++-- | The parser @satisfy p@ succeeds for any byte for which the+-- predicate @p@ returns 'True'. Returns the byte that is actually+-- parsed.+--+-- >digit = satisfy isDigit+-- >    where isDigit w = w >= 48 && w <= 57+satisfy :: (Word8 -> Bool) -> Parser Word8+satisfy p = do+  s <- ensure 1+  let !w = B.unsafeHead s+  if p w+    then put (B.unsafeTail s) >> return w+    else fail "satisfy"+{-# INLINE satisfy #-}++-- | The parser @skip p@ succeeds for any byte for which the predicate+-- @p@ returns 'True'.+--+-- >skipDigit = skip isDigit+-- >    where isDigit w = w >= 48 && w <= 57+skip :: (Word8 -> Bool) -> Parser ()+skip p = do+  s <- ensure 1+  if p (B.unsafeHead s)+    then put (B.unsafeTail s)+    else fail "skip"++-- | The parser @satisfyWith f p@ transforms a byte, and succeeds if+-- the predicate @p@ returns 'True' on the transformed value. The+-- parser returns the transformed byte that was parsed.+satisfyWith :: (Word8 -> a) -> (a -> Bool) -> Parser a+satisfyWith f p = do+  s <- ensure 1+  let c = f $! B.unsafeHead s+  if p c+    then let !t = B.unsafeTail s+         in put t >> return c+    else fail "satisfyWith"+{-# INLINE satisfyWith #-}++storable :: Storable a => Parser a+storable = hack undefined+ where+  hack :: Storable b => b -> Parser b+  hack dummy = do+    (fp,o,_) <- B.toForeignPtr `fmap` take (sizeOf dummy)+    return . B.inlinePerformIO . withForeignPtr fp $ \p ->+        peek (castPtr $ p `plusPtr` o)++-- | Consume @n@ bytes of input, but succeed only if the predicate+-- returns 'True'.+takeWith :: Int -> (B.ByteString -> Bool) -> Parser B.ByteString+takeWith n0 p = do+  let n = max n0 0+  s <- ensure n+  let h = B.unsafeTake n s+      t = B.unsafeDrop n s+  if p h+    then put t >> return h+    else fail "takeWith"++-- | Consume exactly @n@ bytes of input.+take :: Int -> Parser B.ByteString+take n = takeWith n (const True)+{-# INLINE take #-}++-- | @string s@ parses a sequence of bytes that identically match+-- @s@. Returns the parsed string (i.e. @s@).  This parser consumes no+-- input if it fails (even if a partial match).+--+-- /Note/: The behaviour of this parser is different to that of the+-- similarly-named parser in Parsec, as this one is all-or-nothing.+-- To illustrate the difference, the following parser will fail under+-- Parsec given an input of @\"for\"@:+--+-- >string "foo" <|> string "for"+--+-- The reason for its failure is that the first branch is a+-- partial match, and will consume the letters @\'f\'@ and @\'o\'@+-- before failing.  In Attoparsec, the above parser will /succeed/ on+-- that input, because the failed first branch will consume nothing.+string :: B.ByteString -> Parser B.ByteString+string s = takeWith (B.length s) (==s)+{-# INLINE string #-}++stringTransform :: (B.ByteString -> B.ByteString) -> B.ByteString+                -> Parser B.ByteString+stringTransform f s = takeWith (B.length s) ((==f s) . f)+{-# INLINE stringTransform #-}++-- | Skip past input for as long as the predicate returns 'True'.+skipWhile :: (Word8 -> Bool) -> Parser ()+skipWhile p = go+ where+  go = do+    t <- B8.dropWhile p <$> get+    put t+    when (B.null t) $ do+      input <- wantInput+      when input go+{-# INLINE skipWhile #-}++-- | Consume input as long as the predicate returns 'False'+-- (i.e. until it returns 'True'), and return the consumed input.+--+-- This parser does not fail.  It will return an empty string if the+-- predicate returns 'True' on the first byte of input.+--+-- /Note/: Because this parser does not fail, do not use it with+-- combinators such as 'many', because such parsers loop until a+-- failure occurs.  Careless use will thus result in an infinite loop.+takeTill :: (Word8 -> Bool) -> Parser B.ByteString+takeTill p = takeWhile (not . p)+{-# INLINE takeTill #-}++-- | Consume input as long as the predicate returns 'True', and return+-- the consumed input.+--+-- This parser does not fail.  It will return an empty string if the+-- predicate returns 'False' on the first byte of input.+--+-- /Note/: Because this parser does not fail, do not use it with+-- combinators such as 'many', because such parsers loop until a+-- failure occurs.  Careless use will thus result in an infinite loop.+takeWhile :: (Word8 -> Bool) -> Parser B.ByteString+takeWhile p = (B.concat . reverse) `fmap` go []+ where+  go acc = do+    (h,t) <- B8.span p <$> get+    put t+    if B.null t+      then do+        input <- wantInput+        if input+          then go (h:acc)+          else return (h:acc)+      else return (h:acc)+{-# INLINE takeWhile #-}++takeRest :: Parser [B.ByteString]+takeRest = go []+ where+  go acc = do+    input <- wantInput+    if input+      then do+        s <- get+        put B.empty+        go (s:acc)+      else return (reverse acc)++-- | Consume all remaining input and return it as a single string.+takeByteString :: Parser B.ByteString+takeByteString = B.concat `fmap` takeRest++-- | Consume all remaining input and return it as a single string.+takeLazyByteString :: Parser L.ByteString+takeLazyByteString = L.fromChunks `fmap` takeRest++data T s = T {-# UNPACK #-} !Int s++-- | A stateful scanner.  The predicate consumes and transforms a+-- state argument, and each transformed state is passed to successive+-- invocations of the predicate on each byte of the input until one+-- returns 'Nothing' or the input ends.+--+-- This parser does not fail.  It will return an empty string if the+-- predicate returns 'Nothing' on the first byte of input.+--+-- /Note/: Because this parser does not fail, do not use it with+-- combinators such as 'many', because such parsers loop until a+-- failure occurs.  Careless use will thus result in an infinite loop.+scan :: s -> (s -> Word8 -> Maybe s) -> Parser B.ByteString+scan s0 p = do+  chunks <- go [] s0+  case chunks of+    [x] -> return x+    xs  -> return $! B.concat $ reverse xs+ where+  go acc s1 = do+    let scanner (B.PS fp off len) =+          withForeignPtr fp $ \ptr0 -> do+            let start = ptr0 `plusPtr` off+                end   = start `plusPtr` len+                inner ptr !s+                  | ptr < end = do+                    w <- peek ptr+                    case p s w of+                      Just s' -> inner (ptr `plusPtr` 1) s'+                      _       -> done (ptr `minusPtr` start) s+                  | otherwise = done (ptr `minusPtr` start) s+                done !i !s = return (T i s)+            inner start s1+    bs <- get+    let T i s' = inlinePerformIO $ scanner bs+        !h = B.unsafeTake i bs+        !t = B.unsafeDrop i bs+    put t+    if B.null t+      then do+        input <- wantInput+        if input+          then go (h:acc) s'+          else return (h:acc)+      else return (h:acc)+{-# INLINE scan #-}++-- | Consume input as long as the predicate returns 'True', and return+-- the consumed input.+--+-- This parser requires the predicate to succeed on at least one byte+-- of input: it will fail if the predicate never returns 'True' or if+-- there is no input left.+takeWhile1 :: (Word8 -> Bool) -> Parser B.ByteString+takeWhile1 p = do+  (`when` demandInput) =<< B.null <$> get+  (h,t) <- B8.span p <$> get+  when (B.null h) $ fail "takeWhile1"+  put t+  if B.null t+    then (h<>) `fmap` takeWhile p+    else return h++-- | Match any byte in a set.+--+-- >vowel = inClass "aeiou"+--+-- Range notation is supported.+--+-- >halfAlphabet = inClass "a-nA-N"+--+-- To add a literal @\'-\'@ to a set, place it at the beginning or end+-- of the string.+inClass :: String -> Word8 -> Bool+inClass s = (`memberWord8` mySet)+    where mySet = charClass s+          {-# NOINLINE mySet #-}+{-# INLINE inClass #-}++-- | Match any byte not in a set.+notInClass :: String -> Word8 -> Bool+notInClass s = not . inClass s+{-# INLINE notInClass #-}++-- | Match any byte.+anyWord8 :: Parser Word8+anyWord8 = satisfy $ const True+{-# INLINE anyWord8 #-}++-- | Match a specific byte.+word8 :: Word8 -> Parser Word8+word8 c = satisfy (== c) <?> show c+{-# INLINE word8 #-}++-- | Match any byte except the given one.+notWord8 :: Word8 -> Parser Word8+notWord8 c = satisfy (/= c) <?> "not " ++ show c+{-# INLINE notWord8 #-}++-- | Match any byte. Returns 'Nothing' if end of input has been+-- reached. Does not consume any input.+--+-- /Note/: Because this parser does not fail, do not use it with+-- combinators such as 'many', because such parsers loop until a+-- failure occurs.  Careless use will thus result in an infinite loop.+peekWord8 :: Parser (Maybe Word8)+peekWord8 = T.Parser $ \i0 a0 m0 _kf ks ->+            if B.null (unI i0)+            then if m0 == Complete+                 then ks i0 a0 m0 Nothing+                 else let ks' i a m = let !w = B.unsafeHead (unI i)+                                      in ks i a m (Just w)+                          kf' i a m = ks i a m Nothing+                      in prompt i0 a0 m0 kf' ks'+            else let !w = B.unsafeHead (unI i0)+                 in ks i0 a0 m0 (Just w)+{-# INLINE peekWord8 #-}++-- | Match only if all input has been consumed.+endOfInput :: Parser ()+endOfInput = T.Parser $ \i0 a0 m0 kf ks ->+             if B.null (unI i0)+             then if m0 == Complete+                  then ks i0 a0 m0 ()+                  else let kf' i1 a1 m1 _ _ = addS i0 a0 m0 i1 a1 m1 $+                                              \ i2 a2 m2 -> ks i2 a2 m2 ()+                           ks' i1 a1 m1 _   = addS i0 a0 m0 i1 a1 m1 $+                                              \ i2 a2 m2 -> kf i2 a2 m2 []+                                                            "endOfInput"+                       in  T.runParser demandInput i0 a0 m0 kf' ks'+             else kf i0 a0 m0 [] "endOfInput"++-- | Return an indication of whether the end of input has been+-- reached.+atEnd :: Parser Bool+atEnd = not <$> wantInput+{-# INLINE atEnd #-}++-- | Match either a single newline character @\'\\n\'@, or a carriage+-- return followed by a newline character @\"\\r\\n\"@.+endOfLine :: Parser ()+endOfLine = (word8 10 >> return ()) <|> (string "\r\n" >> return ())++-- | Name the parser, in case failure occurs.+(<?>) :: Parser a+      -> String                 -- ^ the name to use if parsing fails+      -> Parser a+p <?> msg0 = T.Parser $ \i0 a0 m0 kf ks ->+             let kf' i a m strs msg = kf i a m (msg0:strs) msg+             in T.runParser p i0 a0 m0 kf' ks+{-# INLINE (<?>) #-}+infix 0 <?>++-- | Terminal failure continuation.+failK :: Failure a+failK i0 _a0 _m0 stack msg = Fail (unI i0) stack msg+{-# INLINE failK #-}++-- | Terminal success continuation.+successK :: Success a a+successK i0 _a0 _m0 a = Done (unI i0) a+{-# INLINE successK #-}++-- | Run a parser.+parse :: Parser a -> B.ByteString -> Result a+parse m s = T.runParser m (I s) mempty Incomplete failK successK+{-# INLINE parse #-}++-- | Run a parser that cannot be resupplied via a 'Partial' result.+parseOnly :: Parser a -> B.ByteString -> Either String a+parseOnly m s = case T.runParser m (I s) mempty Complete failK successK of+                  Fail _ _ err -> Left err+                  Done _ a     -> Right a+                  _            -> error "parseOnly: impossible error!"+{-# INLINE parseOnly #-}++-- | Just like unsafePerformIO, but we inline it. Big performance gains as+-- it exposes lots of things to further inlining. /Very unsafe/. In+-- particular, you should do no memory allocation inside an+-- 'inlinePerformIO' block. On Hugs this is just @unsafePerformIO@.+inlinePerformIO :: IO a -> a+#if defined(__GLASGOW_HASKELL__)+inlinePerformIO (IO m) = case m realWorld# of (# _, r #) -> r+#else+inlinePerformIO = unsafePerformIO+#endif+{-# INLINE inlinePerformIO #-}
+ vendor/attoparsec-0.10.4.0/Data/Attoparsec/Combinator.hs view
@@ -0,0 +1,205 @@+{-# LANGUAGE BangPatterns, CPP #-}+-- |+-- Module      :  Data.Attoparsec.Combinator+-- Copyright   :  Daan Leijen 1999-2001, Bryan O'Sullivan 2009-2010+-- License     :  BSD3+--+-- Maintainer  :  bos@serpentine.com+-- Stability   :  experimental+-- Portability :  portable+--+-- Useful parser combinators, similar to those provided by Parsec.+module Data.Attoparsec.Combinator+    (+      choice+    , count+    , option+    , many'+    , many1+    , many1'+    , manyTill+    , manyTill'+    , sepBy+    , sepBy'+    , sepBy1+    , sepBy1'+    , skipMany+    , skipMany1+    , eitherP+    ) where++import Control.Applicative (Alternative(..), Applicative(..), empty, liftA2,+                            (<|>), (*>), (<$>))+import Control.Monad (MonadPlus(..))+#if !MIN_VERSION_base(4,2,0)+import Control.Applicative (many)+#endif++#if __GLASGOW_HASKELL__ >= 700+import Data.Attoparsec.Internal.Types (Parser)+import Data.ByteString (ByteString)+#endif++-- | @choice ps@ tries to apply the actions in the list @ps@ in order,+-- until one of them succeeds. Returns the value of the succeeding+-- action.+choice :: Alternative f => [f a] -> f a+choice = foldr (<|>) empty+#if __GLASGOW_HASKELL__ >= 700+{-# SPECIALIZE choice :: [Parser ByteString a] -> Parser ByteString a #-}+#endif++-- | @option x p@ tries to apply action @p@. If @p@ fails without+-- consuming input, it returns the value @x@, otherwise the value+-- returned by @p@.+--+-- > priority  = option 0 (digitToInt <$> digit)+option :: Alternative f => a -> f a -> f a+option x p = p <|> pure x+#if __GLASGOW_HASKELL__ >= 700+{-# SPECIALIZE option :: a -> Parser ByteString a -> Parser ByteString a #-}+#endif++-- | A version of 'liftM2' that is strict in the result of its first+-- action.+liftM2' :: (Monad m) => (a -> b -> c) -> m a -> m b -> m c+liftM2' f a b = do+  !x <- a+  y <- b+  return (f x y)+{-# INLINE liftM2' #-}++-- | @many' p@ applies the action @p@ /zero/ or more times. Returns a+-- list of the returned values of @p@. The value returned by @p@ is+-- forced to WHNF.+--+-- >  word  = many' letter+many' :: (MonadPlus m) => m a -> m [a]+many' p = many_p+  where many_p = some_p `mplus` return []+        some_p = liftM2' (:) p many_p+{-# INLINE many' #-}++-- | @many1 p@ applies the action @p@ /one/ or more times. Returns a+-- list of the returned values of @p@.+--+-- >  word  = many1 letter+many1 :: Alternative f => f a -> f [a]+many1 p = liftA2 (:) p (many p)+{-# INLINE many1 #-}++-- | @many1' p@ applies the action @p@ /one/ or more times. Returns a+-- list of the returned values of @p@. The value returned by @p@ is+-- forced to WHNF.+--+-- >  word  = many1' letter+many1' :: (MonadPlus m) => m a -> m [a]+many1' p = liftM2' (:) p (many' p)+{-# INLINE many1' #-}++-- | @sepBy p sep@ applies /zero/ or more occurrences of @p@, separated+-- by @sep@. Returns a list of the values returned by @p@.+--+-- > commaSep p  = p `sepBy` (symbol ",")+sepBy :: Alternative f => f a -> f s -> f [a]+sepBy p s = liftA2 (:) p ((s *> sepBy1 p s) <|> pure []) <|> pure []+#if __GLASGOW_HASKELL__ >= 700+{-# SPECIALIZE sepBy :: Parser ByteString a -> Parser ByteString s+                     -> Parser ByteString [a] #-}+#endif++-- | @sepBy' p sep@ applies /zero/ or more occurrences of @p@, separated+-- by @sep@. Returns a list of the values returned by @p@. The value+-- returned by @p@ is forced to WHNF.+--+-- > commaSep p  = p `sepBy'` (symbol ",")+sepBy' :: (MonadPlus m) => m a -> m s -> m [a]+sepBy' p s = scan `mplus` return []+  where scan = liftM2' (:) p ((s >> sepBy1' p s) `mplus` return [])+#if __GLASGOW_HASKELL__ >= 700+{-# SPECIALIZE sepBy' :: Parser ByteString a -> Parser ByteString s+                      -> Parser ByteString [a] #-}+#endif++-- | @sepBy1 p sep@ applies /one/ or more occurrences of @p@, separated+-- by @sep@. Returns a list of the values returned by @p@.+--+-- > commaSep p  = p `sepBy1` (symbol ",")+sepBy1 :: Alternative f => f a -> f s -> f [a]+sepBy1 p s = scan+    where scan = liftA2 (:) p ((s *> scan) <|> pure [])+#if __GLASGOW_HASKELL__ >= 700+{-# SPECIALIZE sepBy1 :: Parser ByteString a -> Parser ByteString s+                      -> Parser ByteString [a] #-}+#endif++-- | @sepBy1' p sep@ applies /one/ or more occurrences of @p@, separated+-- by @sep@. Returns a list of the values returned by @p@. The value+-- returned by @p@ is forced to WHNF.+--+-- > commaSep p  = p `sepBy1'` (symbol ",")+sepBy1' :: (MonadPlus m) => m a -> m s -> m [a]+sepBy1' p s = scan+    where scan = liftM2' (:) p ((s >> scan) `mplus` return [])+#if __GLASGOW_HASKELL__ >= 700+{-# SPECIALIZE sepBy1' :: Parser ByteString a -> Parser ByteString s+                       -> Parser ByteString [a] #-}+#endif++-- | @manyTill p end@ applies action @p@ /zero/ or more times until+-- action @end@ succeeds, and returns the list of values returned by+-- @p@.  This can be used to scan comments:+--+-- >  simpleComment   = string "<!--" *> manyTill anyChar (try (string "-->"))+--+-- Note the overlapping parsers @anyChar@ and @string \"<!--\"@, and+-- therefore the use of the 'try' combinator.+manyTill :: Alternative f => f a -> f b -> f [a]+manyTill p end = scan+    where scan = (end *> pure []) <|> liftA2 (:) p scan+#if __GLASGOW_HASKELL__ >= 700+{-# SPECIALIZE manyTill :: Parser ByteString a -> Parser ByteString b+                        -> Parser ByteString [a] #-}+#endif++-- | @manyTill' p end@ applies action @p@ /zero/ or more times until+-- action @end@ succeeds, and returns the list of values returned by+-- @p@.  This can be used to scan comments:+--+-- >  simpleComment   = string "<!--" *> manyTill' anyChar (try (string "-->"))+--+-- Note the overlapping parsers @anyChar@ and @string \"<!--\"@, and+-- therefore the use of the 'try' combinator. The value returned by @p@+-- is forced to WHNF.+manyTill' :: (MonadPlus m) => m a -> m b -> m [a]+manyTill' p end = scan+    where scan = (end >> return []) `mplus` liftM2' (:) p scan+#if __GLASGOW_HASKELL__ >= 700+{-# SPECIALIZE manyTill' :: Parser ByteString a -> Parser ByteString b+                         -> Parser ByteString [a] #-}+#endif++-- | Skip zero or more instances of an action.+skipMany :: Alternative f => f a -> f ()+skipMany p = scan+    where scan = (p *> scan) <|> pure ()+#if __GLASGOW_HASKELL__ >= 700+{-# SPECIALIZE skipMany :: Parser ByteString a -> Parser ByteString () #-}+#endif++-- | Skip one or more instances of an action.+skipMany1 :: Alternative f => f a -> f ()+skipMany1 p = p *> skipMany p+#if __GLASGOW_HASKELL__ >= 700+{-# SPECIALIZE skipMany1 :: Parser ByteString a -> Parser ByteString () #-}+#endif++-- | Apply the given action repeatedly, returning every result.+count :: Monad m => Int -> m a -> m [a]+count n p = sequence (replicate n p)+{-# INLINE count #-}++-- | Combine two alternatives.+eitherP :: (Alternative f) => f a -> f b -> f (Either a b)+eitherP a b = (Left <$> a) <|> (Right <$> b)+{-# INLINE eitherP #-}
+ vendor/attoparsec-0.10.4.0/Data/Attoparsec/Internal.hs view
@@ -0,0 +1,31 @@+-- |+-- Module      :  Data.Attoparsec.Internal+-- Copyright   :  Bryan O'Sullivan 2012+-- License     :  BSD3+--+-- Maintainer  :  bos@serpentine.com+-- Stability   :  experimental+-- Portability :  unknown+--+-- Simple, efficient parser combinators, loosely based on the Parsec+-- library.++module Data.Attoparsec.Internal+    (+      compareResults+    ) where++import Data.Attoparsec.Internal.Types (IResult(..))++-- | Compare two 'IResult' values for equality.+--+-- If both 'IResult's are 'Partial', the result will be 'Nothing', as+-- they are incomplete and hence their equality cannot be known.+-- (This is why there is no 'Eq' instance for 'IResult'.)+compareResults :: (Eq t, Eq r) => IResult t r -> IResult t r -> Maybe Bool+compareResults (Fail i0 ctxs0 msg0) (Fail i1 ctxs1 msg1) =+    Just (i0 == i1 && ctxs0 == ctxs1 && msg0 == msg1)+compareResults (Done i0 r0) (Done i1 r1) =+    Just (i0 == i1 && r0 == r1)+compareResults (Partial _) (Partial _) = Nothing+compareResults _ _ = Just False
+ vendor/attoparsec-0.10.4.0/Data/Attoparsec/Internal/Types.hs view
@@ -0,0 +1,227 @@+{-# LANGUAGE BangPatterns, CPP, GeneralizedNewtypeDeriving, OverloadedStrings,+    Rank2Types, RecordWildCards #-}+-- |+-- Module      :  Data.Attoparsec.Internal.Types+-- Copyright   :  Bryan O'Sullivan 2007-2011+-- License     :  BSD3+--+-- Maintainer  :  bos@serpentine.com+-- Stability   :  experimental+-- Portability :  unknown+--+-- Simple, efficient parser combinators, loosely based on the Parsec+-- library.++module Data.Attoparsec.Internal.Types+    (+      Parser(..)+    , Failure+    , Success+    , IResult(..)+    , Input(..)+    , Added(..)+    , More(..)+    , addS+    , (<>)+    ) where++import Control.Applicative (Alternative(..), Applicative(..), (<$>))+import Control.DeepSeq (NFData(rnf))+import Control.Monad (MonadPlus(..))+import Data.Monoid (Monoid(..))+import Prelude hiding (getChar, take, takeWhile)++-- | The result of a parse.  This is parameterised over the type @t@+-- of string that was processed.+--+-- This type is an instance of 'Functor', where 'fmap' transforms the+-- value in a 'Done' result.+data IResult t r = Fail t [String] String+                 -- ^ The parse failed.  The 't' parameter is the+                 -- input that had not yet been consumed when the+                 -- failure occurred.  The @[@'String'@]@ is a list of+                 -- contexts in which the error occurred.  The+                 -- 'String' is the message describing the error, if+                 -- any.+                 | Partial (t -> IResult t r)+                 -- ^ Supply this continuation with more input so that+                 -- the parser can resume.  To indicate that no more+                 -- input is available, use an empty string.+                 | Done t r+                 -- ^ The parse succeeded.  The 't' parameter is the+                 -- input that had not yet been consumed (if any) when+                 -- the parse succeeded.++instance (Show t, Show r) => Show (IResult t r) where+    show (Fail t stk msg) =+        "Fail " ++ show t ++ " " ++ show stk ++ " " ++ show msg+    show (Partial _)      = "Partial _"+    show (Done t r)       = "Done " ++ show t ++ " " ++ show r++instance (NFData t, NFData r) => NFData (IResult t r) where+    rnf (Fail t stk msg) = rnf t `seq` rnf stk `seq` rnf msg+    rnf (Partial _)  = ()+    rnf (Done t r)   = rnf t `seq` rnf r+    {-# INLINE rnf #-}++fmapR :: (a -> b) -> IResult t a -> IResult t b+fmapR _ (Fail t stk msg) = Fail t stk msg+fmapR f (Partial k)       = Partial (fmapR f . k)+fmapR f (Done t r)       = Done t (f r)++instance Functor (IResult t) where+    fmap = fmapR+    {-# INLINE fmap #-}++newtype Input t = I {unI :: t} deriving (Monoid)+newtype Added t = A {unA :: t} deriving (Monoid)++-- | The core parser type.  This is parameterised over the type @t@ of+-- string being processed.+--+-- This type is an instance of the following classes:+--+-- * 'Monad', where 'fail' throws an exception (i.e. fails) with an+--   error message.+--+-- * 'Functor' and 'Applicative', which follow the usual definitions.+--+-- * 'MonadPlus', where 'mzero' fails (with no error message) and+--   'mplus' executes the right-hand parser if the left-hand one+--   fails.  When the parser on the right executes, the input is reset+--   to the same state as the parser on the left started with. (In+--   other words, Attoparsec is a backtracking parser that supports+--   arbitrary lookahead.)+--+-- * 'Alternative', which follows 'MonadPlus'.+newtype Parser t a = Parser {+      runParser :: forall r. Input t -> Added t -> More+                -> Failure t   r+                -> Success t a r+                -> IResult t r+    }++type Failure t   r = Input t -> Added t -> More -> [String] -> String+                   -> IResult t r+type Success t a r = Input t -> Added t -> More -> a -> IResult t r++-- | Have we read all available input?+data More = Complete | Incomplete+            deriving (Eq, Show)++instance Monoid More where+    mappend c@Complete _ = c+    mappend _ m          = m+    mempty               = Incomplete++addS :: (Monoid t) =>+        Input t -> Added t -> More+     -> Input t -> Added t -> More+     -> (Input t -> Added t -> More -> r) -> r+addS i0 a0 m0 _i1 a1 m1 f =+    let !i = i0 <> I (unA a1)+        a  = a0 <> a1+        !m = m0 <> m1+    in f i a m+{-# INLINE addS #-}++bindP :: Parser t a -> (a -> Parser t b) -> Parser t b+bindP m g =+    Parser $ \i0 a0 m0 kf ks -> runParser m i0 a0 m0 kf $+                                \i1 a1 m1 a -> runParser (g a) i1 a1 m1 kf ks+{-# INLINE bindP #-}++returnP :: a -> Parser t a+returnP a = Parser (\i0 a0 m0 _kf ks -> ks i0 a0 m0 a)+{-# INLINE returnP #-}++instance Monad (Parser t) where+    return = returnP+    (>>=)  = bindP+    fail   = failDesc++noAdds :: (Monoid t) =>+          Input t -> Added t -> More+       -> (Input t -> Added t -> More -> r) -> r+noAdds i0 _a0 m0 f = f i0 mempty m0+{-# INLINE noAdds #-}++plus :: (Monoid t) => Parser t a -> Parser t a -> Parser t a+plus a b = Parser $ \i0 a0 m0 kf ks ->+           let kf' i1 a1 m1 _ _ = addS i0 a0 m0 i1 a1 m1 $+                                  \ i2 a2 m2 -> runParser b i2 a2 m2 kf ks+               ks' i1 a1 m1 = ks i1 (a0 <> a1) m1+           in  noAdds i0 a0 m0 $ \i2 a2 m2 -> runParser a i2 a2 m2 kf' ks'+{-# INLINE plus #-}++instance (Monoid t) => MonadPlus (Parser t) where+    mzero = failDesc "mzero"+    {-# INLINE mzero #-}+    mplus = plus++fmapP :: (a -> b) -> Parser t a -> Parser t b+fmapP p m = Parser $ \i0 a0 m0 f k ->+            runParser m i0 a0 m0 f $ \i1 a1 s1 a -> k i1 a1 s1 (p a)+{-# INLINE fmapP #-}++instance Functor (Parser t) where+    fmap = fmapP+    {-# INLINE fmap #-}++apP :: Parser t (a -> b) -> Parser t a -> Parser t b+apP d e = do+  b <- d+  a <- e+  return (b a)+{-# INLINE apP #-}++instance Applicative (Parser t) where+    pure   = returnP+    {-# INLINE pure #-}+    (<*>)  = apP+    {-# INLINE (<*>) #-}++#if MIN_VERSION_base(4,2,0)+    -- These definitions are equal to the defaults, but this+    -- way the optimizer doesn't have to work so hard to figure+    -- that out.+    (*>)   = (>>)+    {-# INLINE (*>) #-}+    x <* y = x >>= \a -> y >> return a+    {-# INLINE (<*) #-}+#endif++instance (Monoid t) => Monoid (Parser t a) where+    mempty  = failDesc "mempty"+    {-# INLINE mempty #-}+    mappend = plus+    {-# INLINE mappend #-}++instance (Monoid t) => Alternative (Parser t) where+    empty = failDesc "empty"+    {-# INLINE empty #-}++    (<|>) = plus+    {-# INLINE (<|>) #-}++#if MIN_VERSION_base(4,2,0)+    many v = many_v+        where many_v = some_v <|> pure []+              some_v = (:) <$> v <*> many_v+    {-# INLINE many #-}++    some v = some_v+      where+        many_v = some_v <|> pure []+        some_v = (:) <$> v <*> many_v+    {-# INLINE some #-}+#endif++failDesc :: String -> Parser t a+failDesc err = Parser (\i0 a0 m0 kf _ks -> kf i0 a0 m0 [] msg)+    where msg = "Failed reading: " ++ err+{-# INLINE failDesc #-}++(<>) :: (Monoid m) => m -> m -> m+(<>) = mappend+{-# INLINE (<>) #-}
+ vendor/attoparsec-0.10.4.0/Data/Attoparsec/Number.hs view
@@ -0,0 +1,127 @@+{-# LANGUAGE DeriveDataTypeable #-}+-- |+-- Module      :  Data.Attoparsec.Number+-- Copyright   :  Bryan O'Sullivan 2011+-- License     :  BSD3+--+-- Maintainer  :  bos@serpentine.com+-- Stability   :  experimental+-- Portability :  unknown+--+-- A simple number type, useful for parsing both exact and inexact+-- quantities without losing much precision.+module Data.Attoparsec.Number+    (+      Number(..)+    ) where++import Control.DeepSeq (NFData(rnf))+import Data.Data (Data)+import Data.Function (on)+import Data.Typeable (Typeable)++-- | A numeric type that can represent integers accurately, and+-- floating point numbers to the precision of a 'Double'.+data Number = I !Integer+            | D {-# UNPACK #-} !Double+              deriving (Typeable, Data)++instance Show Number where+    show (I a) = show a+    show (D a) = show a++instance NFData Number where+    rnf (I _) = ()+    rnf (D _) = ()+    {-# INLINE rnf #-}++binop :: (Integer -> Integer -> a) -> (Double -> Double -> a)+      -> Number -> Number -> a+binop _ d (D a) (D b) = d a b+binop i _ (I a) (I b) = i a b+binop _ d (D a) (I b) = d a (fromIntegral b)+binop _ d (I a) (D b) = d (fromIntegral a) b+{-# INLINE binop #-}++instance Eq Number where+    (==) = binop (==) (==)+    {-# INLINE (==) #-}++    (/=) = binop (/=) (/=)+    {-# INLINE (/=) #-}++instance Ord Number where+    (<) = binop (<) (<)+    {-# INLINE (<) #-}++    (<=) = binop (<=) (<=)+    {-# INLINE (<=) #-}++    (>) = binop (>) (>)+    {-# INLINE (>) #-}++    (>=) = binop (>=) (>=)+    {-# INLINE (>=) #-}++    compare = binop compare compare+    {-# INLINE compare #-}++instance Num Number where+    (+) = binop (((I$!).) . (+)) (((D$!).) . (+))+    {-# INLINE (+) #-}++    (-) = binop (((I$!).) . (-)) (((D$!).) . (-))+    {-# INLINE (-) #-}++    (*) = binop (((I$!).) . (*)) (((D$!).) . (*))+    {-# INLINE (*) #-}++    abs (I a) = I $! abs a+    abs (D a) = D $! abs a+    {-# INLINE abs #-}++    negate (I a) = I $! negate a+    negate (D a) = D $! negate a+    {-# INLINE negate #-}++    signum (I a) = I $! signum a+    signum (D a) = D $! signum a+    {-# INLINE signum #-}++    fromInteger = (I$!) . fromInteger+    {-# INLINE fromInteger #-}++instance Real Number where+    toRational (I a) = fromIntegral a+    toRational (D a) = toRational a+    {-# INLINE toRational #-}++instance Fractional Number where+    fromRational = (D$!) . fromRational+    {-# INLINE fromRational #-}++    (/) = binop (((D$!).) . (/) `on` fromIntegral)+                (((D$!).) . (/))+    {-# INLINE (/) #-}++    recip (I a) = D $! recip (fromIntegral a)+    recip (D a) = D $! recip a+    {-# INLINE recip #-}++instance RealFrac Number where+    properFraction (I a) = (fromIntegral a,0)+    properFraction (D a) = case properFraction a of+                             (i,d) -> (i,D d)+    {-# INLINE properFraction #-}+    truncate (I a) = fromIntegral a+    truncate (D a) = truncate a+    {-# INLINE truncate #-}+    round (I a) = fromIntegral a+    round (D a) = round a+    {-# INLINE round #-}+    ceiling (I a) = fromIntegral a+    ceiling (D a) = ceiling a+    {-# INLINE ceiling #-}+    floor (I a) = fromIntegral a+    floor (D a) = floor a+    {-# INLINE floor #-}