1 # coding: utf-8
2 from __future__ import unicode_literals
3
4 import base64
5 import binascii
6 import collections
7 import ctypes
8 import email
9 import getpass
10 import io
11 import itertools
12 import optparse
13 import os
14 import platform
15 import re
16 import shlex
17 import shutil
18 import socket
19 import struct
20 import subprocess
21 import sys
22 import xml.etree.ElementTree
23
24 try:
25 import collections.abc as compat_collections_abc
26 except ImportError:
27 import collections as compat_collections_abc
28
29 try:
30 import urllib.request as compat_urllib_request
31 except ImportError: # Python 2
32 import urllib2 as compat_urllib_request
33
34 try:
35 import urllib.error as compat_urllib_error
36 except ImportError: # Python 2
37 import urllib2 as compat_urllib_error
38
39 try:
40 import urllib.parse as compat_urllib_parse
41 except ImportError: # Python 2
42 import urllib as compat_urllib_parse
43
44 try:
45 from urllib.parse import urlparse as compat_urllib_parse_urlparse
46 except ImportError: # Python 2
47 from urlparse import urlparse as compat_urllib_parse_urlparse
48
49 try:
50 import urllib.parse as compat_urlparse
51 except ImportError: # Python 2
52 import urlparse as compat_urlparse
53
54 try:
55 import urllib.response as compat_urllib_response
56 except ImportError: # Python 2
57 import urllib as compat_urllib_response
58
59 try:
60 import http.cookiejar as compat_cookiejar
61 except ImportError: # Python 2
62 import cookielib as compat_cookiejar
63
64 if sys.version_info[0] == 2:
65 class compat_cookiejar_Cookie(compat_cookiejar.Cookie):
66 def __init__(self, version, name, value, *args, **kwargs):
67 if isinstance(name, compat_str):
68 name = name.encode()
69 if isinstance(value, compat_str):
70 value = value.encode()
71 compat_cookiejar.Cookie.__init__(self, version, name, value, *args, **kwargs)
72 else:
73 compat_cookiejar_Cookie = compat_cookiejar.Cookie
74
75 try:
76 import http.cookies as compat_cookies
77 except ImportError: # Python 2
78 import Cookie as compat_cookies
79
80 if sys.version_info[0] == 2:
81 class compat_cookies_SimpleCookie(compat_cookies.SimpleCookie):
82 def load(self, rawdata):
83 if isinstance(rawdata, compat_str):
84 rawdata = str(rawdata)
85 return super(compat_cookies_SimpleCookie, self).load(rawdata)
86 else:
87 compat_cookies_SimpleCookie = compat_cookies.SimpleCookie
88
89 try:
90 import html.entities as compat_html_entities
91 except ImportError: # Python 2
92 import htmlentitydefs as compat_html_entities
93
94 try: # Python >= 3.3
95 compat_html_entities_html5 = compat_html_entities.html5
96 except AttributeError:
97 # Copied from CPython 3.5.1 html/entities.py
98 compat_html_entities_html5 = {
99 'Aacute': '\xc1',
100 'aacute': '\xe1',
101 'Aacute;': '\xc1',
102 'aacute;': '\xe1',
103 'Abreve;': '\u0102',
104 'abreve;': '\u0103',
105 'ac;': '\u223e',
106 'acd;': '\u223f',
107 'acE;': '\u223e\u0333',
108 'Acirc': '\xc2',
109 'acirc': '\xe2',
110 'Acirc;': '\xc2',
111 'acirc;': '\xe2',
112 'acute': '\xb4',
113 'acute;': '\xb4',
114 'Acy;': '\u0410',
115 'acy;': '\u0430',
116 'AElig': '\xc6',
117 'aelig': '\xe6',
118 'AElig;': '\xc6',
119 'aelig;': '\xe6',
120 'af;': '\u2061',
121 'Afr;': '\U0001d504',
122 'afr;': '\U0001d51e',
123 'Agrave': '\xc0',
124 'agrave': '\xe0',
125 'Agrave;': '\xc0',
126 'agrave;': '\xe0',
127 'alefsym;': '\u2135',
128 'aleph;': '\u2135',
129 'Alpha;': '\u0391',
130 'alpha;': '\u03b1',
131 'Amacr;': '\u0100',
132 'amacr;': '\u0101',
133 'amalg;': '\u2a3f',
134 'AMP': '&',
135 'amp': '&',
136 'AMP;': '&',
137 'amp;': '&',
138 'And;': '\u2a53',
139 'and;': '\u2227',
140 'andand;': '\u2a55',
141 'andd;': '\u2a5c',
142 'andslope;': '\u2a58',
143 'andv;': '\u2a5a',
144 'ang;': '\u2220',
145 'ange;': '\u29a4',
146 'angle;': '\u2220',
147 'angmsd;': '\u2221',
148 'angmsdaa;': '\u29a8',
149 'angmsdab;': '\u29a9',
150 'angmsdac;': '\u29aa',
151 'angmsdad;': '\u29ab',
152 'angmsdae;': '\u29ac',
153 'angmsdaf;': '\u29ad',
154 'angmsdag;': '\u29ae',
155 'angmsdah;': '\u29af',
156 'angrt;': '\u221f',
157 'angrtvb;': '\u22be',
158 'angrtvbd;': '\u299d',
159 'angsph;': '\u2222',
160 'angst;': '\xc5',
161 'angzarr;': '\u237c',
162 'Aogon;': '\u0104',
163 'aogon;': '\u0105',
164 'Aopf;': '\U0001d538',
165 'aopf;': '\U0001d552',
166 'ap;': '\u2248',
167 'apacir;': '\u2a6f',
168 'apE;': '\u2a70',
169 'ape;': '\u224a',
170 'apid;': '\u224b',
171 'apos;': "'",
172 'ApplyFunction;': '\u2061',
173 'approx;': '\u2248',
174 'approxeq;': '\u224a',
175 'Aring': '\xc5',
176 'aring': '\xe5',
177 'Aring;': '\xc5',
178 'aring;': '\xe5',
179 'Ascr;': '\U0001d49c',
180 'ascr;': '\U0001d4b6',
181 'Assign;': '\u2254',
182 'ast;': '*',
183 'asymp;': '\u2248',
184 'asympeq;': '\u224d',
185 'Atilde': '\xc3',
186 'atilde': '\xe3',
187 'Atilde;': '\xc3',
188 'atilde;': '\xe3',
189 'Auml': '\xc4',
190 'auml': '\xe4',
191 'Auml;': '\xc4',
192 'auml;': '\xe4',
193 'awconint;': '\u2233',
194 'awint;': '\u2a11',
195 'backcong;': '\u224c',
196 'backepsilon;': '\u03f6',
197 'backprime;': '\u2035',
198 'backsim;': '\u223d',
199 'backsimeq;': '\u22cd',
200 'Backslash;': '\u2216',
201 'Barv;': '\u2ae7',
202 'barvee;': '\u22bd',
203 'Barwed;': '\u2306',
204 'barwed;': '\u2305',
205 'barwedge;': '\u2305',
206 'bbrk;': '\u23b5',
207 'bbrktbrk;': '\u23b6',
208 'bcong;': '\u224c',
209 'Bcy;': '\u0411',
210 'bcy;': '\u0431',
211 'bdquo;': '\u201e',
212 'becaus;': '\u2235',
213 'Because;': '\u2235',
214 'because;': '\u2235',
215 'bemptyv;': '\u29b0',
216 'bepsi;': '\u03f6',
217 'bernou;': '\u212c',
218 'Bernoullis;': '\u212c',
219 'Beta;': '\u0392',
220 'beta;': '\u03b2',
221 'beth;': '\u2136',
222 'between;': '\u226c',
223 'Bfr;': '\U0001d505',
224 'bfr;': '\U0001d51f',
225 'bigcap;': '\u22c2',
226 'bigcirc;': '\u25ef',
227 'bigcup;': '\u22c3',
228 'bigodot;': '\u2a00',
229 'bigoplus;': '\u2a01',
230 'bigotimes;': '\u2a02',
231 'bigsqcup;': '\u2a06',
232 'bigstar;': '\u2605',
233 'bigtriangledown;': '\u25bd',
234 'bigtriangleup;': '\u25b3',
235 'biguplus;': '\u2a04',
236 'bigvee;': '\u22c1',
237 'bigwedge;': '\u22c0',
238 'bkarow;': '\u290d',
239 'blacklozenge;': '\u29eb',
240 'blacksquare;': '\u25aa',
241 'blacktriangle;': '\u25b4',
242 'blacktriangledown;': '\u25be',
243 'blacktriangleleft;': '\u25c2',
244 'blacktriangleright;': '\u25b8',
245 'blank;': '\u2423',
246 'blk12;': '\u2592',
247 'blk14;': '\u2591',
248 'blk34;': '\u2593',
249 'block;': '\u2588',
250 'bne;': '=\u20e5',
251 'bnequiv;': '\u2261\u20e5',
252 'bNot;': '\u2aed',
253 'bnot;': '\u2310',
254 'Bopf;': '\U0001d539',
255 'bopf;': '\U0001d553',
256 'bot;': '\u22a5',
257 'bottom;': '\u22a5',
258 'bowtie;': '\u22c8',
259 'boxbox;': '\u29c9',
260 'boxDL;': '\u2557',
261 'boxDl;': '\u2556',
262 'boxdL;': '\u2555',
263 'boxdl;': '\u2510',
264 'boxDR;': '\u2554',
265 'boxDr;': '\u2553',
266 'boxdR;': '\u2552',
267 'boxdr;': '\u250c',
268 'boxH;': '\u2550',
269 'boxh;': '\u2500',
270 'boxHD;': '\u2566',
271 'boxHd;': '\u2564',
272 'boxhD;': '\u2565',
273 'boxhd;': '\u252c',
274 'boxHU;': '\u2569',
275 'boxHu;': '\u2567',
276 'boxhU;': '\u2568',
277 'boxhu;': '\u2534',
278 'boxminus;': '\u229f',
279 'boxplus;': '\u229e',
280 'boxtimes;': '\u22a0',
281 'boxUL;': '\u255d',
282 'boxUl;': '\u255c',
283 'boxuL;': '\u255b',
284 'boxul;': '\u2518',
285 'boxUR;': '\u255a',
286 'boxUr;': '\u2559',
287 'boxuR;': '\u2558',
288 'boxur;': '\u2514',
289 'boxV;': '\u2551',
290 'boxv;': '\u2502',
291 'boxVH;': '\u256c',
292 'boxVh;': '\u256b',
293 'boxvH;': '\u256a',
294 'boxvh;': '\u253c',
295 'boxVL;': '\u2563',
296 'boxVl;': '\u2562',
297 'boxvL;': '\u2561',
298 'boxvl;': '\u2524',
299 'boxVR;': '\u2560',
300 'boxVr;': '\u255f',
301 'boxvR;': '\u255e',
302 'boxvr;': '\u251c',
303 'bprime;': '\u2035',
304 'Breve;': '\u02d8',
305 'breve;': '\u02d8',
306 'brvbar': '\xa6',
307 'brvbar;': '\xa6',
308 'Bscr;': '\u212c',
309 'bscr;': '\U0001d4b7',
310 'bsemi;': '\u204f',
311 'bsim;': '\u223d',
312 'bsime;': '\u22cd',
313 'bsol;': '\\',
314 'bsolb;': '\u29c5',
315 'bsolhsub;': '\u27c8',
316 'bull;': '\u2022',
317 'bullet;': '\u2022',
318 'bump;': '\u224e',
319 'bumpE;': '\u2aae',
320 'bumpe;': '\u224f',
321 'Bumpeq;': '\u224e',
322 'bumpeq;': '\u224f',
323 'Cacute;': '\u0106',
324 'cacute;': '\u0107',
325 'Cap;': '\u22d2',
326 'cap;': '\u2229',
327 'capand;': '\u2a44',
328 'capbrcup;': '\u2a49',
329 'capcap;': '\u2a4b',
330 'capcup;': '\u2a47',
331 'capdot;': '\u2a40',
332 'CapitalDifferentialD;': '\u2145',
333 'caps;': '\u2229\ufe00',
334 'caret;': '\u2041',
335 'caron;': '\u02c7',
336 'Cayleys;': '\u212d',
337 'ccaps;': '\u2a4d',
338 'Ccaron;': '\u010c',
339 'ccaron;': '\u010d',
340 'Ccedil': '\xc7',
341 'ccedil': '\xe7',
342 'Ccedil;': '\xc7',
343 'ccedil;': '\xe7',
344 'Ccirc;': '\u0108',
345 'ccirc;': '\u0109',
346 'Cconint;': '\u2230',
347 'ccups;': '\u2a4c',
348 'ccupssm;': '\u2a50',
349 'Cdot;': '\u010a',
350 'cdot;': '\u010b',
351 'cedil': '\xb8',
352 'cedil;': '\xb8',
353 'Cedilla;': '\xb8',
354 'cemptyv;': '\u29b2',
355 'cent': '\xa2',
356 'cent;': '\xa2',
357 'CenterDot;': '\xb7',
358 'centerdot;': '\xb7',
359 'Cfr;': '\u212d',
360 'cfr;': '\U0001d520',
361 'CHcy;': '\u0427',
362 'chcy;': '\u0447',
363 'check;': '\u2713',
364 'checkmark;': '\u2713',
365 'Chi;': '\u03a7',
366 'chi;': '\u03c7',
367 'cir;': '\u25cb',
368 'circ;': '\u02c6',
369 'circeq;': '\u2257',
370 'circlearrowleft;': '\u21ba',
371 'circlearrowright;': '\u21bb',
372 'circledast;': '\u229b',
373 'circledcirc;': '\u229a',
374 'circleddash;': '\u229d',
375 'CircleDot;': '\u2299',
376 'circledR;': '\xae',
377 'circledS;': '\u24c8',
378 'CircleMinus;': '\u2296',
379 'CirclePlus;': '\u2295',
380 'CircleTimes;': '\u2297',
381 'cirE;': '\u29c3',
382 'cire;': '\u2257',
383 'cirfnint;': '\u2a10',
384 'cirmid;': '\u2aef',
385 'cirscir;': '\u29c2',
386 'ClockwiseContourIntegral;': '\u2232',
387 'CloseCurlyDoubleQuote;': '\u201d',
388 'CloseCurlyQuote;': '\u2019',
389 'clubs;': '\u2663',
390 'clubsuit;': '\u2663',
391 'Colon;': '\u2237',
392 'colon;': ':',
393 'Colone;': '\u2a74',
394 'colone;': '\u2254',
395 'coloneq;': '\u2254',
396 'comma;': ',',
397 'commat;': '@',
398 'comp;': '\u2201',
399 'compfn;': '\u2218',
400 'complement;': '\u2201',
401 'complexes;': '\u2102',
402 'cong;': '\u2245',
403 'congdot;': '\u2a6d',
404 'Congruent;': '\u2261',
405 'Conint;': '\u222f',
406 'conint;': '\u222e',
407 'ContourIntegral;': '\u222e',
408 'Copf;': '\u2102',
409 'copf;': '\U0001d554',
410 'coprod;': '\u2210',
411 'Coproduct;': '\u2210',
412 'COPY': '\xa9',
413 'copy': '\xa9',
414 'COPY;': '\xa9',
415 'copy;': '\xa9',
416 'copysr;': '\u2117',
417 'CounterClockwiseContourIntegral;': '\u2233',
418 'crarr;': '\u21b5',
419 'Cross;': '\u2a2f',
420 'cross;': '\u2717',
421 'Cscr;': '\U0001d49e',
422 'cscr;': '\U0001d4b8',
423 'csub;': '\u2acf',
424 'csube;': '\u2ad1',
425 'csup;': '\u2ad0',
426 'csupe;': '\u2ad2',
427 'ctdot;': '\u22ef',
428 'cudarrl;': '\u2938',
429 'cudarrr;': '\u2935',
430 'cuepr;': '\u22de',
431 'cuesc;': '\u22df',
432 'cularr;': '\u21b6',
433 'cularrp;': '\u293d',
434 'Cup;': '\u22d3',
435 'cup;': '\u222a',
436 'cupbrcap;': '\u2a48',
437 'CupCap;': '\u224d',
438 'cupcap;': '\u2a46',
439 'cupcup;': '\u2a4a',
440 'cupdot;': '\u228d',
441 'cupor;': '\u2a45',
442 'cups;': '\u222a\ufe00',
443 'curarr;': '\u21b7',
444 'curarrm;': '\u293c',
445 'curlyeqprec;': '\u22de',
446 'curlyeqsucc;': '\u22df',
447 'curlyvee;': '\u22ce',
448 'curlywedge;': '\u22cf',
449 'curren': '\xa4',
450 'curren;': '\xa4',
451 'curvearrowleft;': '\u21b6',
452 'curvearrowright;': '\u21b7',
453 'cuvee;': '\u22ce',
454 'cuwed;': '\u22cf',
455 'cwconint;': '\u2232',
456 'cwint;': '\u2231',
457 'cylcty;': '\u232d',
458 'Dagger;': '\u2021',
459 'dagger;': '\u2020',
460 'daleth;': '\u2138',
461 'Darr;': '\u21a1',
462 'dArr;': '\u21d3',
463 'darr;': '\u2193',
464 'dash;': '\u2010',
465 'Dashv;': '\u2ae4',
466 'dashv;': '\u22a3',
467 'dbkarow;': '\u290f',
468 'dblac;': '\u02dd',
469 'Dcaron;': '\u010e',
470 'dcaron;': '\u010f',
471 'Dcy;': '\u0414',
472 'dcy;': '\u0434',
473 'DD;': '\u2145',
474 'dd;': '\u2146',
475 'ddagger;': '\u2021',
476 'ddarr;': '\u21ca',
477 'DDotrahd;': '\u2911',
478 'ddotseq;': '\u2a77',
479 'deg': '\xb0',
480 'deg;': '\xb0',
481 'Del;': '\u2207',
482 'Delta;': '\u0394',
483 'delta;': '\u03b4',
484 'demptyv;': '\u29b1',
485 'dfisht;': '\u297f',
486 'Dfr;': '\U0001d507',
487 'dfr;': '\U0001d521',
488 'dHar;': '\u2965',
489 'dharl;': '\u21c3',
490 'dharr;': '\u21c2',
491 'DiacriticalAcute;': '\xb4',
492 'DiacriticalDot;': '\u02d9',
493 'DiacriticalDoubleAcute;': '\u02dd',
494 'DiacriticalGrave;': '`',
495 'DiacriticalTilde;': '\u02dc',
496 'diam;': '\u22c4',
497 'Diamond;': '\u22c4',
498 'diamond;': '\u22c4',
499 'diamondsuit;': '\u2666',
500 'diams;': '\u2666',
501 'die;': '\xa8',
502 'DifferentialD;': '\u2146',
503 'digamma;': '\u03dd',
504 'disin;': '\u22f2',
505 'div;': '\xf7',
506 'divide': '\xf7',
507 'divide;': '\xf7',
508 'divideontimes;': '\u22c7',
509 'divonx;': '\u22c7',
510 'DJcy;': '\u0402',
511 'djcy;': '\u0452',
512 'dlcorn;': '\u231e',
513 'dlcrop;': '\u230d',
514 'dollar;': '$',
515 'Dopf;': '\U0001d53b',
516 'dopf;': '\U0001d555',
517 'Dot;': '\xa8',
518 'dot;': '\u02d9',
519 'DotDot;': '\u20dc',
520 'doteq;': '\u2250',
521 'doteqdot;': '\u2251',
522 'DotEqual;': '\u2250',
523 'dotminus;': '\u2238',
524 'dotplus;': '\u2214',
525 'dotsquare;': '\u22a1',
526 'doublebarwedge;': '\u2306',
527 'DoubleContourIntegral;': '\u222f',
528 'DoubleDot;': '\xa8',
529 'DoubleDownArrow;': '\u21d3',
530 'DoubleLeftArrow;': '\u21d0',
531 'DoubleLeftRightArrow;': '\u21d4',
532 'DoubleLeftTee;': '\u2ae4',
533 'DoubleLongLeftArrow;': '\u27f8',
534 'DoubleLongLeftRightArrow;': '\u27fa',
535 'DoubleLongRightArrow;': '\u27f9',
536 'DoubleRightArrow;': '\u21d2',
537 'DoubleRightTee;': '\u22a8',
538 'DoubleUpArrow;': '\u21d1',
539 'DoubleUpDownArrow;': '\u21d5',
540 'DoubleVerticalBar;': '\u2225',
541 'DownArrow;': '\u2193',
542 'Downarrow;': '\u21d3',
543 'downarrow;': '\u2193',
544 'DownArrowBar;': '\u2913',
545 'DownArrowUpArrow;': '\u21f5',
546 'DownBreve;': '\u0311',
547 'downdownarrows;': '\u21ca',
548 'downharpoonleft;': '\u21c3',
549 'downharpoonright;': '\u21c2',
550 'DownLeftRightVector;': '\u2950',
551 'DownLeftTeeVector;': '\u295e',
552 'DownLeftVector;': '\u21bd',
553 'DownLeftVectorBar;': '\u2956',
554 'DownRightTeeVector;': '\u295f',
555 'DownRightVector;': '\u21c1',
556 'DownRightVectorBar;': '\u2957',
557 'DownTee;': '\u22a4',
558 'DownTeeArrow;': '\u21a7',
559 'drbkarow;': '\u2910',
560 'drcorn;': '\u231f',
561 'drcrop;': '\u230c',
562 'Dscr;': '\U0001d49f',
563 'dscr;': '\U0001d4b9',
564 'DScy;': '\u0405',
565 'dscy;': '\u0455',
566 'dsol;': '\u29f6',
567 'Dstrok;': '\u0110',
568 'dstrok;': '\u0111',
569 'dtdot;': '\u22f1',
570 'dtri;': '\u25bf',
571 'dtrif;': '\u25be',
572 'duarr;': '\u21f5',
573 'duhar;': '\u296f',
574 'dwangle;': '\u29a6',
575 'DZcy;': '\u040f',
576 'dzcy;': '\u045f',
577 'dzigrarr;': '\u27ff',
578 'Eacute': '\xc9',
579 'eacute': '\xe9',
580 'Eacute;': '\xc9',
581 'eacute;': '\xe9',
582 'easter;': '\u2a6e',
583 'Ecaron;': '\u011a',
584 'ecaron;': '\u011b',
585 'ecir;': '\u2256',
586 'Ecirc': '\xca',
587 'ecirc': '\xea',
588 'Ecirc;': '\xca',
589 'ecirc;': '\xea',
590 'ecolon;': '\u2255',
591 'Ecy;': '\u042d',
592 'ecy;': '\u044d',
593 'eDDot;': '\u2a77',
594 'Edot;': '\u0116',
595 'eDot;': '\u2251',
596 'edot;': '\u0117',
597 'ee;': '\u2147',
598 'efDot;': '\u2252',
599 'Efr;': '\U0001d508',
600 'efr;': '\U0001d522',
601 'eg;': '\u2a9a',
602 'Egrave': '\xc8',
603 'egrave': '\xe8',
604 'Egrave;': '\xc8',
605 'egrave;': '\xe8',
606 'egs;': '\u2a96',
607 'egsdot;': '\u2a98',
608 'el;': '\u2a99',
609 'Element;': '\u2208',
610 'elinters;': '\u23e7',
611 'ell;': '\u2113',
612 'els;': '\u2a95',
613 'elsdot;': '\u2a97',
614 'Emacr;': '\u0112',
615 'emacr;': '\u0113',
616 'empty;': '\u2205',
617 'emptyset;': '\u2205',
618 'EmptySmallSquare;': '\u25fb',
619 'emptyv;': '\u2205',
620 'EmptyVerySmallSquare;': '\u25ab',
621 'emsp13;': '\u2004',
622 'emsp14;': '\u2005',
623 'emsp;': '\u2003',
624 'ENG;': '\u014a',
625 'eng;': '\u014b',
626 'ensp;': '\u2002',
627 'Eogon;': '\u0118',
628 'eogon;': '\u0119',
629 'Eopf;': '\U0001d53c',
630 'eopf;': '\U0001d556',
631 'epar;': '\u22d5',
632 'eparsl;': '\u29e3',
633 'eplus;': '\u2a71',
634 'epsi;': '\u03b5',
635 'Epsilon;': '\u0395',
636 'epsilon;': '\u03b5',
637 'epsiv;': '\u03f5',
638 'eqcirc;': '\u2256',
639 'eqcolon;': '\u2255',
640 'eqsim;': '\u2242',
641 'eqslantgtr;': '\u2a96',
642 'eqslantless;': '\u2a95',
643 'Equal;': '\u2a75',
644 'equals;': '=',
645 'EqualTilde;': '\u2242',
646 'equest;': '\u225f',
647 'Equilibrium;': '\u21cc',
648 'equiv;': '\u2261',
649 'equivDD;': '\u2a78',
650 'eqvparsl;': '\u29e5',
651 'erarr;': '\u2971',
652 'erDot;': '\u2253',
653 'Escr;': '\u2130',
654 'escr;': '\u212f',
655 'esdot;': '\u2250',
656 'Esim;': '\u2a73',
657 'esim;': '\u2242',
658 'Eta;': '\u0397',
659 'eta;': '\u03b7',
660 'ETH': '\xd0',
661 'eth': '\xf0',
662 'ETH;': '\xd0',
663 'eth;': '\xf0',
664 'Euml': '\xcb',
665 'euml': '\xeb',
666 'Euml;': '\xcb',
667 'euml;': '\xeb',
668 'euro;': '\u20ac',
669 'excl;': '!',
670 'exist;': '\u2203',
671 'Exists;': '\u2203',
672 'expectation;': '\u2130',
673 'ExponentialE;': '\u2147',
674 'exponentiale;': '\u2147',
675 'fallingdotseq;': '\u2252',
676 'Fcy;': '\u0424',
677 'fcy;': '\u0444',
678 'female;': '\u2640',
679 'ffilig;': '\ufb03',
680 'fflig;': '\ufb00',
681 'ffllig;': '\ufb04',
682 'Ffr;': '\U0001d509',
683 'ffr;': '\U0001d523',
684 'filig;': '\ufb01',
685 'FilledSmallSquare;': '\u25fc',
686 'FilledVerySmallSquare;': '\u25aa',
687 'fjlig;': 'fj',
688 'flat;': '\u266d',
689 'fllig;': '\ufb02',
690 'fltns;': '\u25b1',
691 'fnof;': '\u0192',
692 'Fopf;': '\U0001d53d',
693 'fopf;': '\U0001d557',
694 'ForAll;': '\u2200',
695 'forall;': '\u2200',
696 'fork;': '\u22d4',
697 'forkv;': '\u2ad9',
698 'Fouriertrf;': '\u2131',
699 'fpartint;': '\u2a0d',
700 'frac12': '\xbd',
701 'frac12;': '\xbd',
702 'frac13;': '\u2153',
703 'frac14': '\xbc',
704 'frac14;': '\xbc',
705 'frac15;': '\u2155',
706 'frac16;': '\u2159',
707 'frac18;': '\u215b',
708 'frac23;': '\u2154',
709 'frac25;': '\u2156',
710 'frac34': '\xbe',
711 'frac34;': '\xbe',
712 'frac35;': '\u2157',
713 'frac38;': '\u215c',
714 'frac45;': '\u2158',
715 'frac56;': '\u215a',
716 'frac58;': '\u215d',
717 'frac78;': '\u215e',
718 'frasl;': '\u2044',
719 'frown;': '\u2322',
720 'Fscr;': '\u2131',
721 'fscr;': '\U0001d4bb',
722 'gacute;': '\u01f5',
723 'Gamma;': '\u0393',
724 'gamma;': '\u03b3',
725 'Gammad;': '\u03dc',
726 'gammad;': '\u03dd',
727 'gap;': '\u2a86',
728 'Gbreve;': '\u011e',
729 'gbreve;': '\u011f',
730 'Gcedil;': '\u0122',
731 'Gcirc;': '\u011c',
732 'gcirc;': '\u011d',
733 'Gcy;': '\u0413',
734 'gcy;': '\u0433',
735 'Gdot;': '\u0120',
736 'gdot;': '\u0121',
737 'gE;': '\u2267',
738 'ge;': '\u2265',
739 'gEl;': '\u2a8c',
740 'gel;': '\u22db',
741 'geq;': '\u2265',
742 'geqq;': '\u2267',
743 'geqslant;': '\u2a7e',
744 'ges;': '\u2a7e',
745 'gescc;': '\u2aa9',
746 'gesdot;': '\u2a80',
747 'gesdoto;': '\u2a82',
748 'gesdotol;': '\u2a84',
749 'gesl;': '\u22db\ufe00',
750 'gesles;': '\u2a94',
751 'Gfr;': '\U0001d50a',
752 'gfr;': '\U0001d524',
753 'Gg;': '\u22d9',
754 'gg;': '\u226b',
755 'ggg;': '\u22d9',
756 'gimel;': '\u2137',
757 'GJcy;': '\u0403',
758 'gjcy;': '\u0453',
759 'gl;': '\u2277',
760 'gla;': '\u2aa5',
761 'glE;': '\u2a92',
762 'glj;': '\u2aa4',
763 'gnap;': '\u2a8a',
764 'gnapprox;': '\u2a8a',
765 'gnE;': '\u2269',
766 'gne;': '\u2a88',
767 'gneq;': '\u2a88',
768 'gneqq;': '\u2269',
769 'gnsim;': '\u22e7',
770 'Gopf;': '\U0001d53e',
771 'gopf;': '\U0001d558',
772 'grave;': '`',
773 'GreaterEqual;': '\u2265',
774 'GreaterEqualLess;': '\u22db',
775 'GreaterFullEqual;': '\u2267',
776 'GreaterGreater;': '\u2aa2',
777 'GreaterLess;': '\u2277',
778 'GreaterSlantEqual;': '\u2a7e',
779 'GreaterTilde;': '\u2273',
780 'Gscr;': '\U0001d4a2',
781 'gscr;': '\u210a',
782 'gsim;': '\u2273',
783 'gsime;': '\u2a8e',
784 'gsiml;': '\u2a90',
785 'GT': '>',
786 'gt': '>',
787 'GT;': '>',
788 'Gt;': '\u226b',
789 'gt;': '>',
790 'gtcc;': '\u2aa7',
791 'gtcir;': '\u2a7a',
792 'gtdot;': '\u22d7',
793 'gtlPar;': '\u2995',
794 'gtquest;': '\u2a7c',
795 'gtrapprox;': '\u2a86',
796 'gtrarr;': '\u2978',
797 'gtrdot;': '\u22d7',
798 'gtreqless;': '\u22db',
799 'gtreqqless;': '\u2a8c',
800 'gtrless;': '\u2277',
801 'gtrsim;': '\u2273',
802 'gvertneqq;': '\u2269\ufe00',
803 'gvnE;': '\u2269\ufe00',
804 'Hacek;': '\u02c7',
805 'hairsp;': '\u200a',
806 'half;': '\xbd',
807 'hamilt;': '\u210b',
808 'HARDcy;': '\u042a',
809 'hardcy;': '\u044a',
810 'hArr;': '\u21d4',
811 'harr;': '\u2194',
812 'harrcir;': '\u2948',
813 'harrw;': '\u21ad',
814 'Hat;': '^',
815 'hbar;': '\u210f',
816 'Hcirc;': '\u0124',
817 'hcirc;': '\u0125',
818 'hearts;': '\u2665',
819 'heartsuit;': '\u2665',
820 'hellip;': '\u2026',
821 'hercon;': '\u22b9',
822 'Hfr;': '\u210c',
823 'hfr;': '\U0001d525',
824 'HilbertSpace;': '\u210b',
825 'hksearow;': '\u2925',
826 'hkswarow;': '\u2926',
827 'hoarr;': '\u21ff',
828 'homtht;': '\u223b',
829 'hookleftarrow;': '\u21a9',
830 'hookrightarrow;': '\u21aa',
831 'Hopf;': '\u210d',
832 'hopf;': '\U0001d559',
833 'horbar;': '\u2015',
834 'HorizontalLine;': '\u2500',
835 'Hscr;': '\u210b',
836 'hscr;': '\U0001d4bd',
837 'hslash;': '\u210f',
838 'Hstrok;': '\u0126',
839 'hstrok;': '\u0127',
840 'HumpDownHump;': '\u224e',
841 'HumpEqual;': '\u224f',
842 'hybull;': '\u2043',
843 'hyphen;': '\u2010',
844 'Iacute': '\xcd',
845 'iacute': '\xed',
846 'Iacute;': '\xcd',
847 'iacute;': '\xed',
848 'ic;': '\u2063',
849 'Icirc': '\xce',
850 'icirc': '\xee',
851 'Icirc;': '\xce',
852 'icirc;': '\xee',
853 'Icy;': '\u0418',
854 'icy;': '\u0438',
855 'Idot;': '\u0130',
856 'IEcy;': '\u0415',
857 'iecy;': '\u0435',
858 'iexcl': '\xa1',
859 'iexcl;': '\xa1',
860 'iff;': '\u21d4',
861 'Ifr;': '\u2111',
862 'ifr;': '\U0001d526',
863 'Igrave': '\xcc',
864 'igrave': '\xec',
865 'Igrave;': '\xcc',
866 'igrave;': '\xec',
867 'ii;': '\u2148',
868 'iiiint;': '\u2a0c',
869 'iiint;': '\u222d',
870 'iinfin;': '\u29dc',
871 'iiota;': '\u2129',
872 'IJlig;': '\u0132',
873 'ijlig;': '\u0133',
874 'Im;': '\u2111',
875 'Imacr;': '\u012a',
876 'imacr;': '\u012b',
877 'image;': '\u2111',
878 'ImaginaryI;': '\u2148',
879 'imagline;': '\u2110',
880 'imagpart;': '\u2111',
881 'imath;': '\u0131',
882 'imof;': '\u22b7',
883 'imped;': '\u01b5',
884 'Implies;': '\u21d2',
885 'in;': '\u2208',
886 'incare;': '\u2105',
887 'infin;': '\u221e',
888 'infintie;': '\u29dd',
889 'inodot;': '\u0131',
890 'Int;': '\u222c',
891 'int;': '\u222b',
892 'intcal;': '\u22ba',
893 'integers;': '\u2124',
894 'Integral;': '\u222b',
895 'intercal;': '\u22ba',
896 'Intersection;': '\u22c2',
897 'intlarhk;': '\u2a17',
898 'intprod;': '\u2a3c',
899 'InvisibleComma;': '\u2063',
900 'InvisibleTimes;': '\u2062',
901 'IOcy;': '\u0401',
902 'iocy;': '\u0451',
903 'Iogon;': '\u012e',
904 'iogon;': '\u012f',
905 'Iopf;': '\U0001d540',
906 'iopf;': '\U0001d55a',
907 'Iota;': '\u0399',
908 'iota;': '\u03b9',
909 'iprod;': '\u2a3c',
910 'iquest': '\xbf',
911 'iquest;': '\xbf',
912 'Iscr;': '\u2110',
913 'iscr;': '\U0001d4be',
914 'isin;': '\u2208',
915 'isindot;': '\u22f5',
916 'isinE;': '\u22f9',
917 'isins;': '\u22f4',
918 'isinsv;': '\u22f3',
919 'isinv;': '\u2208',
920 'it;': '\u2062',
921 'Itilde;': '\u0128',
922 'itilde;': '\u0129',
923 'Iukcy;': '\u0406',
924 'iukcy;': '\u0456',
925 'Iuml': '\xcf',
926 'iuml': '\xef',
927 'Iuml;': '\xcf',
928 'iuml;': '\xef',
929 'Jcirc;': '\u0134',
930 'jcirc;': '\u0135',
931 'Jcy;': '\u0419',
932 'jcy;': '\u0439',
933 'Jfr;': '\U0001d50d',
934 'jfr;': '\U0001d527',
935 'jmath;': '\u0237',
936 'Jopf;': '\U0001d541',
937 'jopf;': '\U0001d55b',
938 'Jscr;': '\U0001d4a5',
939 'jscr;': '\U0001d4bf',
940 'Jsercy;': '\u0408',
941 'jsercy;': '\u0458',
942 'Jukcy;': '\u0404',
943 'jukcy;': '\u0454',
944 'Kappa;': '\u039a',
945 'kappa;': '\u03ba',
946 'kappav;': '\u03f0',
947 'Kcedil;': '\u0136',
948 'kcedil;': '\u0137',
949 'Kcy;': '\u041a',
950 'kcy;': '\u043a',
951 'Kfr;': '\U0001d50e',
952 'kfr;': '\U0001d528',
953 'kgreen;': '\u0138',
954 'KHcy;': '\u0425',
955 'khcy;': '\u0445',
956 'KJcy;': '\u040c',
957 'kjcy;': '\u045c',
958 'Kopf;': '\U0001d542',
959 'kopf;': '\U0001d55c',
960 'Kscr;': '\U0001d4a6',
961 'kscr;': '\U0001d4c0',
962 'lAarr;': '\u21da',
963 'Lacute;': '\u0139',
964 'lacute;': '\u013a',
965 'laemptyv;': '\u29b4',
966 'lagran;': '\u2112',
967 'Lambda;': '\u039b',
968 'lambda;': '\u03bb',
969 'Lang;': '\u27ea',
970 'lang;': '\u27e8',
971 'langd;': '\u2991',
972 'langle;': '\u27e8',
973 'lap;': '\u2a85',
974 'Laplacetrf;': '\u2112',
975 'laquo': '\xab',
976 'laquo;': '\xab',
977 'Larr;': '\u219e',
978 'lArr;': '\u21d0',
979 'larr;': '\u2190',
980 'larrb;': '\u21e4',
981 'larrbfs;': '\u291f',
982 'larrfs;': '\u291d',
983 'larrhk;': '\u21a9',
984 'larrlp;': '\u21ab',
985 'larrpl;': '\u2939',
986 'larrsim;': '\u2973',
987 'larrtl;': '\u21a2',
988 'lat;': '\u2aab',
989 'lAtail;': '\u291b',
990 'latail;': '\u2919',
991 'late;': '\u2aad',
992 'lates;': '\u2aad\ufe00',
993 'lBarr;': '\u290e',
994 'lbarr;': '\u290c',
995 'lbbrk;': '\u2772',
996 'lbrace;': '{',
997 'lbrack;': '[',
998 'lbrke;': '\u298b',
999 'lbrksld;': '\u298f',
1000 'lbrkslu;': '\u298d',
1001 'Lcaron;': '\u013d',
1002 'lcaron;': '\u013e',
1003 'Lcedil;': '\u013b',
1004 'lcedil;': '\u013c',
1005 'lceil;': '\u2308',
1006 'lcub;': '{',
1007 'Lcy;': '\u041b',
1008 'lcy;': '\u043b',
1009 'ldca;': '\u2936',
1010 'ldquo;': '\u201c',
1011 'ldquor;': '\u201e',
1012 'ldrdhar;': '\u2967',
1013 'ldrushar;': '\u294b',
1014 'ldsh;': '\u21b2',
1015 'lE;': '\u2266',
1016 'le;': '\u2264',
1017 'LeftAngleBracket;': '\u27e8',
1018 'LeftArrow;': '\u2190',
1019 'Leftarrow;': '\u21d0',
1020 'leftarrow;': '\u2190',
1021 'LeftArrowBar;': '\u21e4',
1022 'LeftArrowRightArrow;': '\u21c6',
1023 'leftarrowtail;': '\u21a2',
1024 'LeftCeiling;': '\u2308',
1025 'LeftDoubleBracket;': '\u27e6',
1026 'LeftDownTeeVector;': '\u2961',
1027 'LeftDownVector;': '\u21c3',
1028 'LeftDownVectorBar;': '\u2959',
1029 'LeftFloor;': '\u230a',
1030 'leftharpoondown;': '\u21bd',
1031 'leftharpoonup;': '\u21bc',
1032 'leftleftarrows;': '\u21c7',
1033 'LeftRightArrow;': '\u2194',
1034 'Leftrightarrow;': '\u21d4',
1035 'leftrightarrow;': '\u2194',
1036 'leftrightarrows;': '\u21c6',
1037 'leftrightharpoons;': '\u21cb',
1038 'leftrightsquigarrow;': '\u21ad',
1039 'LeftRightVector;': '\u294e',
1040 'LeftTee;': '\u22a3',
1041 'LeftTeeArrow;': '\u21a4',
1042 'LeftTeeVector;': '\u295a',
1043 'leftthreetimes;': '\u22cb',
1044 'LeftTriangle;': '\u22b2',
1045 'LeftTriangleBar;': '\u29cf',
1046 'LeftTriangleEqual;': '\u22b4',
1047 'LeftUpDownVector;': '\u2951',
1048 'LeftUpTeeVector;': '\u2960',
1049 'LeftUpVector;': '\u21bf',
1050 'LeftUpVectorBar;': '\u2958',
1051 'LeftVector;': '\u21bc',
1052 'LeftVectorBar;': '\u2952',
1053 'lEg;': '\u2a8b',
1054 'leg;': '\u22da',
1055 'leq;': '\u2264',
1056 'leqq;': '\u2266',
1057 'leqslant;': '\u2a7d',
1058 'les;': '\u2a7d',
1059 'lescc;': '\u2aa8',
1060 'lesdot;': '\u2a7f',
1061 'lesdoto;': '\u2a81',
1062 'lesdotor;': '\u2a83',
1063 'lesg;': '\u22da\ufe00',
1064 'lesges;': '\u2a93',
1065 'lessapprox;': '\u2a85',
1066 'lessdot;': '\u22d6',
1067 'lesseqgtr;': '\u22da',
1068 'lesseqqgtr;': '\u2a8b',
1069 'LessEqualGreater;': '\u22da',
1070 'LessFullEqual;': '\u2266',
1071 'LessGreater;': '\u2276',
1072 'lessgtr;': '\u2276',
1073 'LessLess;': '\u2aa1',
1074 'lesssim;': '\u2272',
1075 'LessSlantEqual;': '\u2a7d',
1076 'LessTilde;': '\u2272',
1077 'lfisht;': '\u297c',
1078 'lfloor;': '\u230a',
1079 'Lfr;': '\U0001d50f',
1080 'lfr;': '\U0001d529',
1081 'lg;': '\u2276',
1082 'lgE;': '\u2a91',
1083 'lHar;': '\u2962',
1084 'lhard;': '\u21bd',
1085 'lharu;': '\u21bc',
1086 'lharul;': '\u296a',
1087 'lhblk;': '\u2584',
1088 'LJcy;': '\u0409',
1089 'ljcy;': '\u0459',
1090 'Ll;': '\u22d8',
1091 'll;': '\u226a',
1092 'llarr;': '\u21c7',
1093 'llcorner;': '\u231e',
1094 'Lleftarrow;': '\u21da',
1095 'llhard;': '\u296b',
1096 'lltri;': '\u25fa',
1097 'Lmidot;': '\u013f',
1098 'lmidot;': '\u0140',
1099 'lmoust;': '\u23b0',
1100 'lmoustache;': '\u23b0',
1101 'lnap;': '\u2a89',
1102 'lnapprox;': '\u2a89',
1103 'lnE;': '\u2268',
1104 'lne;': '\u2a87',
1105 'lneq;': '\u2a87',
1106 'lneqq;': '\u2268',
1107 'lnsim;': '\u22e6',
1108 'loang;': '\u27ec',
1109 'loarr;': '\u21fd',
1110 'lobrk;': '\u27e6',
1111 'LongLeftArrow;': '\u27f5',
1112 'Longleftarrow;': '\u27f8',
1113 'longleftarrow;': '\u27f5',
1114 'LongLeftRightArrow;': '\u27f7',
1115 'Longleftrightarrow;': '\u27fa',
1116 'longleftrightarrow;': '\u27f7',
1117 'longmapsto;': '\u27fc',
1118 'LongRightArrow;': '\u27f6',
1119 'Longrightarrow;': '\u27f9',
1120 'longrightarrow;': '\u27f6',
1121 'looparrowleft;': '\u21ab',
1122 'looparrowright;': '\u21ac',
1123 'lopar;': '\u2985',
1124 'Lopf;': '\U0001d543',
1125 'lopf;': '\U0001d55d',
1126 'loplus;': '\u2a2d',
1127 'lotimes;': '\u2a34',
1128 'lowast;': '\u2217',
1129 'lowbar;': '_',
1130 'LowerLeftArrow;': '\u2199',
1131 'LowerRightArrow;': '\u2198',
1132 'loz;': '\u25ca',
1133 'lozenge;': '\u25ca',
1134 'lozf;': '\u29eb',
1135 'lpar;': '(',
1136 'lparlt;': '\u2993',
1137 'lrarr;': '\u21c6',
1138 'lrcorner;': '\u231f',
1139 'lrhar;': '\u21cb',
1140 'lrhard;': '\u296d',
1141 'lrm;': '\u200e',
1142 'lrtri;': '\u22bf',
1143 'lsaquo;': '\u2039',
1144 'Lscr;': '\u2112',
1145 'lscr;': '\U0001d4c1',
1146 'Lsh;': '\u21b0',
1147 'lsh;': '\u21b0',
1148 'lsim;': '\u2272',
1149 'lsime;': '\u2a8d',
1150 'lsimg;': '\u2a8f',
1151 'lsqb;': '[',
1152 'lsquo;': '\u2018',
1153 'lsquor;': '\u201a',
1154 'Lstrok;': '\u0141',
1155 'lstrok;': '\u0142',
1156 'LT': '<',
1157 'lt': '<',
1158 'LT;': '<',
1159 'Lt;': '\u226a',
1160 'lt;': '<',
1161 'ltcc;': '\u2aa6',
1162 'ltcir;': '\u2a79',
1163 'ltdot;': '\u22d6',
1164 'lthree;': '\u22cb',
1165 'ltimes;': '\u22c9',
1166 'ltlarr;': '\u2976',
1167 'ltquest;': '\u2a7b',
1168 'ltri;': '\u25c3',
1169 'ltrie;': '\u22b4',
1170 'ltrif;': '\u25c2',
1171 'ltrPar;': '\u2996',
1172 'lurdshar;': '\u294a',
1173 'luruhar;': '\u2966',
1174 'lvertneqq;': '\u2268\ufe00',
1175 'lvnE;': '\u2268\ufe00',
1176 'macr': '\xaf',
1177 'macr;': '\xaf',
1178 'male;': '\u2642',
1179 'malt;': '\u2720',
1180 'maltese;': '\u2720',
1181 'Map;': '\u2905',
1182 'map;': '\u21a6',
1183 'mapsto;': '\u21a6',
1184 'mapstodown;': '\u21a7',
1185 'mapstoleft;': '\u21a4',
1186 'mapstoup;': '\u21a5',
1187 'marker;': '\u25ae',
1188 'mcomma;': '\u2a29',
1189 'Mcy;': '\u041c',
1190 'mcy;': '\u043c',
1191 'mdash;': '\u2014',
1192 'mDDot;': '\u223a',
1193 'measuredangle;': '\u2221',
1194 'MediumSpace;': '\u205f',
1195 'Mellintrf;': '\u2133',
1196 'Mfr;': '\U0001d510',
1197 'mfr;': '\U0001d52a',
1198 'mho;': '\u2127',
1199 'micro': '\xb5',
1200 'micro;': '\xb5',
1201 'mid;': '\u2223',
1202 'midast;': '*',
1203 'midcir;': '\u2af0',
1204 'middot': '\xb7',
1205 'middot;': '\xb7',
1206 'minus;': '\u2212',
1207 'minusb;': '\u229f',
1208 'minusd;': '\u2238',
1209 'minusdu;': '\u2a2a',
1210 'MinusPlus;': '\u2213',
1211 'mlcp;': '\u2adb',
1212 'mldr;': '\u2026',
1213 'mnplus;': '\u2213',
1214 'models;': '\u22a7',
1215 'Mopf;': '\U0001d544',
1216 'mopf;': '\U0001d55e',
1217 'mp;': '\u2213',
1218 'Mscr;': '\u2133',
1219 'mscr;': '\U0001d4c2',
1220 'mstpos;': '\u223e',
1221 'Mu;': '\u039c',
1222 'mu;': '\u03bc',
1223 'multimap;': '\u22b8',
1224 'mumap;': '\u22b8',
1225 'nabla;': '\u2207',
1226 'Nacute;': '\u0143',
1227 'nacute;': '\u0144',
1228 'nang;': '\u2220\u20d2',
1229 'nap;': '\u2249',
1230 'napE;': '\u2a70\u0338',
1231 'napid;': '\u224b\u0338',
1232 'napos;': '\u0149',
1233 'napprox;': '\u2249',
1234 'natur;': '\u266e',
1235 'natural;': '\u266e',
1236 'naturals;': '\u2115',
1237 'nbsp': '\xa0',
1238 'nbsp;': '\xa0',
1239 'nbump;': '\u224e\u0338',
1240 'nbumpe;': '\u224f\u0338',
1241 'ncap;': '\u2a43',
1242 'Ncaron;': '\u0147',
1243 'ncaron;': '\u0148',
1244 'Ncedil;': '\u0145',
1245 'ncedil;': '\u0146',
1246 'ncong;': '\u2247',
1247 'ncongdot;': '\u2a6d\u0338',
1248 'ncup;': '\u2a42',
1249 'Ncy;': '\u041d',
1250 'ncy;': '\u043d',
1251 'ndash;': '\u2013',
1252 'ne;': '\u2260',
1253 'nearhk;': '\u2924',
1254 'neArr;': '\u21d7',
1255 'nearr;': '\u2197',
1256 'nearrow;': '\u2197',
1257 'nedot;': '\u2250\u0338',
1258 'NegativeMediumSpace;': '\u200b',
1259 'NegativeThickSpace;': '\u200b',
1260 'NegativeThinSpace;': '\u200b',
1261 'NegativeVeryThinSpace;': '\u200b',
1262 'nequiv;': '\u2262',
1263 'nesear;': '\u2928',
1264 'nesim;': '\u2242\u0338',
1265 'NestedGreaterGreater;': '\u226b',
1266 'NestedLessLess;': '\u226a',
1267 'NewLine;': '\n',
1268 'nexist;': '\u2204',
1269 'nexists;': '\u2204',
1270 'Nfr;': '\U0001d511',
1271 'nfr;': '\U0001d52b',
1272 'ngE;': '\u2267\u0338',
1273 'nge;': '\u2271',
1274 'ngeq;': '\u2271',
1275 'ngeqq;': '\u2267\u0338',
1276 'ngeqslant;': '\u2a7e\u0338',
1277 'nges;': '\u2a7e\u0338',
1278 'nGg;': '\u22d9\u0338',
1279 'ngsim;': '\u2275',
1280 'nGt;': '\u226b\u20d2',
1281 'ngt;': '\u226f',
1282 'ngtr;': '\u226f',
1283 'nGtv;': '\u226b\u0338',
1284 'nhArr;': '\u21ce',
1285 'nharr;': '\u21ae',
1286 'nhpar;': '\u2af2',
1287 'ni;': '\u220b',
1288 'nis;': '\u22fc',
1289 'nisd;': '\u22fa',
1290 'niv;': '\u220b',
1291 'NJcy;': '\u040a',
1292 'njcy;': '\u045a',
1293 'nlArr;': '\u21cd',
1294 'nlarr;': '\u219a',
1295 'nldr;': '\u2025',
1296 'nlE;': '\u2266\u0338',
1297 'nle;': '\u2270',
1298 'nLeftarrow;': '\u21cd',
1299 'nleftarrow;': '\u219a',
1300 'nLeftrightarrow;': '\u21ce',
1301 'nleftrightarrow;': '\u21ae',
1302 'nleq;': '\u2270',
1303 'nleqq;': '\u2266\u0338',
1304 'nleqslant;': '\u2a7d\u0338',
1305 'nles;': '\u2a7d\u0338',
1306 'nless;': '\u226e',
1307 'nLl;': '\u22d8\u0338',
1308 'nlsim;': '\u2274',
1309 'nLt;': '\u226a\u20d2',
1310 'nlt;': '\u226e',
1311 'nltri;': '\u22ea',
1312 'nltrie;': '\u22ec',
1313 'nLtv;': '\u226a\u0338',
1314 'nmid;': '\u2224',
1315 'NoBreak;': '\u2060',
1316 'NonBreakingSpace;': '\xa0',
1317 'Nopf;': '\u2115',
1318 'nopf;': '\U0001d55f',
1319 'not': '\xac',
1320 'Not;': '\u2aec',
1321 'not;': '\xac',
1322 'NotCongruent;': '\u2262',
1323 'NotCupCap;': '\u226d',
1324 'NotDoubleVerticalBar;': '\u2226',
1325 'NotElement;': '\u2209',
1326 'NotEqual;': '\u2260',
1327 'NotEqualTilde;': '\u2242\u0338',
1328 'NotExists;': '\u2204',
1329 'NotGreater;': '\u226f',
1330 'NotGreaterEqual;': '\u2271',
1331 'NotGreaterFullEqual;': '\u2267\u0338',
1332 'NotGreaterGreater;': '\u226b\u0338',
1333 'NotGreaterLess;': '\u2279',
1334 'NotGreaterSlantEqual;': '\u2a7e\u0338',
1335 'NotGreaterTilde;': '\u2275',
1336 'NotHumpDownHump;': '\u224e\u0338',
1337 'NotHumpEqual;': '\u224f\u0338',
1338 'notin;': '\u2209',
1339 'notindot;': '\u22f5\u0338',
1340 'notinE;': '\u22f9\u0338',
1341 'notinva;': '\u2209',
1342 'notinvb;': '\u22f7',
1343 'notinvc;': '\u22f6',
1344 'NotLeftTriangle;': '\u22ea',
1345 'NotLeftTriangleBar;': '\u29cf\u0338',
1346 'NotLeftTriangleEqual;': '\u22ec',
1347 'NotLess;': '\u226e',
1348 'NotLessEqual;': '\u2270',
1349 'NotLessGreater;': '\u2278',
1350 'NotLessLess;': '\u226a\u0338',
1351 'NotLessSlantEqual;': '\u2a7d\u0338',
1352 'NotLessTilde;': '\u2274',
1353 'NotNestedGreaterGreater;': '\u2aa2\u0338',
1354 'NotNestedLessLess;': '\u2aa1\u0338',
1355 'notni;': '\u220c',
1356 'notniva;': '\u220c',
1357 'notnivb;': '\u22fe',
1358 'notnivc;': '\u22fd',
1359 'NotPrecedes;': '\u2280',
1360 'NotPrecedesEqual;': '\u2aaf\u0338',
1361 'NotPrecedesSlantEqual;': '\u22e0',
1362 'NotReverseElement;': '\u220c',
1363 'NotRightTriangle;': '\u22eb',
1364 'NotRightTriangleBar;': '\u29d0\u0338',
1365 'NotRightTriangleEqual;': '\u22ed',
1366 'NotSquareSubset;': '\u228f\u0338',
1367 'NotSquareSubsetEqual;': '\u22e2',
1368 'NotSquareSuperset;': '\u2290\u0338',
1369 'NotSquareSupersetEqual;': '\u22e3',
1370 'NotSubset;': '\u2282\u20d2',
1371 'NotSubsetEqual;': '\u2288',
1372 'NotSucceeds;': '\u2281',
1373 'NotSucceedsEqual;': '\u2ab0\u0338',
1374 'NotSucceedsSlantEqual;': '\u22e1',
1375 'NotSucceedsTilde;': '\u227f\u0338',
1376 'NotSuperset;': '\u2283\u20d2',
1377 'NotSupersetEqual;': '\u2289',
1378 'NotTilde;': '\u2241',
1379 'NotTildeEqual;': '\u2244',
1380 'NotTildeFullEqual;': '\u2247',
1381 'NotTildeTilde;': '\u2249',
1382 'NotVerticalBar;': '\u2224',
1383 'npar;': '\u2226',
1384 'nparallel;': '\u2226',
1385 'nparsl;': '\u2afd\u20e5',
1386 'npart;': '\u2202\u0338',
1387 'npolint;': '\u2a14',
1388 'npr;': '\u2280',
1389 'nprcue;': '\u22e0',
1390 'npre;': '\u2aaf\u0338',
1391 'nprec;': '\u2280',
1392 'npreceq;': '\u2aaf\u0338',
1393 'nrArr;': '\u21cf',
1394 'nrarr;': '\u219b',
1395 'nrarrc;': '\u2933\u0338',
1396 'nrarrw;': '\u219d\u0338',
1397 'nRightarrow;': '\u21cf',
1398 'nrightarrow;': '\u219b',
1399 'nrtri;': '\u22eb',
1400 'nrtrie;': '\u22ed',
1401 'nsc;': '\u2281',
1402 'nsccue;': '\u22e1',
1403 'nsce;': '\u2ab0\u0338',
1404 'Nscr;': '\U0001d4a9',
1405 'nscr;': '\U0001d4c3',
1406 'nshortmid;': '\u2224',
1407 'nshortparallel;': '\u2226',
1408 'nsim;': '\u2241',
1409 'nsime;': '\u2244',
1410 'nsimeq;': '\u2244',
1411 'nsmid;': '\u2224',
1412 'nspar;': '\u2226',
1413 'nsqsube;': '\u22e2',
1414 'nsqsupe;': '\u22e3',
1415 'nsub;': '\u2284',
1416 'nsubE;': '\u2ac5\u0338',
1417 'nsube;': '\u2288',
1418 'nsubset;': '\u2282\u20d2',
1419 'nsubseteq;': '\u2288',
1420 'nsubseteqq;': '\u2ac5\u0338',
1421 'nsucc;': '\u2281',
1422 'nsucceq;': '\u2ab0\u0338',
1423 'nsup;': '\u2285',
1424 'nsupE;': '\u2ac6\u0338',
1425 'nsupe;': '\u2289',
1426 'nsupset;': '\u2283\u20d2',
1427 'nsupseteq;': '\u2289',
1428 'nsupseteqq;': '\u2ac6\u0338',
1429 'ntgl;': '\u2279',
1430 'Ntilde': '\xd1',
1431 'ntilde': '\xf1',
1432 'Ntilde;': '\xd1',
1433 'ntilde;': '\xf1',
1434 'ntlg;': '\u2278',
1435 'ntriangleleft;': '\u22ea',
1436 'ntrianglelefteq;': '\u22ec',
1437 'ntriangleright;': '\u22eb',
1438 'ntrianglerighteq;': '\u22ed',
1439 'Nu;': '\u039d',
1440 'nu;': '\u03bd',
1441 'num;': '#',
1442 'numero;': '\u2116',
1443 'numsp;': '\u2007',
1444 'nvap;': '\u224d\u20d2',
1445 'nVDash;': '\u22af',
1446 'nVdash;': '\u22ae',
1447 'nvDash;': '\u22ad',
1448 'nvdash;': '\u22ac',
1449 'nvge;': '\u2265\u20d2',
1450 'nvgt;': '>\u20d2',
1451 'nvHarr;': '\u2904',
1452 'nvinfin;': '\u29de',
1453 'nvlArr;': '\u2902',
1454 'nvle;': '\u2264\u20d2',
1455 'nvlt;': '<\u20d2',
1456 'nvltrie;': '\u22b4\u20d2',
1457 'nvrArr;': '\u2903',
1458 'nvrtrie;': '\u22b5\u20d2',
1459 'nvsim;': '\u223c\u20d2',
1460 'nwarhk;': '\u2923',
1461 'nwArr;': '\u21d6',
1462 'nwarr;': '\u2196',
1463 'nwarrow;': '\u2196',
1464 'nwnear;': '\u2927',
1465 'Oacute': '\xd3',
1466 'oacute': '\xf3',
1467 'Oacute;': '\xd3',
1468 'oacute;': '\xf3',
1469 'oast;': '\u229b',
1470 'ocir;': '\u229a',
1471 'Ocirc': '\xd4',
1472 'ocirc': '\xf4',
1473 'Ocirc;': '\xd4',
1474 'ocirc;': '\xf4',
1475 'Ocy;': '\u041e',
1476 'ocy;': '\u043e',
1477 'odash;': '\u229d',
1478 'Odblac;': '\u0150',
1479 'odblac;': '\u0151',
1480 'odiv;': '\u2a38',
1481 'odot;': '\u2299',
1482 'odsold;': '\u29bc',
1483 'OElig;': '\u0152',
1484 'oelig;': '\u0153',
1485 'ofcir;': '\u29bf',
1486 'Ofr;': '\U0001d512',
1487 'ofr;': '\U0001d52c',
1488 'ogon;': '\u02db',
1489 'Ograve': '\xd2',
1490 'ograve': '\xf2',
1491 'Ograve;': '\xd2',
1492 'ograve;': '\xf2',
1493 'ogt;': '\u29c1',
1494 'ohbar;': '\u29b5',
1495 'ohm;': '\u03a9',
1496 'oint;': '\u222e',
1497 'olarr;': '\u21ba',
1498 'olcir;': '\u29be',
1499 'olcross;': '\u29bb',
1500 'oline;': '\u203e',
1501 'olt;': '\u29c0',
1502 'Omacr;': '\u014c',
1503 'omacr;': '\u014d',
1504 'Omega;': '\u03a9',
1505 'omega;': '\u03c9',
1506 'Omicron;': '\u039f',
1507 'omicron;': '\u03bf',
1508 'omid;': '\u29b6',
1509 'ominus;': '\u2296',
1510 'Oopf;': '\U0001d546',
1511 'oopf;': '\U0001d560',
1512 'opar;': '\u29b7',
1513 'OpenCurlyDoubleQuote;': '\u201c',
1514 'OpenCurlyQuote;': '\u2018',
1515 'operp;': '\u29b9',
1516 'oplus;': '\u2295',
1517 'Or;': '\u2a54',
1518 'or;': '\u2228',
1519 'orarr;': '\u21bb',
1520 'ord;': '\u2a5d',
1521 'order;': '\u2134',
1522 'orderof;': '\u2134',
1523 'ordf': '\xaa',
1524 'ordf;': '\xaa',
1525 'ordm': '\xba',
1526 'ordm;': '\xba',
1527 'origof;': '\u22b6',
1528 'oror;': '\u2a56',
1529 'orslope;': '\u2a57',
1530 'orv;': '\u2a5b',
1531 'oS;': '\u24c8',
1532 'Oscr;': '\U0001d4aa',
1533 'oscr;': '\u2134',
1534 'Oslash': '\xd8',
1535 'oslash': '\xf8',
1536 'Oslash;': '\xd8',
1537 'oslash;': '\xf8',
1538 'osol;': '\u2298',
1539 'Otilde': '\xd5',
1540 'otilde': '\xf5',
1541 'Otilde;': '\xd5',
1542 'otilde;': '\xf5',
1543 'Otimes;': '\u2a37',
1544 'otimes;': '\u2297',
1545 'otimesas;': '\u2a36',
1546 'Ouml': '\xd6',
1547 'ouml': '\xf6',
1548 'Ouml;': '\xd6',
1549 'ouml;': '\xf6',
1550 'ovbar;': '\u233d',
1551 'OverBar;': '\u203e',
1552 'OverBrace;': '\u23de',
1553 'OverBracket;': '\u23b4',
1554 'OverParenthesis;': '\u23dc',
1555 'par;': '\u2225',
1556 'para': '\xb6',
1557 'para;': '\xb6',
1558 'parallel;': '\u2225',
1559 'parsim;': '\u2af3',
1560 'parsl;': '\u2afd',
1561 'part;': '\u2202',
1562 'PartialD;': '\u2202',
1563 'Pcy;': '\u041f',
1564 'pcy;': '\u043f',
1565 'percnt;': '%',
1566 'period;': '.',
1567 'permil;': '\u2030',
1568 'perp;': '\u22a5',
1569 'pertenk;': '\u2031',
1570 'Pfr;': '\U0001d513',
1571 'pfr;': '\U0001d52d',
1572 'Phi;': '\u03a6',
1573 'phi;': '\u03c6',
1574 'phiv;': '\u03d5',
1575 'phmmat;': '\u2133',
1576 'phone;': '\u260e',
1577 'Pi;': '\u03a0',
1578 'pi;': '\u03c0',
1579 'pitchfork;': '\u22d4',
1580 'piv;': '\u03d6',
1581 'planck;': '\u210f',
1582 'planckh;': '\u210e',
1583 'plankv;': '\u210f',
1584 'plus;': '+',
1585 'plusacir;': '\u2a23',
1586 'plusb;': '\u229e',
1587 'pluscir;': '\u2a22',
1588 'plusdo;': '\u2214',
1589 'plusdu;': '\u2a25',
1590 'pluse;': '\u2a72',
1591 'PlusMinus;': '\xb1',
1592 'plusmn': '\xb1',
1593 'plusmn;': '\xb1',
1594 'plussim;': '\u2a26',
1595 'plustwo;': '\u2a27',
1596 'pm;': '\xb1',
1597 'Poincareplane;': '\u210c',
1598 'pointint;': '\u2a15',
1599 'Popf;': '\u2119',
1600 'popf;': '\U0001d561',
1601 'pound': '\xa3',
1602 'pound;': '\xa3',
1603 'Pr;': '\u2abb',
1604 'pr;': '\u227a',
1605 'prap;': '\u2ab7',
1606 'prcue;': '\u227c',
1607 'prE;': '\u2ab3',
1608 'pre;': '\u2aaf',
1609 'prec;': '\u227a',
1610 'precapprox;': '\u2ab7',
1611 'preccurlyeq;': '\u227c',
1612 'Precedes;': '\u227a',
1613 'PrecedesEqual;': '\u2aaf',
1614 'PrecedesSlantEqual;': '\u227c',
1615 'PrecedesTilde;': '\u227e',
1616 'preceq;': '\u2aaf',
1617 'precnapprox;': '\u2ab9',
1618 'precneqq;': '\u2ab5',
1619 'precnsim;': '\u22e8',
1620 'precsim;': '\u227e',
1621 'Prime;': '\u2033',
1622 'prime;': '\u2032',
1623 'primes;': '\u2119',
1624 'prnap;': '\u2ab9',
1625 'prnE;': '\u2ab5',
1626 'prnsim;': '\u22e8',
1627 'prod;': '\u220f',
1628 'Product;': '\u220f',
1629 'profalar;': '\u232e',
1630 'profline;': '\u2312',
1631 'profsurf;': '\u2313',
1632 'prop;': '\u221d',
1633 'Proportion;': '\u2237',
1634 'Proportional;': '\u221d',
1635 'propto;': '\u221d',
1636 'prsim;': '\u227e',
1637 'prurel;': '\u22b0',
1638 'Pscr;': '\U0001d4ab',
1639 'pscr;': '\U0001d4c5',
1640 'Psi;': '\u03a8',
1641 'psi;': '\u03c8',
1642 'puncsp;': '\u2008',
1643 'Qfr;': '\U0001d514',
1644 'qfr;': '\U0001d52e',
1645 'qint;': '\u2a0c',
1646 'Qopf;': '\u211a',
1647 'qopf;': '\U0001d562',
1648 'qprime;': '\u2057',
1649 'Qscr;': '\U0001d4ac',
1650 'qscr;': '\U0001d4c6',
1651 'quaternions;': '\u210d',
1652 'quatint;': '\u2a16',
1653 'quest;': '?',
1654 'questeq;': '\u225f',
1655 'QUOT': '"',
1656 'quot': '"',
1657 'QUOT;': '"',
1658 'quot;': '"',
1659 'rAarr;': '\u21db',
1660 'race;': '\u223d\u0331',
1661 'Racute;': '\u0154',
1662 'racute;': '\u0155',
1663 'radic;': '\u221a',
1664 'raemptyv;': '\u29b3',
1665 'Rang;': '\u27eb',
1666 'rang;': '\u27e9',
1667 'rangd;': '\u2992',
1668 'range;': '\u29a5',
1669 'rangle;': '\u27e9',
1670 'raquo': '\xbb',
1671 'raquo;': '\xbb',
1672 'Rarr;': '\u21a0',
1673 'rArr;': '\u21d2',
1674 'rarr;': '\u2192',
1675 'rarrap;': '\u2975',
1676 'rarrb;': '\u21e5',
1677 'rarrbfs;': '\u2920',
1678 'rarrc;': '\u2933',
1679 'rarrfs;': '\u291e',
1680 'rarrhk;': '\u21aa',
1681 'rarrlp;': '\u21ac',
1682 'rarrpl;': '\u2945',
1683 'rarrsim;': '\u2974',
1684 'Rarrtl;': '\u2916',
1685 'rarrtl;': '\u21a3',
1686 'rarrw;': '\u219d',
1687 'rAtail;': '\u291c',
1688 'ratail;': '\u291a',
1689 'ratio;': '\u2236',
1690 'rationals;': '\u211a',
1691 'RBarr;': '\u2910',
1692 'rBarr;': '\u290f',
1693 'rbarr;': '\u290d',
1694 'rbbrk;': '\u2773',
1695 'rbrace;': '}',
1696 'rbrack;': ']',
1697 'rbrke;': '\u298c',
1698 'rbrksld;': '\u298e',
1699 'rbrkslu;': '\u2990',
1700 'Rcaron;': '\u0158',
1701 'rcaron;': '\u0159',
1702 'Rcedil;': '\u0156',
1703 'rcedil;': '\u0157',
1704 'rceil;': '\u2309',
1705 'rcub;': '}',
1706 'Rcy;': '\u0420',
1707 'rcy;': '\u0440',
1708 'rdca;': '\u2937',
1709 'rdldhar;': '\u2969',
1710 'rdquo;': '\u201d',
1711 'rdquor;': '\u201d',
1712 'rdsh;': '\u21b3',
1713 'Re;': '\u211c',
1714 'real;': '\u211c',
1715 'realine;': '\u211b',
1716 'realpart;': '\u211c',
1717 'reals;': '\u211d',
1718 'rect;': '\u25ad',
1719 'REG': '\xae',
1720 'reg': '\xae',
1721 'REG;': '\xae',
1722 'reg;': '\xae',
1723 'ReverseElement;': '\u220b',
1724 'ReverseEquilibrium;': '\u21cb',
1725 'ReverseUpEquilibrium;': '\u296f',
1726 'rfisht;': '\u297d',
1727 'rfloor;': '\u230b',
1728 'Rfr;': '\u211c',
1729 'rfr;': '\U0001d52f',
1730 'rHar;': '\u2964',
1731 'rhard;': '\u21c1',
1732 'rharu;': '\u21c0',
1733 'rharul;': '\u296c',
1734 'Rho;': '\u03a1',
1735 'rho;': '\u03c1',
1736 'rhov;': '\u03f1',
1737 'RightAngleBracket;': '\u27e9',
1738 'RightArrow;': '\u2192',
1739 'Rightarrow;': '\u21d2',
1740 'rightarrow;': '\u2192',
1741 'RightArrowBar;': '\u21e5',
1742 'RightArrowLeftArrow;': '\u21c4',
1743 'rightarrowtail;': '\u21a3',
1744 'RightCeiling;': '\u2309',
1745 'RightDoubleBracket;': '\u27e7',
1746 'RightDownTeeVector;': '\u295d',
1747 'RightDownVector;': '\u21c2',
1748 'RightDownVectorBar;': '\u2955',
1749 'RightFloor;': '\u230b',
1750 'rightharpoondown;': '\u21c1',
1751 'rightharpoonup;': '\u21c0',
1752 'rightleftarrows;': '\u21c4',
1753 'rightleftharpoons;': '\u21cc',
1754 'rightrightarrows;': '\u21c9',
1755 'rightsquigarrow;': '\u219d',
1756 'RightTee;': '\u22a2',
1757 'RightTeeArrow;': '\u21a6',
1758 'RightTeeVector;': '\u295b',
1759 'rightthreetimes;': '\u22cc',
1760 'RightTriangle;': '\u22b3',
1761 'RightTriangleBar;': '\u29d0',
1762 'RightTriangleEqual;': '\u22b5',
1763 'RightUpDownVector;': '\u294f',
1764 'RightUpTeeVector;': '\u295c',
1765 'RightUpVector;': '\u21be',
1766 'RightUpVectorBar;': '\u2954',
1767 'RightVector;': '\u21c0',
1768 'RightVectorBar;': '\u2953',
1769 'ring;': '\u02da',
1770 'risingdotseq;': '\u2253',
1771 'rlarr;': '\u21c4',
1772 'rlhar;': '\u21cc',
1773 'rlm;': '\u200f',
1774 'rmoust;': '\u23b1',
1775 'rmoustache;': '\u23b1',
1776 'rnmid;': '\u2aee',
1777 'roang;': '\u27ed',
1778 'roarr;': '\u21fe',
1779 'robrk;': '\u27e7',
1780 'ropar;': '\u2986',
1781 'Ropf;': '\u211d',
1782 'ropf;': '\U0001d563',
1783 'roplus;': '\u2a2e',
1784 'rotimes;': '\u2a35',
1785 'RoundImplies;': '\u2970',
1786 'rpar;': ')',
1787 'rpargt;': '\u2994',
1788 'rppolint;': '\u2a12',
1789 'rrarr;': '\u21c9',
1790 'Rrightarrow;': '\u21db',
1791 'rsaquo;': '\u203a',
1792 'Rscr;': '\u211b',
1793 'rscr;': '\U0001d4c7',
1794 'Rsh;': '\u21b1',
1795 'rsh;': '\u21b1',
1796 'rsqb;': ']',
1797 'rsquo;': '\u2019',
1798 'rsquor;': '\u2019',
1799 'rthree;': '\u22cc',
1800 'rtimes;': '\u22ca',
1801 'rtri;': '\u25b9',
1802 'rtrie;': '\u22b5',
1803 'rtrif;': '\u25b8',
1804 'rtriltri;': '\u29ce',
1805 'RuleDelayed;': '\u29f4',
1806 'ruluhar;': '\u2968',
1807 'rx;': '\u211e',
1808 'Sacute;': '\u015a',
1809 'sacute;': '\u015b',
1810 'sbquo;': '\u201a',
1811 'Sc;': '\u2abc',
1812 'sc;': '\u227b',
1813 'scap;': '\u2ab8',
1814 'Scaron;': '\u0160',
1815 'scaron;': '\u0161',
1816 'sccue;': '\u227d',
1817 'scE;': '\u2ab4',
1818 'sce;': '\u2ab0',
1819 'Scedil;': '\u015e',
1820 'scedil;': '\u015f',
1821 'Scirc;': '\u015c',
1822 'scirc;': '\u015d',
1823 'scnap;': '\u2aba',
1824 'scnE;': '\u2ab6',
1825 'scnsim;': '\u22e9',
1826 'scpolint;': '\u2a13',
1827 'scsim;': '\u227f',
1828 'Scy;': '\u0421',
1829 'scy;': '\u0441',
1830 'sdot;': '\u22c5',
1831 'sdotb;': '\u22a1',
1832 'sdote;': '\u2a66',
1833 'searhk;': '\u2925',
1834 'seArr;': '\u21d8',
1835 'searr;': '\u2198',
1836 'searrow;': '\u2198',
1837 'sect': '\xa7',
1838 'sect;': '\xa7',
1839 'semi;': ';',
1840 'seswar;': '\u2929',
1841 'setminus;': '\u2216',
1842 'setmn;': '\u2216',
1843 'sext;': '\u2736',
1844 'Sfr;': '\U0001d516',
1845 'sfr;': '\U0001d530',
1846 'sfrown;': '\u2322',
1847 'sharp;': '\u266f',
1848 'SHCHcy;': '\u0429',
1849 'shchcy;': '\u0449',
1850 'SHcy;': '\u0428',
1851 'shcy;': '\u0448',
1852 'ShortDownArrow;': '\u2193',
1853 'ShortLeftArrow;': '\u2190',
1854 'shortmid;': '\u2223',
1855 'shortparallel;': '\u2225',
1856 'ShortRightArrow;': '\u2192',
1857 'ShortUpArrow;': '\u2191',
1858 'shy': '\xad',
1859 'shy;': '\xad',
1860 'Sigma;': '\u03a3',
1861 'sigma;': '\u03c3',
1862 'sigmaf;': '\u03c2',
1863 'sigmav;': '\u03c2',
1864 'sim;': '\u223c',
1865 'simdot;': '\u2a6a',
1866 'sime;': '\u2243',
1867 'simeq;': '\u2243',
1868 'simg;': '\u2a9e',
1869 'simgE;': '\u2aa0',
1870 'siml;': '\u2a9d',
1871 'simlE;': '\u2a9f',
1872 'simne;': '\u2246',
1873 'simplus;': '\u2a24',
1874 'simrarr;': '\u2972',
1875 'slarr;': '\u2190',
1876 'SmallCircle;': '\u2218',
1877 'smallsetminus;': '\u2216',
1878 'smashp;': '\u2a33',
1879 'smeparsl;': '\u29e4',
1880 'smid;': '\u2223',
1881 'smile;': '\u2323',
1882 'smt;': '\u2aaa',
1883 'smte;': '\u2aac',
1884 'smtes;': '\u2aac\ufe00',
1885 'SOFTcy;': '\u042c',
1886 'softcy;': '\u044c',
1887 'sol;': '/',
1888 'solb;': '\u29c4',
1889 'solbar;': '\u233f',
1890 'Sopf;': '\U0001d54a',
1891 'sopf;': '\U0001d564',
1892 'spades;': '\u2660',
1893 'spadesuit;': '\u2660',
1894 'spar;': '\u2225',
1895 'sqcap;': '\u2293',
1896 'sqcaps;': '\u2293\ufe00',
1897 'sqcup;': '\u2294',
1898 'sqcups;': '\u2294\ufe00',
1899 'Sqrt;': '\u221a',
1900 'sqsub;': '\u228f',
1901 'sqsube;': '\u2291',
1902 'sqsubset;': '\u228f',
1903 'sqsubseteq;': '\u2291',
1904 'sqsup;': '\u2290',
1905 'sqsupe;': '\u2292',
1906 'sqsupset;': '\u2290',
1907 'sqsupseteq;': '\u2292',
1908 'squ;': '\u25a1',
1909 'Square;': '\u25a1',
1910 'square;': '\u25a1',
1911 'SquareIntersection;': '\u2293',
1912 'SquareSubset;': '\u228f',
1913 'SquareSubsetEqual;': '\u2291',
1914 'SquareSuperset;': '\u2290',
1915 'SquareSupersetEqual;': '\u2292',
1916 'SquareUnion;': '\u2294',
1917 'squarf;': '\u25aa',
1918 'squf;': '\u25aa',
1919 'srarr;': '\u2192',
1920 'Sscr;': '\U0001d4ae',
1921 'sscr;': '\U0001d4c8',
1922 'ssetmn;': '\u2216',
1923 'ssmile;': '\u2323',
1924 'sstarf;': '\u22c6',
1925 'Star;': '\u22c6',
1926 'star;': '\u2606',
1927 'starf;': '\u2605',
1928 'straightepsilon;': '\u03f5',
1929 'straightphi;': '\u03d5',
1930 'strns;': '\xaf',
1931 'Sub;': '\u22d0',
1932 'sub;': '\u2282',
1933 'subdot;': '\u2abd',
1934 'subE;': '\u2ac5',
1935 'sube;': '\u2286',
1936 'subedot;': '\u2ac3',
1937 'submult;': '\u2ac1',
1938 'subnE;': '\u2acb',
1939 'subne;': '\u228a',
1940 'subplus;': '\u2abf',
1941 'subrarr;': '\u2979',
1942 'Subset;': '\u22d0',
1943 'subset;': '\u2282',
1944 'subseteq;': '\u2286',
1945 'subseteqq;': '\u2ac5',
1946 'SubsetEqual;': '\u2286',
1947 'subsetneq;': '\u228a',
1948 'subsetneqq;': '\u2acb',
1949 'subsim;': '\u2ac7',
1950 'subsub;': '\u2ad5',
1951 'subsup;': '\u2ad3',
1952 'succ;': '\u227b',
1953 'succapprox;': '\u2ab8',
1954 'succcurlyeq;': '\u227d',
1955 'Succeeds;': '\u227b',
1956 'SucceedsEqual;': '\u2ab0',
1957 'SucceedsSlantEqual;': '\u227d',
1958 'SucceedsTilde;': '\u227f',
1959 'succeq;': '\u2ab0',
1960 'succnapprox;': '\u2aba',
1961 'succneqq;': '\u2ab6',
1962 'succnsim;': '\u22e9',
1963 'succsim;': '\u227f',
1964 'SuchThat;': '\u220b',
1965 'Sum;': '\u2211',
1966 'sum;': '\u2211',
1967 'sung;': '\u266a',
1968 'sup1': '\xb9',
1969 'sup1;': '\xb9',
1970 'sup2': '\xb2',
1971 'sup2;': '\xb2',
1972 'sup3': '\xb3',
1973 'sup3;': '\xb3',
1974 'Sup;': '\u22d1',
1975 'sup;': '\u2283',
1976 'supdot;': '\u2abe',
1977 'supdsub;': '\u2ad8',
1978 'supE;': '\u2ac6',
1979 'supe;': '\u2287',
1980 'supedot;': '\u2ac4',
1981 'Superset;': '\u2283',
1982 'SupersetEqual;': '\u2287',
1983 'suphsol;': '\u27c9',
1984 'suphsub;': '\u2ad7',
1985 'suplarr;': '\u297b',
1986 'supmult;': '\u2ac2',
1987 'supnE;': '\u2acc',
1988 'supne;': '\u228b',
1989 'supplus;': '\u2ac0',
1990 'Supset;': '\u22d1',
1991 'supset;': '\u2283',
1992 'supseteq;': '\u2287',
1993 'supseteqq;': '\u2ac6',
1994 'supsetneq;': '\u228b',
1995 'supsetneqq;': '\u2acc',
1996 'supsim;': '\u2ac8',
1997 'supsub;': '\u2ad4',
1998 'supsup;': '\u2ad6',
1999 'swarhk;': '\u2926',
2000 'swArr;': '\u21d9',
2001 'swarr;': '\u2199',
2002 'swarrow;': '\u2199',
2003 'swnwar;': '\u292a',
2004 'szlig': '\xdf',
2005 'szlig;': '\xdf',
2006 'Tab;': '\t',
2007 'target;': '\u2316',
2008 'Tau;': '\u03a4',
2009 'tau;': '\u03c4',
2010 'tbrk;': '\u23b4',
2011 'Tcaron;': '\u0164',
2012 'tcaron;': '\u0165',
2013 'Tcedil;': '\u0162',
2014 'tcedil;': '\u0163',
2015 'Tcy;': '\u0422',
2016 'tcy;': '\u0442',
2017 'tdot;': '\u20db',
2018 'telrec;': '\u2315',
2019 'Tfr;': '\U0001d517',
2020 'tfr;': '\U0001d531',
2021 'there4;': '\u2234',
2022 'Therefore;': '\u2234',
2023 'therefore;': '\u2234',
2024 'Theta;': '\u0398',
2025 'theta;': '\u03b8',
2026 'thetasym;': '\u03d1',
2027 'thetav;': '\u03d1',
2028 'thickapprox;': '\u2248',
2029 'thicksim;': '\u223c',
2030 'ThickSpace;': '\u205f\u200a',
2031 'thinsp;': '\u2009',
2032 'ThinSpace;': '\u2009',
2033 'thkap;': '\u2248',
2034 'thksim;': '\u223c',
2035 'THORN': '\xde',
2036 'thorn': '\xfe',
2037 'THORN;': '\xde',
2038 'thorn;': '\xfe',
2039 'Tilde;': '\u223c',
2040 'tilde;': '\u02dc',
2041 'TildeEqual;': '\u2243',
2042 'TildeFullEqual;': '\u2245',
2043 'TildeTilde;': '\u2248',
2044 'times': '\xd7',
2045 'times;': '\xd7',
2046 'timesb;': '\u22a0',
2047 'timesbar;': '\u2a31',
2048 'timesd;': '\u2a30',
2049 'tint;': '\u222d',
2050 'toea;': '\u2928',
2051 'top;': '\u22a4',
2052 'topbot;': '\u2336',
2053 'topcir;': '\u2af1',
2054 'Topf;': '\U0001d54b',
2055 'topf;': '\U0001d565',
2056 'topfork;': '\u2ada',
2057 'tosa;': '\u2929',
2058 'tprime;': '\u2034',
2059 'TRADE;': '\u2122',
2060 'trade;': '\u2122',
2061 'triangle;': '\u25b5',
2062 'triangledown;': '\u25bf',
2063 'triangleleft;': '\u25c3',
2064 'trianglelefteq;': '\u22b4',
2065 'triangleq;': '\u225c',
2066 'triangleright;': '\u25b9',
2067 'trianglerighteq;': '\u22b5',
2068 'tridot;': '\u25ec',
2069 'trie;': '\u225c',
2070 'triminus;': '\u2a3a',
2071 'TripleDot;': '\u20db',
2072 'triplus;': '\u2a39',
2073 'trisb;': '\u29cd',
2074 'tritime;': '\u2a3b',
2075 'trpezium;': '\u23e2',
2076 'Tscr;': '\U0001d4af',
2077 'tscr;': '\U0001d4c9',
2078 'TScy;': '\u0426',
2079 'tscy;': '\u0446',
2080 'TSHcy;': '\u040b',
2081 'tshcy;': '\u045b',
2082 'Tstrok;': '\u0166',
2083 'tstrok;': '\u0167',
2084 'twixt;': '\u226c',
2085 'twoheadleftarrow;': '\u219e',
2086 'twoheadrightarrow;': '\u21a0',
2087 'Uacute': '\xda',
2088 'uacute': '\xfa',
2089 'Uacute;': '\xda',
2090 'uacute;': '\xfa',
2091 'Uarr;': '\u219f',
2092 'uArr;': '\u21d1',
2093 'uarr;': '\u2191',
2094 'Uarrocir;': '\u2949',
2095 'Ubrcy;': '\u040e',
2096 'ubrcy;': '\u045e',
2097 'Ubreve;': '\u016c',
2098 'ubreve;': '\u016d',
2099 'Ucirc': '\xdb',
2100 'ucirc': '\xfb',
2101 'Ucirc;': '\xdb',
2102 'ucirc;': '\xfb',
2103 'Ucy;': '\u0423',
2104 'ucy;': '\u0443',
2105 'udarr;': '\u21c5',
2106 'Udblac;': '\u0170',
2107 'udblac;': '\u0171',
2108 'udhar;': '\u296e',
2109 'ufisht;': '\u297e',
2110 'Ufr;': '\U0001d518',
2111 'ufr;': '\U0001d532',
2112 'Ugrave': '\xd9',
2113 'ugrave': '\xf9',
2114 'Ugrave;': '\xd9',
2115 'ugrave;': '\xf9',
2116 'uHar;': '\u2963',
2117 'uharl;': '\u21bf',
2118 'uharr;': '\u21be',
2119 'uhblk;': '\u2580',
2120 'ulcorn;': '\u231c',
2121 'ulcorner;': '\u231c',
2122 'ulcrop;': '\u230f',
2123 'ultri;': '\u25f8',
2124 'Umacr;': '\u016a',
2125 'umacr;': '\u016b',
2126 'uml': '\xa8',
2127 'uml;': '\xa8',
2128 'UnderBar;': '_',
2129 'UnderBrace;': '\u23df',
2130 'UnderBracket;': '\u23b5',
2131 'UnderParenthesis;': '\u23dd',
2132 'Union;': '\u22c3',
2133 'UnionPlus;': '\u228e',
2134 'Uogon;': '\u0172',
2135 'uogon;': '\u0173',
2136 'Uopf;': '\U0001d54c',
2137 'uopf;': '\U0001d566',
2138 'UpArrow;': '\u2191',
2139 'Uparrow;': '\u21d1',
2140 'uparrow;': '\u2191',
2141 'UpArrowBar;': '\u2912',
2142 'UpArrowDownArrow;': '\u21c5',
2143 'UpDownArrow;': '\u2195',
2144 'Updownarrow;': '\u21d5',
2145 'updownarrow;': '\u2195',
2146 'UpEquilibrium;': '\u296e',
2147 'upharpoonleft;': '\u21bf',
2148 'upharpoonright;': '\u21be',
2149 'uplus;': '\u228e',
2150 'UpperLeftArrow;': '\u2196',
2151 'UpperRightArrow;': '\u2197',
2152 'Upsi;': '\u03d2',
2153 'upsi;': '\u03c5',
2154 'upsih;': '\u03d2',
2155 'Upsilon;': '\u03a5',
2156 'upsilon;': '\u03c5',
2157 'UpTee;': '\u22a5',
2158 'UpTeeArrow;': '\u21a5',
2159 'upuparrows;': '\u21c8',
2160 'urcorn;': '\u231d',
2161 'urcorner;': '\u231d',
2162 'urcrop;': '\u230e',
2163 'Uring;': '\u016e',
2164 'uring;': '\u016f',
2165 'urtri;': '\u25f9',
2166 'Uscr;': '\U0001d4b0',
2167 'uscr;': '\U0001d4ca',
2168 'utdot;': '\u22f0',
2169 'Utilde;': '\u0168',
2170 'utilde;': '\u0169',
2171 'utri;': '\u25b5',
2172 'utrif;': '\u25b4',
2173 'uuarr;': '\u21c8',
2174 'Uuml': '\xdc',
2175 'uuml': '\xfc',
2176 'Uuml;': '\xdc',
2177 'uuml;': '\xfc',
2178 'uwangle;': '\u29a7',
2179 'vangrt;': '\u299c',
2180 'varepsilon;': '\u03f5',
2181 'varkappa;': '\u03f0',
2182 'varnothing;': '\u2205',
2183 'varphi;': '\u03d5',
2184 'varpi;': '\u03d6',
2185 'varpropto;': '\u221d',
2186 'vArr;': '\u21d5',
2187 'varr;': '\u2195',
2188 'varrho;': '\u03f1',
2189 'varsigma;': '\u03c2',
2190 'varsubsetneq;': '\u228a\ufe00',
2191 'varsubsetneqq;': '\u2acb\ufe00',
2192 'varsupsetneq;': '\u228b\ufe00',
2193 'varsupsetneqq;': '\u2acc\ufe00',
2194 'vartheta;': '\u03d1',
2195 'vartriangleleft;': '\u22b2',
2196 'vartriangleright;': '\u22b3',
2197 'Vbar;': '\u2aeb',
2198 'vBar;': '\u2ae8',
2199 'vBarv;': '\u2ae9',
2200 'Vcy;': '\u0412',
2201 'vcy;': '\u0432',
2202 'VDash;': '\u22ab',
2203 'Vdash;': '\u22a9',
2204 'vDash;': '\u22a8',
2205 'vdash;': '\u22a2',
2206 'Vdashl;': '\u2ae6',
2207 'Vee;': '\u22c1',
2208 'vee;': '\u2228',
2209 'veebar;': '\u22bb',
2210 'veeeq;': '\u225a',
2211 'vellip;': '\u22ee',
2212 'Verbar;': '\u2016',
2213 'verbar;': '|',
2214 'Vert;': '\u2016',
2215 'vert;': '|',
2216 'VerticalBar;': '\u2223',
2217 'VerticalLine;': '|',
2218 'VerticalSeparator;': '\u2758',
2219 'VerticalTilde;': '\u2240',
2220 'VeryThinSpace;': '\u200a',
2221 'Vfr;': '\U0001d519',
2222 'vfr;': '\U0001d533',
2223 'vltri;': '\u22b2',
2224 'vnsub;': '\u2282\u20d2',
2225 'vnsup;': '\u2283\u20d2',
2226 'Vopf;': '\U0001d54d',
2227 'vopf;': '\U0001d567',
2228 'vprop;': '\u221d',
2229 'vrtri;': '\u22b3',
2230 'Vscr;': '\U0001d4b1',
2231 'vscr;': '\U0001d4cb',
2232 'vsubnE;': '\u2acb\ufe00',
2233 'vsubne;': '\u228a\ufe00',
2234 'vsupnE;': '\u2acc\ufe00',
2235 'vsupne;': '\u228b\ufe00',
2236 'Vvdash;': '\u22aa',
2237 'vzigzag;': '\u299a',
2238 'Wcirc;': '\u0174',
2239 'wcirc;': '\u0175',
2240 'wedbar;': '\u2a5f',
2241 'Wedge;': '\u22c0',
2242 'wedge;': '\u2227',
2243 'wedgeq;': '\u2259',
2244 'weierp;': '\u2118',
2245 'Wfr;': '\U0001d51a',
2246 'wfr;': '\U0001d534',
2247 'Wopf;': '\U0001d54e',
2248 'wopf;': '\U0001d568',
2249 'wp;': '\u2118',
2250 'wr;': '\u2240',
2251 'wreath;': '\u2240',
2252 'Wscr;': '\U0001d4b2',
2253 'wscr;': '\U0001d4cc',
2254 'xcap;': '\u22c2',
2255 'xcirc;': '\u25ef',
2256 'xcup;': '\u22c3',
2257 'xdtri;': '\u25bd',
2258 'Xfr;': '\U0001d51b',
2259 'xfr;': '\U0001d535',
2260 'xhArr;': '\u27fa',
2261 'xharr;': '\u27f7',
2262 'Xi;': '\u039e',
2263 'xi;': '\u03be',
2264 'xlArr;': '\u27f8',
2265 'xlarr;': '\u27f5',
2266 'xmap;': '\u27fc',
2267 'xnis;': '\u22fb',
2268 'xodot;': '\u2a00',
2269 'Xopf;': '\U0001d54f',
2270 'xopf;': '\U0001d569',
2271 'xoplus;': '\u2a01',
2272 'xotime;': '\u2a02',
2273 'xrArr;': '\u27f9',
2274 'xrarr;': '\u27f6',
2275 'Xscr;': '\U0001d4b3',
2276 'xscr;': '\U0001d4cd',
2277 'xsqcup;': '\u2a06',
2278 'xuplus;': '\u2a04',
2279 'xutri;': '\u25b3',
2280 'xvee;': '\u22c1',
2281 'xwedge;': '\u22c0',
2282 'Yacute': '\xdd',
2283 'yacute': '\xfd',
2284 'Yacute;': '\xdd',
2285 'yacute;': '\xfd',
2286 'YAcy;': '\u042f',
2287 'yacy;': '\u044f',
2288 'Ycirc;': '\u0176',
2289 'ycirc;': '\u0177',
2290 'Ycy;': '\u042b',
2291 'ycy;': '\u044b',
2292 'yen': '\xa5',
2293 'yen;': '\xa5',
2294 'Yfr;': '\U0001d51c',
2295 'yfr;': '\U0001d536',
2296 'YIcy;': '\u0407',
2297 'yicy;': '\u0457',
2298 'Yopf;': '\U0001d550',
2299 'yopf;': '\U0001d56a',
2300 'Yscr;': '\U0001d4b4',
2301 'yscr;': '\U0001d4ce',
2302 'YUcy;': '\u042e',
2303 'yucy;': '\u044e',
2304 'yuml': '\xff',
2305 'Yuml;': '\u0178',
2306 'yuml;': '\xff',
2307 'Zacute;': '\u0179',
2308 'zacute;': '\u017a',
2309 'Zcaron;': '\u017d',
2310 'zcaron;': '\u017e',
2311 'Zcy;': '\u0417',
2312 'zcy;': '\u0437',
2313 'Zdot;': '\u017b',
2314 'zdot;': '\u017c',
2315 'zeetrf;': '\u2128',
2316 'ZeroWidthSpace;': '\u200b',
2317 'Zeta;': '\u0396',
2318 'zeta;': '\u03b6',
2319 'Zfr;': '\u2128',
2320 'zfr;': '\U0001d537',
2321 'ZHcy;': '\u0416',
2322 'zhcy;': '\u0436',
2323 'zigrarr;': '\u21dd',
2324 'Zopf;': '\u2124',
2325 'zopf;': '\U0001d56b',
2326 'Zscr;': '\U0001d4b5',
2327 'zscr;': '\U0001d4cf',
2328 'zwj;': '\u200d',
2329 'zwnj;': '\u200c',
2330 }
2331
2332 try:
2333 import http.client as compat_http_client
2334 except ImportError: # Python 2
2335 import httplib as compat_http_client
2336
2337 try:
2338 from urllib.error import HTTPError as compat_HTTPError
2339 except ImportError: # Python 2
2340 from urllib2 import HTTPError as compat_HTTPError
2341
2342 try:
2343 from urllib.request import urlretrieve as compat_urlretrieve
2344 except ImportError: # Python 2
2345 from urllib import urlretrieve as compat_urlretrieve
2346
2347 try:
2348 from html.parser import HTMLParser as compat_HTMLParser
2349 except ImportError: # Python 2
2350 from HTMLParser import HTMLParser as compat_HTMLParser
2351
2352 try: # Python 2
2353 from HTMLParser import HTMLParseError as compat_HTMLParseError
2354 except ImportError: # Python <3.4
2355 try:
2356 from html.parser import HTMLParseError as compat_HTMLParseError
2357 except ImportError: # Python >3.4
2358
2359 # HTMLParseError has been deprecated in Python 3.3 and removed in
2360 # Python 3.5. Introducing dummy exception for Python >3.5 for compatible
2361 # and uniform cross-version exception handling
2362 class compat_HTMLParseError(Exception):
2363 pass
2364
2365 try:
2366 from subprocess import DEVNULL
2367 compat_subprocess_get_DEVNULL = lambda: DEVNULL
2368 except ImportError:
2369 compat_subprocess_get_DEVNULL = lambda: open(os.path.devnull, 'w')
2370
2371 try:
2372 import http.server as compat_http_server
2373 except ImportError:
2374 import BaseHTTPServer as compat_http_server
2375
2376 try:
2377 compat_str = unicode # Python 2
2378 except NameError:
2379 compat_str = str
2380
2381 try:
2382 from urllib.parse import unquote_to_bytes as compat_urllib_parse_unquote_to_bytes
2383 from urllib.parse import unquote as compat_urllib_parse_unquote
2384 from urllib.parse import unquote_plus as compat_urllib_parse_unquote_plus
2385 except ImportError: # Python 2
2386 _asciire = (compat_urllib_parse._asciire if hasattr(compat_urllib_parse, '_asciire')
2387 else re.compile(r'([\x00-\x7f]+)'))
2388
2389 # HACK: The following are the correct unquote_to_bytes, unquote and unquote_plus
2390 # implementations from cpython 3.4.3's stdlib. Python 2's version
2391 # is apparently broken (see https://github.com/ytdl-org/youtube-dl/pull/6244)
2392
2393 def compat_urllib_parse_unquote_to_bytes(string):
2394 """unquote_to_bytes('abc%20def') -> b'abc def'."""
2395 # Note: strings are encoded as UTF-8. This is only an issue if it contains
2396 # unescaped non-ASCII characters, which URIs should not.
2397 if not string:
2398 # Is it a string-like object?
2399 string.split
2400 return b''
2401 if isinstance(string, compat_str):
2402 string = string.encode('utf-8')
2403 bits = string.split(b'%')
2404 if len(bits) == 1:
2405 return string
2406 res = [bits[0]]
2407 append = res.append
2408 for item in bits[1:]:
2409 try:
2410 append(compat_urllib_parse._hextochr[item[:2]])
2411 append(item[2:])
2412 except KeyError:
2413 append(b'%')
2414 append(item)
2415 return b''.join(res)
2416
2417 def compat_urllib_parse_unquote(string, encoding='utf-8', errors='replace'):
2418 """Replace %xx escapes by their single-character equivalent. The optional
2419 encoding and errors parameters specify how to decode percent-encoded
2420 sequences into Unicode characters, as accepted by the bytes.decode()
2421 method.
2422 By default, percent-encoded sequences are decoded with UTF-8, and invalid
2423 sequences are replaced by a placeholder character.
2424
2425 unquote('abc%20def') -> 'abc def'.
2426 """
2427 if '%' not in string:
2428 string.split
2429 return string
2430 if encoding is None:
2431 encoding = 'utf-8'
2432 if errors is None:
2433 errors = 'replace'
2434 bits = _asciire.split(string)
2435 res = [bits[0]]
2436 append = res.append
2437 for i in range(1, len(bits), 2):
2438 append(compat_urllib_parse_unquote_to_bytes(bits[i]).decode(encoding, errors))
2439 append(bits[i + 1])
2440 return ''.join(res)
2441
2442 def compat_urllib_parse_unquote_plus(string, encoding='utf-8', errors='replace'):
2443 """Like unquote(), but also replace plus signs by spaces, as required for
2444 unquoting HTML form values.
2445
2446 unquote_plus('%7e/abc+def') -> '~/abc def'
2447 """
2448 string = string.replace('+', ' ')
2449 return compat_urllib_parse_unquote(string, encoding, errors)
2450
2451 try:
2452 from urllib.parse import urlencode as compat_urllib_parse_urlencode
2453 except ImportError: # Python 2
2454 # Python 2 will choke in urlencode on mixture of byte and unicode strings.
2455 # Possible solutions are to either port it from python 3 with all
2456 # the friends or manually ensure input query contains only byte strings.
2457 # We will stick with latter thus recursively encoding the whole query.
2458 def compat_urllib_parse_urlencode(query, doseq=0, encoding='utf-8'):
2459 def encode_elem(e):
2460 if isinstance(e, dict):
2461 e = encode_dict(e)
2462 elif isinstance(e, (list, tuple,)):
2463 list_e = encode_list(e)
2464 e = tuple(list_e) if isinstance(e, tuple) else list_e
2465 elif isinstance(e, compat_str):
2466 e = e.encode(encoding)
2467 return e
2468
2469 def encode_dict(d):
2470 return dict((encode_elem(k), encode_elem(v)) for k, v in d.items())
2471
2472 def encode_list(l):
2473 return [encode_elem(e) for e in l]
2474
2475 return compat_urllib_parse.urlencode(encode_elem(query), doseq=doseq)
2476
2477 try:
2478 from urllib.request import DataHandler as compat_urllib_request_DataHandler
2479 except ImportError: # Python < 3.4
2480 # Ported from CPython 98774:1733b3bd46db, Lib/urllib/request.py
2481 class compat_urllib_request_DataHandler(compat_urllib_request.BaseHandler):
2482 def data_open(self, req):
2483 # data URLs as specified in RFC 2397.
2484 #
2485 # ignores POSTed data
2486 #
2487 # syntax:
2488 # dataurl := "data:" [ mediatype ] [ ";base64" ] "," data
2489 # mediatype := [ type "/" subtype ] *( ";" parameter )
2490 # data := *urlchar
2491 # parameter := attribute "=" value
2492 url = req.get_full_url()
2493
2494 scheme, data = url.split(':', 1)
2495 mediatype, data = data.split(',', 1)
2496
2497 # even base64 encoded data URLs might be quoted so unquote in any case:
2498 data = compat_urllib_parse_unquote_to_bytes(data)
2499 if mediatype.endswith(';base64'):
2500 data = binascii.a2b_base64(data)
2501 mediatype = mediatype[:-7]
2502
2503 if not mediatype:
2504 mediatype = 'text/plain;charset=US-ASCII'
2505
2506 headers = email.message_from_string(
2507 'Content-type: %s\nContent-length: %d\n' % (mediatype, len(data)))
2508
2509 return compat_urllib_response.addinfourl(io.BytesIO(data), headers, url)
2510
2511 try:
2512 compat_basestring = basestring # Python 2
2513 except NameError:
2514 compat_basestring = str
2515
2516 try:
2517 compat_chr = unichr # Python 2
2518 except NameError:
2519 compat_chr = chr
2520
2521 try:
2522 from xml.etree.ElementTree import ParseError as compat_xml_parse_error
2523 except ImportError: # Python 2.6
2524 from xml.parsers.expat import ExpatError as compat_xml_parse_error
2525
2526
2527 etree = xml.etree.ElementTree
2528
2529
2530 class _TreeBuilder(etree.TreeBuilder):
2531 def doctype(self, name, pubid, system):
2532 pass
2533
2534
2535 try:
2536 # xml.etree.ElementTree.Element is a method in Python <=2.6 and
2537 # the following will crash with:
2538 # TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types
2539 isinstance(None, xml.etree.ElementTree.Element)
2540 from xml.etree.ElementTree import Element as compat_etree_Element
2541 except TypeError: # Python <=2.6
2542 from xml.etree.ElementTree import _ElementInterface as compat_etree_Element
2543
2544 if sys.version_info[0] >= 3:
2545 def compat_etree_fromstring(text):
2546 return etree.XML(text, parser=etree.XMLParser(target=_TreeBuilder()))
2547 else:
2548 # python 2.x tries to encode unicode strings with ascii (see the
2549 # XMLParser._fixtext method)
2550 try:
2551 _etree_iter = etree.Element.iter
2552 except AttributeError: # Python <=2.6
2553 def _etree_iter(root):
2554 for el in root.findall('*'):
2555 yield el
2556 for sub in _etree_iter(el):
2557 yield sub
2558
2559 # on 2.6 XML doesn't have a parser argument, function copied from CPython
2560 # 2.7 source
2561 def _XML(text, parser=None):
2562 if not parser:
2563 parser = etree.XMLParser(target=_TreeBuilder())
2564 parser.feed(text)
2565 return parser.close()
2566
2567 def _element_factory(*args, **kwargs):
2568 el = etree.Element(*args, **kwargs)
2569 for k, v in el.items():
2570 if isinstance(v, bytes):
2571 el.set(k, v.decode('utf-8'))
2572 return el
2573
2574 def compat_etree_fromstring(text):
2575 doc = _XML(text, parser=etree.XMLParser(target=_TreeBuilder(element_factory=_element_factory)))
2576 for el in _etree_iter(doc):
2577 if el.text is not None and isinstance(el.text, bytes):
2578 el.text = el.text.decode('utf-8')
2579 return doc
2580
2581 if hasattr(etree, 'register_namespace'):
2582 compat_etree_register_namespace = etree.register_namespace
2583 else:
2584 def compat_etree_register_namespace(prefix, uri):
2585 """Register a namespace prefix.
2586 The registry is global, and any existing mapping for either the
2587 given prefix or the namespace URI will be removed.
2588 *prefix* is the namespace prefix, *uri* is a namespace uri. Tags and
2589 attributes in this namespace will be serialized with prefix if possible.
2590 ValueError is raised if prefix is reserved or is invalid.
2591 """
2592 if re.match(r"ns\d+$", prefix):
2593 raise ValueError("Prefix format reserved for internal use")
2594 for k, v in list(etree._namespace_map.items()):
2595 if k == uri or v == prefix:
2596 del etree._namespace_map[k]
2597 etree._namespace_map[uri] = prefix
2598
2599 if sys.version_info < (2, 7):
2600 # Here comes the crazy part: In 2.6, if the xpath is a unicode,
2601 # .//node does not match if a node is a direct child of . !
2602 def compat_xpath(xpath):
2603 if isinstance(xpath, compat_str):
2604 xpath = xpath.encode('ascii')
2605 return xpath
2606 else:
2607 compat_xpath = lambda xpath: xpath
2608
2609 try:
2610 from urllib.parse import parse_qs as compat_parse_qs
2611 except ImportError: # Python 2
2612 # HACK: The following is the correct parse_qs implementation from cpython 3's stdlib.
2613 # Python 2's version is apparently totally broken
2614
2615 def _parse_qsl(qs, keep_blank_values=False, strict_parsing=False,
2616 encoding='utf-8', errors='replace'):
2617 qs, _coerce_result = qs, compat_str
2618 pairs = [s2 for s1 in qs.split('&') for s2 in s1.split(';')]
2619 r = []
2620 for name_value in pairs:
2621 if not name_value and not strict_parsing:
2622 continue
2623 nv = name_value.split('=', 1)
2624 if len(nv) != 2:
2625 if strict_parsing:
2626 raise ValueError('bad query field: %r' % (name_value,))
2627 # Handle case of a control-name with no equal sign
2628 if keep_blank_values:
2629 nv.append('')
2630 else:
2631 continue
2632 if len(nv[1]) or keep_blank_values:
2633 name = nv[0].replace('+', ' ')
2634 name = compat_urllib_parse_unquote(
2635 name, encoding=encoding, errors=errors)
2636 name = _coerce_result(name)
2637 value = nv[1].replace('+', ' ')
2638 value = compat_urllib_parse_unquote(
2639 value, encoding=encoding, errors=errors)
2640 value = _coerce_result(value)
2641 r.append((name, value))
2642 return r
2643
2644 def compat_parse_qs(qs, keep_blank_values=False, strict_parsing=False,
2645 encoding='utf-8', errors='replace'):
2646 parsed_result = {}
2647 pairs = _parse_qsl(qs, keep_blank_values, strict_parsing,
2648 encoding=encoding, errors=errors)
2649 for name, value in pairs:
2650 if name in parsed_result:
2651 parsed_result[name].append(value)
2652 else:
2653 parsed_result[name] = [value]
2654 return parsed_result
2655
2656
2657 compat_os_name = os._name if os.name == 'java' else os.name
2658
2659
2660 if compat_os_name == 'nt':
2661 def compat_shlex_quote(s):
2662 return s if re.match(r'^[-_\w./]+$', s) else '"%s"' % s.replace('"', '\\"')
2663 else:
2664 try:
2665 from shlex import quote as compat_shlex_quote
2666 except ImportError: # Python < 3.3
2667 def compat_shlex_quote(s):
2668 if re.match(r'^[-_\w./]+$', s):
2669 return s
2670 else:
2671 return "'" + s.replace("'", "'\"'\"'") + "'"
2672
2673
2674 try:
2675 args = shlex.split('中文')
2676 assert (isinstance(args, list)
2677 and isinstance(args[0], compat_str)
2678 and args[0] == '中文')
2679 compat_shlex_split = shlex.split
2680 except (AssertionError, UnicodeEncodeError):
2681 # Working around shlex issue with unicode strings on some python 2
2682 # versions (see http://bugs.python.org/issue1548891)
2683 def compat_shlex_split(s, comments=False, posix=True):
2684 if isinstance(s, compat_str):
2685 s = s.encode('utf-8')
2686 return list(map(lambda s: s.decode('utf-8'), shlex.split(s, comments, posix)))
2687
2688
2689 def compat_ord(c):
2690 if type(c) is int:
2691 return c
2692 else:
2693 return ord(c)
2694
2695
2696 if sys.version_info >= (3, 0):
2697 compat_getenv = os.getenv
2698 compat_expanduser = os.path.expanduser
2699
2700 def compat_setenv(key, value, env=os.environ):
2701 env[key] = value
2702 else:
2703 # Environment variables should be decoded with filesystem encoding.
2704 # Otherwise it will fail if any non-ASCII characters present (see #3854 #3217 #2918)
2705
2706 def compat_getenv(key, default=None):
2707 from .utils import get_filesystem_encoding
2708 env = os.getenv(key, default)
2709 if env:
2710 env = env.decode(get_filesystem_encoding())
2711 return env
2712
2713 def compat_setenv(key, value, env=os.environ):
2714 def encode(v):
2715 from .utils import get_filesystem_encoding
2716 return v.encode(get_filesystem_encoding()) if isinstance(v, compat_str) else v
2717 env[encode(key)] = encode(value)
2718
2719 # HACK: The default implementations of os.path.expanduser from cpython do not decode
2720 # environment variables with filesystem encoding. We will work around this by
2721 # providing adjusted implementations.
2722 # The following are os.path.expanduser implementations from cpython 2.7.8 stdlib
2723 # for different platforms with correct environment variables decoding.
2724
2725 if compat_os_name == 'posix':
2726 def compat_expanduser(path):
2727 """Expand ~ and ~user constructions. If user or $HOME is unknown,
2728 do nothing."""
2729 if not path.startswith('~'):
2730 return path
2731 i = path.find('/', 1)
2732 if i < 0:
2733 i = len(path)
2734 if i == 1:
2735 if 'HOME' not in os.environ:
2736 import pwd
2737 userhome = pwd.getpwuid(os.getuid()).pw_dir
2738 else:
2739 userhome = compat_getenv('HOME')
2740 else:
2741 import pwd
2742 try:
2743 pwent = pwd.getpwnam(path[1:i])
2744 except KeyError:
2745 return path
2746 userhome = pwent.pw_dir
2747 userhome = userhome.rstrip('/')
2748 return (userhome + path[i:]) or '/'
2749 elif compat_os_name in ('nt', 'ce'):
2750 def compat_expanduser(path):
2751 """Expand ~ and ~user constructs.
2752
2753 If user or $HOME is unknown, do nothing."""
2754 if path[:1] != '~':
2755 return path
2756 i, n = 1, len(path)
2757 while i < n and path[i] not in '/\\':
2758 i = i + 1
2759
2760 if 'HOME' in os.environ:
2761 userhome = compat_getenv('HOME')
2762 elif 'USERPROFILE' in os.environ:
2763 userhome = compat_getenv('USERPROFILE')
2764 elif 'HOMEPATH' not in os.environ:
2765 return path
2766 else:
2767 try:
2768 drive = compat_getenv('HOMEDRIVE')
2769 except KeyError:
2770 drive = ''
2771 userhome = os.path.join(drive, compat_getenv('HOMEPATH'))
2772
2773 if i != 1: # ~user
2774 userhome = os.path.join(os.path.dirname(userhome), path[1:i])
2775
2776 return userhome + path[i:]
2777 else:
2778 compat_expanduser = os.path.expanduser
2779
2780
2781 if compat_os_name == 'nt' and sys.version_info < (3, 8):
2782 # os.path.realpath on Windows does not follow symbolic links
2783 # prior to Python 3.8 (see https://bugs.python.org/issue9949)
2784 def compat_realpath(path):
2785 while os.path.islink(path):
2786 path = os.path.abspath(os.readlink(path))
2787 return path
2788 else:
2789 compat_realpath = os.path.realpath
2790
2791
2792 if sys.version_info < (3, 0):
2793 def compat_print(s):
2794 from .utils import preferredencoding
2795 print(s.encode(preferredencoding(), 'xmlcharrefreplace'))
2796 else:
2797 def compat_print(s):
2798 assert isinstance(s, compat_str)
2799 print(s)
2800
2801
2802 if sys.version_info < (3, 0) and sys.platform == 'win32':
2803 def compat_getpass(prompt, *args, **kwargs):
2804 if isinstance(prompt, compat_str):
2805 from .utils import preferredencoding
2806 prompt = prompt.encode(preferredencoding())
2807 return getpass.getpass(prompt, *args, **kwargs)
2808 else:
2809 compat_getpass = getpass.getpass
2810
2811 try:
2812 compat_input = raw_input
2813 except NameError: # Python 3
2814 compat_input = input
2815
2816 # Python < 2.6.5 require kwargs to be bytes
2817 try:
2818 def _testfunc(x):
2819 pass
2820 _testfunc(**{'x': 0})
2821 except TypeError:
2822 def compat_kwargs(kwargs):
2823 return dict((bytes(k), v) for k, v in kwargs.items())
2824 else:
2825 compat_kwargs = lambda kwargs: kwargs
2826
2827
2828 try:
2829 compat_numeric_types = (int, float, long, complex)
2830 except NameError: # Python 3
2831 compat_numeric_types = (int, float, complex)
2832
2833
2834 try:
2835 compat_integer_types = (int, long)
2836 except NameError: # Python 3
2837 compat_integer_types = (int, )
2838
2839
2840 if sys.version_info < (2, 7):
2841 def compat_socket_create_connection(address, timeout, source_address=None):
2842 host, port = address
2843 err = None
2844 for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):
2845 af, socktype, proto, canonname, sa = res
2846 sock = None
2847 try:
2848 sock = socket.socket(af, socktype, proto)
2849 sock.settimeout(timeout)
2850 if source_address:
2851 sock.bind(source_address)
2852 sock.connect(sa)
2853 return sock
2854 except socket.error as _:
2855 err = _
2856 if sock is not None:
2857 sock.close()
2858 if err is not None:
2859 raise err
2860 else:
2861 raise socket.error('getaddrinfo returns an empty list')
2862 else:
2863 compat_socket_create_connection = socket.create_connection
2864
2865
2866 # Fix https://github.com/ytdl-org/youtube-dl/issues/4223
2867 # See http://bugs.python.org/issue9161 for what is broken
2868 def workaround_optparse_bug9161():
2869 op = optparse.OptionParser()
2870 og = optparse.OptionGroup(op, 'foo')
2871 try:
2872 og.add_option('-t')
2873 except TypeError:
2874 real_add_option = optparse.OptionGroup.add_option
2875
2876 def _compat_add_option(self, *args, **kwargs):
2877 enc = lambda v: (
2878 v.encode('ascii', 'replace') if isinstance(v, compat_str)
2879 else v)
2880 bargs = [enc(a) for a in args]
2881 bkwargs = dict(
2882 (k, enc(v)) for k, v in kwargs.items())
2883 return real_add_option(self, *bargs, **bkwargs)
2884 optparse.OptionGroup.add_option = _compat_add_option
2885
2886
2887 if hasattr(shutil, 'get_terminal_size'): # Python >= 3.3
2888 compat_get_terminal_size = shutil.get_terminal_size
2889 else:
2890 _terminal_size = collections.namedtuple('terminal_size', ['columns', 'lines'])
2891
2892 def compat_get_terminal_size(fallback=(80, 24)):
2893 from .utils import process_communicate_or_kill
2894 columns = compat_getenv('COLUMNS')
2895 if columns:
2896 columns = int(columns)
2897 else:
2898 columns = None
2899 lines = compat_getenv('LINES')
2900 if lines:
2901 lines = int(lines)
2902 else:
2903 lines = None
2904
2905 if columns is None or lines is None or columns <= 0 or lines <= 0:
2906 try:
2907 sp = subprocess.Popen(
2908 ['stty', 'size'],
2909 stdout=subprocess.PIPE, stderr=subprocess.PIPE)
2910 out, err = process_communicate_or_kill(sp)
2911 _lines, _columns = map(int, out.split())
2912 except Exception:
2913 _columns, _lines = _terminal_size(*fallback)
2914
2915 if columns is None or columns <= 0:
2916 columns = _columns
2917 if lines is None or lines <= 0:
2918 lines = _lines
2919 return _terminal_size(columns, lines)
2920
2921 try:
2922 itertools.count(start=0, step=1)
2923 compat_itertools_count = itertools.count
2924 except TypeError: # Python 2.6
2925 def compat_itertools_count(start=0, step=1):
2926 n = start
2927 while True:
2928 yield n
2929 n += step
2930
2931 if sys.version_info >= (3, 0):
2932 from tokenize import tokenize as compat_tokenize_tokenize
2933 else:
2934 from tokenize import generate_tokens as compat_tokenize_tokenize
2935
2936
2937 try:
2938 struct.pack('!I', 0)
2939 except TypeError:
2940 # In Python 2.6 and 2.7.x < 2.7.7, struct requires a bytes argument
2941 # See https://bugs.python.org/issue19099
2942 def compat_struct_pack(spec, *args):
2943 if isinstance(spec, compat_str):
2944 spec = spec.encode('ascii')
2945 return struct.pack(spec, *args)
2946
2947 def compat_struct_unpack(spec, *args):
2948 if isinstance(spec, compat_str):
2949 spec = spec.encode('ascii')
2950 return struct.unpack(spec, *args)
2951
2952 class compat_Struct(struct.Struct):
2953 def __init__(self, fmt):
2954 if isinstance(fmt, compat_str):
2955 fmt = fmt.encode('ascii')
2956 super(compat_Struct, self).__init__(fmt)
2957 else:
2958 compat_struct_pack = struct.pack
2959 compat_struct_unpack = struct.unpack
2960 if platform.python_implementation() == 'IronPython' and sys.version_info < (2, 7, 8):
2961 class compat_Struct(struct.Struct):
2962 def unpack(self, string):
2963 if not isinstance(string, buffer): # noqa: F821
2964 string = buffer(string) # noqa: F821
2965 return super(compat_Struct, self).unpack(string)
2966 else:
2967 compat_Struct = struct.Struct
2968
2969
2970 # compat_map/filter() returning an iterator, supposedly the
2971 # same versioning as for zip below
2972 try:
2973 from future_builtins import map as compat_map
2974 except ImportError:
2975 try:
2976 from itertools import imap as compat_map
2977 except ImportError:
2978 compat_map = map
2979
2980 try:
2981 from future_builtins import filter as compat_filter
2982 except ImportError:
2983 try:
2984 from itertools import ifilter as compat_filter
2985 except ImportError:
2986 compat_filter = filter
2987
2988 try:
2989 from future_builtins import zip as compat_zip
2990 except ImportError: # not 2.6+ or is 3.x
2991 try:
2992 from itertools import izip as compat_zip # < 2.5 or 3.x
2993 except ImportError:
2994 compat_zip = zip
2995
2996
2997 # method renamed between Py2/3
2998 try:
2999 from itertools import zip_longest as compat_itertools_zip_longest
3000 except ImportError:
3001 from itertools import izip_longest as compat_itertools_zip_longest
3002
3003
3004 # new class in collections
3005 try:
3006 from collections import ChainMap as compat_collections_chain_map
3007 # Py3.3's ChainMap is deficient
3008 if sys.version_info < (3, 4):
3009 raise ImportError
3010 except ImportError:
3011 # Py <= 3.3
3012 class compat_collections_chain_map(compat_collections_abc.MutableMapping):
3013
3014 maps = [{}]
3015
3016 def __init__(self, *maps):
3017 self.maps = list(maps) or [{}]
3018
3019 def __getitem__(self, k):
3020 for m in self.maps:
3021 if k in m:
3022 return m[k]
3023 raise KeyError(k)
3024
3025 def __setitem__(self, k, v):
3026 self.maps[0].__setitem__(k, v)
3027 return
3028
3029 def __contains__(self, k):
3030 return any((k in m) for m in self.maps)
3031
3032 def __delitem(self, k):
3033 if k in self.maps[0]:
3034 del self.maps[0][k]
3035 return
3036 raise KeyError(k)
3037
3038 def __delitem__(self, k):
3039 self.__delitem(k)
3040
3041 def __iter__(self):
3042 return itertools.chain(*reversed(self.maps))
3043
3044 def __len__(self):
3045 return len(iter(self))
3046
3047 # to match Py3, don't del directly
3048 def pop(self, k, *args):
3049 if self.__contains__(k):
3050 off = self.__getitem__(k)
3051 self.__delitem(k)
3052 return off
3053 elif len(args) > 0:
3054 return args[0]
3055 raise KeyError(k)
3056
3057 def new_child(self, m=None, **kwargs):
3058 m = m or {}
3059 m.update(kwargs)
3060 return compat_collections_chain_map(m, *self.maps)
3061
3062 @property
3063 def parents(self):
3064 return compat_collections_chain_map(*(self.maps[1:]))
3065
3066
3067 # Pythons disagree on the type of a pattern (RegexObject, _sre.SRE_Pattern, Pattern, ...?)
3068 compat_re_Pattern = type(re.compile(''))
3069
3070 if sys.version_info < (3, 3):
3071 def compat_b64decode(s, *args, **kwargs):
3072 if isinstance(s, compat_str):
3073 s = s.encode('ascii')
3074 return base64.b64decode(s, *args, **kwargs)
3075 else:
3076 compat_b64decode = base64.b64decode
3077
3078
3079 if platform.python_implementation() == 'PyPy' and sys.pypy_version_info < (5, 4, 0):
3080 # PyPy2 prior to version 5.4.0 expects byte strings as Windows function
3081 # names, see the original PyPy issue [1] and the youtube-dl one [2].
3082 # 1. https://bitbucket.org/pypy/pypy/issues/2360/windows-ctypescdll-typeerror-function-name
3083 # 2. https://github.com/ytdl-org/youtube-dl/pull/4392
3084 def compat_ctypes_WINFUNCTYPE(*args, **kwargs):
3085 real = ctypes.WINFUNCTYPE(*args, **kwargs)
3086
3087 def resf(tpl, *args, **kwargs):
3088 funcname, dll = tpl
3089 return real((str(funcname), dll), *args, **kwargs)
3090
3091 return resf
3092 else:
3093 def compat_ctypes_WINFUNCTYPE(*args, **kwargs):
3094 return ctypes.WINFUNCTYPE(*args, **kwargs)
3095
3096
3097 __all__ = [
3098 'compat_HTMLParseError',
3099 'compat_HTMLParser',
3100 'compat_HTTPError',
3101 'compat_Struct',
3102 'compat_b64decode',
3103 'compat_basestring',
3104 'compat_chr',
3105 'compat_collections_abc',
3106 'compat_collections_chain_map',
3107 'compat_cookiejar',
3108 'compat_cookiejar_Cookie',
3109 'compat_cookies',
3110 'compat_cookies_SimpleCookie',
3111 'compat_ctypes_WINFUNCTYPE',
3112 'compat_etree_Element',
3113 'compat_etree_fromstring',
3114 'compat_etree_register_namespace',
3115 'compat_expanduser',
3116 'compat_filter',
3117 'compat_get_terminal_size',
3118 'compat_getenv',
3119 'compat_getpass',
3120 'compat_html_entities',
3121 'compat_html_entities_html5',
3122 'compat_http_client',
3123 'compat_http_server',
3124 'compat_input',
3125 'compat_integer_types',
3126 'compat_itertools_count',
3127 'compat_itertools_zip_longest',
3128 'compat_kwargs',
3129 'compat_map',
3130 'compat_numeric_types',
3131 'compat_ord',
3132 'compat_os_name',
3133 'compat_parse_qs',
3134 'compat_print',
3135 'compat_re_Pattern',
3136 'compat_realpath',
3137 'compat_setenv',
3138 'compat_shlex_quote',
3139 'compat_shlex_split',
3140 'compat_socket_create_connection',
3141 'compat_str',
3142 'compat_struct_pack',
3143 'compat_struct_unpack',
3144 'compat_subprocess_get_DEVNULL',
3145 'compat_tokenize_tokenize',
3146 'compat_urllib_error',
3147 'compat_urllib_parse',
3148 'compat_urllib_parse_unquote',
3149 'compat_urllib_parse_unquote_plus',
3150 'compat_urllib_parse_unquote_to_bytes',
3151 'compat_urllib_parse_urlencode',
3152 'compat_urllib_parse_urlparse',
3153 'compat_urllib_request',
3154 'compat_urllib_request_DataHandler',
3155 'compat_urllib_response',
3156 'compat_urlparse',
3157 'compat_urlretrieve',
3158 'compat_xml_parse_error',
3159 'compat_xpath',
3160 'compat_zip',
3161 'workaround_optparse_bug9161',
3162 ]
|