diff -Naur ../libgd-2.3.2-orig/src/entities.h ./src/entities.h
--- ../libgd-2.3.2-orig/src/entities.h	2021-01-11 17:09:45.000000000 -0700
+++ ./src/entities.h	2021-04-20 15:10:20.645013111 -0700
@@ -1,11 +1,7 @@
 /*
- * Generated file - do not edit directly.
+ * Generated from https://dev.w3.org/html5/html-author/charref
  *
- * This file was generated from:
- *       http://www.w3.org/TR/REC-html40/sgml/entities.html
- * by means of the script:
- *       entities.tcl
- */
+*/
 
 #ifdef __cplusplus
 extern "C" {
@@ -15,262 +11,1465 @@
 		char	*name;
 		int	value;
 	} entities[] = {
-		{"AElig", 198},
-		{"Aacute", 193},
-		{"Acirc", 194},
-		{"Agrave", 192},
-		{"Alpha", 913},
-		{"Aring", 197},
-		{"Atilde", 195},
-		{"Auml", 196},
-		{"Beta", 914},
-		{"Ccedil", 199},
-		{"Chi", 935},
-		{"Dagger", 8225},
-		{"Delta", 916},
-		{"ETH", 208},
-		{"Eacute", 201},
-		{"Ecirc", 202},
-		{"Egrave", 200},
-		{"Epsilon", 917},
-		{"Eta", 919},
-		{"Euml", 203},
-		{"Gamma", 915},
-		{"Iacute", 205},
-		{"Icirc", 206},
-		{"Igrave", 204},
-		{"Iota", 921},
-		{"Iuml", 207},
-		{"Kappa", 922},
-		{"Lambda", 923},
-		{"Mu", 924},
-		{"Ntilde", 209},
-		{"Nu", 925},
-		{"OElig", 338},
-		{"Oacute", 211},
-		{"Ocirc", 212},
-		{"Ograve", 210},
-		{"Omega", 937},
-		{"Omicron", 927},
-		{"Oslash", 216},
-		{"Otilde", 213},
-		{"Ouml", 214},
-		{"Phi", 934},
-		{"Pi", 928},
-		{"Prime", 8243},
-		{"Psi", 936},
-		{"Rho", 929},
-		{"Scaron", 352},
-		{"Sigma", 931},
-		{"THORN", 222},
-		{"Tau", 932},
-		{"Theta", 920},
-		{"Uacute", 218},
-		{"Ucirc", 219},
-		{"Ugrave", 217},
-		{"Upsilon", 933},
-		{"Uuml", 220},
-		{"Xi", 926},
-		{"Yacute", 221},
-		{"Yuml", 376},
-		{"Zeta", 918},
-		{"aacute", 225},
-		{"acirc", 226},
-		{"acute", 180},
-		{"aelig", 230},
-		{"agrave", 224},
-		{"alefsym", 8501},
-		{"alpha", 945},
-		{"amp", 38},
-		{"and", 8743},
-		{"ang", 8736},
-		{"aring", 229},
-		{"asymp", 8776},
-		{"atilde", 227},
-		{"auml", 228},
-		{"bdquo", 8222},
-		{"beta", 946},
-		{"brvbar", 166},
-		{"bull", 8226},
-		{"cap", 8745},
-		{"ccedil", 231},
-		{"cedil", 184},
-		{"cent", 162},
-		{"chi", 967},
-		{"circ", 710},
-		{"clubs", 9827},
-		{"cong", 8773},
-		{"copy", 169},
-		{"crarr", 8629},
-		{"cup", 8746},
-		{"curren", 164},
-		{"dArr", 8659},
-		{"dagger", 8224},
-		{"darr", 8595},
-		{"deg", 176},
-		{"delta", 948},
-		{"diams", 9830},
-		{"divide", 247},
-		{"eacute", 233},
-		{"ecirc", 234},
-		{"egrave", 232},
-		{"empty", 8709},
-		{"emsp", 8195},
-		{"ensp", 8194},
-		{"epsilon", 949},
-		{"equiv", 8801},
-		{"eta", 951},
-		{"eth", 240},
-		{"euml", 235},
-		{"euro", 8364},
-		{"exist", 8707},
-		{"fnof", 402},
-		{"forall", 8704},
-		{"frac12", 189},
-		{"frac14", 188},
-		{"frac34", 190},
-		{"frasl", 8260},
-		{"gamma", 947},
-		{"ge", 8805},
-		{"gt", 62},
-		{"hArr", 8660},
-		{"harr", 8596},
-		{"hearts", 9829},
-		{"hellip", 8230},
-		{"iacute", 237},
-		{"icirc", 238},
-		{"iexcl", 161},
-		{"igrave", 236},
-		{"image", 8465},
-		{"infin", 8734},
-		{"int", 8747},
-		{"iota", 953},
-		{"iquest", 191},
-		{"isin", 8712},
-		{"iuml", 239},
-		{"kappa", 954},
-		{"lArr", 8656},
-		{"lambda", 955},
-		{"lang", 9001},
-		{"laquo", 171},
-		{"larr", 8592},
-		{"lceil", 8968},
-		{"ldquo", 8220},
-		{"le", 8804},
-		{"lfloor", 8970},
-		{"lowast", 8727},
-		{"loz", 9674},
-		{"lrm", 8206},
-		{"lsaquo", 8249},
-		{"lsquo", 8216},
-		{"lt", 60},
-		{"macr", 175},
-		{"mdash", 8212},
-		{"micro", 181},
-		{"middot", 183},
-		{"minus", 8722},
-		{"mu", 956},
-		{"nabla", 8711},
-		{"nbsp", 160},
-		{"ndash", 8211},
-		{"ne", 8800},
-		{"ni", 8715},
-		{"not", 172},
-		{"notin", 8713},
-		{"nsub", 8836},
-		{"ntilde", 241},
-		{"nu", 957},
-		{"oacute", 243},
-		{"ocirc", 244},
-		{"oelig", 339},
-		{"ograve", 242},
-		{"oline", 8254},
-		{"omega", 969},
-		{"omicron", 959},
-		{"oplus", 8853},
-		{"or", 8744},
-		{"ordf", 170},
-		{"ordm", 186},
-		{"oslash", 248},
-		{"otilde", 245},
-		{"otimes", 8855},
-		{"ouml", 246},
-		{"para", 182},
-		{"part", 8706},
-		{"permil", 8240},
-		{"perp", 8869},
-		{"phi", 966},
-		{"pi", 960},
-		{"piv", 982},
-		{"plusmn", 177},
-		{"pound", 163},
-		{"prime", 8242},
-		{"prod", 8719},
-		{"prop", 8733},
-		{"psi", 968},
-		{"quot", 34},
-		{"rArr", 8658},
-		{"radic", 8730},
-		{"rang", 9002},
-		{"raquo", 187},
-		{"rarr", 8594},
-		{"rceil", 8969},
-		{"rdquo", 8221},
-		{"real", 8476},
-		{"reg", 174},
-		{"rfloor", 8971},
-		{"rho", 961},
-		{"rlm", 8207},
-		{"rsaquo", 8250},
-		{"rsquo", 8217},
-		{"sbquo", 8218},
-		{"scaron", 353},
-		{"sdot", 8901},
-		{"sect", 167},
-		{"shy", 173},
-		{"sigma", 963},
-		{"sigmaf", 962},
-		{"sim", 8764},
-		{"spades", 9824},
-		{"sub", 8834},
-		{"sube", 8838},
-		{"sum", 8721},
-		{"sup", 8835},
-		{"sup1", 185},
-		{"sup2", 178},
-		{"sup3", 179},
-		{"supe", 8839},
-		{"szlig", 223},
-		{"tau", 964},
-		{"there4", 8756},
-		{"theta", 952},
-		{"thetasym", 977},
-		{"thinsp", 8201},
-		{"thorn", 254},
-		{"tilde", 732},
-		{"times", 215},
-		{"trade", 8482},
-		{"uArr", 8657},
-		{"uacute", 250},
-		{"uarr", 8593},
-		{"ucirc", 251},
-		{"ugrave", 249},
-		{"uml", 168},
-		{"upsih", 978},
-		{"upsilon", 965},
-		{"uuml", 252},
-		{"weierp", 8472},
-		{"xi", 958},
-		{"yacute", 253},
-		{"yen", 165},
-		{"yuml", 255},
-		{"zeta", 950},
-		{"zwj", 8205},
-		{"zwnj", 8204},
+				{"Tab", 9},
+				{"NewLine", 10},
+				{"excl", 33},
+				{"quot", 34},
+				{"num", 35},
+				{"dollar", 36},
+				{"percnt", 37},
+				{"amp", 38},
+				{"apos", 39},
+				{"lpar", 40},
+				{"rpar", 41},
+				{"ast", 42},
+				{"plus", 43},
+				{"comma", 44},
+				{"period", 46},
+				{"sol", 47},
+				{"colon", 58},
+				{"semi", 59},
+				{"lt", 60},
+				{"equals", 61},
+				{"gt", 62},
+				{"quest", 63},
+				{"commat", 64},
+				{"lsqb", 91},
+				{"bsol", 92},
+				{"rsqb", 93},
+				{"Hat", 94},
+				{"lowbar", 95},
+				{"grave", 96},
+				{"lcub", 123},
+				{"verbar", 124},
+				{"rcub", 125},
+				{"nbsp", 160},
+				{"iexcl", 161},
+				{"cent", 162},
+				{"pound", 163},
+				{"curren", 164},
+				{"yen", 165},
+				{"brvbar", 166},
+				{"sect", 167},
+				{"Dot", 168},
+				{"copy", 169},
+				{"ordf", 170},
+				{"laquo", 171},
+				{"not", 172},
+				{"shy", 173},
+				{"reg", 174},
+				{"macr", 175},
+				{"deg", 176},
+				{"plusmn", 177},
+				{"sup2", 178},
+				{"sup3", 179},
+				{"acute", 180},
+				{"micro", 181},
+				{"para", 182},
+				{"middot", 183},
+				{"cedil", 184},
+				{"sup1", 185},
+				{"ordm", 186},
+				{"raquo", 187},
+				{"frac14", 188},
+				{"frac12", 189},
+				{"frac34", 190},
+				{"iquest", 191},
+				{"Agrave", 192},
+				{"Aacute", 193},
+				{"Acirc", 194},
+				{"Atilde", 195},
+				{"Auml", 196},
+				{"Aring", 197},
+				{"AElig", 198},
+				{"Ccedil", 199},
+				{"Egrave", 200},
+				{"Eacute", 201},
+				{"Ecirc", 202},
+				{"Euml", 203},
+				{"Igrave", 204},
+				{"Iacute", 205},
+				{"Icirc", 206},
+				{"Iuml", 207},
+				{"ETH", 208},
+				{"Ntilde", 209},
+				{"Ograve", 210},
+				{"Oacute", 211},
+				{"Ocirc", 212},
+				{"Otilde", 213},
+				{"Ouml", 214},
+				{"times", 215},
+				{"Oslash", 216},
+				{"Ugrave", 217},
+				{"Uacute", 218},
+				{"Ucirc", 219},
+				{"Uuml", 220},
+				{"Yacute", 221},
+				{"THORN", 222},
+				{"szlig", 223},
+				{"agrave", 224},
+				{"aacute", 225},
+				{"acirc", 226},
+				{"atilde", 227},
+				{"auml", 228},
+				{"aring", 229},
+				{"aelig", 230},
+				{"ccedil", 231},
+				{"egrave", 232},
+				{"eacute", 233},
+				{"ecirc", 234},
+				{"euml", 235},
+				{"igrave", 236},
+				{"iacute", 237},
+				{"icirc", 238},
+				{"iuml", 239},
+				{"eth", 240},
+				{"ntilde", 241},
+				{"ograve", 242},
+				{"oacute", 243},
+				{"ocirc", 244},
+				{"otilde", 245},
+				{"ouml", 246},
+				{"divide", 247},
+				{"oslash", 248},
+				{"ugrave", 249},
+				{"uacute", 250},
+				{"ucirc", 251},
+				{"uuml", 252},
+				{"yacute", 253},
+				{"thorn", 254},
+				{"yuml", 255},
+				{"Amacr", 256},
+				{"amacr", 257},
+				{"Abreve", 258},
+				{"abreve", 259},
+				{"Aogon", 260},
+				{"aogon", 261},
+				{"Cacute", 262},
+				{"cacute", 263},
+				{"Ccirc", 264},
+				{"ccirc", 265},
+				{"Cdot", 266},
+				{"cdot", 267},
+				{"Ccaron", 268},
+				{"ccaron", 269},
+				{"Dcaron", 270},
+				{"dcaron", 271},
+				{"Dstrok", 272},
+				{"dstrok", 273},
+				{"Emacr", 274},
+				{"emacr", 275},
+				{"Edot", 278},
+				{"edot", 279},
+				{"Eogon", 280},
+				{"eogon", 281},
+				{"Ecaron", 282},
+				{"ecaron", 283},
+				{"Gcirc", 284},
+				{"gcirc", 285},
+				{"Gbreve", 286},
+				{"gbreve", 287},
+				{"Gdot", 288},
+				{"gdot", 289},
+				{"Gcedil", 290},
+				{"Hcirc", 292},
+				{"hcirc", 293},
+				{"Hstrok", 294},
+				{"hstrok", 295},
+				{"Itilde", 296},
+				{"itilde", 297},
+				{"Imacr", 298},
+				{"imacr", 299},
+				{"Iogon", 302},
+				{"iogon", 303},
+				{"Idot", 304},
+				{"imath", 305},
+				{"IJlig", 306},
+				{"ijlig", 307},
+				{"Jcirc", 308},
+				{"jcirc", 309},
+				{"Kcedil", 310},
+				{"kcedil", 311},
+				{"kgreen", 312},
+				{"Lacute", 313},
+				{"lacute", 314},
+				{"Lcedil", 315},
+				{"lcedil", 316},
+				{"Lcaron", 317},
+				{"lcaron", 318},
+				{"Lmidot", 319},
+				{"lmidot", 320},
+				{"Lstrok", 321},
+				{"lstrok", 322},
+				{"Nacute", 323},
+				{"nacute", 324},
+				{"Ncedil", 325},
+				{"ncedil", 326},
+				{"Ncaron", 327},
+				{"ncaron", 328},
+				{"napos", 329},
+				{"ENG", 330},
+				{"eng", 331},
+				{"Omacr", 332},
+				{"omacr", 333},
+				{"Odblac", 336},
+				{"odblac", 337},
+				{"OElig", 338},
+				{"oelig", 339},
+				{"Racute", 340},
+				{"racute", 341},
+				{"Rcedil", 342},
+				{"rcedil", 343},
+				{"Rcaron", 344},
+				{"rcaron", 345},
+				{"Sacute", 346},
+				{"sacute", 347},
+				{"Scirc", 348},
+				{"scirc", 349},
+				{"Scedil", 350},
+				{"scedil", 351},
+				{"Scaron", 352},
+				{"scaron", 353},
+				{"Tcedil", 354},
+				{"tcedil", 355},
+				{"Tcaron", 356},
+				{"tcaron", 357},
+				{"Tstrok", 358},
+				{"tstrok", 359},
+				{"Utilde", 360},
+				{"utilde", 361},
+				{"Umacr", 362},
+				{"umacr", 363},
+				{"Ubreve", 364},
+				{"ubreve", 365},
+				{"Uring", 366},
+				{"uring", 367},
+				{"Udblac", 368},
+				{"udblac", 369},
+				{"Uogon", 370},
+				{"uogon", 371},
+				{"Wcirc", 372},
+				{"wcirc", 373},
+				{"Ycirc", 374},
+				{"ycirc", 375},
+				{"Yuml", 376},
+				{"Zacute", 377},
+				{"zacute", 378},
+				{"Zdot", 379},
+				{"zdot", 380},
+				{"Zcaron", 381},
+				{"zcaron", 382},
+				{"fnof", 402},
+				{"imped", 437},
+				{"gacute", 501},
+				{"jmath", 567},
+				{"circ", 710},
+				{"caron", 711},
+				{"breve", 728},
+				{"dot", 729},
+				{"ring", 730},
+				{"ogon", 731},
+				{"tilde", 732},
+				{"dblac", 733},
+				{"DownBreve", 785},
+				{"UnderBar", 818},
+				{"Alpha", 913},
+				{"Beta", 914},
+				{"Gamma", 915},
+				{"Delta", 916},
+				{"Epsilon", 917},
+				{"Zeta", 918},
+				{"Eta", 919},
+				{"Theta", 920},
+				{"Iota", 921},
+				{"Kappa", 922},
+				{"Lambda", 923},
+				{"Mu", 924},
+				{"Nu", 925},
+				{"Xi", 926},
+				{"Omicron", 927},
+				{"Pi", 928},
+				{"Rho", 929},
+				{"Sigma", 931},
+				{"Tau", 932},
+				{"Upsilon", 933},
+				{"Phi", 934},
+				{"Chi", 935},
+				{"Psi", 936},
+				{"Omega", 937},
+				{"alpha", 945},
+				{"beta", 946},
+				{"gamma", 947},
+				{"delta", 948},
+				{"epsiv", 949},
+				{"zeta", 950},
+				{"eta", 951},
+				{"theta", 952},
+				{"iota", 953},
+				{"kappa", 954},
+				{"lambda", 955},
+				{"mu", 956},
+				{"nu", 957},
+				{"xi", 958},
+				{"omicron", 959},
+				{"pi", 960},
+				{"rho", 961},
+				{"sigmav", 962},
+				{"sigma", 963},
+				{"tau", 964},
+				{"upsi", 965},
+				{"phi", 966},
+				{"chi", 967},
+				{"psi", 968},
+				{"omega", 969},
+				{"thetav", 977},
+				{"Upsi", 978},
+				{"straightphi", 981},
+				{"piv", 982},
+				{"Gammad", 988},
+				{"gammad", 989},
+				{"kappav", 1008},
+				{"rhov", 1009},
+				{"epsi", 1013},
+				{"bepsi", 1014},
+				{"IOcy", 1025},
+				{"DJcy", 1026},
+				{"GJcy", 1027},
+				{"Jukcy", 1028},
+				{"DScy", 1029},
+				{"Iukcy", 1030},
+				{"YIcy", 1031},
+				{"Jsercy", 1032},
+				{"LJcy", 1033},
+				{"NJcy", 1034},
+				{"TSHcy", 1035},
+				{"KJcy", 1036},
+				{"Ubrcy", 1038},
+				{"DZcy", 1039},
+				{"Acy", 1040},
+				{"Bcy", 1041},
+				{"Vcy", 1042},
+				{"Gcy", 1043},
+				{"Dcy", 1044},
+				{"IEcy", 1045},
+				{"ZHcy", 1046},
+				{"Zcy", 1047},
+				{"Icy", 1048},
+				{"Jcy", 1049},
+				{"Kcy", 1050},
+				{"Lcy", 1051},
+				{"Mcy", 1052},
+				{"Ncy", 1053},
+				{"Ocy", 1054},
+				{"Pcy", 1055},
+				{"Rcy", 1056},
+				{"Scy", 1057},
+				{"Tcy", 1058},
+				{"Ucy", 1059},
+				{"Fcy", 1060},
+				{"KHcy", 1061},
+				{"TScy", 1062},
+				{"CHcy", 1063},
+				{"SHcy", 1064},
+				{"SHCHcy", 1065},
+				{"HARDcy", 1066},
+				{"Ycy", 1067},
+				{"SOFTcy", 1068},
+				{"Ecy", 1069},
+				{"YUcy", 1070},
+				{"YAcy", 1071},
+				{"acy", 1072},
+				{"bcy", 1073},
+				{"vcy", 1074},
+				{"gcy", 1075},
+				{"dcy", 1076},
+				{"iecy", 1077},
+				{"zhcy", 1078},
+				{"zcy", 1079},
+				{"icy", 1080},
+				{"jcy", 1081},
+				{"kcy", 1082},
+				{"lcy", 1083},
+				{"mcy", 1084},
+				{"ncy", 1085},
+				{"ocy", 1086},
+				{"pcy", 1087},
+				{"rcy", 1088},
+				{"scy", 1089},
+				{"tcy", 1090},
+				{"ucy", 1091},
+				{"fcy", 1092},
+				{"khcy", 1093},
+				{"tscy", 1094},
+				{"chcy", 1095},
+				{"shcy", 1096},
+				{"shchcy", 1097},
+				{"hardcy", 1098},
+				{"ycy", 1099},
+				{"softcy", 1100},
+				{"ecy", 1101},
+				{"yucy", 1102},
+				{"yacy", 1103},
+				{"iocy", 1105},
+				{"djcy", 1106},
+				{"gjcy", 1107},
+				{"jukcy", 1108},
+				{"dscy", 1109},
+				{"iukcy", 1110},
+				{"yicy", 1111},
+				{"jsercy", 1112},
+				{"ljcy", 1113},
+				{"njcy", 1114},
+				{"tshcy", 1115},
+				{"kjcy", 1116},
+				{"ubrcy", 1118},
+				{"dzcy", 1119},
+				{"ensp", 8194},
+				{"emsp", 8195},
+				{"emsp13", 8196},
+				{"emsp14", 8197},
+				{"numsp", 8199},
+				{"puncsp", 8200},
+				{"thinsp", 8201},
+				{"hairsp", 8202},
+				{"ZeroWidthSpace", 8203},
+				{"zwnj", 8204},
+				{"zwj", 8205},
+				{"lrm", 8206},
+				{"rlm", 8207},
+				{"hyphen", 8208},
+				{"ndash", 8211},
+				{"mdash", 8212},
+				{"horbar", 8213},
+				{"Verbar", 8214},
+				{"lsquo", 8216},
+				{"rsquo", 8217},
+				{"lsquor", 8218},
+				{"ldquo", 8220},
+				{"rdquo", 8221},
+				{"ldquor", 8222},
+				{"dagger", 8224},
+				{"Dagger", 8225},
+				{"bull", 8226},
+				{"nldr", 8229},
+				{"hellip", 8230},
+				{"permil", 8240},
+				{"pertenk", 8241},
+				{"prime", 8242},
+				{"Prime", 8243},
+				{"tprime", 8244},
+				{"bprime", 8245},
+				{"lsaquo", 8249},
+				{"rsaquo", 8250},
+				{"oline", 8254},
+				{"caret", 8257},
+				{"hybull", 8259},
+				{"frasl", 8260},
+				{"bsemi", 8271},
+				{"qprime", 8279},
+				{"MediumSpace", 8287},
+				{"NoBreak", 8288},
+				{"ApplyFunction", 8289},
+				{"InvisibleTimes", 8290},
+				{"InvisibleComma", 8291},
+				{"euro", 8364},
+				{"tdot", 8411},
+				{"DotDot", 8412},
+				{"Copf", 8450},
+				{"incare", 8453},
+				{"gscr", 8458},
+				{"hamilt", 8459},
+				{"Hfr", 8460},
+				{"quaternions", 8461},
+				{"planckh", 8462},
+				{"planck", 8463},
+				{"Iscr", 8464},
+				{"image", 8465},
+				{"Lscr", 8466},
+				{"ell", 8467},
+				{"Nopf", 8469},
+				{"numero", 8470},
+				{"copysr", 8471},
+				{"weierp", 8472},
+				{"Popf", 8473},
+				{"rationals", 8474},
+				{"Rscr", 8475},
+				{"real", 8476},
+				{"reals", 8477},
+				{"rx", 8478},
+				{"trade", 8482},
+				{"integers", 8484},
+				{"ohm", 8486},
+				{"mho", 8487},
+				{"Zfr", 8488},
+				{"iiota", 8489},
+				{"angst", 8491},
+				{"bernou", 8492},
+				{"Cfr", 8493},
+				{"escr", 8495},
+				{"Escr", 8496},
+				{"Fscr", 8497},
+				{"phmmat", 8499},
+				{"order", 8500},
+				{"alefsym", 8501},
+				{"beth", 8502},
+				{"gimel", 8503},
+				{"daleth", 8504},
+				{"CapitalDifferentialD", 8517},
+				{"DifferentialD", 8518},
+				{"ExponentialE", 8519},
+				{"ImaginaryI", 8520},
+				{"frac13", 8531},
+				{"frac23", 8532},
+				{"frac15", 8533},
+				{"frac25", 8534},
+				{"frac35", 8535},
+				{"frac45", 8536},
+				{"frac16", 8537},
+				{"frac56", 8538},
+				{"frac18", 8539},
+				{"frac38", 8540},
+				{"frac58", 8541},
+				{"frac78", 8542},
+				{"larr", 8592},
+				{"uarr", 8593},
+				{"rarr", 8594},
+				{"darr", 8595},
+				{"harr", 8596},
+				{"varr", 8597},
+				{"nwarr", 8598},
+				{"nearr", 8599},
+				{"searr", 8600},
+				{"swarr", 8601},
+				{"nlarr", 8602},
+				{"nrarr", 8603},
+				{"rarrw", 8605},
+				{"Larr", 8606},
+				{"Uarr", 8607},
+				{"Rarr", 8608},
+				{"Darr", 8609},
+				{"larrtl", 8610},
+				{"rarrtl", 8611},
+				{"LeftTeeArrow", 8612},
+				{"UpTeeArrow", 8613},
+				{"map", 8614},
+				{"DownTeeArrow", 8615},
+				{"larrhk", 8617},
+				{"rarrhk", 8618},
+				{"larrlp", 8619},
+				{"rarrlp", 8620},
+				{"harrw", 8621},
+				{"nharr", 8622},
+				{"lsh", 8624},
+				{"rsh", 8625},
+				{"ldsh", 8626},
+				{"rdsh", 8627},
+				{"crarr", 8629},
+				{"cularr", 8630},
+				{"curarr", 8631},
+				{"olarr", 8634},
+				{"orarr", 8635},
+				{"lharu", 8636},
+				{"lhard", 8637},
+				{"uharr", 8638},
+				{"uharl", 8639},
+				{"rharu", 8640},
+				{"rhard", 8641},
+				{"dharr", 8642},
+				{"dharl", 8643},
+				{"rlarr", 8644},
+				{"udarr", 8645},
+				{"lrarr", 8646},
+				{"llarr", 8647},
+				{"uuarr", 8648},
+				{"rrarr", 8649},
+				{"ddarr", 8650},
+				{"lrhar", 8651},
+				{"rlhar", 8652},
+				{"nlArr", 8653},
+				{"nhArr", 8654},
+				{"nrArr", 8655},
+				{"lArr", 8656},
+				{"uArr", 8657},
+				{"rArr", 8658},
+				{"dArr", 8659},
+				{"hArr", 8660},
+				{"vArr", 8661},
+				{"nwArr", 8662},
+				{"neArr", 8663},
+				{"seArr", 8664},
+				{"swArr", 8665},
+				{"lAarr", 8666},
+				{"rAarr", 8667},
+				{"zigrarr", 8669},
+				{"larrb", 8676},
+				{"rarrb", 8677},
+				{"duarr", 8693},
+				{"loarr", 8701},
+				{"roarr", 8702},
+				{"hoarr", 8703},
+				{"forall", 8704},
+				{"comp", 8705},
+				{"part", 8706},
+				{"exist", 8707},
+				{"nexist", 8708},
+				{"empty", 8709},
+				{"nabla", 8711},
+				{"isin", 8712},
+				{"notin", 8713},
+				{"niv", 8715},
+				{"notni", 8716},
+				{"prod", 8719},
+				{"coprod", 8720},
+				{"sum", 8721},
+				{"minus", 8722},
+				{"mnplus", 8723},
+				{"plusdo", 8724},
+				{"setmn", 8726},
+				{"lowast", 8727},
+				{"compfn", 8728},
+				{"radic", 8730},
+				{"prop", 8733},
+				{"infin", 8734},
+				{"angrt", 8735},
+				{"ang", 8736},
+				{"angmsd", 8737},
+				{"angsph", 8738},
+				{"mid", 8739},
+				{"nmid", 8740},
+				{"par", 8741},
+				{"npar", 8742},
+				{"and", 8743},
+				{"or", 8744},
+				{"cap", 8745},
+				{"cup", 8746},
+				{"int", 8747},
+				{"Int", 8748},
+				{"tint", 8749},
+				{"conint", 8750},
+				{"Conint", 8751},
+				{"Cconint", 8752},
+				{"cwint", 8753},
+				{"cwconint", 8754},
+				{"awconint", 8755},
+				{"there4", 8756},
+				{"becaus", 8757},
+				{"ratio", 8758},
+				{"Colon", 8759},
+				{"minusd", 8760},
+				{"mDDot", 8762},
+				{"homtht", 8763},
+				{"sim", 8764},
+				{"bsim", 8765},
+				{"ac", 8766},
+				{"acd", 8767},
+				{"wreath", 8768},
+				{"nsim", 8769},
+				{"esim", 8770},
+				{"sime", 8771},
+				{"nsime", 8772},
+				{"cong", 8773},
+				{"simne", 8774},
+				{"ncong", 8775},
+				{"asymp", 8776},
+				{"nap", 8777},
+				{"ape", 8778},
+				{"apid", 8779},
+				{"bcong", 8780},
+				{"asympeq", 8781},
+				{"bump", 8782},
+				{"bumpe", 8783},
+				{"esdot", 8784},
+				{"eDot", 8785},
+				{"efDot", 8786},
+				{"erDot", 8787},
+				{"colone", 8788},
+				{"ecolon", 8789},
+				{"ecir", 8790},
+				{"cire", 8791},
+				{"wedgeq", 8793},
+				{"veeeq", 8794},
+				{"trie", 8796},
+				{"equest", 8799},
+				{"ne", 8800},
+				{"equiv", 8801},
+				{"nequiv", 8802},
+				{"le", 8804},
+				{"ge", 8805},
+				{"lE", 8806},
+				{"gE", 8807},
+				{"lnE", 8808},
+				{"gnE", 8809},
+				{"Lt", 8810},
+				{"Gt", 8811},
+				{"twixt", 8812},
+				{"NotCupCap", 8813},
+				{"nlt", 8814},
+				{"ngt", 8815},
+				{"nle", 8816},
+				{"nge", 8817},
+				{"lsim", 8818},
+				{"gsim", 8819},
+				{"nlsim", 8820},
+				{"ngsim", 8821},
+				{"lg", 8822},
+				{"gl", 8823},
+				{"ntlg", 8824},
+				{"ntgl", 8825},
+				{"pr", 8826},
+				{"sc", 8827},
+				{"prcue", 8828},
+				{"sccue", 8829},
+				{"prsim", 8830},
+				{"scsim", 8831},
+				{"npr", 8832},
+				{"nsc", 8833},
+				{"sub", 8834},
+				{"sup", 8835},
+				{"nsub", 8836},
+				{"nsup", 8837},
+				{"sube", 8838},
+				{"supe", 8839},
+				{"nsube", 8840},
+				{"nsupe", 8841},
+				{"subne", 8842},
+				{"supne", 8843},
+				{"cupdot", 8845},
+				{"uplus", 8846},
+				{"sqsub", 8847},
+				{"sqsup", 8848},
+				{"sqsube", 8849},
+				{"sqsupe", 8850},
+				{"sqcap", 8851},
+				{"sqcup", 8852},
+				{"oplus", 8853},
+				{"ominus", 8854},
+				{"otimes", 8855},
+				{"osol", 8856},
+				{"odot", 8857},
+				{"ocir", 8858},
+				{"oast", 8859},
+				{"odash", 8861},
+				{"plusb", 8862},
+				{"minusb", 8863},
+				{"timesb", 8864},
+				{"sdotb", 8865},
+				{"vdash", 8866},
+				{"dashv", 8867},
+				{"top", 8868},
+				{"bottom", 8869},
+				{"models", 8871},
+				{"vDash", 8872},
+				{"Vdash", 8873},
+				{"Vvdash", 8874},
+				{"VDash", 8875},
+				{"nvdash", 8876},
+				{"nvDash", 8877},
+				{"nVdash", 8878},
+				{"nVDash", 8879},
+				{"prurel", 8880},
+				{"vltri", 8882},
+				{"vrtri", 8883},
+				{"ltrie", 8884},
+				{"rtrie", 8885},
+				{"origof", 8886},
+				{"imof", 8887},
+				{"mumap", 8888},
+				{"hercon", 8889},
+				{"intcal", 8890},
+				{"veebar", 8891},
+				{"barvee", 8893},
+				{"angrtvb", 8894},
+				{"lrtri", 8895},
+				{"xwedge", 8896},
+				{"xvee", 8897},
+				{"xcap", 8898},
+				{"xcup", 8899},
+				{"diam", 8900},
+				{"sdot", 8901},
+				{"sstarf", 8902},
+				{"divonx", 8903},
+				{"bowtie", 8904},
+				{"ltimes", 8905},
+				{"rtimes", 8906},
+				{"lthree", 8907},
+				{"rthree", 8908},
+				{"bsime", 8909},
+				{"cuvee", 8910},
+				{"cuwed", 8911},
+				{"Sub", 8912},
+				{"Sup", 8913},
+				{"Cap", 8914},
+				{"Cup", 8915},
+				{"fork", 8916},
+				{"epar", 8917},
+				{"ltdot", 8918},
+				{"gtdot", 8919},
+				{"Ll", 8920},
+				{"Gg", 8921},
+				{"leg", 8922},
+				{"gel", 8923},
+				{"cuepr", 8926},
+				{"cuesc", 8927},
+				{"nprcue", 8928},
+				{"nsccue", 8929},
+				{"nsqsube", 8930},
+				{"nsqsupe", 8931},
+				{"lnsim", 8934},
+				{"gnsim", 8935},
+				{"prnsim", 8936},
+				{"scnsim", 8937},
+				{"nltri", 8938},
+				{"nrtri", 8939},
+				{"nltrie", 8940},
+				{"nrtrie", 8941},
+				{"vellip", 8942},
+				{"ctdot", 8943},
+				{"utdot", 8944},
+				{"dtdot", 8945},
+				{"disin", 8946},
+				{"isinsv", 8947},
+				{"isins", 8948},
+				{"isindot", 8949},
+				{"notinvc", 8950},
+				{"notinvb", 8951},
+				{"isinE", 8953},
+				{"nisd", 8954},
+				{"xnis", 8955},
+				{"nis", 8956},
+				{"notnivc", 8957},
+				{"notnivb", 8958},
+				{"barwed", 8965},
+				{"Barwed", 8966},
+				{"lceil", 8968},
+				{"rceil", 8969},
+				{"lfloor", 8970},
+				{"rfloor", 8971},
+				{"drcrop", 8972},
+				{"dlcrop", 8973},
+				{"urcrop", 8974},
+				{"ulcrop", 8975},
+				{"bnot", 8976},
+				{"profline", 8978},
+				{"profsurf", 8979},
+				{"telrec", 8981},
+				{"target", 8982},
+				{"ulcorn", 8988},
+				{"urcorn", 8989},
+				{"dlcorn", 8990},
+				{"drcorn", 8991},
+				{"frown", 8994},
+				{"smile", 8995},
+				{"cylcty", 9005},
+				{"profalar", 9006},
+				{"topbot", 9014},
+				{"ovbar", 9021},
+				{"solbar", 9023},
+				{"angzarr", 9084},
+				{"lmoust", 9136},
+				{"rmoust", 9137},
+				{"tbrk", 9140},
+				{"bbrk", 9141},
+				{"bbrktbrk", 9142},
+				{"OverParenthesis", 9180},
+				{"UnderParenthesis", 9181},
+				{"OverBrace", 9182},
+				{"UnderBrace", 9183},
+				{"trpezium", 9186},
+				{"elinters", 9191},
+				{"blank", 9251},
+				{"oS", 9416},
+				{"boxh", 9472},
+				{"boxv", 9474},
+				{"boxdr", 9484},
+				{"boxdl", 9488},
+				{"boxur", 9492},
+				{"boxul", 9496},
+				{"boxvr", 9500},
+				{"boxvl", 9508},
+				{"boxhd", 9516},
+				{"boxhu", 9524},
+				{"boxvh", 9532},
+				{"boxH", 9552},
+				{"boxV", 9553},
+				{"boxdR", 9554},
+				{"boxDr", 9555},
+				{"boxDR", 9556},
+				{"boxdL", 9557},
+				{"boxDl", 9558},
+				{"boxDL", 9559},
+				{"boxuR", 9560},
+				{"boxUr", 9561},
+				{"boxUR", 9562},
+				{"boxuL", 9563},
+				{"boxUl", 9564},
+				{"boxUL", 9565},
+				{"boxvR", 9566},
+				{"boxVr", 9567},
+				{"boxVR", 9568},
+				{"boxvL", 9569},
+				{"boxVl", 9570},
+				{"boxVL", 9571},
+				{"boxHd", 9572},
+				{"boxhD", 9573},
+				{"boxHD", 9574},
+				{"boxHu", 9575},
+				{"boxhU", 9576},
+				{"boxHU", 9577},
+				{"boxvH", 9578},
+				{"boxVh", 9579},
+				{"boxVH", 9580},
+				{"uhblk", 9600},
+				{"lhblk", 9604},
+				{"block", 9608},
+				{"blk14", 9617},
+				{"blk12", 9618},
+				{"blk34", 9619},
+				{"squ", 9633},
+				{"squf", 9642},
+				{"EmptyVerySmallSquare", 9643},
+				{"rect", 9645},
+				{"marker", 9646},
+				{"fltns", 9649},
+				{"xutri", 9651},
+				{"utrif", 9652},
+				{"utri", 9653},
+				{"rtrif", 9656},
+				{"rtri", 9657},
+				{"xdtri", 9661},
+				{"dtrif", 9662},
+				{"dtri", 9663},
+				{"ltrif", 9666},
+				{"ltri", 9667},
+				{"loz", 9674},
+				{"cir", 9675},
+				{"tridot", 9708},
+				{"xcirc", 9711},
+				{"ultri", 9720},
+				{"urtri", 9721},
+				{"lltri", 9722},
+				{"EmptySmallSquare", 9723},
+				{"FilledSmallSquare", 9724},
+				{"starf", 9733},
+				{"star", 9734},
+				{"phone", 9742},
+				{"female", 9792},
+				{"male", 9794},
+				{"spades", 9824},
+				{"clubs", 9827},
+				{"hearts", 9829},
+				{"diams", 9830},
+				{"sung", 9834},
+				{"flat", 9837},
+				{"natur", 9838},
+				{"sharp", 9839},
+				{"check", 10003},
+				{"cross", 10007},
+				{"malt", 10016},
+				{"sext", 10038},
+				{"VerticalSeparator", 10072},
+				{"lbbrk", 10098},
+				{"rbbrk", 10099},
+				{"lobrk", 10214},
+				{"robrk", 10215},
+				{"lang", 10216},
+				{"rang", 10217},
+				{"Lang", 10218},
+				{"Rang", 10219},
+				{"loang", 10220},
+				{"roang", 10221},
+				{"xlarr", 10229},
+				{"xrarr", 10230},
+				{"xharr", 10231},
+				{"xlArr", 10232},
+				{"xrArr", 10233},
+				{"xhArr", 10234},
+				{"xmap", 10236},
+				{"dzigrarr", 10239},
+				{"nvlArr", 10498},
+				{"nvrArr", 10499},
+				{"nvHarr", 10500},
+				{"Map", 10501},
+				{"lbarr", 10508},
+				{"rbarr", 10509},
+				{"lBarr", 10510},
+				{"rBarr", 10511},
+				{"RBarr", 10512},
+				{"DDotrahd", 10513},
+				{"UpArrowBar", 10514},
+				{"DownArrowBar", 10515},
+				{"Rarrtl", 10518},
+				{"latail", 10521},
+				{"ratail", 10522},
+				{"lAtail", 10523},
+				{"rAtail", 10524},
+				{"larrfs", 10525},
+				{"rarrfs", 10526},
+				{"larrbfs", 10527},
+				{"rarrbfs", 10528},
+				{"nwarhk", 10531},
+				{"nearhk", 10532},
+				{"searhk", 10533},
+				{"swarhk", 10534},
+				{"nwnear", 10535},
+				{"nesear", 10536},
+				{"seswar", 10537},
+				{"swnwar", 10538},
+				{"rarrc", 10547},
+				{"cudarrr", 10549},
+				{"ldca", 10550},
+				{"rdca", 10551},
+				{"cudarrl", 10552},
+				{"larrpl", 10553},
+				{"curarrm", 10556},
+				{"cularrp", 10557},
+				{"rarrpl", 10565},
+				{"harrcir", 10568},
+				{"Uarrocir", 10569},
+				{"lurdshar", 10570},
+				{"ldrushar", 10571},
+				{"LeftRightVector", 10574},
+				{"RightUpDownVector", 10575},
+				{"DownLeftRightVector", 10576},
+				{"LeftUpDownVector", 10577},
+				{"LeftVectorBar", 10578},
+				{"RightVectorBar", 10579},
+				{"RightUpVectorBar", 10580},
+				{"RightDownVectorBar", 10581},
+				{"DownLeftVectorBar", 10582},
+				{"DownRightVectorBar", 10583},
+				{"LeftUpVectorBar", 10584},
+				{"LeftDownVectorBar", 10585},
+				{"LeftTeeVector", 10586},
+				{"RightTeeVector", 10587},
+				{"RightUpTeeVector", 10588},
+				{"RightDownTeeVector", 10589},
+				{"DownLeftTeeVector", 10590},
+				{"DownRightTeeVector", 10591},
+				{"LeftUpTeeVector", 10592},
+				{"LeftDownTeeVector", 10593},
+				{"lHar", 10594},
+				{"uHar", 10595},
+				{"rHar", 10596},
+				{"dHar", 10597},
+				{"luruhar", 10598},
+				{"ldrdhar", 10599},
+				{"ruluhar", 10600},
+				{"rdldhar", 10601},
+				{"lharul", 10602},
+				{"llhard", 10603},
+				{"rharul", 10604},
+				{"lrhard", 10605},
+				{"udhar", 10606},
+				{"duhar", 10607},
+				{"RoundImplies", 10608},
+				{"erarr", 10609},
+				{"simrarr", 10610},
+				{"larrsim", 10611},
+				{"rarrsim", 10612},
+				{"rarrap", 10613},
+				{"ltlarr", 10614},
+				{"gtrarr", 10616},
+				{"subrarr", 10617},
+				{"suplarr", 10619},
+				{"lfisht", 10620},
+				{"rfisht", 10621},
+				{"ufisht", 10622},
+				{"dfisht", 10623},
+				{"lopar", 10629},
+				{"ropar", 10630},
+				{"lbrke", 10635},
+				{"rbrke", 10636},
+				{"lbrkslu", 10637},
+				{"rbrksld", 10638},
+				{"lbrksld", 10639},
+				{"rbrkslu", 10640},
+				{"langd", 10641},
+				{"rangd", 10642},
+				{"lparlt", 10643},
+				{"rpargt", 10644},
+				{"gtlPar", 10645},
+				{"ltrPar", 10646},
+				{"vzigzag", 10650},
+				{"vangrt", 10652},
+				{"angrtvbd", 10653},
+				{"ange", 10660},
+				{"range", 10661},
+				{"dwangle", 10662},
+				{"uwangle", 10663},
+				{"angmsdaa", 10664},
+				{"angmsdab", 10665},
+				{"angmsdac", 10666},
+				{"angmsdad", 10667},
+				{"angmsdae", 10668},
+				{"angmsdaf", 10669},
+				{"angmsdag", 10670},
+				{"angmsdah", 10671},
+				{"bemptyv", 10672},
+				{"demptyv", 10673},
+				{"cemptyv", 10674},
+				{"raemptyv", 10675},
+				{"laemptyv", 10676},
+				{"ohbar", 10677},
+				{"omid", 10678},
+				{"opar", 10679},
+				{"operp", 10681},
+				{"olcross", 10683},
+				{"odsold", 10684},
+				{"olcir", 10686},
+				{"ofcir", 10687},
+				{"olt", 10688},
+				{"ogt", 10689},
+				{"cirscir", 10690},
+				{"cirE", 10691},
+				{"solb", 10692},
+				{"bsolb", 10693},
+				{"boxbox", 10697},
+				{"trisb", 10701},
+				{"rtriltri", 10702},
+				{"LeftTriangleBar", 10703},
+				{"RightTriangleBar", 10704},
+				{"race", 10714},
+				{"iinfin", 10716},
+				{"infintie", 10717},
+				{"nvinfin", 10718},
+				{"eparsl", 10723},
+				{"smeparsl", 10724},
+				{"eqvparsl", 10725},
+				{"lozf", 10731},
+				{"RuleDelayed", 10740},
+				{"dsol", 10742},
+				{"xodot", 10752},
+				{"xoplus", 10753},
+				{"xotime", 10754},
+				{"xuplus", 10756},
+				{"xsqcup", 10758},
+				{"qint", 10764},
+				{"fpartint", 10765},
+				{"cirfnint", 10768},
+				{"awint", 10769},
+				{"rppolint", 10770},
+				{"scpolint", 10771},
+				{"npolint", 10772},
+				{"pointint", 10773},
+				{"quatint", 10774},
+				{"intlarhk", 10775},
+				{"pluscir", 10786},
+				{"plusacir", 10787},
+				{"simplus", 10788},
+				{"plusdu", 10789},
+				{"plussim", 10790},
+				{"plustwo", 10791},
+				{"mcomma", 10793},
+				{"minusdu", 10794},
+				{"loplus", 10797},
+				{"roplus", 10798},
+				{"Cross", 10799},
+				{"timesd", 10800},
+				{"timesbar", 10801},
+				{"smashp", 10803},
+				{"lotimes", 10804},
+				{"rotimes", 10805},
+				{"otimesas", 10806},
+				{"Otimes", 10807},
+				{"odiv", 10808},
+				{"triplus", 10809},
+				{"triminus", 10810},
+				{"tritime", 10811},
+				{"iprod", 10812},
+				{"amalg", 10815},
+				{"capdot", 10816},
+				{"ncup", 10818},
+				{"ncap", 10819},
+				{"capand", 10820},
+				{"cupor", 10821},
+				{"cupcap", 10822},
+				{"capcup", 10823},
+				{"cupbrcap", 10824},
+				{"capbrcup", 10825},
+				{"cupcup", 10826},
+				{"capcap", 10827},
+				{"ccups", 10828},
+				{"ccaps", 10829},
+				{"ccupssm", 10832},
+				{"And", 10835},
+				{"Or", 10836},
+				{"andand", 10837},
+				{"oror", 10838},
+				{"orslope", 10839},
+				{"andslope", 10840},
+				{"andv", 10842},
+				{"orv", 10843},
+				{"andd", 10844},
+				{"ord", 10845},
+				{"wedbar", 10847},
+				{"sdote", 10854},
+				{"simdot", 10858},
+				{"congdot", 10861},
+				{"easter", 10862},
+				{"apacir", 10863},
+				{"apE", 10864},
+				{"eplus", 10865},
+				{"pluse", 10866},
+				{"Esim", 10867},
+				{"Colone", 10868},
+				{"Equal", 10869},
+				{"eDDot", 10871},
+				{"equivDD", 10872},
+				{"ltcir", 10873},
+				{"gtcir", 10874},
+				{"ltquest", 10875},
+				{"gtquest", 10876},
+				{"les", 10877},
+				{"ges", 10878},
+				{"lesdot", 10879},
+				{"gesdot", 10880},
+				{"lesdoto", 10881},
+				{"gesdoto", 10882},
+				{"lesdotor", 10883},
+				{"gesdotol", 10884},
+				{"lap", 10885},
+				{"gap", 10886},
+				{"lne", 10887},
+				{"gne", 10888},
+				{"lnap", 10889},
+				{"gnap", 10890},
+				{"lEg", 10891},
+				{"gEl", 10892},
+				{"lsime", 10893},
+				{"gsime", 10894},
+				{"lsimg", 10895},
+				{"gsiml", 10896},
+				{"lgE", 10897},
+				{"glE", 10898},
+				{"lesges", 10899},
+				{"gesles", 10900},
+				{"els", 10901},
+				{"egs", 10902},
+				{"elsdot", 10903},
+				{"egsdot", 10904},
+				{"el", 10905},
+				{"eg", 10906},
+				{"siml", 10909},
+				{"simg", 10910},
+				{"simlE", 10911},
+				{"simgE", 10912},
+				{"LessLess", 10913},
+				{"GreaterGreater", 10914},
+				{"glj", 10916},
+				{"gla", 10917},
+				{"ltcc", 10918},
+				{"gtcc", 10919},
+				{"lescc", 10920},
+				{"gescc", 10921},
+				{"smt", 10922},
+				{"lat", 10923},
+				{"smte", 10924},
+				{"late", 10925},
+				{"bumpE", 10926},
+				{"pre", 10927},
+				{"sce", 10928},
+				{"prE", 10931},
+				{"scE", 10932},
+				{"prnE", 10933},
+				{"scnE", 10934},
+				{"prap", 10935},
+				{"scap", 10936},
+				{"prnap", 10937},
+				{"scnap", 10938},
+				{"Pr", 10939},
+				{"Sc", 10940},
+				{"subdot", 10941},
+				{"supdot", 10942},
+				{"subplus", 10943},
+				{"supplus", 10944},
+				{"submult", 10945},
+				{"supmult", 10946},
+				{"subedot", 10947},
+				{"supedot", 10948},
+				{"subE", 10949},
+				{"supE", 10950},
+				{"subsim", 10951},
+				{"supsim", 10952},
+				{"subnE", 10955},
+				{"supnE", 10956},
+				{"csub", 10959},
+				{"csup", 10960},
+				{"csube", 10961},
+				{"csupe", 10962},
+				{"subsup", 10963},
+				{"supsub", 10964},
+				{"subsub", 10965},
+				{"supsup", 10966},
+				{"suphsub", 10967},
+				{"supdsub", 10968},
+				{"forkv", 10969},
+				{"topfork", 10970},
+				{"mlcp", 10971},
+				{"Dashv", 10980},
+				{"Vdashl", 10982},
+				{"Barv", 10983},
+				{"vBar", 10984},
+				{"vBarv", 10985},
+				{"Vbar", 10987},
+				{"Not", 10988},
+				{"bNot", 10989},
+				{"rnmid", 10990},
+				{"cirmid", 10991},
+				{"midcir", 10992},
+				{"topcir", 10993},
+				{"nhpar", 10994},
+				{"parsim", 10995},
+				{"parsl", 11005},
+				{"fflig", 64256},
+				{"filig", 64257},
+				{"fllig", 64258},
+				{"ffilig", 64259},
+				{"ffllig", 64260},
+				{"Ascr", 119964},
+				{"Cscr", 119966},
+				{"Dscr", 119967},
+				{"Gscr", 119970},
+				{"Jscr", 119973},
+				{"Kscr", 119974},
+				{"Nscr", 119977},
+				{"Oscr", 119978},
+				{"Pscr", 119979},
+				{"Qscr", 119980},
+				{"Sscr", 119982},
+				{"Tscr", 119983},
+				{"Uscr", 119984},
+				{"Vscr", 119985},
+				{"Wscr", 119986},
+				{"Xscr", 119987},
+				{"Yscr", 119988},
+				{"Zscr", 119989},
+				{"ascr", 119990},
+				{"bscr", 119991},
+				{"cscr", 119992},
+				{"dscr", 119993},
+				{"fscr", 119995},
+				{"hscr", 119997},
+				{"iscr", 119998},
+				{"jscr", 119999},
+				{"kscr", 120000},
+				{"lscr", 120001},
+				{"mscr", 120002},
+				{"nscr", 120003},
+				{"pscr", 120005},
+				{"qscr", 120006},
+				{"rscr", 120007},
+				{"sscr", 120008},
+				{"tscr", 120009},
+				{"uscr", 120010},
+				{"vscr", 120011},
+				{"wscr", 120012},
+				{"xscr", 120013},
+				{"yscr", 120014},
+				{"zscr", 120015},
+				{"Afr", 120068},
+				{"Bfr", 120069},
+				{"Dfr", 120071},
+				{"Efr", 120072},
+				{"Ffr", 120073},
+				{"Gfr", 120074},
+				{"Jfr", 120077},
+				{"Kfr", 120078},
+				{"Lfr", 120079},
+				{"Mfr", 120080},
+				{"Nfr", 120081},
+				{"Ofr", 120082},
+				{"Pfr", 120083},
+				{"Qfr", 120084},
+				{"Sfr", 120086},
+				{"Tfr", 120087},
+				{"Ufr", 120088},
+				{"Vfr", 120089},
+				{"Wfr", 120090},
+				{"Xfr", 120091},
+				{"Yfr", 120092},
+				{"afr", 120094},
+				{"bfr", 120095},
+				{"cfr", 120096},
+				{"dfr", 120097},
+				{"efr", 120098},
+				{"ffr", 120099},
+				{"gfr", 120100},
+				{"hfr", 120101},
+				{"ifr", 120102},
+				{"jfr", 120103},
+				{"kfr", 120104},
+				{"lfr", 120105},
+				{"mfr", 120106},
+				{"nfr", 120107},
+				{"ofr", 120108},
+				{"pfr", 120109},
+				{"qfr", 120110},
+				{"rfr", 120111},
+				{"sfr", 120112},
+				{"tfr", 120113},
+				{"ufr", 120114},
+				{"vfr", 120115},
+				{"wfr", 120116},
+				{"xfr", 120117},
+				{"yfr", 120118},
+				{"zfr", 120119},
+				{"Aopf", 120120},
+				{"Bopf", 120121},
+				{"Dopf", 120123},
+				{"Eopf", 120124},
+				{"Fopf", 120125},
+				{"Gopf", 120126},
+				{"Iopf", 120128},
+				{"Jopf", 120129},
+				{"Kopf", 120130},
+				{"Lopf", 120131},
+				{"Mopf", 120132},
+				{"Oopf", 120134},
+				{"Sopf", 120138},
+				{"Topf", 120139},
+				{"Uopf", 120140},
+				{"Vopf", 120141},
+				{"Wopf", 120142},
+				{"Xopf", 120143},
+				{"Yopf", 120144},
+				{"aopf", 120146},
+				{"bopf", 120147},
+				{"copf", 120148},
+				{"dopf", 120149},
+				{"eopf", 120150},
+				{"fopf", 120151},
+				{"gopf", 120152},
+				{"hopf", 120153},
+				{"iopf", 120154},
+				{"jopf", 120155},
+				{"kopf", 120156},
+				{"lopf", 120157},
+				{"mopf", 120158},
+				{"nopf", 120159},
+				{"oopf", 120160},
+				{"popf", 120161},
+				{"qopf", 120162},
+				{"ropf", 120163},
+				{"sopf", 120164},
+				{"topf", 120165},
+				{"uopf", 120166},
+				{"vopf", 120167},
+				{"wopf", 120168},
+				{"xopf", 120169},
+				{"yopf", 120170},
+				{"zopf", 120171}
 	};
 
