packages feed

unicode-data-0.9.0: lib/Unicode/Internal/Char/UnicodeData/GeneralCategory.hs

-- autogenerated from https://www.unicode.org/Public/18.0.0/ucd/UnicodeData.txt
-- |
-- Module      : Unicode.Internal.Char.UnicodeData.GeneralCategory
-- Copyright   : (c) 2020 Composewell Technologies and Contributors
-- License     : Apache-2.0
-- Maintainer  : streamly@composewell.com
-- Stability   : experimental

{-# OPTIONS_HADDOCK hide #-}
{-# LANGUAGE PatternSynonyms #-}

module Unicode.Internal.Char.UnicodeData.GeneralCategory
( -- * Lookup functions
  generalCategory
, generalCategoryPlanes0To3

  -- * General categories
, pattern UppercaseLetter
, pattern LowercaseLetter
, pattern TitlecaseLetter
, pattern ModifierLetter
, pattern OtherLetter
, pattern NonSpacingMark
, pattern SpacingCombiningMark
, pattern EnclosingMark
, pattern DecimalNumber
, pattern LetterNumber
, pattern OtherNumber
, pattern ConnectorPunctuation
, pattern DashPunctuation
, pattern OpenPunctuation
, pattern ClosePunctuation
, pattern InitialQuote
, pattern FinalQuote
, pattern OtherPunctuation
, pattern MathSymbol
, pattern CurrencySymbol
, pattern ModifierSymbol
, pattern OtherSymbol
, pattern Space
, pattern LineSeparator
, pattern ParagraphSeparator
, pattern Control
, pattern Format
, pattern Surrogate
, pattern PrivateUse
, pattern NotAssigned

  -- * Characters bounds for predicates
, pattern MaxIsLetter
, pattern MaxIsAlphaNum
, pattern MaxIsLower
, pattern MaxIsUpper
, pattern MaxIsNumber
, pattern MaxIsSpace
, pattern MaxIsSeparator
) where

import Data.Bits (Bits(..))
import Data.Char (ord)
import Data.Int (Int8)
import Data.Word (Word16)
import GHC.Exts (Ptr(..))
import Unicode.Internal.Bits (lookupWord16AsInt, lookupWord8AsInt)

--------------------------------------------------------------------------------
-- General category patterns
--------------------------------------------------------------------------------

-- | General category Lu
pattern UppercaseLetter :: Int
pattern UppercaseLetter = 0

-- | General category Ll
pattern LowercaseLetter :: Int
pattern LowercaseLetter = 1

-- | General category Lt
pattern TitlecaseLetter :: Int
pattern TitlecaseLetter = 2

-- | General category Lm
pattern ModifierLetter :: Int
pattern ModifierLetter = 3

-- | General category Lo
pattern OtherLetter :: Int
pattern OtherLetter = 4

-- | General category Mn
pattern NonSpacingMark :: Int
pattern NonSpacingMark = 5

-- | General category Mc
pattern SpacingCombiningMark :: Int
pattern SpacingCombiningMark = 6

-- | General category Me
pattern EnclosingMark :: Int
pattern EnclosingMark = 7

-- | General category Nd
pattern DecimalNumber :: Int
pattern DecimalNumber = 8

-- | General category Nl
pattern LetterNumber :: Int
pattern LetterNumber = 9

-- | General category No
pattern OtherNumber :: Int
pattern OtherNumber = 10

-- | General category Pc
pattern ConnectorPunctuation :: Int
pattern ConnectorPunctuation = 11

-- | General category Pd
pattern DashPunctuation :: Int
pattern DashPunctuation = 12

-- | General category Ps
pattern OpenPunctuation :: Int
pattern OpenPunctuation = 13

-- | General category Pe
pattern ClosePunctuation :: Int
pattern ClosePunctuation = 14

-- | General category Pi
pattern InitialQuote :: Int
pattern InitialQuote = 15

-- | General category Pf
pattern FinalQuote :: Int
pattern FinalQuote = 16

-- | General category Po
pattern OtherPunctuation :: Int
pattern OtherPunctuation = 17

-- | General category Sm
pattern MathSymbol :: Int
pattern MathSymbol = 18

-- | General category Sc
pattern CurrencySymbol :: Int
pattern CurrencySymbol = 19

-- | General category Sk
pattern ModifierSymbol :: Int
pattern ModifierSymbol = 20

-- | General category So
pattern OtherSymbol :: Int
pattern OtherSymbol = 21

-- | General category Zs
pattern Space :: Int
pattern Space = 22

-- | General category Zl
pattern LineSeparator :: Int
pattern LineSeparator = 23

-- | General category Zp
pattern ParagraphSeparator :: Int
pattern ParagraphSeparator = 24

-- | General category Cc
pattern Control :: Int
pattern Control = 25

-- | General category Cf
pattern Format :: Int
pattern Format = 26

-- | General category Cs
pattern Surrogate :: Int
pattern Surrogate = 27

-- | General category Co
pattern PrivateUse :: Int
pattern PrivateUse = 28

-- | General category Cn
pattern NotAssigned :: Int
pattern NotAssigned = 29

--------------------------------------------------------------------------------
-- Characters bounds for predicates
--------------------------------------------------------------------------------

-- | Maximum codepoint satisfying @isLetter@
pattern MaxIsLetter :: Int
pattern MaxIsLetter = 0x3FC3F

-- | Maximum codepoint satisfying @isAlphaNum@
pattern MaxIsAlphaNum :: Int
pattern MaxIsAlphaNum = 0x3FC3F

-- | Maximum codepoint satisfying @isLower@
pattern MaxIsLower :: Int
pattern MaxIsLower = 0x1E943

-- | Maximum codepoint satisfying @isUpper@
pattern MaxIsUpper :: Int
pattern MaxIsUpper = 0x1E921

-- | Maximum codepoint satisfying @isNumber@
pattern MaxIsNumber :: Int
pattern MaxIsNumber = 0x1FBF9

-- | Maximum codepoint satisfying @isSpace@
pattern MaxIsSpace :: Int
pattern MaxIsSpace = 0x3000

-- | Maximum codepoint satisfying @isSeparator@
pattern MaxIsSeparator :: Int
pattern MaxIsSeparator = 0x3000

--------------------------------------------------------------------------------
-- Lookup functions
--------------------------------------------------------------------------------

-- | Return the general category of a code point in planes 0 to 3
--
-- The caller of this function must ensure its parameter is \< @0x40000@.
{-# INLINE generalCategoryPlanes0To3 #-}
generalCategoryPlanes0To3 :: Int -> Int
generalCategoryPlanes0To3 = lookupGeneralCategoryBitMap

-- | Return the general category of a character
{-# INLINE generalCategory #-}
generalCategory :: Char -> Int
generalCategory c
    -- Planes 0-3
    | cp < 0x3FC40 = lookupGeneralCategoryBitMap cp
    -- Planes 4-13: Cn
    | cp < 0xE0000 = NotAssigned
    -- Plane 14
    | cp < 0xE01F0 = lookupGeneralCategoryBitMap (cp - 0xA03C0)
    -- Plane 14: Cn
    | cp < 0xF0000 = NotAssigned
    -- Plane 15: Co
    | cp < 0xFFFFE = PrivateUse
    -- Plane 15: Cn
    | cp < 0x100000 = NotAssigned
    -- Plane 16: Co
    | cp < 0x10FFFE = PrivateUse
    -- Default: Cn
    | otherwise = NotAssigned
    where
    cp = ord c

{-# INLINE lookupGeneralCategoryBitMap #-}
lookupGeneralCategoryBitMap :: Int -> Int
lookupGeneralCategoryBitMap n =
    lookupWord8AsInt data# (
        lookupWord16AsInt offsets1# (
            lookupWord16AsInt offsets2# (
                n `shiftR` 8
            ) + ((n `shiftR` 3) .&. maskOffsets)
        ) + (n .&. maskData)
    )
    where
    maskData = (1 `shiftL` 3) - 1
    maskOffsets = (1 `shiftL` 5) - 1
    !(Ptr data#) = generalCategoryDataBitMap
    !(Ptr offsets1#) = generalCategoryOffsets1BitMap
    !(Ptr offsets2#) = generalCategoryOffsets2BitMap

generalCategoryDataBitMap :: Ptr Int8
generalCategoryDataBitMap = Ptr
    "\2\2\2\2\2\2\2\2\1\0\2\1\0\1\0\1\1\0\1\1\1\1\0\0\29\0\29\0\29\0\29\0\0\0\1\21\0\21\21\1\0\0\0\1\1\4\0\1\1\1\
    \\0\0\1\0\0\1\0\0\0\1\1\0\0\0\1\1\1\13\18\14\18\13\14\17\17\17\17\17\3\3\1\4\4\4\4\4\17\4\5\5\5\29\5\5\29\5\5\5\5\29\
    \\29\29\29\5\4\29\4\4\4\4\29\4\4\29\4\4\4\4\4\4\4\4\29\4\4\4\4\29\29\29\29\4\4\29\4\29\4\4\29\4\4\29\4\29\29\4\5\5\5\5\
    \\5\5\5\3\5\5\5\5\5\29\29\5\5\5\29\29\4\4\4\3\4\4\29\29\29\29\29\17\17\17\17\29\29\29\0\1\0\1\3\3\5\5\21\21\21\21\21\21\21\5\
    \\21\21\17\19\29\29\29\29\29\29\8\8\4\4\4\4\3\4\4\4\4\4\5\3\4\4\4\29\29\29\29\5\6\5\5\6\5\5\29\6\6\5\6\5\5\5\5\5\29\5\
    \\6\4\5\5\5\5\17\26\17\17\17\4\17\4\4\5\6\5\4\6\6\6\6\6\6\5\6\29\6\6\5\29\29\3\1\1\1\17\0\0\0\0\0\0\0\0\18\1\1\1\
    \\1\1\1\29\1\1\1\1\1\4\4\1\1\21\18\21\21\1\21\19\21\29\29\29\29\29\29\20\1\1\1\1\1\1\1\1\18\1\1\1\1\3\3\0\0\0\0\2\20\1\
    \\20\21\4\15\18\26\21\20\10\4\16\10\10\10\17\19\17\17\29\29\29\29\8\8\17\17\29\17\5\4\1\21\21\1\1\0\0\1\1\0\0\0\1\0\1\0\1\0\1\0\
    \\0\0\0\1\4\4\4\17\17\29\29\29\29\29\5\29\29\29\29\6\29\29\6\6\5\29\29\1\1\0\1\0\1\0\1\0\1\1\1\0\1\29\29\8\8\17\17\29\29\29\
    \\29\5\29\5\5\29\5\5\20\20\3\3\4\4\4\4\4\4\21\18\18\18\18\21\21\29\0\0\0\0\0\29\0\29\0\0\0\0\29\0\0\0\0\29\29\0\0\0\0\0\
    \\0\0\29\0\0\0\0\0\0\29\29\29\29\29\29\8\8\29\29\29\29\29\29\0\29\29\0\0\29\5\5\5\5\3\3\21\17\10\10\10\10\10\10\10\10\4\5\5\5\29\
    \\29\17\29\18\17\17\19\17\17\21\21\4\6\5\6\4\4\4\17\3\3\3\4\4\4\4\4\5\5\6\5\17\17\17\17\17\17\5\4\4\4\4\4\5\5\5\5\17\17\17\
    \\3\4\4\4\4\4\4\4\3\5\5\5\5\5\5\5\6\5\5\5\4\4\4\4\5\4\4\6\6\6\6\6\29\6\6\5\6\4\4\4\4\4\6\5\6\6\29\29\29\6\
    \\6\6\6\6\5\4\6\29\6\6\6\5\29\29\12\12\12\12\12\12\17\17\12\12\11\11\13\14\13\14\18\18\18\18\18\18\18\18\13\14\18\18\18\18\21\21\21\21\0\21\
    \\21\21\21\0\12\13\14\13\14\13\14\17\29\29\29\29\29\29\29\3\3\3\3\0\1\4\4\5\5\5\6\29\29\5\5\6\5\4\17\4\6\29\29\29\23\24\26\26\26\26\
    \\26\22\17\19\19\19\19\21\17\17\29\29\29\29\29\29\29\5\5\29\29\29\29\29\0\29\29\29\29\29\1\29\29\0\0\1\0\1\0\1\1\1\1\1\1\1\0\1\18\0\
    \\0\0\0\0\21\21\10\10\10\10\21\21\10\10\21\21\21\29\21\21\21\29\29\29\0\1\0\1\0\1\4\5\4\29\29\29\29\29\29\1\1\1\1\1\3\3\3\3\3\3\
    \\3\3\20\20\20\20\20\20\20\20\3\20\3\20\20\0\1\0\1\4\4\5\5\6\17\17\29\5\5\5\5\5\5\4\5\5\5\4\4\5\5\17\17\8\8\29\29\4\4\4\
    \\4\6\6\6\6\6\6\6\6\26\26\26\26\26\29\29\29\29\29\5\5\5\5\5\5\5\12\5\5\5\5\5\4\29\29\6\17\17\17\17\17\17\17\17\29\26\5\21\5\5\
    \\5\5\4\4\4\4\5\5\5\5\17\17\17\4\29\29\29\4\29\29\4\4\4\4\4\4\29\29\29\29\29\29\29\29\6\6\29\29\6\6\5\4\29\5\5\29\29\29\29\1\
    \\1\29\1\29\1\1\1\17\3\1\1\1\20\3\3\3\3\1\1\1\1\1\1\1\29\29\1\1\1\29\1\1\29\29\29\4\4\4\4\4\29\29\26\26\26\26\26\26\18\18\
    \\18\18\18\21\21\18\21\21\18\21\18\21\21\21\21\21\21\21\18\21\21\21\5\5\5\5\5\26\21\5\6\6\6\29\29\29\29\15\16\13\15\15\16\13\15\16\13\14\13\14\
    \\13\14\13\14\13\14\10\10\10\10\10\10\8\8\10\29\29\29\21\21\5\5\5\5\5\5\5\29\8\8\4\4\4\4\4\4\3\3\17\17\17\17\17\17\21\21\21\21\21\21\
    \\21\21\29\29\29\29\29\29\29\17\17\17\17\17\17\17\3\29\29\5\19\19\18\20\21\19\19\29\1\0\1\1\0\1\0\0\0\0\0\1\0\1\3\20\0\1\17\12\3\3\
    \\21\21\19\10\10\10\10\29\29\29\18\18\18\18\18\21\21\21\4\4\4\4\4\4\14\13\14\13\14\17\17\13\14\29\29\29\29\3\3\3\3\29\3\3\29\3\3\3\3\3\
    \\3\29\3\3\3\3\3\3\17\17\17\17\17\17\29\3\3\3\3\17\21\29\29\1\18\1\1\1\1\1\1\0\0\0\0\0\0\0\1\1\1\1\1\1\29\29\29\29\29\4\
    \\4\4\6\6\5\5\6\6\5\5\4\4\4\5\17\29\4\5\4\4\5\5\5\5\4\4\4\4\4\4\5\6\5\5\5\5\5\5\5\5\21\21\21\21\0\21\0\21\0\0\
    \\0\0\21\1\0\1\29\29\29\29\29\4\4\5\5\29\29\29\29\4\29\4\29\4\29\4\4\4\4\29\4\29\4\29\29\29\29\20\20\0\17\14\17\13\14\17\17\4\4\4\
    \\5\17\17\4\29\4\29\29\29\4\4\29\29\29\29\6\6\17\29\29\29\12\4\4\4\4\4\4\4\21\17\4\4\4\4\3\17\17\17\22\4\4\4\4\4\4\4\21\17\4\
    \\4\4\4\5\6\29\29\4\5\6\6\29\4\4\4\29\4\4\29\29\5\4\5\5\5\5\5\5\6\6\5\6\5\5\5\6\5\6\6\6\6\5\5\5\5\5\6\6\6\6\
    \\5\6\6\6\6\6\29\5\6\6\29\4\4\4\29\4\4\4\29\29\5\5\5\5\5\12\3\3\3\3\3\21\21\22\22\22\22\22\22\22\22\26\26\26\26\26\26\26\26\29\
    \\26\26\26\21\21\29\29\29\17\17\8\8\4\4\29\29\29\29\8\8\29\29\29\29\29\19\19\19\19\19\19\19\19\29\29\29\4\5\5\5\5\5\5\29\21\21\18\18\21\21\
    \\21\21\21\21\18\18\18\18\18\18\13\14\13\14\13\14\12\29\29\0\0\0\0\29\20\20\20\0\1\0\1\0\1\0\0\1\0\1\0\0\29\29\5\6\6\6\5\4\4\4\
    \\6\5\5\6\6\6\6\29\5\5\6\29\4\4\4\5\4\4\5\4\4\4\5\4\4\4\4\4\4\4\5\5\5\5\5\5\5\17\3\3\3\3\3\3\29\29\4\18\4\4\
    \\4\4\4\4\29\4\29\29\4\29\29\29\29\4\4\4\4\4\29\3\29\4\4\4\4\4\29\29\10\21\4\4\4\4\4\4\4\10\10\10\10\29\29\29\17\8\8\10\10\17\
    \\17\17\21\4\4\4\4\4\4\4\5\5\29\29\8\8\29\29\17\17\17\17\17\17\17\13\12\17\13\17\17\17\17\17\17\17\5\29\29\29\29\29\26\29\29\29\29\29\29\29\
    \\21\21\21\21\21\21\5\29\29\29\19\21\21\21\21\21\21\21\19\19\19\8\8\4\4\4\4\4\29\29\4\29\29\29\29\29\29\6\5\5\17\29\29\29\29\8\8\6\6\6\
    \\5\21\21\21\21\21\21\21\6\6\5\5\5\6\5\4\4\5\5\4\29\29\29\29\29\22\17\17\17\19\17\17\17\5\5\5\26\5\5\5\5\5\21\21\5\5\5\5\21\21\
    \\21\6\6\6\6\6\6\4\4\4\4\17\17\17\9\9\9\9\9\29\29\5\5\6\6\29\29\29\29\4\4\6\29\29\29\29\4\4\4\29\29\29\4\4\3\17\17\4\3\3\
    \\6\5\29\8\8\10\10\10\10\10\10\21\5\21\5\10\10\10\10\17\17\17\20\4\4\4\4\4\4\4\3\4\4\4\4\4\5\5\4\6\6\6\4\4\6\6\3\3\9\9\
    \\9\29\8\8\29\29\29\29\4\21\18\10\10\20\1\17\17\18\17\11\17\17\17\18\13\14\17\18\17\12\17\17\17\29\17\17\17\17\4\6\6\4\6\5\17\17\17\29\21\13\
    \\14\21\21\21\21\21\10\10\10\10\10\10\21\21\21\21\21\21\21\29\21\21\21\21\21\21\21\17\17\17\13\14\13\14\21\21\21\21\20\20\20\20\20\13\14\21\21\13\14\13\
    \\14\12\13\14\14\17\17\17\17\11\11\11\4\4\29\29\5\4\6\5\5\5\5\6\6\4\4\4\4\4\4\17\17\17\17\17\29\29\29\29\10\10\4\4\29\29\5\4\6\6\
    \\6\6\5\5\29\29\8\8\4\4\4\21\21\4\4\4\4\4\4\19\21\21\21\5\10\10\10\10\10\10\10\29\29\29\29\29\29\29\4\3\4\5\6\6\17\4\4\4\5\6\
    \\5\6\6\5\5\5\29\29\29\29\29\29\29\10\10\10\10\10\10\10\21\10\10\10\10\10\10\10\17\22\17\17\17\21\3\4\9\4\4\4\4\4\4\4\6\6\29\29\5\5\
    \\6\6\6\6\29\29\6\6\6\29\29\29\29\29\29\18\18\18\18\18\0\1\1\5\5\4\6\4\4\4\4\6\6\5\5\5\29\5\29\29\29\29\29\29\0\0\0\0\0\0\
    \\0\0\13\17\14\20\11\0\0\0\0\0\29\1\1\1\1\1\1\1\1\13\18\14\18\25\25\25\25\25\25\25\25\5\5\6\6\6\5\6\5\5\6\6\5\5\29\6\29\29\
    \\6\29\6\6\5\5\29\29\29\29\5\5\5\5\6\4\4\4\4\0\2\1\0\2\1\0\1\0\0\0\0\0\20\20\20\4\4\29\29\5\29\6\6\6\6\6\6\29\6\6\
    \\6\5\4\21\21\21\17\17\17\17\21\17\21\21\21\22\4\4\4\4\4\4\4\13\14\29\29\29\8\8\29\29\29\4\4\4\6\6\5\6\6\4\4\4\4\4\29\17\17\17\
    \\17\10\17\17\18\12\18\18\18\29\29\29\29\29\29\29\5\6\6\5\29\29\17\17\18\17\11\17\17\17\17\17\17\17\22\5\5\5\5\5\5\7\5\7\7\7\5\5\5\5\
    \\5\7\7\7\17\5\5\5\5\17\6\5\5\5\5\29\29\6\21\9\9\9\9\9\9\9\9\0\1\9\9\9\3\4\17\21\21\7\7\0\1\0\1\0\1\1\21\21\21\0\
    \\1\0\1\5\5\17\17\17\4\17\17\4\4\9\29\29\29\29\29\6\5\5\5\5\5\5\17\17\17\17\17\17\17\12\17\15\16\17\17\17\17\11\4\4\20\20\20\20\20\20\
    \\21\21\21\21\21\29\29\21\21\21\21\29\29\29\21\21\21\21\9\9\9\9\9\10\10\10\10\29\29\29\21\5\5\4\6\4\4\4\4\5\5\6\6\17\6\5\29\29\5\5\
    \\5\5\5\3\3\5\8\8\17\17\17\17\17\17\9\9\9\9\9\9\9\29\9\9\5\5\5\5\6\6\6\5\5\5\5\5\5\29\29\29\29\19\5\5\6\6\29\4\4\4\
    \\5\6\6\5\5\6\4\4\4\4\4\6\6\6\5\5\5\5\6\6\5\5\6\6\6\5\5\5\5\5\17\29\29\26\26\26\5\5\5\5\5\21\21\5\5\5\21\29\29\4\
    \\4\29\5\5\4\6\6\6\6\5\5\6\5\5\5\5\29\6\6\6\21\21\21\21\21\5\5\21\21\6\0\1\21\5\5\5\5\5\21\21\21\21\21\5\21\21\4\8\8\8\
    \\8\8\8\8\29\29\29\29\17\17\17\19\17\17\17\19\4\5\29\29\29\29\29\29\1\3\20\20\0\0\29\29\1\1\1\1\1\5\5\5\5\3\29\29\29\29\29\4\5\4\
    \\5\4\17\17\29\17\8\8\8\8\8\8\8\8\17\17\18\18\18\17\3\3\20\20\20\20\3\3\20\20\20\20\20\20\4\4\19\19\10\10\10\10\21\19\4\17\5\29\21\4\
    \\10\10\10\10\10\10\21\5\21\5\13\14\13\14\6\6\5\5\5\5\29\29\0\0\0\0\2\20\20\20\1\1\1\29\1\1\10\3\29\29\10\10\10\10\18\18\18\13\14\3\
    \\4\4\4\4\4\4\29\17\15\16\17\15\16\17\17\15\16\15\16\17\17\4\29\29\29\29\29\4\4\4\4\4\10\10\17\15\16\17\15\16\17\17\17\17\17\17\17\12\12\17\
    \\17\17\17\17\17\29\29\29\29\29\4\4\4\29\29\5\6\5\5\17\17\26\17\17\5\29\29\29\29\29\8\8\17\17\17\17\4\4\4\4\4\4\6\6\5\5\5\29\29\29\
    \\6\6\5\5\5\5\6\5\5\4\4\17\4\4\29\5\5\12\29\29\8\8\29\10\10\10\10\10\29\4\4\4\4\4\4\9\9\4\17\29\29\29\29\29\29\20\20\5\5\5\
    \\5\5\17\5\5\5\5\3\3\3\3\3\17\3\5\29\29\29\0\1\1\1\1\1\1\1\4\1\1\1\1\1\0\29\0\0\0\0\2\20\20\29\8\8\17\17\18\18\18\17\
    \\0\0\0\0\0\0\0\29\0\0\29\1\8\8\4\17\4\17\17\17\5\5\17\5\5\17\5\5\5\5\5\5\12\5\9\9\9\0\1\9\9\9\10\21\21\29\29\29\29\21\
    \\21\21\0\1\0\1\5\5\0\1\29\29\29\29\27\27\27\27\27\27\27\27\28\28\28\28\28\28\28\28\8\8\5\29\29\29\29\29\4\4\29\29\21\5\5\17\8\8\21\21\
    \\21\29\29\29\18\18\18\18\18\18\29\29\18\18\18\18\18\29\29\29\4\4\4\4\4\4\5\29\4\4\4\4\4\5\29\29\8\8\21\29\29\29\29\29"#

generalCategoryOffsets1BitMap :: Ptr Word16
generalCategoryOffsets1BitMap = Ptr
    "\14\5\114\0\114\0\114\0\114\0\114\0\113\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\115\0\36\3\120\4\114\0\114\0\114\0\114\0\120\4\120\4\120\4\120\4\122\4\1\7\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\121\0\115\0\121\0\114\0\114\0\114\0\114\0\114\0\121\0\114\0\114\0\
    \\114\0\114\0\121\0\115\0\121\0\114\0\115\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\204\3\208\3\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\99\10\215\9\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\
    \\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\206\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\114\0\114\0\114\0\203\3\114\0\114\0\114\0\114\0\114\0\114\0\207\3\208\3\125\8\25\2\25\2\129\8\114\0\114\0\114\0\114\0\114\0\114\0\114\0\
    \\114\0\204\3\208\3\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\215\9\104\10\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\
    \\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\223\4\213\4\114\0\114\0\114\0\115\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\208\3\208\3\208\3\208\3\114\0\114\0\183\7\114\0\
    \\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\
    \\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\40\11\174\12\114\0\118\0\114\0\114\0\115\0\114\0\114\0\107\0\114\0\202\3\114\0\202\3\208\3\208\3\208\3\208\3\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\205\3\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\
    \\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\202\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\
    \\208\3\208\3\208\3\114\0\114\0\76\10\199\2\114\0\114\0\114\0\115\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\202\3\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\
    \\114\0\114\0\114\0\206\3\208\3\208\3\208\3\208\3\114\0\114\0\114\0\114\0\114\0\114\0\5\6\5\6\43\5\52\5\121\10\208\3\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\
    \\114\0\205\3\208\3\208\3\208\3\133\8\120\4\120\4\120\4\121\4\25\2\12\8\120\4\120\4\120\4\25\2\172\8\25\2\120\4\120\4\120\4\120\4\25\2\12\8\120\4\120\4\120\4\120\4\172\8\25\2\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\37\4\120\4\120\4\120\4\120\4\120\4\120\4\
    \\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\37\4\120\4\35\4\120\4\120\4\120\4\120\4\120\4\120\4\168\2\184\2\37\0\31\0\30\3\60\5\66\5\143\1\123\1\217\8\55\1\25\2\25\2\215\9\215\9\215\9\215\9\220\9\119\12\186\4\58\6\28\4\38\4\120\4\120\4\
    \\120\4\62\6\32\4\120\4\120\4\120\4\64\6\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\190\12\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\
    \\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\150\1\208\3\143\6\41\5\114\0\114\0\114\0\114\0\141\6\249\0\243\6\208\3\191\5\104\2\114\0\114\0\
    \\114\0\114\0\114\0\142\6\97\2\249\9\186\11\208\3\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\207\3\36\7\208\3\208\3\208\3\33\7\208\3\173\6\207\3\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\
    \\114\0\114\0\114\0\114\0\114\0\114\0\114\0\204\3\208\3\114\0\114\0\115\0\174\6\114\0\114\0\114\0\114\0\114\0\204\3\114\0\114\0\114\0\114\0\114\0\203\3\146\0\152\6\40\11\210\7\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\
    \\208\3\114\0\114\0\114\0\198\12\208\3\208\3\114\0\114\0\114\0\114\0\114\0\140\6\40\11\32\6\114\0\114\0\183\7\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\203\3\120\4\120\4\
    \\120\4\120\4\120\4\120\4\121\4\208\3\114\0\114\0\114\0\114\0\114\0\228\4\32\1\32\1\32\1\32\1\6\5\72\1\72\1\72\1\17\11\22\11\40\11\242\10\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\164\8\25\2\25\2\25\2\25\2\25\2\
    \\25\2\168\8\178\4\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\114\0\114\0\114\0\114\0\114\0\189\8\98\11\195\10\15\10\168\3\168\3\220\6\208\3\208\3\208\3\208\3\164\8\25\2\25\2\25\2\25\2\166\8\25\2\127\8\208\3\208\3\208\3\208\3\208\3\208\3\208\3\
    \\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\164\8\25\2\25\2\25\2\25\2\25\2\25\2\168\8\178\4\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\
    \\208\3\208\3\114\0\114\0\114\0\93\2\40\11\3\2\141\5\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\144\5\114\0\114\0\159\5\114\0\114\0\116\9\114\0\114\0\114\0\
    \\114\0\114\0\114\0\114\0\114\0\114\0\116\7\188\8\207\3\114\0\114\0\114\0\115\0\213\5\55\4\218\5\154\8\18\6\40\11\114\0\114\0\114\0\202\3\203\3\208\3\114\0\114\0\114\0\114\0\114\0\204\3\114\0\114\0\114\0\206\3\40\11\88\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\
    \\37\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\74\4\76\4\25\2\25\2\25\2\10\8\120\4\120\4\120\4\120\4\120\4\171\2\168\2\168\2\168\2\170\2\74\4\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\
    \\168\2\168\2\71\6\73\4\73\4\167\2\168\2\168\2\168\2\168\2\168\2\168\2\168\2\164\2\168\2\168\2\168\2\172\2\120\4\120\4\120\4\120\4\120\4\120\4\168\2\168\2\24\4\186\4\120\4\120\4\120\4\120\4\41\10\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\
    \\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\74\4\76\4\25\2\25\2\25\2\10\8\120\4\120\4\120\4\120\4\120\4\171\2\168\2\168\2\168\2\170\2\74\4\168\2\168\2\18\0\234\1\241\1\3\9\72\1\72\1\72\1\230\1\220\1\237\1\7\9\72\1\72\1\253\4\32\1\32\1\
    \\2\5\72\1\72\1\72\1\32\1\32\1\32\1\6\5\72\1\72\1\253\4\32\1\32\1\2\5\72\1\72\1\72\1\32\1\32\1\32\1\6\5\72\1\72\1\249\3\32\1\32\1\32\1\39\1\72\1\72\1\77\1\255\4\32\1\32\1\37\1\114\0\114\0\114\0\114\0\140\6\208\3\40\11\3\2\40\11\210\0\32\1\32\1\247\1\239\5\72\1\
    \\72\1\250\3\211\8\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\25\2\25\2\25\2\126\8\114\0\114\0\114\0\114\0\114\0\246\11\206\3\208\3\164\0\22\12\119\4\193\6\114\0\115\0\52\5\52\5\232\6\198\2\52\5\52\5\159\2\73\4\200\4\56\8\238\7\192\2\148\9\108\1\117\0\
    \\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\11\4\120\4\120\4\120\4\120\4\192\0\191\0\120\4\120\4\120\4\120\4\120\4\120\4\61\7\104\7\138\3\173\10\97\7\56\5\120\4\120\4\120\4\100\7\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\
    \\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\122\4\208\3\208\3\208\3\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\124\4\6\7\120\4\120\4\48\3\
    \\212\8\120\4\120\4\168\2\182\12\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\202\3\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\
    \\114\0\114\0\114\0\114\0\114\0\207\3\208\3\114\0\114\0\138\6\151\0\149\0\153\0\168\3\169\3\114\0\114\0\114\0\33\2\114\0\205\3\114\0\114\0\114\0\180\7\144\3\52\5\114\0\114\0\114\0\114\0\114\0\95\2\52\5\52\5\92\7\52\5\52\5\52\5\52\5\52\5\121\10\52\5\52\5\96\4\208\3\120\4\120\4\120\4\120\4\
    \\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\124\4\208\3\208\3\208\3\208\3\208\3\208\3\208\3\114\0\114\0\114\0\114\0\114\0\114\0\144\6\116\4\241\4\208\3\40\11\254\11\4\12\114\0\114\0\14\5\114\0\114\0\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\
    \\57\2\114\0\114\0\114\0\114\0\109\4\40\11\3\2\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\114\0\114\0\114\0\138\6\236\10\241\10\114\0\114\0\114\0\114\0\114\0\114\0\115\0\208\3\114\0\114\0\
    \\202\3\208\3\114\0\208\3\208\3\208\3\221\4\76\3\76\3\76\3\76\3\76\3\219\4\76\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\57\2\114\0\114\0\114\0\114\0\109\4\40\11\3\2\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\32\1\32\1\32\1\32\1\
    \\72\1\72\1\72\1\72\1\25\2\25\2\173\8\186\11\32\1\32\1\32\1\13\11\72\1\72\1\10\5\208\3\208\3\208\3\208\3\208\3\120\4\120\4\120\4\120\4\192\0\191\0\120\4\120\4\120\4\120\4\120\4\120\4\61\7\104\7\138\3\173\10\97\7\56\5\120\4\120\4\120\4\100\7\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\
    \\120\4\120\4\181\10\208\3\207\10\212\10\120\4\120\4\120\4\120\4\209\8\208\3\208\3\208\3\208\3\208\3\208\3\208\3\25\2\25\2\129\8\208\3\25\2\25\2\129\8\208\3\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\255\6\208\3\208\3\208\3\5\6\5\6\5\6\5\6\5\6\5\6\5\6\5\6\5\6\5\6\5\6\5\6\
    \\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\164\4\25\1\103\5\222\1\0\5\32\1\244\1\4\5\72\1\72\1\72\1\21\3\59\0\135\1\135\1\135\1\24\3\128\1\
    \\32\1\32\1\32\1\32\1\32\1\32\1\72\1\72\1\72\1\72\1\72\1\72\1\135\1\135\1\135\1\135\1\220\10\233\9\135\1\135\1\135\1\135\1\135\1\135\1\134\1\174\1\135\1\135\1\135\1\135\1\135\1\135\1\238\1\32\1\32\1\32\1\239\1\112\4\72\1\72\1\72\1\72\1\72\1\171\4\150\3\52\5\52\5\52\5\52\5\152\3\
    \\97\12\156\8\114\0\114\0\114\0\124\0\148\1\208\3\114\0\114\0\114\0\114\0\114\0\114\0\202\3\134\4\114\0\114\0\202\3\25\2\114\0\114\0\205\3\25\2\114\0\114\0\206\3\176\0\208\3\164\8\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\
    \\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\53\5\45\4\52\5\52\5\52\5\52\5\52\5\55\5\194\0\120\4\195\0\84\8\208\3\148\3\150\3\52\5\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\
    \\208\3\208\3\208\3\208\3\114\0\114\0\114\0\115\0\126\6\138\6\206\12\134\8\249\3\208\3\68\3\26\11\114\0\160\6\115\0\163\6\108\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\32\10\84\3\37\10\120\4\191\4\114\0\114\0\114\0\114\0\114\0\114\0\114\0\194\4\120\4\120\4\114\0\
    \\114\0\114\0\114\0\114\0\114\0\114\0\114\0\192\4\114\0\114\0\114\0\114\0\114\0\114\0\120\4\208\3\208\3\208\3\208\3\114\0\117\8\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\185\6\25\2\96\4\208\3\208\3\
    \\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\115\0\106\0\114\0\115\0\198\3\106\0\114\0\114\0\114\0\87\9\218\2\248\7\208\3\40\11\3\2\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\114\0\
    \\200\3\114\0\114\0\114\0\114\0\150\10\198\8\224\2\208\3\208\3\208\3\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\124\4\120\4\124\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\208\3\120\4\
    \\126\4\120\4\120\4\120\4\120\4\120\4\208\3\120\4\120\4\120\4\122\4\120\4\124\4\126\4\208\3\168\2\154\9\208\3\208\3\208\3\208\3\120\4\32\8\120\4\120\4\60\6\0\8\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\40\4\120\4\120\4\120\4\65\6\168\2\168\2\178\2\120\4\120\4\120\4\120\4\64\6\60\6\
    \\120\4\120\4\120\4\120\4\120\4\126\4\208\3\208\3\120\4\125\4\208\3\208\3\25\2\25\2\25\2\25\2\25\2\25\2\25\2\10\8\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\6\8\25\2\25\2\114\0\114\0\195\6\201\6\114\0\114\0\114\0\170\0\114\0\114\0\114\0\206\3\208\3\208\3\208\3\208\3\114\0\114\0\
    \\114\0\114\0\114\0\114\0\114\0\88\8\25\2\25\2\163\8\25\2\25\2\25\2\25\2\25\2\9\8\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\121\4\208\3\208\3\208\3\208\3\208\3\208\3\2\7\120\4\120\4\120\4\120\4\120\4\124\4\120\4\120\4\
    \\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\124\4\208\3\120\4\121\4\21\8\120\4\21\8\120\4\21\8\120\4\120\4\120\4\122\4\208\3\141\5\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\
    \\114\0\114\0\114\0\114\0\114\0\114\0\121\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\235\5\168\3\24\2\25\2\128\8\114\0\114\0\120\4\126\4\32\1\32\1\32\1\32\1\32\1\32\1\32\1\32\1\32\1\32\1\247\1\250\3\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\
    \\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\124\4\120\4\124\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\43\10\120\4\123\4\120\4\123\4\114\0\114\0\
    \\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\207\3\208\3\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\202\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\
    \\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\175\1\22\3\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\136\1\136\1\171\1\135\1\135\1\135\1\135\1\135\1\
    \\15\3\96\6\55\0\50\0\46\0\137\1\154\4\132\1\42\0\61\9\7\0\136\1\11\0\135\1\135\1\67\9\135\1\135\1\135\1\135\1\135\1\135\1\18\3\48\0\140\1\135\1\72\1\72\1\72\1\72\1\72\1\72\1\72\1\72\1\49\1\72\1\72\1\72\1\76\3\76\3\54\11\76\3\82\3\84\3\79\3\88\3\84\3\84\3\85\3\76\3\
    \\89\6\135\1\171\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\248\3\92\6\135\1\94\3\177\1\135\1\135\1\158\4\160\4\135\1\139\1\94\6\135\1\98\6\4\3\208\3\206\2\78\0\114\0\114\0\114\0\196\6\26\2\208\3\114\0\114\0\138\6\52\5\172\7\246\2\208\3\208\3\114\0\114\0\186\3\246\2\208\3\208\3\208\3\208\3\
    \\114\0\114\0\196\6\129\8\208\3\208\3\114\0\114\0\115\0\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\25\2\25\2\25\2\126\8\114\0\114\0\114\0\114\0\114\0\246\11\206\3\208\3\164\0\22\12\119\4\193\6\114\0\115\0\52\5\52\5\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\
    \\224\0\132\3\133\3\133\3\133\3\133\3\133\3\133\3\248\2\32\12\76\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\38\12\208\3\202\7\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\32\1\32\1\32\1\32\1\72\1\72\1\72\1\72\1\25\2\25\2\173\8\186\11\32\1\32\1\32\1\13\11\72\1\72\1\10\5\208\3\
    \\208\3\208\3\208\3\208\3\21\9\21\9\21\9\21\9\83\7\232\7\40\11\46\11\31\1\32\1\32\1\251\8\71\1\72\1\72\1\14\9\21\9\21\9\21\9\21\9\239\2\94\1\217\7\101\1\32\1\32\1\33\1\1\5\72\1\72\1\73\1\72\1\18\4\41\2\52\5\253\0\114\0\114\0\114\0\114\0\88\2\141\6\52\5\52\5\40\11\214\11\
    \\136\6\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\82\0\48\4\88\10\178\3\40\11\108\8\168\3\170\3\135\6\114\0\114\0\114\0\52\5\52\5\52\5\161\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\138\6\52\5\63\3\208\3\40\11\104\4\114\0\114\0\114\0\141\6\17\2\140\4\
    \\57\9\114\0\114\0\114\0\114\0\114\0\114\0\7\1\51\5\215\5\143\6\114\0\119\3\40\11\87\2\114\0\177\5\31\7\199\3\114\0\114\0\112\0\123\5\94\8\206\9\217\3\209\3\127\0\222\6\40\11\68\11\74\11\121\6\124\0\199\3\114\0\114\0\112\0\134\0\81\9\49\9\158\0\238\8\94\5\253\1\40\11\28\5\208\3\121\6\116\0\
    \\111\0\114\0\114\0\112\0\109\0\94\8\242\0\19\1\207\3\208\3\222\6\40\11\202\0\144\0\226\5\31\7\199\3\114\0\114\0\112\0\109\0\64\8\206\9\163\1\53\9\127\0\222\6\40\11\82\11\208\3\101\0\144\7\121\0\130\0\126\5\144\7\114\0\129\5\131\2\144\2\38\7\208\3\253\1\40\11\11\8\62\1\106\6\117\0\112\0\114\0\
    \\114\0\112\0\114\0\186\5\116\6\93\0\250\2\182\5\222\6\40\11\128\4\165\8\142\8\117\0\112\0\114\0\114\0\112\0\118\0\64\8\221\5\46\9\211\3\140\7\222\6\40\11\136\7\208\3\73\8\117\0\112\0\114\0\114\0\114\0\114\0\191\7\201\10\92\9\15\5\26\2\222\6\40\11\25\2\192\6\226\5\114\0\115\0\200\3\114\0\114\0\
    \\111\0\164\6\115\0\156\1\233\8\133\3\253\1\40\11\133\5\208\3\113\0\114\0\114\0\114\0\114\0\114\0\36\5\124\10\90\2\144\6\40\11\187\1\208\3\208\3\208\3\208\3\130\0\119\0\114\0\114\0\95\5\114\0\36\5\159\3\177\6\96\4\40\11\125\3\208\3\208\3\208\3\208\3\98\9\168\3\103\9\190\0\40\11\161\7\165\7\92\11\
    \\114\0\113\0\114\0\114\0\114\0\203\3\150\3\97\2\25\12\139\6\52\5\150\3\52\5\52\5\52\5\52\6\193\0\16\8\115\4\245\2\208\3\208\3\208\3\208\3\114\0\114\0\114\0\114\0\114\0\230\8\50\5\23\5\40\11\96\10\190\8\182\3\195\7\109\7\39\5\114\0\138\10\137\2\40\11\53\7\32\1\32\1\32\1\32\1\240\1\1\3\
    \\72\1\72\1\72\1\72\1\72\1\236\3\114\0\114\0\213\2\133\8\114\0\114\0\101\3\208\3\114\0\114\0\81\5\208\3\114\0\117\0\223\3\208\3\114\0\114\0\114\0\114\0\114\0\114\0\61\2\192\5\13\1\51\5\81\2\252\10\40\11\3\2\25\2\131\8\17\10\88\7\40\11\3\2\114\0\114\0\114\0\114\0\185\7\114\0\114\0\114\0\
    \\114\0\114\0\114\0\207\3\189\7\114\0\114\0\114\0\114\0\62\3\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\202\3\208\3\114\0\114\0\137\6\162\9\114\0\114\0\114\0\114\0\114\0\114\0\125\2\96\4\150\8\211\5\208\5\154\0\40\11\3\2\40\11\3\2\135\4\183\11\52\5\181\9\52\5\52\5\52\5\52\5\52\5\52\5\
    \\157\8\208\3\56\9\114\0\114\0\114\0\114\0\114\0\46\5\202\5\132\9\137\9\40\11\96\10\119\4\45\4\56\5\24\8\143\10\114\0\114\0\114\0\69\8\102\2\40\11\104\4\114\0\114\0\114\0\114\0\44\5\29\9\129\7\131\4\114\0\114\0\114\0\114\0\129\3\207\5\154\10\132\4\40\11\124\9\40\11\104\4\114\0\114\0\114\0\228\4\
    \\72\1\73\5\32\1\32\1\32\1\32\1\32\1\234\1\168\3\208\3\27\12\52\5\50\5\107\2\108\2\75\7\72\1\72\1\72\1\72\1\72\1\72\3\76\3\76\3\76\3\76\3\76\3\76\3\76\3\246\3\72\1\248\3\72\1\72\1\72\1\73\3\76\3\76\3\76\3\76\3\52\5\52\5\52\5\52\5\52\5\52\5\52\5\52\5\72\1\32\1\
    \\250\3\247\1\72\1\32\1\72\1\32\1\250\3\247\1\72\1\24\0\72\1\32\1\72\1\250\3\72\1\0\0\72\1\0\0\72\1\0\0\42\1\87\1\112\11\106\11\252\3\83\6\72\1\73\9\0\4\62\12\253\5\2\6\152\2\63\4\168\3\232\2\168\3\24\10\227\7\168\3\223\7\173\9\8\6\5\6\120\11\126\11\25\2\126\11\76\3\76\3\
    \\39\6\39\6\39\6\39\6\42\6\208\3\52\5\192\9\187\9\52\5\157\8\208\3\32\1\32\1\32\1\32\1\32\1\32\1\72\1\72\1\72\1\72\1\72\1\72\1\54\0\138\1\12\0\81\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\135\1\237\9\242\9\134\12\142\9\72\1\72\1\72\1\72\1\41\1\7\3\
    \\114\0\114\0\114\0\114\0\114\0\114\0\114\0\200\2\199\2\248\2\114\0\114\0\115\0\208\3\115\0\115\0\115\0\115\0\115\0\115\0\115\0\115\0\52\5\52\5\52\5\52\5\147\11\141\11\16\10\21\10\70\4\71\0\168\3\179\11\240\6\168\3\27\8\75\6\205\4\208\3\208\3\208\3\120\4\120\4\120\4\19\8\120\4\120\4\120\4\120\4\
    \\120\4\120\4\120\4\120\4\120\4\120\4\124\4\208\3\181\8\74\4\45\8\49\8\214\9\112\10\245\5\225\9\113\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\115\0\199\1\141\5\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\53\2\114\0\151\5\114\0\114\0\40\11\24\6\208\3\208\3\135\1\135\1\
    \\135\1\135\1\135\1\56\3\197\9\145\6\135\1\135\1\135\1\184\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\7\12\215\9\14\10\208\3\130\6\133\6\114\0\114\0\19\5\10\7\8\8\63\1\114\0\114\0\114\0\114\0\114\0\114\0\79\8\208\3\75\8\114\0\114\0\114\0\114\0\114\0\129\3\133\3\100\8\129\4\40\11\3\2\
    \\52\5\52\5\42\5\2\1\40\11\104\4\114\0\114\0\138\6\10\10\114\0\114\0\137\6\52\5\129\7\128\4\114\0\114\0\114\0\203\3\57\9\114\0\114\0\114\0\114\0\114\0\137\10\156\10\167\3\234\4\40\11\242\10\217\0\114\0\40\11\29\7\114\0\114\0\114\0\114\0\114\0\191\5\35\9\208\3\133\6\169\5\40\11\228\6\114\0\114\0\
    \\205\1\47\2\114\0\114\0\114\0\114\0\114\0\114\0\114\3\75\2\62\3\208\3\208\3\147\7\114\0\111\6\153\7\208\3\201\3\201\3\201\3\208\3\115\0\115\0\72\1\72\1\72\1\72\1\72\1\241\3\72\1\8\11\72\1\72\1\72\1\72\1\72\1\72\1\72\1\72\1\72\1\72\1\114\0\114\0\114\0\114\0\129\9\80\10\40\11\3\2\
    \\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\142\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\
    \\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\150\12\247\10\232\7\40\11\46\11\31\1\32\1\32\1\251\8\71\1\72\1\72\1\64\0\111\5\114\0\88\2\114\0\114\0\114\0\114\0\106\4\114\0\114\0\114\0\115\0\200\3\200\3\200\3\142\7\146\4\212\1\208\3\13\6\85\8\25\2\25\2\25\2\
    \\25\2\25\2\63\10\120\4\215\9\215\9\215\9\215\9\215\9\215\9\58\10\13\8\120\4\42\3\120\4\123\4\127\4\208\3\208\3\208\3\208\3\208\3\120\4\120\4\120\4\120\4\120\4\9\7\114\0\114\0\114\0\114\0\129\8\14\5\114\0\114\0\187\8\1\10\114\0\114\0\114\0\114\0\138\6\155\8\114\0\114\0\114\0\134\11\114\0\114\0\
    \\114\0\114\0\204\3\114\0\121\7\208\3\208\3\208\3\208\3\208\3\32\1\32\1\32\1\32\1\32\1\72\1\72\1\72\1\72\1\72\1\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\202\3\40\11\3\2\32\1\32\1\32\1\32\1\249\1\72\1\72\1\72\1\72\1\10\5\114\0\114\0\114\0\114\0\114\0\208\3\114\0\114\0\
    \\114\0\114\0\114\0\114\0\204\3\128\4\32\1\243\1\32\1\243\1\82\12\72\1\45\1\72\1\45\1\3\4\114\0\114\0\114\0\114\0\114\0\114\0\204\3\208\3\202\3\112\0\114\0\114\0\114\0\114\0\116\0\195\3\114\0\114\0\134\11\25\2\114\0\114\0\142\5\172\8\114\0\114\0\114\0\115\0\158\8\25\2\208\3\208\3\208\3\208\3\
    \\208\3\208\3\114\0\114\0\182\5\162\8\87\0\147\3\118\0\113\0\114\0\114\0\202\3\96\0\25\2\132\8\168\3\199\2\114\0\114\0\114\0\161\11\114\0\114\0\114\0\196\6\208\3\208\3\208\3\208\3\114\0\193\6\114\0\114\0\219\6\162\8\169\3\208\3\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\207\3\208\3\208\3\
    \\208\3\208\3\208\3\208\3\32\1\32\1\32\1\32\1\32\1\32\1\250\1\208\3\72\1\72\1\72\1\72\1\72\1\72\1\11\5\163\8\122\2\114\0\114\0\114\0\114\0\114\0\114\0\52\5\144\6\183\11\163\8\25\2\82\4\40\11\72\7\248\2\143\10\114\0\114\0\114\0\114\0\114\0\151\10\200\11\248\6\251\6\114\0\114\0\114\0\207\3\
    \\40\11\3\2\41\5\114\0\114\0\114\0\137\6\100\2\98\4\40\11\242\7\208\3\114\0\114\0\114\0\114\0\117\5\208\3\143\10\114\0\114\0\114\0\114\0\114\0\148\10\97\2\114\7\200\9\40\11\90\12\164\8\25\2\128\8\208\3\114\0\114\0\111\0\114\0\114\0\147\10\196\5\69\2\0\11\208\3\208\3\208\3\208\3\208\3\208\3\208\3\
    \\115\0\104\0\114\0\116\0\114\0\15\12\114\0\114\0\114\0\114\0\114\0\137\6\208\5\155\8\40\11\3\2\132\10\31\7\199\3\114\0\114\0\112\0\109\0\189\10\201\8\205\8\38\7\14\5\194\8\122\10\122\10\208\3\114\0\166\6\114\0\114\0\114\0\114\0\116\0\208\5\41\9\117\2\32\11\199\2\254\2\208\3\208\3\208\3\114\0\114\0\
    \\114\0\114\0\114\0\114\0\146\10\52\5\66\7\80\8\40\11\116\1\206\3\208\3\208\3\208\3\114\0\114\0\114\0\114\0\114\0\114\0\208\5\204\5\239\11\208\3\40\11\3\2\208\3\208\3\208\3\208\3\114\0\114\0\114\0\114\0\114\0\114\0\208\5\195\5\191\3\208\3\40\11\3\2\168\3\83\8\208\3\208\3\114\0\114\0\114\0\114\0\
    \\114\0\147\8\98\2\15\12\40\11\3\2\40\11\40\11\240\10\208\3\208\3\208\3\114\0\114\0\114\0\194\11\234\11\123\10\40\11\209\6\115\0\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\114\0\114\0\114\0\114\0\114\0\147\10\
    \\52\5\45\7\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\32\1\32\1\32\1\32\1\72\1\72\1\72\1\72\1\40\11\161\7\130\8\133\8\168\3\153\11\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\200\5\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\
    \\114\0\114\0\114\0\114\0\15\12\208\3\40\11\3\2\114\0\112\0\114\0\114\0\114\0\189\8\96\4\98\2\82\8\208\3\40\11\161\7\25\2\128\8\218\11\114\0\114\0\114\0\149\3\52\5\52\5\8\10\231\0\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\115\0\111\0\114\0\114\0\114\0\114\0\50\6\193\1\109\3\208\3\
    \\40\11\3\2\116\0\112\0\114\0\114\0\114\0\113\2\236\0\207\3\40\11\3\2\114\0\114\0\114\0\114\0\114\0\168\0\40\11\3\2\63\3\208\3\225\8\114\0\112\0\114\0\114\0\114\0\229\8\228\11\66\2\168\3\40\11\158\12\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\207\3\208\3\25\2\25\2\9\8\21\7\
    \\18\7\120\4\126\4\128\4\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\115\0\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\114\0\114\0\114\0\138\6\52\5\116\10\40\11\3\2\208\3\208\3\208\3\208\3\208\3\208\3\
    \\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\114\0\114\0\114\0\114\0\114\0\114\0\114\0\207\3\114\0\114\0\114\0\115\0\40\11\242\10\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\115\0\40\11\3\2\114\0\114\0\114\0\202\3\165\10\208\3\
    \\114\0\114\0\114\0\114\0\207\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\205\3\208\3\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\
    \\206\3\208\3\114\0\114\0\114\0\114\0\114\0\114\0\205\3\208\3\208\3\208\3\208\3\208\3\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\114\0\205\3\114\0\203\3\114\0\207\3\114\0\166\12\142\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\120\4\120\4\120\4\120\4\
    \\120\4\120\4\120\4\120\4\120\4\120\4\121\4\208\3\25\2\25\2\25\2\132\8\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\32\1\32\1\32\1\6\5\72\1\72\1\253\4\32\1\32\1\2\5\42\1\72\1\72\1\32\1\32\1\32\1\6\5\72\1\72\1\56\12\9\2\227\1\
    \\2\5\231\3\43\1\72\1\32\1\32\1\32\1\6\5\72\1\72\1\72\1\72\1\75\1\253\4\32\1\32\1\35\1\72\1\72\1\73\1\251\4\32\1\32\1\33\1\72\1\72\1\72\1\249\4\32\1\32\1\32\1\39\1\72\1\72\1\77\1\181\1\40\11\40\11\40\11\40\11\40\11\40\11\72\1\52\12\72\1\72\1\72\1\72\1\72\1\72\1\
    \\20\3\12\0\19\3\72\1\72\1\135\1\171\1\135\1\206\3\208\3\249\3\208\3\208\3\208\3\208\3\208\3\208\3\202\2\76\3\76\3\76\3\76\3\76\3\76\3\96\4\52\5\52\5\85\10\89\0\155\8\76\3\76\3\76\3\76\3\76\3\76\3\76\3\152\6\208\3\208\3\208\3\248\2\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\
    \\208\3\208\3\208\3\208\3\208\3\208\3\118\0\114\0\114\0\114\0\138\0\113\0\119\0\99\5\170\6\90\5\138\0\88\5\138\0\119\0\119\0\94\5\114\0\111\0\114\0\204\3\230\5\111\0\114\0\204\3\208\3\208\3\208\3\208\3\208\3\208\3\153\9\208\3\125\4\208\3\120\4\120\4\120\4\120\4\120\4\124\4\120\4\127\4\126\4\208\3\
    \\122\4\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\208\3\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\
    \\120\4\37\8\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\208\3\120\4\122\4\120\4\123\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\121\4\50\10\120\4\15\8\120\4\47\10\120\4\125\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\
    \\120\4\120\4\18\8\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\120\4\40\11\214\12"#

generalCategoryOffsets2BitMap :: Ptr Word16
generalCategoryOffsets2BitMap = Ptr
    "\244\10\25\10\56\10\26\7\58\7\84\7\20\11\52\11\227\5\84\11\116\11\148\11\180\11\212\11\244\11\20\12\52\12\86\1\30\0\100\9\240\3\86\1\3\4\84\12\116\12\35\4\148\12\180\12\212\12\244\12\0\10\20\13\52\13\64\2\95\2\173\8\202\8\32\2\18\2\82\4\159\4\112\4\95\2\144\4\84\13\116\13\148\13\113\5\180\13\0\0\
    \\250\1\159\4\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\254\0\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\
    \\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\
    \\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\246\0\86\1\86\1\86\1\62\3\86\1\212\13\86\10\244\13\20\14\52\14\84\14\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\
    \\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\225\2\116\14\116\14\116\14\116\14\116\14\116\14\116\14\116\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\148\14\86\1\
    \\170\1\220\7\86\1\247\7\55\5\180\14\54\1\212\14\111\0\244\14\20\15\52\15\86\1\104\6\84\15\234\8\116\15\116\7\148\15\5\5\25\5\118\10\180\15\212\15\244\15\20\16\52\16\135\3\84\16\116\16\148\16\81\8\174\2\180\16\212\16\244\16\119\1\20\17\86\1\86\1\86\1\91\0\75\0\57\0\159\0\176\0\176\0\176\0\176\0\176\0\
    \\176\0\176\0\176\0\142\2\86\1\86\1\86\1\86\1\202\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\214\1\86\1\86\1\52\17\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\
    \\176\0\176\0\176\0\84\17\176\0\176\0\176\0\176\0\176\0\176\0\86\1\86\1\116\17\32\6\176\0\56\6\152\6\181\10\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\218\1\148\17\86\1\86\1\
    \\86\1\180\17\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\178\0\86\1\200\2\214\2\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\212\17\176\0\176\0\176\0\176\0\176\0\
    \\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\22\1\159\4\143\5\0\6\109\5\87\5\208\6\244\17\20\18\210\4\229\4\52\18\159\4\159\4\166\7\124\2\176\0\176\0\176\0\84\18\116\18\1\3\15\3\176\0\208\3\72\6\188\7\50\8\23\8\94\3\176\0\176\0\112\3\167\3\148\18\176\0\38\9\9\9\180\18\212\18\
    \\159\4\159\4\162\9\113\8\141\8\159\4\244\18\20\19\176\0\176\0\176\0\176\0\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\
    \\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\
    \\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\
    \\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\214\0\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\210\0\86\1\86\1\86\1\
    \\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\162\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\197\5\86\1\86\1\
    \\107\1\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\86\1\86\1\115\1\176\0\176\0\176\0\176\0\176\0\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\76\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\
    \\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\95\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\
    \\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\
    \\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\
    \\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\176\0\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\
    \\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\86\1\240\6\8\7\148\7"#