diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,5 @@
+# Revision history for tagstew
+
+## 0 -- YYYY-mm-dd
+
+* First version. Released on an unsuspecting world.
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright Fumiaki Kinoshita (c) 2018
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Fumiaki Kinoshita nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,7 @@
+tagstew
+====
+
+tagstew is an HTML decoder which produces a stream of tags defined in the
+[tagsoup](http://hackage.haskell.org/package/tagsoup-0.14.8/docs/Text-HTML-TagSoup.html) package. It is ~25% faster than tagsoup.
+
+__It's likely to be incorrect; avoid using it in production.__
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/Text/HTML/TagStew.hs b/Text/HTML/TagStew.hs
new file mode 100644
--- /dev/null
+++ b/Text/HTML/TagStew.hs
@@ -0,0 +1,144 @@
+{-# LANGUAGE LambdaCase, BangPatterns, OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE ViewPatterns #-}
+{-# OPTIONS -ddump-simpl -dsuppress-all -ddump-to-file #-}
+module Text.HTML.TagStew (parseTags) where
+
+import qualified Data.ByteString.Unsafe as B
+import qualified Data.ByteString.Char8 as BC
+import qualified Data.ByteString as B
+import qualified Text.HTML.TagSoup as S
+import Text.HTML.TagStew.Entity (lookupEntity)
+import Data.Bits
+import Data.Char
+import Data.Word (Word8)
+
+data Stack = Text !Int
+  | Entity !Int
+  | TagOpen !Int
+  | TagClose !Int
+  | Attrs !Range !Attrs
+  | AttrName !Range !Int !Attrs
+  | AttrValue !Quote !Range !Range !Int !Attrs
+  | Comment !Int
+  | Script !Int
+  deriving Show
+
+newtype Range = MkRange Int deriving Show
+data Quote = QNone | QSingle | QDouble
+  deriving Show
+
+type Attrs = [(Range, Range)]
+
+pattern Range :: Int -> Int -> Range
+pattern Range i j <- (unpack -> (i, j)) where
+  Range i j = MkRange $ i `shiftL` 32 .|. j
+{-# COMPLETE Range #-}
+
+unpack :: Range -> (Int, Int)
+unpack (MkRange x) = (x `shiftR` 32, x .&. 0xffffffff)
+{-# INLINE unpack #-}
+
+parseTags :: B.ByteString -> [S.Tag B.ByteString]
+parseTags bs = go 0 (Text 0) where
+  slice (Range i j) = B.unsafeTake (j - i) $ B.unsafeDrop i bs
+  isScript (Range i j) = BC.map toLower (B.unsafeTake (j - i) (B.unsafeDrop i bs)) == "script"
+  {-# INLINE isScript #-}
+  go :: Int -> Stack -> [S.Tag B.ByteString]
+  go loc _ | loc >= B.length bs = []
+  go !loc !st = case st of
+    Comment i
+      | B.take 3 (B.drop loc bs) == "-->" ->
+        S.TagComment (slice $ Range i loc)
+          : go (loc + 3) (Text (loc + 3))
+      | otherwise -> char
+    Entity i -> case ch of
+      C_SC -> do
+        case lookupEntity (B.take (loc - i) $ B.drop i bs) of
+          Just x -> S.TagText x : next (Text loc')
+          Nothing -> S.TagText (slice $ Range i loc) : next (Text loc')
+      C_NS -> char
+      _ | isAlphaNum (toEnum (fromEnum ch)) -> char
+      _ -> go loc $ Text (i - 1)
+    Text i -> case ch of
+      C_LT -> pushText (Range i loc) $ next (TagOpen loc')
+      C_AMP -> pushText (Range i loc) $ next (Entity loc')
+      _ -> char
+    TagOpen i -> case ch of
+      C_GT -> pushOpen 1 (Range i loc) []
+      C_SL -> next $ TagClose loc'
+      _ | isSpace' ch -> next $ AttrName (Range i loc) loc' []
+      33 | B.unsafeIndex bs loc' == c2w '-',
+          B.unsafeIndex bs (loc + 2) == c2w '-' -> go (loc + 3) (Comment (loc + 3))
+      _ -> char
+    Attrs tname attrs -> case ch of
+      C_GT -> pushOpen 1 tname attrs
+      C_SL -> pushOpen 2 tname attrs
+      _ | isSpace' ch -> next $ AttrName tname loc' attrs
+      _ -> char
+    AttrName tname i attrs -> case ch of
+      C_SQ -> next $ AttrValue QSingle tname (Range 0 0) loc' attrs
+      C_DQ -> next $ AttrValue QDouble tname (Range 0 0) loc' attrs
+      C_EQ -> next $ AttrValue QNone tname (Range i loc) loc' attrs
+      C_SL -> pushOpen 2 tname attrs
+      C_GT -> pushOpen 1 tname attrs
+      _ | isSpace' ch -> next $ AttrName tname loc' ((Range i loc, Range 0 0) : attrs)
+      _ -> char
+    AttrValue QSingle tname aname i attrs -> case ch of
+      C_SQ -> next $ Attrs tname $ (aname, Range i loc) : attrs
+      C_BS -> go (loc + 2) st
+      _ -> char
+    AttrValue QDouble tname aname i attrs -> case ch of
+      C_DQ -> next $ Attrs tname $ (aname, Range i loc) : attrs
+      C_BS -> go (loc + 2) st
+      _ -> char
+    AttrValue QNone tname aname i attrs -> case ch of
+      C_SQ -> next $ AttrValue QSingle tname aname (i + 1) attrs
+      C_DQ -> next $ AttrValue QDouble tname aname (i + 1) attrs
+      C_SL -> pushOpen 2 tname $ (aname, Range i loc) : attrs
+      C_GT -> pushOpen 1 tname $ (aname, Range i loc) : attrs
+      _ | isSpace' ch -> next $ AttrName tname loc' $ (aname, Range i loc) : attrs
+      _ -> char
+    TagClose i -> case ch of
+      C_GT -> (S.TagClose $! slice $ Range i loc) : next (Text $ loc + 1)
+      _ -> char
+    Script i
+      | map toLower (BC.unpack (B.take 9 (B.drop loc bs))) == "</script>" -> do
+        pushText (Range i loc)
+          $ S.TagClose (slice $ Range (loc + 2) (loc + 8))
+          : next (Text $ loc + 9)
+      | otherwise -> char
+    where
+      pushText str@(Range i j) cont
+        | i == j = cont
+        | otherwise = S.TagText (slice str) : cont
+      pushOpen ofs tname attrs =
+        fmap slice (S.TagOpen tname attrs)
+        : if isScript tname
+          then go (loc + ofs) $ Script loc'
+          else next $ Text $ loc + ofs
+      {-# INLINE pushOpen #-}
+      loc' = loc + 1
+      next = go loc'
+      ch = B.unsafeIndex bs loc
+      byteCount = max 1 $ countLeadingZeros (complement ch)
+      char = go (loc + byteCount) st
+
+isSpace' :: Word8 -> Bool
+isSpace' ch = ch == 13 || ch == 10 || ch == 32
+
+pattern C_LT, C_EQ, C_GT, C_SL, C_SQ, C_DQ, C_BS, C_AMP, C_SC, C_NS :: Word8
+pattern C_LT = 60
+pattern C_EQ = 61
+pattern C_GT = 62
+pattern C_SL = 47
+pattern C_SQ = 39
+pattern C_DQ = 34
+pattern C_BS = 92
+pattern C_AMP = 38
+pattern C_SC = 59
+pattern C_NS = 35
+
+
+c2w :: Char -> Word8
+c2w = toEnum . fromEnum
diff --git a/Text/HTML/TagStew/Entity.hs b/Text/HTML/TagStew/Entity.hs
new file mode 100644
--- /dev/null
+++ b/Text/HTML/TagStew/Entity.hs
@@ -0,0 +1,2303 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS -Wno-name-shadowing #-}
+-- | This module converts between HTML/XML entities (i.e. @&amp;@) and
+--   the characters they represent.
+module Text.HTML.TagStew.Entity(
+    lookupEntity
+    ) where
+
+import Data.Char (chr, ord)
+import Data.Ix
+import qualified Data.HashMap.Strict as HM
+import Numeric (readHex)
+import qualified Data.ByteString.Short as SB
+import qualified Data.ByteString.Char8 as B
+import Data.Compact
+import Data.Text.Encoding (encodeUtf8)
+import qualified Data.Text as T
+import System.IO.Unsafe
+
+
+-- | Lookup an entity, using 'lookupNumericEntity' if it starts with
+--   @#@ and 'lookupNamedEntity' otherwise
+lookupEntity :: B.ByteString -> Maybe B.ByteString
+lookupEntity bs
+  | B.head bs == '#' = lookupNumericEntity (B.tail bs)
+  | otherwise = lookupNamedEntity bs
+
+-- | Lookup a numeric entity, the leading @\'#\'@ must have already been removed.
+--
+-- > lookupNumericEntity "65" == Just "A"
+-- > lookupNumericEntity "x41" == Just "A"
+-- > lookupNumericEntity "x4E" === Just "N"
+-- > lookupNumericEntity "x4e" === Just "N"
+-- > lookupNumericEntity "X4e" === Just "N"
+-- > lookupNumericEntity "Haskell" == Nothing
+-- > lookupNumericEntity "" == Nothing
+-- > lookupNumericEntity "89439085908539082" == Nothing
+lookupNumericEntity :: B.ByteString -> Maybe B.ByteString
+lookupNumericEntity = fmap (encodeUtf8 . T.pack) . f . B.unpack
+        -- entity = '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'
+    where
+        f (x:xs) | x `elem` ("xX" :: String) = g [('0','9'),('a','f'),('A','F')] readHex xs
+        f xs = g [('0','9')] reads xs
+
+        g :: [(Char,Char)] -> ReadS Integer -> String -> Maybe String
+        g valid reader xs = do
+            let test b = if b then Just () else Nothing
+            test $ isValid valid xs
+            test $ not $ null xs
+            case reader xs of
+                [(a,"")] -> do
+                    test $ inRange (toInteger $ ord minBound, toInteger $ ord maxBound) a
+                    return [chr $ fromInteger a]
+                _ -> Nothing
+
+        isValid :: [(Char,Char)] -> String -> Bool
+        isValid valid xs = all (\x -> any (`inRange` x) valid) xs
+
+
+-- | Lookup a named entity, using 'htmlEntities'
+--
+-- > lookupNamedEntity "amp" == Just "&"
+-- > lookupNamedEntity "haskell" == Nothing
+lookupNamedEntity :: B.ByteString -> Maybe B.ByteString
+lookupNamedEntity x = SB.fromShort <$> HM.lookup (SB.toShort x) (getCompact htmlEntities)
+
+-- | A table mapping HTML entity names to resolved strings. Most resolved strings are a single character long,
+--   but some (e.g. @"ngeqq"@) are two characters long. The list is taken from
+--   <http://www.w3.org/TR/html5/syntax.html#named-character-references>.
+htmlEntities :: Compact (HM.HashMap SB.ShortByteString SB.ShortByteString)
+htmlEntities = unsafePerformIO $ compact $ HM.fromList $ let a * b = (a, SB.toShort $ encodeUtf8 b) in
+    ["Aacute" * "\x00C1"
+    ,"aacute" * "\x00E1"
+    ,"Aacute;" * "\x00C1"
+    ,"aacute;" * "\x00E1"
+    ,"Abreve;" * "\x0102"
+    ,"abreve;" * "\x0103"
+    ,"ac;" * "\x223E"
+    ,"acd;" * "\x223F"
+    ,"acE;" * "\x223E\x0333"
+    ,"Acirc" * "\x00C2"
+    ,"acirc" * "\x00E2"
+    ,"Acirc;" * "\x00C2"
+    ,"acirc;" * "\x00E2"
+    ,"acute" * "\x00B4"
+    ,"acute;" * "\x00B4"
+    ,"Acy;" * "\x0410"
+    ,"acy;" * "\x0430"
+    ,"AElig" * "\x00C6"
+    ,"aelig" * "\x00E6"
+    ,"AElig;" * "\x00C6"
+    ,"aelig;" * "\x00E6"
+    ,"af;" * "\x2061"
+    ,"Afr;" * "\x1D504"
+    ,"afr;" * "\x1D51E"
+    ,"Agrave" * "\x00C0"
+    ,"agrave" * "\x00E0"
+    ,"Agrave;" * "\x00C0"
+    ,"agrave;" * "\x00E0"
+    ,"alefsym;" * "\x2135"
+    ,"aleph;" * "\x2135"
+    ,"Alpha;" * "\x0391"
+    ,"alpha;" * "\x03B1"
+    ,"Amacr;" * "\x0100"
+    ,"amacr;" * "\x0101"
+    ,"amalg;" * "\x2A3F"
+    ,"AMP" * "\x0026"
+    ,"amp" * "\x0026"
+    ,"AMP;" * "\x0026"
+    ,"amp;" * "\x0026"
+    ,"and;" * "\x2227"
+    ,"And;" * "\x2A53"
+    ,"andand;" * "\x2A55"
+    ,"andd;" * "\x2A5C"
+    ,"andslope;" * "\x2A58"
+    ,"andv;" * "\x2A5A"
+    ,"ang;" * "\x2220"
+    ,"ange;" * "\x29A4"
+    ,"angle;" * "\x2220"
+    ,"angmsd;" * "\x2221"
+    ,"angmsdaa;" * "\x29A8"
+    ,"angmsdab;" * "\x29A9"
+    ,"angmsdac;" * "\x29AA"
+    ,"angmsdad;" * "\x29AB"
+    ,"angmsdae;" * "\x29AC"
+    ,"angmsdaf;" * "\x29AD"
+    ,"angmsdag;" * "\x29AE"
+    ,"angmsdah;" * "\x29AF"
+    ,"angrt;" * "\x221F"
+    ,"angrtvb;" * "\x22BE"
+    ,"angrtvbd;" * "\x299D"
+    ,"angsph;" * "\x2222"
+    ,"angst;" * "\x00C5"
+    ,"angzarr;" * "\x237C"
+    ,"Aogon;" * "\x0104"
+    ,"aogon;" * "\x0105"
+    ,"Aopf;" * "\x1D538"
+    ,"aopf;" * "\x1D552"
+    ,"ap;" * "\x2248"
+    ,"apacir;" * "\x2A6F"
+    ,"ape;" * "\x224A"
+    ,"apE;" * "\x2A70"
+    ,"apid;" * "\x224B"
+    ,"apos;" * "\x0027"
+    ,"ApplyFunction;" * "\x2061"
+    ,"approx;" * "\x2248"
+    ,"approxeq;" * "\x224A"
+    ,"Aring" * "\x00C5"
+    ,"aring" * "\x00E5"
+    ,"Aring;" * "\x00C5"
+    ,"aring;" * "\x00E5"
+    ,"Ascr;" * "\x1D49C"
+    ,"ascr;" * "\x1D4B6"
+    ,"Assign;" * "\x2254"
+    ,"ast;" * "\x002A"
+    ,"asymp;" * "\x2248"
+    ,"asympeq;" * "\x224D"
+    ,"Atilde" * "\x00C3"
+    ,"atilde" * "\x00E3"
+    ,"Atilde;" * "\x00C3"
+    ,"atilde;" * "\x00E3"
+    ,"Auml" * "\x00C4"
+    ,"auml" * "\x00E4"
+    ,"Auml;" * "\x00C4"
+    ,"auml;" * "\x00E4"
+    ,"awconint;" * "\x2233"
+    ,"awint;" * "\x2A11"
+    ,"backcong;" * "\x224C"
+    ,"backepsilon;" * "\x03F6"
+    ,"backprime;" * "\x2035"
+    ,"backsim;" * "\x223D"
+    ,"backsimeq;" * "\x22CD"
+    ,"Backslash;" * "\x2216"
+    ,"Barv;" * "\x2AE7"
+    ,"barvee;" * "\x22BD"
+    ,"barwed;" * "\x2305"
+    ,"Barwed;" * "\x2306"
+    ,"barwedge;" * "\x2305"
+    ,"bbrk;" * "\x23B5"
+    ,"bbrktbrk;" * "\x23B6"
+    ,"bcong;" * "\x224C"
+    ,"Bcy;" * "\x0411"
+    ,"bcy;" * "\x0431"
+    ,"bdquo;" * "\x201E"
+    ,"becaus;" * "\x2235"
+    ,"Because;" * "\x2235"
+    ,"because;" * "\x2235"
+    ,"bemptyv;" * "\x29B0"
+    ,"bepsi;" * "\x03F6"
+    ,"bernou;" * "\x212C"
+    ,"Bernoullis;" * "\x212C"
+    ,"Beta;" * "\x0392"
+    ,"beta;" * "\x03B2"
+    ,"beth;" * "\x2136"
+    ,"between;" * "\x226C"
+    ,"Bfr;" * "\x1D505"
+    ,"bfr;" * "\x1D51F"
+    ,"bigcap;" * "\x22C2"
+    ,"bigcirc;" * "\x25EF"
+    ,"bigcup;" * "\x22C3"
+    ,"bigodot;" * "\x2A00"
+    ,"bigoplus;" * "\x2A01"
+    ,"bigotimes;" * "\x2A02"
+    ,"bigsqcup;" * "\x2A06"
+    ,"bigstar;" * "\x2605"
+    ,"bigtriangledown;" * "\x25BD"
+    ,"bigtriangleup;" * "\x25B3"
+    ,"biguplus;" * "\x2A04"
+    ,"bigvee;" * "\x22C1"
+    ,"bigwedge;" * "\x22C0"
+    ,"bkarow;" * "\x290D"
+    ,"blacklozenge;" * "\x29EB"
+    ,"blacksquare;" * "\x25AA"
+    ,"blacktriangle;" * "\x25B4"
+    ,"blacktriangledown;" * "\x25BE"
+    ,"blacktriangleleft;" * "\x25C2"
+    ,"blacktriangleright;" * "\x25B8"
+    ,"blank;" * "\x2423"
+    ,"blk12;" * "\x2592"
+    ,"blk14;" * "\x2591"
+    ,"blk34;" * "\x2593"
+    ,"block;" * "\x2588"
+    ,"bne;" * "\x003D\x20E5"
+    ,"bnequiv;" * "\x2261\x20E5"
+    ,"bnot;" * "\x2310"
+    ,"bNot;" * "\x2AED"
+    ,"Bopf;" * "\x1D539"
+    ,"bopf;" * "\x1D553"
+    ,"bot;" * "\x22A5"
+    ,"bottom;" * "\x22A5"
+    ,"bowtie;" * "\x22C8"
+    ,"boxbox;" * "\x29C9"
+    ,"boxdl;" * "\x2510"
+    ,"boxdL;" * "\x2555"
+    ,"boxDl;" * "\x2556"
+    ,"boxDL;" * "\x2557"
+    ,"boxdr;" * "\x250C"
+    ,"boxdR;" * "\x2552"
+    ,"boxDr;" * "\x2553"
+    ,"boxDR;" * "\x2554"
+    ,"boxh;" * "\x2500"
+    ,"boxH;" * "\x2550"
+    ,"boxhd;" * "\x252C"
+    ,"boxHd;" * "\x2564"
+    ,"boxhD;" * "\x2565"
+    ,"boxHD;" * "\x2566"
+    ,"boxhu;" * "\x2534"
+    ,"boxHu;" * "\x2567"
+    ,"boxhU;" * "\x2568"
+    ,"boxHU;" * "\x2569"
+    ,"boxminus;" * "\x229F"
+    ,"boxplus;" * "\x229E"
+    ,"boxtimes;" * "\x22A0"
+    ,"boxul;" * "\x2518"
+    ,"boxuL;" * "\x255B"
+    ,"boxUl;" * "\x255C"
+    ,"boxUL;" * "\x255D"
+    ,"boxur;" * "\x2514"
+    ,"boxuR;" * "\x2558"
+    ,"boxUr;" * "\x2559"
+    ,"boxUR;" * "\x255A"
+    ,"boxv;" * "\x2502"
+    ,"boxV;" * "\x2551"
+    ,"boxvh;" * "\x253C"
+    ,"boxvH;" * "\x256A"
+    ,"boxVh;" * "\x256B"
+    ,"boxVH;" * "\x256C"
+    ,"boxvl;" * "\x2524"
+    ,"boxvL;" * "\x2561"
+    ,"boxVl;" * "\x2562"
+    ,"boxVL;" * "\x2563"
+    ,"boxvr;" * "\x251C"
+    ,"boxvR;" * "\x255E"
+    ,"boxVr;" * "\x255F"
+    ,"boxVR;" * "\x2560"
+    ,"bprime;" * "\x2035"
+    ,"Breve;" * "\x02D8"
+    ,"breve;" * "\x02D8"
+    ,"brvbar" * "\x00A6"
+    ,"brvbar;" * "\x00A6"
+    ,"Bscr;" * "\x212C"
+    ,"bscr;" * "\x1D4B7"
+    ,"bsemi;" * "\x204F"
+    ,"bsim;" * "\x223D"
+    ,"bsime;" * "\x22CD"
+    ,"bsol;" * "\x005C"
+    ,"bsolb;" * "\x29C5"
+    ,"bsolhsub;" * "\x27C8"
+    ,"bull;" * "\x2022"
+    ,"bullet;" * "\x2022"
+    ,"bump;" * "\x224E"
+    ,"bumpe;" * "\x224F"
+    ,"bumpE;" * "\x2AAE"
+    ,"Bumpeq;" * "\x224E"
+    ,"bumpeq;" * "\x224F"
+    ,"Cacute;" * "\x0106"
+    ,"cacute;" * "\x0107"
+    ,"cap;" * "\x2229"
+    ,"Cap;" * "\x22D2"
+    ,"capand;" * "\x2A44"
+    ,"capbrcup;" * "\x2A49"
+    ,"capcap;" * "\x2A4B"
+    ,"capcup;" * "\x2A47"
+    ,"capdot;" * "\x2A40"
+    ,"CapitalDifferentialD;" * "\x2145"
+    ,"caps;" * "\x2229\xFE00"
+    ,"caret;" * "\x2041"
+    ,"caron;" * "\x02C7"
+    ,"Cayleys;" * "\x212D"
+    ,"ccaps;" * "\x2A4D"
+    ,"Ccaron;" * "\x010C"
+    ,"ccaron;" * "\x010D"
+    ,"Ccedil" * "\x00C7"
+    ,"ccedil" * "\x00E7"
+    ,"Ccedil;" * "\x00C7"
+    ,"ccedil;" * "\x00E7"
+    ,"Ccirc;" * "\x0108"
+    ,"ccirc;" * "\x0109"
+    ,"Cconint;" * "\x2230"
+    ,"ccups;" * "\x2A4C"
+    ,"ccupssm;" * "\x2A50"
+    ,"Cdot;" * "\x010A"
+    ,"cdot;" * "\x010B"
+    ,"cedil" * "\x00B8"
+    ,"cedil;" * "\x00B8"
+    ,"Cedilla;" * "\x00B8"
+    ,"cemptyv;" * "\x29B2"
+    ,"cent" * "\x00A2"
+    ,"cent;" * "\x00A2"
+    ,"CenterDot;" * "\x00B7"
+    ,"centerdot;" * "\x00B7"
+    ,"Cfr;" * "\x212D"
+    ,"cfr;" * "\x1D520"
+    ,"CHcy;" * "\x0427"
+    ,"chcy;" * "\x0447"
+    ,"check;" * "\x2713"
+    ,"checkmark;" * "\x2713"
+    ,"Chi;" * "\x03A7"
+    ,"chi;" * "\x03C7"
+    ,"cir;" * "\x25CB"
+    ,"circ;" * "\x02C6"
+    ,"circeq;" * "\x2257"
+    ,"circlearrowleft;" * "\x21BA"
+    ,"circlearrowright;" * "\x21BB"
+    ,"circledast;" * "\x229B"
+    ,"circledcirc;" * "\x229A"
+    ,"circleddash;" * "\x229D"
+    ,"CircleDot;" * "\x2299"
+    ,"circledR;" * "\x00AE"
+    ,"circledS;" * "\x24C8"
+    ,"CircleMinus;" * "\x2296"
+    ,"CirclePlus;" * "\x2295"
+    ,"CircleTimes;" * "\x2297"
+    ,"cire;" * "\x2257"
+    ,"cirE;" * "\x29C3"
+    ,"cirfnint;" * "\x2A10"
+    ,"cirmid;" * "\x2AEF"
+    ,"cirscir;" * "\x29C2"
+    ,"ClockwiseContourIntegral;" * "\x2232"
+    ,"CloseCurlyDoubleQuote;" * "\x201D"
+    ,"CloseCurlyQuote;" * "\x2019"
+    ,"clubs;" * "\x2663"
+    ,"clubsuit;" * "\x2663"
+    ,"colon;" * "\x003A"
+    ,"Colon;" * "\x2237"
+    ,"colone;" * "\x2254"
+    ,"Colone;" * "\x2A74"
+    ,"coloneq;" * "\x2254"
+    ,"comma;" * "\x002C"
+    ,"commat;" * "\x0040"
+    ,"comp;" * "\x2201"
+    ,"compfn;" * "\x2218"
+    ,"complement;" * "\x2201"
+    ,"complexes;" * "\x2102"
+    ,"cong;" * "\x2245"
+    ,"congdot;" * "\x2A6D"
+    ,"Congruent;" * "\x2261"
+    ,"conint;" * "\x222E"
+    ,"Conint;" * "\x222F"
+    ,"ContourIntegral;" * "\x222E"
+    ,"Copf;" * "\x2102"
+    ,"copf;" * "\x1D554"
+    ,"coprod;" * "\x2210"
+    ,"Coproduct;" * "\x2210"
+    ,"COPY" * "\x00A9"
+    ,"copy" * "\x00A9"
+    ,"COPY;" * "\x00A9"
+    ,"copy;" * "\x00A9"
+    ,"copysr;" * "\x2117"
+    ,"CounterClockwiseContourIntegral;" * "\x2233"
+    ,"crarr;" * "\x21B5"
+    ,"cross;" * "\x2717"
+    ,"Cross;" * "\x2A2F"
+    ,"Cscr;" * "\x1D49E"
+    ,"cscr;" * "\x1D4B8"
+    ,"csub;" * "\x2ACF"
+    ,"csube;" * "\x2AD1"
+    ,"csup;" * "\x2AD0"
+    ,"csupe;" * "\x2AD2"
+    ,"ctdot;" * "\x22EF"
+    ,"cudarrl;" * "\x2938"
+    ,"cudarrr;" * "\x2935"
+    ,"cuepr;" * "\x22DE"
+    ,"cuesc;" * "\x22DF"
+    ,"cularr;" * "\x21B6"
+    ,"cularrp;" * "\x293D"
+    ,"cup;" * "\x222A"
+    ,"Cup;" * "\x22D3"
+    ,"cupbrcap;" * "\x2A48"
+    ,"CupCap;" * "\x224D"
+    ,"cupcap;" * "\x2A46"
+    ,"cupcup;" * "\x2A4A"
+    ,"cupdot;" * "\x228D"
+    ,"cupor;" * "\x2A45"
+    ,"cups;" * "\x222A\xFE00"
+    ,"curarr;" * "\x21B7"
+    ,"curarrm;" * "\x293C"
+    ,"curlyeqprec;" * "\x22DE"
+    ,"curlyeqsucc;" * "\x22DF"
+    ,"curlyvee;" * "\x22CE"
+    ,"curlywedge;" * "\x22CF"
+    ,"curren" * "\x00A4"
+    ,"curren;" * "\x00A4"
+    ,"curvearrowleft;" * "\x21B6"
+    ,"curvearrowright;" * "\x21B7"
+    ,"cuvee;" * "\x22CE"
+    ,"cuwed;" * "\x22CF"
+    ,"cwconint;" * "\x2232"
+    ,"cwint;" * "\x2231"
+    ,"cylcty;" * "\x232D"
+    ,"dagger;" * "\x2020"
+    ,"Dagger;" * "\x2021"
+    ,"daleth;" * "\x2138"
+    ,"darr;" * "\x2193"
+    ,"Darr;" * "\x21A1"
+    ,"dArr;" * "\x21D3"
+    ,"dash;" * "\x2010"
+    ,"dashv;" * "\x22A3"
+    ,"Dashv;" * "\x2AE4"
+    ,"dbkarow;" * "\x290F"
+    ,"dblac;" * "\x02DD"
+    ,"Dcaron;" * "\x010E"
+    ,"dcaron;" * "\x010F"
+    ,"Dcy;" * "\x0414"
+    ,"dcy;" * "\x0434"
+    ,"DD;" * "\x2145"
+    ,"dd;" * "\x2146"
+    ,"ddagger;" * "\x2021"
+    ,"ddarr;" * "\x21CA"
+    ,"DDotrahd;" * "\x2911"
+    ,"ddotseq;" * "\x2A77"
+    ,"deg" * "\x00B0"
+    ,"deg;" * "\x00B0"
+    ,"Del;" * "\x2207"
+    ,"Delta;" * "\x0394"
+    ,"delta;" * "\x03B4"
+    ,"demptyv;" * "\x29B1"
+    ,"dfisht;" * "\x297F"
+    ,"Dfr;" * "\x1D507"
+    ,"dfr;" * "\x1D521"
+    ,"dHar;" * "\x2965"
+    ,"dharl;" * "\x21C3"
+    ,"dharr;" * "\x21C2"
+    ,"DiacriticalAcute;" * "\x00B4"
+    ,"DiacriticalDot;" * "\x02D9"
+    ,"DiacriticalDoubleAcute;" * "\x02DD"
+    ,"DiacriticalGrave;" * "\x0060"
+    ,"DiacriticalTilde;" * "\x02DC"
+    ,"diam;" * "\x22C4"
+    ,"Diamond;" * "\x22C4"
+    ,"diamond;" * "\x22C4"
+    ,"diamondsuit;" * "\x2666"
+    ,"diams;" * "\x2666"
+    ,"die;" * "\x00A8"
+    ,"DifferentialD;" * "\x2146"
+    ,"digamma;" * "\x03DD"
+    ,"disin;" * "\x22F2"
+    ,"div;" * "\x00F7"
+    ,"divide" * "\x00F7"
+    ,"divide;" * "\x00F7"
+    ,"divideontimes;" * "\x22C7"
+    ,"divonx;" * "\x22C7"
+    ,"DJcy;" * "\x0402"
+    ,"djcy;" * "\x0452"
+    ,"dlcorn;" * "\x231E"
+    ,"dlcrop;" * "\x230D"
+    ,"dollar;" * "\x0024"
+    ,"Dopf;" * "\x1D53B"
+    ,"dopf;" * "\x1D555"
+    ,"Dot;" * "\x00A8"
+    ,"dot;" * "\x02D9"
+    ,"DotDot;" * "\x20DC"
+    ,"doteq;" * "\x2250"
+    ,"doteqdot;" * "\x2251"
+    ,"DotEqual;" * "\x2250"
+    ,"dotminus;" * "\x2238"
+    ,"dotplus;" * "\x2214"
+    ,"dotsquare;" * "\x22A1"
+    ,"doublebarwedge;" * "\x2306"
+    ,"DoubleContourIntegral;" * "\x222F"
+    ,"DoubleDot;" * "\x00A8"
+    ,"DoubleDownArrow;" * "\x21D3"
+    ,"DoubleLeftArrow;" * "\x21D0"
+    ,"DoubleLeftRightArrow;" * "\x21D4"
+    ,"DoubleLeftTee;" * "\x2AE4"
+    ,"DoubleLongLeftArrow;" * "\x27F8"
+    ,"DoubleLongLeftRightArrow;" * "\x27FA"
+    ,"DoubleLongRightArrow;" * "\x27F9"
+    ,"DoubleRightArrow;" * "\x21D2"
+    ,"DoubleRightTee;" * "\x22A8"
+    ,"DoubleUpArrow;" * "\x21D1"
+    ,"DoubleUpDownArrow;" * "\x21D5"
+    ,"DoubleVerticalBar;" * "\x2225"
+    ,"DownArrow;" * "\x2193"
+    ,"downarrow;" * "\x2193"
+    ,"Downarrow;" * "\x21D3"
+    ,"DownArrowBar;" * "\x2913"
+    ,"DownArrowUpArrow;" * "\x21F5"
+    ,"DownBreve;" * "\x0311"
+    ,"downdownarrows;" * "\x21CA"
+    ,"downharpoonleft;" * "\x21C3"
+    ,"downharpoonright;" * "\x21C2"
+    ,"DownLeftRightVector;" * "\x2950"
+    ,"DownLeftTeeVector;" * "\x295E"
+    ,"DownLeftVector;" * "\x21BD"
+    ,"DownLeftVectorBar;" * "\x2956"
+    ,"DownRightTeeVector;" * "\x295F"
+    ,"DownRightVector;" * "\x21C1"
+    ,"DownRightVectorBar;" * "\x2957"
+    ,"DownTee;" * "\x22A4"
+    ,"DownTeeArrow;" * "\x21A7"
+    ,"drbkarow;" * "\x2910"
+    ,"drcorn;" * "\x231F"
+    ,"drcrop;" * "\x230C"
+    ,"Dscr;" * "\x1D49F"
+    ,"dscr;" * "\x1D4B9"
+    ,"DScy;" * "\x0405"
+    ,"dscy;" * "\x0455"
+    ,"dsol;" * "\x29F6"
+    ,"Dstrok;" * "\x0110"
+    ,"dstrok;" * "\x0111"
+    ,"dtdot;" * "\x22F1"
+    ,"dtri;" * "\x25BF"
+    ,"dtrif;" * "\x25BE"
+    ,"duarr;" * "\x21F5"
+    ,"duhar;" * "\x296F"
+    ,"dwangle;" * "\x29A6"
+    ,"DZcy;" * "\x040F"
+    ,"dzcy;" * "\x045F"
+    ,"dzigrarr;" * "\x27FF"
+    ,"Eacute" * "\x00C9"
+    ,"eacute" * "\x00E9"
+    ,"Eacute;" * "\x00C9"
+    ,"eacute;" * "\x00E9"
+    ,"easter;" * "\x2A6E"
+    ,"Ecaron;" * "\x011A"
+    ,"ecaron;" * "\x011B"
+    ,"ecir;" * "\x2256"
+    ,"Ecirc" * "\x00CA"
+    ,"ecirc" * "\x00EA"
+    ,"Ecirc;" * "\x00CA"
+    ,"ecirc;" * "\x00EA"
+    ,"ecolon;" * "\x2255"
+    ,"Ecy;" * "\x042D"
+    ,"ecy;" * "\x044D"
+    ,"eDDot;" * "\x2A77"
+    ,"Edot;" * "\x0116"
+    ,"edot;" * "\x0117"
+    ,"eDot;" * "\x2251"
+    ,"ee;" * "\x2147"
+    ,"efDot;" * "\x2252"
+    ,"Efr;" * "\x1D508"
+    ,"efr;" * "\x1D522"
+    ,"eg;" * "\x2A9A"
+    ,"Egrave" * "\x00C8"
+    ,"egrave" * "\x00E8"
+    ,"Egrave;" * "\x00C8"
+    ,"egrave;" * "\x00E8"
+    ,"egs;" * "\x2A96"
+    ,"egsdot;" * "\x2A98"
+    ,"el;" * "\x2A99"
+    ,"Element;" * "\x2208"
+    ,"elinters;" * "\x23E7"
+    ,"ell;" * "\x2113"
+    ,"els;" * "\x2A95"
+    ,"elsdot;" * "\x2A97"
+    ,"Emacr;" * "\x0112"
+    ,"emacr;" * "\x0113"
+    ,"empty;" * "\x2205"
+    ,"emptyset;" * "\x2205"
+    ,"EmptySmallSquare;" * "\x25FB"
+    ,"emptyv;" * "\x2205"
+    ,"EmptyVerySmallSquare;" * "\x25AB"
+    ,"emsp13;" * "\x2004"
+    ,"emsp14;" * "\x2005"
+    ,"emsp;" * "\x2003"
+    ,"ENG;" * "\x014A"
+    ,"eng;" * "\x014B"
+    ,"ensp;" * "\x2002"
+    ,"Eogon;" * "\x0118"
+    ,"eogon;" * "\x0119"
+    ,"Eopf;" * "\x1D53C"
+    ,"eopf;" * "\x1D556"
+    ,"epar;" * "\x22D5"
+    ,"eparsl;" * "\x29E3"
+    ,"eplus;" * "\x2A71"
+    ,"epsi;" * "\x03B5"
+    ,"Epsilon;" * "\x0395"
+    ,"epsilon;" * "\x03B5"
+    ,"epsiv;" * "\x03F5"
+    ,"eqcirc;" * "\x2256"
+    ,"eqcolon;" * "\x2255"
+    ,"eqsim;" * "\x2242"
+    ,"eqslantgtr;" * "\x2A96"
+    ,"eqslantless;" * "\x2A95"
+    ,"Equal;" * "\x2A75"
+    ,"equals;" * "\x003D"
+    ,"EqualTilde;" * "\x2242"
+    ,"equest;" * "\x225F"
+    ,"Equilibrium;" * "\x21CC"
+    ,"equiv;" * "\x2261"
+    ,"equivDD;" * "\x2A78"
+    ,"eqvparsl;" * "\x29E5"
+    ,"erarr;" * "\x2971"
+    ,"erDot;" * "\x2253"
+    ,"escr;" * "\x212F"
+    ,"Escr;" * "\x2130"
+    ,"esdot;" * "\x2250"
+    ,"esim;" * "\x2242"
+    ,"Esim;" * "\x2A73"
+    ,"Eta;" * "\x0397"
+    ,"eta;" * "\x03B7"
+    ,"ETH" * "\x00D0"
+    ,"eth" * "\x00F0"
+    ,"ETH;" * "\x00D0"
+    ,"eth;" * "\x00F0"
+    ,"Euml" * "\x00CB"
+    ,"euml" * "\x00EB"
+    ,"Euml;" * "\x00CB"
+    ,"euml;" * "\x00EB"
+    ,"euro;" * "\x20AC"
+    ,"excl;" * "\x0021"
+    ,"exist;" * "\x2203"
+    ,"Exists;" * "\x2203"
+    ,"expectation;" * "\x2130"
+    ,"ExponentialE;" * "\x2147"
+    ,"exponentiale;" * "\x2147"
+    ,"fallingdotseq;" * "\x2252"
+    ,"Fcy;" * "\x0424"
+    ,"fcy;" * "\x0444"
+    ,"female;" * "\x2640"
+    ,"ffilig;" * "\xFB03"
+    ,"fflig;" * "\xFB00"
+    ,"ffllig;" * "\xFB04"
+    ,"Ffr;" * "\x1D509"
+    ,"ffr;" * "\x1D523"
+    ,"filig;" * "\xFB01"
+    ,"FilledSmallSquare;" * "\x25FC"
+    ,"FilledVerySmallSquare;" * "\x25AA"
+    ,"fjlig;" * "\x0066\x006A"
+    ,"flat;" * "\x266D"
+    ,"fllig;" * "\xFB02"
+    ,"fltns;" * "\x25B1"
+    ,"fnof;" * "\x0192"
+    ,"Fopf;" * "\x1D53D"
+    ,"fopf;" * "\x1D557"
+    ,"ForAll;" * "\x2200"
+    ,"forall;" * "\x2200"
+    ,"fork;" * "\x22D4"
+    ,"forkv;" * "\x2AD9"
+    ,"Fouriertrf;" * "\x2131"
+    ,"fpartint;" * "\x2A0D"
+    ,"frac12" * "\x00BD"
+    ,"frac12;" * "\x00BD"
+    ,"frac13;" * "\x2153"
+    ,"frac14" * "\x00BC"
+    ,"frac14;" * "\x00BC"
+    ,"frac15;" * "\x2155"
+    ,"frac16;" * "\x2159"
+    ,"frac18;" * "\x215B"
+    ,"frac23;" * "\x2154"
+    ,"frac25;" * "\x2156"
+    ,"frac34" * "\x00BE"
+    ,"frac34;" * "\x00BE"
+    ,"frac35;" * "\x2157"
+    ,"frac38;" * "\x215C"
+    ,"frac45;" * "\x2158"
+    ,"frac56;" * "\x215A"
+    ,"frac58;" * "\x215D"
+    ,"frac78;" * "\x215E"
+    ,"frasl;" * "\x2044"
+    ,"frown;" * "\x2322"
+    ,"Fscr;" * "\x2131"
+    ,"fscr;" * "\x1D4BB"
+    ,"gacute;" * "\x01F5"
+    ,"Gamma;" * "\x0393"
+    ,"gamma;" * "\x03B3"
+    ,"Gammad;" * "\x03DC"
+    ,"gammad;" * "\x03DD"
+    ,"gap;" * "\x2A86"
+    ,"Gbreve;" * "\x011E"
+    ,"gbreve;" * "\x011F"
+    ,"Gcedil;" * "\x0122"
+    ,"Gcirc;" * "\x011C"
+    ,"gcirc;" * "\x011D"
+    ,"Gcy;" * "\x0413"
+    ,"gcy;" * "\x0433"
+    ,"Gdot;" * "\x0120"
+    ,"gdot;" * "\x0121"
+    ,"ge;" * "\x2265"
+    ,"gE;" * "\x2267"
+    ,"gel;" * "\x22DB"
+    ,"gEl;" * "\x2A8C"
+    ,"geq;" * "\x2265"
+    ,"geqq;" * "\x2267"
+    ,"geqslant;" * "\x2A7E"
+    ,"ges;" * "\x2A7E"
+    ,"gescc;" * "\x2AA9"
+    ,"gesdot;" * "\x2A80"
+    ,"gesdoto;" * "\x2A82"
+    ,"gesdotol;" * "\x2A84"
+    ,"gesl;" * "\x22DB\xFE00"
+    ,"gesles;" * "\x2A94"
+    ,"Gfr;" * "\x1D50A"
+    ,"gfr;" * "\x1D524"
+    ,"gg;" * "\x226B"
+    ,"Gg;" * "\x22D9"
+    ,"ggg;" * "\x22D9"
+    ,"gimel;" * "\x2137"
+    ,"GJcy;" * "\x0403"
+    ,"gjcy;" * "\x0453"
+    ,"gl;" * "\x2277"
+    ,"gla;" * "\x2AA5"
+    ,"glE;" * "\x2A92"
+    ,"glj;" * "\x2AA4"
+    ,"gnap;" * "\x2A8A"
+    ,"gnapprox;" * "\x2A8A"
+    ,"gnE;" * "\x2269"
+    ,"gne;" * "\x2A88"
+    ,"gneq;" * "\x2A88"
+    ,"gneqq;" * "\x2269"
+    ,"gnsim;" * "\x22E7"
+    ,"Gopf;" * "\x1D53E"
+    ,"gopf;" * "\x1D558"
+    ,"grave;" * "\x0060"
+    ,"GreaterEqual;" * "\x2265"
+    ,"GreaterEqualLess;" * "\x22DB"
+    ,"GreaterFullEqual;" * "\x2267"
+    ,"GreaterGreater;" * "\x2AA2"
+    ,"GreaterLess;" * "\x2277"
+    ,"GreaterSlantEqual;" * "\x2A7E"
+    ,"GreaterTilde;" * "\x2273"
+    ,"gscr;" * "\x210A"
+    ,"Gscr;" * "\x1D4A2"
+    ,"gsim;" * "\x2273"
+    ,"gsime;" * "\x2A8E"
+    ,"gsiml;" * "\x2A90"
+    ,"GT" * "\x003E"
+    ,"gt" * "\x003E"
+    ,"GT;" * "\x003E"
+    ,"gt;" * "\x003E"
+    ,"Gt;" * "\x226B"
+    ,"gtcc;" * "\x2AA7"
+    ,"gtcir;" * "\x2A7A"
+    ,"gtdot;" * "\x22D7"
+    ,"gtlPar;" * "\x2995"
+    ,"gtquest;" * "\x2A7C"
+    ,"gtrapprox;" * "\x2A86"
+    ,"gtrarr;" * "\x2978"
+    ,"gtrdot;" * "\x22D7"
+    ,"gtreqless;" * "\x22DB"
+    ,"gtreqqless;" * "\x2A8C"
+    ,"gtrless;" * "\x2277"
+    ,"gtrsim;" * "\x2273"
+    ,"gvertneqq;" * "\x2269\xFE00"
+    ,"gvnE;" * "\x2269\xFE00"
+    ,"Hacek;" * "\x02C7"
+    ,"hairsp;" * "\x200A"
+    ,"half;" * "\x00BD"
+    ,"hamilt;" * "\x210B"
+    ,"HARDcy;" * "\x042A"
+    ,"hardcy;" * "\x044A"
+    ,"harr;" * "\x2194"
+    ,"hArr;" * "\x21D4"
+    ,"harrcir;" * "\x2948"
+    ,"harrw;" * "\x21AD"
+    ,"Hat;" * "\x005E"
+    ,"hbar;" * "\x210F"
+    ,"Hcirc;" * "\x0124"
+    ,"hcirc;" * "\x0125"
+    ,"hearts;" * "\x2665"
+    ,"heartsuit;" * "\x2665"
+    ,"hellip;" * "\x2026"
+    ,"hercon;" * "\x22B9"
+    ,"Hfr;" * "\x210C"
+    ,"hfr;" * "\x1D525"
+    ,"HilbertSpace;" * "\x210B"
+    ,"hksearow;" * "\x2925"
+    ,"hkswarow;" * "\x2926"
+    ,"hoarr;" * "\x21FF"
+    ,"homtht;" * "\x223B"
+    ,"hookleftarrow;" * "\x21A9"
+    ,"hookrightarrow;" * "\x21AA"
+    ,"Hopf;" * "\x210D"
+    ,"hopf;" * "\x1D559"
+    ,"horbar;" * "\x2015"
+    ,"HorizontalLine;" * "\x2500"
+    ,"Hscr;" * "\x210B"
+    ,"hscr;" * "\x1D4BD"
+    ,"hslash;" * "\x210F"
+    ,"Hstrok;" * "\x0126"
+    ,"hstrok;" * "\x0127"
+    ,"HumpDownHump;" * "\x224E"
+    ,"HumpEqual;" * "\x224F"
+    ,"hybull;" * "\x2043"
+    ,"hyphen;" * "\x2010"
+    ,"Iacute" * "\x00CD"
+    ,"iacute" * "\x00ED"
+    ,"Iacute;" * "\x00CD"
+    ,"iacute;" * "\x00ED"
+    ,"ic;" * "\x2063"
+    ,"Icirc" * "\x00CE"
+    ,"icirc" * "\x00EE"
+    ,"Icirc;" * "\x00CE"
+    ,"icirc;" * "\x00EE"
+    ,"Icy;" * "\x0418"
+    ,"icy;" * "\x0438"
+    ,"Idot;" * "\x0130"
+    ,"IEcy;" * "\x0415"
+    ,"iecy;" * "\x0435"
+    ,"iexcl" * "\x00A1"
+    ,"iexcl;" * "\x00A1"
+    ,"iff;" * "\x21D4"
+    ,"Ifr;" * "\x2111"
+    ,"ifr;" * "\x1D526"
+    ,"Igrave" * "\x00CC"
+    ,"igrave" * "\x00EC"
+    ,"Igrave;" * "\x00CC"
+    ,"igrave;" * "\x00EC"
+    ,"ii;" * "\x2148"
+    ,"iiiint;" * "\x2A0C"
+    ,"iiint;" * "\x222D"
+    ,"iinfin;" * "\x29DC"
+    ,"iiota;" * "\x2129"
+    ,"IJlig;" * "\x0132"
+    ,"ijlig;" * "\x0133"
+    ,"Im;" * "\x2111"
+    ,"Imacr;" * "\x012A"
+    ,"imacr;" * "\x012B"
+    ,"image;" * "\x2111"
+    ,"ImaginaryI;" * "\x2148"
+    ,"imagline;" * "\x2110"
+    ,"imagpart;" * "\x2111"
+    ,"imath;" * "\x0131"
+    ,"imof;" * "\x22B7"
+    ,"imped;" * "\x01B5"
+    ,"Implies;" * "\x21D2"
+    ,"in;" * "\x2208"
+    ,"incare;" * "\x2105"
+    ,"infin;" * "\x221E"
+    ,"infintie;" * "\x29DD"
+    ,"inodot;" * "\x0131"
+    ,"int;" * "\x222B"
+    ,"Int;" * "\x222C"
+    ,"intcal;" * "\x22BA"
+    ,"integers;" * "\x2124"
+    ,"Integral;" * "\x222B"
+    ,"intercal;" * "\x22BA"
+    ,"Intersection;" * "\x22C2"
+    ,"intlarhk;" * "\x2A17"
+    ,"intprod;" * "\x2A3C"
+    ,"InvisibleComma;" * "\x2063"
+    ,"InvisibleTimes;" * "\x2062"
+    ,"IOcy;" * "\x0401"
+    ,"iocy;" * "\x0451"
+    ,"Iogon;" * "\x012E"
+    ,"iogon;" * "\x012F"
+    ,"Iopf;" * "\x1D540"
+    ,"iopf;" * "\x1D55A"
+    ,"Iota;" * "\x0399"
+    ,"iota;" * "\x03B9"
+    ,"iprod;" * "\x2A3C"
+    ,"iquest" * "\x00BF"
+    ,"iquest;" * "\x00BF"
+    ,"Iscr;" * "\x2110"
+    ,"iscr;" * "\x1D4BE"
+    ,"isin;" * "\x2208"
+    ,"isindot;" * "\x22F5"
+    ,"isinE;" * "\x22F9"
+    ,"isins;" * "\x22F4"
+    ,"isinsv;" * "\x22F3"
+    ,"isinv;" * "\x2208"
+    ,"it;" * "\x2062"
+    ,"Itilde;" * "\x0128"
+    ,"itilde;" * "\x0129"
+    ,"Iukcy;" * "\x0406"
+    ,"iukcy;" * "\x0456"
+    ,"Iuml" * "\x00CF"
+    ,"iuml" * "\x00EF"
+    ,"Iuml;" * "\x00CF"
+    ,"iuml;" * "\x00EF"
+    ,"Jcirc;" * "\x0134"
+    ,"jcirc;" * "\x0135"
+    ,"Jcy;" * "\x0419"
+    ,"jcy;" * "\x0439"
+    ,"Jfr;" * "\x1D50D"
+    ,"jfr;" * "\x1D527"
+    ,"jmath;" * "\x0237"
+    ,"Jopf;" * "\x1D541"
+    ,"jopf;" * "\x1D55B"
+    ,"Jscr;" * "\x1D4A5"
+    ,"jscr;" * "\x1D4BF"
+    ,"Jsercy;" * "\x0408"
+    ,"jsercy;" * "\x0458"
+    ,"Jukcy;" * "\x0404"
+    ,"jukcy;" * "\x0454"
+    ,"Kappa;" * "\x039A"
+    ,"kappa;" * "\x03BA"
+    ,"kappav;" * "\x03F0"
+    ,"Kcedil;" * "\x0136"
+    ,"kcedil;" * "\x0137"
+    ,"Kcy;" * "\x041A"
+    ,"kcy;" * "\x043A"
+    ,"Kfr;" * "\x1D50E"
+    ,"kfr;" * "\x1D528"
+    ,"kgreen;" * "\x0138"
+    ,"KHcy;" * "\x0425"
+    ,"khcy;" * "\x0445"
+    ,"KJcy;" * "\x040C"
+    ,"kjcy;" * "\x045C"
+    ,"Kopf;" * "\x1D542"
+    ,"kopf;" * "\x1D55C"
+    ,"Kscr;" * "\x1D4A6"
+    ,"kscr;" * "\x1D4C0"
+    ,"lAarr;" * "\x21DA"
+    ,"Lacute;" * "\x0139"
+    ,"lacute;" * "\x013A"
+    ,"laemptyv;" * "\x29B4"
+    ,"lagran;" * "\x2112"
+    ,"Lambda;" * "\x039B"
+    ,"lambda;" * "\x03BB"
+    ,"lang;" * "\x27E8"
+    ,"Lang;" * "\x27EA"
+    ,"langd;" * "\x2991"
+    ,"langle;" * "\x27E8"
+    ,"lap;" * "\x2A85"
+    ,"Laplacetrf;" * "\x2112"
+    ,"laquo" * "\x00AB"
+    ,"laquo;" * "\x00AB"
+    ,"larr;" * "\x2190"
+    ,"Larr;" * "\x219E"
+    ,"lArr;" * "\x21D0"
+    ,"larrb;" * "\x21E4"
+    ,"larrbfs;" * "\x291F"
+    ,"larrfs;" * "\x291D"
+    ,"larrhk;" * "\x21A9"
+    ,"larrlp;" * "\x21AB"
+    ,"larrpl;" * "\x2939"
+    ,"larrsim;" * "\x2973"
+    ,"larrtl;" * "\x21A2"
+    ,"lat;" * "\x2AAB"
+    ,"latail;" * "\x2919"
+    ,"lAtail;" * "\x291B"
+    ,"late;" * "\x2AAD"
+    ,"lates;" * "\x2AAD\xFE00"
+    ,"lbarr;" * "\x290C"
+    ,"lBarr;" * "\x290E"
+    ,"lbbrk;" * "\x2772"
+    ,"lbrace;" * "\x007B"
+    ,"lbrack;" * "\x005B"
+    ,"lbrke;" * "\x298B"
+    ,"lbrksld;" * "\x298F"
+    ,"lbrkslu;" * "\x298D"
+    ,"Lcaron;" * "\x013D"
+    ,"lcaron;" * "\x013E"
+    ,"Lcedil;" * "\x013B"
+    ,"lcedil;" * "\x013C"
+    ,"lceil;" * "\x2308"
+    ,"lcub;" * "\x007B"
+    ,"Lcy;" * "\x041B"
+    ,"lcy;" * "\x043B"
+    ,"ldca;" * "\x2936"
+    ,"ldquo;" * "\x201C"
+    ,"ldquor;" * "\x201E"
+    ,"ldrdhar;" * "\x2967"
+    ,"ldrushar;" * "\x294B"
+    ,"ldsh;" * "\x21B2"
+    ,"le;" * "\x2264"
+    ,"lE;" * "\x2266"
+    ,"LeftAngleBracket;" * "\x27E8"
+    ,"LeftArrow;" * "\x2190"
+    ,"leftarrow;" * "\x2190"
+    ,"Leftarrow;" * "\x21D0"
+    ,"LeftArrowBar;" * "\x21E4"
+    ,"LeftArrowRightArrow;" * "\x21C6"
+    ,"leftarrowtail;" * "\x21A2"
+    ,"LeftCeiling;" * "\x2308"
+    ,"LeftDoubleBracket;" * "\x27E6"
+    ,"LeftDownTeeVector;" * "\x2961"
+    ,"LeftDownVector;" * "\x21C3"
+    ,"LeftDownVectorBar;" * "\x2959"
+    ,"LeftFloor;" * "\x230A"
+    ,"leftharpoondown;" * "\x21BD"
+    ,"leftharpoonup;" * "\x21BC"
+    ,"leftleftarrows;" * "\x21C7"
+    ,"LeftRightArrow;" * "\x2194"
+    ,"leftrightarrow;" * "\x2194"
+    ,"Leftrightarrow;" * "\x21D4"
+    ,"leftrightarrows;" * "\x21C6"
+    ,"leftrightharpoons;" * "\x21CB"
+    ,"leftrightsquigarrow;" * "\x21AD"
+    ,"LeftRightVector;" * "\x294E"
+    ,"LeftTee;" * "\x22A3"
+    ,"LeftTeeArrow;" * "\x21A4"
+    ,"LeftTeeVector;" * "\x295A"
+    ,"leftthreetimes;" * "\x22CB"
+    ,"LeftTriangle;" * "\x22B2"
+    ,"LeftTriangleBar;" * "\x29CF"
+    ,"LeftTriangleEqual;" * "\x22B4"
+    ,"LeftUpDownVector;" * "\x2951"
+    ,"LeftUpTeeVector;" * "\x2960"
+    ,"LeftUpVector;" * "\x21BF"
+    ,"LeftUpVectorBar;" * "\x2958"
+    ,"LeftVector;" * "\x21BC"
+    ,"LeftVectorBar;" * "\x2952"
+    ,"leg;" * "\x22DA"
+    ,"lEg;" * "\x2A8B"
+    ,"leq;" * "\x2264"
+    ,"leqq;" * "\x2266"
+    ,"leqslant;" * "\x2A7D"
+    ,"les;" * "\x2A7D"
+    ,"lescc;" * "\x2AA8"
+    ,"lesdot;" * "\x2A7F"
+    ,"lesdoto;" * "\x2A81"
+    ,"lesdotor;" * "\x2A83"
+    ,"lesg;" * "\x22DA\xFE00"
+    ,"lesges;" * "\x2A93"
+    ,"lessapprox;" * "\x2A85"
+    ,"lessdot;" * "\x22D6"
+    ,"lesseqgtr;" * "\x22DA"
+    ,"lesseqqgtr;" * "\x2A8B"
+    ,"LessEqualGreater;" * "\x22DA"
+    ,"LessFullEqual;" * "\x2266"
+    ,"LessGreater;" * "\x2276"
+    ,"lessgtr;" * "\x2276"
+    ,"LessLess;" * "\x2AA1"
+    ,"lesssim;" * "\x2272"
+    ,"LessSlantEqual;" * "\x2A7D"
+    ,"LessTilde;" * "\x2272"
+    ,"lfisht;" * "\x297C"
+    ,"lfloor;" * "\x230A"
+    ,"Lfr;" * "\x1D50F"
+    ,"lfr;" * "\x1D529"
+    ,"lg;" * "\x2276"
+    ,"lgE;" * "\x2A91"
+    ,"lHar;" * "\x2962"
+    ,"lhard;" * "\x21BD"
+    ,"lharu;" * "\x21BC"
+    ,"lharul;" * "\x296A"
+    ,"lhblk;" * "\x2584"
+    ,"LJcy;" * "\x0409"
+    ,"ljcy;" * "\x0459"
+    ,"ll;" * "\x226A"
+    ,"Ll;" * "\x22D8"
+    ,"llarr;" * "\x21C7"
+    ,"llcorner;" * "\x231E"
+    ,"Lleftarrow;" * "\x21DA"
+    ,"llhard;" * "\x296B"
+    ,"lltri;" * "\x25FA"
+    ,"Lmidot;" * "\x013F"
+    ,"lmidot;" * "\x0140"
+    ,"lmoust;" * "\x23B0"
+    ,"lmoustache;" * "\x23B0"
+    ,"lnap;" * "\x2A89"
+    ,"lnapprox;" * "\x2A89"
+    ,"lnE;" * "\x2268"
+    ,"lne;" * "\x2A87"
+    ,"lneq;" * "\x2A87"
+    ,"lneqq;" * "\x2268"
+    ,"lnsim;" * "\x22E6"
+    ,"loang;" * "\x27EC"
+    ,"loarr;" * "\x21FD"
+    ,"lobrk;" * "\x27E6"
+    ,"LongLeftArrow;" * "\x27F5"
+    ,"longleftarrow;" * "\x27F5"
+    ,"Longleftarrow;" * "\x27F8"
+    ,"LongLeftRightArrow;" * "\x27F7"
+    ,"longleftrightarrow;" * "\x27F7"
+    ,"Longleftrightarrow;" * "\x27FA"
+    ,"longmapsto;" * "\x27FC"
+    ,"LongRightArrow;" * "\x27F6"
+    ,"longrightarrow;" * "\x27F6"
+    ,"Longrightarrow;" * "\x27F9"
+    ,"looparrowleft;" * "\x21AB"
+    ,"looparrowright;" * "\x21AC"
+    ,"lopar;" * "\x2985"
+    ,"Lopf;" * "\x1D543"
+    ,"lopf;" * "\x1D55D"
+    ,"loplus;" * "\x2A2D"
+    ,"lotimes;" * "\x2A34"
+    ,"lowast;" * "\x2217"
+    ,"lowbar;" * "\x005F"
+    ,"LowerLeftArrow;" * "\x2199"
+    ,"LowerRightArrow;" * "\x2198"
+    ,"loz;" * "\x25CA"
+    ,"lozenge;" * "\x25CA"
+    ,"lozf;" * "\x29EB"
+    ,"lpar;" * "\x0028"
+    ,"lparlt;" * "\x2993"
+    ,"lrarr;" * "\x21C6"
+    ,"lrcorner;" * "\x231F"
+    ,"lrhar;" * "\x21CB"
+    ,"lrhard;" * "\x296D"
+    ,"lrm;" * "\x200E"
+    ,"lrtri;" * "\x22BF"
+    ,"lsaquo;" * "\x2039"
+    ,"Lscr;" * "\x2112"
+    ,"lscr;" * "\x1D4C1"
+    ,"Lsh;" * "\x21B0"
+    ,"lsh;" * "\x21B0"
+    ,"lsim;" * "\x2272"
+    ,"lsime;" * "\x2A8D"
+    ,"lsimg;" * "\x2A8F"
+    ,"lsqb;" * "\x005B"
+    ,"lsquo;" * "\x2018"
+    ,"lsquor;" * "\x201A"
+    ,"Lstrok;" * "\x0141"
+    ,"lstrok;" * "\x0142"
+    ,"LT" * "\x003C"
+    ,"lt" * "\x003C"
+    ,"LT;" * "\x003C"
+    ,"lt;" * "\x003C"
+    ,"Lt;" * "\x226A"
+    ,"ltcc;" * "\x2AA6"
+    ,"ltcir;" * "\x2A79"
+    ,"ltdot;" * "\x22D6"
+    ,"lthree;" * "\x22CB"
+    ,"ltimes;" * "\x22C9"
+    ,"ltlarr;" * "\x2976"
+    ,"ltquest;" * "\x2A7B"
+    ,"ltri;" * "\x25C3"
+    ,"ltrie;" * "\x22B4"
+    ,"ltrif;" * "\x25C2"
+    ,"ltrPar;" * "\x2996"
+    ,"lurdshar;" * "\x294A"
+    ,"luruhar;" * "\x2966"
+    ,"lvertneqq;" * "\x2268\xFE00"
+    ,"lvnE;" * "\x2268\xFE00"
+    ,"macr" * "\x00AF"
+    ,"macr;" * "\x00AF"
+    ,"male;" * "\x2642"
+    ,"malt;" * "\x2720"
+    ,"maltese;" * "\x2720"
+    ,"map;" * "\x21A6"
+    ,"Map;" * "\x2905"
+    ,"mapsto;" * "\x21A6"
+    ,"mapstodown;" * "\x21A7"
+    ,"mapstoleft;" * "\x21A4"
+    ,"mapstoup;" * "\x21A5"
+    ,"marker;" * "\x25AE"
+    ,"mcomma;" * "\x2A29"
+    ,"Mcy;" * "\x041C"
+    ,"mcy;" * "\x043C"
+    ,"mdash;" * "\x2014"
+    ,"mDDot;" * "\x223A"
+    ,"measuredangle;" * "\x2221"
+    ,"MediumSpace;" * "\x205F"
+    ,"Mellintrf;" * "\x2133"
+    ,"Mfr;" * "\x1D510"
+    ,"mfr;" * "\x1D52A"
+    ,"mho;" * "\x2127"
+    ,"micro" * "\x00B5"
+    ,"micro;" * "\x00B5"
+    ,"mid;" * "\x2223"
+    ,"midast;" * "\x002A"
+    ,"midcir;" * "\x2AF0"
+    ,"middot" * "\x00B7"
+    ,"middot;" * "\x00B7"
+    ,"minus;" * "\x2212"
+    ,"minusb;" * "\x229F"
+    ,"minusd;" * "\x2238"
+    ,"minusdu;" * "\x2A2A"
+    ,"MinusPlus;" * "\x2213"
+    ,"mlcp;" * "\x2ADB"
+    ,"mldr;" * "\x2026"
+    ,"mnplus;" * "\x2213"
+    ,"models;" * "\x22A7"
+    ,"Mopf;" * "\x1D544"
+    ,"mopf;" * "\x1D55E"
+    ,"mp;" * "\x2213"
+    ,"Mscr;" * "\x2133"
+    ,"mscr;" * "\x1D4C2"
+    ,"mstpos;" * "\x223E"
+    ,"Mu;" * "\x039C"
+    ,"mu;" * "\x03BC"
+    ,"multimap;" * "\x22B8"
+    ,"mumap;" * "\x22B8"
+    ,"nabla;" * "\x2207"
+    ,"Nacute;" * "\x0143"
+    ,"nacute;" * "\x0144"
+    ,"nang;" * "\x2220\x20D2"
+    ,"nap;" * "\x2249"
+    ,"napE;" * "\x2A70\x0338"
+    ,"napid;" * "\x224B\x0338"
+    ,"napos;" * "\x0149"
+    ,"napprox;" * "\x2249"
+    ,"natur;" * "\x266E"
+    ,"natural;" * "\x266E"
+    ,"naturals;" * "\x2115"
+    ,"nbsp" * "\x00A0"
+    ,"nbsp;" * "\x00A0"
+    ,"nbump;" * "\x224E\x0338"
+    ,"nbumpe;" * "\x224F\x0338"
+    ,"ncap;" * "\x2A43"
+    ,"Ncaron;" * "\x0147"
+    ,"ncaron;" * "\x0148"
+    ,"Ncedil;" * "\x0145"
+    ,"ncedil;" * "\x0146"
+    ,"ncong;" * "\x2247"
+    ,"ncongdot;" * "\x2A6D\x0338"
+    ,"ncup;" * "\x2A42"
+    ,"Ncy;" * "\x041D"
+    ,"ncy;" * "\x043D"
+    ,"ndash;" * "\x2013"
+    ,"ne;" * "\x2260"
+    ,"nearhk;" * "\x2924"
+    ,"nearr;" * "\x2197"
+    ,"neArr;" * "\x21D7"
+    ,"nearrow;" * "\x2197"
+    ,"nedot;" * "\x2250\x0338"
+    ,"NegativeMediumSpace;" * "\x200B"
+    ,"NegativeThickSpace;" * "\x200B"
+    ,"NegativeThinSpace;" * "\x200B"
+    ,"NegativeVeryThinSpace;" * "\x200B"
+    ,"nequiv;" * "\x2262"
+    ,"nesear;" * "\x2928"
+    ,"nesim;" * "\x2242\x0338"
+    ,"NestedGreaterGreater;" * "\x226B"
+    ,"NestedLessLess;" * "\x226A"
+    ,"NewLine;" * "\x000A"
+    ,"nexist;" * "\x2204"
+    ,"nexists;" * "\x2204"
+    ,"Nfr;" * "\x1D511"
+    ,"nfr;" * "\x1D52B"
+    ,"ngE;" * "\x2267\x0338"
+    ,"nge;" * "\x2271"
+    ,"ngeq;" * "\x2271"
+    ,"ngeqq;" * "\x2267\x0338"
+    ,"ngeqslant;" * "\x2A7E\x0338"
+    ,"nges;" * "\x2A7E\x0338"
+    ,"nGg;" * "\x22D9\x0338"
+    ,"ngsim;" * "\x2275"
+    ,"nGt;" * "\x226B\x20D2"
+    ,"ngt;" * "\x226F"
+    ,"ngtr;" * "\x226F"
+    ,"nGtv;" * "\x226B\x0338"
+    ,"nharr;" * "\x21AE"
+    ,"nhArr;" * "\x21CE"
+    ,"nhpar;" * "\x2AF2"
+    ,"ni;" * "\x220B"
+    ,"nis;" * "\x22FC"
+    ,"nisd;" * "\x22FA"
+    ,"niv;" * "\x220B"
+    ,"NJcy;" * "\x040A"
+    ,"njcy;" * "\x045A"
+    ,"nlarr;" * "\x219A"
+    ,"nlArr;" * "\x21CD"
+    ,"nldr;" * "\x2025"
+    ,"nlE;" * "\x2266\x0338"
+    ,"nle;" * "\x2270"
+    ,"nleftarrow;" * "\x219A"
+    ,"nLeftarrow;" * "\x21CD"
+    ,"nleftrightarrow;" * "\x21AE"
+    ,"nLeftrightarrow;" * "\x21CE"
+    ,"nleq;" * "\x2270"
+    ,"nleqq;" * "\x2266\x0338"
+    ,"nleqslant;" * "\x2A7D\x0338"
+    ,"nles;" * "\x2A7D\x0338"
+    ,"nless;" * "\x226E"
+    ,"nLl;" * "\x22D8\x0338"
+    ,"nlsim;" * "\x2274"
+    ,"nLt;" * "\x226A\x20D2"
+    ,"nlt;" * "\x226E"
+    ,"nltri;" * "\x22EA"
+    ,"nltrie;" * "\x22EC"
+    ,"nLtv;" * "\x226A\x0338"
+    ,"nmid;" * "\x2224"
+    ,"NoBreak;" * "\x2060"
+    ,"NonBreakingSpace;" * "\x00A0"
+    ,"Nopf;" * "\x2115"
+    ,"nopf;" * "\x1D55F"
+    ,"not" * "\x00AC"
+    ,"not;" * "\x00AC"
+    ,"Not;" * "\x2AEC"
+    ,"NotCongruent;" * "\x2262"
+    ,"NotCupCap;" * "\x226D"
+    ,"NotDoubleVerticalBar;" * "\x2226"
+    ,"NotElement;" * "\x2209"
+    ,"NotEqual;" * "\x2260"
+    ,"NotEqualTilde;" * "\x2242\x0338"
+    ,"NotExists;" * "\x2204"
+    ,"NotGreater;" * "\x226F"
+    ,"NotGreaterEqual;" * "\x2271"
+    ,"NotGreaterFullEqual;" * "\x2267\x0338"
+    ,"NotGreaterGreater;" * "\x226B\x0338"
+    ,"NotGreaterLess;" * "\x2279"
+    ,"NotGreaterSlantEqual;" * "\x2A7E\x0338"
+    ,"NotGreaterTilde;" * "\x2275"
+    ,"NotHumpDownHump;" * "\x224E\x0338"
+    ,"NotHumpEqual;" * "\x224F\x0338"
+    ,"notin;" * "\x2209"
+    ,"notindot;" * "\x22F5\x0338"
+    ,"notinE;" * "\x22F9\x0338"
+    ,"notinva;" * "\x2209"
+    ,"notinvb;" * "\x22F7"
+    ,"notinvc;" * "\x22F6"
+    ,"NotLeftTriangle;" * "\x22EA"
+    ,"NotLeftTriangleBar;" * "\x29CF\x0338"
+    ,"NotLeftTriangleEqual;" * "\x22EC"
+    ,"NotLess;" * "\x226E"
+    ,"NotLessEqual;" * "\x2270"
+    ,"NotLessGreater;" * "\x2278"
+    ,"NotLessLess;" * "\x226A\x0338"
+    ,"NotLessSlantEqual;" * "\x2A7D\x0338"
+    ,"NotLessTilde;" * "\x2274"
+    ,"NotNestedGreaterGreater;" * "\x2AA2\x0338"
+    ,"NotNestedLessLess;" * "\x2AA1\x0338"
+    ,"notni;" * "\x220C"
+    ,"notniva;" * "\x220C"
+    ,"notnivb;" * "\x22FE"
+    ,"notnivc;" * "\x22FD"
+    ,"NotPrecedes;" * "\x2280"
+    ,"NotPrecedesEqual;" * "\x2AAF\x0338"
+    ,"NotPrecedesSlantEqual;" * "\x22E0"
+    ,"NotReverseElement;" * "\x220C"
+    ,"NotRightTriangle;" * "\x22EB"
+    ,"NotRightTriangleBar;" * "\x29D0\x0338"
+    ,"NotRightTriangleEqual;" * "\x22ED"
+    ,"NotSquareSubset;" * "\x228F\x0338"
+    ,"NotSquareSubsetEqual;" * "\x22E2"
+    ,"NotSquareSuperset;" * "\x2290\x0338"
+    ,"NotSquareSupersetEqual;" * "\x22E3"
+    ,"NotSubset;" * "\x2282\x20D2"
+    ,"NotSubsetEqual;" * "\x2288"
+    ,"NotSucceeds;" * "\x2281"
+    ,"NotSucceedsEqual;" * "\x2AB0\x0338"
+    ,"NotSucceedsSlantEqual;" * "\x22E1"
+    ,"NotSucceedsTilde;" * "\x227F\x0338"
+    ,"NotSuperset;" * "\x2283\x20D2"
+    ,"NotSupersetEqual;" * "\x2289"
+    ,"NotTilde;" * "\x2241"
+    ,"NotTildeEqual;" * "\x2244"
+    ,"NotTildeFullEqual;" * "\x2247"
+    ,"NotTildeTilde;" * "\x2249"
+    ,"NotVerticalBar;" * "\x2224"
+    ,"npar;" * "\x2226"
+    ,"nparallel;" * "\x2226"
+    ,"nparsl;" * "\x2AFD\x20E5"
+    ,"npart;" * "\x2202\x0338"
+    ,"npolint;" * "\x2A14"
+    ,"npr;" * "\x2280"
+    ,"nprcue;" * "\x22E0"
+    ,"npre;" * "\x2AAF\x0338"
+    ,"nprec;" * "\x2280"
+    ,"npreceq;" * "\x2AAF\x0338"
+    ,"nrarr;" * "\x219B"
+    ,"nrArr;" * "\x21CF"
+    ,"nrarrc;" * "\x2933\x0338"
+    ,"nrarrw;" * "\x219D\x0338"
+    ,"nrightarrow;" * "\x219B"
+    ,"nRightarrow;" * "\x21CF"
+    ,"nrtri;" * "\x22EB"
+    ,"nrtrie;" * "\x22ED"
+    ,"nsc;" * "\x2281"
+    ,"nsccue;" * "\x22E1"
+    ,"nsce;" * "\x2AB0\x0338"
+    ,"Nscr;" * "\x1D4A9"
+    ,"nscr;" * "\x1D4C3"
+    ,"nshortmid;" * "\x2224"
+    ,"nshortparallel;" * "\x2226"
+    ,"nsim;" * "\x2241"
+    ,"nsime;" * "\x2244"
+    ,"nsimeq;" * "\x2244"
+    ,"nsmid;" * "\x2224"
+    ,"nspar;" * "\x2226"
+    ,"nsqsube;" * "\x22E2"
+    ,"nsqsupe;" * "\x22E3"
+    ,"nsub;" * "\x2284"
+    ,"nsube;" * "\x2288"
+    ,"nsubE;" * "\x2AC5\x0338"
+    ,"nsubset;" * "\x2282\x20D2"
+    ,"nsubseteq;" * "\x2288"
+    ,"nsubseteqq;" * "\x2AC5\x0338"
+    ,"nsucc;" * "\x2281"
+    ,"nsucceq;" * "\x2AB0\x0338"
+    ,"nsup;" * "\x2285"
+    ,"nsupe;" * "\x2289"
+    ,"nsupE;" * "\x2AC6\x0338"
+    ,"nsupset;" * "\x2283\x20D2"
+    ,"nsupseteq;" * "\x2289"
+    ,"nsupseteqq;" * "\x2AC6\x0338"
+    ,"ntgl;" * "\x2279"
+    ,"Ntilde" * "\x00D1"
+    ,"ntilde" * "\x00F1"
+    ,"Ntilde;" * "\x00D1"
+    ,"ntilde;" * "\x00F1"
+    ,"ntlg;" * "\x2278"
+    ,"ntriangleleft;" * "\x22EA"
+    ,"ntrianglelefteq;" * "\x22EC"
+    ,"ntriangleright;" * "\x22EB"
+    ,"ntrianglerighteq;" * "\x22ED"
+    ,"Nu;" * "\x039D"
+    ,"nu;" * "\x03BD"
+    ,"num;" * "\x0023"
+    ,"numero;" * "\x2116"
+    ,"numsp;" * "\x2007"
+    ,"nvap;" * "\x224D\x20D2"
+    ,"nvdash;" * "\x22AC"
+    ,"nvDash;" * "\x22AD"
+    ,"nVdash;" * "\x22AE"
+    ,"nVDash;" * "\x22AF"
+    ,"nvge;" * "\x2265\x20D2"
+    ,"nvgt;" * "\x003E\x20D2"
+    ,"nvHarr;" * "\x2904"
+    ,"nvinfin;" * "\x29DE"
+    ,"nvlArr;" * "\x2902"
+    ,"nvle;" * "\x2264\x20D2"
+    ,"nvlt;" * "\x003C\x20D2"
+    ,"nvltrie;" * "\x22B4\x20D2"
+    ,"nvrArr;" * "\x2903"
+    ,"nvrtrie;" * "\x22B5\x20D2"
+    ,"nvsim;" * "\x223C\x20D2"
+    ,"nwarhk;" * "\x2923"
+    ,"nwarr;" * "\x2196"
+    ,"nwArr;" * "\x21D6"
+    ,"nwarrow;" * "\x2196"
+    ,"nwnear;" * "\x2927"
+    ,"Oacute" * "\x00D3"
+    ,"oacute" * "\x00F3"
+    ,"Oacute;" * "\x00D3"
+    ,"oacute;" * "\x00F3"
+    ,"oast;" * "\x229B"
+    ,"ocir;" * "\x229A"
+    ,"Ocirc" * "\x00D4"
+    ,"ocirc" * "\x00F4"
+    ,"Ocirc;" * "\x00D4"
+    ,"ocirc;" * "\x00F4"
+    ,"Ocy;" * "\x041E"
+    ,"ocy;" * "\x043E"
+    ,"odash;" * "\x229D"
+    ,"Odblac;" * "\x0150"
+    ,"odblac;" * "\x0151"
+    ,"odiv;" * "\x2A38"
+    ,"odot;" * "\x2299"
+    ,"odsold;" * "\x29BC"
+    ,"OElig;" * "\x0152"
+    ,"oelig;" * "\x0153"
+    ,"ofcir;" * "\x29BF"
+    ,"Ofr;" * "\x1D512"
+    ,"ofr;" * "\x1D52C"
+    ,"ogon;" * "\x02DB"
+    ,"Ograve" * "\x00D2"
+    ,"ograve" * "\x00F2"
+    ,"Ograve;" * "\x00D2"
+    ,"ograve;" * "\x00F2"
+    ,"ogt;" * "\x29C1"
+    ,"ohbar;" * "\x29B5"
+    ,"ohm;" * "\x03A9"
+    ,"oint;" * "\x222E"
+    ,"olarr;" * "\x21BA"
+    ,"olcir;" * "\x29BE"
+    ,"olcross;" * "\x29BB"
+    ,"oline;" * "\x203E"
+    ,"olt;" * "\x29C0"
+    ,"Omacr;" * "\x014C"
+    ,"omacr;" * "\x014D"
+    ,"Omega;" * "\x03A9"
+    ,"omega;" * "\x03C9"
+    ,"Omicron;" * "\x039F"
+    ,"omicron;" * "\x03BF"
+    ,"omid;" * "\x29B6"
+    ,"ominus;" * "\x2296"
+    ,"Oopf;" * "\x1D546"
+    ,"oopf;" * "\x1D560"
+    ,"opar;" * "\x29B7"
+    ,"OpenCurlyDoubleQuote;" * "\x201C"
+    ,"OpenCurlyQuote;" * "\x2018"
+    ,"operp;" * "\x29B9"
+    ,"oplus;" * "\x2295"
+    ,"or;" * "\x2228"
+    ,"Or;" * "\x2A54"
+    ,"orarr;" * "\x21BB"
+    ,"ord;" * "\x2A5D"
+    ,"order;" * "\x2134"
+    ,"orderof;" * "\x2134"
+    ,"ordf" * "\x00AA"
+    ,"ordf;" * "\x00AA"
+    ,"ordm" * "\x00BA"
+    ,"ordm;" * "\x00BA"
+    ,"origof;" * "\x22B6"
+    ,"oror;" * "\x2A56"
+    ,"orslope;" * "\x2A57"
+    ,"orv;" * "\x2A5B"
+    ,"oS;" * "\x24C8"
+    ,"oscr;" * "\x2134"
+    ,"Oscr;" * "\x1D4AA"
+    ,"Oslash" * "\x00D8"
+    ,"oslash" * "\x00F8"
+    ,"Oslash;" * "\x00D8"
+    ,"oslash;" * "\x00F8"
+    ,"osol;" * "\x2298"
+    ,"Otilde" * "\x00D5"
+    ,"otilde" * "\x00F5"
+    ,"Otilde;" * "\x00D5"
+    ,"otilde;" * "\x00F5"
+    ,"otimes;" * "\x2297"
+    ,"Otimes;" * "\x2A37"
+    ,"otimesas;" * "\x2A36"
+    ,"Ouml" * "\x00D6"
+    ,"ouml" * "\x00F6"
+    ,"Ouml;" * "\x00D6"
+    ,"ouml;" * "\x00F6"
+    ,"ovbar;" * "\x233D"
+    ,"OverBar;" * "\x203E"
+    ,"OverBrace;" * "\x23DE"
+    ,"OverBracket;" * "\x23B4"
+    ,"OverParenthesis;" * "\x23DC"
+    ,"par;" * "\x2225"
+    ,"para" * "\x00B6"
+    ,"para;" * "\x00B6"
+    ,"parallel;" * "\x2225"
+    ,"parsim;" * "\x2AF3"
+    ,"parsl;" * "\x2AFD"
+    ,"part;" * "\x2202"
+    ,"PartialD;" * "\x2202"
+    ,"Pcy;" * "\x041F"
+    ,"pcy;" * "\x043F"
+    ,"percnt;" * "\x0025"
+    ,"period;" * "\x002E"
+    ,"permil;" * "\x2030"
+    ,"perp;" * "\x22A5"
+    ,"pertenk;" * "\x2031"
+    ,"Pfr;" * "\x1D513"
+    ,"pfr;" * "\x1D52D"
+    ,"Phi;" * "\x03A6"
+    ,"phi;" * "\x03C6"
+    ,"phiv;" * "\x03D5"
+    ,"phmmat;" * "\x2133"
+    ,"phone;" * "\x260E"
+    ,"Pi;" * "\x03A0"
+    ,"pi;" * "\x03C0"
+    ,"pitchfork;" * "\x22D4"
+    ,"piv;" * "\x03D6"
+    ,"planck;" * "\x210F"
+    ,"planckh;" * "\x210E"
+    ,"plankv;" * "\x210F"
+    ,"plus;" * "\x002B"
+    ,"plusacir;" * "\x2A23"
+    ,"plusb;" * "\x229E"
+    ,"pluscir;" * "\x2A22"
+    ,"plusdo;" * "\x2214"
+    ,"plusdu;" * "\x2A25"
+    ,"pluse;" * "\x2A72"
+    ,"PlusMinus;" * "\x00B1"
+    ,"plusmn" * "\x00B1"
+    ,"plusmn;" * "\x00B1"
+    ,"plussim;" * "\x2A26"
+    ,"plustwo;" * "\x2A27"
+    ,"pm;" * "\x00B1"
+    ,"Poincareplane;" * "\x210C"
+    ,"pointint;" * "\x2A15"
+    ,"Popf;" * "\x2119"
+    ,"popf;" * "\x1D561"
+    ,"pound" * "\x00A3"
+    ,"pound;" * "\x00A3"
+    ,"pr;" * "\x227A"
+    ,"Pr;" * "\x2ABB"
+    ,"prap;" * "\x2AB7"
+    ,"prcue;" * "\x227C"
+    ,"pre;" * "\x2AAF"
+    ,"prE;" * "\x2AB3"
+    ,"prec;" * "\x227A"
+    ,"precapprox;" * "\x2AB7"
+    ,"preccurlyeq;" * "\x227C"
+    ,"Precedes;" * "\x227A"
+    ,"PrecedesEqual;" * "\x2AAF"
+    ,"PrecedesSlantEqual;" * "\x227C"
+    ,"PrecedesTilde;" * "\x227E"
+    ,"preceq;" * "\x2AAF"
+    ,"precnapprox;" * "\x2AB9"
+    ,"precneqq;" * "\x2AB5"
+    ,"precnsim;" * "\x22E8"
+    ,"precsim;" * "\x227E"
+    ,"prime;" * "\x2032"
+    ,"Prime;" * "\x2033"
+    ,"primes;" * "\x2119"
+    ,"prnap;" * "\x2AB9"
+    ,"prnE;" * "\x2AB5"
+    ,"prnsim;" * "\x22E8"
+    ,"prod;" * "\x220F"
+    ,"Product;" * "\x220F"
+    ,"profalar;" * "\x232E"
+    ,"profline;" * "\x2312"
+    ,"profsurf;" * "\x2313"
+    ,"prop;" * "\x221D"
+    ,"Proportion;" * "\x2237"
+    ,"Proportional;" * "\x221D"
+    ,"propto;" * "\x221D"
+    ,"prsim;" * "\x227E"
+    ,"prurel;" * "\x22B0"
+    ,"Pscr;" * "\x1D4AB"
+    ,"pscr;" * "\x1D4C5"
+    ,"Psi;" * "\x03A8"
+    ,"psi;" * "\x03C8"
+    ,"puncsp;" * "\x2008"
+    ,"Qfr;" * "\x1D514"
+    ,"qfr;" * "\x1D52E"
+    ,"qint;" * "\x2A0C"
+    ,"Qopf;" * "\x211A"
+    ,"qopf;" * "\x1D562"
+    ,"qprime;" * "\x2057"
+    ,"Qscr;" * "\x1D4AC"
+    ,"qscr;" * "\x1D4C6"
+    ,"quaternions;" * "\x210D"
+    ,"quatint;" * "\x2A16"
+    ,"quest;" * "\x003F"
+    ,"questeq;" * "\x225F"
+    ,"QUOT" * "\x0022"
+    ,"quot" * "\x0022"
+    ,"QUOT;" * "\x0022"
+    ,"quot;" * "\x0022"
+    ,"rAarr;" * "\x21DB"
+    ,"race;" * "\x223D\x0331"
+    ,"Racute;" * "\x0154"
+    ,"racute;" * "\x0155"
+    ,"radic;" * "\x221A"
+    ,"raemptyv;" * "\x29B3"
+    ,"rang;" * "\x27E9"
+    ,"Rang;" * "\x27EB"
+    ,"rangd;" * "\x2992"
+    ,"range;" * "\x29A5"
+    ,"rangle;" * "\x27E9"
+    ,"raquo" * "\x00BB"
+    ,"raquo;" * "\x00BB"
+    ,"rarr;" * "\x2192"
+    ,"Rarr;" * "\x21A0"
+    ,"rArr;" * "\x21D2"
+    ,"rarrap;" * "\x2975"
+    ,"rarrb;" * "\x21E5"
+    ,"rarrbfs;" * "\x2920"
+    ,"rarrc;" * "\x2933"
+    ,"rarrfs;" * "\x291E"
+    ,"rarrhk;" * "\x21AA"
+    ,"rarrlp;" * "\x21AC"
+    ,"rarrpl;" * "\x2945"
+    ,"rarrsim;" * "\x2974"
+    ,"rarrtl;" * "\x21A3"
+    ,"Rarrtl;" * "\x2916"
+    ,"rarrw;" * "\x219D"
+    ,"ratail;" * "\x291A"
+    ,"rAtail;" * "\x291C"
+    ,"ratio;" * "\x2236"
+    ,"rationals;" * "\x211A"
+    ,"rbarr;" * "\x290D"
+    ,"rBarr;" * "\x290F"
+    ,"RBarr;" * "\x2910"
+    ,"rbbrk;" * "\x2773"
+    ,"rbrace;" * "\x007D"
+    ,"rbrack;" * "\x005D"
+    ,"rbrke;" * "\x298C"
+    ,"rbrksld;" * "\x298E"
+    ,"rbrkslu;" * "\x2990"
+    ,"Rcaron;" * "\x0158"
+    ,"rcaron;" * "\x0159"
+    ,"Rcedil;" * "\x0156"
+    ,"rcedil;" * "\x0157"
+    ,"rceil;" * "\x2309"
+    ,"rcub;" * "\x007D"
+    ,"Rcy;" * "\x0420"
+    ,"rcy;" * "\x0440"
+    ,"rdca;" * "\x2937"
+    ,"rdldhar;" * "\x2969"
+    ,"rdquo;" * "\x201D"
+    ,"rdquor;" * "\x201D"
+    ,"rdsh;" * "\x21B3"
+    ,"Re;" * "\x211C"
+    ,"real;" * "\x211C"
+    ,"realine;" * "\x211B"
+    ,"realpart;" * "\x211C"
+    ,"reals;" * "\x211D"
+    ,"rect;" * "\x25AD"
+    ,"REG" * "\x00AE"
+    ,"reg" * "\x00AE"
+    ,"REG;" * "\x00AE"
+    ,"reg;" * "\x00AE"
+    ,"ReverseElement;" * "\x220B"
+    ,"ReverseEquilibrium;" * "\x21CB"
+    ,"ReverseUpEquilibrium;" * "\x296F"
+    ,"rfisht;" * "\x297D"
+    ,"rfloor;" * "\x230B"
+    ,"Rfr;" * "\x211C"
+    ,"rfr;" * "\x1D52F"
+    ,"rHar;" * "\x2964"
+    ,"rhard;" * "\x21C1"
+    ,"rharu;" * "\x21C0"
+    ,"rharul;" * "\x296C"
+    ,"Rho;" * "\x03A1"
+    ,"rho;" * "\x03C1"
+    ,"rhov;" * "\x03F1"
+    ,"RightAngleBracket;" * "\x27E9"
+    ,"RightArrow;" * "\x2192"
+    ,"rightarrow;" * "\x2192"
+    ,"Rightarrow;" * "\x21D2"
+    ,"RightArrowBar;" * "\x21E5"
+    ,"RightArrowLeftArrow;" * "\x21C4"
+    ,"rightarrowtail;" * "\x21A3"
+    ,"RightCeiling;" * "\x2309"
+    ,"RightDoubleBracket;" * "\x27E7"
+    ,"RightDownTeeVector;" * "\x295D"
+    ,"RightDownVector;" * "\x21C2"
+    ,"RightDownVectorBar;" * "\x2955"
+    ,"RightFloor;" * "\x230B"
+    ,"rightharpoondown;" * "\x21C1"
+    ,"rightharpoonup;" * "\x21C0"
+    ,"rightleftarrows;" * "\x21C4"
+    ,"rightleftharpoons;" * "\x21CC"
+    ,"rightrightarrows;" * "\x21C9"
+    ,"rightsquigarrow;" * "\x219D"
+    ,"RightTee;" * "\x22A2"
+    ,"RightTeeArrow;" * "\x21A6"
+    ,"RightTeeVector;" * "\x295B"
+    ,"rightthreetimes;" * "\x22CC"
+    ,"RightTriangle;" * "\x22B3"
+    ,"RightTriangleBar;" * "\x29D0"
+    ,"RightTriangleEqual;" * "\x22B5"
+    ,"RightUpDownVector;" * "\x294F"
+    ,"RightUpTeeVector;" * "\x295C"
+    ,"RightUpVector;" * "\x21BE"
+    ,"RightUpVectorBar;" * "\x2954"
+    ,"RightVector;" * "\x21C0"
+    ,"RightVectorBar;" * "\x2953"
+    ,"ring;" * "\x02DA"
+    ,"risingdotseq;" * "\x2253"
+    ,"rlarr;" * "\x21C4"
+    ,"rlhar;" * "\x21CC"
+    ,"rlm;" * "\x200F"
+    ,"rmoust;" * "\x23B1"
+    ,"rmoustache;" * "\x23B1"
+    ,"rnmid;" * "\x2AEE"
+    ,"roang;" * "\x27ED"
+    ,"roarr;" * "\x21FE"
+    ,"robrk;" * "\x27E7"
+    ,"ropar;" * "\x2986"
+    ,"Ropf;" * "\x211D"
+    ,"ropf;" * "\x1D563"
+    ,"roplus;" * "\x2A2E"
+    ,"rotimes;" * "\x2A35"
+    ,"RoundImplies;" * "\x2970"
+    ,"rpar;" * "\x0029"
+    ,"rpargt;" * "\x2994"
+    ,"rppolint;" * "\x2A12"
+    ,"rrarr;" * "\x21C9"
+    ,"Rrightarrow;" * "\x21DB"
+    ,"rsaquo;" * "\x203A"
+    ,"Rscr;" * "\x211B"
+    ,"rscr;" * "\x1D4C7"
+    ,"Rsh;" * "\x21B1"
+    ,"rsh;" * "\x21B1"
+    ,"rsqb;" * "\x005D"
+    ,"rsquo;" * "\x2019"
+    ,"rsquor;" * "\x2019"
+    ,"rthree;" * "\x22CC"
+    ,"rtimes;" * "\x22CA"
+    ,"rtri;" * "\x25B9"
+    ,"rtrie;" * "\x22B5"
+    ,"rtrif;" * "\x25B8"
+    ,"rtriltri;" * "\x29CE"
+    ,"RuleDelayed;" * "\x29F4"
+    ,"ruluhar;" * "\x2968"
+    ,"rx;" * "\x211E"
+    ,"Sacute;" * "\x015A"
+    ,"sacute;" * "\x015B"
+    ,"sbquo;" * "\x201A"
+    ,"sc;" * "\x227B"
+    ,"Sc;" * "\x2ABC"
+    ,"scap;" * "\x2AB8"
+    ,"Scaron;" * "\x0160"
+    ,"scaron;" * "\x0161"
+    ,"sccue;" * "\x227D"
+    ,"sce;" * "\x2AB0"
+    ,"scE;" * "\x2AB4"
+    ,"Scedil;" * "\x015E"
+    ,"scedil;" * "\x015F"
+    ,"Scirc;" * "\x015C"
+    ,"scirc;" * "\x015D"
+    ,"scnap;" * "\x2ABA"
+    ,"scnE;" * "\x2AB6"
+    ,"scnsim;" * "\x22E9"
+    ,"scpolint;" * "\x2A13"
+    ,"scsim;" * "\x227F"
+    ,"Scy;" * "\x0421"
+    ,"scy;" * "\x0441"
+    ,"sdot;" * "\x22C5"
+    ,"sdotb;" * "\x22A1"
+    ,"sdote;" * "\x2A66"
+    ,"searhk;" * "\x2925"
+    ,"searr;" * "\x2198"
+    ,"seArr;" * "\x21D8"
+    ,"searrow;" * "\x2198"
+    ,"sect" * "\x00A7"
+    ,"sect;" * "\x00A7"
+    ,"semi;" * "\x003B"
+    ,"seswar;" * "\x2929"
+    ,"setminus;" * "\x2216"
+    ,"setmn;" * "\x2216"
+    ,"sext;" * "\x2736"
+    ,"Sfr;" * "\x1D516"
+    ,"sfr;" * "\x1D530"
+    ,"sfrown;" * "\x2322"
+    ,"sharp;" * "\x266F"
+    ,"SHCHcy;" * "\x0429"
+    ,"shchcy;" * "\x0449"
+    ,"SHcy;" * "\x0428"
+    ,"shcy;" * "\x0448"
+    ,"ShortDownArrow;" * "\x2193"
+    ,"ShortLeftArrow;" * "\x2190"
+    ,"shortmid;" * "\x2223"
+    ,"shortparallel;" * "\x2225"
+    ,"ShortRightArrow;" * "\x2192"
+    ,"ShortUpArrow;" * "\x2191"
+    ,"shy" * "\x00AD"
+    ,"shy;" * "\x00AD"
+    ,"Sigma;" * "\x03A3"
+    ,"sigma;" * "\x03C3"
+    ,"sigmaf;" * "\x03C2"
+    ,"sigmav;" * "\x03C2"
+    ,"sim;" * "\x223C"
+    ,"simdot;" * "\x2A6A"
+    ,"sime;" * "\x2243"
+    ,"simeq;" * "\x2243"
+    ,"simg;" * "\x2A9E"
+    ,"simgE;" * "\x2AA0"
+    ,"siml;" * "\x2A9D"
+    ,"simlE;" * "\x2A9F"
+    ,"simne;" * "\x2246"
+    ,"simplus;" * "\x2A24"
+    ,"simrarr;" * "\x2972"
+    ,"slarr;" * "\x2190"
+    ,"SmallCircle;" * "\x2218"
+    ,"smallsetminus;" * "\x2216"
+    ,"smashp;" * "\x2A33"
+    ,"smeparsl;" * "\x29E4"
+    ,"smid;" * "\x2223"
+    ,"smile;" * "\x2323"
+    ,"smt;" * "\x2AAA"
+    ,"smte;" * "\x2AAC"
+    ,"smtes;" * "\x2AAC\xFE00"
+    ,"SOFTcy;" * "\x042C"
+    ,"softcy;" * "\x044C"
+    ,"sol;" * "\x002F"
+    ,"solb;" * "\x29C4"
+    ,"solbar;" * "\x233F"
+    ,"Sopf;" * "\x1D54A"
+    ,"sopf;" * "\x1D564"
+    ,"spades;" * "\x2660"
+    ,"spadesuit;" * "\x2660"
+    ,"spar;" * "\x2225"
+    ,"sqcap;" * "\x2293"
+    ,"sqcaps;" * "\x2293\xFE00"
+    ,"sqcup;" * "\x2294"
+    ,"sqcups;" * "\x2294\xFE00"
+    ,"Sqrt;" * "\x221A"
+    ,"sqsub;" * "\x228F"
+    ,"sqsube;" * "\x2291"
+    ,"sqsubset;" * "\x228F"
+    ,"sqsubseteq;" * "\x2291"
+    ,"sqsup;" * "\x2290"
+    ,"sqsupe;" * "\x2292"
+    ,"sqsupset;" * "\x2290"
+    ,"sqsupseteq;" * "\x2292"
+    ,"squ;" * "\x25A1"
+    ,"Square;" * "\x25A1"
+    ,"square;" * "\x25A1"
+    ,"SquareIntersection;" * "\x2293"
+    ,"SquareSubset;" * "\x228F"
+    ,"SquareSubsetEqual;" * "\x2291"
+    ,"SquareSuperset;" * "\x2290"
+    ,"SquareSupersetEqual;" * "\x2292"
+    ,"SquareUnion;" * "\x2294"
+    ,"squarf;" * "\x25AA"
+    ,"squf;" * "\x25AA"
+    ,"srarr;" * "\x2192"
+    ,"Sscr;" * "\x1D4AE"
+    ,"sscr;" * "\x1D4C8"
+    ,"ssetmn;" * "\x2216"
+    ,"ssmile;" * "\x2323"
+    ,"sstarf;" * "\x22C6"
+    ,"Star;" * "\x22C6"
+    ,"star;" * "\x2606"
+    ,"starf;" * "\x2605"
+    ,"straightepsilon;" * "\x03F5"
+    ,"straightphi;" * "\x03D5"
+    ,"strns;" * "\x00AF"
+    ,"sub;" * "\x2282"
+    ,"Sub;" * "\x22D0"
+    ,"subdot;" * "\x2ABD"
+    ,"sube;" * "\x2286"
+    ,"subE;" * "\x2AC5"
+    ,"subedot;" * "\x2AC3"
+    ,"submult;" * "\x2AC1"
+    ,"subne;" * "\x228A"
+    ,"subnE;" * "\x2ACB"
+    ,"subplus;" * "\x2ABF"
+    ,"subrarr;" * "\x2979"
+    ,"subset;" * "\x2282"
+    ,"Subset;" * "\x22D0"
+    ,"subseteq;" * "\x2286"
+    ,"subseteqq;" * "\x2AC5"
+    ,"SubsetEqual;" * "\x2286"
+    ,"subsetneq;" * "\x228A"
+    ,"subsetneqq;" * "\x2ACB"
+    ,"subsim;" * "\x2AC7"
+    ,"subsub;" * "\x2AD5"
+    ,"subsup;" * "\x2AD3"
+    ,"succ;" * "\x227B"
+    ,"succapprox;" * "\x2AB8"
+    ,"succcurlyeq;" * "\x227D"
+    ,"Succeeds;" * "\x227B"
+    ,"SucceedsEqual;" * "\x2AB0"
+    ,"SucceedsSlantEqual;" * "\x227D"
+    ,"SucceedsTilde;" * "\x227F"
+    ,"succeq;" * "\x2AB0"
+    ,"succnapprox;" * "\x2ABA"
+    ,"succneqq;" * "\x2AB6"
+    ,"succnsim;" * "\x22E9"
+    ,"succsim;" * "\x227F"
+    ,"SuchThat;" * "\x220B"
+    ,"Sum;" * "\x2211"
+    ,"sum;" * "\x2211"
+    ,"sung;" * "\x266A"
+    ,"sup1" * "\x00B9"
+    ,"sup1;" * "\x00B9"
+    ,"sup2" * "\x00B2"
+    ,"sup2;" * "\x00B2"
+    ,"sup3" * "\x00B3"
+    ,"sup3;" * "\x00B3"
+    ,"sup;" * "\x2283"
+    ,"Sup;" * "\x22D1"
+    ,"supdot;" * "\x2ABE"
+    ,"supdsub;" * "\x2AD8"
+    ,"supe;" * "\x2287"
+    ,"supE;" * "\x2AC6"
+    ,"supedot;" * "\x2AC4"
+    ,"Superset;" * "\x2283"
+    ,"SupersetEqual;" * "\x2287"
+    ,"suphsol;" * "\x27C9"
+    ,"suphsub;" * "\x2AD7"
+    ,"suplarr;" * "\x297B"
+    ,"supmult;" * "\x2AC2"
+    ,"supne;" * "\x228B"
+    ,"supnE;" * "\x2ACC"
+    ,"supplus;" * "\x2AC0"
+    ,"supset;" * "\x2283"
+    ,"Supset;" * "\x22D1"
+    ,"supseteq;" * "\x2287"
+    ,"supseteqq;" * "\x2AC6"
+    ,"supsetneq;" * "\x228B"
+    ,"supsetneqq;" * "\x2ACC"
+    ,"supsim;" * "\x2AC8"
+    ,"supsub;" * "\x2AD4"
+    ,"supsup;" * "\x2AD6"
+    ,"swarhk;" * "\x2926"
+    ,"swarr;" * "\x2199"
+    ,"swArr;" * "\x21D9"
+    ,"swarrow;" * "\x2199"
+    ,"swnwar;" * "\x292A"
+    ,"szlig" * "\x00DF"
+    ,"szlig;" * "\x00DF"
+    ,"Tab;" * "\x0009"
+    ,"target;" * "\x2316"
+    ,"Tau;" * "\x03A4"
+    ,"tau;" * "\x03C4"
+    ,"tbrk;" * "\x23B4"
+    ,"Tcaron;" * "\x0164"
+    ,"tcaron;" * "\x0165"
+    ,"Tcedil;" * "\x0162"
+    ,"tcedil;" * "\x0163"
+    ,"Tcy;" * "\x0422"
+    ,"tcy;" * "\x0442"
+    ,"tdot;" * "\x20DB"
+    ,"telrec;" * "\x2315"
+    ,"Tfr;" * "\x1D517"
+    ,"tfr;" * "\x1D531"
+    ,"there4;" * "\x2234"
+    ,"Therefore;" * "\x2234"
+    ,"therefore;" * "\x2234"
+    ,"Theta;" * "\x0398"
+    ,"theta;" * "\x03B8"
+    ,"thetasym;" * "\x03D1"
+    ,"thetav;" * "\x03D1"
+    ,"thickapprox;" * "\x2248"
+    ,"thicksim;" * "\x223C"
+    ,"ThickSpace;" * "\x205F\x200A"
+    ,"thinsp;" * "\x2009"
+    ,"ThinSpace;" * "\x2009"
+    ,"thkap;" * "\x2248"
+    ,"thksim;" * "\x223C"
+    ,"THORN" * "\x00DE"
+    ,"thorn" * "\x00FE"
+    ,"THORN;" * "\x00DE"
+    ,"thorn;" * "\x00FE"
+    ,"tilde;" * "\x02DC"
+    ,"Tilde;" * "\x223C"
+    ,"TildeEqual;" * "\x2243"
+    ,"TildeFullEqual;" * "\x2245"
+    ,"TildeTilde;" * "\x2248"
+    ,"times" * "\x00D7"
+    ,"times;" * "\x00D7"
+    ,"timesb;" * "\x22A0"
+    ,"timesbar;" * "\x2A31"
+    ,"timesd;" * "\x2A30"
+    ,"tint;" * "\x222D"
+    ,"toea;" * "\x2928"
+    ,"top;" * "\x22A4"
+    ,"topbot;" * "\x2336"
+    ,"topcir;" * "\x2AF1"
+    ,"Topf;" * "\x1D54B"
+    ,"topf;" * "\x1D565"
+    ,"topfork;" * "\x2ADA"
+    ,"tosa;" * "\x2929"
+    ,"tprime;" * "\x2034"
+    ,"TRADE;" * "\x2122"
+    ,"trade;" * "\x2122"
+    ,"triangle;" * "\x25B5"
+    ,"triangledown;" * "\x25BF"
+    ,"triangleleft;" * "\x25C3"
+    ,"trianglelefteq;" * "\x22B4"
+    ,"triangleq;" * "\x225C"
+    ,"triangleright;" * "\x25B9"
+    ,"trianglerighteq;" * "\x22B5"
+    ,"tridot;" * "\x25EC"
+    ,"trie;" * "\x225C"
+    ,"triminus;" * "\x2A3A"
+    ,"TripleDot;" * "\x20DB"
+    ,"triplus;" * "\x2A39"
+    ,"trisb;" * "\x29CD"
+    ,"tritime;" * "\x2A3B"
+    ,"trpezium;" * "\x23E2"
+    ,"Tscr;" * "\x1D4AF"
+    ,"tscr;" * "\x1D4C9"
+    ,"TScy;" * "\x0426"
+    ,"tscy;" * "\x0446"
+    ,"TSHcy;" * "\x040B"
+    ,"tshcy;" * "\x045B"
+    ,"Tstrok;" * "\x0166"
+    ,"tstrok;" * "\x0167"
+    ,"twixt;" * "\x226C"
+    ,"twoheadleftarrow;" * "\x219E"
+    ,"twoheadrightarrow;" * "\x21A0"
+    ,"Uacute" * "\x00DA"
+    ,"uacute" * "\x00FA"
+    ,"Uacute;" * "\x00DA"
+    ,"uacute;" * "\x00FA"
+    ,"uarr;" * "\x2191"
+    ,"Uarr;" * "\x219F"
+    ,"uArr;" * "\x21D1"
+    ,"Uarrocir;" * "\x2949"
+    ,"Ubrcy;" * "\x040E"
+    ,"ubrcy;" * "\x045E"
+    ,"Ubreve;" * "\x016C"
+    ,"ubreve;" * "\x016D"
+    ,"Ucirc" * "\x00DB"
+    ,"ucirc" * "\x00FB"
+    ,"Ucirc;" * "\x00DB"
+    ,"ucirc;" * "\x00FB"
+    ,"Ucy;" * "\x0423"
+    ,"ucy;" * "\x0443"
+    ,"udarr;" * "\x21C5"
+    ,"Udblac;" * "\x0170"
+    ,"udblac;" * "\x0171"
+    ,"udhar;" * "\x296E"
+    ,"ufisht;" * "\x297E"
+    ,"Ufr;" * "\x1D518"
+    ,"ufr;" * "\x1D532"
+    ,"Ugrave" * "\x00D9"
+    ,"ugrave" * "\x00F9"
+    ,"Ugrave;" * "\x00D9"
+    ,"ugrave;" * "\x00F9"
+    ,"uHar;" * "\x2963"
+    ,"uharl;" * "\x21BF"
+    ,"uharr;" * "\x21BE"
+    ,"uhblk;" * "\x2580"
+    ,"ulcorn;" * "\x231C"
+    ,"ulcorner;" * "\x231C"
+    ,"ulcrop;" * "\x230F"
+    ,"ultri;" * "\x25F8"
+    ,"Umacr;" * "\x016A"
+    ,"umacr;" * "\x016B"
+    ,"uml" * "\x00A8"
+    ,"uml;" * "\x00A8"
+    ,"UnderBar;" * "\x005F"
+    ,"UnderBrace;" * "\x23DF"
+    ,"UnderBracket;" * "\x23B5"
+    ,"UnderParenthesis;" * "\x23DD"
+    ,"Union;" * "\x22C3"
+    ,"UnionPlus;" * "\x228E"
+    ,"Uogon;" * "\x0172"
+    ,"uogon;" * "\x0173"
+    ,"Uopf;" * "\x1D54C"
+    ,"uopf;" * "\x1D566"
+    ,"UpArrow;" * "\x2191"
+    ,"uparrow;" * "\x2191"
+    ,"Uparrow;" * "\x21D1"
+    ,"UpArrowBar;" * "\x2912"
+    ,"UpArrowDownArrow;" * "\x21C5"
+    ,"UpDownArrow;" * "\x2195"
+    ,"updownarrow;" * "\x2195"
+    ,"Updownarrow;" * "\x21D5"
+    ,"UpEquilibrium;" * "\x296E"
+    ,"upharpoonleft;" * "\x21BF"
+    ,"upharpoonright;" * "\x21BE"
+    ,"uplus;" * "\x228E"
+    ,"UpperLeftArrow;" * "\x2196"
+    ,"UpperRightArrow;" * "\x2197"
+    ,"upsi;" * "\x03C5"
+    ,"Upsi;" * "\x03D2"
+    ,"upsih;" * "\x03D2"
+    ,"Upsilon;" * "\x03A5"
+    ,"upsilon;" * "\x03C5"
+    ,"UpTee;" * "\x22A5"
+    ,"UpTeeArrow;" * "\x21A5"
+    ,"upuparrows;" * "\x21C8"
+    ,"urcorn;" * "\x231D"
+    ,"urcorner;" * "\x231D"
+    ,"urcrop;" * "\x230E"
+    ,"Uring;" * "\x016E"
+    ,"uring;" * "\x016F"
+    ,"urtri;" * "\x25F9"
+    ,"Uscr;" * "\x1D4B0"
+    ,"uscr;" * "\x1D4CA"
+    ,"utdot;" * "\x22F0"
+    ,"Utilde;" * "\x0168"
+    ,"utilde;" * "\x0169"
+    ,"utri;" * "\x25B5"
+    ,"utrif;" * "\x25B4"
+    ,"uuarr;" * "\x21C8"
+    ,"Uuml" * "\x00DC"
+    ,"uuml" * "\x00FC"
+    ,"Uuml;" * "\x00DC"
+    ,"uuml;" * "\x00FC"
+    ,"uwangle;" * "\x29A7"
+    ,"vangrt;" * "\x299C"
+    ,"varepsilon;" * "\x03F5"
+    ,"varkappa;" * "\x03F0"
+    ,"varnothing;" * "\x2205"
+    ,"varphi;" * "\x03D5"
+    ,"varpi;" * "\x03D6"
+    ,"varpropto;" * "\x221D"
+    ,"varr;" * "\x2195"
+    ,"vArr;" * "\x21D5"
+    ,"varrho;" * "\x03F1"
+    ,"varsigma;" * "\x03C2"
+    ,"varsubsetneq;" * "\x228A\xFE00"
+    ,"varsubsetneqq;" * "\x2ACB\xFE00"
+    ,"varsupsetneq;" * "\x228B\xFE00"
+    ,"varsupsetneqq;" * "\x2ACC\xFE00"
+    ,"vartheta;" * "\x03D1"
+    ,"vartriangleleft;" * "\x22B2"
+    ,"vartriangleright;" * "\x22B3"
+    ,"vBar;" * "\x2AE8"
+    ,"Vbar;" * "\x2AEB"
+    ,"vBarv;" * "\x2AE9"
+    ,"Vcy;" * "\x0412"
+    ,"vcy;" * "\x0432"
+    ,"vdash;" * "\x22A2"
+    ,"vDash;" * "\x22A8"
+    ,"Vdash;" * "\x22A9"
+    ,"VDash;" * "\x22AB"
+    ,"Vdashl;" * "\x2AE6"
+    ,"vee;" * "\x2228"
+    ,"Vee;" * "\x22C1"
+    ,"veebar;" * "\x22BB"
+    ,"veeeq;" * "\x225A"
+    ,"vellip;" * "\x22EE"
+    ,"verbar;" * "\x007C"
+    ,"Verbar;" * "\x2016"
+    ,"vert;" * "\x007C"
+    ,"Vert;" * "\x2016"
+    ,"VerticalBar;" * "\x2223"
+    ,"VerticalLine;" * "\x007C"
+    ,"VerticalSeparator;" * "\x2758"
+    ,"VerticalTilde;" * "\x2240"
+    ,"VeryThinSpace;" * "\x200A"
+    ,"Vfr;" * "\x1D519"
+    ,"vfr;" * "\x1D533"
+    ,"vltri;" * "\x22B2"
+    ,"vnsub;" * "\x2282\x20D2"
+    ,"vnsup;" * "\x2283\x20D2"
+    ,"Vopf;" * "\x1D54D"
+    ,"vopf;" * "\x1D567"
+    ,"vprop;" * "\x221D"
+    ,"vrtri;" * "\x22B3"
+    ,"Vscr;" * "\x1D4B1"
+    ,"vscr;" * "\x1D4CB"
+    ,"vsubne;" * "\x228A\xFE00"
+    ,"vsubnE;" * "\x2ACB\xFE00"
+    ,"vsupne;" * "\x228B\xFE00"
+    ,"vsupnE;" * "\x2ACC\xFE00"
+    ,"Vvdash;" * "\x22AA"
+    ,"vzigzag;" * "\x299A"
+    ,"Wcirc;" * "\x0174"
+    ,"wcirc;" * "\x0175"
+    ,"wedbar;" * "\x2A5F"
+    ,"wedge;" * "\x2227"
+    ,"Wedge;" * "\x22C0"
+    ,"wedgeq;" * "\x2259"
+    ,"weierp;" * "\x2118"
+    ,"Wfr;" * "\x1D51A"
+    ,"wfr;" * "\x1D534"
+    ,"Wopf;" * "\x1D54E"
+    ,"wopf;" * "\x1D568"
+    ,"wp;" * "\x2118"
+    ,"wr;" * "\x2240"
+    ,"wreath;" * "\x2240"
+    ,"Wscr;" * "\x1D4B2"
+    ,"wscr;" * "\x1D4CC"
+    ,"xcap;" * "\x22C2"
+    ,"xcirc;" * "\x25EF"
+    ,"xcup;" * "\x22C3"
+    ,"xdtri;" * "\x25BD"
+    ,"Xfr;" * "\x1D51B"
+    ,"xfr;" * "\x1D535"
+    ,"xharr;" * "\x27F7"
+    ,"xhArr;" * "\x27FA"
+    ,"Xi;" * "\x039E"
+    ,"xi;" * "\x03BE"
+    ,"xlarr;" * "\x27F5"
+    ,"xlArr;" * "\x27F8"
+    ,"xmap;" * "\x27FC"
+    ,"xnis;" * "\x22FB"
+    ,"xodot;" * "\x2A00"
+    ,"Xopf;" * "\x1D54F"
+    ,"xopf;" * "\x1D569"
+    ,"xoplus;" * "\x2A01"
+    ,"xotime;" * "\x2A02"
+    ,"xrarr;" * "\x27F6"
+    ,"xrArr;" * "\x27F9"
+    ,"Xscr;" * "\x1D4B3"
+    ,"xscr;" * "\x1D4CD"
+    ,"xsqcup;" * "\x2A06"
+    ,"xuplus;" * "\x2A04"
+    ,"xutri;" * "\x25B3"
+    ,"xvee;" * "\x22C1"
+    ,"xwedge;" * "\x22C0"
+    ,"Yacute" * "\x00DD"
+    ,"yacute" * "\x00FD"
+    ,"Yacute;" * "\x00DD"
+    ,"yacute;" * "\x00FD"
+    ,"YAcy;" * "\x042F"
+    ,"yacy;" * "\x044F"
+    ,"Ycirc;" * "\x0176"
+    ,"ycirc;" * "\x0177"
+    ,"Ycy;" * "\x042B"
+    ,"ycy;" * "\x044B"
+    ,"yen" * "\x00A5"
+    ,"yen;" * "\x00A5"
+    ,"Yfr;" * "\x1D51C"
+    ,"yfr;" * "\x1D536"
+    ,"YIcy;" * "\x0407"
+    ,"yicy;" * "\x0457"
+    ,"Yopf;" * "\x1D550"
+    ,"yopf;" * "\x1D56A"
+    ,"Yscr;" * "\x1D4B4"
+    ,"yscr;" * "\x1D4CE"
+    ,"YUcy;" * "\x042E"
+    ,"yucy;" * "\x044E"
+    ,"yuml" * "\x00FF"
+    ,"yuml;" * "\x00FF"
+    ,"Yuml;" * "\x0178"
+    ,"Zacute;" * "\x0179"
+    ,"zacute;" * "\x017A"
+    ,"Zcaron;" * "\x017D"
+    ,"zcaron;" * "\x017E"
+    ,"Zcy;" * "\x0417"
+    ,"zcy;" * "\x0437"
+    ,"Zdot;" * "\x017B"
+    ,"zdot;" * "\x017C"
+    ,"zeetrf;" * "\x2128"
+    ,"ZeroWidthSpace;" * "\x200B"
+    ,"Zeta;" * "\x0396"
+    ,"zeta;" * "\x03B6"
+    ,"Zfr;" * "\x2128"
+    ,"zfr;" * "\x1D537"
+    ,"ZHcy;" * "\x0416"
+    ,"zhcy;" * "\x0436"
+    ,"zigrarr;" * "\x21DD"
+    ,"Zopf;" * "\x2124"
+    ,"zopf;" * "\x1D56B"
+    ,"Zscr;" * "\x1D4B5"
+    ,"zscr;" * "\x1D4CF"
+    ,"zwj;" * "\x200D"
+    ,"zwnj;" * "\x200C"
+    ]
diff --git a/app/Main.hs b/app/Main.hs
new file mode 100644
--- /dev/null
+++ b/app/Main.hs
@@ -0,0 +1,28 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Main where
+
+import Text.HTML.TagSoup as Soup
+import Text.HTML.TagStew as Stew
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Builder as BB
+import qualified Data.ByteString.UTF8 as BU
+import System.Environment (getArgs)
+import Control.Monad
+import Text.Show.Unicode
+import System.IO (stdout)
+
+fromTag :: Tag B.ByteString -> BB.Builder
+fromTag = go where
+  f = BB.byteString
+  go (TagOpen t xs) = "\ESC[34m<" <> f t
+    <> foldMap (\(k, v) -> " " <> f k <> "=" <> f v) xs
+    <> ">\ESC[0m"
+  go (TagClose t) = "\ESC[34m</" <> f t <> ">\ESC[0m"
+  go (TagText t) = f t
+  go (TagComment t) = "<!--" <> f t <> "-->"
+{-# INLINE fromTag #-}
+
+main :: IO ()
+main = getArgs >>= \paths -> forM_ paths $ \path -> do
+  bs <- B.readFile path
+  BB.hPutBuilder stdout $ foldMap ((<>"\n") . fromTag) $ Soup.parseTags bs
diff --git a/tagstew.cabal b/tagstew.cabal
new file mode 100644
--- /dev/null
+++ b/tagstew.cabal
@@ -0,0 +1,39 @@
+cabal-version:       2.4
+-- Initial package description 'tagstew.cabal' generated by 'cabal init'.
+-- For further documentation, see http://haskell.org/cabal/users-guide/
+
+name:                tagstew
+version:             0
+synopsis:            Black magic tagsoup
+description:         Fast alternative HTML decoder for tagsoup
+bug-reports:         https://github.com/fumieval/tagstew
+license:             BSD-3-Clause
+license-file:        LICENSE
+author:              Fumiaki Kinoshita
+maintainer:          fumiexcel@gmail.com
+copyright:           Copyright (c) 2020 Fumiaki Kinoshita
+category:            Text
+extra-source-files:  CHANGELOG.md, README.md
+
+library
+  exposed-modules:     Text.HTML.TagStew, Text.HTML.TagStew.Entity
+  ghc-options: -Wall -O2
+  build-depends:       base == 4.*, bytestring, compact, unordered-containers
+    , tagsoup, text
+  default-language:    Haskell2010
+
+executable tagstew
+  main-is:             Main.hs
+  -- other-modules:
+  -- other-extensions:
+  build-depends:       base == 4.*, bytestring
+    , tagstew
+    , tagsoup
+    , utf8-string
+    , unicode-show
+  hs-source-dirs: app
+  default-language:    Haskell2010
+
+source-repository head
+  type: git
+  location: https://github.com/fumieval/tagstew