-#define ENTITY_NAME_LENGTH_MAX 8
-#define NR_OF_ENTITIES 252
+//name &AElig;  longest  1+20+1
+//hex &#x000C6; longest supported 3+6+1
+//dec &#198;    longest supported 2+7+1
+//longest entity name: 20
+//hex and dec should be limited to current unicode spec + entity prefix + suffix
+#define ENTITY_NAME_LENGTH_MAX 22
+#define ENTITY_HEX_LENGTH_MAX 10
+#define ENTITY_DEC_LENGTH_MAX 10
+#define NR_OF_ENTITIES 1448
 
 #ifdef __cplusplus
 }
diff -Naur ../libgd-2.3.2-orig/src/gdft.c ./src/gdft.c
--- ../libgd-2.3.2-orig/src/gdft.c	2021-03-03 00:15:02.000000000 -0700
+++ ./src/gdft.c	2021-04-20 16:35:21.090027197 -0700
@@ -250,13 +250,6 @@
 #include "jisx0208.h"
 #endif
 
-static int comp_entities(const void *e1, const void *e2)
-{
-	struct entities_s *en1 = (struct entities_s *) e1;
-	struct entities_s *en2 = (struct entities_s *) e2;
-	return strcmp(en1->name, en2->name);
-}
-
 extern int any2eucjp (char *, const char *, unsigned int);
 
 /* Persistent font cache until explicitly cleared */
