@qwickapps/react-framework 1.9.1 → 1.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +7 -4
  2. package/dist/components/Html.d.ts.map +1 -1
  3. package/dist/components/blocks/index.d.ts +0 -2
  4. package/dist/components/blocks/index.d.ts.map +1 -1
  5. package/dist/components/forms/FormField.d.ts +0 -2
  6. package/dist/components/forms/FormField.d.ts.map +1 -1
  7. package/dist/components/forms/FormSelect.d.ts +0 -2
  8. package/dist/components/forms/FormSelect.d.ts.map +1 -1
  9. package/dist/index.css +1 -1
  10. package/dist/index.esm.css +1 -1
  11. package/dist/index.esm.js +2104 -1589
  12. package/dist/index.js +2103 -1589
  13. package/dist/palettes/manifest.json +22 -22
  14. package/dist/palettes/{palette-boutique.1.9.1.css → palette-boutique.1.9.2.css} +29 -29
  15. package/dist/palettes/{palette-boutique.1.9.1.min.css → palette-boutique.1.9.2.min.css} +1 -1
  16. package/dist/palettes/palette-boutique.latest.css +29 -29
  17. package/dist/palettes/palette-boutique.latest.min.css +1 -1
  18. package/dist/schemas/FormFieldSchema.d.ts +0 -1
  19. package/dist/schemas/FormFieldSchema.d.ts.map +1 -1
  20. package/dist/schemas/FormSelectSchema.d.ts +0 -1
  21. package/dist/schemas/FormSelectSchema.d.ts.map +1 -1
  22. package/package.json +3 -3
  23. package/src/components/Html.tsx +1 -7
  24. package/src/components/Logo.tsx +1 -1
  25. package/src/components/QwickApp.css +2 -2
  26. package/src/components/Scaffold.css +0 -3
  27. package/src/components/blocks/index.ts +0 -2
  28. package/src/components/forms/FormField.tsx +0 -6
  29. package/src/components/forms/FormSelect.tsx +0 -6
  30. package/src/components/layout/GridCellWrapper.tsx +4 -4
  31. package/src/palettes/PaletteBoutique.css +29 -29
  32. package/src/schemas/FormFieldSchema.ts +0 -11
  33. package/src/schemas/FormSelectSchema.ts +0 -11
  34. package/src/schemas/transformers/ReactNodeTransformer.ts +1 -1
  35. package/dist/components/blocks/HeroSlideshow.d.ts +0 -54
  36. package/dist/components/blocks/HeroSlideshow.d.ts.map +0 -1
  37. package/src/components/blocks/HeroSlideshow.tsx +0 -156
  38. package/src/stories/HeroSlideshow.stories.tsx +0 -164
  39. /package/dist/palettes/{palette-autumn.1.9.1.css → palette-autumn.1.9.2.css} +0 -0
  40. /package/dist/palettes/{palette-autumn.1.9.1.min.css → palette-autumn.1.9.2.min.css} +0 -0
  41. /package/dist/palettes/{palette-cosmic.1.9.1.css → palette-cosmic.1.9.2.css} +0 -0
  42. /package/dist/palettes/{palette-cosmic.1.9.1.min.css → palette-cosmic.1.9.2.min.css} +0 -0
  43. /package/dist/palettes/{palette-default.1.9.1.css → palette-default.1.9.2.css} +0 -0
  44. /package/dist/palettes/{palette-default.1.9.1.min.css → palette-default.1.9.2.min.css} +0 -0
  45. /package/dist/palettes/{palette-ocean.1.9.1.css → palette-ocean.1.9.2.css} +0 -0
  46. /package/dist/palettes/{palette-ocean.1.9.1.min.css → palette-ocean.1.9.2.min.css} +0 -0
  47. /package/dist/palettes/{palette-spring.1.9.1.css → palette-spring.1.9.2.css} +0 -0
  48. /package/dist/palettes/{palette-spring.1.9.1.min.css → palette-spring.1.9.2.min.css} +0 -0
  49. /package/dist/palettes/{palette-winter.1.9.1.css → palette-winter.1.9.2.css} +0 -0
  50. /package/dist/palettes/{palette-winter.1.9.1.min.css → palette-winter.1.9.2.min.css} +0 -0
package/dist/index.js CHANGED
@@ -5769,7 +5769,7 @@ function LogoView({
5769
5769
  setCalculatedBadgePosition(badgePos);
5770
5770
  setSvgWidth(requiredWidth);
5771
5771
  }
5772
- }, [name, badge, badgeOffset, calculateBadgePosition, fontSize, height, parseNameParts]);
5772
+ }, [name, badge, badgeOffset, calculateBadgePosition, fontSize, height, parseNameParts, svgWidth]);
5773
5773
  // Determine CSS class for variant
5774
5774
  let variantClass = '';
5775
5775
  if (variant === 'high-contrast' || variant === 'monochrome' || variant === 'on-primary') {
@@ -6326,42 +6326,24 @@ function getAugmentedNamespace(n) {
6326
6326
  return a;
6327
6327
  }
6328
6328
 
6329
- var lib$5 = {};
6329
+ var commonjs = {};
6330
6330
 
6331
6331
  var Parser$4 = {};
6332
6332
 
6333
- var Tokenizer$1 = {};
6333
+ var Tokenizer$2 = {};
6334
6334
 
6335
- var decode = {};
6336
-
6337
- var decodeDataHtml = {};
6338
-
6339
- // Generated using scripts/write-decode-map.ts
6340
- Object.defineProperty(decodeDataHtml, "__esModule", { value: true });
6341
- decodeDataHtml.default = new Uint16Array(
6342
- // prettier-ignore
6343
- "\u1d41<\xd5\u0131\u028a\u049d\u057b\u05d0\u0675\u06de\u07a2\u07d6\u080f\u0a4a\u0a91\u0da1\u0e6d\u0f09\u0f26\u10ca\u1228\u12e1\u1415\u149d\u14c3\u14df\u1525\0\0\0\0\0\0\u156b\u16cd\u198d\u1c12\u1ddd\u1f7e\u2060\u21b0\u228d\u23c0\u23fb\u2442\u2824\u2912\u2d08\u2e48\u2fce\u3016\u32ba\u3639\u37ac\u38fe\u3a28\u3a71\u3ae0\u3b2e\u0800EMabcfglmnoprstu\\bfms\x7f\x84\x8b\x90\x95\x98\xa6\xb3\xb9\xc8\xcflig\u803b\xc6\u40c6P\u803b&\u4026cute\u803b\xc1\u40c1reve;\u4102\u0100iyx}rc\u803b\xc2\u40c2;\u4410r;\uc000\ud835\udd04rave\u803b\xc0\u40c0pha;\u4391acr;\u4100d;\u6a53\u0100gp\x9d\xa1on;\u4104f;\uc000\ud835\udd38plyFunction;\u6061ing\u803b\xc5\u40c5\u0100cs\xbe\xc3r;\uc000\ud835\udc9cign;\u6254ilde\u803b\xc3\u40c3ml\u803b\xc4\u40c4\u0400aceforsu\xe5\xfb\xfe\u0117\u011c\u0122\u0127\u012a\u0100cr\xea\xf2kslash;\u6216\u0176\xf6\xf8;\u6ae7ed;\u6306y;\u4411\u0180crt\u0105\u010b\u0114ause;\u6235noullis;\u612ca;\u4392r;\uc000\ud835\udd05pf;\uc000\ud835\udd39eve;\u42d8c\xf2\u0113mpeq;\u624e\u0700HOacdefhilorsu\u014d\u0151\u0156\u0180\u019e\u01a2\u01b5\u01b7\u01ba\u01dc\u0215\u0273\u0278\u027ecy;\u4427PY\u803b\xa9\u40a9\u0180cpy\u015d\u0162\u017aute;\u4106\u0100;i\u0167\u0168\u62d2talDifferentialD;\u6145leys;\u612d\u0200aeio\u0189\u018e\u0194\u0198ron;\u410cdil\u803b\xc7\u40c7rc;\u4108nint;\u6230ot;\u410a\u0100dn\u01a7\u01adilla;\u40b8terDot;\u40b7\xf2\u017fi;\u43a7rcle\u0200DMPT\u01c7\u01cb\u01d1\u01d6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01e2\u01f8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020foubleQuote;\u601duote;\u6019\u0200lnpu\u021e\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6a74\u0180git\u022f\u0236\u023aruent;\u6261nt;\u622fourIntegral;\u622e\u0100fr\u024c\u024e;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6a2fcr;\uc000\ud835\udc9ep\u0100;C\u0284\u0285\u62d3ap;\u624d\u0580DJSZacefios\u02a0\u02ac\u02b0\u02b4\u02b8\u02cb\u02d7\u02e1\u02e6\u0333\u048d\u0100;o\u0179\u02a5trahd;\u6911cy;\u4402cy;\u4405cy;\u440f\u0180grs\u02bf\u02c4\u02c7ger;\u6021r;\u61a1hv;\u6ae4\u0100ay\u02d0\u02d5ron;\u410e;\u4414l\u0100;t\u02dd\u02de\u6207a;\u4394r;\uc000\ud835\udd07\u0100af\u02eb\u0327\u0100cm\u02f0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031ccute;\u40b4o\u0174\u030b\u030d;\u42d9bleAcute;\u42ddrave;\u4060ilde;\u42dcond;\u62c4ferentialD;\u6146\u0470\u033d\0\0\0\u0342\u0354\0\u0405f;\uc000\ud835\udd3b\u0180;DE\u0348\u0349\u034d\u40a8ot;\u60dcqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03cf\u03e2\u03f8ontourIntegra\xec\u0239o\u0274\u0379\0\0\u037b\xbb\u0349nArrow;\u61d3\u0100eo\u0387\u03a4ft\u0180ART\u0390\u0396\u03a1rrow;\u61d0ightArrow;\u61d4e\xe5\u02cang\u0100LR\u03ab\u03c4eft\u0100AR\u03b3\u03b9rrow;\u67f8ightArrow;\u67faightArrow;\u67f9ight\u0100AT\u03d8\u03derrow;\u61d2ee;\u62a8p\u0241\u03e9\0\0\u03efrrow;\u61d1ownArrow;\u61d5erticalBar;\u6225n\u0300ABLRTa\u0412\u042a\u0430\u045e\u047f\u037crrow\u0180;BU\u041d\u041e\u0422\u6193ar;\u6913pArrow;\u61f5reve;\u4311eft\u02d2\u043a\0\u0446\0\u0450ightVector;\u6950eeVector;\u695eector\u0100;B\u0459\u045a\u61bdar;\u6956ight\u01d4\u0467\0\u0471eeVector;\u695fector\u0100;B\u047a\u047b\u61c1ar;\u6957ee\u0100;A\u0486\u0487\u62a4rrow;\u61a7\u0100ct\u0492\u0497r;\uc000\ud835\udc9frok;\u4110\u0800NTacdfglmopqstux\u04bd\u04c0\u04c4\u04cb\u04de\u04e2\u04e7\u04ee\u04f5\u0521\u052f\u0536\u0552\u055d\u0560\u0565G;\u414aH\u803b\xd0\u40d0cute\u803b\xc9\u40c9\u0180aiy\u04d2\u04d7\u04dcron;\u411arc\u803b\xca\u40ca;\u442dot;\u4116r;\uc000\ud835\udd08rave\u803b\xc8\u40c8ement;\u6208\u0100ap\u04fa\u04fecr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65fberySmallSquare;\u65ab\u0100gp\u0526\u052aon;\u4118f;\uc000\ud835\udd3csilon;\u4395u\u0100ai\u053c\u0549l\u0100;T\u0542\u0543\u6a75ilde;\u6242librium;\u61cc\u0100ci\u0557\u055ar;\u6130m;\u6a73a;\u4397ml\u803b\xcb\u40cb\u0100ip\u056a\u056fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058d\u05b2\u05ccy;\u4424r;\uc000\ud835\udd09lled\u0253\u0597\0\0\u05a3mallSquare;\u65fcerySmallSquare;\u65aa\u0370\u05ba\0\u05bf\0\0\u05c4f;\uc000\ud835\udd3dAll;\u6200riertrf;\u6131c\xf2\u05cb\u0600JTabcdfgorst\u05e8\u05ec\u05ef\u05fa\u0600\u0612\u0616\u061b\u061d\u0623\u066c\u0672cy;\u4403\u803b>\u403emma\u0100;d\u05f7\u05f8\u4393;\u43dcreve;\u411e\u0180eiy\u0607\u060c\u0610dil;\u4122rc;\u411c;\u4413ot;\u4120r;\uc000\ud835\udd0a;\u62d9pf;\uc000\ud835\udd3eeater\u0300EFGLST\u0635\u0644\u064e\u0656\u065b\u0666qual\u0100;L\u063e\u063f\u6265ess;\u62dbullEqual;\u6267reater;\u6aa2ess;\u6277lantEqual;\u6a7eilde;\u6273cr;\uc000\ud835\udca2;\u626b\u0400Aacfiosu\u0685\u068b\u0696\u069b\u069e\u06aa\u06be\u06caRDcy;\u442a\u0100ct\u0690\u0694ek;\u42c7;\u405eirc;\u4124r;\u610clbertSpace;\u610b\u01f0\u06af\0\u06b2f;\u610dizontalLine;\u6500\u0100ct\u06c3\u06c5\xf2\u06a9rok;\u4126mp\u0144\u06d0\u06d8ownHum\xf0\u012fqual;\u624f\u0700EJOacdfgmnostu\u06fa\u06fe\u0703\u0707\u070e\u071a\u071e\u0721\u0728\u0744\u0778\u078b\u078f\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803b\xcd\u40cd\u0100iy\u0713\u0718rc\u803b\xce\u40ce;\u4418ot;\u4130r;\u6111rave\u803b\xcc\u40cc\u0180;ap\u0720\u072f\u073f\u0100cg\u0734\u0737r;\u412ainaryI;\u6148lie\xf3\u03dd\u01f4\u0749\0\u0762\u0100;e\u074d\u074e\u622c\u0100gr\u0753\u0758ral;\u622bsection;\u62c2isible\u0100CT\u076c\u0772omma;\u6063imes;\u6062\u0180gpt\u077f\u0783\u0788on;\u412ef;\uc000\ud835\udd40a;\u4399cr;\u6110ilde;\u4128\u01eb\u079a\0\u079ecy;\u4406l\u803b\xcf\u40cf\u0280cfosu\u07ac\u07b7\u07bc\u07c2\u07d0\u0100iy\u07b1\u07b5rc;\u4134;\u4419r;\uc000\ud835\udd0dpf;\uc000\ud835\udd41\u01e3\u07c7\0\u07ccr;\uc000\ud835\udca5rcy;\u4408kcy;\u4404\u0380HJacfos\u07e4\u07e8\u07ec\u07f1\u07fd\u0802\u0808cy;\u4425cy;\u440cppa;\u439a\u0100ey\u07f6\u07fbdil;\u4136;\u441ar;\uc000\ud835\udd0epf;\uc000\ud835\udd42cr;\uc000\ud835\udca6\u0580JTaceflmost\u0825\u0829\u082c\u0850\u0863\u09b3\u09b8\u09c7\u09cd\u0a37\u0a47cy;\u4409\u803b<\u403c\u0280cmnpr\u0837\u083c\u0841\u0844\u084dute;\u4139bda;\u439bg;\u67ealacetrf;\u6112r;\u619e\u0180aey\u0857\u085c\u0861ron;\u413ddil;\u413b;\u441b\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087e\u08a9\u08b1\u08e0\u08e6\u08fc\u092f\u095b\u0390\u096a\u0100nr\u0883\u088fgleBracket;\u67e8row\u0180;BR\u0899\u089a\u089e\u6190ar;\u61e4ightArrow;\u61c6eiling;\u6308o\u01f5\u08b7\0\u08c3bleBracket;\u67e6n\u01d4\u08c8\0\u08d2eeVector;\u6961ector\u0100;B\u08db\u08dc\u61c3ar;\u6959loor;\u630aight\u0100AV\u08ef\u08f5rrow;\u6194ector;\u694e\u0100er\u0901\u0917e\u0180;AV\u0909\u090a\u0910\u62a3rrow;\u61a4ector;\u695aiangle\u0180;BE\u0924\u0925\u0929\u62b2ar;\u69cfqual;\u62b4p\u0180DTV\u0937\u0942\u094cownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61bfar;\u6958ector\u0100;B\u0965\u0966\u61bcar;\u6952ight\xe1\u039cs\u0300EFGLST\u097e\u098b\u0995\u099d\u09a2\u09adqualGreater;\u62daullEqual;\u6266reater;\u6276ess;\u6aa1lantEqual;\u6a7dilde;\u6272r;\uc000\ud835\udd0f\u0100;e\u09bd\u09be\u62d8ftarrow;\u61daidot;\u413f\u0180npw\u09d4\u0a16\u0a1bg\u0200LRlr\u09de\u09f7\u0a02\u0a10eft\u0100AR\u09e6\u09ecrrow;\u67f5ightArrow;\u67f7ightArrow;\u67f6eft\u0100ar\u03b3\u0a0aight\xe1\u03bfight\xe1\u03caf;\uc000\ud835\udd43er\u0100LR\u0a22\u0a2ceftArrow;\u6199ightArrow;\u6198\u0180cht\u0a3e\u0a40\u0a42\xf2\u084c;\u61b0rok;\u4141;\u626a\u0400acefiosu\u0a5a\u0a5d\u0a60\u0a77\u0a7c\u0a85\u0a8b\u0a8ep;\u6905y;\u441c\u0100dl\u0a65\u0a6fiumSpace;\u605flintrf;\u6133r;\uc000\ud835\udd10nusPlus;\u6213pf;\uc000\ud835\udd44c\xf2\u0a76;\u439c\u0480Jacefostu\u0aa3\u0aa7\u0aad\u0ac0\u0b14\u0b19\u0d91\u0d97\u0d9ecy;\u440acute;\u4143\u0180aey\u0ab4\u0ab9\u0aberon;\u4147dil;\u4145;\u441d\u0180gsw\u0ac7\u0af0\u0b0eative\u0180MTV\u0ad3\u0adf\u0ae8ediumSpace;\u600bhi\u0100cn\u0ae6\u0ad8\xeb\u0ad9eryThi\xee\u0ad9ted\u0100GL\u0af8\u0b06reaterGreate\xf2\u0673essLes\xf3\u0a48Line;\u400ar;\uc000\ud835\udd11\u0200Bnpt\u0b22\u0b28\u0b37\u0b3areak;\u6060BreakingSpace;\u40a0f;\u6115\u0680;CDEGHLNPRSTV\u0b55\u0b56\u0b6a\u0b7c\u0ba1\u0beb\u0c04\u0c5e\u0c84\u0ca6\u0cd8\u0d61\u0d85\u6aec\u0100ou\u0b5b\u0b64ngruent;\u6262pCap;\u626doubleVerticalBar;\u6226\u0180lqx\u0b83\u0b8a\u0b9bement;\u6209ual\u0100;T\u0b92\u0b93\u6260ilde;\uc000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0bb6\u0bb7\u0bbd\u0bc9\u0bd3\u0bd8\u0be5\u626fqual;\u6271ullEqual;\uc000\u2267\u0338reater;\uc000\u226b\u0338ess;\u6279lantEqual;\uc000\u2a7e\u0338ilde;\u6275ump\u0144\u0bf2\u0bfdownHump;\uc000\u224e\u0338qual;\uc000\u224f\u0338e\u0100fs\u0c0a\u0c27tTriangle\u0180;BE\u0c1a\u0c1b\u0c21\u62eaar;\uc000\u29cf\u0338qual;\u62ecs\u0300;EGLST\u0c35\u0c36\u0c3c\u0c44\u0c4b\u0c58\u626equal;\u6270reater;\u6278ess;\uc000\u226a\u0338lantEqual;\uc000\u2a7d\u0338ilde;\u6274ested\u0100GL\u0c68\u0c79reaterGreater;\uc000\u2aa2\u0338essLess;\uc000\u2aa1\u0338recedes\u0180;ES\u0c92\u0c93\u0c9b\u6280qual;\uc000\u2aaf\u0338lantEqual;\u62e0\u0100ei\u0cab\u0cb9verseElement;\u620cghtTriangle\u0180;BE\u0ccb\u0ccc\u0cd2\u62ebar;\uc000\u29d0\u0338qual;\u62ed\u0100qu\u0cdd\u0d0cuareSu\u0100bp\u0ce8\u0cf9set\u0100;E\u0cf0\u0cf3\uc000\u228f\u0338qual;\u62e2erset\u0100;E\u0d03\u0d06\uc000\u2290\u0338qual;\u62e3\u0180bcp\u0d13\u0d24\u0d4eset\u0100;E\u0d1b\u0d1e\uc000\u2282\u20d2qual;\u6288ceeds\u0200;EST\u0d32\u0d33\u0d3b\u0d46\u6281qual;\uc000\u2ab0\u0338lantEqual;\u62e1ilde;\uc000\u227f\u0338erset\u0100;E\u0d58\u0d5b\uc000\u2283\u20d2qual;\u6289ilde\u0200;EFT\u0d6e\u0d6f\u0d75\u0d7f\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uc000\ud835\udca9ilde\u803b\xd1\u40d1;\u439d\u0700Eacdfgmoprstuv\u0dbd\u0dc2\u0dc9\u0dd5\u0ddb\u0de0\u0de7\u0dfc\u0e02\u0e20\u0e22\u0e32\u0e3f\u0e44lig;\u4152cute\u803b\xd3\u40d3\u0100iy\u0dce\u0dd3rc\u803b\xd4\u40d4;\u441eblac;\u4150r;\uc000\ud835\udd12rave\u803b\xd2\u40d2\u0180aei\u0dee\u0df2\u0df6cr;\u414cga;\u43a9cron;\u439fpf;\uc000\ud835\udd46enCurly\u0100DQ\u0e0e\u0e1aoubleQuote;\u601cuote;\u6018;\u6a54\u0100cl\u0e27\u0e2cr;\uc000\ud835\udcaaash\u803b\xd8\u40d8i\u016c\u0e37\u0e3cde\u803b\xd5\u40d5es;\u6a37ml\u803b\xd6\u40d6er\u0100BP\u0e4b\u0e60\u0100ar\u0e50\u0e53r;\u603eac\u0100ek\u0e5a\u0e5c;\u63deet;\u63b4arenthesis;\u63dc\u0480acfhilors\u0e7f\u0e87\u0e8a\u0e8f\u0e92\u0e94\u0e9d\u0eb0\u0efcrtialD;\u6202y;\u441fr;\uc000\ud835\udd13i;\u43a6;\u43a0usMinus;\u40b1\u0100ip\u0ea2\u0eadncareplan\xe5\u069df;\u6119\u0200;eio\u0eb9\u0eba\u0ee0\u0ee4\u6abbcedes\u0200;EST\u0ec8\u0ec9\u0ecf\u0eda\u627aqual;\u6aaflantEqual;\u627cilde;\u627eme;\u6033\u0100dp\u0ee9\u0eeeuct;\u620fortion\u0100;a\u0225\u0ef9l;\u621d\u0100ci\u0f01\u0f06r;\uc000\ud835\udcab;\u43a8\u0200Ufos\u0f11\u0f16\u0f1b\u0f1fOT\u803b\"\u4022r;\uc000\ud835\udd14pf;\u611acr;\uc000\ud835\udcac\u0600BEacefhiorsu\u0f3e\u0f43\u0f47\u0f60\u0f73\u0fa7\u0faa\u0fad\u1096\u10a9\u10b4\u10bearr;\u6910G\u803b\xae\u40ae\u0180cnr\u0f4e\u0f53\u0f56ute;\u4154g;\u67ebr\u0100;t\u0f5c\u0f5d\u61a0l;\u6916\u0180aey\u0f67\u0f6c\u0f71ron;\u4158dil;\u4156;\u4420\u0100;v\u0f78\u0f79\u611cerse\u0100EU\u0f82\u0f99\u0100lq\u0f87\u0f8eement;\u620builibrium;\u61cbpEquilibrium;\u696fr\xbb\u0f79o;\u43a1ght\u0400ACDFTUVa\u0fc1\u0feb\u0ff3\u1022\u1028\u105b\u1087\u03d8\u0100nr\u0fc6\u0fd2gleBracket;\u67e9row\u0180;BL\u0fdc\u0fdd\u0fe1\u6192ar;\u61e5eftArrow;\u61c4eiling;\u6309o\u01f5\u0ff9\0\u1005bleBracket;\u67e7n\u01d4\u100a\0\u1014eeVector;\u695dector\u0100;B\u101d\u101e\u61c2ar;\u6955loor;\u630b\u0100er\u102d\u1043e\u0180;AV\u1035\u1036\u103c\u62a2rrow;\u61a6ector;\u695biangle\u0180;BE\u1050\u1051\u1055\u62b3ar;\u69d0qual;\u62b5p\u0180DTV\u1063\u106e\u1078ownVector;\u694feeVector;\u695cector\u0100;B\u1082\u1083\u61bear;\u6954ector\u0100;B\u1091\u1092\u61c0ar;\u6953\u0100pu\u109b\u109ef;\u611dndImplies;\u6970ightarrow;\u61db\u0100ch\u10b9\u10bcr;\u611b;\u61b1leDelayed;\u69f4\u0680HOacfhimoqstu\u10e4\u10f1\u10f7\u10fd\u1119\u111e\u1151\u1156\u1161\u1167\u11b5\u11bb\u11bf\u0100Cc\u10e9\u10eeHcy;\u4429y;\u4428FTcy;\u442ccute;\u415a\u0280;aeiy\u1108\u1109\u110e\u1113\u1117\u6abcron;\u4160dil;\u415erc;\u415c;\u4421r;\uc000\ud835\udd16ort\u0200DLRU\u112a\u1134\u113e\u1149ownArrow\xbb\u041eeftArrow\xbb\u089aightArrow\xbb\u0fddpArrow;\u6191gma;\u43a3allCircle;\u6218pf;\uc000\ud835\udd4a\u0272\u116d\0\0\u1170t;\u621aare\u0200;ISU\u117b\u117c\u1189\u11af\u65a1ntersection;\u6293u\u0100bp\u118f\u119eset\u0100;E\u1197\u1198\u628fqual;\u6291erset\u0100;E\u11a8\u11a9\u6290qual;\u6292nion;\u6294cr;\uc000\ud835\udcaear;\u62c6\u0200bcmp\u11c8\u11db\u1209\u120b\u0100;s\u11cd\u11ce\u62d0et\u0100;E\u11cd\u11d5qual;\u6286\u0100ch\u11e0\u1205eeds\u0200;EST\u11ed\u11ee\u11f4\u11ff\u627bqual;\u6ab0lantEqual;\u627dilde;\u627fTh\xe1\u0f8c;\u6211\u0180;es\u1212\u1213\u1223\u62d1rset\u0100;E\u121c\u121d\u6283qual;\u6287et\xbb\u1213\u0580HRSacfhiors\u123e\u1244\u1249\u1255\u125e\u1271\u1276\u129f\u12c2\u12c8\u12d1ORN\u803b\xde\u40deADE;\u6122\u0100Hc\u124e\u1252cy;\u440by;\u4426\u0100bu\u125a\u125c;\u4009;\u43a4\u0180aey\u1265\u126a\u126fron;\u4164dil;\u4162;\u4422r;\uc000\ud835\udd17\u0100ei\u127b\u1289\u01f2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128e\u1298kSpace;\uc000\u205f\u200aSpace;\u6009lde\u0200;EFT\u12ab\u12ac\u12b2\u12bc\u623cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uc000\ud835\udd4bipleDot;\u60db\u0100ct\u12d6\u12dbr;\uc000\ud835\udcafrok;\u4166\u0ae1\u12f7\u130e\u131a\u1326\0\u132c\u1331\0\0\0\0\0\u1338\u133d\u1377\u1385\0\u13ff\u1404\u140a\u1410\u0100cr\u12fb\u1301ute\u803b\xda\u40dar\u0100;o\u1307\u1308\u619fcir;\u6949r\u01e3\u1313\0\u1316y;\u440eve;\u416c\u0100iy\u131e\u1323rc\u803b\xdb\u40db;\u4423blac;\u4170r;\uc000\ud835\udd18rave\u803b\xd9\u40d9acr;\u416a\u0100di\u1341\u1369er\u0100BP\u1348\u135d\u0100ar\u134d\u1350r;\u405fac\u0100ek\u1357\u1359;\u63dfet;\u63b5arenthesis;\u63ddon\u0100;P\u1370\u1371\u62c3lus;\u628e\u0100gp\u137b\u137fon;\u4172f;\uc000\ud835\udd4c\u0400ADETadps\u1395\u13ae\u13b8\u13c4\u03e8\u13d2\u13d7\u13f3rrow\u0180;BD\u1150\u13a0\u13a4ar;\u6912ownArrow;\u61c5ownArrow;\u6195quilibrium;\u696eee\u0100;A\u13cb\u13cc\u62a5rrow;\u61a5own\xe1\u03f3er\u0100LR\u13de\u13e8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13f9\u13fa\u43d2on;\u43a5ing;\u416ecr;\uc000\ud835\udcb0ilde;\u4168ml\u803b\xdc\u40dc\u0480Dbcdefosv\u1427\u142c\u1430\u1433\u143e\u1485\u148a\u1490\u1496ash;\u62abar;\u6aeby;\u4412ash\u0100;l\u143b\u143c\u62a9;\u6ae6\u0100er\u1443\u1445;\u62c1\u0180bty\u144c\u1450\u147aar;\u6016\u0100;i\u144f\u1455cal\u0200BLST\u1461\u1465\u146a\u1474ar;\u6223ine;\u407ceparator;\u6758ilde;\u6240ThinSpace;\u600ar;\uc000\ud835\udd19pf;\uc000\ud835\udd4dcr;\uc000\ud835\udcb1dash;\u62aa\u0280cefos\u14a7\u14ac\u14b1\u14b6\u14bcirc;\u4174dge;\u62c0r;\uc000\ud835\udd1apf;\uc000\ud835\udd4ecr;\uc000\ud835\udcb2\u0200fios\u14cb\u14d0\u14d2\u14d8r;\uc000\ud835\udd1b;\u439epf;\uc000\ud835\udd4fcr;\uc000\ud835\udcb3\u0480AIUacfosu\u14f1\u14f5\u14f9\u14fd\u1504\u150f\u1514\u151a\u1520cy;\u442fcy;\u4407cy;\u442ecute\u803b\xdd\u40dd\u0100iy\u1509\u150drc;\u4176;\u442br;\uc000\ud835\udd1cpf;\uc000\ud835\udd50cr;\uc000\ud835\udcb4ml;\u4178\u0400Hacdefos\u1535\u1539\u153f\u154b\u154f\u155d\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417d;\u4417ot;\u417b\u01f2\u1554\0\u155boWidt\xe8\u0ad9a;\u4396r;\u6128pf;\u6124cr;\uc000\ud835\udcb5\u0be1\u1583\u158a\u1590\0\u15b0\u15b6\u15bf\0\0\0\0\u15c6\u15db\u15eb\u165f\u166d\0\u1695\u169b\u16b2\u16b9\0\u16becute\u803b\xe1\u40e1reve;\u4103\u0300;Ediuy\u159c\u159d\u15a1\u15a3\u15a8\u15ad\u623e;\uc000\u223e\u0333;\u623frc\u803b\xe2\u40e2te\u80bb\xb4\u0306;\u4430lig\u803b\xe6\u40e6\u0100;r\xb2\u15ba;\uc000\ud835\udd1erave\u803b\xe0\u40e0\u0100ep\u15ca\u15d6\u0100fp\u15cf\u15d4sym;\u6135\xe8\u15d3ha;\u43b1\u0100ap\u15dfc\u0100cl\u15e4\u15e7r;\u4101g;\u6a3f\u0264\u15f0\0\0\u160a\u0280;adsv\u15fa\u15fb\u15ff\u1601\u1607\u6227nd;\u6a55;\u6a5clope;\u6a58;\u6a5a\u0380;elmrsz\u1618\u1619\u161b\u161e\u163f\u164f\u1659\u6220;\u69a4e\xbb\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163a\u163c\u163e;\u69a8;\u69a9;\u69aa;\u69ab;\u69ac;\u69ad;\u69ae;\u69aft\u0100;v\u1645\u1646\u621fb\u0100;d\u164c\u164d\u62be;\u699d\u0100pt\u1654\u1657h;\u6222\xbb\xb9arr;\u637c\u0100gp\u1663\u1667on;\u4105f;\uc000\ud835\udd52\u0380;Eaeiop\u12c1\u167b\u167d\u1682\u1684\u1687\u168a;\u6a70cir;\u6a6f;\u624ad;\u624bs;\u4027rox\u0100;e\u12c1\u1692\xf1\u1683ing\u803b\xe5\u40e5\u0180cty\u16a1\u16a6\u16a8r;\uc000\ud835\udcb6;\u402amp\u0100;e\u12c1\u16af\xf1\u0288ilde\u803b\xe3\u40e3ml\u803b\xe4\u40e4\u0100ci\u16c2\u16c8onin\xf4\u0272nt;\u6a11\u0800Nabcdefiklnoprsu\u16ed\u16f1\u1730\u173c\u1743\u1748\u1778\u177d\u17e0\u17e6\u1839\u1850\u170d\u193d\u1948\u1970ot;\u6aed\u0100cr\u16f6\u171ek\u0200ceps\u1700\u1705\u170d\u1713ong;\u624cpsilon;\u43f6rime;\u6035im\u0100;e\u171a\u171b\u623dq;\u62cd\u0176\u1722\u1726ee;\u62bded\u0100;g\u172c\u172d\u6305e\xbb\u172drk\u0100;t\u135c\u1737brk;\u63b6\u0100oy\u1701\u1741;\u4431quo;\u601e\u0280cmprt\u1753\u175b\u1761\u1764\u1768aus\u0100;e\u010a\u0109ptyv;\u69b0s\xe9\u170cno\xf5\u0113\u0180ahw\u176f\u1771\u1773;\u43b2;\u6136een;\u626cr;\uc000\ud835\udd1fg\u0380costuvw\u178d\u179d\u17b3\u17c1\u17d5\u17db\u17de\u0180aiu\u1794\u1796\u179a\xf0\u0760rc;\u65efp\xbb\u1371\u0180dpt\u17a4\u17a8\u17adot;\u6a00lus;\u6a01imes;\u6a02\u0271\u17b9\0\0\u17becup;\u6a06ar;\u6605riangle\u0100du\u17cd\u17d2own;\u65bdp;\u65b3plus;\u6a04e\xe5\u1444\xe5\u14adarow;\u690d\u0180ako\u17ed\u1826\u1835\u0100cn\u17f2\u1823k\u0180lst\u17fa\u05ab\u1802ozenge;\u69ebriangle\u0200;dlr\u1812\u1813\u1818\u181d\u65b4own;\u65beeft;\u65c2ight;\u65b8k;\u6423\u01b1\u182b\0\u1833\u01b2\u182f\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183e\u184d\u0100;q\u1843\u1846\uc000=\u20e5uiv;\uc000\u2261\u20e5t;\u6310\u0200ptwx\u1859\u185e\u1867\u186cf;\uc000\ud835\udd53\u0100;t\u13cb\u1863om\xbb\u13cctie;\u62c8\u0600DHUVbdhmptuv\u1885\u1896\u18aa\u18bb\u18d7\u18db\u18ec\u18ff\u1905\u190a\u1910\u1921\u0200LRlr\u188e\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18a1\u18a2\u18a4\u18a6\u18a8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18b3\u18b5\u18b7\u18b9;\u655d;\u655a;\u655c;\u6559\u0380;HLRhlr\u18ca\u18cb\u18cd\u18cf\u18d1\u18d3\u18d5\u6551;\u656c;\u6563;\u6560;\u656b;\u6562;\u655fox;\u69c9\u0200LRlr\u18e4\u18e6\u18e8\u18ea;\u6555;\u6552;\u6510;\u650c\u0280;DUdu\u06bd\u18f7\u18f9\u18fb\u18fd;\u6565;\u6568;\u652c;\u6534inus;\u629flus;\u629eimes;\u62a0\u0200LRlr\u1919\u191b\u191d\u191f;\u655b;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193b\u6502;\u656a;\u6561;\u655e;\u653c;\u6524;\u651c\u0100ev\u0123\u1942bar\u803b\xa6\u40a6\u0200ceio\u1951\u1956\u195a\u1960r;\uc000\ud835\udcb7mi;\u604fm\u0100;e\u171a\u171cl\u0180;bh\u1968\u1969\u196b\u405c;\u69c5sub;\u67c8\u016c\u1974\u197el\u0100;e\u1979\u197a\u6022t\xbb\u197ap\u0180;Ee\u012f\u1985\u1987;\u6aae\u0100;q\u06dc\u06db\u0ce1\u19a7\0\u19e8\u1a11\u1a15\u1a32\0\u1a37\u1a50\0\0\u1ab4\0\0\u1ac1\0\0\u1b21\u1b2e\u1b4d\u1b52\0\u1bfd\0\u1c0c\u0180cpr\u19ad\u19b2\u19ddute;\u4107\u0300;abcds\u19bf\u19c0\u19c4\u19ca\u19d5\u19d9\u6229nd;\u6a44rcup;\u6a49\u0100au\u19cf\u19d2p;\u6a4bp;\u6a47ot;\u6a40;\uc000\u2229\ufe00\u0100eo\u19e2\u19e5t;\u6041\xee\u0693\u0200aeiu\u19f0\u19fb\u1a01\u1a05\u01f0\u19f5\0\u19f8s;\u6a4don;\u410ddil\u803b\xe7\u40e7rc;\u4109ps\u0100;s\u1a0c\u1a0d\u6a4cm;\u6a50ot;\u410b\u0180dmn\u1a1b\u1a20\u1a26il\u80bb\xb8\u01adptyv;\u69b2t\u8100\xa2;e\u1a2d\u1a2e\u40a2r\xe4\u01b2r;\uc000\ud835\udd20\u0180cei\u1a3d\u1a40\u1a4dy;\u4447ck\u0100;m\u1a47\u1a48\u6713ark\xbb\u1a48;\u43c7r\u0380;Ecefms\u1a5f\u1a60\u1a62\u1a6b\u1aa4\u1aaa\u1aae\u65cb;\u69c3\u0180;el\u1a69\u1a6a\u1a6d\u42c6q;\u6257e\u0261\u1a74\0\0\u1a88rrow\u0100lr\u1a7c\u1a81eft;\u61baight;\u61bb\u0280RSacd\u1a92\u1a94\u1a96\u1a9a\u1a9f\xbb\u0f47;\u64c8st;\u629birc;\u629aash;\u629dnint;\u6a10id;\u6aefcir;\u69c2ubs\u0100;u\u1abb\u1abc\u6663it\xbb\u1abc\u02ec\u1ac7\u1ad4\u1afa\0\u1b0aon\u0100;e\u1acd\u1ace\u403a\u0100;q\xc7\xc6\u026d\u1ad9\0\0\u1ae2a\u0100;t\u1ade\u1adf\u402c;\u4040\u0180;fl\u1ae8\u1ae9\u1aeb\u6201\xee\u1160e\u0100mx\u1af1\u1af6ent\xbb\u1ae9e\xf3\u024d\u01e7\u1afe\0\u1b07\u0100;d\u12bb\u1b02ot;\u6a6dn\xf4\u0246\u0180fry\u1b10\u1b14\u1b17;\uc000\ud835\udd54o\xe4\u0254\u8100\xa9;s\u0155\u1b1dr;\u6117\u0100ao\u1b25\u1b29rr;\u61b5ss;\u6717\u0100cu\u1b32\u1b37r;\uc000\ud835\udcb8\u0100bp\u1b3c\u1b44\u0100;e\u1b41\u1b42\u6acf;\u6ad1\u0100;e\u1b49\u1b4a\u6ad0;\u6ad2dot;\u62ef\u0380delprvw\u1b60\u1b6c\u1b77\u1b82\u1bac\u1bd4\u1bf9arr\u0100lr\u1b68\u1b6a;\u6938;\u6935\u0270\u1b72\0\0\u1b75r;\u62dec;\u62dfarr\u0100;p\u1b7f\u1b80\u61b6;\u693d\u0300;bcdos\u1b8f\u1b90\u1b96\u1ba1\u1ba5\u1ba8\u622arcap;\u6a48\u0100au\u1b9b\u1b9ep;\u6a46p;\u6a4aot;\u628dr;\u6a45;\uc000\u222a\ufe00\u0200alrv\u1bb5\u1bbf\u1bde\u1be3rr\u0100;m\u1bbc\u1bbd\u61b7;\u693cy\u0180evw\u1bc7\u1bd4\u1bd8q\u0270\u1bce\0\0\u1bd2re\xe3\u1b73u\xe3\u1b75ee;\u62ceedge;\u62cfen\u803b\xa4\u40a4earrow\u0100lr\u1bee\u1bf3eft\xbb\u1b80ight\xbb\u1bbde\xe4\u1bdd\u0100ci\u1c01\u1c07onin\xf4\u01f7nt;\u6231lcty;\u632d\u0980AHabcdefhijlorstuwz\u1c38\u1c3b\u1c3f\u1c5d\u1c69\u1c75\u1c8a\u1c9e\u1cac\u1cb7\u1cfb\u1cff\u1d0d\u1d7b\u1d91\u1dab\u1dbb\u1dc6\u1dcdr\xf2\u0381ar;\u6965\u0200glrs\u1c48\u1c4d\u1c52\u1c54ger;\u6020eth;\u6138\xf2\u1133h\u0100;v\u1c5a\u1c5b\u6010\xbb\u090a\u016b\u1c61\u1c67arow;\u690fa\xe3\u0315\u0100ay\u1c6e\u1c73ron;\u410f;\u4434\u0180;ao\u0332\u1c7c\u1c84\u0100gr\u02bf\u1c81r;\u61catseq;\u6a77\u0180glm\u1c91\u1c94\u1c98\u803b\xb0\u40b0ta;\u43b4ptyv;\u69b1\u0100ir\u1ca3\u1ca8sht;\u697f;\uc000\ud835\udd21ar\u0100lr\u1cb3\u1cb5\xbb\u08dc\xbb\u101e\u0280aegsv\u1cc2\u0378\u1cd6\u1cdc\u1ce0m\u0180;os\u0326\u1cca\u1cd4nd\u0100;s\u0326\u1cd1uit;\u6666amma;\u43ddin;\u62f2\u0180;io\u1ce7\u1ce8\u1cf8\u40f7de\u8100\xf7;o\u1ce7\u1cf0ntimes;\u62c7n\xf8\u1cf7cy;\u4452c\u026f\u1d06\0\0\u1d0arn;\u631eop;\u630d\u0280lptuw\u1d18\u1d1d\u1d22\u1d49\u1d55lar;\u4024f;\uc000\ud835\udd55\u0280;emps\u030b\u1d2d\u1d37\u1d3d\u1d42q\u0100;d\u0352\u1d33ot;\u6251inus;\u6238lus;\u6214quare;\u62a1blebarwedg\xe5\xfan\u0180adh\u112e\u1d5d\u1d67ownarrow\xf3\u1c83arpoon\u0100lr\u1d72\u1d76ef\xf4\u1cb4igh\xf4\u1cb6\u0162\u1d7f\u1d85karo\xf7\u0f42\u026f\u1d8a\0\0\u1d8ern;\u631fop;\u630c\u0180cot\u1d98\u1da3\u1da6\u0100ry\u1d9d\u1da1;\uc000\ud835\udcb9;\u4455l;\u69f6rok;\u4111\u0100dr\u1db0\u1db4ot;\u62f1i\u0100;f\u1dba\u1816\u65bf\u0100ah\u1dc0\u1dc3r\xf2\u0429a\xf2\u0fa6angle;\u69a6\u0100ci\u1dd2\u1dd5y;\u445fgrarr;\u67ff\u0900Dacdefglmnopqrstux\u1e01\u1e09\u1e19\u1e38\u0578\u1e3c\u1e49\u1e61\u1e7e\u1ea5\u1eaf\u1ebd\u1ee1\u1f2a\u1f37\u1f44\u1f4e\u1f5a\u0100Do\u1e06\u1d34o\xf4\u1c89\u0100cs\u1e0e\u1e14ute\u803b\xe9\u40e9ter;\u6a6e\u0200aioy\u1e22\u1e27\u1e31\u1e36ron;\u411br\u0100;c\u1e2d\u1e2e\u6256\u803b\xea\u40ealon;\u6255;\u444dot;\u4117\u0100Dr\u1e41\u1e45ot;\u6252;\uc000\ud835\udd22\u0180;rs\u1e50\u1e51\u1e57\u6a9aave\u803b\xe8\u40e8\u0100;d\u1e5c\u1e5d\u6a96ot;\u6a98\u0200;ils\u1e6a\u1e6b\u1e72\u1e74\u6a99nters;\u63e7;\u6113\u0100;d\u1e79\u1e7a\u6a95ot;\u6a97\u0180aps\u1e85\u1e89\u1e97cr;\u4113ty\u0180;sv\u1e92\u1e93\u1e95\u6205et\xbb\u1e93p\u01001;\u1e9d\u1ea4\u0133\u1ea1\u1ea3;\u6004;\u6005\u6003\u0100gs\u1eaa\u1eac;\u414bp;\u6002\u0100gp\u1eb4\u1eb8on;\u4119f;\uc000\ud835\udd56\u0180als\u1ec4\u1ece\u1ed2r\u0100;s\u1eca\u1ecb\u62d5l;\u69e3us;\u6a71i\u0180;lv\u1eda\u1edb\u1edf\u43b5on\xbb\u1edb;\u43f5\u0200csuv\u1eea\u1ef3\u1f0b\u1f23\u0100io\u1eef\u1e31rc\xbb\u1e2e\u0269\u1ef9\0\0\u1efb\xed\u0548ant\u0100gl\u1f02\u1f06tr\xbb\u1e5dess\xbb\u1e7a\u0180aei\u1f12\u1f16\u1f1als;\u403dst;\u625fv\u0100;D\u0235\u1f20D;\u6a78parsl;\u69e5\u0100Da\u1f2f\u1f33ot;\u6253rr;\u6971\u0180cdi\u1f3e\u1f41\u1ef8r;\u612fo\xf4\u0352\u0100ah\u1f49\u1f4b;\u43b7\u803b\xf0\u40f0\u0100mr\u1f53\u1f57l\u803b\xeb\u40ebo;\u60ac\u0180cip\u1f61\u1f64\u1f67l;\u4021s\xf4\u056e\u0100eo\u1f6c\u1f74ctatio\xee\u0559nential\xe5\u0579\u09e1\u1f92\0\u1f9e\0\u1fa1\u1fa7\0\0\u1fc6\u1fcc\0\u1fd3\0\u1fe6\u1fea\u2000\0\u2008\u205allingdotse\xf1\u1e44y;\u4444male;\u6640\u0180ilr\u1fad\u1fb3\u1fc1lig;\u8000\ufb03\u0269\u1fb9\0\0\u1fbdg;\u8000\ufb00ig;\u8000\ufb04;\uc000\ud835\udd23lig;\u8000\ufb01lig;\uc000fj\u0180alt\u1fd9\u1fdc\u1fe1t;\u666dig;\u8000\ufb02ns;\u65b1of;\u4192\u01f0\u1fee\0\u1ff3f;\uc000\ud835\udd57\u0100ak\u05bf\u1ff7\u0100;v\u1ffc\u1ffd\u62d4;\u6ad9artint;\u6a0d\u0100ao\u200c\u2055\u0100cs\u2011\u2052\u03b1\u201a\u2030\u2038\u2045\u2048\0\u2050\u03b2\u2022\u2025\u2027\u202a\u202c\0\u202e\u803b\xbd\u40bd;\u6153\u803b\xbc\u40bc;\u6155;\u6159;\u615b\u01b3\u2034\0\u2036;\u6154;\u6156\u02b4\u203e\u2041\0\0\u2043\u803b\xbe\u40be;\u6157;\u615c5;\u6158\u01b6\u204c\0\u204e;\u615a;\u615d8;\u615el;\u6044wn;\u6322cr;\uc000\ud835\udcbb\u0880Eabcdefgijlnorstv\u2082\u2089\u209f\u20a5\u20b0\u20b4\u20f0\u20f5\u20fa\u20ff\u2103\u2112\u2138\u0317\u213e\u2152\u219e\u0100;l\u064d\u2087;\u6a8c\u0180cmp\u2090\u2095\u209dute;\u41f5ma\u0100;d\u209c\u1cda\u43b3;\u6a86reve;\u411f\u0100iy\u20aa\u20aerc;\u411d;\u4433ot;\u4121\u0200;lqs\u063e\u0642\u20bd\u20c9\u0180;qs\u063e\u064c\u20c4lan\xf4\u0665\u0200;cdl\u0665\u20d2\u20d5\u20e5c;\u6aa9ot\u0100;o\u20dc\u20dd\u6a80\u0100;l\u20e2\u20e3\u6a82;\u6a84\u0100;e\u20ea\u20ed\uc000\u22db\ufe00s;\u6a94r;\uc000\ud835\udd24\u0100;g\u0673\u061bmel;\u6137cy;\u4453\u0200;Eaj\u065a\u210c\u210e\u2110;\u6a92;\u6aa5;\u6aa4\u0200Eaes\u211b\u211d\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6a8arox\xbb\u2124\u0100;q\u212e\u212f\u6a88\u0100;q\u212e\u211bim;\u62e7pf;\uc000\ud835\udd58\u0100ci\u2143\u2146r;\u610am\u0180;el\u066b\u214e\u2150;\u6a8e;\u6a90\u8300>;cdlqr\u05ee\u2160\u216a\u216e\u2173\u2179\u0100ci\u2165\u2167;\u6aa7r;\u6a7aot;\u62d7Par;\u6995uest;\u6a7c\u0280adels\u2184\u216a\u2190\u0656\u219b\u01f0\u2189\0\u218epro\xf8\u209er;\u6978q\u0100lq\u063f\u2196les\xf3\u2088i\xed\u066b\u0100en\u21a3\u21adrtneqq;\uc000\u2269\ufe00\xc5\u21aa\u0500Aabcefkosy\u21c4\u21c7\u21f1\u21f5\u21fa\u2218\u221d\u222f\u2268\u227dr\xf2\u03a0\u0200ilmr\u21d0\u21d4\u21d7\u21dbrs\xf0\u1484f\xbb\u2024il\xf4\u06a9\u0100dr\u21e0\u21e4cy;\u444a\u0180;cw\u08f4\u21eb\u21efir;\u6948;\u61adar;\u610firc;\u4125\u0180alr\u2201\u220e\u2213rts\u0100;u\u2209\u220a\u6665it\xbb\u220alip;\u6026con;\u62b9r;\uc000\ud835\udd25s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223a\u223e\u2243\u225e\u2263rr;\u61fftht;\u623bk\u0100lr\u2249\u2253eftarrow;\u61a9ightarrow;\u61aaf;\uc000\ud835\udd59bar;\u6015\u0180clt\u226f\u2274\u2278r;\uc000\ud835\udcbdas\xe8\u21f4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xbb\u1c5b\u0ae1\u22a3\0\u22aa\0\u22b8\u22c5\u22ce\0\u22d5\u22f3\0\0\u22f8\u2322\u2367\u2362\u237f\0\u2386\u23aa\u23b4cute\u803b\xed\u40ed\u0180;iy\u0771\u22b0\u22b5rc\u803b\xee\u40ee;\u4438\u0100cx\u22bc\u22bfy;\u4435cl\u803b\xa1\u40a1\u0100fr\u039f\u22c9;\uc000\ud835\udd26rave\u803b\xec\u40ec\u0200;ino\u073e\u22dd\u22e9\u22ee\u0100in\u22e2\u22e6nt;\u6a0ct;\u622dfin;\u69dcta;\u6129lig;\u4133\u0180aop\u22fe\u231a\u231d\u0180cgt\u2305\u2308\u2317r;\u412b\u0180elp\u071f\u230f\u2313in\xe5\u078ear\xf4\u0720h;\u4131f;\u62b7ed;\u41b5\u0280;cfot\u04f4\u232c\u2331\u233d\u2341are;\u6105in\u0100;t\u2338\u2339\u621eie;\u69dddo\xf4\u2319\u0280;celp\u0757\u234c\u2350\u235b\u2361al;\u62ba\u0100gr\u2355\u2359er\xf3\u1563\xe3\u234darhk;\u6a17rod;\u6a3c\u0200cgpt\u236f\u2372\u2376\u237by;\u4451on;\u412ff;\uc000\ud835\udd5aa;\u43b9uest\u803b\xbf\u40bf\u0100ci\u238a\u238fr;\uc000\ud835\udcben\u0280;Edsv\u04f4\u239b\u239d\u23a1\u04f3;\u62f9ot;\u62f5\u0100;v\u23a6\u23a7\u62f4;\u62f3\u0100;i\u0777\u23aelde;\u4129\u01eb\u23b8\0\u23bccy;\u4456l\u803b\xef\u40ef\u0300cfmosu\u23cc\u23d7\u23dc\u23e1\u23e7\u23f5\u0100iy\u23d1\u23d5rc;\u4135;\u4439r;\uc000\ud835\udd27ath;\u4237pf;\uc000\ud835\udd5b\u01e3\u23ec\0\u23f1r;\uc000\ud835\udcbfrcy;\u4458kcy;\u4454\u0400acfghjos\u240b\u2416\u2422\u2427\u242d\u2431\u2435\u243bppa\u0100;v\u2413\u2414\u43ba;\u43f0\u0100ey\u241b\u2420dil;\u4137;\u443ar;\uc000\ud835\udd28reen;\u4138cy;\u4445cy;\u445cpf;\uc000\ud835\udd5ccr;\uc000\ud835\udcc0\u0b80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248d\u2491\u250e\u253d\u255a\u2580\u264e\u265e\u2665\u2679\u267d\u269a\u26b2\u26d8\u275d\u2768\u278b\u27c0\u2801\u2812\u0180art\u2477\u247a\u247cr\xf2\u09c6\xf2\u0395ail;\u691barr;\u690e\u0100;g\u0994\u248b;\u6a8bar;\u6962\u0963\u24a5\0\u24aa\0\u24b1\0\0\0\0\0\u24b5\u24ba\0\u24c6\u24c8\u24cd\0\u24f9ute;\u413amptyv;\u69b4ra\xee\u084cbda;\u43bbg\u0180;dl\u088e\u24c1\u24c3;\u6991\xe5\u088e;\u6a85uo\u803b\xab\u40abr\u0400;bfhlpst\u0899\u24de\u24e6\u24e9\u24eb\u24ee\u24f1\u24f5\u0100;f\u089d\u24e3s;\u691fs;\u691d\xeb\u2252p;\u61abl;\u6939im;\u6973l;\u61a2\u0180;ae\u24ff\u2500\u2504\u6aabil;\u6919\u0100;s\u2509\u250a\u6aad;\uc000\u2aad\ufe00\u0180abr\u2515\u2519\u251drr;\u690crk;\u6772\u0100ak\u2522\u252cc\u0100ek\u2528\u252a;\u407b;\u405b\u0100es\u2531\u2533;\u698bl\u0100du\u2539\u253b;\u698f;\u698d\u0200aeuy\u2546\u254b\u2556\u2558ron;\u413e\u0100di\u2550\u2554il;\u413c\xec\u08b0\xe2\u2529;\u443b\u0200cqrs\u2563\u2566\u256d\u257da;\u6936uo\u0100;r\u0e19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694bh;\u61b2\u0280;fgqs\u258b\u258c\u0989\u25f3\u25ff\u6264t\u0280ahlrt\u2598\u25a4\u25b7\u25c2\u25e8rrow\u0100;t\u0899\u25a1a\xe9\u24f6arpoon\u0100du\u25af\u25b4own\xbb\u045ap\xbb\u0966eftarrows;\u61c7ight\u0180ahs\u25cd\u25d6\u25derrow\u0100;s\u08f4\u08a7arpoon\xf3\u0f98quigarro\xf7\u21f0hreetimes;\u62cb\u0180;qs\u258b\u0993\u25falan\xf4\u09ac\u0280;cdgs\u09ac\u260a\u260d\u261d\u2628c;\u6aa8ot\u0100;o\u2614\u2615\u6a7f\u0100;r\u261a\u261b\u6a81;\u6a83\u0100;e\u2622\u2625\uc000\u22da\ufe00s;\u6a93\u0280adegs\u2633\u2639\u263d\u2649\u264bppro\xf8\u24c6ot;\u62d6q\u0100gq\u2643\u2645\xf4\u0989gt\xf2\u248c\xf4\u099bi\xed\u09b2\u0180ilr\u2655\u08e1\u265asht;\u697c;\uc000\ud835\udd29\u0100;E\u099c\u2663;\u6a91\u0161\u2669\u2676r\u0100du\u25b2\u266e\u0100;l\u0965\u2673;\u696alk;\u6584cy;\u4459\u0280;acht\u0a48\u2688\u268b\u2691\u2696r\xf2\u25c1orne\xf2\u1d08ard;\u696bri;\u65fa\u0100io\u269f\u26a4dot;\u4140ust\u0100;a\u26ac\u26ad\u63b0che\xbb\u26ad\u0200Eaes\u26bb\u26bd\u26c9\u26d4;\u6268p\u0100;p\u26c3\u26c4\u6a89rox\xbb\u26c4\u0100;q\u26ce\u26cf\u6a87\u0100;q\u26ce\u26bbim;\u62e6\u0400abnoptwz\u26e9\u26f4\u26f7\u271a\u272f\u2741\u2747\u2750\u0100nr\u26ee\u26f1g;\u67ecr;\u61fdr\xeb\u08c1g\u0180lmr\u26ff\u270d\u2714eft\u0100ar\u09e6\u2707ight\xe1\u09f2apsto;\u67fcight\xe1\u09fdparrow\u0100lr\u2725\u2729ef\xf4\u24edight;\u61ac\u0180afl\u2736\u2739\u273dr;\u6985;\uc000\ud835\udd5dus;\u6a2dimes;\u6a34\u0161\u274b\u274fst;\u6217\xe1\u134e\u0180;ef\u2757\u2758\u1800\u65cange\xbb\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277c\u2785\u2787r\xf2\u08a8orne\xf2\u1d8car\u0100;d\u0f98\u2783;\u696d;\u600eri;\u62bf\u0300achiqt\u2798\u279d\u0a40\u27a2\u27ae\u27bbquo;\u6039r;\uc000\ud835\udcc1m\u0180;eg\u09b2\u27aa\u27ac;\u6a8d;\u6a8f\u0100bu\u252a\u27b3o\u0100;r\u0e1f\u27b9;\u601arok;\u4142\u8400<;cdhilqr\u082b\u27d2\u2639\u27dc\u27e0\u27e5\u27ea\u27f0\u0100ci\u27d7\u27d9;\u6aa6r;\u6a79re\xe5\u25f2mes;\u62c9arr;\u6976uest;\u6a7b\u0100Pi\u27f5\u27f9ar;\u6996\u0180;ef\u2800\u092d\u181b\u65c3r\u0100du\u2807\u280dshar;\u694ahar;\u6966\u0100en\u2817\u2821rtneqq;\uc000\u2268\ufe00\xc5\u281e\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288e\u2893\u28a0\u28a5\u28a8\u28da\u28e2\u28e4\u0a83\u28f3\u2902Dot;\u623a\u0200clpr\u284e\u2852\u2863\u287dr\u803b\xaf\u40af\u0100et\u2857\u2859;\u6642\u0100;e\u285e\u285f\u6720se\xbb\u285f\u0100;s\u103b\u2868to\u0200;dlu\u103b\u2873\u2877\u287bow\xee\u048cef\xf4\u090f\xf0\u13d1ker;\u65ae\u0100oy\u2887\u288cmma;\u6a29;\u443cash;\u6014asuredangle\xbb\u1626r;\uc000\ud835\udd2ao;\u6127\u0180cdn\u28af\u28b4\u28c9ro\u803b\xb5\u40b5\u0200;acd\u1464\u28bd\u28c0\u28c4s\xf4\u16a7ir;\u6af0ot\u80bb\xb7\u01b5us\u0180;bd\u28d2\u1903\u28d3\u6212\u0100;u\u1d3c\u28d8;\u6a2a\u0163\u28de\u28e1p;\u6adb\xf2\u2212\xf0\u0a81\u0100dp\u28e9\u28eeels;\u62a7f;\uc000\ud835\udd5e\u0100ct\u28f8\u28fdr;\uc000\ud835\udcc2pos\xbb\u159d\u0180;lm\u2909\u290a\u290d\u43bctimap;\u62b8\u0c00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297e\u2989\u2998\u29da\u29e9\u2a15\u2a1a\u2a58\u2a5d\u2a83\u2a95\u2aa4\u2aa8\u2b04\u2b07\u2b44\u2b7f\u2bae\u2c34\u2c67\u2c7c\u2ce9\u0100gt\u2947\u294b;\uc000\u22d9\u0338\u0100;v\u2950\u0bcf\uc000\u226b\u20d2\u0180elt\u295a\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61cdightarrow;\u61ce;\uc000\u22d8\u0338\u0100;v\u297b\u0c47\uc000\u226a\u20d2ightarrow;\u61cf\u0100Dd\u298e\u2993ash;\u62afash;\u62ae\u0280bcnpt\u29a3\u29a7\u29ac\u29b1\u29ccla\xbb\u02deute;\u4144g;\uc000\u2220\u20d2\u0280;Eiop\u0d84\u29bc\u29c0\u29c5\u29c8;\uc000\u2a70\u0338d;\uc000\u224b\u0338s;\u4149ro\xf8\u0d84ur\u0100;a\u29d3\u29d4\u666el\u0100;s\u29d3\u0b38\u01f3\u29df\0\u29e3p\u80bb\xa0\u0b37mp\u0100;e\u0bf9\u0c00\u0280aeouy\u29f4\u29fe\u2a03\u2a10\u2a13\u01f0\u29f9\0\u29fb;\u6a43on;\u4148dil;\u4146ng\u0100;d\u0d7e\u2a0aot;\uc000\u2a6d\u0338p;\u6a42;\u443dash;\u6013\u0380;Aadqsx\u0b92\u2a29\u2a2d\u2a3b\u2a41\u2a45\u2a50rr;\u61d7r\u0100hr\u2a33\u2a36k;\u6924\u0100;o\u13f2\u13f0ot;\uc000\u2250\u0338ui\xf6\u0b63\u0100ei\u2a4a\u2a4ear;\u6928\xed\u0b98ist\u0100;s\u0ba0\u0b9fr;\uc000\ud835\udd2b\u0200Eest\u0bc5\u2a66\u2a79\u2a7c\u0180;qs\u0bbc\u2a6d\u0be1\u0180;qs\u0bbc\u0bc5\u2a74lan\xf4\u0be2i\xed\u0bea\u0100;r\u0bb6\u2a81\xbb\u0bb7\u0180Aap\u2a8a\u2a8d\u2a91r\xf2\u2971rr;\u61aear;\u6af2\u0180;sv\u0f8d\u2a9c\u0f8c\u0100;d\u2aa1\u2aa2\u62fc;\u62facy;\u445a\u0380AEadest\u2ab7\u2aba\u2abe\u2ac2\u2ac5\u2af6\u2af9r\xf2\u2966;\uc000\u2266\u0338rr;\u619ar;\u6025\u0200;fqs\u0c3b\u2ace\u2ae3\u2aeft\u0100ar\u2ad4\u2ad9rro\xf7\u2ac1ightarro\xf7\u2a90\u0180;qs\u0c3b\u2aba\u2aealan\xf4\u0c55\u0100;s\u0c55\u2af4\xbb\u0c36i\xed\u0c5d\u0100;r\u0c35\u2afei\u0100;e\u0c1a\u0c25i\xe4\u0d90\u0100pt\u2b0c\u2b11f;\uc000\ud835\udd5f\u8180\xac;in\u2b19\u2b1a\u2b36\u40acn\u0200;Edv\u0b89\u2b24\u2b28\u2b2e;\uc000\u22f9\u0338ot;\uc000\u22f5\u0338\u01e1\u0b89\u2b33\u2b35;\u62f7;\u62f6i\u0100;v\u0cb8\u2b3c\u01e1\u0cb8\u2b41\u2b43;\u62fe;\u62fd\u0180aor\u2b4b\u2b63\u2b69r\u0200;ast\u0b7b\u2b55\u2b5a\u2b5flle\xec\u0b7bl;\uc000\u2afd\u20e5;\uc000\u2202\u0338lint;\u6a14\u0180;ce\u0c92\u2b70\u2b73u\xe5\u0ca5\u0100;c\u0c98\u2b78\u0100;e\u0c92\u2b7d\xf1\u0c98\u0200Aait\u2b88\u2b8b\u2b9d\u2ba7r\xf2\u2988rr\u0180;cw\u2b94\u2b95\u2b99\u619b;\uc000\u2933\u0338;\uc000\u219d\u0338ghtarrow\xbb\u2b95ri\u0100;e\u0ccb\u0cd6\u0380chimpqu\u2bbd\u2bcd\u2bd9\u2b04\u0b78\u2be4\u2bef\u0200;cer\u0d32\u2bc6\u0d37\u2bc9u\xe5\u0d45;\uc000\ud835\udcc3ort\u026d\u2b05\0\0\u2bd6ar\xe1\u2b56m\u0100;e\u0d6e\u2bdf\u0100;q\u0d74\u0d73su\u0100bp\u2beb\u2bed\xe5\u0cf8\xe5\u0d0b\u0180bcp\u2bf6\u2c11\u2c19\u0200;Ees\u2bff\u2c00\u0d22\u2c04\u6284;\uc000\u2ac5\u0338et\u0100;e\u0d1b\u2c0bq\u0100;q\u0d23\u2c00c\u0100;e\u0d32\u2c17\xf1\u0d38\u0200;Ees\u2c22\u2c23\u0d5f\u2c27\u6285;\uc000\u2ac6\u0338et\u0100;e\u0d58\u2c2eq\u0100;q\u0d60\u2c23\u0200gilr\u2c3d\u2c3f\u2c45\u2c47\xec\u0bd7lde\u803b\xf1\u40f1\xe7\u0c43iangle\u0100lr\u2c52\u2c5ceft\u0100;e\u0c1a\u2c5a\xf1\u0c26ight\u0100;e\u0ccb\u2c65\xf1\u0cd7\u0100;m\u2c6c\u2c6d\u43bd\u0180;es\u2c74\u2c75\u2c79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2c8f\u2c94\u2c99\u2c9e\u2ca3\u2cb0\u2cb6\u2cd3\u2ce3ash;\u62adarr;\u6904p;\uc000\u224d\u20d2ash;\u62ac\u0100et\u2ca8\u2cac;\uc000\u2265\u20d2;\uc000>\u20d2nfin;\u69de\u0180Aet\u2cbd\u2cc1\u2cc5rr;\u6902;\uc000\u2264\u20d2\u0100;r\u2cca\u2ccd\uc000<\u20d2ie;\uc000\u22b4\u20d2\u0100At\u2cd8\u2cdcrr;\u6903rie;\uc000\u22b5\u20d2im;\uc000\u223c\u20d2\u0180Aan\u2cf0\u2cf4\u2d02rr;\u61d6r\u0100hr\u2cfa\u2cfdk;\u6923\u0100;o\u13e7\u13e5ear;\u6927\u1253\u1a95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2d2d\0\u2d38\u2d48\u2d60\u2d65\u2d72\u2d84\u1b07\0\0\u2d8d\u2dab\0\u2dc8\u2dce\0\u2ddc\u2e19\u2e2b\u2e3e\u2e43\u0100cs\u2d31\u1a97ute\u803b\xf3\u40f3\u0100iy\u2d3c\u2d45r\u0100;c\u1a9e\u2d42\u803b\xf4\u40f4;\u443e\u0280abios\u1aa0\u2d52\u2d57\u01c8\u2d5alac;\u4151v;\u6a38old;\u69bclig;\u4153\u0100cr\u2d69\u2d6dir;\u69bf;\uc000\ud835\udd2c\u036f\u2d79\0\0\u2d7c\0\u2d82n;\u42dbave\u803b\xf2\u40f2;\u69c1\u0100bm\u2d88\u0df4ar;\u69b5\u0200acit\u2d95\u2d98\u2da5\u2da8r\xf2\u1a80\u0100ir\u2d9d\u2da0r;\u69beoss;\u69bbn\xe5\u0e52;\u69c0\u0180aei\u2db1\u2db5\u2db9cr;\u414dga;\u43c9\u0180cdn\u2dc0\u2dc5\u01cdron;\u43bf;\u69b6pf;\uc000\ud835\udd60\u0180ael\u2dd4\u2dd7\u01d2r;\u69b7rp;\u69b9\u0380;adiosv\u2dea\u2deb\u2dee\u2e08\u2e0d\u2e10\u2e16\u6228r\xf2\u1a86\u0200;efm\u2df7\u2df8\u2e02\u2e05\u6a5dr\u0100;o\u2dfe\u2dff\u6134f\xbb\u2dff\u803b\xaa\u40aa\u803b\xba\u40bagof;\u62b6r;\u6a56lope;\u6a57;\u6a5b\u0180clo\u2e1f\u2e21\u2e27\xf2\u2e01ash\u803b\xf8\u40f8l;\u6298i\u016c\u2e2f\u2e34de\u803b\xf5\u40f5es\u0100;a\u01db\u2e3as;\u6a36ml\u803b\xf6\u40f6bar;\u633d\u0ae1\u2e5e\0\u2e7d\0\u2e80\u2e9d\0\u2ea2\u2eb9\0\0\u2ecb\u0e9c\0\u2f13\0\0\u2f2b\u2fbc\0\u2fc8r\u0200;ast\u0403\u2e67\u2e72\u0e85\u8100\xb6;l\u2e6d\u2e6e\u40b6le\xec\u0403\u0269\u2e78\0\0\u2e7bm;\u6af3;\u6afdy;\u443fr\u0280cimpt\u2e8b\u2e8f\u2e93\u1865\u2e97nt;\u4025od;\u402eil;\u6030enk;\u6031r;\uc000\ud835\udd2d\u0180imo\u2ea8\u2eb0\u2eb4\u0100;v\u2ead\u2eae\u43c6;\u43d5ma\xf4\u0a76ne;\u660e\u0180;tv\u2ebf\u2ec0\u2ec8\u43c0chfork\xbb\u1ffd;\u43d6\u0100au\u2ecf\u2edfn\u0100ck\u2ed5\u2eddk\u0100;h\u21f4\u2edb;\u610e\xf6\u21f4s\u0480;abcdemst\u2ef3\u2ef4\u1908\u2ef9\u2efd\u2f04\u2f06\u2f0a\u2f0e\u402bcir;\u6a23ir;\u6a22\u0100ou\u1d40\u2f02;\u6a25;\u6a72n\u80bb\xb1\u0e9dim;\u6a26wo;\u6a27\u0180ipu\u2f19\u2f20\u2f25ntint;\u6a15f;\uc000\ud835\udd61nd\u803b\xa3\u40a3\u0500;Eaceinosu\u0ec8\u2f3f\u2f41\u2f44\u2f47\u2f81\u2f89\u2f92\u2f7e\u2fb6;\u6ab3p;\u6ab7u\xe5\u0ed9\u0100;c\u0ece\u2f4c\u0300;acens\u0ec8\u2f59\u2f5f\u2f66\u2f68\u2f7eppro\xf8\u2f43urlye\xf1\u0ed9\xf1\u0ece\u0180aes\u2f6f\u2f76\u2f7approx;\u6ab9qq;\u6ab5im;\u62e8i\xed\u0edfme\u0100;s\u2f88\u0eae\u6032\u0180Eas\u2f78\u2f90\u2f7a\xf0\u2f75\u0180dfp\u0eec\u2f99\u2faf\u0180als\u2fa0\u2fa5\u2faalar;\u632eine;\u6312urf;\u6313\u0100;t\u0efb\u2fb4\xef\u0efbrel;\u62b0\u0100ci\u2fc0\u2fc5r;\uc000\ud835\udcc5;\u43c8ncsp;\u6008\u0300fiopsu\u2fda\u22e2\u2fdf\u2fe5\u2feb\u2ff1r;\uc000\ud835\udd2epf;\uc000\ud835\udd62rime;\u6057cr;\uc000\ud835\udcc6\u0180aeo\u2ff8\u3009\u3013t\u0100ei\u2ffe\u3005rnion\xf3\u06b0nt;\u6a16st\u0100;e\u3010\u3011\u403f\xf1\u1f19\xf4\u0f14\u0a80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30e0\u310e\u312b\u3147\u3162\u3172\u318e\u3206\u3215\u3224\u3229\u3258\u326e\u3272\u3290\u32b0\u32b7\u0180art\u3047\u304a\u304cr\xf2\u10b3\xf2\u03ddail;\u691car\xf2\u1c65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307f\u308f\u3094\u30cc\u0100eu\u306d\u3071;\uc000\u223d\u0331te;\u4155i\xe3\u116emptyv;\u69b3g\u0200;del\u0fd1\u3089\u308b\u308d;\u6992;\u69a5\xe5\u0fd1uo\u803b\xbb\u40bbr\u0580;abcfhlpstw\u0fdc\u30ac\u30af\u30b7\u30b9\u30bc\u30be\u30c0\u30c3\u30c7\u30cap;\u6975\u0100;f\u0fe0\u30b4s;\u6920;\u6933s;\u691e\xeb\u225d\xf0\u272el;\u6945im;\u6974l;\u61a3;\u619d\u0100ai\u30d1\u30d5il;\u691ao\u0100;n\u30db\u30dc\u6236al\xf3\u0f1e\u0180abr\u30e7\u30ea\u30eer\xf2\u17e5rk;\u6773\u0100ak\u30f3\u30fdc\u0100ek\u30f9\u30fb;\u407d;\u405d\u0100es\u3102\u3104;\u698cl\u0100du\u310a\u310c;\u698e;\u6990\u0200aeuy\u3117\u311c\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xec\u0ff2\xe2\u30fa;\u4440\u0200clqs\u3134\u3137\u313d\u3144a;\u6937dhar;\u6969uo\u0100;r\u020e\u020dh;\u61b3\u0180acg\u314e\u315f\u0f44l\u0200;ips\u0f78\u3158\u315b\u109cn\xe5\u10bbar\xf4\u0fa9t;\u65ad\u0180ilr\u3169\u1023\u316esht;\u697d;\uc000\ud835\udd2f\u0100ao\u3177\u3186r\u0100du\u317d\u317f\xbb\u047b\u0100;l\u1091\u3184;\u696c\u0100;v\u318b\u318c\u43c1;\u43f1\u0180gns\u3195\u31f9\u31fcht\u0300ahlrst\u31a4\u31b0\u31c2\u31d8\u31e4\u31eerrow\u0100;t\u0fdc\u31ada\xe9\u30c8arpoon\u0100du\u31bb\u31bfow\xee\u317ep\xbb\u1092eft\u0100ah\u31ca\u31d0rrow\xf3\u0feaarpoon\xf3\u0551ightarrows;\u61c9quigarro\xf7\u30cbhreetimes;\u62ccg;\u42daingdotse\xf1\u1f32\u0180ahm\u320d\u3210\u3213r\xf2\u0feaa\xf2\u0551;\u600foust\u0100;a\u321e\u321f\u63b1che\xbb\u321fmid;\u6aee\u0200abpt\u3232\u323d\u3240\u3252\u0100nr\u3237\u323ag;\u67edr;\u61fer\xeb\u1003\u0180afl\u3247\u324a\u324er;\u6986;\uc000\ud835\udd63us;\u6a2eimes;\u6a35\u0100ap\u325d\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6a12ar\xf2\u31e3\u0200achq\u327b\u3280\u10bc\u3285quo;\u603ar;\uc000\ud835\udcc7\u0100bu\u30fb\u328ao\u0100;r\u0214\u0213\u0180hir\u3297\u329b\u32a0re\xe5\u31f8mes;\u62cai\u0200;efl\u32aa\u1059\u1821\u32ab\u65b9tri;\u69celuhar;\u6968;\u611e\u0d61\u32d5\u32db\u32df\u332c\u3338\u3371\0\u337a\u33a4\0\0\u33ec\u33f0\0\u3428\u3448\u345a\u34ad\u34b1\u34ca\u34f1\0\u3616\0\0\u3633cute;\u415bqu\xef\u27ba\u0500;Eaceinpsy\u11ed\u32f3\u32f5\u32ff\u3302\u330b\u330f\u331f\u3326\u3329;\u6ab4\u01f0\u32fa\0\u32fc;\u6ab8on;\u4161u\xe5\u11fe\u0100;d\u11f3\u3307il;\u415frc;\u415d\u0180Eas\u3316\u3318\u331b;\u6ab6p;\u6abaim;\u62e9olint;\u6a13i\xed\u1204;\u4441ot\u0180;be\u3334\u1d47\u3335\u62c5;\u6a66\u0380Aacmstx\u3346\u334a\u3357\u335b\u335e\u3363\u336drr;\u61d8r\u0100hr\u3350\u3352\xeb\u2228\u0100;o\u0a36\u0a34t\u803b\xa7\u40a7i;\u403bwar;\u6929m\u0100in\u3369\xf0nu\xf3\xf1t;\u6736r\u0100;o\u3376\u2055\uc000\ud835\udd30\u0200acoy\u3382\u3386\u3391\u33a0rp;\u666f\u0100hy\u338b\u338fcy;\u4449;\u4448rt\u026d\u3399\0\0\u339ci\xe4\u1464ara\xec\u2e6f\u803b\xad\u40ad\u0100gm\u33a8\u33b4ma\u0180;fv\u33b1\u33b2\u33b2\u43c3;\u43c2\u0400;deglnpr\u12ab\u33c5\u33c9\u33ce\u33d6\u33de\u33e1\u33e6ot;\u6a6a\u0100;q\u12b1\u12b0\u0100;E\u33d3\u33d4\u6a9e;\u6aa0\u0100;E\u33db\u33dc\u6a9d;\u6a9fe;\u6246lus;\u6a24arr;\u6972ar\xf2\u113d\u0200aeit\u33f8\u3408\u340f\u3417\u0100ls\u33fd\u3404lsetm\xe9\u336ahp;\u6a33parsl;\u69e4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341c\u341d\u6aaa\u0100;s\u3422\u3423\u6aac;\uc000\u2aac\ufe00\u0180flp\u342e\u3433\u3442tcy;\u444c\u0100;b\u3438\u3439\u402f\u0100;a\u343e\u343f\u69c4r;\u633ff;\uc000\ud835\udd64a\u0100dr\u344d\u0402es\u0100;u\u3454\u3455\u6660it\xbb\u3455\u0180csu\u3460\u3479\u349f\u0100au\u3465\u346fp\u0100;s\u1188\u346b;\uc000\u2293\ufe00p\u0100;s\u11b4\u3475;\uc000\u2294\ufe00u\u0100bp\u347f\u348f\u0180;es\u1197\u119c\u3486et\u0100;e\u1197\u348d\xf1\u119d\u0180;es\u11a8\u11ad\u3496et\u0100;e\u11a8\u349d\xf1\u11ae\u0180;af\u117b\u34a6\u05b0r\u0165\u34ab\u05b1\xbb\u117car\xf2\u1148\u0200cemt\u34b9\u34be\u34c2\u34c5r;\uc000\ud835\udcc8tm\xee\xf1i\xec\u3415ar\xe6\u11be\u0100ar\u34ce\u34d5r\u0100;f\u34d4\u17bf\u6606\u0100an\u34da\u34edight\u0100ep\u34e3\u34eapsilo\xee\u1ee0h\xe9\u2eafs\xbb\u2852\u0280bcmnp\u34fb\u355e\u1209\u358b\u358e\u0480;Edemnprs\u350e\u350f\u3511\u3515\u351e\u3523\u352c\u3531\u3536\u6282;\u6ac5ot;\u6abd\u0100;d\u11da\u351aot;\u6ac3ult;\u6ac1\u0100Ee\u3528\u352a;\u6acb;\u628alus;\u6abfarr;\u6979\u0180eiu\u353d\u3552\u3555t\u0180;en\u350e\u3545\u354bq\u0100;q\u11da\u350feq\u0100;q\u352b\u3528m;\u6ac7\u0100bp\u355a\u355c;\u6ad5;\u6ad3c\u0300;acens\u11ed\u356c\u3572\u3579\u357b\u3326ppro\xf8\u32faurlye\xf1\u11fe\xf1\u11f3\u0180aes\u3582\u3588\u331bppro\xf8\u331aq\xf1\u3317g;\u666a\u0680123;Edehlmnps\u35a9\u35ac\u35af\u121c\u35b2\u35b4\u35c0\u35c9\u35d5\u35da\u35df\u35e8\u35ed\u803b\xb9\u40b9\u803b\xb2\u40b2\u803b\xb3\u40b3;\u6ac6\u0100os\u35b9\u35bct;\u6abeub;\u6ad8\u0100;d\u1222\u35c5ot;\u6ac4s\u0100ou\u35cf\u35d2l;\u67c9b;\u6ad7arr;\u697bult;\u6ac2\u0100Ee\u35e4\u35e6;\u6acc;\u628blus;\u6ac0\u0180eiu\u35f4\u3609\u360ct\u0180;en\u121c\u35fc\u3602q\u0100;q\u1222\u35b2eq\u0100;q\u35e7\u35e4m;\u6ac8\u0100bp\u3611\u3613;\u6ad4;\u6ad6\u0180Aan\u361c\u3620\u362drr;\u61d9r\u0100hr\u3626\u3628\xeb\u222e\u0100;o\u0a2b\u0a29war;\u692alig\u803b\xdf\u40df\u0be1\u3651\u365d\u3660\u12ce\u3673\u3679\0\u367e\u36c2\0\0\0\0\0\u36db\u3703\0\u3709\u376c\0\0\0\u3787\u0272\u3656\0\0\u365bget;\u6316;\u43c4r\xeb\u0e5f\u0180aey\u3666\u366b\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uc000\ud835\udd31\u0200eiko\u3686\u369d\u36b5\u36bc\u01f2\u368b\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369b\u43b8ym;\u43d1\u0100cn\u36a2\u36b2k\u0100as\u36a8\u36aeppro\xf8\u12c1im\xbb\u12acs\xf0\u129e\u0100as\u36ba\u36ae\xf0\u12c1rn\u803b\xfe\u40fe\u01ec\u031f\u36c6\u22e7es\u8180\xd7;bd\u36cf\u36d0\u36d8\u40d7\u0100;a\u190f\u36d5r;\u6a31;\u6a30\u0180eps\u36e1\u36e3\u3700\xe1\u2a4d\u0200;bcf\u0486\u36ec\u36f0\u36f4ot;\u6336ir;\u6af1\u0100;o\u36f9\u36fc\uc000\ud835\udd65rk;\u6ada\xe1\u3362rime;\u6034\u0180aip\u370f\u3712\u3764d\xe5\u1248\u0380adempst\u3721\u374d\u3740\u3751\u3757\u375c\u375fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65b5own\xbb\u1dbbeft\u0100;e\u2800\u373e\xf1\u092e;\u625cight\u0100;e\u32aa\u374b\xf1\u105aot;\u65ecinus;\u6a3alus;\u6a39b;\u69cdime;\u6a3bezium;\u63e2\u0180cht\u3772\u377d\u3781\u0100ry\u3777\u377b;\uc000\ud835\udcc9;\u4446cy;\u445brok;\u4167\u0100io\u378b\u378ex\xf4\u1777head\u0100lr\u3797\u37a0eftarro\xf7\u084fightarrow\xbb\u0f5d\u0900AHabcdfghlmoprstuw\u37d0\u37d3\u37d7\u37e4\u37f0\u37fc\u380e\u381c\u3823\u3834\u3851\u385d\u386b\u38a9\u38cc\u38d2\u38ea\u38f6r\xf2\u03edar;\u6963\u0100cr\u37dc\u37e2ute\u803b\xfa\u40fa\xf2\u1150r\u01e3\u37ea\0\u37edy;\u445eve;\u416d\u0100iy\u37f5\u37farc\u803b\xfb\u40fb;\u4443\u0180abh\u3803\u3806\u380br\xf2\u13adlac;\u4171a\xf2\u13c3\u0100ir\u3813\u3818sht;\u697e;\uc000\ud835\udd32rave\u803b\xf9\u40f9\u0161\u3827\u3831r\u0100lr\u382c\u382e\xbb\u0957\xbb\u1083lk;\u6580\u0100ct\u3839\u384d\u026f\u383f\0\0\u384arn\u0100;e\u3845\u3846\u631cr\xbb\u3846op;\u630fri;\u65f8\u0100al\u3856\u385acr;\u416b\u80bb\xa8\u0349\u0100gp\u3862\u3866on;\u4173f;\uc000\ud835\udd66\u0300adhlsu\u114b\u3878\u387d\u1372\u3891\u38a0own\xe1\u13b3arpoon\u0100lr\u3888\u388cef\xf4\u382digh\xf4\u382fi\u0180;hl\u3899\u389a\u389c\u43c5\xbb\u13faon\xbb\u389aparrows;\u61c8\u0180cit\u38b0\u38c4\u38c8\u026f\u38b6\0\0\u38c1rn\u0100;e\u38bc\u38bd\u631dr\xbb\u38bdop;\u630eng;\u416fri;\u65f9cr;\uc000\ud835\udcca\u0180dir\u38d9\u38dd\u38e2ot;\u62f0lde;\u4169i\u0100;f\u3730\u38e8\xbb\u1813\u0100am\u38ef\u38f2r\xf2\u38a8l\u803b\xfc\u40fcangle;\u69a7\u0780ABDacdeflnoprsz\u391c\u391f\u3929\u392d\u39b5\u39b8\u39bd\u39df\u39e4\u39e8\u39f3\u39f9\u39fd\u3a01\u3a20r\xf2\u03f7ar\u0100;v\u3926\u3927\u6ae8;\u6ae9as\xe8\u03e1\u0100nr\u3932\u3937grt;\u699c\u0380eknprst\u34e3\u3946\u394b\u3952\u395d\u3964\u3996app\xe1\u2415othin\xe7\u1e96\u0180hir\u34eb\u2ec8\u3959op\xf4\u2fb5\u0100;h\u13b7\u3962\xef\u318d\u0100iu\u3969\u396dgm\xe1\u33b3\u0100bp\u3972\u3984setneq\u0100;q\u397d\u3980\uc000\u228a\ufe00;\uc000\u2acb\ufe00setneq\u0100;q\u398f\u3992\uc000\u228b\ufe00;\uc000\u2acc\ufe00\u0100hr\u399b\u399fet\xe1\u369ciangle\u0100lr\u39aa\u39afeft\xbb\u0925ight\xbb\u1051y;\u4432ash\xbb\u1036\u0180elr\u39c4\u39d2\u39d7\u0180;be\u2dea\u39cb\u39cfar;\u62bbq;\u625alip;\u62ee\u0100bt\u39dc\u1468a\xf2\u1469r;\uc000\ud835\udd33tr\xe9\u39aesu\u0100bp\u39ef\u39f1\xbb\u0d1c\xbb\u0d59pf;\uc000\ud835\udd67ro\xf0\u0efbtr\xe9\u39b4\u0100cu\u3a06\u3a0br;\uc000\ud835\udccb\u0100bp\u3a10\u3a18n\u0100Ee\u3980\u3a16\xbb\u397en\u0100Ee\u3992\u3a1e\xbb\u3990igzag;\u699a\u0380cefoprs\u3a36\u3a3b\u3a56\u3a5b\u3a54\u3a61\u3a6airc;\u4175\u0100di\u3a40\u3a51\u0100bg\u3a45\u3a49ar;\u6a5fe\u0100;q\u15fa\u3a4f;\u6259erp;\u6118r;\uc000\ud835\udd34pf;\uc000\ud835\udd68\u0100;e\u1479\u3a66at\xe8\u1479cr;\uc000\ud835\udccc\u0ae3\u178e\u3a87\0\u3a8b\0\u3a90\u3a9b\0\0\u3a9d\u3aa8\u3aab\u3aaf\0\0\u3ac3\u3ace\0\u3ad8\u17dc\u17dftr\xe9\u17d1r;\uc000\ud835\udd35\u0100Aa\u3a94\u3a97r\xf2\u03c3r\xf2\u09f6;\u43be\u0100Aa\u3aa1\u3aa4r\xf2\u03b8r\xf2\u09eba\xf0\u2713is;\u62fb\u0180dpt\u17a4\u3ab5\u3abe\u0100fl\u3aba\u17a9;\uc000\ud835\udd69im\xe5\u17b2\u0100Aa\u3ac7\u3acar\xf2\u03cer\xf2\u0a01\u0100cq\u3ad2\u17b8r;\uc000\ud835\udccd\u0100pt\u17d6\u3adcr\xe9\u17d4\u0400acefiosu\u3af0\u3afd\u3b08\u3b0c\u3b11\u3b15\u3b1b\u3b21c\u0100uy\u3af6\u3afbte\u803b\xfd\u40fd;\u444f\u0100iy\u3b02\u3b06rc;\u4177;\u444bn\u803b\xa5\u40a5r;\uc000\ud835\udd36cy;\u4457pf;\uc000\ud835\udd6acr;\uc000\ud835\udcce\u0100cm\u3b26\u3b29y;\u444el\u803b\xff\u40ff\u0500acdefhiosw\u3b42\u3b48\u3b54\u3b58\u3b64\u3b69\u3b6d\u3b74\u3b7a\u3b80cute;\u417a\u0100ay\u3b4d\u3b52ron;\u417e;\u4437ot;\u417c\u0100et\u3b5d\u3b61tr\xe6\u155fa;\u43b6r;\uc000\ud835\udd37cy;\u4436grarr;\u61ddpf;\uc000\ud835\udd6bcr;\uc000\ud835\udccf\u0100jn\u3b85\u3b87;\u600dj;\u600c"
6344
- .split("")
6345
- .map(function (c) { return c.charCodeAt(0); }));
6346
-
6347
- var decodeDataXml = {};
6348
-
6349
- // Generated using scripts/write-decode-map.ts
6350
- Object.defineProperty(decodeDataXml, "__esModule", { value: true });
6351
- decodeDataXml.default = new Uint16Array(
6352
- // prettier-ignore
6353
- "\u0200aglq\t\x15\x18\x1b\u026d\x0f\0\0\x12p;\u4026os;\u4027t;\u403et;\u403cuot;\u4022"
6354
- .split("")
6355
- .map(function (c) { return c.charCodeAt(0); }));
6335
+ var decode$1 = {};
6356
6336
 
6357
- var decode_codepoint = {};
6337
+ var decodeCodepoint = {};
6358
6338
 
6359
6339
  (function (exports) {
6360
6340
  // Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134
6361
6341
  var _a;
6362
6342
  Object.defineProperty(exports, "__esModule", { value: true });
6363
- exports.replaceCodePoint = exports.fromCodePoint = void 0;
6364
- var decodeMap = new Map([
6343
+ exports.fromCodePoint = void 0;
6344
+ exports.replaceCodePoint = replaceCodePoint;
6345
+ exports.decodeCodePoint = decodeCodePoint;
6346
+ const decodeMap = new Map([
6365
6347
  [0, 65533],
6366
6348
  // C1 Unicode control character reference replacements
6367
6349
  [128, 8364],
@@ -6396,17 +6378,17 @@ var decode_codepoint = {};
6396
6378
  * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.
6397
6379
  */
6398
6380
  exports.fromCodePoint =
6399
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins
6400
- (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {
6401
- var output = "";
6402
- if (codePoint > 0xffff) {
6403
- codePoint -= 0x10000;
6404
- output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);
6405
- codePoint = 0xdc00 | (codePoint & 0x3ff);
6381
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins
6382
+ (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : ((codePoint) => {
6383
+ let output = "";
6384
+ if (codePoint > 65535) {
6385
+ codePoint -= 65536;
6386
+ output += String.fromCharCode(((codePoint >>> 10) & 1023) | 55296);
6387
+ codePoint = 56320 | (codePoint & 1023);
6406
6388
  }
6407
6389
  output += String.fromCharCode(codePoint);
6408
6390
  return output;
6409
- };
6391
+ });
6410
6392
  /**
6411
6393
  * Replace the given code point with a replacement character if it is a
6412
6394
  * surrogate or is outside the valid range. Otherwise return the code
@@ -6414,12 +6396,12 @@ var decode_codepoint = {};
6414
6396
  */
6415
6397
  function replaceCodePoint(codePoint) {
6416
6398
  var _a;
6417
- if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {
6418
- return 0xfffd;
6399
+ if ((codePoint >= 55296 && codePoint <= 57343) ||
6400
+ codePoint > 1114111) {
6401
+ return 65533;
6419
6402
  }
6420
6403
  return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;
6421
6404
  }
6422
- exports.replaceCodePoint = replaceCodePoint;
6423
6405
  /**
6424
6406
  * Replace the code point if relevant, then convert it to a string.
6425
6407
  *
@@ -6430,48 +6412,91 @@ var decode_codepoint = {};
6430
6412
  function decodeCodePoint(codePoint) {
6431
6413
  return (0, exports.fromCodePoint)(replaceCodePoint(codePoint));
6432
6414
  }
6433
- exports.default = decodeCodePoint;
6434
6415
 
6435
- } (decode_codepoint));
6416
+ } (decodeCodepoint));
6417
+
6418
+ var decodeDataHtml$1 = {};
6419
+
6420
+ var decodeShared = {};
6421
+
6422
+ Object.defineProperty(decodeShared, "__esModule", { value: true });
6423
+ decodeShared.decodeBase64 = decodeBase64;
6424
+ /*
6425
+ * Shared base64 decode helper for generated decode data.
6426
+ * Assumes global atob is available.
6427
+ */
6428
+ function decodeBase64(input) {
6429
+ const binary =
6430
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
6431
+ typeof atob === "function"
6432
+ ? // Browser (and Node >=16)
6433
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
6434
+ atob(input)
6435
+ : // Older Node versions (<16)
6436
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
6437
+ typeof Buffer.from === "function"
6438
+ ? // eslint-disable-next-line n/no-unsupported-features/node-builtins
6439
+ Buffer.from(input, "base64").toString("binary")
6440
+ : // eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api
6441
+ new Buffer(input, "base64").toString("binary");
6442
+ const evenLength = binary.length & ~1; // Round down to even length
6443
+ const out = new Uint16Array(evenLength / 2);
6444
+ for (let index = 0, outIndex = 0; index < evenLength; index += 2) {
6445
+ const lo = binary.charCodeAt(index);
6446
+ const hi = binary.charCodeAt(index + 1);
6447
+ out[outIndex++] = lo | (hi << 8);
6448
+ }
6449
+ return out;
6450
+ }
6451
+
6452
+ // Generated using scripts/write-decode-map.ts
6453
+ Object.defineProperty(decodeDataHtml$1, "__esModule", { value: true });
6454
+ decodeDataHtml$1.htmlDecodeTree = void 0;
6455
+ const decode_shared_js_1$1 = decodeShared;
6456
+ decodeDataHtml$1.htmlDecodeTree = (0, decode_shared_js_1$1.decodeBase64)("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");
6457
+
6458
+ var decodeDataXml$1 = {};
6459
+
6460
+ // Generated using scripts/write-decode-map.ts
6461
+ Object.defineProperty(decodeDataXml$1, "__esModule", { value: true });
6462
+ decodeDataXml$1.xmlDecodeTree = void 0;
6463
+ const decode_shared_js_1 = decodeShared;
6464
+ decodeDataXml$1.xmlDecodeTree = (0, decode_shared_js_1.decodeBase64)("AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg");
6465
+
6466
+ var binTrieFlags = {};
6467
+
6468
+ Object.defineProperty(binTrieFlags, "__esModule", { value: true });
6469
+ binTrieFlags.BinTrieFlags = void 0;
6470
+ /**
6471
+ * Bit flags & masks for the binary trie encoding used for entity decoding.
6472
+ *
6473
+ * Bit layout (16 bits total):
6474
+ * 15..14 VALUE_LENGTH (+1 encoding; 0 => no value)
6475
+ * 13 FLAG13. If valueLength>0: semicolon required flag (implicit ';').
6476
+ * If valueLength==0: compact run flag.
6477
+ * 12..7 BRANCH_LENGTH Branch length (0 => single branch in 6..0 if jumpOffset==char) OR run length (when compact run)
6478
+ * 6..0 JUMP_TABLE Jump offset (jump table) OR single-branch char code OR first run char
6479
+ */
6480
+ var BinTrieFlags;
6481
+ (function (BinTrieFlags) {
6482
+ BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
6483
+ BinTrieFlags[BinTrieFlags["FLAG13"] = 8192] = "FLAG13";
6484
+ BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
6485
+ BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE";
6486
+ })(BinTrieFlags || (binTrieFlags.BinTrieFlags = BinTrieFlags = {}));
6436
6487
 
6437
6488
  (function (exports) {
6438
- var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6439
- if (k2 === undefined) k2 = k;
6440
- var desc = Object.getOwnPropertyDescriptor(m, k);
6441
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6442
- desc = { enumerable: true, get: function() { return m[k]; } };
6443
- }
6444
- Object.defineProperty(o, k2, desc);
6445
- }) : (function(o, m, k, k2) {
6446
- if (k2 === undefined) k2 = k;
6447
- o[k2] = m[k];
6448
- }));
6449
- var __setModuleDefault = (commonjsGlobal && commonjsGlobal.__setModuleDefault) || (Object.create ? (function(o, v) {
6450
- Object.defineProperty(o, "default", { enumerable: true, value: v });
6451
- }) : function(o, v) {
6452
- o["default"] = v;
6453
- });
6454
- var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
6455
- if (mod && mod.__esModule) return mod;
6456
- var result = {};
6457
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
6458
- __setModuleDefault(result, mod);
6459
- return result;
6460
- };
6461
- var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
6462
- return (mod && mod.__esModule) ? mod : { "default": mod };
6463
- };
6464
6489
  Object.defineProperty(exports, "__esModule", { value: true });
6465
- exports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTMLAttribute = exports.decodeHTML = exports.determineBranch = exports.EntityDecoder = exports.DecodingMode = exports.BinTrieFlags = exports.fromCodePoint = exports.replaceCodePoint = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0;
6466
- var decode_data_html_js_1 = __importDefault(decodeDataHtml);
6467
- exports.htmlDecodeTree = decode_data_html_js_1.default;
6468
- var decode_data_xml_js_1 = __importDefault(decodeDataXml);
6469
- exports.xmlDecodeTree = decode_data_xml_js_1.default;
6470
- var decode_codepoint_js_1 = __importStar(decode_codepoint);
6471
- exports.decodeCodePoint = decode_codepoint_js_1.default;
6472
- var decode_codepoint_js_2 = decode_codepoint;
6473
- Object.defineProperty(exports, "replaceCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.replaceCodePoint; } });
6474
- Object.defineProperty(exports, "fromCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.fromCodePoint; } });
6490
+ exports.xmlDecodeTree = exports.htmlDecodeTree = exports.replaceCodePoint = exports.fromCodePoint = exports.decodeCodePoint = exports.EntityDecoder = exports.DecodingMode = void 0;
6491
+ exports.determineBranch = determineBranch;
6492
+ exports.decodeHTML = decodeHTML;
6493
+ exports.decodeHTMLAttribute = decodeHTMLAttribute;
6494
+ exports.decodeHTMLStrict = decodeHTMLStrict;
6495
+ exports.decodeXML = decodeXML;
6496
+ const decode_codepoint_js_1 = decodeCodepoint;
6497
+ const decode_data_html_js_1 = decodeDataHtml$1;
6498
+ const decode_data_xml_js_1 = decodeDataXml$1;
6499
+ const bin_trie_flags_js_1 = binTrieFlags;
6475
6500
  var CharCodes;
6476
6501
  (function (CharCodes) {
6477
6502
  CharCodes[CharCodes["NUM"] = 35] = "NUM";
@@ -6488,13 +6513,7 @@ var decode_codepoint = {};
6488
6513
  CharCodes[CharCodes["UPPER_Z"] = 90] = "UPPER_Z";
6489
6514
  })(CharCodes || (CharCodes = {}));
6490
6515
  /** Bit that needs to be set to convert an upper case ASCII character to lower case */
6491
- var TO_LOWER_BIT = 32;
6492
- var BinTrieFlags;
6493
- (function (BinTrieFlags) {
6494
- BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
6495
- BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
6496
- BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE";
6497
- })(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {}));
6516
+ const TO_LOWER_BIT = 32;
6498
6517
  function isNumber(code) {
6499
6518
  return code >= CharCodes.ZERO && code <= CharCodes.NINE;
6500
6519
  }
@@ -6532,13 +6551,14 @@ var decode_codepoint = {};
6532
6551
  DecodingMode[DecodingMode["Strict"] = 1] = "Strict";
6533
6552
  /** Entities in attributes have limitations on ending characters. */
6534
6553
  DecodingMode[DecodingMode["Attribute"] = 2] = "Attribute";
6535
- })(DecodingMode = exports.DecodingMode || (exports.DecodingMode = {}));
6554
+ })(DecodingMode || (exports.DecodingMode = DecodingMode = {}));
6536
6555
  /**
6537
6556
  * Token decoder with support of writing partial entities.
6538
6557
  */
6539
- var EntityDecoder = /** @class */ (function () {
6540
- function EntityDecoder(
6558
+ class EntityDecoder {
6559
+ constructor(
6541
6560
  /** The tree used to decode entities. */
6561
+ // biome-ignore lint/correctness/noUnusedPrivateClassMembers: False positive
6542
6562
  decodeTree,
6543
6563
  /**
6544
6564
  * The function that is called when a codepoint is decoded.
@@ -6572,16 +6592,19 @@ var decode_codepoint = {};
6572
6592
  this.excess = 1;
6573
6593
  /** The mode in which the decoder is operating. */
6574
6594
  this.decodeMode = DecodingMode.Strict;
6595
+ /** The number of characters that have been consumed in the current run. */
6596
+ this.runConsumed = 0;
6575
6597
  }
6576
6598
  /** Resets the instance to make it reusable. */
6577
- EntityDecoder.prototype.startEntity = function (decodeMode) {
6599
+ startEntity(decodeMode) {
6578
6600
  this.decodeMode = decodeMode;
6579
6601
  this.state = EntityDecoderState.EntityStart;
6580
6602
  this.result = 0;
6581
6603
  this.treeIndex = 0;
6582
6604
  this.excess = 1;
6583
6605
  this.consumed = 1;
6584
- };
6606
+ this.runConsumed = 0;
6607
+ }
6585
6608
  /**
6586
6609
  * Write an entity to the decoder. This can be called multiple times with partial entities.
6587
6610
  * If the entity is incomplete, the decoder will return -1.
@@ -6589,113 +6612,106 @@ var decode_codepoint = {};
6589
6612
  * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
6590
6613
  * entity is incomplete, and resume when the next string is written.
6591
6614
  *
6592
- * @param string The string containing the entity (or a continuation of the entity).
6615
+ * @param input The string containing the entity (or a continuation of the entity).
6593
6616
  * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
6594
6617
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
6595
6618
  */
6596
- EntityDecoder.prototype.write = function (str, offset) {
6619
+ write(input, offset) {
6597
6620
  switch (this.state) {
6598
6621
  case EntityDecoderState.EntityStart: {
6599
- if (str.charCodeAt(offset) === CharCodes.NUM) {
6622
+ if (input.charCodeAt(offset) === CharCodes.NUM) {
6600
6623
  this.state = EntityDecoderState.NumericStart;
6601
6624
  this.consumed += 1;
6602
- return this.stateNumericStart(str, offset + 1);
6625
+ return this.stateNumericStart(input, offset + 1);
6603
6626
  }
6604
6627
  this.state = EntityDecoderState.NamedEntity;
6605
- return this.stateNamedEntity(str, offset);
6628
+ return this.stateNamedEntity(input, offset);
6606
6629
  }
6607
6630
  case EntityDecoderState.NumericStart: {
6608
- return this.stateNumericStart(str, offset);
6631
+ return this.stateNumericStart(input, offset);
6609
6632
  }
6610
6633
  case EntityDecoderState.NumericDecimal: {
6611
- return this.stateNumericDecimal(str, offset);
6634
+ return this.stateNumericDecimal(input, offset);
6612
6635
  }
6613
6636
  case EntityDecoderState.NumericHex: {
6614
- return this.stateNumericHex(str, offset);
6637
+ return this.stateNumericHex(input, offset);
6615
6638
  }
6616
6639
  case EntityDecoderState.NamedEntity: {
6617
- return this.stateNamedEntity(str, offset);
6640
+ return this.stateNamedEntity(input, offset);
6618
6641
  }
6619
6642
  }
6620
- };
6643
+ }
6621
6644
  /**
6622
6645
  * Switches between the numeric decimal and hexadecimal states.
6623
6646
  *
6624
6647
  * Equivalent to the `Numeric character reference state` in the HTML spec.
6625
6648
  *
6626
- * @param str The string containing the entity (or a continuation of the entity).
6649
+ * @param input The string containing the entity (or a continuation of the entity).
6627
6650
  * @param offset The current offset.
6628
6651
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
6629
6652
  */
6630
- EntityDecoder.prototype.stateNumericStart = function (str, offset) {
6631
- if (offset >= str.length) {
6653
+ stateNumericStart(input, offset) {
6654
+ if (offset >= input.length) {
6632
6655
  return -1;
6633
6656
  }
6634
- if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
6657
+ if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
6635
6658
  this.state = EntityDecoderState.NumericHex;
6636
6659
  this.consumed += 1;
6637
- return this.stateNumericHex(str, offset + 1);
6660
+ return this.stateNumericHex(input, offset + 1);
6638
6661
  }
6639
6662
  this.state = EntityDecoderState.NumericDecimal;
6640
- return this.stateNumericDecimal(str, offset);
6641
- };
6642
- EntityDecoder.prototype.addToNumericResult = function (str, start, end, base) {
6643
- if (start !== end) {
6644
- var digitCount = end - start;
6645
- this.result =
6646
- this.result * Math.pow(base, digitCount) +
6647
- parseInt(str.substr(start, digitCount), base);
6648
- this.consumed += digitCount;
6649
- }
6650
- };
6663
+ return this.stateNumericDecimal(input, offset);
6664
+ }
6651
6665
  /**
6652
6666
  * Parses a hexadecimal numeric entity.
6653
6667
  *
6654
6668
  * Equivalent to the `Hexademical character reference state` in the HTML spec.
6655
6669
  *
6656
- * @param str The string containing the entity (or a continuation of the entity).
6670
+ * @param input The string containing the entity (or a continuation of the entity).
6657
6671
  * @param offset The current offset.
6658
6672
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
6659
6673
  */
6660
- EntityDecoder.prototype.stateNumericHex = function (str, offset) {
6661
- var startIdx = offset;
6662
- while (offset < str.length) {
6663
- var char = str.charCodeAt(offset);
6674
+ stateNumericHex(input, offset) {
6675
+ while (offset < input.length) {
6676
+ const char = input.charCodeAt(offset);
6664
6677
  if (isNumber(char) || isHexadecimalCharacter(char)) {
6665
- offset += 1;
6678
+ // Convert hex digit to value (0-15); 'a'/'A' -> 10.
6679
+ const digit = char <= CharCodes.NINE
6680
+ ? char - CharCodes.ZERO
6681
+ : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;
6682
+ this.result = this.result * 16 + digit;
6683
+ this.consumed++;
6684
+ offset++;
6666
6685
  }
6667
6686
  else {
6668
- this.addToNumericResult(str, startIdx, offset, 16);
6669
6687
  return this.emitNumericEntity(char, 3);
6670
6688
  }
6671
6689
  }
6672
- this.addToNumericResult(str, startIdx, offset, 16);
6673
- return -1;
6674
- };
6690
+ return -1; // Incomplete entity
6691
+ }
6675
6692
  /**
6676
6693
  * Parses a decimal numeric entity.
6677
6694
  *
6678
6695
  * Equivalent to the `Decimal character reference state` in the HTML spec.
6679
6696
  *
6680
- * @param str The string containing the entity (or a continuation of the entity).
6697
+ * @param input The string containing the entity (or a continuation of the entity).
6681
6698
  * @param offset The current offset.
6682
6699
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
6683
6700
  */
6684
- EntityDecoder.prototype.stateNumericDecimal = function (str, offset) {
6685
- var startIdx = offset;
6686
- while (offset < str.length) {
6687
- var char = str.charCodeAt(offset);
6701
+ stateNumericDecimal(input, offset) {
6702
+ while (offset < input.length) {
6703
+ const char = input.charCodeAt(offset);
6688
6704
  if (isNumber(char)) {
6689
- offset += 1;
6705
+ this.result = this.result * 10 + (char - CharCodes.ZERO);
6706
+ this.consumed++;
6707
+ offset++;
6690
6708
  }
6691
6709
  else {
6692
- this.addToNumericResult(str, startIdx, offset, 10);
6693
6710
  return this.emitNumericEntity(char, 2);
6694
6711
  }
6695
6712
  }
6696
- this.addToNumericResult(str, startIdx, offset, 10);
6697
- return -1;
6698
- };
6713
+ return -1; // Incomplete entity
6714
+ }
6699
6715
  /**
6700
6716
  * Validate and emit a numeric entity.
6701
6717
  *
@@ -6709,7 +6725,7 @@ var decode_codepoint = {};
6709
6725
  * was consumed.
6710
6726
  * @returns The number of characters that were consumed.
6711
6727
  */
6712
- EntityDecoder.prototype.emitNumericEntity = function (lastCp, expectedLength) {
6728
+ emitNumericEntity(lastCp, expectedLength) {
6713
6729
  var _a;
6714
6730
  // Ensure we consumed at least one digit.
6715
6731
  if (this.consumed <= expectedLength) {
@@ -6731,23 +6747,77 @@ var decode_codepoint = {};
6731
6747
  this.errors.validateNumericCharacterReference(this.result);
6732
6748
  }
6733
6749
  return this.consumed;
6734
- };
6750
+ }
6735
6751
  /**
6736
6752
  * Parses a named entity.
6737
6753
  *
6738
6754
  * Equivalent to the `Named character reference state` in the HTML spec.
6739
6755
  *
6740
- * @param str The string containing the entity (or a continuation of the entity).
6756
+ * @param input The string containing the entity (or a continuation of the entity).
6741
6757
  * @param offset The current offset.
6742
6758
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
6743
6759
  */
6744
- EntityDecoder.prototype.stateNamedEntity = function (str, offset) {
6745
- var decodeTree = this.decodeTree;
6746
- var current = decodeTree[this.treeIndex];
6747
- // The mask is the number of bytes of the value, including the current byte.
6748
- var valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
6749
- for (; offset < str.length; offset++, this.excess++) {
6750
- var char = str.charCodeAt(offset);
6760
+ stateNamedEntity(input, offset) {
6761
+ const { decodeTree } = this;
6762
+ let current = decodeTree[this.treeIndex];
6763
+ // The length is the number of bytes of the value, including the current byte.
6764
+ let valueLength = (current & bin_trie_flags_js_1.BinTrieFlags.VALUE_LENGTH) >> 14;
6765
+ while (offset < input.length) {
6766
+ // Handle compact runs (possibly inline): valueLength == 0 and SEMI_REQUIRED bit set.
6767
+ if (valueLength === 0 && (current & bin_trie_flags_js_1.BinTrieFlags.FLAG13) !== 0) {
6768
+ const runLength = (current & bin_trie_flags_js_1.BinTrieFlags.BRANCH_LENGTH) >> 7; /* 2..63 */
6769
+ // If we are starting a run, check the first char.
6770
+ if (this.runConsumed === 0) {
6771
+ const firstChar = current & bin_trie_flags_js_1.BinTrieFlags.JUMP_TABLE;
6772
+ if (input.charCodeAt(offset) !== firstChar) {
6773
+ return this.result === 0
6774
+ ? 0
6775
+ : this.emitNotTerminatedNamedEntity();
6776
+ }
6777
+ offset++;
6778
+ this.excess++;
6779
+ this.runConsumed++;
6780
+ }
6781
+ // Check remaining characters in the run.
6782
+ while (this.runConsumed < runLength) {
6783
+ if (offset >= input.length) {
6784
+ return -1;
6785
+ }
6786
+ const charIndexInPacked = this.runConsumed - 1;
6787
+ const packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];
6788
+ const expectedChar = charIndexInPacked % 2 === 0
6789
+ ? packedWord & 0xff
6790
+ : (packedWord >> 8) & 0xff;
6791
+ if (input.charCodeAt(offset) !== expectedChar) {
6792
+ this.runConsumed = 0;
6793
+ return this.result === 0
6794
+ ? 0
6795
+ : this.emitNotTerminatedNamedEntity();
6796
+ }
6797
+ offset++;
6798
+ this.excess++;
6799
+ this.runConsumed++;
6800
+ }
6801
+ this.runConsumed = 0;
6802
+ this.treeIndex += 1 + (runLength >> 1);
6803
+ current = decodeTree[this.treeIndex];
6804
+ valueLength = (current & bin_trie_flags_js_1.BinTrieFlags.VALUE_LENGTH) >> 14;
6805
+ }
6806
+ if (offset >= input.length)
6807
+ break;
6808
+ const char = input.charCodeAt(offset);
6809
+ /*
6810
+ * Implicit semicolon handling for nodes that require a semicolon but
6811
+ * don't have an explicit ';' branch stored in the trie. If we have
6812
+ * a value on the current node, it requires a semicolon, and the
6813
+ * current input character is a semicolon, emit the entity using the
6814
+ * current node (without descending further).
6815
+ */
6816
+ if (char === CharCodes.SEMI &&
6817
+ valueLength !== 0 &&
6818
+ (current & bin_trie_flags_js_1.BinTrieFlags.FLAG13) !== 0) {
6819
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
6820
+ }
6751
6821
  this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
6752
6822
  if (this.treeIndex < 0) {
6753
6823
  return this.result === 0 ||
@@ -6761,7 +6831,7 @@ var decode_codepoint = {};
6761
6831
  : this.emitNotTerminatedNamedEntity();
6762
6832
  }
6763
6833
  current = decodeTree[this.treeIndex];
6764
- valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
6834
+ valueLength = (current & bin_trie_flags_js_1.BinTrieFlags.VALUE_LENGTH) >> 14;
6765
6835
  // If the branch is a value, store it and continue
6766
6836
  if (valueLength !== 0) {
6767
6837
  // If the entity is terminated by a semicolon, we are done.
@@ -6769,28 +6839,32 @@ var decode_codepoint = {};
6769
6839
  return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
6770
6840
  }
6771
6841
  // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.
6772
- if (this.decodeMode !== DecodingMode.Strict) {
6842
+ if (this.decodeMode !== DecodingMode.Strict &&
6843
+ (current & bin_trie_flags_js_1.BinTrieFlags.FLAG13) === 0) {
6773
6844
  this.result = this.treeIndex;
6774
6845
  this.consumed += this.excess;
6775
6846
  this.excess = 0;
6776
6847
  }
6777
6848
  }
6849
+ // Increment offset & excess for next iteration
6850
+ offset++;
6851
+ this.excess++;
6778
6852
  }
6779
6853
  return -1;
6780
- };
6854
+ }
6781
6855
  /**
6782
6856
  * Emit a named entity that was not terminated with a semicolon.
6783
6857
  *
6784
6858
  * @returns The number of characters consumed.
6785
6859
  */
6786
- EntityDecoder.prototype.emitNotTerminatedNamedEntity = function () {
6860
+ emitNotTerminatedNamedEntity() {
6787
6861
  var _a;
6788
- var _b = this, result = _b.result, decodeTree = _b.decodeTree;
6789
- var valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
6862
+ const { result, decodeTree } = this;
6863
+ const valueLength = (decodeTree[result] & bin_trie_flags_js_1.BinTrieFlags.VALUE_LENGTH) >> 14;
6790
6864
  this.emitNamedEntityData(result, valueLength, this.consumed);
6791
6865
  (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();
6792
6866
  return this.consumed;
6793
- };
6867
+ }
6794
6868
  /**
6795
6869
  * Emit a named entity.
6796
6870
  *
@@ -6800,17 +6874,18 @@ var decode_codepoint = {};
6800
6874
  *
6801
6875
  * @returns The number of characters consumed.
6802
6876
  */
6803
- EntityDecoder.prototype.emitNamedEntityData = function (result, valueLength, consumed) {
6804
- var decodeTree = this.decodeTree;
6877
+ emitNamedEntityData(result, valueLength, consumed) {
6878
+ const { decodeTree } = this;
6805
6879
  this.emitCodePoint(valueLength === 1
6806
- ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH
6880
+ ? decodeTree[result] &
6881
+ ~(bin_trie_flags_js_1.BinTrieFlags.VALUE_LENGTH | bin_trie_flags_js_1.BinTrieFlags.FLAG13)
6807
6882
  : decodeTree[result + 1], consumed);
6808
6883
  if (valueLength === 3) {
6809
6884
  // For multi-byte values, we need to emit the second byte.
6810
6885
  this.emitCodePoint(decodeTree[result + 2], consumed);
6811
6886
  }
6812
6887
  return consumed;
6813
- };
6888
+ }
6814
6889
  /**
6815
6890
  * Signal to the parser that the end of the input was reached.
6816
6891
  *
@@ -6818,7 +6893,7 @@ var decode_codepoint = {};
6818
6893
  *
6819
6894
  * @returns The number of characters consumed.
6820
6895
  */
6821
- EntityDecoder.prototype.end = function () {
6896
+ end() {
6822
6897
  var _a;
6823
6898
  switch (this.state) {
6824
6899
  case EntityDecoderState.NamedEntity: {
@@ -6845,9 +6920,8 @@ var decode_codepoint = {};
6845
6920
  return 0;
6846
6921
  }
6847
6922
  }
6848
- };
6849
- return EntityDecoder;
6850
- }());
6923
+ }
6924
+ }
6851
6925
  exports.EntityDecoder = EntityDecoder;
6852
6926
  /**
6853
6927
  * Creates a function that decodes entities in a string.
@@ -6856,28 +6930,28 @@ var decode_codepoint = {};
6856
6930
  * @returns A function that decodes entities in a string.
6857
6931
  */
6858
6932
  function getDecoder(decodeTree) {
6859
- var ret = "";
6860
- var decoder = new EntityDecoder(decodeTree, function (str) { return (ret += (0, decode_codepoint_js_1.fromCodePoint)(str)); });
6861
- return function decodeWithTrie(str, decodeMode) {
6862
- var lastIndex = 0;
6863
- var offset = 0;
6864
- while ((offset = str.indexOf("&", offset)) >= 0) {
6865
- ret += str.slice(lastIndex, offset);
6933
+ let returnValue = "";
6934
+ const decoder = new EntityDecoder(decodeTree, (data) => (returnValue += (0, decode_codepoint_js_1.fromCodePoint)(data)));
6935
+ return function decodeWithTrie(input, decodeMode) {
6936
+ let lastIndex = 0;
6937
+ let offset = 0;
6938
+ while ((offset = input.indexOf("&", offset)) >= 0) {
6939
+ returnValue += input.slice(lastIndex, offset);
6866
6940
  decoder.startEntity(decodeMode);
6867
- var len = decoder.write(str,
6941
+ const length = decoder.write(input,
6868
6942
  // Skip the "&"
6869
6943
  offset + 1);
6870
- if (len < 0) {
6944
+ if (length < 0) {
6871
6945
  lastIndex = offset + decoder.end();
6872
6946
  break;
6873
6947
  }
6874
- lastIndex = offset + len;
6875
- // If `len` is 0, skip the current `&` and continue.
6876
- offset = len === 0 ? lastIndex + 1 : lastIndex;
6948
+ lastIndex = offset + length;
6949
+ // If `length` is 0, skip the current `&` and continue.
6950
+ offset = length === 0 ? lastIndex + 1 : lastIndex;
6877
6951
  }
6878
- var result = ret + str.slice(lastIndex);
6952
+ const result = returnValue + input.slice(lastIndex);
6879
6953
  // Make sure we don't keep a reference to the final string.
6880
- ret = "";
6954
+ returnValue = "";
6881
6955
  return result;
6882
6956
  };
6883
6957
  }
@@ -6891,1017 +6965,892 @@ var decode_codepoint = {};
6891
6965
  * @param char The current character.
6892
6966
  * @returns The index of the next node, or -1 if no branch is taken.
6893
6967
  */
6894
- function determineBranch(decodeTree, current, nodeIdx, char) {
6895
- var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
6896
- var jumpOffset = current & BinTrieFlags.JUMP_TABLE;
6968
+ function determineBranch(decodeTree, current, nodeIndex, char) {
6969
+ const branchCount = (current & bin_trie_flags_js_1.BinTrieFlags.BRANCH_LENGTH) >> 7;
6970
+ const jumpOffset = current & bin_trie_flags_js_1.BinTrieFlags.JUMP_TABLE;
6897
6971
  // Case 1: Single branch encoded in jump offset
6898
6972
  if (branchCount === 0) {
6899
- return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
6973
+ return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;
6900
6974
  }
6901
6975
  // Case 2: Multiple branches encoded in jump table
6902
6976
  if (jumpOffset) {
6903
- var value = char - jumpOffset;
6977
+ const value = char - jumpOffset;
6904
6978
  return value < 0 || value >= branchCount
6905
6979
  ? -1
6906
- : decodeTree[nodeIdx + value] - 1;
6980
+ : decodeTree[nodeIndex + value] - 1;
6907
6981
  }
6908
- // Case 3: Multiple branches encoded in dictionary
6909
- // Binary search for the character.
6910
- var lo = nodeIdx;
6911
- var hi = lo + branchCount - 1;
6982
+ // Case 3: Multiple branches encoded in packed dictionary (two keys per uint16)
6983
+ const packedKeySlots = (branchCount + 1) >> 1;
6984
+ /*
6985
+ * Treat packed keys as a virtual sorted array of length `branchCount`.
6986
+ * Key(i) = low byte for even i, high byte for odd i in slot i>>1.
6987
+ */
6988
+ let lo = 0;
6989
+ let hi = branchCount - 1;
6912
6990
  while (lo <= hi) {
6913
- var mid = (lo + hi) >>> 1;
6914
- var midVal = decodeTree[mid];
6915
- if (midVal < char) {
6991
+ const mid = (lo + hi) >>> 1;
6992
+ const slot = mid >> 1;
6993
+ const packed = decodeTree[nodeIndex + slot];
6994
+ const midKey = (packed >> ((mid & 1) * 8)) & 0xff;
6995
+ if (midKey < char) {
6916
6996
  lo = mid + 1;
6917
6997
  }
6918
- else if (midVal > char) {
6998
+ else if (midKey > char) {
6919
6999
  hi = mid - 1;
6920
7000
  }
6921
7001
  else {
6922
- return decodeTree[mid + branchCount];
7002
+ return decodeTree[nodeIndex + packedKeySlots + mid];
6923
7003
  }
6924
7004
  }
6925
7005
  return -1;
6926
7006
  }
6927
- exports.determineBranch = determineBranch;
6928
- var htmlDecoder = getDecoder(decode_data_html_js_1.default);
6929
- var xmlDecoder = getDecoder(decode_data_xml_js_1.default);
7007
+ const htmlDecoder = /* #__PURE__ */ getDecoder(decode_data_html_js_1.htmlDecodeTree);
7008
+ const xmlDecoder = /* #__PURE__ */ getDecoder(decode_data_xml_js_1.xmlDecodeTree);
6930
7009
  /**
6931
7010
  * Decodes an HTML string.
6932
7011
  *
6933
- * @param str The string to decode.
7012
+ * @param htmlString The string to decode.
6934
7013
  * @param mode The decoding mode.
6935
7014
  * @returns The decoded string.
6936
7015
  */
6937
- function decodeHTML(str, mode) {
6938
- if (mode === void 0) { mode = DecodingMode.Legacy; }
6939
- return htmlDecoder(str, mode);
7016
+ function decodeHTML(htmlString, mode = DecodingMode.Legacy) {
7017
+ return htmlDecoder(htmlString, mode);
6940
7018
  }
6941
- exports.decodeHTML = decodeHTML;
6942
7019
  /**
6943
7020
  * Decodes an HTML string in an attribute.
6944
7021
  *
6945
- * @param str The string to decode.
7022
+ * @param htmlAttribute The string to decode.
6946
7023
  * @returns The decoded string.
6947
7024
  */
6948
- function decodeHTMLAttribute(str) {
6949
- return htmlDecoder(str, DecodingMode.Attribute);
7025
+ function decodeHTMLAttribute(htmlAttribute) {
7026
+ return htmlDecoder(htmlAttribute, DecodingMode.Attribute);
6950
7027
  }
6951
- exports.decodeHTMLAttribute = decodeHTMLAttribute;
6952
7028
  /**
6953
7029
  * Decodes an HTML string, requiring all entities to be terminated by a semicolon.
6954
7030
  *
6955
- * @param str The string to decode.
7031
+ * @param htmlString The string to decode.
6956
7032
  * @returns The decoded string.
6957
7033
  */
6958
- function decodeHTMLStrict(str) {
6959
- return htmlDecoder(str, DecodingMode.Strict);
7034
+ function decodeHTMLStrict(htmlString) {
7035
+ return htmlDecoder(htmlString, DecodingMode.Strict);
6960
7036
  }
6961
- exports.decodeHTMLStrict = decodeHTMLStrict;
6962
7037
  /**
6963
7038
  * Decodes an XML string, requiring all entities to be terminated by a semicolon.
6964
7039
  *
6965
- * @param str The string to decode.
7040
+ * @param xmlString The string to decode.
6966
7041
  * @returns The decoded string.
6967
7042
  */
6968
- function decodeXML(str) {
6969
- return xmlDecoder(str, DecodingMode.Strict);
7043
+ function decodeXML(xmlString) {
7044
+ return xmlDecoder(xmlString, DecodingMode.Strict);
6970
7045
  }
6971
- exports.decodeXML = decodeXML;
7046
+ var decode_codepoint_js_2 = decodeCodepoint;
7047
+ Object.defineProperty(exports, "decodeCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.decodeCodePoint; } });
7048
+ Object.defineProperty(exports, "fromCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.fromCodePoint; } });
7049
+ Object.defineProperty(exports, "replaceCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.replaceCodePoint; } });
7050
+ // Re-export for use by eg. htmlparser2
7051
+ var decode_data_html_js_2 = decodeDataHtml$1;
7052
+ Object.defineProperty(exports, "htmlDecodeTree", { enumerable: true, get: function () { return decode_data_html_js_2.htmlDecodeTree; } });
7053
+ var decode_data_xml_js_2 = decodeDataXml$1;
7054
+ Object.defineProperty(exports, "xmlDecodeTree", { enumerable: true, get: function () { return decode_data_xml_js_2.xmlDecodeTree; } });
6972
7055
 
6973
- } (decode));
6974
-
6975
- (function (exports) {
6976
- Object.defineProperty(exports, "__esModule", { value: true });
6977
- exports.QuoteType = void 0;
6978
- var decode_js_1 = decode;
6979
- var CharCodes;
6980
- (function (CharCodes) {
6981
- CharCodes[CharCodes["Tab"] = 9] = "Tab";
6982
- CharCodes[CharCodes["NewLine"] = 10] = "NewLine";
6983
- CharCodes[CharCodes["FormFeed"] = 12] = "FormFeed";
6984
- CharCodes[CharCodes["CarriageReturn"] = 13] = "CarriageReturn";
6985
- CharCodes[CharCodes["Space"] = 32] = "Space";
6986
- CharCodes[CharCodes["ExclamationMark"] = 33] = "ExclamationMark";
6987
- CharCodes[CharCodes["Number"] = 35] = "Number";
6988
- CharCodes[CharCodes["Amp"] = 38] = "Amp";
6989
- CharCodes[CharCodes["SingleQuote"] = 39] = "SingleQuote";
6990
- CharCodes[CharCodes["DoubleQuote"] = 34] = "DoubleQuote";
6991
- CharCodes[CharCodes["Dash"] = 45] = "Dash";
6992
- CharCodes[CharCodes["Slash"] = 47] = "Slash";
6993
- CharCodes[CharCodes["Zero"] = 48] = "Zero";
6994
- CharCodes[CharCodes["Nine"] = 57] = "Nine";
6995
- CharCodes[CharCodes["Semi"] = 59] = "Semi";
6996
- CharCodes[CharCodes["Lt"] = 60] = "Lt";
6997
- CharCodes[CharCodes["Eq"] = 61] = "Eq";
6998
- CharCodes[CharCodes["Gt"] = 62] = "Gt";
6999
- CharCodes[CharCodes["Questionmark"] = 63] = "Questionmark";
7000
- CharCodes[CharCodes["UpperA"] = 65] = "UpperA";
7001
- CharCodes[CharCodes["LowerA"] = 97] = "LowerA";
7002
- CharCodes[CharCodes["UpperF"] = 70] = "UpperF";
7003
- CharCodes[CharCodes["LowerF"] = 102] = "LowerF";
7004
- CharCodes[CharCodes["UpperZ"] = 90] = "UpperZ";
7005
- CharCodes[CharCodes["LowerZ"] = 122] = "LowerZ";
7006
- CharCodes[CharCodes["LowerX"] = 120] = "LowerX";
7007
- CharCodes[CharCodes["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
7008
- })(CharCodes || (CharCodes = {}));
7009
- /** All the states the tokenizer can be in. */
7010
- var State;
7011
- (function (State) {
7012
- State[State["Text"] = 1] = "Text";
7013
- State[State["BeforeTagName"] = 2] = "BeforeTagName";
7014
- State[State["InTagName"] = 3] = "InTagName";
7015
- State[State["InSelfClosingTag"] = 4] = "InSelfClosingTag";
7016
- State[State["BeforeClosingTagName"] = 5] = "BeforeClosingTagName";
7017
- State[State["InClosingTagName"] = 6] = "InClosingTagName";
7018
- State[State["AfterClosingTagName"] = 7] = "AfterClosingTagName";
7019
- // Attributes
7020
- State[State["BeforeAttributeName"] = 8] = "BeforeAttributeName";
7021
- State[State["InAttributeName"] = 9] = "InAttributeName";
7022
- State[State["AfterAttributeName"] = 10] = "AfterAttributeName";
7023
- State[State["BeforeAttributeValue"] = 11] = "BeforeAttributeValue";
7024
- State[State["InAttributeValueDq"] = 12] = "InAttributeValueDq";
7025
- State[State["InAttributeValueSq"] = 13] = "InAttributeValueSq";
7026
- State[State["InAttributeValueNq"] = 14] = "InAttributeValueNq";
7027
- // Declarations
7028
- State[State["BeforeDeclaration"] = 15] = "BeforeDeclaration";
7029
- State[State["InDeclaration"] = 16] = "InDeclaration";
7030
- // Processing instructions
7031
- State[State["InProcessingInstruction"] = 17] = "InProcessingInstruction";
7032
- // Comments & CDATA
7033
- State[State["BeforeComment"] = 18] = "BeforeComment";
7034
- State[State["CDATASequence"] = 19] = "CDATASequence";
7035
- State[State["InSpecialComment"] = 20] = "InSpecialComment";
7036
- State[State["InCommentLike"] = 21] = "InCommentLike";
7037
- // Special tags
7038
- State[State["BeforeSpecialS"] = 22] = "BeforeSpecialS";
7039
- State[State["SpecialStartSequence"] = 23] = "SpecialStartSequence";
7040
- State[State["InSpecialTag"] = 24] = "InSpecialTag";
7041
- State[State["BeforeEntity"] = 25] = "BeforeEntity";
7042
- State[State["BeforeNumericEntity"] = 26] = "BeforeNumericEntity";
7043
- State[State["InNamedEntity"] = 27] = "InNamedEntity";
7044
- State[State["InNumericEntity"] = 28] = "InNumericEntity";
7045
- State[State["InHexEntity"] = 29] = "InHexEntity";
7046
- })(State || (State = {}));
7047
- function isWhitespace(c) {
7048
- return (c === CharCodes.Space ||
7049
- c === CharCodes.NewLine ||
7050
- c === CharCodes.Tab ||
7051
- c === CharCodes.FormFeed ||
7052
- c === CharCodes.CarriageReturn);
7053
- }
7054
- function isEndOfTagSection(c) {
7055
- return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);
7056
- }
7057
- function isNumber(c) {
7058
- return c >= CharCodes.Zero && c <= CharCodes.Nine;
7059
- }
7060
- function isASCIIAlpha(c) {
7061
- return ((c >= CharCodes.LowerA && c <= CharCodes.LowerZ) ||
7062
- (c >= CharCodes.UpperA && c <= CharCodes.UpperZ));
7063
- }
7064
- function isHexDigit(c) {
7065
- return ((c >= CharCodes.UpperA && c <= CharCodes.UpperF) ||
7066
- (c >= CharCodes.LowerA && c <= CharCodes.LowerF));
7067
- }
7068
- var QuoteType;
7069
- (function (QuoteType) {
7070
- QuoteType[QuoteType["NoValue"] = 0] = "NoValue";
7071
- QuoteType[QuoteType["Unquoted"] = 1] = "Unquoted";
7072
- QuoteType[QuoteType["Single"] = 2] = "Single";
7073
- QuoteType[QuoteType["Double"] = 3] = "Double";
7074
- })(QuoteType = exports.QuoteType || (exports.QuoteType = {}));
7075
- /**
7076
- * Sequences used to match longer strings.
7077
- *
7078
- * We don't have `Script`, `Style`, or `Title` here. Instead, we re-use the *End
7079
- * sequences with an increased offset.
7080
- */
7081
- var Sequences = {
7082
- Cdata: new Uint8Array([0x43, 0x44, 0x41, 0x54, 0x41, 0x5b]),
7083
- CdataEnd: new Uint8Array([0x5d, 0x5d, 0x3e]),
7084
- CommentEnd: new Uint8Array([0x2d, 0x2d, 0x3e]),
7085
- ScriptEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74]),
7086
- StyleEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65]),
7087
- TitleEnd: new Uint8Array([0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65]), // `</title`
7088
- };
7089
- var Tokenizer = /** @class */ (function () {
7090
- function Tokenizer(_a, cbs) {
7091
- var _b = _a.xmlMode, xmlMode = _b === void 0 ? false : _b, _c = _a.decodeEntities, decodeEntities = _c === void 0 ? true : _c;
7092
- this.cbs = cbs;
7093
- /** The current state the tokenizer is in. */
7094
- this.state = State.Text;
7095
- /** The read buffer. */
7096
- this.buffer = "";
7097
- /** The beginning of the section that is currently being read. */
7098
- this.sectionStart = 0;
7099
- /** The index within the buffer that we are currently looking at. */
7100
- this.index = 0;
7101
- /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */
7102
- this.baseState = State.Text;
7103
- /** For special parsing behavior inside of script and style tags. */
7104
- this.isSpecial = false;
7105
- /** Indicates whether the tokenizer has been paused. */
7106
- this.running = true;
7107
- /** The offset of the current buffer. */
7108
- this.offset = 0;
7109
- this.currentSequence = undefined;
7110
- this.sequenceIndex = 0;
7111
- this.trieIndex = 0;
7112
- this.trieCurrent = 0;
7113
- /** For named entities, the index of the value. For numeric entities, the code point. */
7114
- this.entityResult = 0;
7115
- this.entityExcess = 0;
7116
- this.xmlMode = xmlMode;
7117
- this.decodeEntities = decodeEntities;
7118
- this.entityTrie = xmlMode ? decode_js_1.xmlDecodeTree : decode_js_1.htmlDecodeTree;
7119
- }
7120
- Tokenizer.prototype.reset = function () {
7121
- this.state = State.Text;
7122
- this.buffer = "";
7123
- this.sectionStart = 0;
7124
- this.index = 0;
7125
- this.baseState = State.Text;
7126
- this.currentSequence = undefined;
7127
- this.running = true;
7128
- this.offset = 0;
7129
- };
7130
- Tokenizer.prototype.write = function (chunk) {
7131
- this.offset += this.buffer.length;
7132
- this.buffer = chunk;
7133
- this.parse();
7134
- };
7135
- Tokenizer.prototype.end = function () {
7136
- if (this.running)
7137
- this.finish();
7138
- };
7139
- Tokenizer.prototype.pause = function () {
7140
- this.running = false;
7141
- };
7142
- Tokenizer.prototype.resume = function () {
7143
- this.running = true;
7144
- if (this.index < this.buffer.length + this.offset) {
7145
- this.parse();
7146
- }
7147
- };
7148
- /**
7149
- * The current index within all of the written data.
7150
- */
7151
- Tokenizer.prototype.getIndex = function () {
7152
- return this.index;
7153
- };
7154
- /**
7155
- * The start of the current section.
7156
- */
7157
- Tokenizer.prototype.getSectionStart = function () {
7158
- return this.sectionStart;
7159
- };
7160
- Tokenizer.prototype.stateText = function (c) {
7161
- if (c === CharCodes.Lt ||
7162
- (!this.decodeEntities && this.fastForwardTo(CharCodes.Lt))) {
7163
- if (this.index > this.sectionStart) {
7164
- this.cbs.ontext(this.sectionStart, this.index);
7165
- }
7166
- this.state = State.BeforeTagName;
7167
- this.sectionStart = this.index;
7168
- }
7169
- else if (this.decodeEntities && c === CharCodes.Amp) {
7170
- this.state = State.BeforeEntity;
7171
- }
7172
- };
7173
- Tokenizer.prototype.stateSpecialStartSequence = function (c) {
7174
- var isEnd = this.sequenceIndex === this.currentSequence.length;
7175
- var isMatch = isEnd
7176
- ? // If we are at the end of the sequence, make sure the tag name has ended
7177
- isEndOfTagSection(c)
7178
- : // Otherwise, do a case-insensitive comparison
7179
- (c | 0x20) === this.currentSequence[this.sequenceIndex];
7180
- if (!isMatch) {
7181
- this.isSpecial = false;
7182
- }
7183
- else if (!isEnd) {
7184
- this.sequenceIndex++;
7185
- return;
7186
- }
7187
- this.sequenceIndex = 0;
7188
- this.state = State.InTagName;
7189
- this.stateInTagName(c);
7190
- };
7191
- /** Look for an end tag. For <title> tags, also decode entities. */
7192
- Tokenizer.prototype.stateInSpecialTag = function (c) {
7193
- if (this.sequenceIndex === this.currentSequence.length) {
7194
- if (c === CharCodes.Gt || isWhitespace(c)) {
7195
- var endOfText = this.index - this.currentSequence.length;
7196
- if (this.sectionStart < endOfText) {
7197
- // Spoof the index so that reported locations match up.
7198
- var actualIndex = this.index;
7199
- this.index = endOfText;
7200
- this.cbs.ontext(this.sectionStart, endOfText);
7201
- this.index = actualIndex;
7202
- }
7203
- this.isSpecial = false;
7204
- this.sectionStart = endOfText + 2; // Skip over the `</`
7205
- this.stateInClosingTagName(c);
7206
- return; // We are done; skip the rest of the function.
7207
- }
7208
- this.sequenceIndex = 0;
7209
- }
7210
- if ((c | 0x20) === this.currentSequence[this.sequenceIndex]) {
7211
- this.sequenceIndex += 1;
7212
- }
7213
- else if (this.sequenceIndex === 0) {
7214
- if (this.currentSequence === Sequences.TitleEnd) {
7215
- // We have to parse entities in <title> tags.
7216
- if (this.decodeEntities && c === CharCodes.Amp) {
7217
- this.state = State.BeforeEntity;
7218
- }
7219
- }
7220
- else if (this.fastForwardTo(CharCodes.Lt)) {
7221
- // Outside of <title> tags, we can fast-forward.
7222
- this.sequenceIndex = 1;
7223
- }
7224
- }
7225
- else {
7226
- // If we see a `<`, set the sequence index to 1; useful for eg. `<</script>`.
7227
- this.sequenceIndex = Number(c === CharCodes.Lt);
7228
- }
7229
- };
7230
- Tokenizer.prototype.stateCDATASequence = function (c) {
7231
- if (c === Sequences.Cdata[this.sequenceIndex]) {
7232
- if (++this.sequenceIndex === Sequences.Cdata.length) {
7233
- this.state = State.InCommentLike;
7234
- this.currentSequence = Sequences.CdataEnd;
7235
- this.sequenceIndex = 0;
7236
- this.sectionStart = this.index + 1;
7237
- }
7238
- }
7239
- else {
7240
- this.sequenceIndex = 0;
7241
- this.state = State.InDeclaration;
7242
- this.stateInDeclaration(c); // Reconsume the character
7243
- }
7244
- };
7245
- /**
7246
- * When we wait for one specific character, we can speed things up
7247
- * by skipping through the buffer until we find it.
7248
- *
7249
- * @returns Whether the character was found.
7250
- */
7251
- Tokenizer.prototype.fastForwardTo = function (c) {
7252
- while (++this.index < this.buffer.length + this.offset) {
7253
- if (this.buffer.charCodeAt(this.index - this.offset) === c) {
7254
- return true;
7255
- }
7256
- }
7257
- /*
7258
- * We increment the index at the end of the `parse` loop,
7259
- * so set it to `buffer.length - 1` here.
7260
- *
7261
- * TODO: Refactor `parse` to increment index before calling states.
7262
- */
7263
- this.index = this.buffer.length + this.offset - 1;
7264
- return false;
7265
- };
7266
- /**
7267
- * Comments and CDATA end with `-->` and `]]>`.
7268
- *
7269
- * Their common qualities are:
7270
- * - Their end sequences have a distinct character they start with.
7271
- * - That character is then repeated, so we have to check multiple repeats.
7272
- * - All characters but the start character of the sequence can be skipped.
7273
- */
7274
- Tokenizer.prototype.stateInCommentLike = function (c) {
7275
- if (c === this.currentSequence[this.sequenceIndex]) {
7276
- if (++this.sequenceIndex === this.currentSequence.length) {
7277
- if (this.currentSequence === Sequences.CdataEnd) {
7278
- this.cbs.oncdata(this.sectionStart, this.index, 2);
7279
- }
7280
- else {
7281
- this.cbs.oncomment(this.sectionStart, this.index, 2);
7282
- }
7283
- this.sequenceIndex = 0;
7284
- this.sectionStart = this.index + 1;
7285
- this.state = State.Text;
7286
- }
7287
- }
7288
- else if (this.sequenceIndex === 0) {
7289
- // Fast-forward to the first character of the sequence
7290
- if (this.fastForwardTo(this.currentSequence[0])) {
7291
- this.sequenceIndex = 1;
7292
- }
7293
- }
7294
- else if (c !== this.currentSequence[this.sequenceIndex - 1]) {
7295
- // Allow long sequences, eg. --->, ]]]>
7296
- this.sequenceIndex = 0;
7297
- }
7298
- };
7299
- /**
7300
- * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.
7301
- *
7302
- * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).
7303
- * We allow anything that wouldn't end the tag.
7304
- */
7305
- Tokenizer.prototype.isTagStartChar = function (c) {
7306
- return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
7307
- };
7308
- Tokenizer.prototype.startSpecial = function (sequence, offset) {
7309
- this.isSpecial = true;
7310
- this.currentSequence = sequence;
7311
- this.sequenceIndex = offset;
7312
- this.state = State.SpecialStartSequence;
7313
- };
7314
- Tokenizer.prototype.stateBeforeTagName = function (c) {
7315
- if (c === CharCodes.ExclamationMark) {
7316
- this.state = State.BeforeDeclaration;
7317
- this.sectionStart = this.index + 1;
7318
- }
7319
- else if (c === CharCodes.Questionmark) {
7320
- this.state = State.InProcessingInstruction;
7321
- this.sectionStart = this.index + 1;
7322
- }
7323
- else if (this.isTagStartChar(c)) {
7324
- var lower = c | 0x20;
7325
- this.sectionStart = this.index;
7326
- if (!this.xmlMode && lower === Sequences.TitleEnd[2]) {
7327
- this.startSpecial(Sequences.TitleEnd, 3);
7328
- }
7329
- else {
7330
- this.state =
7331
- !this.xmlMode && lower === Sequences.ScriptEnd[2]
7332
- ? State.BeforeSpecialS
7333
- : State.InTagName;
7334
- }
7335
- }
7336
- else if (c === CharCodes.Slash) {
7337
- this.state = State.BeforeClosingTagName;
7338
- }
7339
- else {
7340
- this.state = State.Text;
7341
- this.stateText(c);
7342
- }
7343
- };
7344
- Tokenizer.prototype.stateInTagName = function (c) {
7345
- if (isEndOfTagSection(c)) {
7346
- this.cbs.onopentagname(this.sectionStart, this.index);
7347
- this.sectionStart = -1;
7348
- this.state = State.BeforeAttributeName;
7349
- this.stateBeforeAttributeName(c);
7350
- }
7351
- };
7352
- Tokenizer.prototype.stateBeforeClosingTagName = function (c) {
7353
- if (isWhitespace(c)) ;
7354
- else if (c === CharCodes.Gt) {
7355
- this.state = State.Text;
7356
- }
7357
- else {
7358
- this.state = this.isTagStartChar(c)
7359
- ? State.InClosingTagName
7360
- : State.InSpecialComment;
7361
- this.sectionStart = this.index;
7362
- }
7363
- };
7364
- Tokenizer.prototype.stateInClosingTagName = function (c) {
7365
- if (c === CharCodes.Gt || isWhitespace(c)) {
7366
- this.cbs.onclosetag(this.sectionStart, this.index);
7367
- this.sectionStart = -1;
7368
- this.state = State.AfterClosingTagName;
7369
- this.stateAfterClosingTagName(c);
7370
- }
7371
- };
7372
- Tokenizer.prototype.stateAfterClosingTagName = function (c) {
7373
- // Skip everything until ">"
7374
- if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
7375
- this.state = State.Text;
7376
- this.baseState = State.Text;
7377
- this.sectionStart = this.index + 1;
7378
- }
7379
- };
7380
- Tokenizer.prototype.stateBeforeAttributeName = function (c) {
7381
- if (c === CharCodes.Gt) {
7382
- this.cbs.onopentagend(this.index);
7383
- if (this.isSpecial) {
7384
- this.state = State.InSpecialTag;
7385
- this.sequenceIndex = 0;
7386
- }
7387
- else {
7388
- this.state = State.Text;
7389
- }
7390
- this.baseState = this.state;
7391
- this.sectionStart = this.index + 1;
7392
- }
7393
- else if (c === CharCodes.Slash) {
7394
- this.state = State.InSelfClosingTag;
7395
- }
7396
- else if (!isWhitespace(c)) {
7397
- this.state = State.InAttributeName;
7398
- this.sectionStart = this.index;
7399
- }
7400
- };
7401
- Tokenizer.prototype.stateInSelfClosingTag = function (c) {
7402
- if (c === CharCodes.Gt) {
7403
- this.cbs.onselfclosingtag(this.index);
7404
- this.state = State.Text;
7405
- this.baseState = State.Text;
7406
- this.sectionStart = this.index + 1;
7407
- this.isSpecial = false; // Reset special state, in case of self-closing special tags
7408
- }
7409
- else if (!isWhitespace(c)) {
7410
- this.state = State.BeforeAttributeName;
7411
- this.stateBeforeAttributeName(c);
7412
- }
7413
- };
7414
- Tokenizer.prototype.stateInAttributeName = function (c) {
7415
- if (c === CharCodes.Eq || isEndOfTagSection(c)) {
7416
- this.cbs.onattribname(this.sectionStart, this.index);
7417
- this.sectionStart = -1;
7418
- this.state = State.AfterAttributeName;
7419
- this.stateAfterAttributeName(c);
7420
- }
7421
- };
7422
- Tokenizer.prototype.stateAfterAttributeName = function (c) {
7423
- if (c === CharCodes.Eq) {
7424
- this.state = State.BeforeAttributeValue;
7425
- }
7426
- else if (c === CharCodes.Slash || c === CharCodes.Gt) {
7427
- this.cbs.onattribend(QuoteType.NoValue, this.index);
7428
- this.state = State.BeforeAttributeName;
7429
- this.stateBeforeAttributeName(c);
7430
- }
7431
- else if (!isWhitespace(c)) {
7432
- this.cbs.onattribend(QuoteType.NoValue, this.index);
7433
- this.state = State.InAttributeName;
7434
- this.sectionStart = this.index;
7435
- }
7436
- };
7437
- Tokenizer.prototype.stateBeforeAttributeValue = function (c) {
7438
- if (c === CharCodes.DoubleQuote) {
7439
- this.state = State.InAttributeValueDq;
7440
- this.sectionStart = this.index + 1;
7441
- }
7442
- else if (c === CharCodes.SingleQuote) {
7443
- this.state = State.InAttributeValueSq;
7444
- this.sectionStart = this.index + 1;
7445
- }
7446
- else if (!isWhitespace(c)) {
7447
- this.sectionStart = this.index;
7448
- this.state = State.InAttributeValueNq;
7449
- this.stateInAttributeValueNoQuotes(c); // Reconsume token
7450
- }
7451
- };
7452
- Tokenizer.prototype.handleInAttributeValue = function (c, quote) {
7453
- if (c === quote ||
7454
- (!this.decodeEntities && this.fastForwardTo(quote))) {
7455
- this.cbs.onattribdata(this.sectionStart, this.index);
7456
- this.sectionStart = -1;
7457
- this.cbs.onattribend(quote === CharCodes.DoubleQuote
7458
- ? QuoteType.Double
7459
- : QuoteType.Single, this.index);
7460
- this.state = State.BeforeAttributeName;
7461
- }
7462
- else if (this.decodeEntities && c === CharCodes.Amp) {
7463
- this.baseState = this.state;
7464
- this.state = State.BeforeEntity;
7465
- }
7466
- };
7467
- Tokenizer.prototype.stateInAttributeValueDoubleQuotes = function (c) {
7468
- this.handleInAttributeValue(c, CharCodes.DoubleQuote);
7469
- };
7470
- Tokenizer.prototype.stateInAttributeValueSingleQuotes = function (c) {
7471
- this.handleInAttributeValue(c, CharCodes.SingleQuote);
7472
- };
7473
- Tokenizer.prototype.stateInAttributeValueNoQuotes = function (c) {
7474
- if (isWhitespace(c) || c === CharCodes.Gt) {
7475
- this.cbs.onattribdata(this.sectionStart, this.index);
7476
- this.sectionStart = -1;
7477
- this.cbs.onattribend(QuoteType.Unquoted, this.index);
7478
- this.state = State.BeforeAttributeName;
7479
- this.stateBeforeAttributeName(c);
7480
- }
7481
- else if (this.decodeEntities && c === CharCodes.Amp) {
7482
- this.baseState = this.state;
7483
- this.state = State.BeforeEntity;
7484
- }
7485
- };
7486
- Tokenizer.prototype.stateBeforeDeclaration = function (c) {
7487
- if (c === CharCodes.OpeningSquareBracket) {
7488
- this.state = State.CDATASequence;
7489
- this.sequenceIndex = 0;
7490
- }
7491
- else {
7492
- this.state =
7493
- c === CharCodes.Dash
7494
- ? State.BeforeComment
7495
- : State.InDeclaration;
7496
- }
7497
- };
7498
- Tokenizer.prototype.stateInDeclaration = function (c) {
7499
- if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
7500
- this.cbs.ondeclaration(this.sectionStart, this.index);
7501
- this.state = State.Text;
7502
- this.sectionStart = this.index + 1;
7503
- }
7504
- };
7505
- Tokenizer.prototype.stateInProcessingInstruction = function (c) {
7506
- if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
7507
- this.cbs.onprocessinginstruction(this.sectionStart, this.index);
7508
- this.state = State.Text;
7509
- this.sectionStart = this.index + 1;
7510
- }
7511
- };
7512
- Tokenizer.prototype.stateBeforeComment = function (c) {
7513
- if (c === CharCodes.Dash) {
7514
- this.state = State.InCommentLike;
7515
- this.currentSequence = Sequences.CommentEnd;
7516
- // Allow short comments (eg. <!-->)
7517
- this.sequenceIndex = 2;
7518
- this.sectionStart = this.index + 1;
7519
- }
7520
- else {
7521
- this.state = State.InDeclaration;
7522
- }
7523
- };
7524
- Tokenizer.prototype.stateInSpecialComment = function (c) {
7525
- if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
7526
- this.cbs.oncomment(this.sectionStart, this.index, 0);
7527
- this.state = State.Text;
7528
- this.sectionStart = this.index + 1;
7529
- }
7530
- };
7531
- Tokenizer.prototype.stateBeforeSpecialS = function (c) {
7532
- var lower = c | 0x20;
7533
- if (lower === Sequences.ScriptEnd[3]) {
7534
- this.startSpecial(Sequences.ScriptEnd, 4);
7535
- }
7536
- else if (lower === Sequences.StyleEnd[3]) {
7537
- this.startSpecial(Sequences.StyleEnd, 4);
7538
- }
7539
- else {
7540
- this.state = State.InTagName;
7541
- this.stateInTagName(c); // Consume the token again
7542
- }
7543
- };
7544
- Tokenizer.prototype.stateBeforeEntity = function (c) {
7545
- // Start excess with 1 to include the '&'
7546
- this.entityExcess = 1;
7547
- this.entityResult = 0;
7548
- if (c === CharCodes.Number) {
7549
- this.state = State.BeforeNumericEntity;
7550
- }
7551
- else if (c === CharCodes.Amp) ;
7552
- else {
7553
- this.trieIndex = 0;
7554
- this.trieCurrent = this.entityTrie[0];
7555
- this.state = State.InNamedEntity;
7556
- this.stateInNamedEntity(c);
7557
- }
7558
- };
7559
- Tokenizer.prototype.stateInNamedEntity = function (c) {
7560
- this.entityExcess += 1;
7561
- this.trieIndex = (0, decode_js_1.determineBranch)(this.entityTrie, this.trieCurrent, this.trieIndex + 1, c);
7562
- if (this.trieIndex < 0) {
7563
- this.emitNamedEntity();
7564
- this.index--;
7565
- return;
7566
- }
7567
- this.trieCurrent = this.entityTrie[this.trieIndex];
7568
- var masked = this.trieCurrent & decode_js_1.BinTrieFlags.VALUE_LENGTH;
7569
- // If the branch is a value, store it and continue
7570
- if (masked) {
7571
- // The mask is the number of bytes of the value, including the current byte.
7572
- var valueLength = (masked >> 14) - 1;
7573
- // If we have a legacy entity while parsing strictly, just skip the number of bytes
7574
- if (!this.allowLegacyEntity() && c !== CharCodes.Semi) {
7575
- this.trieIndex += valueLength;
7576
- }
7577
- else {
7578
- // Add 1 as we have already incremented the excess
7579
- var entityStart = this.index - this.entityExcess + 1;
7580
- if (entityStart > this.sectionStart) {
7581
- this.emitPartial(this.sectionStart, entityStart);
7582
- }
7583
- // If this is a surrogate pair, consume the next two bytes
7584
- this.entityResult = this.trieIndex;
7585
- this.trieIndex += valueLength;
7586
- this.entityExcess = 0;
7587
- this.sectionStart = this.index + 1;
7588
- if (valueLength === 0) {
7589
- this.emitNamedEntity();
7590
- }
7591
- }
7592
- }
7593
- };
7594
- Tokenizer.prototype.emitNamedEntity = function () {
7595
- this.state = this.baseState;
7596
- if (this.entityResult === 0) {
7597
- return;
7598
- }
7599
- var valueLength = (this.entityTrie[this.entityResult] & decode_js_1.BinTrieFlags.VALUE_LENGTH) >>
7600
- 14;
7601
- switch (valueLength) {
7602
- case 1: {
7603
- this.emitCodePoint(this.entityTrie[this.entityResult] &
7604
- ~decode_js_1.BinTrieFlags.VALUE_LENGTH);
7605
- break;
7606
- }
7607
- case 2: {
7608
- this.emitCodePoint(this.entityTrie[this.entityResult + 1]);
7609
- break;
7610
- }
7611
- case 3: {
7612
- this.emitCodePoint(this.entityTrie[this.entityResult + 1]);
7613
- this.emitCodePoint(this.entityTrie[this.entityResult + 2]);
7614
- }
7615
- }
7616
- };
7617
- Tokenizer.prototype.stateBeforeNumericEntity = function (c) {
7618
- if ((c | 0x20) === CharCodes.LowerX) {
7619
- this.entityExcess++;
7620
- this.state = State.InHexEntity;
7621
- }
7622
- else {
7623
- this.state = State.InNumericEntity;
7624
- this.stateInNumericEntity(c);
7625
- }
7626
- };
7627
- Tokenizer.prototype.emitNumericEntity = function (strict) {
7628
- var entityStart = this.index - this.entityExcess - 1;
7629
- var numberStart = entityStart + 2 + Number(this.state === State.InHexEntity);
7630
- if (numberStart !== this.index) {
7631
- // Emit leading data if any
7632
- if (entityStart > this.sectionStart) {
7633
- this.emitPartial(this.sectionStart, entityStart);
7634
- }
7635
- this.sectionStart = this.index + Number(strict);
7636
- this.emitCodePoint((0, decode_js_1.replaceCodePoint)(this.entityResult));
7637
- }
7638
- this.state = this.baseState;
7639
- };
7640
- Tokenizer.prototype.stateInNumericEntity = function (c) {
7641
- if (c === CharCodes.Semi) {
7642
- this.emitNumericEntity(true);
7643
- }
7644
- else if (isNumber(c)) {
7645
- this.entityResult = this.entityResult * 10 + (c - CharCodes.Zero);
7646
- this.entityExcess++;
7647
- }
7648
- else {
7649
- if (this.allowLegacyEntity()) {
7650
- this.emitNumericEntity(false);
7651
- }
7652
- else {
7653
- this.state = this.baseState;
7654
- }
7655
- this.index--;
7656
- }
7657
- };
7658
- Tokenizer.prototype.stateInHexEntity = function (c) {
7659
- if (c === CharCodes.Semi) {
7660
- this.emitNumericEntity(true);
7661
- }
7662
- else if (isNumber(c)) {
7663
- this.entityResult = this.entityResult * 16 + (c - CharCodes.Zero);
7664
- this.entityExcess++;
7665
- }
7666
- else if (isHexDigit(c)) {
7667
- this.entityResult =
7668
- this.entityResult * 16 + ((c | 0x20) - CharCodes.LowerA + 10);
7669
- this.entityExcess++;
7670
- }
7671
- else {
7672
- if (this.allowLegacyEntity()) {
7673
- this.emitNumericEntity(false);
7674
- }
7675
- else {
7676
- this.state = this.baseState;
7677
- }
7678
- this.index--;
7679
- }
7680
- };
7681
- Tokenizer.prototype.allowLegacyEntity = function () {
7682
- return (!this.xmlMode &&
7683
- (this.baseState === State.Text ||
7684
- this.baseState === State.InSpecialTag));
7685
- };
7686
- /**
7687
- * Remove data that has already been consumed from the buffer.
7688
- */
7689
- Tokenizer.prototype.cleanup = function () {
7690
- // If we are inside of text or attributes, emit what we already have.
7691
- if (this.running && this.sectionStart !== this.index) {
7692
- if (this.state === State.Text ||
7693
- (this.state === State.InSpecialTag && this.sequenceIndex === 0)) {
7694
- this.cbs.ontext(this.sectionStart, this.index);
7695
- this.sectionStart = this.index;
7696
- }
7697
- else if (this.state === State.InAttributeValueDq ||
7698
- this.state === State.InAttributeValueSq ||
7699
- this.state === State.InAttributeValueNq) {
7700
- this.cbs.onattribdata(this.sectionStart, this.index);
7701
- this.sectionStart = this.index;
7702
- }
7703
- }
7704
- };
7705
- Tokenizer.prototype.shouldContinue = function () {
7706
- return this.index < this.buffer.length + this.offset && this.running;
7707
- };
7708
- /**
7709
- * Iterates through the buffer, calling the function corresponding to the current state.
7710
- *
7711
- * States that are more likely to be hit are higher up, as a performance improvement.
7712
- */
7713
- Tokenizer.prototype.parse = function () {
7714
- while (this.shouldContinue()) {
7715
- var c = this.buffer.charCodeAt(this.index - this.offset);
7716
- switch (this.state) {
7717
- case State.Text: {
7718
- this.stateText(c);
7719
- break;
7720
- }
7721
- case State.SpecialStartSequence: {
7722
- this.stateSpecialStartSequence(c);
7723
- break;
7724
- }
7725
- case State.InSpecialTag: {
7726
- this.stateInSpecialTag(c);
7727
- break;
7728
- }
7729
- case State.CDATASequence: {
7730
- this.stateCDATASequence(c);
7731
- break;
7732
- }
7733
- case State.InAttributeValueDq: {
7734
- this.stateInAttributeValueDoubleQuotes(c);
7735
- break;
7736
- }
7737
- case State.InAttributeName: {
7738
- this.stateInAttributeName(c);
7739
- break;
7740
- }
7741
- case State.InCommentLike: {
7742
- this.stateInCommentLike(c);
7743
- break;
7744
- }
7745
- case State.InSpecialComment: {
7746
- this.stateInSpecialComment(c);
7747
- break;
7748
- }
7749
- case State.BeforeAttributeName: {
7750
- this.stateBeforeAttributeName(c);
7751
- break;
7752
- }
7753
- case State.InTagName: {
7754
- this.stateInTagName(c);
7755
- break;
7756
- }
7757
- case State.InClosingTagName: {
7758
- this.stateInClosingTagName(c);
7759
- break;
7760
- }
7761
- case State.BeforeTagName: {
7762
- this.stateBeforeTagName(c);
7763
- break;
7764
- }
7765
- case State.AfterAttributeName: {
7766
- this.stateAfterAttributeName(c);
7767
- break;
7768
- }
7769
- case State.InAttributeValueSq: {
7770
- this.stateInAttributeValueSingleQuotes(c);
7771
- break;
7772
- }
7773
- case State.BeforeAttributeValue: {
7774
- this.stateBeforeAttributeValue(c);
7775
- break;
7776
- }
7777
- case State.BeforeClosingTagName: {
7778
- this.stateBeforeClosingTagName(c);
7779
- break;
7780
- }
7781
- case State.AfterClosingTagName: {
7782
- this.stateAfterClosingTagName(c);
7783
- break;
7784
- }
7785
- case State.BeforeSpecialS: {
7786
- this.stateBeforeSpecialS(c);
7787
- break;
7788
- }
7789
- case State.InAttributeValueNq: {
7790
- this.stateInAttributeValueNoQuotes(c);
7791
- break;
7792
- }
7793
- case State.InSelfClosingTag: {
7794
- this.stateInSelfClosingTag(c);
7795
- break;
7796
- }
7797
- case State.InDeclaration: {
7798
- this.stateInDeclaration(c);
7799
- break;
7800
- }
7801
- case State.BeforeDeclaration: {
7802
- this.stateBeforeDeclaration(c);
7803
- break;
7804
- }
7805
- case State.BeforeComment: {
7806
- this.stateBeforeComment(c);
7807
- break;
7808
- }
7809
- case State.InProcessingInstruction: {
7810
- this.stateInProcessingInstruction(c);
7811
- break;
7812
- }
7813
- case State.InNamedEntity: {
7814
- this.stateInNamedEntity(c);
7815
- break;
7816
- }
7817
- case State.BeforeEntity: {
7818
- this.stateBeforeEntity(c);
7819
- break;
7820
- }
7821
- case State.InHexEntity: {
7822
- this.stateInHexEntity(c);
7823
- break;
7824
- }
7825
- case State.InNumericEntity: {
7826
- this.stateInNumericEntity(c);
7827
- break;
7828
- }
7829
- default: {
7830
- // `this._state === State.BeforeNumericEntity`
7831
- this.stateBeforeNumericEntity(c);
7832
- }
7833
- }
7834
- this.index++;
7835
- }
7836
- this.cleanup();
7837
- };
7838
- Tokenizer.prototype.finish = function () {
7839
- if (this.state === State.InNamedEntity) {
7840
- this.emitNamedEntity();
7841
- }
7842
- // If there is remaining data, emit it in a reasonable way
7843
- if (this.sectionStart < this.index) {
7844
- this.handleTrailingData();
7845
- }
7846
- this.cbs.onend();
7847
- };
7848
- /** Handle any trailing data. */
7849
- Tokenizer.prototype.handleTrailingData = function () {
7850
- var endIndex = this.buffer.length + this.offset;
7851
- if (this.state === State.InCommentLike) {
7852
- if (this.currentSequence === Sequences.CdataEnd) {
7853
- this.cbs.oncdata(this.sectionStart, endIndex, 0);
7854
- }
7855
- else {
7856
- this.cbs.oncomment(this.sectionStart, endIndex, 0);
7857
- }
7858
- }
7859
- else if (this.state === State.InNumericEntity &&
7860
- this.allowLegacyEntity()) {
7861
- this.emitNumericEntity(false);
7862
- // All trailing data will have been consumed
7863
- }
7864
- else if (this.state === State.InHexEntity &&
7865
- this.allowLegacyEntity()) {
7866
- this.emitNumericEntity(false);
7867
- // All trailing data will have been consumed
7868
- }
7869
- else if (this.state === State.InTagName ||
7870
- this.state === State.BeforeAttributeName ||
7871
- this.state === State.BeforeAttributeValue ||
7872
- this.state === State.AfterAttributeName ||
7873
- this.state === State.InAttributeName ||
7874
- this.state === State.InAttributeValueSq ||
7875
- this.state === State.InAttributeValueDq ||
7876
- this.state === State.InAttributeValueNq ||
7877
- this.state === State.InClosingTagName) ;
7878
- else {
7879
- this.cbs.ontext(this.sectionStart, endIndex);
7880
- }
7881
- };
7882
- Tokenizer.prototype.emitPartial = function (start, endIndex) {
7883
- if (this.baseState !== State.Text &&
7884
- this.baseState !== State.InSpecialTag) {
7885
- this.cbs.onattribdata(start, endIndex);
7886
- }
7887
- else {
7888
- this.cbs.ontext(start, endIndex);
7889
- }
7890
- };
7891
- Tokenizer.prototype.emitCodePoint = function (cp) {
7892
- if (this.baseState !== State.Text &&
7893
- this.baseState !== State.InSpecialTag) {
7894
- this.cbs.onattribentity(cp);
7895
- }
7896
- else {
7897
- this.cbs.ontextentity(cp);
7898
- }
7899
- };
7900
- return Tokenizer;
7901
- }());
7902
- exports.default = Tokenizer;
7903
-
7904
- } (Tokenizer$1));
7056
+ } (decode$1));
7057
+
7058
+ Object.defineProperty(Tokenizer$2, "__esModule", { value: true });
7059
+ Tokenizer$2.QuoteType = void 0;
7060
+ const decode_1$1 = decode$1;
7061
+ var CharCodes;
7062
+ (function (CharCodes) {
7063
+ CharCodes[CharCodes["Tab"] = 9] = "Tab";
7064
+ CharCodes[CharCodes["NewLine"] = 10] = "NewLine";
7065
+ CharCodes[CharCodes["FormFeed"] = 12] = "FormFeed";
7066
+ CharCodes[CharCodes["CarriageReturn"] = 13] = "CarriageReturn";
7067
+ CharCodes[CharCodes["Space"] = 32] = "Space";
7068
+ CharCodes[CharCodes["ExclamationMark"] = 33] = "ExclamationMark";
7069
+ CharCodes[CharCodes["Number"] = 35] = "Number";
7070
+ CharCodes[CharCodes["Amp"] = 38] = "Amp";
7071
+ CharCodes[CharCodes["SingleQuote"] = 39] = "SingleQuote";
7072
+ CharCodes[CharCodes["DoubleQuote"] = 34] = "DoubleQuote";
7073
+ CharCodes[CharCodes["Dash"] = 45] = "Dash";
7074
+ CharCodes[CharCodes["Slash"] = 47] = "Slash";
7075
+ CharCodes[CharCodes["Zero"] = 48] = "Zero";
7076
+ CharCodes[CharCodes["Nine"] = 57] = "Nine";
7077
+ CharCodes[CharCodes["Semi"] = 59] = "Semi";
7078
+ CharCodes[CharCodes["Lt"] = 60] = "Lt";
7079
+ CharCodes[CharCodes["Eq"] = 61] = "Eq";
7080
+ CharCodes[CharCodes["Gt"] = 62] = "Gt";
7081
+ CharCodes[CharCodes["Questionmark"] = 63] = "Questionmark";
7082
+ CharCodes[CharCodes["UpperA"] = 65] = "UpperA";
7083
+ CharCodes[CharCodes["LowerA"] = 97] = "LowerA";
7084
+ CharCodes[CharCodes["UpperF"] = 70] = "UpperF";
7085
+ CharCodes[CharCodes["LowerF"] = 102] = "LowerF";
7086
+ CharCodes[CharCodes["UpperZ"] = 90] = "UpperZ";
7087
+ CharCodes[CharCodes["LowerZ"] = 122] = "LowerZ";
7088
+ CharCodes[CharCodes["LowerX"] = 120] = "LowerX";
7089
+ CharCodes[CharCodes["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
7090
+ })(CharCodes || (CharCodes = {}));
7091
+ /** All the states the tokenizer can be in. */
7092
+ var State;
7093
+ (function (State) {
7094
+ State[State["Text"] = 1] = "Text";
7095
+ State[State["BeforeTagName"] = 2] = "BeforeTagName";
7096
+ State[State["InTagName"] = 3] = "InTagName";
7097
+ State[State["InSelfClosingTag"] = 4] = "InSelfClosingTag";
7098
+ State[State["BeforeClosingTagName"] = 5] = "BeforeClosingTagName";
7099
+ State[State["InClosingTagName"] = 6] = "InClosingTagName";
7100
+ State[State["AfterClosingTagName"] = 7] = "AfterClosingTagName";
7101
+ // Attributes
7102
+ State[State["BeforeAttributeName"] = 8] = "BeforeAttributeName";
7103
+ State[State["InAttributeName"] = 9] = "InAttributeName";
7104
+ State[State["AfterAttributeName"] = 10] = "AfterAttributeName";
7105
+ State[State["BeforeAttributeValue"] = 11] = "BeforeAttributeValue";
7106
+ State[State["InAttributeValueDq"] = 12] = "InAttributeValueDq";
7107
+ State[State["InAttributeValueSq"] = 13] = "InAttributeValueSq";
7108
+ State[State["InAttributeValueNq"] = 14] = "InAttributeValueNq";
7109
+ // Declarations
7110
+ State[State["BeforeDeclaration"] = 15] = "BeforeDeclaration";
7111
+ State[State["InDeclaration"] = 16] = "InDeclaration";
7112
+ // Processing instructions
7113
+ State[State["InProcessingInstruction"] = 17] = "InProcessingInstruction";
7114
+ // Comments & CDATA
7115
+ State[State["BeforeComment"] = 18] = "BeforeComment";
7116
+ State[State["CDATASequence"] = 19] = "CDATASequence";
7117
+ State[State["InSpecialComment"] = 20] = "InSpecialComment";
7118
+ State[State["InCommentLike"] = 21] = "InCommentLike";
7119
+ // Special tags
7120
+ State[State["BeforeSpecialS"] = 22] = "BeforeSpecialS";
7121
+ State[State["BeforeSpecialT"] = 23] = "BeforeSpecialT";
7122
+ State[State["SpecialStartSequence"] = 24] = "SpecialStartSequence";
7123
+ State[State["InSpecialTag"] = 25] = "InSpecialTag";
7124
+ State[State["InEntity"] = 26] = "InEntity";
7125
+ })(State || (State = {}));
7126
+ function isWhitespace(c) {
7127
+ return (c === CharCodes.Space ||
7128
+ c === CharCodes.NewLine ||
7129
+ c === CharCodes.Tab ||
7130
+ c === CharCodes.FormFeed ||
7131
+ c === CharCodes.CarriageReturn);
7132
+ }
7133
+ function isEndOfTagSection(c) {
7134
+ return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);
7135
+ }
7136
+ function isASCIIAlpha(c) {
7137
+ return ((c >= CharCodes.LowerA && c <= CharCodes.LowerZ) ||
7138
+ (c >= CharCodes.UpperA && c <= CharCodes.UpperZ));
7139
+ }
7140
+ var QuoteType;
7141
+ (function (QuoteType) {
7142
+ QuoteType[QuoteType["NoValue"] = 0] = "NoValue";
7143
+ QuoteType[QuoteType["Unquoted"] = 1] = "Unquoted";
7144
+ QuoteType[QuoteType["Single"] = 2] = "Single";
7145
+ QuoteType[QuoteType["Double"] = 3] = "Double";
7146
+ })(QuoteType || (Tokenizer$2.QuoteType = QuoteType = {}));
7147
+ /**
7148
+ * Sequences used to match longer strings.
7149
+ *
7150
+ * We don't have `Script`, `Style`, or `Title` here. Instead, we re-use the *End
7151
+ * sequences with an increased offset.
7152
+ */
7153
+ const Sequences = {
7154
+ Cdata: new Uint8Array([0x43, 0x44, 0x41, 0x54, 0x41, 0x5b]), // CDATA[
7155
+ CdataEnd: new Uint8Array([0x5d, 0x5d, 0x3e]), // ]]>
7156
+ CommentEnd: new Uint8Array([0x2d, 0x2d, 0x3e]), // `-->`
7157
+ ScriptEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74]), // `</script`
7158
+ StyleEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65]), // `</style`
7159
+ TitleEnd: new Uint8Array([0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65]), // `</title`
7160
+ TextareaEnd: new Uint8Array([
7161
+ 0x3c, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61,
7162
+ ]), // `</textarea`
7163
+ XmpEnd: new Uint8Array([0x3c, 0x2f, 0x78, 0x6d, 0x70]), // `</xmp`
7164
+ };
7165
+ let Tokenizer$1 = class Tokenizer {
7166
+ constructor({ xmlMode = false, decodeEntities = true, }, cbs) {
7167
+ this.cbs = cbs;
7168
+ /** The current state the tokenizer is in. */
7169
+ this.state = State.Text;
7170
+ /** The read buffer. */
7171
+ this.buffer = "";
7172
+ /** The beginning of the section that is currently being read. */
7173
+ this.sectionStart = 0;
7174
+ /** The index within the buffer that we are currently looking at. */
7175
+ this.index = 0;
7176
+ /** The start of the last entity. */
7177
+ this.entityStart = 0;
7178
+ /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */
7179
+ this.baseState = State.Text;
7180
+ /** For special parsing behavior inside of script and style tags. */
7181
+ this.isSpecial = false;
7182
+ /** Indicates whether the tokenizer has been paused. */
7183
+ this.running = true;
7184
+ /** The offset of the current buffer. */
7185
+ this.offset = 0;
7186
+ this.currentSequence = undefined;
7187
+ this.sequenceIndex = 0;
7188
+ this.xmlMode = xmlMode;
7189
+ this.decodeEntities = decodeEntities;
7190
+ this.entityDecoder = new decode_1$1.EntityDecoder(xmlMode ? decode_1$1.xmlDecodeTree : decode_1$1.htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));
7191
+ }
7192
+ reset() {
7193
+ this.state = State.Text;
7194
+ this.buffer = "";
7195
+ this.sectionStart = 0;
7196
+ this.index = 0;
7197
+ this.baseState = State.Text;
7198
+ this.currentSequence = undefined;
7199
+ this.running = true;
7200
+ this.offset = 0;
7201
+ }
7202
+ write(chunk) {
7203
+ this.offset += this.buffer.length;
7204
+ this.buffer = chunk;
7205
+ this.parse();
7206
+ }
7207
+ end() {
7208
+ if (this.running)
7209
+ this.finish();
7210
+ }
7211
+ pause() {
7212
+ this.running = false;
7213
+ }
7214
+ resume() {
7215
+ this.running = true;
7216
+ if (this.index < this.buffer.length + this.offset) {
7217
+ this.parse();
7218
+ }
7219
+ }
7220
+ stateText(c) {
7221
+ if (c === CharCodes.Lt ||
7222
+ (!this.decodeEntities && this.fastForwardTo(CharCodes.Lt))) {
7223
+ if (this.index > this.sectionStart) {
7224
+ this.cbs.ontext(this.sectionStart, this.index);
7225
+ }
7226
+ this.state = State.BeforeTagName;
7227
+ this.sectionStart = this.index;
7228
+ }
7229
+ else if (this.decodeEntities && c === CharCodes.Amp) {
7230
+ this.startEntity();
7231
+ }
7232
+ }
7233
+ stateSpecialStartSequence(c) {
7234
+ const isEnd = this.sequenceIndex === this.currentSequence.length;
7235
+ const isMatch = isEnd
7236
+ ? // If we are at the end of the sequence, make sure the tag name has ended
7237
+ isEndOfTagSection(c)
7238
+ : // Otherwise, do a case-insensitive comparison
7239
+ (c | 0x20) === this.currentSequence[this.sequenceIndex];
7240
+ if (!isMatch) {
7241
+ this.isSpecial = false;
7242
+ }
7243
+ else if (!isEnd) {
7244
+ this.sequenceIndex++;
7245
+ return;
7246
+ }
7247
+ this.sequenceIndex = 0;
7248
+ this.state = State.InTagName;
7249
+ this.stateInTagName(c);
7250
+ }
7251
+ /** Look for an end tag. For <title> tags, also decode entities. */
7252
+ stateInSpecialTag(c) {
7253
+ if (this.sequenceIndex === this.currentSequence.length) {
7254
+ if (c === CharCodes.Gt || isWhitespace(c)) {
7255
+ const endOfText = this.index - this.currentSequence.length;
7256
+ if (this.sectionStart < endOfText) {
7257
+ // Spoof the index so that reported locations match up.
7258
+ const actualIndex = this.index;
7259
+ this.index = endOfText;
7260
+ this.cbs.ontext(this.sectionStart, endOfText);
7261
+ this.index = actualIndex;
7262
+ }
7263
+ this.isSpecial = false;
7264
+ this.sectionStart = endOfText + 2; // Skip over the `</`
7265
+ this.stateInClosingTagName(c);
7266
+ return; // We are done; skip the rest of the function.
7267
+ }
7268
+ this.sequenceIndex = 0;
7269
+ }
7270
+ if ((c | 0x20) === this.currentSequence[this.sequenceIndex]) {
7271
+ this.sequenceIndex += 1;
7272
+ }
7273
+ else if (this.sequenceIndex === 0) {
7274
+ if (this.currentSequence === Sequences.TitleEnd) {
7275
+ // We have to parse entities in <title> tags.
7276
+ if (this.decodeEntities && c === CharCodes.Amp) {
7277
+ this.startEntity();
7278
+ }
7279
+ }
7280
+ else if (this.fastForwardTo(CharCodes.Lt)) {
7281
+ // Outside of <title> tags, we can fast-forward.
7282
+ this.sequenceIndex = 1;
7283
+ }
7284
+ }
7285
+ else {
7286
+ // If we see a `<`, set the sequence index to 1; useful for eg. `<</script>`.
7287
+ this.sequenceIndex = Number(c === CharCodes.Lt);
7288
+ }
7289
+ }
7290
+ stateCDATASequence(c) {
7291
+ if (c === Sequences.Cdata[this.sequenceIndex]) {
7292
+ if (++this.sequenceIndex === Sequences.Cdata.length) {
7293
+ this.state = State.InCommentLike;
7294
+ this.currentSequence = Sequences.CdataEnd;
7295
+ this.sequenceIndex = 0;
7296
+ this.sectionStart = this.index + 1;
7297
+ }
7298
+ }
7299
+ else {
7300
+ this.sequenceIndex = 0;
7301
+ this.state = State.InDeclaration;
7302
+ this.stateInDeclaration(c); // Reconsume the character
7303
+ }
7304
+ }
7305
+ /**
7306
+ * When we wait for one specific character, we can speed things up
7307
+ * by skipping through the buffer until we find it.
7308
+ *
7309
+ * @returns Whether the character was found.
7310
+ */
7311
+ fastForwardTo(c) {
7312
+ while (++this.index < this.buffer.length + this.offset) {
7313
+ if (this.buffer.charCodeAt(this.index - this.offset) === c) {
7314
+ return true;
7315
+ }
7316
+ }
7317
+ /*
7318
+ * We increment the index at the end of the `parse` loop,
7319
+ * so set it to `buffer.length - 1` here.
7320
+ *
7321
+ * TODO: Refactor `parse` to increment index before calling states.
7322
+ */
7323
+ this.index = this.buffer.length + this.offset - 1;
7324
+ return false;
7325
+ }
7326
+ /**
7327
+ * Comments and CDATA end with `-->` and `]]>`.
7328
+ *
7329
+ * Their common qualities are:
7330
+ * - Their end sequences have a distinct character they start with.
7331
+ * - That character is then repeated, so we have to check multiple repeats.
7332
+ * - All characters but the start character of the sequence can be skipped.
7333
+ */
7334
+ stateInCommentLike(c) {
7335
+ if (c === this.currentSequence[this.sequenceIndex]) {
7336
+ if (++this.sequenceIndex === this.currentSequence.length) {
7337
+ if (this.currentSequence === Sequences.CdataEnd) {
7338
+ this.cbs.oncdata(this.sectionStart, this.index, 2);
7339
+ }
7340
+ else {
7341
+ this.cbs.oncomment(this.sectionStart, this.index, 2);
7342
+ }
7343
+ this.sequenceIndex = 0;
7344
+ this.sectionStart = this.index + 1;
7345
+ this.state = State.Text;
7346
+ }
7347
+ }
7348
+ else if (this.sequenceIndex === 0) {
7349
+ // Fast-forward to the first character of the sequence
7350
+ if (this.fastForwardTo(this.currentSequence[0])) {
7351
+ this.sequenceIndex = 1;
7352
+ }
7353
+ }
7354
+ else if (c !== this.currentSequence[this.sequenceIndex - 1]) {
7355
+ // Allow long sequences, eg. --->, ]]]>
7356
+ this.sequenceIndex = 0;
7357
+ }
7358
+ }
7359
+ /**
7360
+ * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.
7361
+ *
7362
+ * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).
7363
+ * We allow anything that wouldn't end the tag.
7364
+ */
7365
+ isTagStartChar(c) {
7366
+ return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
7367
+ }
7368
+ startSpecial(sequence, offset) {
7369
+ this.isSpecial = true;
7370
+ this.currentSequence = sequence;
7371
+ this.sequenceIndex = offset;
7372
+ this.state = State.SpecialStartSequence;
7373
+ }
7374
+ stateBeforeTagName(c) {
7375
+ if (c === CharCodes.ExclamationMark) {
7376
+ this.state = State.BeforeDeclaration;
7377
+ this.sectionStart = this.index + 1;
7378
+ }
7379
+ else if (c === CharCodes.Questionmark) {
7380
+ this.state = State.InProcessingInstruction;
7381
+ this.sectionStart = this.index + 1;
7382
+ }
7383
+ else if (this.isTagStartChar(c)) {
7384
+ const lower = c | 0x20;
7385
+ this.sectionStart = this.index;
7386
+ if (this.xmlMode) {
7387
+ this.state = State.InTagName;
7388
+ }
7389
+ else if (lower === Sequences.ScriptEnd[2]) {
7390
+ this.state = State.BeforeSpecialS;
7391
+ }
7392
+ else if (lower === Sequences.TitleEnd[2] ||
7393
+ lower === Sequences.XmpEnd[2]) {
7394
+ this.state = State.BeforeSpecialT;
7395
+ }
7396
+ else {
7397
+ this.state = State.InTagName;
7398
+ }
7399
+ }
7400
+ else if (c === CharCodes.Slash) {
7401
+ this.state = State.BeforeClosingTagName;
7402
+ }
7403
+ else {
7404
+ this.state = State.Text;
7405
+ this.stateText(c);
7406
+ }
7407
+ }
7408
+ stateInTagName(c) {
7409
+ if (isEndOfTagSection(c)) {
7410
+ this.cbs.onopentagname(this.sectionStart, this.index);
7411
+ this.sectionStart = -1;
7412
+ this.state = State.BeforeAttributeName;
7413
+ this.stateBeforeAttributeName(c);
7414
+ }
7415
+ }
7416
+ stateBeforeClosingTagName(c) {
7417
+ if (isWhitespace(c)) ;
7418
+ else if (c === CharCodes.Gt) {
7419
+ this.state = State.Text;
7420
+ }
7421
+ else {
7422
+ this.state = this.isTagStartChar(c)
7423
+ ? State.InClosingTagName
7424
+ : State.InSpecialComment;
7425
+ this.sectionStart = this.index;
7426
+ }
7427
+ }
7428
+ stateInClosingTagName(c) {
7429
+ if (c === CharCodes.Gt || isWhitespace(c)) {
7430
+ this.cbs.onclosetag(this.sectionStart, this.index);
7431
+ this.sectionStart = -1;
7432
+ this.state = State.AfterClosingTagName;
7433
+ this.stateAfterClosingTagName(c);
7434
+ }
7435
+ }
7436
+ stateAfterClosingTagName(c) {
7437
+ // Skip everything until ">"
7438
+ if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
7439
+ this.state = State.Text;
7440
+ this.sectionStart = this.index + 1;
7441
+ }
7442
+ }
7443
+ stateBeforeAttributeName(c) {
7444
+ if (c === CharCodes.Gt) {
7445
+ this.cbs.onopentagend(this.index);
7446
+ if (this.isSpecial) {
7447
+ this.state = State.InSpecialTag;
7448
+ this.sequenceIndex = 0;
7449
+ }
7450
+ else {
7451
+ this.state = State.Text;
7452
+ }
7453
+ this.sectionStart = this.index + 1;
7454
+ }
7455
+ else if (c === CharCodes.Slash) {
7456
+ this.state = State.InSelfClosingTag;
7457
+ }
7458
+ else if (!isWhitespace(c)) {
7459
+ this.state = State.InAttributeName;
7460
+ this.sectionStart = this.index;
7461
+ }
7462
+ }
7463
+ stateInSelfClosingTag(c) {
7464
+ if (c === CharCodes.Gt) {
7465
+ this.cbs.onselfclosingtag(this.index);
7466
+ this.state = State.Text;
7467
+ this.sectionStart = this.index + 1;
7468
+ this.isSpecial = false; // Reset special state, in case of self-closing special tags
7469
+ }
7470
+ else if (!isWhitespace(c)) {
7471
+ this.state = State.BeforeAttributeName;
7472
+ this.stateBeforeAttributeName(c);
7473
+ }
7474
+ }
7475
+ stateInAttributeName(c) {
7476
+ if (c === CharCodes.Eq || isEndOfTagSection(c)) {
7477
+ this.cbs.onattribname(this.sectionStart, this.index);
7478
+ this.sectionStart = this.index;
7479
+ this.state = State.AfterAttributeName;
7480
+ this.stateAfterAttributeName(c);
7481
+ }
7482
+ }
7483
+ stateAfterAttributeName(c) {
7484
+ if (c === CharCodes.Eq) {
7485
+ this.state = State.BeforeAttributeValue;
7486
+ }
7487
+ else if (c === CharCodes.Slash || c === CharCodes.Gt) {
7488
+ this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
7489
+ this.sectionStart = -1;
7490
+ this.state = State.BeforeAttributeName;
7491
+ this.stateBeforeAttributeName(c);
7492
+ }
7493
+ else if (!isWhitespace(c)) {
7494
+ this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
7495
+ this.state = State.InAttributeName;
7496
+ this.sectionStart = this.index;
7497
+ }
7498
+ }
7499
+ stateBeforeAttributeValue(c) {
7500
+ if (c === CharCodes.DoubleQuote) {
7501
+ this.state = State.InAttributeValueDq;
7502
+ this.sectionStart = this.index + 1;
7503
+ }
7504
+ else if (c === CharCodes.SingleQuote) {
7505
+ this.state = State.InAttributeValueSq;
7506
+ this.sectionStart = this.index + 1;
7507
+ }
7508
+ else if (!isWhitespace(c)) {
7509
+ this.sectionStart = this.index;
7510
+ this.state = State.InAttributeValueNq;
7511
+ this.stateInAttributeValueNoQuotes(c); // Reconsume token
7512
+ }
7513
+ }
7514
+ handleInAttributeValue(c, quote) {
7515
+ if (c === quote ||
7516
+ (!this.decodeEntities && this.fastForwardTo(quote))) {
7517
+ this.cbs.onattribdata(this.sectionStart, this.index);
7518
+ this.sectionStart = -1;
7519
+ this.cbs.onattribend(quote === CharCodes.DoubleQuote
7520
+ ? QuoteType.Double
7521
+ : QuoteType.Single, this.index + 1);
7522
+ this.state = State.BeforeAttributeName;
7523
+ }
7524
+ else if (this.decodeEntities && c === CharCodes.Amp) {
7525
+ this.startEntity();
7526
+ }
7527
+ }
7528
+ stateInAttributeValueDoubleQuotes(c) {
7529
+ this.handleInAttributeValue(c, CharCodes.DoubleQuote);
7530
+ }
7531
+ stateInAttributeValueSingleQuotes(c) {
7532
+ this.handleInAttributeValue(c, CharCodes.SingleQuote);
7533
+ }
7534
+ stateInAttributeValueNoQuotes(c) {
7535
+ if (isWhitespace(c) || c === CharCodes.Gt) {
7536
+ this.cbs.onattribdata(this.sectionStart, this.index);
7537
+ this.sectionStart = -1;
7538
+ this.cbs.onattribend(QuoteType.Unquoted, this.index);
7539
+ this.state = State.BeforeAttributeName;
7540
+ this.stateBeforeAttributeName(c);
7541
+ }
7542
+ else if (this.decodeEntities && c === CharCodes.Amp) {
7543
+ this.startEntity();
7544
+ }
7545
+ }
7546
+ stateBeforeDeclaration(c) {
7547
+ if (c === CharCodes.OpeningSquareBracket) {
7548
+ this.state = State.CDATASequence;
7549
+ this.sequenceIndex = 0;
7550
+ }
7551
+ else {
7552
+ this.state =
7553
+ c === CharCodes.Dash
7554
+ ? State.BeforeComment
7555
+ : State.InDeclaration;
7556
+ }
7557
+ }
7558
+ stateInDeclaration(c) {
7559
+ if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
7560
+ this.cbs.ondeclaration(this.sectionStart, this.index);
7561
+ this.state = State.Text;
7562
+ this.sectionStart = this.index + 1;
7563
+ }
7564
+ }
7565
+ stateInProcessingInstruction(c) {
7566
+ if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
7567
+ this.cbs.onprocessinginstruction(this.sectionStart, this.index);
7568
+ this.state = State.Text;
7569
+ this.sectionStart = this.index + 1;
7570
+ }
7571
+ }
7572
+ stateBeforeComment(c) {
7573
+ if (c === CharCodes.Dash) {
7574
+ this.state = State.InCommentLike;
7575
+ this.currentSequence = Sequences.CommentEnd;
7576
+ // Allow short comments (eg. <!-->)
7577
+ this.sequenceIndex = 2;
7578
+ this.sectionStart = this.index + 1;
7579
+ }
7580
+ else {
7581
+ this.state = State.InDeclaration;
7582
+ }
7583
+ }
7584
+ stateInSpecialComment(c) {
7585
+ if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
7586
+ this.cbs.oncomment(this.sectionStart, this.index, 0);
7587
+ this.state = State.Text;
7588
+ this.sectionStart = this.index + 1;
7589
+ }
7590
+ }
7591
+ stateBeforeSpecialS(c) {
7592
+ const lower = c | 0x20;
7593
+ if (lower === Sequences.ScriptEnd[3]) {
7594
+ this.startSpecial(Sequences.ScriptEnd, 4);
7595
+ }
7596
+ else if (lower === Sequences.StyleEnd[3]) {
7597
+ this.startSpecial(Sequences.StyleEnd, 4);
7598
+ }
7599
+ else {
7600
+ this.state = State.InTagName;
7601
+ this.stateInTagName(c); // Consume the token again
7602
+ }
7603
+ }
7604
+ stateBeforeSpecialT(c) {
7605
+ const lower = c | 0x20;
7606
+ switch (lower) {
7607
+ case Sequences.TitleEnd[3]: {
7608
+ this.startSpecial(Sequences.TitleEnd, 4);
7609
+ break;
7610
+ }
7611
+ case Sequences.TextareaEnd[3]: {
7612
+ this.startSpecial(Sequences.TextareaEnd, 4);
7613
+ break;
7614
+ }
7615
+ case Sequences.XmpEnd[3]: {
7616
+ this.startSpecial(Sequences.XmpEnd, 4);
7617
+ break;
7618
+ }
7619
+ default: {
7620
+ this.state = State.InTagName;
7621
+ this.stateInTagName(c); // Consume the token again
7622
+ }
7623
+ }
7624
+ }
7625
+ startEntity() {
7626
+ this.baseState = this.state;
7627
+ this.state = State.InEntity;
7628
+ this.entityStart = this.index;
7629
+ this.entityDecoder.startEntity(this.xmlMode
7630
+ ? decode_1$1.DecodingMode.Strict
7631
+ : this.baseState === State.Text ||
7632
+ this.baseState === State.InSpecialTag
7633
+ ? decode_1$1.DecodingMode.Legacy
7634
+ : decode_1$1.DecodingMode.Attribute);
7635
+ }
7636
+ stateInEntity() {
7637
+ const indexInBuffer = this.index - this.offset;
7638
+ const length = this.entityDecoder.write(this.buffer, indexInBuffer);
7639
+ // If `length` is positive, we are done with the entity.
7640
+ if (length >= 0) {
7641
+ this.state = this.baseState;
7642
+ if (length === 0) {
7643
+ this.index -= 1;
7644
+ }
7645
+ }
7646
+ else {
7647
+ if (indexInBuffer < this.buffer.length &&
7648
+ this.buffer.charCodeAt(indexInBuffer) === CharCodes.Amp) {
7649
+ this.state = this.baseState;
7650
+ this.index -= 1;
7651
+ return;
7652
+ }
7653
+ // Mark buffer as consumed.
7654
+ this.index = this.offset + this.buffer.length - 1;
7655
+ }
7656
+ }
7657
+ /**
7658
+ * Remove data that has already been consumed from the buffer.
7659
+ */
7660
+ cleanup() {
7661
+ // If we are inside of text or attributes, emit what we already have.
7662
+ if (this.running && this.sectionStart !== this.index) {
7663
+ if (this.state === State.Text ||
7664
+ (this.state === State.InSpecialTag && this.sequenceIndex === 0)) {
7665
+ this.cbs.ontext(this.sectionStart, this.index);
7666
+ this.sectionStart = this.index;
7667
+ }
7668
+ else if (this.state === State.InAttributeValueDq ||
7669
+ this.state === State.InAttributeValueSq ||
7670
+ this.state === State.InAttributeValueNq) {
7671
+ this.cbs.onattribdata(this.sectionStart, this.index);
7672
+ this.sectionStart = this.index;
7673
+ }
7674
+ }
7675
+ }
7676
+ shouldContinue() {
7677
+ return this.index < this.buffer.length + this.offset && this.running;
7678
+ }
7679
+ /**
7680
+ * Iterates through the buffer, calling the function corresponding to the current state.
7681
+ *
7682
+ * States that are more likely to be hit are higher up, as a performance improvement.
7683
+ */
7684
+ parse() {
7685
+ while (this.shouldContinue()) {
7686
+ const c = this.buffer.charCodeAt(this.index - this.offset);
7687
+ switch (this.state) {
7688
+ case State.Text: {
7689
+ this.stateText(c);
7690
+ break;
7691
+ }
7692
+ case State.SpecialStartSequence: {
7693
+ this.stateSpecialStartSequence(c);
7694
+ break;
7695
+ }
7696
+ case State.InSpecialTag: {
7697
+ this.stateInSpecialTag(c);
7698
+ break;
7699
+ }
7700
+ case State.CDATASequence: {
7701
+ this.stateCDATASequence(c);
7702
+ break;
7703
+ }
7704
+ case State.InAttributeValueDq: {
7705
+ this.stateInAttributeValueDoubleQuotes(c);
7706
+ break;
7707
+ }
7708
+ case State.InAttributeName: {
7709
+ this.stateInAttributeName(c);
7710
+ break;
7711
+ }
7712
+ case State.InCommentLike: {
7713
+ this.stateInCommentLike(c);
7714
+ break;
7715
+ }
7716
+ case State.InSpecialComment: {
7717
+ this.stateInSpecialComment(c);
7718
+ break;
7719
+ }
7720
+ case State.BeforeAttributeName: {
7721
+ this.stateBeforeAttributeName(c);
7722
+ break;
7723
+ }
7724
+ case State.InTagName: {
7725
+ this.stateInTagName(c);
7726
+ break;
7727
+ }
7728
+ case State.InClosingTagName: {
7729
+ this.stateInClosingTagName(c);
7730
+ break;
7731
+ }
7732
+ case State.BeforeTagName: {
7733
+ this.stateBeforeTagName(c);
7734
+ break;
7735
+ }
7736
+ case State.AfterAttributeName: {
7737
+ this.stateAfterAttributeName(c);
7738
+ break;
7739
+ }
7740
+ case State.InAttributeValueSq: {
7741
+ this.stateInAttributeValueSingleQuotes(c);
7742
+ break;
7743
+ }
7744
+ case State.BeforeAttributeValue: {
7745
+ this.stateBeforeAttributeValue(c);
7746
+ break;
7747
+ }
7748
+ case State.BeforeClosingTagName: {
7749
+ this.stateBeforeClosingTagName(c);
7750
+ break;
7751
+ }
7752
+ case State.AfterClosingTagName: {
7753
+ this.stateAfterClosingTagName(c);
7754
+ break;
7755
+ }
7756
+ case State.BeforeSpecialS: {
7757
+ this.stateBeforeSpecialS(c);
7758
+ break;
7759
+ }
7760
+ case State.BeforeSpecialT: {
7761
+ this.stateBeforeSpecialT(c);
7762
+ break;
7763
+ }
7764
+ case State.InAttributeValueNq: {
7765
+ this.stateInAttributeValueNoQuotes(c);
7766
+ break;
7767
+ }
7768
+ case State.InSelfClosingTag: {
7769
+ this.stateInSelfClosingTag(c);
7770
+ break;
7771
+ }
7772
+ case State.InDeclaration: {
7773
+ this.stateInDeclaration(c);
7774
+ break;
7775
+ }
7776
+ case State.BeforeDeclaration: {
7777
+ this.stateBeforeDeclaration(c);
7778
+ break;
7779
+ }
7780
+ case State.BeforeComment: {
7781
+ this.stateBeforeComment(c);
7782
+ break;
7783
+ }
7784
+ case State.InProcessingInstruction: {
7785
+ this.stateInProcessingInstruction(c);
7786
+ break;
7787
+ }
7788
+ case State.InEntity: {
7789
+ this.stateInEntity();
7790
+ break;
7791
+ }
7792
+ }
7793
+ this.index++;
7794
+ }
7795
+ this.cleanup();
7796
+ }
7797
+ finish() {
7798
+ if (this.state === State.InEntity) {
7799
+ this.entityDecoder.end();
7800
+ this.state = this.baseState;
7801
+ }
7802
+ this.handleTrailingData();
7803
+ this.cbs.onend();
7804
+ }
7805
+ /** Handle any trailing data. */
7806
+ handleTrailingData() {
7807
+ const endIndex = this.buffer.length + this.offset;
7808
+ // If there is no remaining data, we are done.
7809
+ if (this.sectionStart >= endIndex) {
7810
+ return;
7811
+ }
7812
+ if (this.state === State.InCommentLike) {
7813
+ if (this.currentSequence === Sequences.CdataEnd) {
7814
+ this.cbs.oncdata(this.sectionStart, endIndex, 0);
7815
+ }
7816
+ else {
7817
+ this.cbs.oncomment(this.sectionStart, endIndex, 0);
7818
+ }
7819
+ }
7820
+ else if (this.state === State.InTagName ||
7821
+ this.state === State.BeforeAttributeName ||
7822
+ this.state === State.BeforeAttributeValue ||
7823
+ this.state === State.AfterAttributeName ||
7824
+ this.state === State.InAttributeName ||
7825
+ this.state === State.InAttributeValueSq ||
7826
+ this.state === State.InAttributeValueDq ||
7827
+ this.state === State.InAttributeValueNq ||
7828
+ this.state === State.InClosingTagName) ;
7829
+ else {
7830
+ this.cbs.ontext(this.sectionStart, endIndex);
7831
+ }
7832
+ }
7833
+ emitCodePoint(cp, consumed) {
7834
+ if (this.baseState !== State.Text &&
7835
+ this.baseState !== State.InSpecialTag) {
7836
+ if (this.sectionStart < this.entityStart) {
7837
+ this.cbs.onattribdata(this.sectionStart, this.entityStart);
7838
+ }
7839
+ this.sectionStart = this.entityStart + consumed;
7840
+ this.index = this.sectionStart - 1;
7841
+ this.cbs.onattribentity(cp);
7842
+ }
7843
+ else {
7844
+ if (this.sectionStart < this.entityStart) {
7845
+ this.cbs.ontext(this.sectionStart, this.entityStart);
7846
+ }
7847
+ this.sectionStart = this.entityStart + consumed;
7848
+ this.index = this.sectionStart - 1;
7849
+ this.cbs.ontextentity(cp, this.sectionStart);
7850
+ }
7851
+ }
7852
+ };
7853
+ Tokenizer$2.default = Tokenizer$1;
7905
7854
 
7906
7855
  var __createBinding$1 = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7907
7856
  if (k2 === undefined) k2 = k;
@@ -7919,18 +7868,28 @@ var __setModuleDefault$1 = (commonjsGlobal && commonjsGlobal.__setModuleDefault)
7919
7868
  }) : function(o, v) {
7920
7869
  o["default"] = v;
7921
7870
  });
7922
- var __importStar$1 = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
7923
- if (mod && mod.__esModule) return mod;
7924
- var result = {};
7925
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding$1(result, mod, k);
7926
- __setModuleDefault$1(result, mod);
7927
- return result;
7928
- };
7871
+ var __importStar$1 = (commonjsGlobal && commonjsGlobal.__importStar) || (function () {
7872
+ var ownKeys = function(o) {
7873
+ ownKeys = Object.getOwnPropertyNames || function (o) {
7874
+ var ar = [];
7875
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
7876
+ return ar;
7877
+ };
7878
+ return ownKeys(o);
7879
+ };
7880
+ return function (mod) {
7881
+ if (mod && mod.__esModule) return mod;
7882
+ var result = {};
7883
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding$1(result, mod, k[i]);
7884
+ __setModuleDefault$1(result, mod);
7885
+ return result;
7886
+ };
7887
+ })();
7929
7888
  Object.defineProperty(Parser$4, "__esModule", { value: true });
7930
7889
  Parser$4.Parser = void 0;
7931
- var Tokenizer_js_1 = __importStar$1(Tokenizer$1);
7932
- var decode_js_1 = decode;
7933
- var formTags = new Set([
7890
+ const Tokenizer_js_1 = __importStar$1(Tokenizer$2);
7891
+ const decode_1 = decode$1;
7892
+ const formTags = new Set([
7934
7893
  "input",
7935
7894
  "option",
7936
7895
  "optgroup",
@@ -7939,11 +7898,11 @@ var formTags = new Set([
7939
7898
  "datalist",
7940
7899
  "textarea",
7941
7900
  ]);
7942
- var pTag = new Set(["p"]);
7943
- var tableSectionTags = new Set(["thead", "tbody"]);
7944
- var ddtTags = new Set(["dd", "dt"]);
7945
- var rtpTags = new Set(["rt", "rp"]);
7946
- var openImpliesClose = new Map([
7901
+ const pTag = new Set(["p"]);
7902
+ const tableSectionTags = new Set(["thead", "tbody"]);
7903
+ const ddtTags = new Set(["dd", "dt"]);
7904
+ const rtpTags = new Set(["rt", "rp"]);
7905
+ const openImpliesClose = new Map([
7947
7906
  ["tr", new Set(["tr", "th", "td"])],
7948
7907
  ["th", new Set(["th"])],
7949
7908
  ["td", new Set(["thead", "th", "td"])],
@@ -7992,7 +7951,7 @@ var openImpliesClose = new Map([
7992
7951
  ["tbody", tableSectionTags],
7993
7952
  ["tfoot", tableSectionTags],
7994
7953
  ]);
7995
- var voidElements = new Set([
7954
+ const voidElements = new Set([
7996
7955
  "area",
7997
7956
  "base",
7998
7957
  "basefont",
@@ -8013,8 +7972,8 @@ var voidElements = new Set([
8013
7972
  "track",
8014
7973
  "wbr",
8015
7974
  ]);
8016
- var foreignContextElements = new Set(["math", "svg"]);
8017
- var htmlIntegrationElements = new Set([
7975
+ const foreignContextElements = new Set(["math", "svg"]);
7976
+ const htmlIntegrationElements = new Set([
8018
7977
  "mi",
8019
7978
  "mo",
8020
7979
  "mn",
@@ -8025,11 +7984,10 @@ var htmlIntegrationElements = new Set([
8025
7984
  "desc",
8026
7985
  "title",
8027
7986
  ]);
8028
- var reNameEnd = /\s|\//;
8029
- var Parser$3 = /** @class */ (function () {
8030
- function Parser(cbs, options) {
8031
- if (options === void 0) { options = {}; }
8032
- var _a, _b, _c, _d, _e;
7987
+ const reNameEnd = /\s|\//;
7988
+ let Parser$3 = class Parser {
7989
+ constructor(cbs, options = {}) {
7990
+ var _a, _b, _c, _d, _e, _f;
8033
7991
  this.options = options;
8034
7992
  /** The start index of the last event. */
8035
7993
  this.startIndex = 0;
@@ -8045,7 +8003,6 @@ var Parser$3 = /** @class */ (function () {
8045
8003
  this.attribvalue = "";
8046
8004
  this.attribs = null;
8047
8005
  this.stack = [];
8048
- this.foreignContext = [];
8049
8006
  this.buffers = [];
8050
8007
  this.bufferOffset = 0;
8051
8008
  /** The index of the last written buffer. Used when resuming after a `pause()`. */
@@ -8053,71 +8010,75 @@ var Parser$3 = /** @class */ (function () {
8053
8010
  /** Indicates whether the parser has finished running / `.end` has been called. */
8054
8011
  this.ended = false;
8055
8012
  this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};
8056
- this.lowerCaseTagNames = (_a = options.lowerCaseTags) !== null && _a !== void 0 ? _a : !options.xmlMode;
8013
+ this.htmlMode = !this.options.xmlMode;
8014
+ this.lowerCaseTagNames = (_a = options.lowerCaseTags) !== null && _a !== void 0 ? _a : this.htmlMode;
8057
8015
  this.lowerCaseAttributeNames =
8058
- (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : !options.xmlMode;
8059
- this.tokenizer = new ((_c = options.Tokenizer) !== null && _c !== void 0 ? _c : Tokenizer_js_1.default)(this.options, this);
8060
- (_e = (_d = this.cbs).onparserinit) === null || _e === void 0 ? void 0 : _e.call(_d, this);
8016
+ (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : this.htmlMode;
8017
+ this.recognizeSelfClosing =
8018
+ (_c = options.recognizeSelfClosing) !== null && _c !== void 0 ? _c : !this.htmlMode;
8019
+ this.tokenizer = new ((_d = options.Tokenizer) !== null && _d !== void 0 ? _d : Tokenizer_js_1.default)(this.options, this);
8020
+ this.foreignContext = [!this.htmlMode];
8021
+ (_f = (_e = this.cbs).onparserinit) === null || _f === void 0 ? void 0 : _f.call(_e, this);
8061
8022
  }
8062
8023
  // Tokenizer event handlers
8063
8024
  /** @internal */
8064
- Parser.prototype.ontext = function (start, endIndex) {
8025
+ ontext(start, endIndex) {
8065
8026
  var _a, _b;
8066
- var data = this.getSlice(start, endIndex);
8027
+ const data = this.getSlice(start, endIndex);
8067
8028
  this.endIndex = endIndex - 1;
8068
8029
  (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, data);
8069
8030
  this.startIndex = endIndex;
8070
- };
8031
+ }
8071
8032
  /** @internal */
8072
- Parser.prototype.ontextentity = function (cp) {
8033
+ ontextentity(cp, endIndex) {
8073
8034
  var _a, _b;
8074
- /*
8075
- * Entities can be emitted on the character, or directly after.
8076
- * We use the section start here to get accurate indices.
8077
- */
8078
- var index = this.tokenizer.getSectionStart();
8079
- this.endIndex = index - 1;
8080
- (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, (0, decode_js_1.fromCodePoint)(cp));
8081
- this.startIndex = index;
8082
- };
8083
- Parser.prototype.isVoidElement = function (name) {
8084
- return !this.options.xmlMode && voidElements.has(name);
8085
- };
8035
+ this.endIndex = endIndex - 1;
8036
+ (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, (0, decode_1.fromCodePoint)(cp));
8037
+ this.startIndex = endIndex;
8038
+ }
8039
+ /**
8040
+ * Checks if the current tag is a void element. Override this if you want
8041
+ * to specify your own additional void elements.
8042
+ */
8043
+ isVoidElement(name) {
8044
+ return this.htmlMode && voidElements.has(name);
8045
+ }
8086
8046
  /** @internal */
8087
- Parser.prototype.onopentagname = function (start, endIndex) {
8047
+ onopentagname(start, endIndex) {
8088
8048
  this.endIndex = endIndex;
8089
- var name = this.getSlice(start, endIndex);
8049
+ let name = this.getSlice(start, endIndex);
8090
8050
  if (this.lowerCaseTagNames) {
8091
8051
  name = name.toLowerCase();
8092
8052
  }
8093
8053
  this.emitOpenTag(name);
8094
- };
8095
- Parser.prototype.emitOpenTag = function (name) {
8054
+ }
8055
+ emitOpenTag(name) {
8096
8056
  var _a, _b, _c, _d;
8097
8057
  this.openTagStart = this.startIndex;
8098
8058
  this.tagname = name;
8099
- var impliesClose = !this.options.xmlMode && openImpliesClose.get(name);
8059
+ const impliesClose = this.htmlMode && openImpliesClose.get(name);
8100
8060
  if (impliesClose) {
8101
- while (this.stack.length > 0 &&
8102
- impliesClose.has(this.stack[this.stack.length - 1])) {
8103
- var element = this.stack.pop();
8061
+ while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {
8062
+ const element = this.stack.shift();
8104
8063
  (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, element, true);
8105
8064
  }
8106
8065
  }
8107
8066
  if (!this.isVoidElement(name)) {
8108
- this.stack.push(name);
8109
- if (foreignContextElements.has(name)) {
8110
- this.foreignContext.push(true);
8111
- }
8112
- else if (htmlIntegrationElements.has(name)) {
8113
- this.foreignContext.push(false);
8067
+ this.stack.unshift(name);
8068
+ if (this.htmlMode) {
8069
+ if (foreignContextElements.has(name)) {
8070
+ this.foreignContext.unshift(true);
8071
+ }
8072
+ else if (htmlIntegrationElements.has(name)) {
8073
+ this.foreignContext.unshift(false);
8074
+ }
8114
8075
  }
8115
8076
  }
8116
8077
  (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, name);
8117
8078
  if (this.cbs.onopentag)
8118
8079
  this.attribs = {};
8119
- };
8120
- Parser.prototype.endOpenTag = function (isImplied) {
8080
+ }
8081
+ endOpenTag(isImplied) {
8121
8082
  var _a, _b;
8122
8083
  this.startIndex = this.openTagStart;
8123
8084
  if (this.attribs) {
@@ -8128,60 +8089,55 @@ var Parser$3 = /** @class */ (function () {
8128
8089
  this.cbs.onclosetag(this.tagname, true);
8129
8090
  }
8130
8091
  this.tagname = "";
8131
- };
8092
+ }
8132
8093
  /** @internal */
8133
- Parser.prototype.onopentagend = function (endIndex) {
8094
+ onopentagend(endIndex) {
8134
8095
  this.endIndex = endIndex;
8135
8096
  this.endOpenTag(false);
8136
8097
  // Set `startIndex` for next node
8137
8098
  this.startIndex = endIndex + 1;
8138
- };
8099
+ }
8139
8100
  /** @internal */
8140
- Parser.prototype.onclosetag = function (start, endIndex) {
8141
- var _a, _b, _c, _d, _e, _f;
8101
+ onclosetag(start, endIndex) {
8102
+ var _a, _b, _c, _d, _e, _f, _g, _h;
8142
8103
  this.endIndex = endIndex;
8143
- var name = this.getSlice(start, endIndex);
8104
+ let name = this.getSlice(start, endIndex);
8144
8105
  if (this.lowerCaseTagNames) {
8145
8106
  name = name.toLowerCase();
8146
8107
  }
8147
- if (foreignContextElements.has(name) ||
8148
- htmlIntegrationElements.has(name)) {
8149
- this.foreignContext.pop();
8108
+ if (this.htmlMode &&
8109
+ (foreignContextElements.has(name) ||
8110
+ htmlIntegrationElements.has(name))) {
8111
+ this.foreignContext.shift();
8150
8112
  }
8151
8113
  if (!this.isVoidElement(name)) {
8152
- var pos = this.stack.lastIndexOf(name);
8114
+ const pos = this.stack.indexOf(name);
8153
8115
  if (pos !== -1) {
8154
- if (this.cbs.onclosetag) {
8155
- var count = this.stack.length - pos;
8156
- while (count--) {
8157
- // We know the stack has sufficient elements.
8158
- this.cbs.onclosetag(this.stack.pop(), count !== 0);
8159
- }
8116
+ for (let index = 0; index <= pos; index++) {
8117
+ const element = this.stack.shift();
8118
+ // We know the stack has sufficient elements.
8119
+ (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, element, index !== pos);
8160
8120
  }
8161
- else
8162
- this.stack.length = pos;
8163
8121
  }
8164
- else if (!this.options.xmlMode && name === "p") {
8122
+ else if (this.htmlMode && name === "p") {
8165
8123
  // Implicit open before close
8166
8124
  this.emitOpenTag("p");
8167
8125
  this.closeCurrentTag(true);
8168
8126
  }
8169
8127
  }
8170
- else if (!this.options.xmlMode && name === "br") {
8128
+ else if (this.htmlMode && name === "br") {
8171
8129
  // We can't use `emitOpenTag` for implicit open, as `br` would be implicitly closed.
8172
- (_b = (_a = this.cbs).onopentagname) === null || _b === void 0 ? void 0 : _b.call(_a, "br");
8173
- (_d = (_c = this.cbs).onopentag) === null || _d === void 0 ? void 0 : _d.call(_c, "br", {}, true);
8174
- (_f = (_e = this.cbs).onclosetag) === null || _f === void 0 ? void 0 : _f.call(_e, "br", false);
8130
+ (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, "br");
8131
+ (_f = (_e = this.cbs).onopentag) === null || _f === void 0 ? void 0 : _f.call(_e, "br", {}, true);
8132
+ (_h = (_g = this.cbs).onclosetag) === null || _h === void 0 ? void 0 : _h.call(_g, "br", false);
8175
8133
  }
8176
8134
  // Set `startIndex` for next node
8177
8135
  this.startIndex = endIndex + 1;
8178
- };
8136
+ }
8179
8137
  /** @internal */
8180
- Parser.prototype.onselfclosingtag = function (endIndex) {
8138
+ onselfclosingtag(endIndex) {
8181
8139
  this.endIndex = endIndex;
8182
- if (this.options.xmlMode ||
8183
- this.options.recognizeSelfClosing ||
8184
- this.foreignContext[this.foreignContext.length - 1]) {
8140
+ if (this.recognizeSelfClosing || this.foreignContext[0]) {
8185
8141
  this.closeCurrentTag(false);
8186
8142
  // Set `startIndex` for next node
8187
8143
  this.startIndex = endIndex + 1;
@@ -8190,36 +8146,36 @@ var Parser$3 = /** @class */ (function () {
8190
8146
  // Ignore the fact that the tag is self-closing.
8191
8147
  this.onopentagend(endIndex);
8192
8148
  }
8193
- };
8194
- Parser.prototype.closeCurrentTag = function (isOpenImplied) {
8149
+ }
8150
+ closeCurrentTag(isOpenImplied) {
8195
8151
  var _a, _b;
8196
- var name = this.tagname;
8152
+ const name = this.tagname;
8197
8153
  this.endOpenTag(isOpenImplied);
8198
8154
  // Self-closing tags will be on the top of the stack
8199
- if (this.stack[this.stack.length - 1] === name) {
8155
+ if (this.stack[0] === name) {
8200
8156
  // If the opening tag isn't implied, the closing tag has to be implied.
8201
8157
  (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, name, !isOpenImplied);
8202
- this.stack.pop();
8158
+ this.stack.shift();
8203
8159
  }
8204
- };
8160
+ }
8205
8161
  /** @internal */
8206
- Parser.prototype.onattribname = function (start, endIndex) {
8162
+ onattribname(start, endIndex) {
8207
8163
  this.startIndex = start;
8208
- var name = this.getSlice(start, endIndex);
8164
+ const name = this.getSlice(start, endIndex);
8209
8165
  this.attribname = this.lowerCaseAttributeNames
8210
8166
  ? name.toLowerCase()
8211
8167
  : name;
8212
- };
8168
+ }
8213
8169
  /** @internal */
8214
- Parser.prototype.onattribdata = function (start, endIndex) {
8170
+ onattribdata(start, endIndex) {
8215
8171
  this.attribvalue += this.getSlice(start, endIndex);
8216
- };
8172
+ }
8217
8173
  /** @internal */
8218
- Parser.prototype.onattribentity = function (cp) {
8219
- this.attribvalue += (0, decode_js_1.fromCodePoint)(cp);
8220
- };
8174
+ onattribentity(cp) {
8175
+ this.attribvalue += (0, decode_1.fromCodePoint)(cp);
8176
+ }
8221
8177
  /** @internal */
8222
- Parser.prototype.onattribend = function (quote, endIndex) {
8178
+ onattribend(quote, endIndex) {
8223
8179
  var _a, _b;
8224
8180
  this.endIndex = endIndex;
8225
8181
  (_b = (_a = this.cbs).onattribute) === null || _b === void 0 ? void 0 : _b.call(_a, this.attribname, this.attribvalue, quote === Tokenizer_js_1.QuoteType.Double
@@ -8234,78 +8190,79 @@ var Parser$3 = /** @class */ (function () {
8234
8190
  this.attribs[this.attribname] = this.attribvalue;
8235
8191
  }
8236
8192
  this.attribvalue = "";
8237
- };
8238
- Parser.prototype.getInstructionName = function (value) {
8239
- var index = value.search(reNameEnd);
8240
- var name = index < 0 ? value : value.substr(0, index);
8193
+ }
8194
+ getInstructionName(value) {
8195
+ const index = value.search(reNameEnd);
8196
+ let name = index < 0 ? value : value.substr(0, index);
8241
8197
  if (this.lowerCaseTagNames) {
8242
8198
  name = name.toLowerCase();
8243
8199
  }
8244
8200
  return name;
8245
- };
8201
+ }
8246
8202
  /** @internal */
8247
- Parser.prototype.ondeclaration = function (start, endIndex) {
8203
+ ondeclaration(start, endIndex) {
8248
8204
  this.endIndex = endIndex;
8249
- var value = this.getSlice(start, endIndex);
8205
+ const value = this.getSlice(start, endIndex);
8250
8206
  if (this.cbs.onprocessinginstruction) {
8251
- var name = this.getInstructionName(value);
8252
- this.cbs.onprocessinginstruction("!".concat(name), "!".concat(value));
8207
+ const name = this.getInstructionName(value);
8208
+ this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);
8253
8209
  }
8254
8210
  // Set `startIndex` for next node
8255
8211
  this.startIndex = endIndex + 1;
8256
- };
8212
+ }
8257
8213
  /** @internal */
8258
- Parser.prototype.onprocessinginstruction = function (start, endIndex) {
8214
+ onprocessinginstruction(start, endIndex) {
8259
8215
  this.endIndex = endIndex;
8260
- var value = this.getSlice(start, endIndex);
8216
+ const value = this.getSlice(start, endIndex);
8261
8217
  if (this.cbs.onprocessinginstruction) {
8262
- var name = this.getInstructionName(value);
8263
- this.cbs.onprocessinginstruction("?".concat(name), "?".concat(value));
8218
+ const name = this.getInstructionName(value);
8219
+ this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);
8264
8220
  }
8265
8221
  // Set `startIndex` for next node
8266
8222
  this.startIndex = endIndex + 1;
8267
- };
8223
+ }
8268
8224
  /** @internal */
8269
- Parser.prototype.oncomment = function (start, endIndex, offset) {
8225
+ oncomment(start, endIndex, offset) {
8270
8226
  var _a, _b, _c, _d;
8271
8227
  this.endIndex = endIndex;
8272
8228
  (_b = (_a = this.cbs).oncomment) === null || _b === void 0 ? void 0 : _b.call(_a, this.getSlice(start, endIndex - offset));
8273
8229
  (_d = (_c = this.cbs).oncommentend) === null || _d === void 0 ? void 0 : _d.call(_c);
8274
8230
  // Set `startIndex` for next node
8275
8231
  this.startIndex = endIndex + 1;
8276
- };
8232
+ }
8277
8233
  /** @internal */
8278
- Parser.prototype.oncdata = function (start, endIndex, offset) {
8234
+ oncdata(start, endIndex, offset) {
8279
8235
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
8280
8236
  this.endIndex = endIndex;
8281
- var value = this.getSlice(start, endIndex - offset);
8282
- if (this.options.xmlMode || this.options.recognizeCDATA) {
8237
+ const value = this.getSlice(start, endIndex - offset);
8238
+ if (!this.htmlMode || this.options.recognizeCDATA) {
8283
8239
  (_b = (_a = this.cbs).oncdatastart) === null || _b === void 0 ? void 0 : _b.call(_a);
8284
8240
  (_d = (_c = this.cbs).ontext) === null || _d === void 0 ? void 0 : _d.call(_c, value);
8285
8241
  (_f = (_e = this.cbs).oncdataend) === null || _f === void 0 ? void 0 : _f.call(_e);
8286
8242
  }
8287
8243
  else {
8288
- (_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, "[CDATA[".concat(value, "]]"));
8244
+ (_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, `[CDATA[${value}]]`);
8289
8245
  (_k = (_j = this.cbs).oncommentend) === null || _k === void 0 ? void 0 : _k.call(_j);
8290
8246
  }
8291
8247
  // Set `startIndex` for next node
8292
8248
  this.startIndex = endIndex + 1;
8293
- };
8249
+ }
8294
8250
  /** @internal */
8295
- Parser.prototype.onend = function () {
8251
+ onend() {
8296
8252
  var _a, _b;
8297
8253
  if (this.cbs.onclosetag) {
8298
8254
  // Set the end index for all remaining tags
8299
8255
  this.endIndex = this.startIndex;
8300
- for (var index = this.stack.length; index > 0; this.cbs.onclosetag(this.stack[--index], true))
8301
- ;
8256
+ for (let index = 0; index < this.stack.length; index++) {
8257
+ this.cbs.onclosetag(this.stack[index], true);
8258
+ }
8302
8259
  }
8303
8260
  (_b = (_a = this.cbs).onend) === null || _b === void 0 ? void 0 : _b.call(_a);
8304
- };
8261
+ }
8305
8262
  /**
8306
8263
  * Resets the parser to a blank state, ready to parse a new HTML document
8307
8264
  */
8308
- Parser.prototype.reset = function () {
8265
+ reset() {
8309
8266
  var _a, _b, _c, _d;
8310
8267
  (_b = (_a = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a);
8311
8268
  this.tokenizer.reset();
@@ -8317,42 +8274,44 @@ var Parser$3 = /** @class */ (function () {
8317
8274
  this.endIndex = 0;
8318
8275
  (_d = (_c = this.cbs).onparserinit) === null || _d === void 0 ? void 0 : _d.call(_c, this);
8319
8276
  this.buffers.length = 0;
8277
+ this.foreignContext.length = 0;
8278
+ this.foreignContext.unshift(!this.htmlMode);
8320
8279
  this.bufferOffset = 0;
8321
8280
  this.writeIndex = 0;
8322
8281
  this.ended = false;
8323
- };
8282
+ }
8324
8283
  /**
8325
8284
  * Resets the parser, then parses a complete document and
8326
8285
  * pushes it to the handler.
8327
8286
  *
8328
8287
  * @param data Document to parse.
8329
8288
  */
8330
- Parser.prototype.parseComplete = function (data) {
8289
+ parseComplete(data) {
8331
8290
  this.reset();
8332
8291
  this.end(data);
8333
- };
8334
- Parser.prototype.getSlice = function (start, end) {
8292
+ }
8293
+ getSlice(start, end) {
8335
8294
  while (start - this.bufferOffset >= this.buffers[0].length) {
8336
8295
  this.shiftBuffer();
8337
8296
  }
8338
- var slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);
8297
+ let slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);
8339
8298
  while (end - this.bufferOffset > this.buffers[0].length) {
8340
8299
  this.shiftBuffer();
8341
8300
  slice += this.buffers[0].slice(0, end - this.bufferOffset);
8342
8301
  }
8343
8302
  return slice;
8344
- };
8345
- Parser.prototype.shiftBuffer = function () {
8303
+ }
8304
+ shiftBuffer() {
8346
8305
  this.bufferOffset += this.buffers[0].length;
8347
8306
  this.writeIndex--;
8348
8307
  this.buffers.shift();
8349
- };
8308
+ }
8350
8309
  /**
8351
8310
  * Parses a chunk of data and calls the corresponding callbacks.
8352
8311
  *
8353
8312
  * @param chunk Chunk to parse.
8354
8313
  */
8355
- Parser.prototype.write = function (chunk) {
8314
+ write(chunk) {
8356
8315
  var _a, _b;
8357
8316
  if (this.ended) {
8358
8317
  (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(".write() after done!"));
@@ -8363,13 +8322,13 @@ var Parser$3 = /** @class */ (function () {
8363
8322
  this.tokenizer.write(chunk);
8364
8323
  this.writeIndex++;
8365
8324
  }
8366
- };
8325
+ }
8367
8326
  /**
8368
8327
  * Parses the end of the buffer and clears the stack, calls onend.
8369
8328
  *
8370
8329
  * @param chunk Optional final chunk to parse.
8371
8330
  */
8372
- Parser.prototype.end = function (chunk) {
8331
+ end(chunk) {
8373
8332
  var _a, _b;
8374
8333
  if (this.ended) {
8375
8334
  (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(".end() after done!"));
@@ -8379,17 +8338,17 @@ var Parser$3 = /** @class */ (function () {
8379
8338
  this.write(chunk);
8380
8339
  this.ended = true;
8381
8340
  this.tokenizer.end();
8382
- };
8341
+ }
8383
8342
  /**
8384
8343
  * Pauses parsing. The parser won't emit events until `resume` is called.
8385
8344
  */
8386
- Parser.prototype.pause = function () {
8345
+ pause() {
8387
8346
  this.tokenizer.pause();
8388
- };
8347
+ }
8389
8348
  /**
8390
8349
  * Resumes parsing after `pause` was called.
8391
8350
  */
8392
- Parser.prototype.resume = function () {
8351
+ resume() {
8393
8352
  this.tokenizer.resume();
8394
8353
  while (this.tokenizer.running &&
8395
8354
  this.writeIndex < this.buffers.length) {
@@ -8397,27 +8356,26 @@ var Parser$3 = /** @class */ (function () {
8397
8356
  }
8398
8357
  if (this.ended)
8399
8358
  this.tokenizer.end();
8400
- };
8359
+ }
8401
8360
  /**
8402
8361
  * Alias of `write`, for backwards compatibility.
8403
8362
  *
8404
8363
  * @param chunk Chunk to parse.
8405
8364
  * @deprecated
8406
8365
  */
8407
- Parser.prototype.parseChunk = function (chunk) {
8366
+ parseChunk(chunk) {
8408
8367
  this.write(chunk);
8409
- };
8368
+ }
8410
8369
  /**
8411
8370
  * Alias of `end`, for backwards compatibility.
8412
8371
  *
8413
8372
  * @param chunk Optional final chunk to parse.
8414
8373
  * @deprecated
8415
8374
  */
8416
- Parser.prototype.done = function (chunk) {
8375
+ done(chunk) {
8417
8376
  this.end(chunk);
8418
- };
8419
- return Parser;
8420
- }());
8377
+ }
8378
+ };
8421
8379
  Parser$4.Parser = Parser$3;
8422
8380
 
8423
8381
  var lib$4 = {};
@@ -8969,168 +8927,808 @@ function cloneChildren(childs) {
8969
8927
  if (k2 === undefined) k2 = k;
8970
8928
  o[k2] = m[k];
8971
8929
  }));
8972
- var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) {
8973
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
8930
+ var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) {
8931
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
8932
+ };
8933
+ Object.defineProperty(exports, "__esModule", { value: true });
8934
+ exports.DomHandler = void 0;
8935
+ var domelementtype_1 = lib$3;
8936
+ var node_js_1 = node$1;
8937
+ __exportStar(node$1, exports);
8938
+ // Default options
8939
+ var defaultOpts = {
8940
+ withStartIndices: false,
8941
+ withEndIndices: false,
8942
+ xmlMode: false,
8943
+ };
8944
+ var DomHandler = /** @class */ (function () {
8945
+ /**
8946
+ * @param callback Called once parsing has completed.
8947
+ * @param options Settings for the handler.
8948
+ * @param elementCB Callback whenever a tag is closed.
8949
+ */
8950
+ function DomHandler(callback, options, elementCB) {
8951
+ /** The elements of the DOM */
8952
+ this.dom = [];
8953
+ /** The root element for the DOM */
8954
+ this.root = new node_js_1.Document(this.dom);
8955
+ /** Indicated whether parsing has been completed. */
8956
+ this.done = false;
8957
+ /** Stack of open tags. */
8958
+ this.tagStack = [this.root];
8959
+ /** A data node that is still being written to. */
8960
+ this.lastNode = null;
8961
+ /** Reference to the parser instance. Used for location information. */
8962
+ this.parser = null;
8963
+ // Make it possible to skip arguments, for backwards-compatibility
8964
+ if (typeof options === "function") {
8965
+ elementCB = options;
8966
+ options = defaultOpts;
8967
+ }
8968
+ if (typeof callback === "object") {
8969
+ options = callback;
8970
+ callback = undefined;
8971
+ }
8972
+ this.callback = callback !== null && callback !== void 0 ? callback : null;
8973
+ this.options = options !== null && options !== void 0 ? options : defaultOpts;
8974
+ this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;
8975
+ }
8976
+ DomHandler.prototype.onparserinit = function (parser) {
8977
+ this.parser = parser;
8978
+ };
8979
+ // Resets the handler back to starting state
8980
+ DomHandler.prototype.onreset = function () {
8981
+ this.dom = [];
8982
+ this.root = new node_js_1.Document(this.dom);
8983
+ this.done = false;
8984
+ this.tagStack = [this.root];
8985
+ this.lastNode = null;
8986
+ this.parser = null;
8987
+ };
8988
+ // Signals the handler that parsing is done
8989
+ DomHandler.prototype.onend = function () {
8990
+ if (this.done)
8991
+ return;
8992
+ this.done = true;
8993
+ this.parser = null;
8994
+ this.handleCallback(null);
8995
+ };
8996
+ DomHandler.prototype.onerror = function (error) {
8997
+ this.handleCallback(error);
8998
+ };
8999
+ DomHandler.prototype.onclosetag = function () {
9000
+ this.lastNode = null;
9001
+ var elem = this.tagStack.pop();
9002
+ if (this.options.withEndIndices) {
9003
+ elem.endIndex = this.parser.endIndex;
9004
+ }
9005
+ if (this.elementCB)
9006
+ this.elementCB(elem);
9007
+ };
9008
+ DomHandler.prototype.onopentag = function (name, attribs) {
9009
+ var type = this.options.xmlMode ? domelementtype_1.ElementType.Tag : undefined;
9010
+ var element = new node_js_1.Element(name, attribs, undefined, type);
9011
+ this.addNode(element);
9012
+ this.tagStack.push(element);
9013
+ };
9014
+ DomHandler.prototype.ontext = function (data) {
9015
+ var lastNode = this.lastNode;
9016
+ if (lastNode && lastNode.type === domelementtype_1.ElementType.Text) {
9017
+ lastNode.data += data;
9018
+ if (this.options.withEndIndices) {
9019
+ lastNode.endIndex = this.parser.endIndex;
9020
+ }
9021
+ }
9022
+ else {
9023
+ var node = new node_js_1.Text(data);
9024
+ this.addNode(node);
9025
+ this.lastNode = node;
9026
+ }
9027
+ };
9028
+ DomHandler.prototype.oncomment = function (data) {
9029
+ if (this.lastNode && this.lastNode.type === domelementtype_1.ElementType.Comment) {
9030
+ this.lastNode.data += data;
9031
+ return;
9032
+ }
9033
+ var node = new node_js_1.Comment(data);
9034
+ this.addNode(node);
9035
+ this.lastNode = node;
9036
+ };
9037
+ DomHandler.prototype.oncommentend = function () {
9038
+ this.lastNode = null;
9039
+ };
9040
+ DomHandler.prototype.oncdatastart = function () {
9041
+ var text = new node_js_1.Text("");
9042
+ var node = new node_js_1.CDATA([text]);
9043
+ this.addNode(node);
9044
+ text.parent = node;
9045
+ this.lastNode = text;
9046
+ };
9047
+ DomHandler.prototype.oncdataend = function () {
9048
+ this.lastNode = null;
9049
+ };
9050
+ DomHandler.prototype.onprocessinginstruction = function (name, data) {
9051
+ var node = new node_js_1.ProcessingInstruction(name, data);
9052
+ this.addNode(node);
9053
+ };
9054
+ DomHandler.prototype.handleCallback = function (error) {
9055
+ if (typeof this.callback === "function") {
9056
+ this.callback(error, this.dom);
9057
+ }
9058
+ else if (error) {
9059
+ throw error;
9060
+ }
9061
+ };
9062
+ DomHandler.prototype.addNode = function (node) {
9063
+ var parent = this.tagStack[this.tagStack.length - 1];
9064
+ var previousSibling = parent.children[parent.children.length - 1];
9065
+ if (this.options.withStartIndices) {
9066
+ node.startIndex = this.parser.startIndex;
9067
+ }
9068
+ if (this.options.withEndIndices) {
9069
+ node.endIndex = this.parser.endIndex;
9070
+ }
9071
+ parent.children.push(node);
9072
+ if (previousSibling) {
9073
+ node.prev = previousSibling;
9074
+ previousSibling.next = node;
9075
+ }
9076
+ node.parent = parent;
9077
+ this.lastNode = null;
9078
+ };
9079
+ return DomHandler;
9080
+ }());
9081
+ exports.DomHandler = DomHandler;
9082
+ exports.default = DomHandler;
9083
+ } (lib$4));
9084
+
9085
+ var lib$2 = {};
9086
+
9087
+ var stringify$5 = {};
9088
+
9089
+ var lib$1 = {};
9090
+
9091
+ var lib = {};
9092
+
9093
+ var decode = {};
9094
+
9095
+ var decodeDataHtml = {};
9096
+
9097
+ // Generated using scripts/write-decode-map.ts
9098
+ Object.defineProperty(decodeDataHtml, "__esModule", { value: true });
9099
+ decodeDataHtml.default = new Uint16Array(
9100
+ // prettier-ignore
9101
+ "\u1d41<\xd5\u0131\u028a\u049d\u057b\u05d0\u0675\u06de\u07a2\u07d6\u080f\u0a4a\u0a91\u0da1\u0e6d\u0f09\u0f26\u10ca\u1228\u12e1\u1415\u149d\u14c3\u14df\u1525\0\0\0\0\0\0\u156b\u16cd\u198d\u1c12\u1ddd\u1f7e\u2060\u21b0\u228d\u23c0\u23fb\u2442\u2824\u2912\u2d08\u2e48\u2fce\u3016\u32ba\u3639\u37ac\u38fe\u3a28\u3a71\u3ae0\u3b2e\u0800EMabcfglmnoprstu\\bfms\x7f\x84\x8b\x90\x95\x98\xa6\xb3\xb9\xc8\xcflig\u803b\xc6\u40c6P\u803b&\u4026cute\u803b\xc1\u40c1reve;\u4102\u0100iyx}rc\u803b\xc2\u40c2;\u4410r;\uc000\ud835\udd04rave\u803b\xc0\u40c0pha;\u4391acr;\u4100d;\u6a53\u0100gp\x9d\xa1on;\u4104f;\uc000\ud835\udd38plyFunction;\u6061ing\u803b\xc5\u40c5\u0100cs\xbe\xc3r;\uc000\ud835\udc9cign;\u6254ilde\u803b\xc3\u40c3ml\u803b\xc4\u40c4\u0400aceforsu\xe5\xfb\xfe\u0117\u011c\u0122\u0127\u012a\u0100cr\xea\xf2kslash;\u6216\u0176\xf6\xf8;\u6ae7ed;\u6306y;\u4411\u0180crt\u0105\u010b\u0114ause;\u6235noullis;\u612ca;\u4392r;\uc000\ud835\udd05pf;\uc000\ud835\udd39eve;\u42d8c\xf2\u0113mpeq;\u624e\u0700HOacdefhilorsu\u014d\u0151\u0156\u0180\u019e\u01a2\u01b5\u01b7\u01ba\u01dc\u0215\u0273\u0278\u027ecy;\u4427PY\u803b\xa9\u40a9\u0180cpy\u015d\u0162\u017aute;\u4106\u0100;i\u0167\u0168\u62d2talDifferentialD;\u6145leys;\u612d\u0200aeio\u0189\u018e\u0194\u0198ron;\u410cdil\u803b\xc7\u40c7rc;\u4108nint;\u6230ot;\u410a\u0100dn\u01a7\u01adilla;\u40b8terDot;\u40b7\xf2\u017fi;\u43a7rcle\u0200DMPT\u01c7\u01cb\u01d1\u01d6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01e2\u01f8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020foubleQuote;\u601duote;\u6019\u0200lnpu\u021e\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6a74\u0180git\u022f\u0236\u023aruent;\u6261nt;\u622fourIntegral;\u622e\u0100fr\u024c\u024e;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6a2fcr;\uc000\ud835\udc9ep\u0100;C\u0284\u0285\u62d3ap;\u624d\u0580DJSZacefios\u02a0\u02ac\u02b0\u02b4\u02b8\u02cb\u02d7\u02e1\u02e6\u0333\u048d\u0100;o\u0179\u02a5trahd;\u6911cy;\u4402cy;\u4405cy;\u440f\u0180grs\u02bf\u02c4\u02c7ger;\u6021r;\u61a1hv;\u6ae4\u0100ay\u02d0\u02d5ron;\u410e;\u4414l\u0100;t\u02dd\u02de\u6207a;\u4394r;\uc000\ud835\udd07\u0100af\u02eb\u0327\u0100cm\u02f0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031ccute;\u40b4o\u0174\u030b\u030d;\u42d9bleAcute;\u42ddrave;\u4060ilde;\u42dcond;\u62c4ferentialD;\u6146\u0470\u033d\0\0\0\u0342\u0354\0\u0405f;\uc000\ud835\udd3b\u0180;DE\u0348\u0349\u034d\u40a8ot;\u60dcqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03cf\u03e2\u03f8ontourIntegra\xec\u0239o\u0274\u0379\0\0\u037b\xbb\u0349nArrow;\u61d3\u0100eo\u0387\u03a4ft\u0180ART\u0390\u0396\u03a1rrow;\u61d0ightArrow;\u61d4e\xe5\u02cang\u0100LR\u03ab\u03c4eft\u0100AR\u03b3\u03b9rrow;\u67f8ightArrow;\u67faightArrow;\u67f9ight\u0100AT\u03d8\u03derrow;\u61d2ee;\u62a8p\u0241\u03e9\0\0\u03efrrow;\u61d1ownArrow;\u61d5erticalBar;\u6225n\u0300ABLRTa\u0412\u042a\u0430\u045e\u047f\u037crrow\u0180;BU\u041d\u041e\u0422\u6193ar;\u6913pArrow;\u61f5reve;\u4311eft\u02d2\u043a\0\u0446\0\u0450ightVector;\u6950eeVector;\u695eector\u0100;B\u0459\u045a\u61bdar;\u6956ight\u01d4\u0467\0\u0471eeVector;\u695fector\u0100;B\u047a\u047b\u61c1ar;\u6957ee\u0100;A\u0486\u0487\u62a4rrow;\u61a7\u0100ct\u0492\u0497r;\uc000\ud835\udc9frok;\u4110\u0800NTacdfglmopqstux\u04bd\u04c0\u04c4\u04cb\u04de\u04e2\u04e7\u04ee\u04f5\u0521\u052f\u0536\u0552\u055d\u0560\u0565G;\u414aH\u803b\xd0\u40d0cute\u803b\xc9\u40c9\u0180aiy\u04d2\u04d7\u04dcron;\u411arc\u803b\xca\u40ca;\u442dot;\u4116r;\uc000\ud835\udd08rave\u803b\xc8\u40c8ement;\u6208\u0100ap\u04fa\u04fecr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65fberySmallSquare;\u65ab\u0100gp\u0526\u052aon;\u4118f;\uc000\ud835\udd3csilon;\u4395u\u0100ai\u053c\u0549l\u0100;T\u0542\u0543\u6a75ilde;\u6242librium;\u61cc\u0100ci\u0557\u055ar;\u6130m;\u6a73a;\u4397ml\u803b\xcb\u40cb\u0100ip\u056a\u056fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058d\u05b2\u05ccy;\u4424r;\uc000\ud835\udd09lled\u0253\u0597\0\0\u05a3mallSquare;\u65fcerySmallSquare;\u65aa\u0370\u05ba\0\u05bf\0\0\u05c4f;\uc000\ud835\udd3dAll;\u6200riertrf;\u6131c\xf2\u05cb\u0600JTabcdfgorst\u05e8\u05ec\u05ef\u05fa\u0600\u0612\u0616\u061b\u061d\u0623\u066c\u0672cy;\u4403\u803b>\u403emma\u0100;d\u05f7\u05f8\u4393;\u43dcreve;\u411e\u0180eiy\u0607\u060c\u0610dil;\u4122rc;\u411c;\u4413ot;\u4120r;\uc000\ud835\udd0a;\u62d9pf;\uc000\ud835\udd3eeater\u0300EFGLST\u0635\u0644\u064e\u0656\u065b\u0666qual\u0100;L\u063e\u063f\u6265ess;\u62dbullEqual;\u6267reater;\u6aa2ess;\u6277lantEqual;\u6a7eilde;\u6273cr;\uc000\ud835\udca2;\u626b\u0400Aacfiosu\u0685\u068b\u0696\u069b\u069e\u06aa\u06be\u06caRDcy;\u442a\u0100ct\u0690\u0694ek;\u42c7;\u405eirc;\u4124r;\u610clbertSpace;\u610b\u01f0\u06af\0\u06b2f;\u610dizontalLine;\u6500\u0100ct\u06c3\u06c5\xf2\u06a9rok;\u4126mp\u0144\u06d0\u06d8ownHum\xf0\u012fqual;\u624f\u0700EJOacdfgmnostu\u06fa\u06fe\u0703\u0707\u070e\u071a\u071e\u0721\u0728\u0744\u0778\u078b\u078f\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803b\xcd\u40cd\u0100iy\u0713\u0718rc\u803b\xce\u40ce;\u4418ot;\u4130r;\u6111rave\u803b\xcc\u40cc\u0180;ap\u0720\u072f\u073f\u0100cg\u0734\u0737r;\u412ainaryI;\u6148lie\xf3\u03dd\u01f4\u0749\0\u0762\u0100;e\u074d\u074e\u622c\u0100gr\u0753\u0758ral;\u622bsection;\u62c2isible\u0100CT\u076c\u0772omma;\u6063imes;\u6062\u0180gpt\u077f\u0783\u0788on;\u412ef;\uc000\ud835\udd40a;\u4399cr;\u6110ilde;\u4128\u01eb\u079a\0\u079ecy;\u4406l\u803b\xcf\u40cf\u0280cfosu\u07ac\u07b7\u07bc\u07c2\u07d0\u0100iy\u07b1\u07b5rc;\u4134;\u4419r;\uc000\ud835\udd0dpf;\uc000\ud835\udd41\u01e3\u07c7\0\u07ccr;\uc000\ud835\udca5rcy;\u4408kcy;\u4404\u0380HJacfos\u07e4\u07e8\u07ec\u07f1\u07fd\u0802\u0808cy;\u4425cy;\u440cppa;\u439a\u0100ey\u07f6\u07fbdil;\u4136;\u441ar;\uc000\ud835\udd0epf;\uc000\ud835\udd42cr;\uc000\ud835\udca6\u0580JTaceflmost\u0825\u0829\u082c\u0850\u0863\u09b3\u09b8\u09c7\u09cd\u0a37\u0a47cy;\u4409\u803b<\u403c\u0280cmnpr\u0837\u083c\u0841\u0844\u084dute;\u4139bda;\u439bg;\u67ealacetrf;\u6112r;\u619e\u0180aey\u0857\u085c\u0861ron;\u413ddil;\u413b;\u441b\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087e\u08a9\u08b1\u08e0\u08e6\u08fc\u092f\u095b\u0390\u096a\u0100nr\u0883\u088fgleBracket;\u67e8row\u0180;BR\u0899\u089a\u089e\u6190ar;\u61e4ightArrow;\u61c6eiling;\u6308o\u01f5\u08b7\0\u08c3bleBracket;\u67e6n\u01d4\u08c8\0\u08d2eeVector;\u6961ector\u0100;B\u08db\u08dc\u61c3ar;\u6959loor;\u630aight\u0100AV\u08ef\u08f5rrow;\u6194ector;\u694e\u0100er\u0901\u0917e\u0180;AV\u0909\u090a\u0910\u62a3rrow;\u61a4ector;\u695aiangle\u0180;BE\u0924\u0925\u0929\u62b2ar;\u69cfqual;\u62b4p\u0180DTV\u0937\u0942\u094cownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61bfar;\u6958ector\u0100;B\u0965\u0966\u61bcar;\u6952ight\xe1\u039cs\u0300EFGLST\u097e\u098b\u0995\u099d\u09a2\u09adqualGreater;\u62daullEqual;\u6266reater;\u6276ess;\u6aa1lantEqual;\u6a7dilde;\u6272r;\uc000\ud835\udd0f\u0100;e\u09bd\u09be\u62d8ftarrow;\u61daidot;\u413f\u0180npw\u09d4\u0a16\u0a1bg\u0200LRlr\u09de\u09f7\u0a02\u0a10eft\u0100AR\u09e6\u09ecrrow;\u67f5ightArrow;\u67f7ightArrow;\u67f6eft\u0100ar\u03b3\u0a0aight\xe1\u03bfight\xe1\u03caf;\uc000\ud835\udd43er\u0100LR\u0a22\u0a2ceftArrow;\u6199ightArrow;\u6198\u0180cht\u0a3e\u0a40\u0a42\xf2\u084c;\u61b0rok;\u4141;\u626a\u0400acefiosu\u0a5a\u0a5d\u0a60\u0a77\u0a7c\u0a85\u0a8b\u0a8ep;\u6905y;\u441c\u0100dl\u0a65\u0a6fiumSpace;\u605flintrf;\u6133r;\uc000\ud835\udd10nusPlus;\u6213pf;\uc000\ud835\udd44c\xf2\u0a76;\u439c\u0480Jacefostu\u0aa3\u0aa7\u0aad\u0ac0\u0b14\u0b19\u0d91\u0d97\u0d9ecy;\u440acute;\u4143\u0180aey\u0ab4\u0ab9\u0aberon;\u4147dil;\u4145;\u441d\u0180gsw\u0ac7\u0af0\u0b0eative\u0180MTV\u0ad3\u0adf\u0ae8ediumSpace;\u600bhi\u0100cn\u0ae6\u0ad8\xeb\u0ad9eryThi\xee\u0ad9ted\u0100GL\u0af8\u0b06reaterGreate\xf2\u0673essLes\xf3\u0a48Line;\u400ar;\uc000\ud835\udd11\u0200Bnpt\u0b22\u0b28\u0b37\u0b3areak;\u6060BreakingSpace;\u40a0f;\u6115\u0680;CDEGHLNPRSTV\u0b55\u0b56\u0b6a\u0b7c\u0ba1\u0beb\u0c04\u0c5e\u0c84\u0ca6\u0cd8\u0d61\u0d85\u6aec\u0100ou\u0b5b\u0b64ngruent;\u6262pCap;\u626doubleVerticalBar;\u6226\u0180lqx\u0b83\u0b8a\u0b9bement;\u6209ual\u0100;T\u0b92\u0b93\u6260ilde;\uc000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0bb6\u0bb7\u0bbd\u0bc9\u0bd3\u0bd8\u0be5\u626fqual;\u6271ullEqual;\uc000\u2267\u0338reater;\uc000\u226b\u0338ess;\u6279lantEqual;\uc000\u2a7e\u0338ilde;\u6275ump\u0144\u0bf2\u0bfdownHump;\uc000\u224e\u0338qual;\uc000\u224f\u0338e\u0100fs\u0c0a\u0c27tTriangle\u0180;BE\u0c1a\u0c1b\u0c21\u62eaar;\uc000\u29cf\u0338qual;\u62ecs\u0300;EGLST\u0c35\u0c36\u0c3c\u0c44\u0c4b\u0c58\u626equal;\u6270reater;\u6278ess;\uc000\u226a\u0338lantEqual;\uc000\u2a7d\u0338ilde;\u6274ested\u0100GL\u0c68\u0c79reaterGreater;\uc000\u2aa2\u0338essLess;\uc000\u2aa1\u0338recedes\u0180;ES\u0c92\u0c93\u0c9b\u6280qual;\uc000\u2aaf\u0338lantEqual;\u62e0\u0100ei\u0cab\u0cb9verseElement;\u620cghtTriangle\u0180;BE\u0ccb\u0ccc\u0cd2\u62ebar;\uc000\u29d0\u0338qual;\u62ed\u0100qu\u0cdd\u0d0cuareSu\u0100bp\u0ce8\u0cf9set\u0100;E\u0cf0\u0cf3\uc000\u228f\u0338qual;\u62e2erset\u0100;E\u0d03\u0d06\uc000\u2290\u0338qual;\u62e3\u0180bcp\u0d13\u0d24\u0d4eset\u0100;E\u0d1b\u0d1e\uc000\u2282\u20d2qual;\u6288ceeds\u0200;EST\u0d32\u0d33\u0d3b\u0d46\u6281qual;\uc000\u2ab0\u0338lantEqual;\u62e1ilde;\uc000\u227f\u0338erset\u0100;E\u0d58\u0d5b\uc000\u2283\u20d2qual;\u6289ilde\u0200;EFT\u0d6e\u0d6f\u0d75\u0d7f\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uc000\ud835\udca9ilde\u803b\xd1\u40d1;\u439d\u0700Eacdfgmoprstuv\u0dbd\u0dc2\u0dc9\u0dd5\u0ddb\u0de0\u0de7\u0dfc\u0e02\u0e20\u0e22\u0e32\u0e3f\u0e44lig;\u4152cute\u803b\xd3\u40d3\u0100iy\u0dce\u0dd3rc\u803b\xd4\u40d4;\u441eblac;\u4150r;\uc000\ud835\udd12rave\u803b\xd2\u40d2\u0180aei\u0dee\u0df2\u0df6cr;\u414cga;\u43a9cron;\u439fpf;\uc000\ud835\udd46enCurly\u0100DQ\u0e0e\u0e1aoubleQuote;\u601cuote;\u6018;\u6a54\u0100cl\u0e27\u0e2cr;\uc000\ud835\udcaaash\u803b\xd8\u40d8i\u016c\u0e37\u0e3cde\u803b\xd5\u40d5es;\u6a37ml\u803b\xd6\u40d6er\u0100BP\u0e4b\u0e60\u0100ar\u0e50\u0e53r;\u603eac\u0100ek\u0e5a\u0e5c;\u63deet;\u63b4arenthesis;\u63dc\u0480acfhilors\u0e7f\u0e87\u0e8a\u0e8f\u0e92\u0e94\u0e9d\u0eb0\u0efcrtialD;\u6202y;\u441fr;\uc000\ud835\udd13i;\u43a6;\u43a0usMinus;\u40b1\u0100ip\u0ea2\u0eadncareplan\xe5\u069df;\u6119\u0200;eio\u0eb9\u0eba\u0ee0\u0ee4\u6abbcedes\u0200;EST\u0ec8\u0ec9\u0ecf\u0eda\u627aqual;\u6aaflantEqual;\u627cilde;\u627eme;\u6033\u0100dp\u0ee9\u0eeeuct;\u620fortion\u0100;a\u0225\u0ef9l;\u621d\u0100ci\u0f01\u0f06r;\uc000\ud835\udcab;\u43a8\u0200Ufos\u0f11\u0f16\u0f1b\u0f1fOT\u803b\"\u4022r;\uc000\ud835\udd14pf;\u611acr;\uc000\ud835\udcac\u0600BEacefhiorsu\u0f3e\u0f43\u0f47\u0f60\u0f73\u0fa7\u0faa\u0fad\u1096\u10a9\u10b4\u10bearr;\u6910G\u803b\xae\u40ae\u0180cnr\u0f4e\u0f53\u0f56ute;\u4154g;\u67ebr\u0100;t\u0f5c\u0f5d\u61a0l;\u6916\u0180aey\u0f67\u0f6c\u0f71ron;\u4158dil;\u4156;\u4420\u0100;v\u0f78\u0f79\u611cerse\u0100EU\u0f82\u0f99\u0100lq\u0f87\u0f8eement;\u620builibrium;\u61cbpEquilibrium;\u696fr\xbb\u0f79o;\u43a1ght\u0400ACDFTUVa\u0fc1\u0feb\u0ff3\u1022\u1028\u105b\u1087\u03d8\u0100nr\u0fc6\u0fd2gleBracket;\u67e9row\u0180;BL\u0fdc\u0fdd\u0fe1\u6192ar;\u61e5eftArrow;\u61c4eiling;\u6309o\u01f5\u0ff9\0\u1005bleBracket;\u67e7n\u01d4\u100a\0\u1014eeVector;\u695dector\u0100;B\u101d\u101e\u61c2ar;\u6955loor;\u630b\u0100er\u102d\u1043e\u0180;AV\u1035\u1036\u103c\u62a2rrow;\u61a6ector;\u695biangle\u0180;BE\u1050\u1051\u1055\u62b3ar;\u69d0qual;\u62b5p\u0180DTV\u1063\u106e\u1078ownVector;\u694feeVector;\u695cector\u0100;B\u1082\u1083\u61bear;\u6954ector\u0100;B\u1091\u1092\u61c0ar;\u6953\u0100pu\u109b\u109ef;\u611dndImplies;\u6970ightarrow;\u61db\u0100ch\u10b9\u10bcr;\u611b;\u61b1leDelayed;\u69f4\u0680HOacfhimoqstu\u10e4\u10f1\u10f7\u10fd\u1119\u111e\u1151\u1156\u1161\u1167\u11b5\u11bb\u11bf\u0100Cc\u10e9\u10eeHcy;\u4429y;\u4428FTcy;\u442ccute;\u415a\u0280;aeiy\u1108\u1109\u110e\u1113\u1117\u6abcron;\u4160dil;\u415erc;\u415c;\u4421r;\uc000\ud835\udd16ort\u0200DLRU\u112a\u1134\u113e\u1149ownArrow\xbb\u041eeftArrow\xbb\u089aightArrow\xbb\u0fddpArrow;\u6191gma;\u43a3allCircle;\u6218pf;\uc000\ud835\udd4a\u0272\u116d\0\0\u1170t;\u621aare\u0200;ISU\u117b\u117c\u1189\u11af\u65a1ntersection;\u6293u\u0100bp\u118f\u119eset\u0100;E\u1197\u1198\u628fqual;\u6291erset\u0100;E\u11a8\u11a9\u6290qual;\u6292nion;\u6294cr;\uc000\ud835\udcaear;\u62c6\u0200bcmp\u11c8\u11db\u1209\u120b\u0100;s\u11cd\u11ce\u62d0et\u0100;E\u11cd\u11d5qual;\u6286\u0100ch\u11e0\u1205eeds\u0200;EST\u11ed\u11ee\u11f4\u11ff\u627bqual;\u6ab0lantEqual;\u627dilde;\u627fTh\xe1\u0f8c;\u6211\u0180;es\u1212\u1213\u1223\u62d1rset\u0100;E\u121c\u121d\u6283qual;\u6287et\xbb\u1213\u0580HRSacfhiors\u123e\u1244\u1249\u1255\u125e\u1271\u1276\u129f\u12c2\u12c8\u12d1ORN\u803b\xde\u40deADE;\u6122\u0100Hc\u124e\u1252cy;\u440by;\u4426\u0100bu\u125a\u125c;\u4009;\u43a4\u0180aey\u1265\u126a\u126fron;\u4164dil;\u4162;\u4422r;\uc000\ud835\udd17\u0100ei\u127b\u1289\u01f2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128e\u1298kSpace;\uc000\u205f\u200aSpace;\u6009lde\u0200;EFT\u12ab\u12ac\u12b2\u12bc\u623cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uc000\ud835\udd4bipleDot;\u60db\u0100ct\u12d6\u12dbr;\uc000\ud835\udcafrok;\u4166\u0ae1\u12f7\u130e\u131a\u1326\0\u132c\u1331\0\0\0\0\0\u1338\u133d\u1377\u1385\0\u13ff\u1404\u140a\u1410\u0100cr\u12fb\u1301ute\u803b\xda\u40dar\u0100;o\u1307\u1308\u619fcir;\u6949r\u01e3\u1313\0\u1316y;\u440eve;\u416c\u0100iy\u131e\u1323rc\u803b\xdb\u40db;\u4423blac;\u4170r;\uc000\ud835\udd18rave\u803b\xd9\u40d9acr;\u416a\u0100di\u1341\u1369er\u0100BP\u1348\u135d\u0100ar\u134d\u1350r;\u405fac\u0100ek\u1357\u1359;\u63dfet;\u63b5arenthesis;\u63ddon\u0100;P\u1370\u1371\u62c3lus;\u628e\u0100gp\u137b\u137fon;\u4172f;\uc000\ud835\udd4c\u0400ADETadps\u1395\u13ae\u13b8\u13c4\u03e8\u13d2\u13d7\u13f3rrow\u0180;BD\u1150\u13a0\u13a4ar;\u6912ownArrow;\u61c5ownArrow;\u6195quilibrium;\u696eee\u0100;A\u13cb\u13cc\u62a5rrow;\u61a5own\xe1\u03f3er\u0100LR\u13de\u13e8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13f9\u13fa\u43d2on;\u43a5ing;\u416ecr;\uc000\ud835\udcb0ilde;\u4168ml\u803b\xdc\u40dc\u0480Dbcdefosv\u1427\u142c\u1430\u1433\u143e\u1485\u148a\u1490\u1496ash;\u62abar;\u6aeby;\u4412ash\u0100;l\u143b\u143c\u62a9;\u6ae6\u0100er\u1443\u1445;\u62c1\u0180bty\u144c\u1450\u147aar;\u6016\u0100;i\u144f\u1455cal\u0200BLST\u1461\u1465\u146a\u1474ar;\u6223ine;\u407ceparator;\u6758ilde;\u6240ThinSpace;\u600ar;\uc000\ud835\udd19pf;\uc000\ud835\udd4dcr;\uc000\ud835\udcb1dash;\u62aa\u0280cefos\u14a7\u14ac\u14b1\u14b6\u14bcirc;\u4174dge;\u62c0r;\uc000\ud835\udd1apf;\uc000\ud835\udd4ecr;\uc000\ud835\udcb2\u0200fios\u14cb\u14d0\u14d2\u14d8r;\uc000\ud835\udd1b;\u439epf;\uc000\ud835\udd4fcr;\uc000\ud835\udcb3\u0480AIUacfosu\u14f1\u14f5\u14f9\u14fd\u1504\u150f\u1514\u151a\u1520cy;\u442fcy;\u4407cy;\u442ecute\u803b\xdd\u40dd\u0100iy\u1509\u150drc;\u4176;\u442br;\uc000\ud835\udd1cpf;\uc000\ud835\udd50cr;\uc000\ud835\udcb4ml;\u4178\u0400Hacdefos\u1535\u1539\u153f\u154b\u154f\u155d\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417d;\u4417ot;\u417b\u01f2\u1554\0\u155boWidt\xe8\u0ad9a;\u4396r;\u6128pf;\u6124cr;\uc000\ud835\udcb5\u0be1\u1583\u158a\u1590\0\u15b0\u15b6\u15bf\0\0\0\0\u15c6\u15db\u15eb\u165f\u166d\0\u1695\u169b\u16b2\u16b9\0\u16becute\u803b\xe1\u40e1reve;\u4103\u0300;Ediuy\u159c\u159d\u15a1\u15a3\u15a8\u15ad\u623e;\uc000\u223e\u0333;\u623frc\u803b\xe2\u40e2te\u80bb\xb4\u0306;\u4430lig\u803b\xe6\u40e6\u0100;r\xb2\u15ba;\uc000\ud835\udd1erave\u803b\xe0\u40e0\u0100ep\u15ca\u15d6\u0100fp\u15cf\u15d4sym;\u6135\xe8\u15d3ha;\u43b1\u0100ap\u15dfc\u0100cl\u15e4\u15e7r;\u4101g;\u6a3f\u0264\u15f0\0\0\u160a\u0280;adsv\u15fa\u15fb\u15ff\u1601\u1607\u6227nd;\u6a55;\u6a5clope;\u6a58;\u6a5a\u0380;elmrsz\u1618\u1619\u161b\u161e\u163f\u164f\u1659\u6220;\u69a4e\xbb\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163a\u163c\u163e;\u69a8;\u69a9;\u69aa;\u69ab;\u69ac;\u69ad;\u69ae;\u69aft\u0100;v\u1645\u1646\u621fb\u0100;d\u164c\u164d\u62be;\u699d\u0100pt\u1654\u1657h;\u6222\xbb\xb9arr;\u637c\u0100gp\u1663\u1667on;\u4105f;\uc000\ud835\udd52\u0380;Eaeiop\u12c1\u167b\u167d\u1682\u1684\u1687\u168a;\u6a70cir;\u6a6f;\u624ad;\u624bs;\u4027rox\u0100;e\u12c1\u1692\xf1\u1683ing\u803b\xe5\u40e5\u0180cty\u16a1\u16a6\u16a8r;\uc000\ud835\udcb6;\u402amp\u0100;e\u12c1\u16af\xf1\u0288ilde\u803b\xe3\u40e3ml\u803b\xe4\u40e4\u0100ci\u16c2\u16c8onin\xf4\u0272nt;\u6a11\u0800Nabcdefiklnoprsu\u16ed\u16f1\u1730\u173c\u1743\u1748\u1778\u177d\u17e0\u17e6\u1839\u1850\u170d\u193d\u1948\u1970ot;\u6aed\u0100cr\u16f6\u171ek\u0200ceps\u1700\u1705\u170d\u1713ong;\u624cpsilon;\u43f6rime;\u6035im\u0100;e\u171a\u171b\u623dq;\u62cd\u0176\u1722\u1726ee;\u62bded\u0100;g\u172c\u172d\u6305e\xbb\u172drk\u0100;t\u135c\u1737brk;\u63b6\u0100oy\u1701\u1741;\u4431quo;\u601e\u0280cmprt\u1753\u175b\u1761\u1764\u1768aus\u0100;e\u010a\u0109ptyv;\u69b0s\xe9\u170cno\xf5\u0113\u0180ahw\u176f\u1771\u1773;\u43b2;\u6136een;\u626cr;\uc000\ud835\udd1fg\u0380costuvw\u178d\u179d\u17b3\u17c1\u17d5\u17db\u17de\u0180aiu\u1794\u1796\u179a\xf0\u0760rc;\u65efp\xbb\u1371\u0180dpt\u17a4\u17a8\u17adot;\u6a00lus;\u6a01imes;\u6a02\u0271\u17b9\0\0\u17becup;\u6a06ar;\u6605riangle\u0100du\u17cd\u17d2own;\u65bdp;\u65b3plus;\u6a04e\xe5\u1444\xe5\u14adarow;\u690d\u0180ako\u17ed\u1826\u1835\u0100cn\u17f2\u1823k\u0180lst\u17fa\u05ab\u1802ozenge;\u69ebriangle\u0200;dlr\u1812\u1813\u1818\u181d\u65b4own;\u65beeft;\u65c2ight;\u65b8k;\u6423\u01b1\u182b\0\u1833\u01b2\u182f\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183e\u184d\u0100;q\u1843\u1846\uc000=\u20e5uiv;\uc000\u2261\u20e5t;\u6310\u0200ptwx\u1859\u185e\u1867\u186cf;\uc000\ud835\udd53\u0100;t\u13cb\u1863om\xbb\u13cctie;\u62c8\u0600DHUVbdhmptuv\u1885\u1896\u18aa\u18bb\u18d7\u18db\u18ec\u18ff\u1905\u190a\u1910\u1921\u0200LRlr\u188e\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18a1\u18a2\u18a4\u18a6\u18a8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18b3\u18b5\u18b7\u18b9;\u655d;\u655a;\u655c;\u6559\u0380;HLRhlr\u18ca\u18cb\u18cd\u18cf\u18d1\u18d3\u18d5\u6551;\u656c;\u6563;\u6560;\u656b;\u6562;\u655fox;\u69c9\u0200LRlr\u18e4\u18e6\u18e8\u18ea;\u6555;\u6552;\u6510;\u650c\u0280;DUdu\u06bd\u18f7\u18f9\u18fb\u18fd;\u6565;\u6568;\u652c;\u6534inus;\u629flus;\u629eimes;\u62a0\u0200LRlr\u1919\u191b\u191d\u191f;\u655b;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193b\u6502;\u656a;\u6561;\u655e;\u653c;\u6524;\u651c\u0100ev\u0123\u1942bar\u803b\xa6\u40a6\u0200ceio\u1951\u1956\u195a\u1960r;\uc000\ud835\udcb7mi;\u604fm\u0100;e\u171a\u171cl\u0180;bh\u1968\u1969\u196b\u405c;\u69c5sub;\u67c8\u016c\u1974\u197el\u0100;e\u1979\u197a\u6022t\xbb\u197ap\u0180;Ee\u012f\u1985\u1987;\u6aae\u0100;q\u06dc\u06db\u0ce1\u19a7\0\u19e8\u1a11\u1a15\u1a32\0\u1a37\u1a50\0\0\u1ab4\0\0\u1ac1\0\0\u1b21\u1b2e\u1b4d\u1b52\0\u1bfd\0\u1c0c\u0180cpr\u19ad\u19b2\u19ddute;\u4107\u0300;abcds\u19bf\u19c0\u19c4\u19ca\u19d5\u19d9\u6229nd;\u6a44rcup;\u6a49\u0100au\u19cf\u19d2p;\u6a4bp;\u6a47ot;\u6a40;\uc000\u2229\ufe00\u0100eo\u19e2\u19e5t;\u6041\xee\u0693\u0200aeiu\u19f0\u19fb\u1a01\u1a05\u01f0\u19f5\0\u19f8s;\u6a4don;\u410ddil\u803b\xe7\u40e7rc;\u4109ps\u0100;s\u1a0c\u1a0d\u6a4cm;\u6a50ot;\u410b\u0180dmn\u1a1b\u1a20\u1a26il\u80bb\xb8\u01adptyv;\u69b2t\u8100\xa2;e\u1a2d\u1a2e\u40a2r\xe4\u01b2r;\uc000\ud835\udd20\u0180cei\u1a3d\u1a40\u1a4dy;\u4447ck\u0100;m\u1a47\u1a48\u6713ark\xbb\u1a48;\u43c7r\u0380;Ecefms\u1a5f\u1a60\u1a62\u1a6b\u1aa4\u1aaa\u1aae\u65cb;\u69c3\u0180;el\u1a69\u1a6a\u1a6d\u42c6q;\u6257e\u0261\u1a74\0\0\u1a88rrow\u0100lr\u1a7c\u1a81eft;\u61baight;\u61bb\u0280RSacd\u1a92\u1a94\u1a96\u1a9a\u1a9f\xbb\u0f47;\u64c8st;\u629birc;\u629aash;\u629dnint;\u6a10id;\u6aefcir;\u69c2ubs\u0100;u\u1abb\u1abc\u6663it\xbb\u1abc\u02ec\u1ac7\u1ad4\u1afa\0\u1b0aon\u0100;e\u1acd\u1ace\u403a\u0100;q\xc7\xc6\u026d\u1ad9\0\0\u1ae2a\u0100;t\u1ade\u1adf\u402c;\u4040\u0180;fl\u1ae8\u1ae9\u1aeb\u6201\xee\u1160e\u0100mx\u1af1\u1af6ent\xbb\u1ae9e\xf3\u024d\u01e7\u1afe\0\u1b07\u0100;d\u12bb\u1b02ot;\u6a6dn\xf4\u0246\u0180fry\u1b10\u1b14\u1b17;\uc000\ud835\udd54o\xe4\u0254\u8100\xa9;s\u0155\u1b1dr;\u6117\u0100ao\u1b25\u1b29rr;\u61b5ss;\u6717\u0100cu\u1b32\u1b37r;\uc000\ud835\udcb8\u0100bp\u1b3c\u1b44\u0100;e\u1b41\u1b42\u6acf;\u6ad1\u0100;e\u1b49\u1b4a\u6ad0;\u6ad2dot;\u62ef\u0380delprvw\u1b60\u1b6c\u1b77\u1b82\u1bac\u1bd4\u1bf9arr\u0100lr\u1b68\u1b6a;\u6938;\u6935\u0270\u1b72\0\0\u1b75r;\u62dec;\u62dfarr\u0100;p\u1b7f\u1b80\u61b6;\u693d\u0300;bcdos\u1b8f\u1b90\u1b96\u1ba1\u1ba5\u1ba8\u622arcap;\u6a48\u0100au\u1b9b\u1b9ep;\u6a46p;\u6a4aot;\u628dr;\u6a45;\uc000\u222a\ufe00\u0200alrv\u1bb5\u1bbf\u1bde\u1be3rr\u0100;m\u1bbc\u1bbd\u61b7;\u693cy\u0180evw\u1bc7\u1bd4\u1bd8q\u0270\u1bce\0\0\u1bd2re\xe3\u1b73u\xe3\u1b75ee;\u62ceedge;\u62cfen\u803b\xa4\u40a4earrow\u0100lr\u1bee\u1bf3eft\xbb\u1b80ight\xbb\u1bbde\xe4\u1bdd\u0100ci\u1c01\u1c07onin\xf4\u01f7nt;\u6231lcty;\u632d\u0980AHabcdefhijlorstuwz\u1c38\u1c3b\u1c3f\u1c5d\u1c69\u1c75\u1c8a\u1c9e\u1cac\u1cb7\u1cfb\u1cff\u1d0d\u1d7b\u1d91\u1dab\u1dbb\u1dc6\u1dcdr\xf2\u0381ar;\u6965\u0200glrs\u1c48\u1c4d\u1c52\u1c54ger;\u6020eth;\u6138\xf2\u1133h\u0100;v\u1c5a\u1c5b\u6010\xbb\u090a\u016b\u1c61\u1c67arow;\u690fa\xe3\u0315\u0100ay\u1c6e\u1c73ron;\u410f;\u4434\u0180;ao\u0332\u1c7c\u1c84\u0100gr\u02bf\u1c81r;\u61catseq;\u6a77\u0180glm\u1c91\u1c94\u1c98\u803b\xb0\u40b0ta;\u43b4ptyv;\u69b1\u0100ir\u1ca3\u1ca8sht;\u697f;\uc000\ud835\udd21ar\u0100lr\u1cb3\u1cb5\xbb\u08dc\xbb\u101e\u0280aegsv\u1cc2\u0378\u1cd6\u1cdc\u1ce0m\u0180;os\u0326\u1cca\u1cd4nd\u0100;s\u0326\u1cd1uit;\u6666amma;\u43ddin;\u62f2\u0180;io\u1ce7\u1ce8\u1cf8\u40f7de\u8100\xf7;o\u1ce7\u1cf0ntimes;\u62c7n\xf8\u1cf7cy;\u4452c\u026f\u1d06\0\0\u1d0arn;\u631eop;\u630d\u0280lptuw\u1d18\u1d1d\u1d22\u1d49\u1d55lar;\u4024f;\uc000\ud835\udd55\u0280;emps\u030b\u1d2d\u1d37\u1d3d\u1d42q\u0100;d\u0352\u1d33ot;\u6251inus;\u6238lus;\u6214quare;\u62a1blebarwedg\xe5\xfan\u0180adh\u112e\u1d5d\u1d67ownarrow\xf3\u1c83arpoon\u0100lr\u1d72\u1d76ef\xf4\u1cb4igh\xf4\u1cb6\u0162\u1d7f\u1d85karo\xf7\u0f42\u026f\u1d8a\0\0\u1d8ern;\u631fop;\u630c\u0180cot\u1d98\u1da3\u1da6\u0100ry\u1d9d\u1da1;\uc000\ud835\udcb9;\u4455l;\u69f6rok;\u4111\u0100dr\u1db0\u1db4ot;\u62f1i\u0100;f\u1dba\u1816\u65bf\u0100ah\u1dc0\u1dc3r\xf2\u0429a\xf2\u0fa6angle;\u69a6\u0100ci\u1dd2\u1dd5y;\u445fgrarr;\u67ff\u0900Dacdefglmnopqrstux\u1e01\u1e09\u1e19\u1e38\u0578\u1e3c\u1e49\u1e61\u1e7e\u1ea5\u1eaf\u1ebd\u1ee1\u1f2a\u1f37\u1f44\u1f4e\u1f5a\u0100Do\u1e06\u1d34o\xf4\u1c89\u0100cs\u1e0e\u1e14ute\u803b\xe9\u40e9ter;\u6a6e\u0200aioy\u1e22\u1e27\u1e31\u1e36ron;\u411br\u0100;c\u1e2d\u1e2e\u6256\u803b\xea\u40ealon;\u6255;\u444dot;\u4117\u0100Dr\u1e41\u1e45ot;\u6252;\uc000\ud835\udd22\u0180;rs\u1e50\u1e51\u1e57\u6a9aave\u803b\xe8\u40e8\u0100;d\u1e5c\u1e5d\u6a96ot;\u6a98\u0200;ils\u1e6a\u1e6b\u1e72\u1e74\u6a99nters;\u63e7;\u6113\u0100;d\u1e79\u1e7a\u6a95ot;\u6a97\u0180aps\u1e85\u1e89\u1e97cr;\u4113ty\u0180;sv\u1e92\u1e93\u1e95\u6205et\xbb\u1e93p\u01001;\u1e9d\u1ea4\u0133\u1ea1\u1ea3;\u6004;\u6005\u6003\u0100gs\u1eaa\u1eac;\u414bp;\u6002\u0100gp\u1eb4\u1eb8on;\u4119f;\uc000\ud835\udd56\u0180als\u1ec4\u1ece\u1ed2r\u0100;s\u1eca\u1ecb\u62d5l;\u69e3us;\u6a71i\u0180;lv\u1eda\u1edb\u1edf\u43b5on\xbb\u1edb;\u43f5\u0200csuv\u1eea\u1ef3\u1f0b\u1f23\u0100io\u1eef\u1e31rc\xbb\u1e2e\u0269\u1ef9\0\0\u1efb\xed\u0548ant\u0100gl\u1f02\u1f06tr\xbb\u1e5dess\xbb\u1e7a\u0180aei\u1f12\u1f16\u1f1als;\u403dst;\u625fv\u0100;D\u0235\u1f20D;\u6a78parsl;\u69e5\u0100Da\u1f2f\u1f33ot;\u6253rr;\u6971\u0180cdi\u1f3e\u1f41\u1ef8r;\u612fo\xf4\u0352\u0100ah\u1f49\u1f4b;\u43b7\u803b\xf0\u40f0\u0100mr\u1f53\u1f57l\u803b\xeb\u40ebo;\u60ac\u0180cip\u1f61\u1f64\u1f67l;\u4021s\xf4\u056e\u0100eo\u1f6c\u1f74ctatio\xee\u0559nential\xe5\u0579\u09e1\u1f92\0\u1f9e\0\u1fa1\u1fa7\0\0\u1fc6\u1fcc\0\u1fd3\0\u1fe6\u1fea\u2000\0\u2008\u205allingdotse\xf1\u1e44y;\u4444male;\u6640\u0180ilr\u1fad\u1fb3\u1fc1lig;\u8000\ufb03\u0269\u1fb9\0\0\u1fbdg;\u8000\ufb00ig;\u8000\ufb04;\uc000\ud835\udd23lig;\u8000\ufb01lig;\uc000fj\u0180alt\u1fd9\u1fdc\u1fe1t;\u666dig;\u8000\ufb02ns;\u65b1of;\u4192\u01f0\u1fee\0\u1ff3f;\uc000\ud835\udd57\u0100ak\u05bf\u1ff7\u0100;v\u1ffc\u1ffd\u62d4;\u6ad9artint;\u6a0d\u0100ao\u200c\u2055\u0100cs\u2011\u2052\u03b1\u201a\u2030\u2038\u2045\u2048\0\u2050\u03b2\u2022\u2025\u2027\u202a\u202c\0\u202e\u803b\xbd\u40bd;\u6153\u803b\xbc\u40bc;\u6155;\u6159;\u615b\u01b3\u2034\0\u2036;\u6154;\u6156\u02b4\u203e\u2041\0\0\u2043\u803b\xbe\u40be;\u6157;\u615c5;\u6158\u01b6\u204c\0\u204e;\u615a;\u615d8;\u615el;\u6044wn;\u6322cr;\uc000\ud835\udcbb\u0880Eabcdefgijlnorstv\u2082\u2089\u209f\u20a5\u20b0\u20b4\u20f0\u20f5\u20fa\u20ff\u2103\u2112\u2138\u0317\u213e\u2152\u219e\u0100;l\u064d\u2087;\u6a8c\u0180cmp\u2090\u2095\u209dute;\u41f5ma\u0100;d\u209c\u1cda\u43b3;\u6a86reve;\u411f\u0100iy\u20aa\u20aerc;\u411d;\u4433ot;\u4121\u0200;lqs\u063e\u0642\u20bd\u20c9\u0180;qs\u063e\u064c\u20c4lan\xf4\u0665\u0200;cdl\u0665\u20d2\u20d5\u20e5c;\u6aa9ot\u0100;o\u20dc\u20dd\u6a80\u0100;l\u20e2\u20e3\u6a82;\u6a84\u0100;e\u20ea\u20ed\uc000\u22db\ufe00s;\u6a94r;\uc000\ud835\udd24\u0100;g\u0673\u061bmel;\u6137cy;\u4453\u0200;Eaj\u065a\u210c\u210e\u2110;\u6a92;\u6aa5;\u6aa4\u0200Eaes\u211b\u211d\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6a8arox\xbb\u2124\u0100;q\u212e\u212f\u6a88\u0100;q\u212e\u211bim;\u62e7pf;\uc000\ud835\udd58\u0100ci\u2143\u2146r;\u610am\u0180;el\u066b\u214e\u2150;\u6a8e;\u6a90\u8300>;cdlqr\u05ee\u2160\u216a\u216e\u2173\u2179\u0100ci\u2165\u2167;\u6aa7r;\u6a7aot;\u62d7Par;\u6995uest;\u6a7c\u0280adels\u2184\u216a\u2190\u0656\u219b\u01f0\u2189\0\u218epro\xf8\u209er;\u6978q\u0100lq\u063f\u2196les\xf3\u2088i\xed\u066b\u0100en\u21a3\u21adrtneqq;\uc000\u2269\ufe00\xc5\u21aa\u0500Aabcefkosy\u21c4\u21c7\u21f1\u21f5\u21fa\u2218\u221d\u222f\u2268\u227dr\xf2\u03a0\u0200ilmr\u21d0\u21d4\u21d7\u21dbrs\xf0\u1484f\xbb\u2024il\xf4\u06a9\u0100dr\u21e0\u21e4cy;\u444a\u0180;cw\u08f4\u21eb\u21efir;\u6948;\u61adar;\u610firc;\u4125\u0180alr\u2201\u220e\u2213rts\u0100;u\u2209\u220a\u6665it\xbb\u220alip;\u6026con;\u62b9r;\uc000\ud835\udd25s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223a\u223e\u2243\u225e\u2263rr;\u61fftht;\u623bk\u0100lr\u2249\u2253eftarrow;\u61a9ightarrow;\u61aaf;\uc000\ud835\udd59bar;\u6015\u0180clt\u226f\u2274\u2278r;\uc000\ud835\udcbdas\xe8\u21f4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xbb\u1c5b\u0ae1\u22a3\0\u22aa\0\u22b8\u22c5\u22ce\0\u22d5\u22f3\0\0\u22f8\u2322\u2367\u2362\u237f\0\u2386\u23aa\u23b4cute\u803b\xed\u40ed\u0180;iy\u0771\u22b0\u22b5rc\u803b\xee\u40ee;\u4438\u0100cx\u22bc\u22bfy;\u4435cl\u803b\xa1\u40a1\u0100fr\u039f\u22c9;\uc000\ud835\udd26rave\u803b\xec\u40ec\u0200;ino\u073e\u22dd\u22e9\u22ee\u0100in\u22e2\u22e6nt;\u6a0ct;\u622dfin;\u69dcta;\u6129lig;\u4133\u0180aop\u22fe\u231a\u231d\u0180cgt\u2305\u2308\u2317r;\u412b\u0180elp\u071f\u230f\u2313in\xe5\u078ear\xf4\u0720h;\u4131f;\u62b7ed;\u41b5\u0280;cfot\u04f4\u232c\u2331\u233d\u2341are;\u6105in\u0100;t\u2338\u2339\u621eie;\u69dddo\xf4\u2319\u0280;celp\u0757\u234c\u2350\u235b\u2361al;\u62ba\u0100gr\u2355\u2359er\xf3\u1563\xe3\u234darhk;\u6a17rod;\u6a3c\u0200cgpt\u236f\u2372\u2376\u237by;\u4451on;\u412ff;\uc000\ud835\udd5aa;\u43b9uest\u803b\xbf\u40bf\u0100ci\u238a\u238fr;\uc000\ud835\udcben\u0280;Edsv\u04f4\u239b\u239d\u23a1\u04f3;\u62f9ot;\u62f5\u0100;v\u23a6\u23a7\u62f4;\u62f3\u0100;i\u0777\u23aelde;\u4129\u01eb\u23b8\0\u23bccy;\u4456l\u803b\xef\u40ef\u0300cfmosu\u23cc\u23d7\u23dc\u23e1\u23e7\u23f5\u0100iy\u23d1\u23d5rc;\u4135;\u4439r;\uc000\ud835\udd27ath;\u4237pf;\uc000\ud835\udd5b\u01e3\u23ec\0\u23f1r;\uc000\ud835\udcbfrcy;\u4458kcy;\u4454\u0400acfghjos\u240b\u2416\u2422\u2427\u242d\u2431\u2435\u243bppa\u0100;v\u2413\u2414\u43ba;\u43f0\u0100ey\u241b\u2420dil;\u4137;\u443ar;\uc000\ud835\udd28reen;\u4138cy;\u4445cy;\u445cpf;\uc000\ud835\udd5ccr;\uc000\ud835\udcc0\u0b80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248d\u2491\u250e\u253d\u255a\u2580\u264e\u265e\u2665\u2679\u267d\u269a\u26b2\u26d8\u275d\u2768\u278b\u27c0\u2801\u2812\u0180art\u2477\u247a\u247cr\xf2\u09c6\xf2\u0395ail;\u691barr;\u690e\u0100;g\u0994\u248b;\u6a8bar;\u6962\u0963\u24a5\0\u24aa\0\u24b1\0\0\0\0\0\u24b5\u24ba\0\u24c6\u24c8\u24cd\0\u24f9ute;\u413amptyv;\u69b4ra\xee\u084cbda;\u43bbg\u0180;dl\u088e\u24c1\u24c3;\u6991\xe5\u088e;\u6a85uo\u803b\xab\u40abr\u0400;bfhlpst\u0899\u24de\u24e6\u24e9\u24eb\u24ee\u24f1\u24f5\u0100;f\u089d\u24e3s;\u691fs;\u691d\xeb\u2252p;\u61abl;\u6939im;\u6973l;\u61a2\u0180;ae\u24ff\u2500\u2504\u6aabil;\u6919\u0100;s\u2509\u250a\u6aad;\uc000\u2aad\ufe00\u0180abr\u2515\u2519\u251drr;\u690crk;\u6772\u0100ak\u2522\u252cc\u0100ek\u2528\u252a;\u407b;\u405b\u0100es\u2531\u2533;\u698bl\u0100du\u2539\u253b;\u698f;\u698d\u0200aeuy\u2546\u254b\u2556\u2558ron;\u413e\u0100di\u2550\u2554il;\u413c\xec\u08b0\xe2\u2529;\u443b\u0200cqrs\u2563\u2566\u256d\u257da;\u6936uo\u0100;r\u0e19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694bh;\u61b2\u0280;fgqs\u258b\u258c\u0989\u25f3\u25ff\u6264t\u0280ahlrt\u2598\u25a4\u25b7\u25c2\u25e8rrow\u0100;t\u0899\u25a1a\xe9\u24f6arpoon\u0100du\u25af\u25b4own\xbb\u045ap\xbb\u0966eftarrows;\u61c7ight\u0180ahs\u25cd\u25d6\u25derrow\u0100;s\u08f4\u08a7arpoon\xf3\u0f98quigarro\xf7\u21f0hreetimes;\u62cb\u0180;qs\u258b\u0993\u25falan\xf4\u09ac\u0280;cdgs\u09ac\u260a\u260d\u261d\u2628c;\u6aa8ot\u0100;o\u2614\u2615\u6a7f\u0100;r\u261a\u261b\u6a81;\u6a83\u0100;e\u2622\u2625\uc000\u22da\ufe00s;\u6a93\u0280adegs\u2633\u2639\u263d\u2649\u264bppro\xf8\u24c6ot;\u62d6q\u0100gq\u2643\u2645\xf4\u0989gt\xf2\u248c\xf4\u099bi\xed\u09b2\u0180ilr\u2655\u08e1\u265asht;\u697c;\uc000\ud835\udd29\u0100;E\u099c\u2663;\u6a91\u0161\u2669\u2676r\u0100du\u25b2\u266e\u0100;l\u0965\u2673;\u696alk;\u6584cy;\u4459\u0280;acht\u0a48\u2688\u268b\u2691\u2696r\xf2\u25c1orne\xf2\u1d08ard;\u696bri;\u65fa\u0100io\u269f\u26a4dot;\u4140ust\u0100;a\u26ac\u26ad\u63b0che\xbb\u26ad\u0200Eaes\u26bb\u26bd\u26c9\u26d4;\u6268p\u0100;p\u26c3\u26c4\u6a89rox\xbb\u26c4\u0100;q\u26ce\u26cf\u6a87\u0100;q\u26ce\u26bbim;\u62e6\u0400abnoptwz\u26e9\u26f4\u26f7\u271a\u272f\u2741\u2747\u2750\u0100nr\u26ee\u26f1g;\u67ecr;\u61fdr\xeb\u08c1g\u0180lmr\u26ff\u270d\u2714eft\u0100ar\u09e6\u2707ight\xe1\u09f2apsto;\u67fcight\xe1\u09fdparrow\u0100lr\u2725\u2729ef\xf4\u24edight;\u61ac\u0180afl\u2736\u2739\u273dr;\u6985;\uc000\ud835\udd5dus;\u6a2dimes;\u6a34\u0161\u274b\u274fst;\u6217\xe1\u134e\u0180;ef\u2757\u2758\u1800\u65cange\xbb\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277c\u2785\u2787r\xf2\u08a8orne\xf2\u1d8car\u0100;d\u0f98\u2783;\u696d;\u600eri;\u62bf\u0300achiqt\u2798\u279d\u0a40\u27a2\u27ae\u27bbquo;\u6039r;\uc000\ud835\udcc1m\u0180;eg\u09b2\u27aa\u27ac;\u6a8d;\u6a8f\u0100bu\u252a\u27b3o\u0100;r\u0e1f\u27b9;\u601arok;\u4142\u8400<;cdhilqr\u082b\u27d2\u2639\u27dc\u27e0\u27e5\u27ea\u27f0\u0100ci\u27d7\u27d9;\u6aa6r;\u6a79re\xe5\u25f2mes;\u62c9arr;\u6976uest;\u6a7b\u0100Pi\u27f5\u27f9ar;\u6996\u0180;ef\u2800\u092d\u181b\u65c3r\u0100du\u2807\u280dshar;\u694ahar;\u6966\u0100en\u2817\u2821rtneqq;\uc000\u2268\ufe00\xc5\u281e\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288e\u2893\u28a0\u28a5\u28a8\u28da\u28e2\u28e4\u0a83\u28f3\u2902Dot;\u623a\u0200clpr\u284e\u2852\u2863\u287dr\u803b\xaf\u40af\u0100et\u2857\u2859;\u6642\u0100;e\u285e\u285f\u6720se\xbb\u285f\u0100;s\u103b\u2868to\u0200;dlu\u103b\u2873\u2877\u287bow\xee\u048cef\xf4\u090f\xf0\u13d1ker;\u65ae\u0100oy\u2887\u288cmma;\u6a29;\u443cash;\u6014asuredangle\xbb\u1626r;\uc000\ud835\udd2ao;\u6127\u0180cdn\u28af\u28b4\u28c9ro\u803b\xb5\u40b5\u0200;acd\u1464\u28bd\u28c0\u28c4s\xf4\u16a7ir;\u6af0ot\u80bb\xb7\u01b5us\u0180;bd\u28d2\u1903\u28d3\u6212\u0100;u\u1d3c\u28d8;\u6a2a\u0163\u28de\u28e1p;\u6adb\xf2\u2212\xf0\u0a81\u0100dp\u28e9\u28eeels;\u62a7f;\uc000\ud835\udd5e\u0100ct\u28f8\u28fdr;\uc000\ud835\udcc2pos\xbb\u159d\u0180;lm\u2909\u290a\u290d\u43bctimap;\u62b8\u0c00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297e\u2989\u2998\u29da\u29e9\u2a15\u2a1a\u2a58\u2a5d\u2a83\u2a95\u2aa4\u2aa8\u2b04\u2b07\u2b44\u2b7f\u2bae\u2c34\u2c67\u2c7c\u2ce9\u0100gt\u2947\u294b;\uc000\u22d9\u0338\u0100;v\u2950\u0bcf\uc000\u226b\u20d2\u0180elt\u295a\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61cdightarrow;\u61ce;\uc000\u22d8\u0338\u0100;v\u297b\u0c47\uc000\u226a\u20d2ightarrow;\u61cf\u0100Dd\u298e\u2993ash;\u62afash;\u62ae\u0280bcnpt\u29a3\u29a7\u29ac\u29b1\u29ccla\xbb\u02deute;\u4144g;\uc000\u2220\u20d2\u0280;Eiop\u0d84\u29bc\u29c0\u29c5\u29c8;\uc000\u2a70\u0338d;\uc000\u224b\u0338s;\u4149ro\xf8\u0d84ur\u0100;a\u29d3\u29d4\u666el\u0100;s\u29d3\u0b38\u01f3\u29df\0\u29e3p\u80bb\xa0\u0b37mp\u0100;e\u0bf9\u0c00\u0280aeouy\u29f4\u29fe\u2a03\u2a10\u2a13\u01f0\u29f9\0\u29fb;\u6a43on;\u4148dil;\u4146ng\u0100;d\u0d7e\u2a0aot;\uc000\u2a6d\u0338p;\u6a42;\u443dash;\u6013\u0380;Aadqsx\u0b92\u2a29\u2a2d\u2a3b\u2a41\u2a45\u2a50rr;\u61d7r\u0100hr\u2a33\u2a36k;\u6924\u0100;o\u13f2\u13f0ot;\uc000\u2250\u0338ui\xf6\u0b63\u0100ei\u2a4a\u2a4ear;\u6928\xed\u0b98ist\u0100;s\u0ba0\u0b9fr;\uc000\ud835\udd2b\u0200Eest\u0bc5\u2a66\u2a79\u2a7c\u0180;qs\u0bbc\u2a6d\u0be1\u0180;qs\u0bbc\u0bc5\u2a74lan\xf4\u0be2i\xed\u0bea\u0100;r\u0bb6\u2a81\xbb\u0bb7\u0180Aap\u2a8a\u2a8d\u2a91r\xf2\u2971rr;\u61aear;\u6af2\u0180;sv\u0f8d\u2a9c\u0f8c\u0100;d\u2aa1\u2aa2\u62fc;\u62facy;\u445a\u0380AEadest\u2ab7\u2aba\u2abe\u2ac2\u2ac5\u2af6\u2af9r\xf2\u2966;\uc000\u2266\u0338rr;\u619ar;\u6025\u0200;fqs\u0c3b\u2ace\u2ae3\u2aeft\u0100ar\u2ad4\u2ad9rro\xf7\u2ac1ightarro\xf7\u2a90\u0180;qs\u0c3b\u2aba\u2aealan\xf4\u0c55\u0100;s\u0c55\u2af4\xbb\u0c36i\xed\u0c5d\u0100;r\u0c35\u2afei\u0100;e\u0c1a\u0c25i\xe4\u0d90\u0100pt\u2b0c\u2b11f;\uc000\ud835\udd5f\u8180\xac;in\u2b19\u2b1a\u2b36\u40acn\u0200;Edv\u0b89\u2b24\u2b28\u2b2e;\uc000\u22f9\u0338ot;\uc000\u22f5\u0338\u01e1\u0b89\u2b33\u2b35;\u62f7;\u62f6i\u0100;v\u0cb8\u2b3c\u01e1\u0cb8\u2b41\u2b43;\u62fe;\u62fd\u0180aor\u2b4b\u2b63\u2b69r\u0200;ast\u0b7b\u2b55\u2b5a\u2b5flle\xec\u0b7bl;\uc000\u2afd\u20e5;\uc000\u2202\u0338lint;\u6a14\u0180;ce\u0c92\u2b70\u2b73u\xe5\u0ca5\u0100;c\u0c98\u2b78\u0100;e\u0c92\u2b7d\xf1\u0c98\u0200Aait\u2b88\u2b8b\u2b9d\u2ba7r\xf2\u2988rr\u0180;cw\u2b94\u2b95\u2b99\u619b;\uc000\u2933\u0338;\uc000\u219d\u0338ghtarrow\xbb\u2b95ri\u0100;e\u0ccb\u0cd6\u0380chimpqu\u2bbd\u2bcd\u2bd9\u2b04\u0b78\u2be4\u2bef\u0200;cer\u0d32\u2bc6\u0d37\u2bc9u\xe5\u0d45;\uc000\ud835\udcc3ort\u026d\u2b05\0\0\u2bd6ar\xe1\u2b56m\u0100;e\u0d6e\u2bdf\u0100;q\u0d74\u0d73su\u0100bp\u2beb\u2bed\xe5\u0cf8\xe5\u0d0b\u0180bcp\u2bf6\u2c11\u2c19\u0200;Ees\u2bff\u2c00\u0d22\u2c04\u6284;\uc000\u2ac5\u0338et\u0100;e\u0d1b\u2c0bq\u0100;q\u0d23\u2c00c\u0100;e\u0d32\u2c17\xf1\u0d38\u0200;Ees\u2c22\u2c23\u0d5f\u2c27\u6285;\uc000\u2ac6\u0338et\u0100;e\u0d58\u2c2eq\u0100;q\u0d60\u2c23\u0200gilr\u2c3d\u2c3f\u2c45\u2c47\xec\u0bd7lde\u803b\xf1\u40f1\xe7\u0c43iangle\u0100lr\u2c52\u2c5ceft\u0100;e\u0c1a\u2c5a\xf1\u0c26ight\u0100;e\u0ccb\u2c65\xf1\u0cd7\u0100;m\u2c6c\u2c6d\u43bd\u0180;es\u2c74\u2c75\u2c79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2c8f\u2c94\u2c99\u2c9e\u2ca3\u2cb0\u2cb6\u2cd3\u2ce3ash;\u62adarr;\u6904p;\uc000\u224d\u20d2ash;\u62ac\u0100et\u2ca8\u2cac;\uc000\u2265\u20d2;\uc000>\u20d2nfin;\u69de\u0180Aet\u2cbd\u2cc1\u2cc5rr;\u6902;\uc000\u2264\u20d2\u0100;r\u2cca\u2ccd\uc000<\u20d2ie;\uc000\u22b4\u20d2\u0100At\u2cd8\u2cdcrr;\u6903rie;\uc000\u22b5\u20d2im;\uc000\u223c\u20d2\u0180Aan\u2cf0\u2cf4\u2d02rr;\u61d6r\u0100hr\u2cfa\u2cfdk;\u6923\u0100;o\u13e7\u13e5ear;\u6927\u1253\u1a95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2d2d\0\u2d38\u2d48\u2d60\u2d65\u2d72\u2d84\u1b07\0\0\u2d8d\u2dab\0\u2dc8\u2dce\0\u2ddc\u2e19\u2e2b\u2e3e\u2e43\u0100cs\u2d31\u1a97ute\u803b\xf3\u40f3\u0100iy\u2d3c\u2d45r\u0100;c\u1a9e\u2d42\u803b\xf4\u40f4;\u443e\u0280abios\u1aa0\u2d52\u2d57\u01c8\u2d5alac;\u4151v;\u6a38old;\u69bclig;\u4153\u0100cr\u2d69\u2d6dir;\u69bf;\uc000\ud835\udd2c\u036f\u2d79\0\0\u2d7c\0\u2d82n;\u42dbave\u803b\xf2\u40f2;\u69c1\u0100bm\u2d88\u0df4ar;\u69b5\u0200acit\u2d95\u2d98\u2da5\u2da8r\xf2\u1a80\u0100ir\u2d9d\u2da0r;\u69beoss;\u69bbn\xe5\u0e52;\u69c0\u0180aei\u2db1\u2db5\u2db9cr;\u414dga;\u43c9\u0180cdn\u2dc0\u2dc5\u01cdron;\u43bf;\u69b6pf;\uc000\ud835\udd60\u0180ael\u2dd4\u2dd7\u01d2r;\u69b7rp;\u69b9\u0380;adiosv\u2dea\u2deb\u2dee\u2e08\u2e0d\u2e10\u2e16\u6228r\xf2\u1a86\u0200;efm\u2df7\u2df8\u2e02\u2e05\u6a5dr\u0100;o\u2dfe\u2dff\u6134f\xbb\u2dff\u803b\xaa\u40aa\u803b\xba\u40bagof;\u62b6r;\u6a56lope;\u6a57;\u6a5b\u0180clo\u2e1f\u2e21\u2e27\xf2\u2e01ash\u803b\xf8\u40f8l;\u6298i\u016c\u2e2f\u2e34de\u803b\xf5\u40f5es\u0100;a\u01db\u2e3as;\u6a36ml\u803b\xf6\u40f6bar;\u633d\u0ae1\u2e5e\0\u2e7d\0\u2e80\u2e9d\0\u2ea2\u2eb9\0\0\u2ecb\u0e9c\0\u2f13\0\0\u2f2b\u2fbc\0\u2fc8r\u0200;ast\u0403\u2e67\u2e72\u0e85\u8100\xb6;l\u2e6d\u2e6e\u40b6le\xec\u0403\u0269\u2e78\0\0\u2e7bm;\u6af3;\u6afdy;\u443fr\u0280cimpt\u2e8b\u2e8f\u2e93\u1865\u2e97nt;\u4025od;\u402eil;\u6030enk;\u6031r;\uc000\ud835\udd2d\u0180imo\u2ea8\u2eb0\u2eb4\u0100;v\u2ead\u2eae\u43c6;\u43d5ma\xf4\u0a76ne;\u660e\u0180;tv\u2ebf\u2ec0\u2ec8\u43c0chfork\xbb\u1ffd;\u43d6\u0100au\u2ecf\u2edfn\u0100ck\u2ed5\u2eddk\u0100;h\u21f4\u2edb;\u610e\xf6\u21f4s\u0480;abcdemst\u2ef3\u2ef4\u1908\u2ef9\u2efd\u2f04\u2f06\u2f0a\u2f0e\u402bcir;\u6a23ir;\u6a22\u0100ou\u1d40\u2f02;\u6a25;\u6a72n\u80bb\xb1\u0e9dim;\u6a26wo;\u6a27\u0180ipu\u2f19\u2f20\u2f25ntint;\u6a15f;\uc000\ud835\udd61nd\u803b\xa3\u40a3\u0500;Eaceinosu\u0ec8\u2f3f\u2f41\u2f44\u2f47\u2f81\u2f89\u2f92\u2f7e\u2fb6;\u6ab3p;\u6ab7u\xe5\u0ed9\u0100;c\u0ece\u2f4c\u0300;acens\u0ec8\u2f59\u2f5f\u2f66\u2f68\u2f7eppro\xf8\u2f43urlye\xf1\u0ed9\xf1\u0ece\u0180aes\u2f6f\u2f76\u2f7approx;\u6ab9qq;\u6ab5im;\u62e8i\xed\u0edfme\u0100;s\u2f88\u0eae\u6032\u0180Eas\u2f78\u2f90\u2f7a\xf0\u2f75\u0180dfp\u0eec\u2f99\u2faf\u0180als\u2fa0\u2fa5\u2faalar;\u632eine;\u6312urf;\u6313\u0100;t\u0efb\u2fb4\xef\u0efbrel;\u62b0\u0100ci\u2fc0\u2fc5r;\uc000\ud835\udcc5;\u43c8ncsp;\u6008\u0300fiopsu\u2fda\u22e2\u2fdf\u2fe5\u2feb\u2ff1r;\uc000\ud835\udd2epf;\uc000\ud835\udd62rime;\u6057cr;\uc000\ud835\udcc6\u0180aeo\u2ff8\u3009\u3013t\u0100ei\u2ffe\u3005rnion\xf3\u06b0nt;\u6a16st\u0100;e\u3010\u3011\u403f\xf1\u1f19\xf4\u0f14\u0a80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30e0\u310e\u312b\u3147\u3162\u3172\u318e\u3206\u3215\u3224\u3229\u3258\u326e\u3272\u3290\u32b0\u32b7\u0180art\u3047\u304a\u304cr\xf2\u10b3\xf2\u03ddail;\u691car\xf2\u1c65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307f\u308f\u3094\u30cc\u0100eu\u306d\u3071;\uc000\u223d\u0331te;\u4155i\xe3\u116emptyv;\u69b3g\u0200;del\u0fd1\u3089\u308b\u308d;\u6992;\u69a5\xe5\u0fd1uo\u803b\xbb\u40bbr\u0580;abcfhlpstw\u0fdc\u30ac\u30af\u30b7\u30b9\u30bc\u30be\u30c0\u30c3\u30c7\u30cap;\u6975\u0100;f\u0fe0\u30b4s;\u6920;\u6933s;\u691e\xeb\u225d\xf0\u272el;\u6945im;\u6974l;\u61a3;\u619d\u0100ai\u30d1\u30d5il;\u691ao\u0100;n\u30db\u30dc\u6236al\xf3\u0f1e\u0180abr\u30e7\u30ea\u30eer\xf2\u17e5rk;\u6773\u0100ak\u30f3\u30fdc\u0100ek\u30f9\u30fb;\u407d;\u405d\u0100es\u3102\u3104;\u698cl\u0100du\u310a\u310c;\u698e;\u6990\u0200aeuy\u3117\u311c\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xec\u0ff2\xe2\u30fa;\u4440\u0200clqs\u3134\u3137\u313d\u3144a;\u6937dhar;\u6969uo\u0100;r\u020e\u020dh;\u61b3\u0180acg\u314e\u315f\u0f44l\u0200;ips\u0f78\u3158\u315b\u109cn\xe5\u10bbar\xf4\u0fa9t;\u65ad\u0180ilr\u3169\u1023\u316esht;\u697d;\uc000\ud835\udd2f\u0100ao\u3177\u3186r\u0100du\u317d\u317f\xbb\u047b\u0100;l\u1091\u3184;\u696c\u0100;v\u318b\u318c\u43c1;\u43f1\u0180gns\u3195\u31f9\u31fcht\u0300ahlrst\u31a4\u31b0\u31c2\u31d8\u31e4\u31eerrow\u0100;t\u0fdc\u31ada\xe9\u30c8arpoon\u0100du\u31bb\u31bfow\xee\u317ep\xbb\u1092eft\u0100ah\u31ca\u31d0rrow\xf3\u0feaarpoon\xf3\u0551ightarrows;\u61c9quigarro\xf7\u30cbhreetimes;\u62ccg;\u42daingdotse\xf1\u1f32\u0180ahm\u320d\u3210\u3213r\xf2\u0feaa\xf2\u0551;\u600foust\u0100;a\u321e\u321f\u63b1che\xbb\u321fmid;\u6aee\u0200abpt\u3232\u323d\u3240\u3252\u0100nr\u3237\u323ag;\u67edr;\u61fer\xeb\u1003\u0180afl\u3247\u324a\u324er;\u6986;\uc000\ud835\udd63us;\u6a2eimes;\u6a35\u0100ap\u325d\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6a12ar\xf2\u31e3\u0200achq\u327b\u3280\u10bc\u3285quo;\u603ar;\uc000\ud835\udcc7\u0100bu\u30fb\u328ao\u0100;r\u0214\u0213\u0180hir\u3297\u329b\u32a0re\xe5\u31f8mes;\u62cai\u0200;efl\u32aa\u1059\u1821\u32ab\u65b9tri;\u69celuhar;\u6968;\u611e\u0d61\u32d5\u32db\u32df\u332c\u3338\u3371\0\u337a\u33a4\0\0\u33ec\u33f0\0\u3428\u3448\u345a\u34ad\u34b1\u34ca\u34f1\0\u3616\0\0\u3633cute;\u415bqu\xef\u27ba\u0500;Eaceinpsy\u11ed\u32f3\u32f5\u32ff\u3302\u330b\u330f\u331f\u3326\u3329;\u6ab4\u01f0\u32fa\0\u32fc;\u6ab8on;\u4161u\xe5\u11fe\u0100;d\u11f3\u3307il;\u415frc;\u415d\u0180Eas\u3316\u3318\u331b;\u6ab6p;\u6abaim;\u62e9olint;\u6a13i\xed\u1204;\u4441ot\u0180;be\u3334\u1d47\u3335\u62c5;\u6a66\u0380Aacmstx\u3346\u334a\u3357\u335b\u335e\u3363\u336drr;\u61d8r\u0100hr\u3350\u3352\xeb\u2228\u0100;o\u0a36\u0a34t\u803b\xa7\u40a7i;\u403bwar;\u6929m\u0100in\u3369\xf0nu\xf3\xf1t;\u6736r\u0100;o\u3376\u2055\uc000\ud835\udd30\u0200acoy\u3382\u3386\u3391\u33a0rp;\u666f\u0100hy\u338b\u338fcy;\u4449;\u4448rt\u026d\u3399\0\0\u339ci\xe4\u1464ara\xec\u2e6f\u803b\xad\u40ad\u0100gm\u33a8\u33b4ma\u0180;fv\u33b1\u33b2\u33b2\u43c3;\u43c2\u0400;deglnpr\u12ab\u33c5\u33c9\u33ce\u33d6\u33de\u33e1\u33e6ot;\u6a6a\u0100;q\u12b1\u12b0\u0100;E\u33d3\u33d4\u6a9e;\u6aa0\u0100;E\u33db\u33dc\u6a9d;\u6a9fe;\u6246lus;\u6a24arr;\u6972ar\xf2\u113d\u0200aeit\u33f8\u3408\u340f\u3417\u0100ls\u33fd\u3404lsetm\xe9\u336ahp;\u6a33parsl;\u69e4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341c\u341d\u6aaa\u0100;s\u3422\u3423\u6aac;\uc000\u2aac\ufe00\u0180flp\u342e\u3433\u3442tcy;\u444c\u0100;b\u3438\u3439\u402f\u0100;a\u343e\u343f\u69c4r;\u633ff;\uc000\ud835\udd64a\u0100dr\u344d\u0402es\u0100;u\u3454\u3455\u6660it\xbb\u3455\u0180csu\u3460\u3479\u349f\u0100au\u3465\u346fp\u0100;s\u1188\u346b;\uc000\u2293\ufe00p\u0100;s\u11b4\u3475;\uc000\u2294\ufe00u\u0100bp\u347f\u348f\u0180;es\u1197\u119c\u3486et\u0100;e\u1197\u348d\xf1\u119d\u0180;es\u11a8\u11ad\u3496et\u0100;e\u11a8\u349d\xf1\u11ae\u0180;af\u117b\u34a6\u05b0r\u0165\u34ab\u05b1\xbb\u117car\xf2\u1148\u0200cemt\u34b9\u34be\u34c2\u34c5r;\uc000\ud835\udcc8tm\xee\xf1i\xec\u3415ar\xe6\u11be\u0100ar\u34ce\u34d5r\u0100;f\u34d4\u17bf\u6606\u0100an\u34da\u34edight\u0100ep\u34e3\u34eapsilo\xee\u1ee0h\xe9\u2eafs\xbb\u2852\u0280bcmnp\u34fb\u355e\u1209\u358b\u358e\u0480;Edemnprs\u350e\u350f\u3511\u3515\u351e\u3523\u352c\u3531\u3536\u6282;\u6ac5ot;\u6abd\u0100;d\u11da\u351aot;\u6ac3ult;\u6ac1\u0100Ee\u3528\u352a;\u6acb;\u628alus;\u6abfarr;\u6979\u0180eiu\u353d\u3552\u3555t\u0180;en\u350e\u3545\u354bq\u0100;q\u11da\u350feq\u0100;q\u352b\u3528m;\u6ac7\u0100bp\u355a\u355c;\u6ad5;\u6ad3c\u0300;acens\u11ed\u356c\u3572\u3579\u357b\u3326ppro\xf8\u32faurlye\xf1\u11fe\xf1\u11f3\u0180aes\u3582\u3588\u331bppro\xf8\u331aq\xf1\u3317g;\u666a\u0680123;Edehlmnps\u35a9\u35ac\u35af\u121c\u35b2\u35b4\u35c0\u35c9\u35d5\u35da\u35df\u35e8\u35ed\u803b\xb9\u40b9\u803b\xb2\u40b2\u803b\xb3\u40b3;\u6ac6\u0100os\u35b9\u35bct;\u6abeub;\u6ad8\u0100;d\u1222\u35c5ot;\u6ac4s\u0100ou\u35cf\u35d2l;\u67c9b;\u6ad7arr;\u697bult;\u6ac2\u0100Ee\u35e4\u35e6;\u6acc;\u628blus;\u6ac0\u0180eiu\u35f4\u3609\u360ct\u0180;en\u121c\u35fc\u3602q\u0100;q\u1222\u35b2eq\u0100;q\u35e7\u35e4m;\u6ac8\u0100bp\u3611\u3613;\u6ad4;\u6ad6\u0180Aan\u361c\u3620\u362drr;\u61d9r\u0100hr\u3626\u3628\xeb\u222e\u0100;o\u0a2b\u0a29war;\u692alig\u803b\xdf\u40df\u0be1\u3651\u365d\u3660\u12ce\u3673\u3679\0\u367e\u36c2\0\0\0\0\0\u36db\u3703\0\u3709\u376c\0\0\0\u3787\u0272\u3656\0\0\u365bget;\u6316;\u43c4r\xeb\u0e5f\u0180aey\u3666\u366b\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uc000\ud835\udd31\u0200eiko\u3686\u369d\u36b5\u36bc\u01f2\u368b\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369b\u43b8ym;\u43d1\u0100cn\u36a2\u36b2k\u0100as\u36a8\u36aeppro\xf8\u12c1im\xbb\u12acs\xf0\u129e\u0100as\u36ba\u36ae\xf0\u12c1rn\u803b\xfe\u40fe\u01ec\u031f\u36c6\u22e7es\u8180\xd7;bd\u36cf\u36d0\u36d8\u40d7\u0100;a\u190f\u36d5r;\u6a31;\u6a30\u0180eps\u36e1\u36e3\u3700\xe1\u2a4d\u0200;bcf\u0486\u36ec\u36f0\u36f4ot;\u6336ir;\u6af1\u0100;o\u36f9\u36fc\uc000\ud835\udd65rk;\u6ada\xe1\u3362rime;\u6034\u0180aip\u370f\u3712\u3764d\xe5\u1248\u0380adempst\u3721\u374d\u3740\u3751\u3757\u375c\u375fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65b5own\xbb\u1dbbeft\u0100;e\u2800\u373e\xf1\u092e;\u625cight\u0100;e\u32aa\u374b\xf1\u105aot;\u65ecinus;\u6a3alus;\u6a39b;\u69cdime;\u6a3bezium;\u63e2\u0180cht\u3772\u377d\u3781\u0100ry\u3777\u377b;\uc000\ud835\udcc9;\u4446cy;\u445brok;\u4167\u0100io\u378b\u378ex\xf4\u1777head\u0100lr\u3797\u37a0eftarro\xf7\u084fightarrow\xbb\u0f5d\u0900AHabcdfghlmoprstuw\u37d0\u37d3\u37d7\u37e4\u37f0\u37fc\u380e\u381c\u3823\u3834\u3851\u385d\u386b\u38a9\u38cc\u38d2\u38ea\u38f6r\xf2\u03edar;\u6963\u0100cr\u37dc\u37e2ute\u803b\xfa\u40fa\xf2\u1150r\u01e3\u37ea\0\u37edy;\u445eve;\u416d\u0100iy\u37f5\u37farc\u803b\xfb\u40fb;\u4443\u0180abh\u3803\u3806\u380br\xf2\u13adlac;\u4171a\xf2\u13c3\u0100ir\u3813\u3818sht;\u697e;\uc000\ud835\udd32rave\u803b\xf9\u40f9\u0161\u3827\u3831r\u0100lr\u382c\u382e\xbb\u0957\xbb\u1083lk;\u6580\u0100ct\u3839\u384d\u026f\u383f\0\0\u384arn\u0100;e\u3845\u3846\u631cr\xbb\u3846op;\u630fri;\u65f8\u0100al\u3856\u385acr;\u416b\u80bb\xa8\u0349\u0100gp\u3862\u3866on;\u4173f;\uc000\ud835\udd66\u0300adhlsu\u114b\u3878\u387d\u1372\u3891\u38a0own\xe1\u13b3arpoon\u0100lr\u3888\u388cef\xf4\u382digh\xf4\u382fi\u0180;hl\u3899\u389a\u389c\u43c5\xbb\u13faon\xbb\u389aparrows;\u61c8\u0180cit\u38b0\u38c4\u38c8\u026f\u38b6\0\0\u38c1rn\u0100;e\u38bc\u38bd\u631dr\xbb\u38bdop;\u630eng;\u416fri;\u65f9cr;\uc000\ud835\udcca\u0180dir\u38d9\u38dd\u38e2ot;\u62f0lde;\u4169i\u0100;f\u3730\u38e8\xbb\u1813\u0100am\u38ef\u38f2r\xf2\u38a8l\u803b\xfc\u40fcangle;\u69a7\u0780ABDacdeflnoprsz\u391c\u391f\u3929\u392d\u39b5\u39b8\u39bd\u39df\u39e4\u39e8\u39f3\u39f9\u39fd\u3a01\u3a20r\xf2\u03f7ar\u0100;v\u3926\u3927\u6ae8;\u6ae9as\xe8\u03e1\u0100nr\u3932\u3937grt;\u699c\u0380eknprst\u34e3\u3946\u394b\u3952\u395d\u3964\u3996app\xe1\u2415othin\xe7\u1e96\u0180hir\u34eb\u2ec8\u3959op\xf4\u2fb5\u0100;h\u13b7\u3962\xef\u318d\u0100iu\u3969\u396dgm\xe1\u33b3\u0100bp\u3972\u3984setneq\u0100;q\u397d\u3980\uc000\u228a\ufe00;\uc000\u2acb\ufe00setneq\u0100;q\u398f\u3992\uc000\u228b\ufe00;\uc000\u2acc\ufe00\u0100hr\u399b\u399fet\xe1\u369ciangle\u0100lr\u39aa\u39afeft\xbb\u0925ight\xbb\u1051y;\u4432ash\xbb\u1036\u0180elr\u39c4\u39d2\u39d7\u0180;be\u2dea\u39cb\u39cfar;\u62bbq;\u625alip;\u62ee\u0100bt\u39dc\u1468a\xf2\u1469r;\uc000\ud835\udd33tr\xe9\u39aesu\u0100bp\u39ef\u39f1\xbb\u0d1c\xbb\u0d59pf;\uc000\ud835\udd67ro\xf0\u0efbtr\xe9\u39b4\u0100cu\u3a06\u3a0br;\uc000\ud835\udccb\u0100bp\u3a10\u3a18n\u0100Ee\u3980\u3a16\xbb\u397en\u0100Ee\u3992\u3a1e\xbb\u3990igzag;\u699a\u0380cefoprs\u3a36\u3a3b\u3a56\u3a5b\u3a54\u3a61\u3a6airc;\u4175\u0100di\u3a40\u3a51\u0100bg\u3a45\u3a49ar;\u6a5fe\u0100;q\u15fa\u3a4f;\u6259erp;\u6118r;\uc000\ud835\udd34pf;\uc000\ud835\udd68\u0100;e\u1479\u3a66at\xe8\u1479cr;\uc000\ud835\udccc\u0ae3\u178e\u3a87\0\u3a8b\0\u3a90\u3a9b\0\0\u3a9d\u3aa8\u3aab\u3aaf\0\0\u3ac3\u3ace\0\u3ad8\u17dc\u17dftr\xe9\u17d1r;\uc000\ud835\udd35\u0100Aa\u3a94\u3a97r\xf2\u03c3r\xf2\u09f6;\u43be\u0100Aa\u3aa1\u3aa4r\xf2\u03b8r\xf2\u09eba\xf0\u2713is;\u62fb\u0180dpt\u17a4\u3ab5\u3abe\u0100fl\u3aba\u17a9;\uc000\ud835\udd69im\xe5\u17b2\u0100Aa\u3ac7\u3acar\xf2\u03cer\xf2\u0a01\u0100cq\u3ad2\u17b8r;\uc000\ud835\udccd\u0100pt\u17d6\u3adcr\xe9\u17d4\u0400acefiosu\u3af0\u3afd\u3b08\u3b0c\u3b11\u3b15\u3b1b\u3b21c\u0100uy\u3af6\u3afbte\u803b\xfd\u40fd;\u444f\u0100iy\u3b02\u3b06rc;\u4177;\u444bn\u803b\xa5\u40a5r;\uc000\ud835\udd36cy;\u4457pf;\uc000\ud835\udd6acr;\uc000\ud835\udcce\u0100cm\u3b26\u3b29y;\u444el\u803b\xff\u40ff\u0500acdefhiosw\u3b42\u3b48\u3b54\u3b58\u3b64\u3b69\u3b6d\u3b74\u3b7a\u3b80cute;\u417a\u0100ay\u3b4d\u3b52ron;\u417e;\u4437ot;\u417c\u0100et\u3b5d\u3b61tr\xe6\u155fa;\u43b6r;\uc000\ud835\udd37cy;\u4436grarr;\u61ddpf;\uc000\ud835\udd6bcr;\uc000\ud835\udccf\u0100jn\u3b85\u3b87;\u600dj;\u600c"
9102
+ .split("")
9103
+ .map(function (c) { return c.charCodeAt(0); }));
9104
+
9105
+ var decodeDataXml = {};
9106
+
9107
+ // Generated using scripts/write-decode-map.ts
9108
+ Object.defineProperty(decodeDataXml, "__esModule", { value: true });
9109
+ decodeDataXml.default = new Uint16Array(
9110
+ // prettier-ignore
9111
+ "\u0200aglq\t\x15\x18\x1b\u026d\x0f\0\0\x12p;\u4026os;\u4027t;\u403et;\u403cuot;\u4022"
9112
+ .split("")
9113
+ .map(function (c) { return c.charCodeAt(0); }));
9114
+
9115
+ var decode_codepoint = {};
9116
+
9117
+ (function (exports) {
9118
+ // Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134
9119
+ var _a;
9120
+ Object.defineProperty(exports, "__esModule", { value: true });
9121
+ exports.replaceCodePoint = exports.fromCodePoint = void 0;
9122
+ var decodeMap = new Map([
9123
+ [0, 65533],
9124
+ // C1 Unicode control character reference replacements
9125
+ [128, 8364],
9126
+ [130, 8218],
9127
+ [131, 402],
9128
+ [132, 8222],
9129
+ [133, 8230],
9130
+ [134, 8224],
9131
+ [135, 8225],
9132
+ [136, 710],
9133
+ [137, 8240],
9134
+ [138, 352],
9135
+ [139, 8249],
9136
+ [140, 338],
9137
+ [142, 381],
9138
+ [145, 8216],
9139
+ [146, 8217],
9140
+ [147, 8220],
9141
+ [148, 8221],
9142
+ [149, 8226],
9143
+ [150, 8211],
9144
+ [151, 8212],
9145
+ [152, 732],
9146
+ [153, 8482],
9147
+ [154, 353],
9148
+ [155, 8250],
9149
+ [156, 339],
9150
+ [158, 382],
9151
+ [159, 376],
9152
+ ]);
9153
+ /**
9154
+ * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.
9155
+ */
9156
+ exports.fromCodePoint =
9157
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins
9158
+ (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {
9159
+ var output = "";
9160
+ if (codePoint > 0xffff) {
9161
+ codePoint -= 0x10000;
9162
+ output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);
9163
+ codePoint = 0xdc00 | (codePoint & 0x3ff);
9164
+ }
9165
+ output += String.fromCharCode(codePoint);
9166
+ return output;
9167
+ };
9168
+ /**
9169
+ * Replace the given code point with a replacement character if it is a
9170
+ * surrogate or is outside the valid range. Otherwise return the code
9171
+ * point unchanged.
9172
+ */
9173
+ function replaceCodePoint(codePoint) {
9174
+ var _a;
9175
+ if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {
9176
+ return 0xfffd;
9177
+ }
9178
+ return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;
9179
+ }
9180
+ exports.replaceCodePoint = replaceCodePoint;
9181
+ /**
9182
+ * Replace the code point if relevant, then convert it to a string.
9183
+ *
9184
+ * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.
9185
+ * @param codePoint The code point to decode.
9186
+ * @returns The decoded code point.
9187
+ */
9188
+ function decodeCodePoint(codePoint) {
9189
+ return (0, exports.fromCodePoint)(replaceCodePoint(codePoint));
9190
+ }
9191
+ exports.default = decodeCodePoint;
9192
+
9193
+ } (decode_codepoint));
9194
+
9195
+ (function (exports) {
9196
+ var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9197
+ if (k2 === undefined) k2 = k;
9198
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9199
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9200
+ desc = { enumerable: true, get: function() { return m[k]; } };
9201
+ }
9202
+ Object.defineProperty(o, k2, desc);
9203
+ }) : (function(o, m, k, k2) {
9204
+ if (k2 === undefined) k2 = k;
9205
+ o[k2] = m[k];
9206
+ }));
9207
+ var __setModuleDefault = (commonjsGlobal && commonjsGlobal.__setModuleDefault) || (Object.create ? (function(o, v) {
9208
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
9209
+ }) : function(o, v) {
9210
+ o["default"] = v;
9211
+ });
9212
+ var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
9213
+ if (mod && mod.__esModule) return mod;
9214
+ var result = {};
9215
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
9216
+ __setModuleDefault(result, mod);
9217
+ return result;
8974
9218
  };
8975
- Object.defineProperty(exports, "__esModule", { value: true });
8976
- exports.DomHandler = void 0;
8977
- var domelementtype_1 = lib$3;
8978
- var node_js_1 = node$1;
8979
- __exportStar(node$1, exports);
8980
- // Default options
8981
- var defaultOpts = {
8982
- withStartIndices: false,
8983
- withEndIndices: false,
8984
- xmlMode: false,
9219
+ var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
9220
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8985
9221
  };
8986
- var DomHandler = /** @class */ (function () {
9222
+ Object.defineProperty(exports, "__esModule", { value: true });
9223
+ exports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTMLAttribute = exports.decodeHTML = exports.determineBranch = exports.EntityDecoder = exports.DecodingMode = exports.BinTrieFlags = exports.fromCodePoint = exports.replaceCodePoint = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0;
9224
+ var decode_data_html_js_1 = __importDefault(decodeDataHtml);
9225
+ exports.htmlDecodeTree = decode_data_html_js_1.default;
9226
+ var decode_data_xml_js_1 = __importDefault(decodeDataXml);
9227
+ exports.xmlDecodeTree = decode_data_xml_js_1.default;
9228
+ var decode_codepoint_js_1 = __importStar(decode_codepoint);
9229
+ exports.decodeCodePoint = decode_codepoint_js_1.default;
9230
+ var decode_codepoint_js_2 = decode_codepoint;
9231
+ Object.defineProperty(exports, "replaceCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.replaceCodePoint; } });
9232
+ Object.defineProperty(exports, "fromCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.fromCodePoint; } });
9233
+ var CharCodes;
9234
+ (function (CharCodes) {
9235
+ CharCodes[CharCodes["NUM"] = 35] = "NUM";
9236
+ CharCodes[CharCodes["SEMI"] = 59] = "SEMI";
9237
+ CharCodes[CharCodes["EQUALS"] = 61] = "EQUALS";
9238
+ CharCodes[CharCodes["ZERO"] = 48] = "ZERO";
9239
+ CharCodes[CharCodes["NINE"] = 57] = "NINE";
9240
+ CharCodes[CharCodes["LOWER_A"] = 97] = "LOWER_A";
9241
+ CharCodes[CharCodes["LOWER_F"] = 102] = "LOWER_F";
9242
+ CharCodes[CharCodes["LOWER_X"] = 120] = "LOWER_X";
9243
+ CharCodes[CharCodes["LOWER_Z"] = 122] = "LOWER_Z";
9244
+ CharCodes[CharCodes["UPPER_A"] = 65] = "UPPER_A";
9245
+ CharCodes[CharCodes["UPPER_F"] = 70] = "UPPER_F";
9246
+ CharCodes[CharCodes["UPPER_Z"] = 90] = "UPPER_Z";
9247
+ })(CharCodes || (CharCodes = {}));
9248
+ /** Bit that needs to be set to convert an upper case ASCII character to lower case */
9249
+ var TO_LOWER_BIT = 32;
9250
+ var BinTrieFlags;
9251
+ (function (BinTrieFlags) {
9252
+ BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
9253
+ BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
9254
+ BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE";
9255
+ })(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {}));
9256
+ function isNumber(code) {
9257
+ return code >= CharCodes.ZERO && code <= CharCodes.NINE;
9258
+ }
9259
+ function isHexadecimalCharacter(code) {
9260
+ return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||
9261
+ (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));
9262
+ }
9263
+ function isAsciiAlphaNumeric(code) {
9264
+ return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||
9265
+ (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||
9266
+ isNumber(code));
9267
+ }
9268
+ /**
9269
+ * Checks if the given character is a valid end character for an entity in an attribute.
9270
+ *
9271
+ * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.
9272
+ * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state
9273
+ */
9274
+ function isEntityInAttributeInvalidEnd(code) {
9275
+ return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
9276
+ }
9277
+ var EntityDecoderState;
9278
+ (function (EntityDecoderState) {
9279
+ EntityDecoderState[EntityDecoderState["EntityStart"] = 0] = "EntityStart";
9280
+ EntityDecoderState[EntityDecoderState["NumericStart"] = 1] = "NumericStart";
9281
+ EntityDecoderState[EntityDecoderState["NumericDecimal"] = 2] = "NumericDecimal";
9282
+ EntityDecoderState[EntityDecoderState["NumericHex"] = 3] = "NumericHex";
9283
+ EntityDecoderState[EntityDecoderState["NamedEntity"] = 4] = "NamedEntity";
9284
+ })(EntityDecoderState || (EntityDecoderState = {}));
9285
+ var DecodingMode;
9286
+ (function (DecodingMode) {
9287
+ /** Entities in text nodes that can end with any character. */
9288
+ DecodingMode[DecodingMode["Legacy"] = 0] = "Legacy";
9289
+ /** Only allow entities terminated with a semicolon. */
9290
+ DecodingMode[DecodingMode["Strict"] = 1] = "Strict";
9291
+ /** Entities in attributes have limitations on ending characters. */
9292
+ DecodingMode[DecodingMode["Attribute"] = 2] = "Attribute";
9293
+ })(DecodingMode = exports.DecodingMode || (exports.DecodingMode = {}));
9294
+ /**
9295
+ * Token decoder with support of writing partial entities.
9296
+ */
9297
+ var EntityDecoder = /** @class */ (function () {
9298
+ function EntityDecoder(
9299
+ /** The tree used to decode entities. */
9300
+ decodeTree,
9301
+ /**
9302
+ * The function that is called when a codepoint is decoded.
9303
+ *
9304
+ * For multi-byte named entities, this will be called multiple times,
9305
+ * with the second codepoint, and the same `consumed` value.
9306
+ *
9307
+ * @param codepoint The decoded codepoint.
9308
+ * @param consumed The number of bytes consumed by the decoder.
9309
+ */
9310
+ emitCodePoint,
9311
+ /** An object that is used to produce errors. */
9312
+ errors) {
9313
+ this.decodeTree = decodeTree;
9314
+ this.emitCodePoint = emitCodePoint;
9315
+ this.errors = errors;
9316
+ /** The current state of the decoder. */
9317
+ this.state = EntityDecoderState.EntityStart;
9318
+ /** Characters that were consumed while parsing an entity. */
9319
+ this.consumed = 1;
9320
+ /**
9321
+ * The result of the entity.
9322
+ *
9323
+ * Either the result index of a numeric entity, or the codepoint of a
9324
+ * numeric entity.
9325
+ */
9326
+ this.result = 0;
9327
+ /** The current index in the decode tree. */
9328
+ this.treeIndex = 0;
9329
+ /** The number of characters that were consumed in excess. */
9330
+ this.excess = 1;
9331
+ /** The mode in which the decoder is operating. */
9332
+ this.decodeMode = DecodingMode.Strict;
9333
+ }
9334
+ /** Resets the instance to make it reusable. */
9335
+ EntityDecoder.prototype.startEntity = function (decodeMode) {
9336
+ this.decodeMode = decodeMode;
9337
+ this.state = EntityDecoderState.EntityStart;
9338
+ this.result = 0;
9339
+ this.treeIndex = 0;
9340
+ this.excess = 1;
9341
+ this.consumed = 1;
9342
+ };
9343
+ /**
9344
+ * Write an entity to the decoder. This can be called multiple times with partial entities.
9345
+ * If the entity is incomplete, the decoder will return -1.
9346
+ *
9347
+ * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
9348
+ * entity is incomplete, and resume when the next string is written.
9349
+ *
9350
+ * @param string The string containing the entity (or a continuation of the entity).
9351
+ * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
9352
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
9353
+ */
9354
+ EntityDecoder.prototype.write = function (str, offset) {
9355
+ switch (this.state) {
9356
+ case EntityDecoderState.EntityStart: {
9357
+ if (str.charCodeAt(offset) === CharCodes.NUM) {
9358
+ this.state = EntityDecoderState.NumericStart;
9359
+ this.consumed += 1;
9360
+ return this.stateNumericStart(str, offset + 1);
9361
+ }
9362
+ this.state = EntityDecoderState.NamedEntity;
9363
+ return this.stateNamedEntity(str, offset);
9364
+ }
9365
+ case EntityDecoderState.NumericStart: {
9366
+ return this.stateNumericStart(str, offset);
9367
+ }
9368
+ case EntityDecoderState.NumericDecimal: {
9369
+ return this.stateNumericDecimal(str, offset);
9370
+ }
9371
+ case EntityDecoderState.NumericHex: {
9372
+ return this.stateNumericHex(str, offset);
9373
+ }
9374
+ case EntityDecoderState.NamedEntity: {
9375
+ return this.stateNamedEntity(str, offset);
9376
+ }
9377
+ }
9378
+ };
9379
+ /**
9380
+ * Switches between the numeric decimal and hexadecimal states.
9381
+ *
9382
+ * Equivalent to the `Numeric character reference state` in the HTML spec.
9383
+ *
9384
+ * @param str The string containing the entity (or a continuation of the entity).
9385
+ * @param offset The current offset.
9386
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
9387
+ */
9388
+ EntityDecoder.prototype.stateNumericStart = function (str, offset) {
9389
+ if (offset >= str.length) {
9390
+ return -1;
9391
+ }
9392
+ if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
9393
+ this.state = EntityDecoderState.NumericHex;
9394
+ this.consumed += 1;
9395
+ return this.stateNumericHex(str, offset + 1);
9396
+ }
9397
+ this.state = EntityDecoderState.NumericDecimal;
9398
+ return this.stateNumericDecimal(str, offset);
9399
+ };
9400
+ EntityDecoder.prototype.addToNumericResult = function (str, start, end, base) {
9401
+ if (start !== end) {
9402
+ var digitCount = end - start;
9403
+ this.result =
9404
+ this.result * Math.pow(base, digitCount) +
9405
+ parseInt(str.substr(start, digitCount), base);
9406
+ this.consumed += digitCount;
9407
+ }
9408
+ };
8987
9409
  /**
8988
- * @param callback Called once parsing has completed.
8989
- * @param options Settings for the handler.
8990
- * @param elementCB Callback whenever a tag is closed.
9410
+ * Parses a hexadecimal numeric entity.
9411
+ *
9412
+ * Equivalent to the `Hexademical character reference state` in the HTML spec.
9413
+ *
9414
+ * @param str The string containing the entity (or a continuation of the entity).
9415
+ * @param offset The current offset.
9416
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
8991
9417
  */
8992
- function DomHandler(callback, options, elementCB) {
8993
- /** The elements of the DOM */
8994
- this.dom = [];
8995
- /** The root element for the DOM */
8996
- this.root = new node_js_1.Document(this.dom);
8997
- /** Indicated whether parsing has been completed. */
8998
- this.done = false;
8999
- /** Stack of open tags. */
9000
- this.tagStack = [this.root];
9001
- /** A data node that is still being written to. */
9002
- this.lastNode = null;
9003
- /** Reference to the parser instance. Used for location information. */
9004
- this.parser = null;
9005
- // Make it possible to skip arguments, for backwards-compatibility
9006
- if (typeof options === "function") {
9007
- elementCB = options;
9008
- options = defaultOpts;
9418
+ EntityDecoder.prototype.stateNumericHex = function (str, offset) {
9419
+ var startIdx = offset;
9420
+ while (offset < str.length) {
9421
+ var char = str.charCodeAt(offset);
9422
+ if (isNumber(char) || isHexadecimalCharacter(char)) {
9423
+ offset += 1;
9424
+ }
9425
+ else {
9426
+ this.addToNumericResult(str, startIdx, offset, 16);
9427
+ return this.emitNumericEntity(char, 3);
9428
+ }
9009
9429
  }
9010
- if (typeof callback === "object") {
9011
- options = callback;
9012
- callback = undefined;
9430
+ this.addToNumericResult(str, startIdx, offset, 16);
9431
+ return -1;
9432
+ };
9433
+ /**
9434
+ * Parses a decimal numeric entity.
9435
+ *
9436
+ * Equivalent to the `Decimal character reference state` in the HTML spec.
9437
+ *
9438
+ * @param str The string containing the entity (or a continuation of the entity).
9439
+ * @param offset The current offset.
9440
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
9441
+ */
9442
+ EntityDecoder.prototype.stateNumericDecimal = function (str, offset) {
9443
+ var startIdx = offset;
9444
+ while (offset < str.length) {
9445
+ var char = str.charCodeAt(offset);
9446
+ if (isNumber(char)) {
9447
+ offset += 1;
9448
+ }
9449
+ else {
9450
+ this.addToNumericResult(str, startIdx, offset, 10);
9451
+ return this.emitNumericEntity(char, 2);
9452
+ }
9013
9453
  }
9014
- this.callback = callback !== null && callback !== void 0 ? callback : null;
9015
- this.options = options !== null && options !== void 0 ? options : defaultOpts;
9016
- this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;
9017
- }
9018
- DomHandler.prototype.onparserinit = function (parser) {
9019
- this.parser = parser;
9454
+ this.addToNumericResult(str, startIdx, offset, 10);
9455
+ return -1;
9020
9456
  };
9021
- // Resets the handler back to starting state
9022
- DomHandler.prototype.onreset = function () {
9023
- this.dom = [];
9024
- this.root = new node_js_1.Document(this.dom);
9025
- this.done = false;
9026
- this.tagStack = [this.root];
9027
- this.lastNode = null;
9028
- this.parser = null;
9457
+ /**
9458
+ * Validate and emit a numeric entity.
9459
+ *
9460
+ * Implements the logic from the `Hexademical character reference start
9461
+ * state` and `Numeric character reference end state` in the HTML spec.
9462
+ *
9463
+ * @param lastCp The last code point of the entity. Used to see if the
9464
+ * entity was terminated with a semicolon.
9465
+ * @param expectedLength The minimum number of characters that should be
9466
+ * consumed. Used to validate that at least one digit
9467
+ * was consumed.
9468
+ * @returns The number of characters that were consumed.
9469
+ */
9470
+ EntityDecoder.prototype.emitNumericEntity = function (lastCp, expectedLength) {
9471
+ var _a;
9472
+ // Ensure we consumed at least one digit.
9473
+ if (this.consumed <= expectedLength) {
9474
+ (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);
9475
+ return 0;
9476
+ }
9477
+ // Figure out if this is a legit end of the entity
9478
+ if (lastCp === CharCodes.SEMI) {
9479
+ this.consumed += 1;
9480
+ }
9481
+ else if (this.decodeMode === DecodingMode.Strict) {
9482
+ return 0;
9483
+ }
9484
+ this.emitCodePoint((0, decode_codepoint_js_1.replaceCodePoint)(this.result), this.consumed);
9485
+ if (this.errors) {
9486
+ if (lastCp !== CharCodes.SEMI) {
9487
+ this.errors.missingSemicolonAfterCharacterReference();
9488
+ }
9489
+ this.errors.validateNumericCharacterReference(this.result);
9490
+ }
9491
+ return this.consumed;
9029
9492
  };
9030
- // Signals the handler that parsing is done
9031
- DomHandler.prototype.onend = function () {
9032
- if (this.done)
9033
- return;
9034
- this.done = true;
9035
- this.parser = null;
9036
- this.handleCallback(null);
9493
+ /**
9494
+ * Parses a named entity.
9495
+ *
9496
+ * Equivalent to the `Named character reference state` in the HTML spec.
9497
+ *
9498
+ * @param str The string containing the entity (or a continuation of the entity).
9499
+ * @param offset The current offset.
9500
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
9501
+ */
9502
+ EntityDecoder.prototype.stateNamedEntity = function (str, offset) {
9503
+ var decodeTree = this.decodeTree;
9504
+ var current = decodeTree[this.treeIndex];
9505
+ // The mask is the number of bytes of the value, including the current byte.
9506
+ var valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
9507
+ for (; offset < str.length; offset++, this.excess++) {
9508
+ var char = str.charCodeAt(offset);
9509
+ this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
9510
+ if (this.treeIndex < 0) {
9511
+ return this.result === 0 ||
9512
+ // If we are parsing an attribute
9513
+ (this.decodeMode === DecodingMode.Attribute &&
9514
+ // We shouldn't have consumed any characters after the entity,
9515
+ (valueLength === 0 ||
9516
+ // And there should be no invalid characters.
9517
+ isEntityInAttributeInvalidEnd(char)))
9518
+ ? 0
9519
+ : this.emitNotTerminatedNamedEntity();
9520
+ }
9521
+ current = decodeTree[this.treeIndex];
9522
+ valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
9523
+ // If the branch is a value, store it and continue
9524
+ if (valueLength !== 0) {
9525
+ // If the entity is terminated by a semicolon, we are done.
9526
+ if (char === CharCodes.SEMI) {
9527
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
9528
+ }
9529
+ // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.
9530
+ if (this.decodeMode !== DecodingMode.Strict) {
9531
+ this.result = this.treeIndex;
9532
+ this.consumed += this.excess;
9533
+ this.excess = 0;
9534
+ }
9535
+ }
9536
+ }
9537
+ return -1;
9037
9538
  };
9038
- DomHandler.prototype.onerror = function (error) {
9039
- this.handleCallback(error);
9539
+ /**
9540
+ * Emit a named entity that was not terminated with a semicolon.
9541
+ *
9542
+ * @returns The number of characters consumed.
9543
+ */
9544
+ EntityDecoder.prototype.emitNotTerminatedNamedEntity = function () {
9545
+ var _a;
9546
+ var _b = this, result = _b.result, decodeTree = _b.decodeTree;
9547
+ var valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
9548
+ this.emitNamedEntityData(result, valueLength, this.consumed);
9549
+ (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();
9550
+ return this.consumed;
9040
9551
  };
9041
- DomHandler.prototype.onclosetag = function () {
9042
- this.lastNode = null;
9043
- var elem = this.tagStack.pop();
9044
- if (this.options.withEndIndices) {
9045
- elem.endIndex = this.parser.endIndex;
9552
+ /**
9553
+ * Emit a named entity.
9554
+ *
9555
+ * @param result The index of the entity in the decode tree.
9556
+ * @param valueLength The number of bytes in the entity.
9557
+ * @param consumed The number of characters consumed.
9558
+ *
9559
+ * @returns The number of characters consumed.
9560
+ */
9561
+ EntityDecoder.prototype.emitNamedEntityData = function (result, valueLength, consumed) {
9562
+ var decodeTree = this.decodeTree;
9563
+ this.emitCodePoint(valueLength === 1
9564
+ ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH
9565
+ : decodeTree[result + 1], consumed);
9566
+ if (valueLength === 3) {
9567
+ // For multi-byte values, we need to emit the second byte.
9568
+ this.emitCodePoint(decodeTree[result + 2], consumed);
9046
9569
  }
9047
- if (this.elementCB)
9048
- this.elementCB(elem);
9049
- };
9050
- DomHandler.prototype.onopentag = function (name, attribs) {
9051
- var type = this.options.xmlMode ? domelementtype_1.ElementType.Tag : undefined;
9052
- var element = new node_js_1.Element(name, attribs, undefined, type);
9053
- this.addNode(element);
9054
- this.tagStack.push(element);
9570
+ return consumed;
9055
9571
  };
9056
- DomHandler.prototype.ontext = function (data) {
9057
- var lastNode = this.lastNode;
9058
- if (lastNode && lastNode.type === domelementtype_1.ElementType.Text) {
9059
- lastNode.data += data;
9060
- if (this.options.withEndIndices) {
9061
- lastNode.endIndex = this.parser.endIndex;
9572
+ /**
9573
+ * Signal to the parser that the end of the input was reached.
9574
+ *
9575
+ * Remaining data will be emitted and relevant errors will be produced.
9576
+ *
9577
+ * @returns The number of characters consumed.
9578
+ */
9579
+ EntityDecoder.prototype.end = function () {
9580
+ var _a;
9581
+ switch (this.state) {
9582
+ case EntityDecoderState.NamedEntity: {
9583
+ // Emit a named entity if we have one.
9584
+ return this.result !== 0 &&
9585
+ (this.decodeMode !== DecodingMode.Attribute ||
9586
+ this.result === this.treeIndex)
9587
+ ? this.emitNotTerminatedNamedEntity()
9588
+ : 0;
9589
+ }
9590
+ // Otherwise, emit a numeric entity if we have one.
9591
+ case EntityDecoderState.NumericDecimal: {
9592
+ return this.emitNumericEntity(0, 2);
9593
+ }
9594
+ case EntityDecoderState.NumericHex: {
9595
+ return this.emitNumericEntity(0, 3);
9596
+ }
9597
+ case EntityDecoderState.NumericStart: {
9598
+ (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);
9599
+ return 0;
9600
+ }
9601
+ case EntityDecoderState.EntityStart: {
9602
+ // Return 0 if we have no entity.
9603
+ return 0;
9062
9604
  }
9063
9605
  }
9064
- else {
9065
- var node = new node_js_1.Text(data);
9066
- this.addNode(node);
9067
- this.lastNode = node;
9068
- }
9069
- };
9070
- DomHandler.prototype.oncomment = function (data) {
9071
- if (this.lastNode && this.lastNode.type === domelementtype_1.ElementType.Comment) {
9072
- this.lastNode.data += data;
9073
- return;
9074
- }
9075
- var node = new node_js_1.Comment(data);
9076
- this.addNode(node);
9077
- this.lastNode = node;
9078
- };
9079
- DomHandler.prototype.oncommentend = function () {
9080
- this.lastNode = null;
9081
- };
9082
- DomHandler.prototype.oncdatastart = function () {
9083
- var text = new node_js_1.Text("");
9084
- var node = new node_js_1.CDATA([text]);
9085
- this.addNode(node);
9086
- text.parent = node;
9087
- this.lastNode = text;
9088
9606
  };
9089
- DomHandler.prototype.oncdataend = function () {
9090
- this.lastNode = null;
9091
- };
9092
- DomHandler.prototype.onprocessinginstruction = function (name, data) {
9093
- var node = new node_js_1.ProcessingInstruction(name, data);
9094
- this.addNode(node);
9095
- };
9096
- DomHandler.prototype.handleCallback = function (error) {
9097
- if (typeof this.callback === "function") {
9098
- this.callback(error, this.dom);
9099
- }
9100
- else if (error) {
9101
- throw error;
9607
+ return EntityDecoder;
9608
+ }());
9609
+ exports.EntityDecoder = EntityDecoder;
9610
+ /**
9611
+ * Creates a function that decodes entities in a string.
9612
+ *
9613
+ * @param decodeTree The decode tree.
9614
+ * @returns A function that decodes entities in a string.
9615
+ */
9616
+ function getDecoder(decodeTree) {
9617
+ var ret = "";
9618
+ var decoder = new EntityDecoder(decodeTree, function (str) { return (ret += (0, decode_codepoint_js_1.fromCodePoint)(str)); });
9619
+ return function decodeWithTrie(str, decodeMode) {
9620
+ var lastIndex = 0;
9621
+ var offset = 0;
9622
+ while ((offset = str.indexOf("&", offset)) >= 0) {
9623
+ ret += str.slice(lastIndex, offset);
9624
+ decoder.startEntity(decodeMode);
9625
+ var len = decoder.write(str,
9626
+ // Skip the "&"
9627
+ offset + 1);
9628
+ if (len < 0) {
9629
+ lastIndex = offset + decoder.end();
9630
+ break;
9631
+ }
9632
+ lastIndex = offset + len;
9633
+ // If `len` is 0, skip the current `&` and continue.
9634
+ offset = len === 0 ? lastIndex + 1 : lastIndex;
9102
9635
  }
9636
+ var result = ret + str.slice(lastIndex);
9637
+ // Make sure we don't keep a reference to the final string.
9638
+ ret = "";
9639
+ return result;
9103
9640
  };
9104
- DomHandler.prototype.addNode = function (node) {
9105
- var parent = this.tagStack[this.tagStack.length - 1];
9106
- var previousSibling = parent.children[parent.children.length - 1];
9107
- if (this.options.withStartIndices) {
9108
- node.startIndex = this.parser.startIndex;
9641
+ }
9642
+ /**
9643
+ * Determines the branch of the current node that is taken given the current
9644
+ * character. This function is used to traverse the trie.
9645
+ *
9646
+ * @param decodeTree The trie.
9647
+ * @param current The current node.
9648
+ * @param nodeIdx The index right after the current node and its value.
9649
+ * @param char The current character.
9650
+ * @returns The index of the next node, or -1 if no branch is taken.
9651
+ */
9652
+ function determineBranch(decodeTree, current, nodeIdx, char) {
9653
+ var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
9654
+ var jumpOffset = current & BinTrieFlags.JUMP_TABLE;
9655
+ // Case 1: Single branch encoded in jump offset
9656
+ if (branchCount === 0) {
9657
+ return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
9658
+ }
9659
+ // Case 2: Multiple branches encoded in jump table
9660
+ if (jumpOffset) {
9661
+ var value = char - jumpOffset;
9662
+ return value < 0 || value >= branchCount
9663
+ ? -1
9664
+ : decodeTree[nodeIdx + value] - 1;
9665
+ }
9666
+ // Case 3: Multiple branches encoded in dictionary
9667
+ // Binary search for the character.
9668
+ var lo = nodeIdx;
9669
+ var hi = lo + branchCount - 1;
9670
+ while (lo <= hi) {
9671
+ var mid = (lo + hi) >>> 1;
9672
+ var midVal = decodeTree[mid];
9673
+ if (midVal < char) {
9674
+ lo = mid + 1;
9109
9675
  }
9110
- if (this.options.withEndIndices) {
9111
- node.endIndex = this.parser.endIndex;
9676
+ else if (midVal > char) {
9677
+ hi = mid - 1;
9112
9678
  }
9113
- parent.children.push(node);
9114
- if (previousSibling) {
9115
- node.prev = previousSibling;
9116
- previousSibling.next = node;
9679
+ else {
9680
+ return decodeTree[mid + branchCount];
9117
9681
  }
9118
- node.parent = parent;
9119
- this.lastNode = null;
9120
- };
9121
- return DomHandler;
9122
- }());
9123
- exports.DomHandler = DomHandler;
9124
- exports.default = DomHandler;
9125
- } (lib$4));
9126
-
9127
- var lib$2 = {};
9128
-
9129
- var stringify$5 = {};
9130
-
9131
- var lib$1 = {};
9132
-
9133
- var lib = {};
9682
+ }
9683
+ return -1;
9684
+ }
9685
+ exports.determineBranch = determineBranch;
9686
+ var htmlDecoder = getDecoder(decode_data_html_js_1.default);
9687
+ var xmlDecoder = getDecoder(decode_data_xml_js_1.default);
9688
+ /**
9689
+ * Decodes an HTML string.
9690
+ *
9691
+ * @param str The string to decode.
9692
+ * @param mode The decoding mode.
9693
+ * @returns The decoded string.
9694
+ */
9695
+ function decodeHTML(str, mode) {
9696
+ if (mode === void 0) { mode = DecodingMode.Legacy; }
9697
+ return htmlDecoder(str, mode);
9698
+ }
9699
+ exports.decodeHTML = decodeHTML;
9700
+ /**
9701
+ * Decodes an HTML string in an attribute.
9702
+ *
9703
+ * @param str The string to decode.
9704
+ * @returns The decoded string.
9705
+ */
9706
+ function decodeHTMLAttribute(str) {
9707
+ return htmlDecoder(str, DecodingMode.Attribute);
9708
+ }
9709
+ exports.decodeHTMLAttribute = decodeHTMLAttribute;
9710
+ /**
9711
+ * Decodes an HTML string, requiring all entities to be terminated by a semicolon.
9712
+ *
9713
+ * @param str The string to decode.
9714
+ * @returns The decoded string.
9715
+ */
9716
+ function decodeHTMLStrict(str) {
9717
+ return htmlDecoder(str, DecodingMode.Strict);
9718
+ }
9719
+ exports.decodeHTMLStrict = decodeHTMLStrict;
9720
+ /**
9721
+ * Decodes an XML string, requiring all entities to be terminated by a semicolon.
9722
+ *
9723
+ * @param str The string to decode.
9724
+ * @returns The decoded string.
9725
+ */
9726
+ function decodeXML(str) {
9727
+ return xmlDecoder(str, DecodingMode.Strict);
9728
+ }
9729
+ exports.decodeXML = decodeXML;
9730
+
9731
+ } (decode));
9134
9732
 
9135
9733
  var encode = {};
9136
9734
 
@@ -10881,22 +11479,37 @@ function isValidFeed(value) {
10881
11479
  }) : function(o, v) {
10882
11480
  o["default"] = v;
10883
11481
  });
10884
- var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
10885
- if (mod && mod.__esModule) return mod;
10886
- var result = {};
10887
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
10888
- __setModuleDefault(result, mod);
10889
- return result;
10890
- };
11482
+ var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || (function () {
11483
+ var ownKeys = function(o) {
11484
+ ownKeys = Object.getOwnPropertyNames || function (o) {
11485
+ var ar = [];
11486
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
11487
+ return ar;
11488
+ };
11489
+ return ownKeys(o);
11490
+ };
11491
+ return function (mod) {
11492
+ if (mod && mod.__esModule) return mod;
11493
+ var result = {};
11494
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
11495
+ __setModuleDefault(result, mod);
11496
+ return result;
11497
+ };
11498
+ })();
10891
11499
  var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
10892
11500
  return (mod && mod.__esModule) ? mod : { "default": mod };
10893
11501
  };
10894
11502
  Object.defineProperty(exports, "__esModule", { value: true });
10895
- exports.DomUtils = exports.parseFeed = exports.getFeed = exports.ElementType = exports.Tokenizer = exports.createDomStream = exports.parseDOM = exports.parseDocument = exports.DefaultHandler = exports.DomHandler = exports.Parser = void 0;
10896
- var Parser_js_1 = Parser$4;
11503
+ exports.DomUtils = exports.getFeed = exports.ElementType = exports.QuoteType = exports.Tokenizer = exports.DefaultHandler = exports.DomHandler = exports.Parser = void 0;
11504
+ exports.parseDocument = parseDocument;
11505
+ exports.parseDOM = parseDOM;
11506
+ exports.createDocumentStream = createDocumentStream;
11507
+ exports.createDomStream = createDomStream;
11508
+ exports.parseFeed = parseFeed;
11509
+ const Parser_js_1 = Parser$4;
10897
11510
  var Parser_js_2 = Parser$4;
10898
11511
  Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return Parser_js_2.Parser; } });
10899
- var domhandler_1 = lib$4;
11512
+ const domhandler_1 = lib$4;
10900
11513
  var domhandler_2 = lib$4;
10901
11514
  Object.defineProperty(exports, "DomHandler", { enumerable: true, get: function () { return domhandler_2.DomHandler; } });
10902
11515
  // Old name for DomHandler
@@ -10906,14 +11519,13 @@ function isValidFeed(value) {
10906
11519
  * Parses the data, returns the resulting document.
10907
11520
  *
10908
11521
  * @param data The data that should be parsed.
10909
- * @param options Optional options for the parser and DOM builder.
11522
+ * @param options Optional options for the parser and DOM handler.
10910
11523
  */
10911
11524
  function parseDocument(data, options) {
10912
- var handler = new domhandler_1.DomHandler(undefined, options);
11525
+ const handler = new domhandler_1.DomHandler(undefined, options);
10913
11526
  new Parser_js_1.Parser(handler, options).end(data);
10914
11527
  return handler.root;
10915
11528
  }
10916
- exports.parseDocument = parseDocument;
10917
11529
  /**
10918
11530
  * Parses data, returns an array of the root nodes.
10919
11531
  *
@@ -10921,50 +11533,59 @@ function isValidFeed(value) {
10921
11533
  * Use `parseDocument` to get the `Document` node instead.
10922
11534
  *
10923
11535
  * @param data The data that should be parsed.
10924
- * @param options Optional options for the parser and DOM builder.
11536
+ * @param options Optional options for the parser and DOM handler.
10925
11537
  * @deprecated Use `parseDocument` instead.
10926
11538
  */
10927
11539
  function parseDOM(data, options) {
10928
11540
  return parseDocument(data, options).children;
10929
11541
  }
10930
- exports.parseDOM = parseDOM;
10931
11542
  /**
10932
11543
  * Creates a parser instance, with an attached DOM handler.
10933
11544
  *
10934
- * @param callback A callback that will be called once parsing has been completed.
10935
- * @param options Optional options for the parser and DOM builder.
11545
+ * @param callback A callback that will be called once parsing has been completed, with the resulting document.
11546
+ * @param options Optional options for the parser and DOM handler.
11547
+ * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM.
11548
+ */
11549
+ function createDocumentStream(callback, options, elementCallback) {
11550
+ const handler = new domhandler_1.DomHandler((error) => callback(error, handler.root), options, elementCallback);
11551
+ return new Parser_js_1.Parser(handler, options);
11552
+ }
11553
+ /**
11554
+ * Creates a parser instance, with an attached DOM handler.
11555
+ *
11556
+ * @param callback A callback that will be called once parsing has been completed, with an array of root nodes.
11557
+ * @param options Optional options for the parser and DOM handler.
10936
11558
  * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM.
11559
+ * @deprecated Use `createDocumentStream` instead.
10937
11560
  */
10938
11561
  function createDomStream(callback, options, elementCallback) {
10939
- var handler = new domhandler_1.DomHandler(callback, options, elementCallback);
11562
+ const handler = new domhandler_1.DomHandler(callback, options, elementCallback);
10940
11563
  return new Parser_js_1.Parser(handler, options);
10941
11564
  }
10942
- exports.createDomStream = createDomStream;
10943
- var Tokenizer_js_1 = Tokenizer$1;
11565
+ var Tokenizer_js_1 = Tokenizer$2;
10944
11566
  Object.defineProperty(exports, "Tokenizer", { enumerable: true, get: function () { return __importDefault(Tokenizer_js_1).default; } });
11567
+ Object.defineProperty(exports, "QuoteType", { enumerable: true, get: function () { return Tokenizer_js_1.QuoteType; } });
10945
11568
  /*
10946
11569
  * All of the following exports exist for backwards-compatibility.
10947
11570
  * They should probably be removed eventually.
10948
11571
  */
10949
11572
  exports.ElementType = __importStar(lib$3);
10950
- var domutils_1 = lib$2;
11573
+ const domutils_1 = lib$2;
10951
11574
  var domutils_2 = lib$2;
10952
11575
  Object.defineProperty(exports, "getFeed", { enumerable: true, get: function () { return domutils_2.getFeed; } });
10953
- var parseFeedDefaultOptions = { xmlMode: true };
11576
+ const parseFeedDefaultOptions = { xmlMode: true };
10954
11577
  /**
10955
11578
  * Parse a feed.
10956
11579
  *
10957
11580
  * @param feed The feed that should be parsed, as a string.
10958
11581
  * @param options Optionally, options for parsing. When using this, you should set `xmlMode` to `true`.
10959
11582
  */
10960
- function parseFeed(feed, options) {
10961
- if (options === void 0) { options = parseFeedDefaultOptions; }
11583
+ function parseFeed(feed, options = parseFeedDefaultOptions) {
10962
11584
  return (0, domutils_1.getFeed)(parseDOM(feed, options));
10963
11585
  }
10964
- exports.parseFeed = parseFeed;
10965
11586
  exports.DomUtils = __importStar(lib$2);
10966
11587
 
10967
- } (lib$5));
11588
+ } (commonjs));
10968
11589
 
10969
11590
  var escapeStringRegexp$1 = string => {
10970
11591
  if (typeof string !== 'string') {
@@ -13695,7 +14316,15 @@ let MapGenerator$2 = class MapGenerator {
13695
14316
  }
13696
14317
  }
13697
14318
  } else if (this.css) {
13698
- this.css = this.css.replace(/\n*\/\*#[\S\s]*?\*\/$/gm, '');
14319
+ let startIndex;
14320
+ while ((startIndex = this.css.lastIndexOf('/*#')) !== -1) {
14321
+ let endIndex = this.css.indexOf('*/', startIndex + 3);
14322
+ if (endIndex === -1) break
14323
+ while (startIndex > 0 && this.css[startIndex - 1] === '\n') {
14324
+ startIndex--;
14325
+ }
14326
+ this.css = this.css.slice(0, startIndex) + this.css.slice(endIndex + 2);
14327
+ }
13699
14328
  }
13700
14329
  }
13701
14330
 
@@ -14428,7 +15057,7 @@ let Parser$2 = class Parser {
14428
15057
  node.source.end.offset++;
14429
15058
 
14430
15059
  let text = token[1].slice(2, -2);
14431
- if (/^\s*$/.test(text)) {
15060
+ if (!text.trim()) {
14432
15061
  node.text = '';
14433
15062
  node.raws.left = text;
14434
15063
  node.raws.right = '';
@@ -15607,10 +16236,9 @@ let NoWorkResult$1 = class NoWorkResult {
15607
16236
  this._css = css;
15608
16237
  this._opts = opts;
15609
16238
  this._map = undefined;
15610
- let root;
15611
16239
 
15612
16240
  let str = stringify$1;
15613
- this.result = new Result$1(this._processor, root, this._opts);
16241
+ this.result = new Result$1(this._processor, undefined, this._opts);
15614
16242
  this.result.css = css;
15615
16243
 
15616
16244
  let self = this;
@@ -15620,7 +16248,7 @@ let NoWorkResult$1 = class NoWorkResult {
15620
16248
  }
15621
16249
  });
15622
16250
 
15623
- let map = new MapGenerator(str, root, this._opts, css);
16251
+ let map = new MapGenerator(str, undefined, this._opts, css);
15624
16252
  if (map.isMap()) {
15625
16253
  let [generatedCSS, generatedMap] = map.generate();
15626
16254
  if (generatedCSS) {
@@ -15686,7 +16314,7 @@ let Root$1 = root;
15686
16314
 
15687
16315
  let Processor$1 = class Processor {
15688
16316
  constructor(plugins = []) {
15689
- this.version = '8.5.6';
16317
+ this.version = '8.5.8';
15690
16318
  this.plugins = this.normalize(plugins);
15691
16319
  }
15692
16320
 
@@ -15845,7 +16473,7 @@ LazyResult.registerPostcss(postcss);
15845
16473
  var postcss_1 = postcss;
15846
16474
  postcss.default = postcss;
15847
16475
 
15848
- const htmlparser = lib$5;
16476
+ const htmlparser = commonjs;
15849
16477
  const escapeStringRegexp = escapeStringRegexp$1;
15850
16478
  const { isPlainObject } = isPlainObject$2;
15851
16479
  const deepmerge = cjs;
@@ -16413,6 +17041,11 @@ function sanitizeHtml(html, options, _recursing) {
16413
17041
  // your concern, don't allow them. The same is essentially true for style tags
16414
17042
  // which have their own collection of XSS vectors.
16415
17043
  result += text;
17044
+ } else if ((options.disallowedTagsMode === 'discard' || options.disallowedTagsMode === 'completelyDiscard') && (nonTextTagsArray.indexOf(tag) !== -1)) {
17045
+ // htmlparser2 does not decode entities inside raw text elements like
17046
+ // textarea and option. The text is already properly encoded, so pass
17047
+ // it through without additional escaping to avoid double-encoding.
17048
+ result += text;
16416
17049
  } else if (!addedText) {
16417
17050
  const escaped = escapeHtml(text, false);
16418
17051
  if (options.textFilter) {
@@ -16518,7 +17151,8 @@ function sanitizeHtml(html, options, _recursing) {
16518
17151
 
16519
17152
  if (options.disallowedTagsMode === 'escape' || options.disallowedTagsMode === 'recursiveEscape') {
16520
17153
  const lastParsedIndex = parser.endIndex;
16521
- if (lastParsedIndex != null && lastParsedIndex >= 0 && lastParsedIndex < html.length) {
17154
+ if (lastParsedIndex != null && lastParsedIndex >= 0 &&
17155
+ lastParsedIndex < html.length) {
16522
17156
  const unparsed = html.substring(lastParsedIndex);
16523
17157
  result += escapeHtml(unparsed);
16524
17158
  } else if ((lastParsedIndex == null || lastParsedIndex < 0) && html.length > 0 && result === '') {
@@ -18162,9 +18796,7 @@ function HtmlView({
18162
18796
  },
18163
18797
  ...styleProps.sx
18164
18798
  },
18165
- children: Array.isArray(components) ? components.map((child, idx) => /*#__PURE__*/React.isValidElement(child) && child.key == null ? /*#__PURE__*/React.cloneElement(child, {
18166
- key: `html-child-${idx}`
18167
- }) : child) : components
18799
+ children: components
18168
18800
  });
18169
18801
  } catch (error) {
18170
18802
  console.error('Error transforming HTML content:', error);
@@ -18999,103 +19631,6 @@ function registerSerializableComponents() {
18999
19631
  */
19000
19632
  registerSerializableComponents();
19001
19633
 
19002
- /**
19003
- * HeroSlideshow Component
19004
- *
19005
- * A slideshow built on top of HeroBlock that cycles through multiple slides
19006
- * with auto-rotation, fade transitions, and progress dot navigation.
19007
- *
19008
- * Usage (props-driven, e.g. qwickdocs):
19009
- * <HeroSlideshow slides={[{ title: 'Slide 1', ... }, ...]} />
19010
- *
19011
- * Usage (CMS-driven, e.g. work-macha):
19012
- * const slideshow = await payload.findByID({ collection: 'hero-slideshows', id });
19013
- * <HeroSlideshow slides={slideshow.slides} autoPlayInterval={slideshow.autoPlayInterval} />
19014
- *
19015
- * Copyright (c) 2025 QwickApps.com. All rights reserved.
19016
- */
19017
- const TRANSITION_DURATION = 300; // ms
19018
- /**
19019
- * HeroSlideshow - Cycles through HeroBlock slides with fade transitions
19020
- */
19021
- function HeroSlideshow({
19022
- slides,
19023
- autoPlayInterval = 5000,
19024
- showDots = true,
19025
- blockHeight = 'large',
19026
- textAlign = 'center'
19027
- }) {
19028
- const [currentIndex, setCurrentIndex] = React.useState(0);
19029
- const [isVisible, setIsVisible] = React.useState(true);
19030
- const goToSlide = React.useCallback(index => {
19031
- if (index === currentIndex) return;
19032
- setIsVisible(false);
19033
- setTimeout(() => {
19034
- setCurrentIndex(index);
19035
- setIsVisible(true);
19036
- }, TRANSITION_DURATION);
19037
- }, [currentIndex]);
19038
- React.useEffect(() => {
19039
- if (slides.length <= 1 || autoPlayInterval <= 0) return;
19040
- const timer = setTimeout(() => {
19041
- goToSlide((currentIndex + 1) % slides.length);
19042
- }, autoPlayInterval);
19043
- return () => clearTimeout(timer);
19044
- }, [currentIndex, slides.length, autoPlayInterval, goToSlide]);
19045
- if (!slides.length) return null;
19046
- const slide = slides[currentIndex];
19047
- return jsxRuntime.jsxs(material.Box, {
19048
- sx: {
19049
- position: 'relative',
19050
- overflow: 'hidden'
19051
- },
19052
- children: [jsxRuntime.jsx(material.Box, {
19053
- sx: {
19054
- opacity: isVisible ? 1 : 0,
19055
- transition: `opacity ${TRANSITION_DURATION}ms ease-in-out`
19056
- },
19057
- children: jsxRuntime.jsx(HeroBlock, {
19058
- title: slide.title,
19059
- subtitle: slide.subtitle,
19060
- backgroundImage: slide.backgroundImage,
19061
- backgroundGradient: slide.backgroundGradient,
19062
- backgroundColor: slide.backgroundColor,
19063
- actions: slide.actions,
19064
- overlayOpacity: slide.overlayOpacity,
19065
- blockHeight: blockHeight,
19066
- textAlign: textAlign
19067
- })
19068
- }), showDots && slides.length > 1 && jsxRuntime.jsx(material.Box, {
19069
- sx: {
19070
- position: 'absolute',
19071
- bottom: 20,
19072
- left: '50%',
19073
- transform: 'translateX(-50%)',
19074
- display: 'flex',
19075
- gap: 1,
19076
- zIndex: 10
19077
- },
19078
- children: slides.map((_, index) => jsxRuntime.jsx(material.Box, {
19079
- role: "button",
19080
- "aria-label": `Go to slide ${index + 1}`,
19081
- onClick: () => goToSlide(index),
19082
- sx: {
19083
- width: index === currentIndex ? 28 : 8,
19084
- height: 8,
19085
- borderRadius: 4,
19086
- backgroundColor: 'rgba(255, 255, 255, 0.9)',
19087
- opacity: index === currentIndex ? 1 : 0.45,
19088
- cursor: 'pointer',
19089
- transition: 'all 0.3s ease',
19090
- '&:hover': {
19091
- opacity: 0.8
19092
- }
19093
- }
19094
- }, index))
19095
- })]
19096
- });
19097
- }
19098
-
19099
19634
  // View component - handles the actual rendering
19100
19635
  function ArticleView({
19101
19636
  html = '',
@@ -23366,11 +23901,9 @@ function FormFieldView({
23366
23901
  multiline = false,
23367
23902
  rows,
23368
23903
  placeholder,
23369
- name,
23370
23904
  startAdornment,
23371
23905
  endAdornment,
23372
23906
  inputProps,
23373
- error,
23374
23907
  // Exclude ViewProps that conflict with MUI FormControl types
23375
23908
  margin: _margin,
23376
23909
  marginTop: _marginTop,
@@ -23425,7 +23958,6 @@ function FormFieldView({
23425
23958
  };
23426
23959
  return jsxRuntime.jsxs(material.FormControl, {
23427
23960
  fullWidth: fullWidth,
23428
- error: error,
23429
23961
  ...restProps,
23430
23962
  children: [jsxRuntime.jsx(material.InputLabel, {
23431
23963
  htmlFor: fieldId,
@@ -23434,7 +23966,6 @@ function FormFieldView({
23434
23966
  children: label
23435
23967
  }), jsxRuntime.jsx(material.Input, {
23436
23968
  id: fieldId,
23437
- name: name,
23438
23969
  type: type,
23439
23970
  value: value,
23440
23971
  onChange: handleChange,
@@ -23484,8 +24015,6 @@ function FormSelectView({
23484
24015
  fullWidth = true,
23485
24016
  size = 'small',
23486
24017
  placeholder,
23487
- name,
23488
- error,
23489
24018
  // Exclude ViewProps that conflict with MUI FormControl types
23490
24019
  margin: _margin,
23491
24020
  marginTop: _marginTop,
@@ -23529,14 +24058,12 @@ function FormSelectView({
23529
24058
  return jsxRuntime.jsxs(material.FormControl, {
23530
24059
  fullWidth: fullWidth,
23531
24060
  size: size,
23532
- error: error,
23533
24061
  ...restProps,
23534
24062
  children: [label && jsxRuntime.jsx(material.InputLabel, {
23535
24063
  sx: labelStyles,
23536
24064
  shrink: true,
23537
24065
  children: label
23538
24066
  }), jsxRuntime.jsxs(material.Select, {
23539
- name: name,
23540
24067
  value: value,
23541
24068
  onChange: handleChange,
23542
24069
  disabled: disabled,
@@ -31511,12 +32038,6 @@ __decorate([schema.Field(), schema.Editor({
31511
32038
  description: 'Placeholder text when no value is selected',
31512
32039
  placeholder: 'Select an option...'
31513
32040
  }), classValidator.IsOptional(), classValidator.IsString(), __metadata("design:type", String)], exports.FormSelectModel.prototype, "placeholder", void 0);
31514
- __decorate([schema.Field(), schema.Editor({
31515
- field_type: schema.FieldType.TEXT,
31516
- label: 'Name',
31517
- description: 'Name attribute for the select (for forms and accessibility)',
31518
- placeholder: 'Enter name...'
31519
- }), classValidator.IsOptional(), classValidator.IsString(), __metadata("design:type", String)], exports.FormSelectModel.prototype, "name", void 0);
31520
32041
  exports.FormSelectModel = __decorate([schema.Schema('FormSelect', '1.0.0')], exports.FormSelectModel);
31521
32042
 
31522
32043
  /**
@@ -31603,12 +32124,6 @@ __decorate([schema.Field(), schema.Editor({
31603
32124
  description: 'Placeholder text',
31604
32125
  placeholder: 'Enter text...'
31605
32126
  }), classValidator.IsOptional(), classValidator.IsString(), __metadata("design:type", String)], exports.FormFieldModel.prototype, "placeholder", void 0);
31606
- __decorate([schema.Field(), schema.Editor({
31607
- field_type: schema.FieldType.TEXT,
31608
- label: 'Name',
31609
- description: 'Name attribute for the input (for forms and accessibility)',
31610
- placeholder: 'Enter name...'
31611
- }), classValidator.IsOptional(), classValidator.IsString(), __metadata("design:type", String)], exports.FormFieldModel.prototype, "name", void 0);
31612
32127
  exports.FormFieldModel = __decorate([schema.Schema('FormField', '1.0.0')], exports.FormFieldModel);
31613
32128
 
31614
32129
  /**
@@ -33908,7 +34423,6 @@ exports.GalleryImageModel = GalleryImageModel;
33908
34423
  exports.GridCell = GridCell;
33909
34424
  exports.GridLayout = GridLayout;
33910
34425
  exports.HeroBlock = HeroBlock;
33911
- exports.HeroSlideshow = HeroSlideshow;
33912
34426
  exports.Html = Html;
33913
34427
  exports.HtmlInputField = HtmlInputField;
33914
34428
  exports.Image = Image;