@@ -267,166 +260,158 @@
 static gdCache_head_t *fontCache;
 static FT_Library library;
 
-#define Tcl_UniChar int
-#define TCL_UTF_MAX 3
-static int
-gdTcl_UtfToUniChar (const char *str, Tcl_UniChar * chPtr)
-/* str is the UTF8 next character pointer */
-/* chPtr is the int for the result */
-{
-	int byte;
-	char entity_name_buf[ENTITY_NAME_LENGTH_MAX+1];
-	char *p;
-	struct entities_s key, *res;
-
-	/* HTML4.0 entities in decimal form, e.g. &#197; */
-	/*           or in hexadecimal form, e.g. &#x6C34; */
-	byte = *((unsigned char *) str);
-	if (byte == '&') {
-		int i, n = 0;
-
-		byte = *((unsigned char *) (str + 1));
-		if (byte == '#') {
-			byte = *((unsigned char *) (str + 2));
-			if (byte == 'x' || byte == 'X') {
-				for (i = 3; i < 8; i++) {
-					byte = *((unsigned char *) (str + i));
-					if (byte >= 'A' && byte <= 'F')
-						byte = byte - 'A' + 10;
-					else if (byte >= 'a' && byte <= 'f')
-						byte = byte - 'a' + 10;
-					else if (byte >= '0' && byte <= '9')
-						byte = byte - '0';
-					else
-						break;
-					n = (n * 16) + byte;
-				}
-			} else {
-				for (i = 2; i < 8; i++) {
-					byte = *((unsigned char *) (str + i));
-					if (byte >= '0' && byte <= '9')
-						n = (n * 10) + (byte - '0');
-					else
-						break;
-				}
+#define Tcl_UniChar uint32_t
+#define TCL_UTF_MAX 4
+
+static int gd_EntityToUniChar(const char *str, uint32_t *chPtr){
+	// str is the UTF8 next character pointer, or a pointer to a string of 4 different kinds of html entity notation
+	// chPtr is the int for the result
+	// return value is the offset from str to the char for the next search to start
+	// function falls through and returns 0 if no valid entity detected, leaving chPtr alone.
+	// HTML4.0/5.0 entities in hexadecimal form (e.g. &#x00021; and &#X00021;), in decimal form (e.g. &#33;),  or in string form (e.g. &excl;)
+	char entity_name_buf[ENTITY_NAME_LENGTH_MAX];
+	uint32_t n = 0;
+	uint32_t i = 0;
+	uint32_t b0 = (uint8_t)str[0];
+	static const uint8_t first_digit = '0';
+	static const uint8_t bound_low_digit = '/';
+	static const uint8_t bound_hi_digit = ':';
+	static const uint8_t first_ucase = 'A';
+	static const uint8_t bound_low_ucase = '@';
+	static const uint8_t bound_hi_ucase = 'G';
+	static const uint8_t first_lcase = 'a';
+	static const uint8_t bound_low_lcase = '`';
+	static const uint8_t bound_hi_lcase = 'g';
+	static const uint8_t prefix0 = '&';
+	static const uint8_t prefix1 = '#';
+	static const uint8_t prefix2 = 'x';
+	static const uint8_t prefix3 = 'X';
+	static const uint8_t suffix = ';';
+	static const uint8_t ten = 10;
+
+	if(b0 != prefix0)
+		return 0;
+	i++;
+	b0=(uint8_t)str[i++];
+	if(b0 == prefix1){
+		//hex or decimal
+		b0=(uint8_t)str[i++];
+		if(b0 == prefix2 || b0 == prefix3){
+			//is hex
+			b0=(uint8_t)str[i++];
+			while(i<ENTITY_HEX_LENGTH_MAX){
+				if(b0 > bound_low_digit && b0 < bound_hi_digit)
+					b0 = b0 - first_digit;
+				else if(b0 > bound_low_ucase && b0 < bound_hi_ucase)
+					b0 = b0 - first_ucase + ten;
+				else if(b0 > bound_low_lcase && b0 < bound_hi_lcase)
+					b0 = b0 - first_lcase + ten;
+				else
+					break;
+				n = n * 16 + b0;
+				b0=(uint8_t)str[i++];
 			}
-			if (byte == ';') {
-				*chPtr = (Tcl_UniChar) n;
-				return ++i;
+			if(b0 == suffix){
+				*chPtr = n;
+				return i;
 			}
-		} else {
-			key.name = p = entity_name_buf;
-			for (i = 1; i <= 1 + ENTITY_NAME_LENGTH_MAX; i++) {
-				byte = *((unsigned char *) (str + i));
-				if (byte == '\0')
+		}else{ 
+			//is dec
+			while(i<ENTITY_DEC_LENGTH_MAX){
+				if(b0 > bound_low_digit && b0 < bound_hi_digit)
+					n = n * ten + b0 - first_digit;
+				else
 					break;
-				if (byte == ';') {
-					*p++ = '\0';
-					res = bsearch(&key, entities, NR_OF_ENTITIES,
-					              sizeof(entities[0]), *comp_entities);
-					if (res) {
-						*chPtr = (Tcl_UniChar) res->value;
-						return ++i;
-					}
-					break;
-				}
-				*p++ = byte;
+
+				b0=(uint8_t)str[i++];
+			}
+			if(b0 == suffix){
+				*chPtr = n;
+				return i;
+			}
+		}
+	}else{
+		//string format alphanumeric
+		//copy str into buffer untill '\0' or ;
+		while(i<ENTITY_NAME_LENGTH_MAX){
+			//not an entity
+			if(b0 == '\0')
+				return 0;
+			//have complete copy
+			if(b0 == suffix){
+				entity_name_buf[n] = '\0';
+				break;
+			}
+			entity_name_buf[n++] = b0;
+			b0=(uint8_t)str[i++];
+		}
+		//not an entity, too long
+		if(b0 != suffix)
+			return 0;
+		for(n = 0; n < NR_OF_ENTITIES; n++){
+			if(strcmp((const char *)entities[n].name, (const char *)entity_name_buf) == 0){
+				*chPtr = (uint32_t)entities[n].value;
+				return i;
 			}
 		}
 	}
+	//no match
+	return 0;
+}
 
-	/*
-	 * Unroll 1 to 3 byte UTF-8 sequences, use loop to handle longer ones.
-	 */
+static int gd_UTF8ToUniChar(const char *str, uint32_t *chPtr){
+	//reads the contents pointed to by str and outputs a unicode codepage into object pointed to by chPtre
+	//return is the bytes to offset for the first char of a subsequent read
+	uint32_t b0 = *(uint8_t *)str;
+	uint32_t b1, b2, b3;
 
-	byte = *((unsigned char *) str);
 #ifdef JISX0208
-	if (0xA1 <= byte && byte <= 0xFE) {
-		int ku, ten;
-
-		ku = (byte & 0x7F) - 0x20;
+	uint32_t ku, ten;
+	if(0xA1 <= b0 && b0 <= 0xFE){
+		ku = (b0 & 0x7F) - 0x20;
 		ten = (str[1] & 0x7F) - 0x20;
-		if ((ku < 1 || ku > 92) || (ten < 1 || ten > 94)) {
-			*chPtr = (Tcl_UniChar) byte;
+		if((ku < 1 || ku > 92) || (ten < 1 || ten > 94)){
+			*chPtr = b0;
 			return 1;
 		}
-
-		*chPtr = (Tcl_UniChar) UnicodeTbl[ku - 1][ten - 1];
+		*chPtr = (Tcl_UniChar)UnicodeTbl[ku - 1][ten - 1];
 		return 2;
-	} else
+	}else
 #endif /* JISX0208 */
-		if (byte < 0xC0) {
-			/*
-			 * Handles properly formed UTF-8 characters between
-			 * 0x01 and 0x7F.  Also treats \0 and naked trail
-			 * bytes 0x80 to 0xBF as valid characters representing
-			 * themselves.
-			 */
-
-			*chPtr = (Tcl_UniChar) byte;
-			return 1;
-		} else if (byte < 0xE0) {
-			if ((str[1] & 0xC0) == 0x80) {
-				/*
-				 * Two-byte-character lead-byte followed
-				 * by a trail-byte.
-				 */
-
-				*chPtr = (Tcl_UniChar) (((byte & 0x1F) << 6) | (str[1] & 0x3F));
-				return 2;
-			}
-			/*
-			 * A two-byte-character lead-byte not followed by trail-byte
-			 * represents itself.
-			 */
-
-			*chPtr = (Tcl_UniChar) byte;
-			return 1;
-		} else if (byte < 0xF0) {
-			if (((str[1] & 0xC0) == 0x80) && ((str[2] & 0xC0) == 0x80)) {
-				/*
-				 * Three-byte-character lead byte followed by
-				 * two trail bytes.
-				 */
-
-				*chPtr = (Tcl_UniChar) (((byte & 0x0F) << 12)
-				                        | ((str[1] & 0x3F) << 6) | (str[2] & 0x3F));
-				return 3;
-			}
-			/*
-			 * A three-byte-character lead-byte not followed by
-			 * two trail-bytes represents itself.
-			 */
-
-			*chPtr = (Tcl_UniChar) byte;
-			return 1;
+	if(b0 < 0xC0){
+		*chPtr = b0;
+		return 1;
+	} else if(b0 < 0xE0){
+		b1 = (uint8_t)str[1];
+		if((b1 & 0xC0) == 0x80){
+			*chPtr = ((b0 & 0x1F) << 6) | (b1 & 0x3F);
+			return 2;
 		}
-#if TCL_UTF_MAX > 3
-		else {
-			int ch, total, trail;
-
-			total = totalBytes[byte];
-			trail = total - 1;
-			if (trail > 0) {
-				ch = byte & (0x3F >> trail);
-				do {
-					str++;
-					if ((*str & 0xC0) != 0x80) {
-						*chPtr = byte;
-						return 1;
-					}
-					ch <<= 6;
-					ch |= (*str & 0x3F);
-					trail--;
-				} while (trail > 0);
-				*chPtr = ch;
-				return total;
-			}
+		*chPtr = b0;
+		return 1;
+	} else if(b0 < 0xF0){
+		b1 = (uint8_t)str[1];
+		b2 = (uint8_t)str[2];
+		if(((b1 & 0xC0) == 0x80) && ((b2 & 0xC0) == 0x80)){
+			*chPtr = ((b0 & 0x0F) << 12) | ((b1 & 0x3F) << 6) | (b2 & 0x3F);
+			return 3;
 		}
-#endif
-
-	*chPtr = (Tcl_UniChar) byte;
-	return 1;
+		*chPtr = b0;
+		return 1;
+	}else if(b0 < 0xF8){
+		b1 = (uint8_t)str[1];
+		b2 = (uint8_t)str[2];
+		b3 = (uint8_t)str[3];
+		if(((b1 & 0xC0) == 0x80) && ((b2 & 0xC0) == 0x80) && ((b3 & 0xC0) == 0x80)){
+			*chPtr = ((b0 & 0x7) << 18) | ((b1 & 0x3F) << 12) | ((b2 & 0x3F) << 6) | (b3 & 0x3F);
+			return 4;
+		}
+		*chPtr = b0;
+		return 1;
+	}else{
+		printf("WARNING: utf-8 above 21-bit unicode range\n");
+	}
+	return 0;
 }
 
 #ifdef HAVE_LIBRAQM
@@ -442,7 +427,7 @@
 } glyphInfo;
 
 static ssize_t
-textLayout(uint32_t *text, int len,
+textLayout(uint32_t *text, uint32_t len,
 		FT_Face face, gdFTStringExtraPtr strex,
 		glyphInfo **glyph_info)
 {
@@ -1105,10 +1090,10 @@
 	FT_UInt glyph_index;
 	double sin_a = sin (angle);
 	double cos_a = cos (angle);
-	int  i, ch;
+	uint32_t  i, ch;
 	font_t *font;
 	fontkey_t fontkey;
-	const char *next;
+	char *next;
 	char *tmpstr = 0;
 	uint32_t *text;
 	glyphInfo *info = NULL;
@@ -1300,7 +1285,8 @@
 #endif
 	}
 	if (encodingfound) {
-		FT_Set_Charmap(face, charmap);
+		FT_Select_Charmap(face, FT_ENCODING_UNICODE);
+		//FT_Set_Charmap(face, charmap);
 	} else {
 		/* No character set found! */
 		gdCacheDelete (tc_cache);
@@ -1315,25 +1301,28 @@
 			any2eucjp (tmpstr, string, BUFSIZ);
 			next = tmpstr;
 		} else {
-			next = string;
+			next = (char *)string;
 		}
 #ifndef JISX0208
 	} else {
-		next = string;
+		next = (char *)string;
 	}
 #endif
 
 	oldpenf.x = oldpenf.y = 0; /* for postscript xshow operator */
 	penf.x = penf.y = 0;	/* running position of non-rotated glyphs */
-	text = (uint32_t*) gdCalloc (sizeof (uint32_t), strlen(next));
+	text = (uint32_t *)gdCalloc(sizeof(uint32_t), strlen((const char *)next));
 	i = 0;
 	while (*next) {
 		int len;
 		ch = *next;
 		switch (encoding) {
 		case gdFTEX_Unicode: {
-			/* use UTF-8 mapping from ASCII */
-			len = gdTcl_UtfToUniChar (next, &ch);
+			//html entity
+			len = gd_EntityToUniChar((const char *)next, &ch);
+			//UTF-8
+			if(len == 0)
+				len = gd_UTF8ToUniChar((const char *)next, &ch);
 			/* EAM DEBUG */
 			/* TBB: get this exactly right: 2.1.3 *or better*, all possible cases. */
 			/* 2.0.24: David R. Morrison: use the more complete ifdef here. */
