@depup/markdown-it 15.0.2-depup.85 → 15.0.3-depup.0

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.
@@ -1,4 +1,4 @@
1
- /*! markdown-it 15.0.2 https://github.com/markdown-it/markdown-it @license MIT */
1
+ /*! markdown-it 15.0.3 https://github.com/markdown-it/markdown-it @license MIT */
2
2
  //#region \0rolldown/runtime.js
3
3
  var __create = Object.create;
4
4
  var __defProp = Object.defineProperty;
@@ -38,80 +38,263 @@ let linkify_it = require("linkify-it");
38
38
  let punycode_js = require("punycode.js");
39
39
  punycode_js = __toESM(punycode_js, 1);
40
40
  //#region node_modules/entities/dist/decode-codepoint.js
41
- var decodeMap = /* @__PURE__ */ new Map([
42
- [0, 65533],
43
- [128, 8364],
44
- [130, 8218],
45
- [131, 402],
46
- [132, 8222],
47
- [133, 8230],
48
- [134, 8224],
49
- [135, 8225],
50
- [136, 710],
51
- [137, 8240],
52
- [138, 352],
53
- [139, 8249],
54
- [140, 338],
55
- [142, 381],
56
- [145, 8216],
57
- [146, 8217],
58
- [147, 8220],
59
- [148, 8221],
60
- [149, 8226],
61
- [150, 8211],
62
- [151, 8212],
63
- [152, 732],
64
- [153, 8482],
65
- [154, 353],
66
- [155, 8250],
67
- [156, 339],
68
- [158, 382],
69
- [159, 376]
70
- ]);
71
41
  /**
72
- * Replace the given code point with a replacement character if it is a
73
- * surrogate or is outside the valid range. Otherwise return the code
74
- * point unchanged.
42
+ * C1 Unicode control character reference replacements (code points 128–159).
43
+ * Index i gives the replacement for code point 128+i; 0 means "no replacement".
44
+ */
45
+ var c1 = [
46
+ 8364,
47
+ 0,
48
+ 8218,
49
+ 402,
50
+ 8222,
51
+ 8230,
52
+ 8224,
53
+ 8225,
54
+ 710,
55
+ 8240,
56
+ 352,
57
+ 8249,
58
+ 338,
59
+ 0,
60
+ 381,
61
+ 0,
62
+ 0,
63
+ 8216,
64
+ 8217,
65
+ 8220,
66
+ 8221,
67
+ 8226,
68
+ 8211,
69
+ 8212,
70
+ 732,
71
+ 8482,
72
+ 353,
73
+ 8250,
74
+ 339,
75
+ 0,
76
+ 382,
77
+ 376
78
+ ];
79
+ /**
80
+ * True for NUL, UTF-16 surrogates, and values past U+10FFFF.
81
+ * @param codePoint Unicode code point to check.
82
+ */
83
+ function isInvalidCodePoint(codePoint) {
84
+ return codePoint === 0 || codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111;
85
+ }
86
+ /**
87
+ * Replace the given code point with U+FFFD if it is NUL (0), a surrogate, or
88
+ * outside the valid Unicode range. Code points in the C1 controls range
89
+ * (128–159) are remapped to their Windows-1252 equivalents, following the
90
+ * HTML spec. All other code points are returned unchanged.
75
91
  * @param codePoint Unicode code point to convert.
76
92
  */
77
93
  function replaceCodePoint(codePoint) {
78
- var _decodeMap$get;
79
- if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) return 65533;
80
- return (_decodeMap$get = decodeMap.get(codePoint)) !== null && _decodeMap$get !== void 0 ? _decodeMap$get : codePoint;
94
+ if (isInvalidCodePoint(codePoint)) return 65533;
95
+ if (codePoint >= 128 && codePoint <= 159) return c1[codePoint - 128] || codePoint;
96
+ return codePoint;
97
+ }
98
+ /**
99
+ * Convert the code point of a decoded numeric entity to a string, replacing
100
+ * invalid values.
101
+ *
102
+ * Fast path for plain BMP code points: [1..0x7F] and [0xA0..0xD7FF] pass
103
+ * `replaceCodePoint` unchanged (no NUL, C1 remap, surrogate, or out-of-range
104
+ * handling) and fit a single charCode. 0xd760 = 0xD800 (the first surrogate)
105
+ * - 0xA0.
106
+ * @param codePoint Unicode code point to convert.
107
+ */
108
+ function codePointToString(codePoint) {
109
+ return codePoint - 1 >>> 0 < 127 || codePoint - 160 >>> 0 < 55136 ? String.fromCharCode(codePoint) : String.fromCodePoint(replaceCodePoint(codePoint));
81
110
  }
82
111
  //#endregion
83
112
  //#region node_modules/entities/dist/internal/decode-shared.js
113
+ var BASE91_INVERSE = /* #__PURE__ */ (() => {
114
+ const table = /* @__PURE__ */ new Uint8Array(127);
115
+ let code = 0;
116
+ for (let char = 33; char <= 126; char++) if (char !== 34 && char !== 36 && char !== 92) table[char] = code++;
117
+ return table;
118
+ })();
84
119
  /**
85
- * Shared base64 decode helper for generated decode data.
86
- * Assumes global atob is available.
87
- * @param input Input string to encode or decode.
120
+ * Decode a dictionary-encoded trie string back into its Uint16Array.
121
+ *
122
+ * Stream layout (consumed in this order):
123
+ * 1. dict1 atoms — `dict1AtomCount` uint16 values, delta+RLE encoded.
124
+ * 2. dict2 atoms — `atomCount - dict1AtomCount` values, delta+RLE.
125
+ * 3. dict2 ngrams — `ngramCount - (dictSize - dict1AtomCount)` entries,
126
+ * each a pair of slot codes that resolve to earlier slots.
127
+ * 4. dict1 ngrams — `dictSize - dict1AtomCount` entries, same shape.
128
+ * 5. data — slot codes, each expanding to one or more uint16 values.
129
+ *
130
+ * Codes use a 91-char base (printable ASCII minus `"`, `$`, `\`):
131
+ * - char1 < dictSize → 1-char code, slot = char1
132
+ * - char1 ≥ dictSize → 2-char code, slot = dictSize + (char1 - dictSize)*91 + char2
133
+ *
134
+ * Slot index → token kind:
135
+ * [0, A) dict1 atoms (1-char codes)
136
+ * [A, dictSize) dict1 ngrams (1-char codes)
137
+ * [dictSize, dictSize+D) dict2 atoms (2-char codes)
138
+ * [dictSize+D, end) dict2 ngrams (2-char codes)
139
+ *
140
+ * Both atom dicts decode before any ngram, and dict2 ngrams decode before
141
+ * dict1 ngrams. So every ngram entry references slots whose contents are
142
+ * already filled — no forward references to handle.
143
+ *
144
+ * This runs on library import. Flat typed arrays store each slot as either
145
+ * a plain value (`single`, covering every atom) or a range in a shared
146
+ * `pool` (ngrams).
147
+ * @param input Packed trie string.
148
+ * @param resultLength Expected number of uint16 values in the output.
149
+ * @param atomCount Total number of distinct uint16 values in the trie.
150
+ * @param dict1AtomCount Atoms in the 1-char range (`A` above).
151
+ * @param ngramCount Total number of ngram entries (dict1 + dict2).
152
+ * @param dictSize Number of 1-char code slots; the rest of `BASE - dictSize`
153
+ * first-byte values are 2-char codes.
88
154
  */
89
- function decodeBase64(input) {
90
- const binary = atob(input);
91
- const evenLength = binary.length & -2;
92
- const out = new Uint16Array(evenLength / 2);
93
- for (let index = 0, outIndex = 0; index < evenLength; index += 2) {
94
- const lo = binary.charCodeAt(index);
95
- const hi = binary.charCodeAt(index + 1);
96
- out[outIndex++] = lo | hi << 8;
155
+ function decodeTrieDict(input, resultLength, atomCount, dict1AtomCount, ngramCount, dictSize) {
156
+ const base = 91;
157
+ const inputLength = input.length;
158
+ const twoCharBias = dictSize * 90;
159
+ let pos = 0;
160
+ /** Read one slot code at `pos` and return its slot index, advancing pos. */
161
+ const readSlotCode = () => {
162
+ const c1 = BASE91_INVERSE[input.charCodeAt(pos++)];
163
+ return c1 < dictSize ? c1 : c1 * base - twoCharBias + BASE91_INVERSE[input.charCodeAt(pos++)];
164
+ };
165
+ const dict2AtomCount = atomCount - dict1AtomCount;
166
+ const slotCount = atomCount + ngramCount;
167
+ const single = new Int32Array(slotCount);
168
+ single.fill(-1, dict1AtomCount, dictSize);
169
+ single.fill(-1, dictSize + dict2AtomCount, slotCount);
170
+ const start = new Int32Array(slotCount);
171
+ const length = new Int32Array(slotCount);
172
+ /**
173
+ * Decode `count` ascending uint16 values from a delta+RLE stream into
174
+ * `single[off..off+count)`.
175
+ *
176
+ * code < 89 → delta = code
177
+ * code == 89 → run-length: next char encodes runLength-2; emit `runLength` consecutive +1 values
178
+ * code == 90, next < 90 → escape: delta = 89 + next * BASE + after-next
179
+ * code == 90, next == 90 → double-escape: extra char for very large deltas
180
+ * @param count
181
+ * @param off
182
+ */
183
+ function decodeDelta(count, off) {
184
+ let previous = 0;
185
+ let slot = off;
186
+ const end = off + count;
187
+ while (slot < end) {
188
+ const code = BASE91_INVERSE[input.charCodeAt(pos++)];
189
+ if (code < 89) {
190
+ previous += code;
191
+ single[slot++] = previous;
192
+ } else if (code === 89) {
193
+ let runLength = BASE91_INVERSE[input.charCodeAt(pos++)] + 2;
194
+ while (runLength--) single[slot++] = ++previous;
195
+ } else {
196
+ const next = BASE91_INVERSE[input.charCodeAt(pos++)];
197
+ previous += 89 + (next < 90 ? next * base + BASE91_INVERSE[input.charCodeAt(pos++)] : BASE91_INVERSE[input.charCodeAt(pos++)] * 8281 + BASE91_INVERSE[input.charCodeAt(pos++)] * base + BASE91_INVERSE[input.charCodeAt(pos++)]);
198
+ single[slot++] = previous;
199
+ }
200
+ }
201
+ }
202
+ decodeDelta(dict1AtomCount, 0);
203
+ decodeDelta(dict2AtomCount, dictSize);
204
+ const references = new Int32Array(ngramCount * 2);
205
+ let poolSize = 0;
206
+ let ngramIndex = 0;
207
+ /**
208
+ * Read `count` ngram entries (each = 2 slot-code references) for the slots
209
+ * starting at `startSlot`, recording references and assigning pool ranges.
210
+ * @param count
211
+ * @param startSlot
212
+ */
213
+ function readNgramReferences(count, startSlot) {
214
+ for (let index = 0; index < count; index++) {
215
+ const slot = startSlot + index;
216
+ const a = readSlotCode();
217
+ const b = readSlotCode();
218
+ references[ngramIndex * 2] = a;
219
+ references[ngramIndex * 2 + 1] = b;
220
+ ngramIndex += 1;
221
+ start[slot] = poolSize;
222
+ const entryLength = (single[a] < 0 ? length[a] : 1) + (single[b] < 0 ? length[b] : 1);
223
+ length[slot] = entryLength;
224
+ poolSize += entryLength;
225
+ }
226
+ }
227
+ readNgramReferences(ngramCount - dictSize + dict1AtomCount, dictSize + dict2AtomCount);
228
+ readNgramReferences(dictSize - dict1AtomCount, dict1AtomCount);
229
+ const pool = new Uint16Array(poolSize);
230
+ let write = 0;
231
+ for (let index = 0; index < ngramIndex; index++) for (let half = 0; half < 2; half++) {
232
+ const source = references[index * 2 + half];
233
+ const value = single[source];
234
+ if (value < 0) {
235
+ let read = start[source];
236
+ const readEnd = read + length[source];
237
+ while (read < readEnd) pool[write++] = pool[read++];
238
+ } else pool[write++] = value;
239
+ }
240
+ const out = new Uint16Array(resultLength);
241
+ let outIndex = 0;
242
+ while (pos < inputLength) {
243
+ let slot = BASE91_INVERSE[input.charCodeAt(pos++)];
244
+ if (slot >= dictSize) slot = slot * base - twoCharBias + BASE91_INVERSE[input.charCodeAt(pos++)];
245
+ const value = single[slot];
246
+ if (value < 0) {
247
+ let read = start[slot];
248
+ const readEnd = read + length[slot];
249
+ while (read < readEnd) out[outIndex++] = pool[read++];
250
+ } else out[outIndex++] = value;
97
251
  }
98
252
  return out;
99
253
  }
100
254
  //#endregion
101
255
  //#region node_modules/entities/dist/generated/decode-data-html.js
102
256
  /** Packed HTML decode trie data. */
103
- var htmlDecodeTree = /* #__PURE__ */ 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");
257
+ var htmlDecodeTree = /* #__PURE__ */ decodeTrieDict("!}.&u%}'&}*'~!6*)%&,~!J~!J~%L~y<~!R,~~%Lu~~#GD~~#|)1#%}^%}2%+#.##%##%}&%##%'#%##&%#%#'%#&#%#&#'#%%#&#%##%#)%''%&%#%#'%#%%#%%}%%%#%#&(23#%%#&-%0%('1#(##%#'##+%'*.:1}#%#6-+(%'%%#%%%}#L'2351&('%}&/N'(0(/*-%(%%}#'+&T%7.2}#&%&#%#36/5##%&%%#&#%%#))2%%##%&&'0~!#*+&'%1~!%).'3q?&%'1~!.##%6(~!+%%%(Gw'rT~!E#<nA%#jZ~!H%(~!42##~!*31&~!G%U~#)5~#`3~!J~!Z~%]~%Y~%C~!q~!u~#kz~%#~!6'~!D~!U~!?~#T~!c%~!G#'~%7|~!G~!J~!G&~#pb~(Df}#%}*&}#%##%##%##&#-}&'#'&%#.++}%mI,#,@&(}*%}*'%&##&#%##%}&0}#.},U},%}+%}&%}#%##&}B%(}(%}+%)})%##%#&}&%##%&}<%}>%#%&}*%}(%}9%}/%})%}*%}*%}?&}&%}3%}&*#%})%#%#)}#&#-#+*%E%%'%'#%}#*V##&##I}#&&##%&%#&&Qf%%))w/0+&%#(#.%-''''++++7}>%4'',##1,#%#&%##&#'##&#*#9)%&%}#*}%,#+P(%A&%#'&##wSD',9E00#y#@}(+}&%&>~!#~!X}#*}(&&}(&}(,%}%&#+&}#&}I%#%}%)#(},'%#*}4%%#%}(''}#/##(##),%-##%%)#&}(.}&%#&}%%}*&#%},&&}&%}#%*'#%})%}D&}&%}-&}6&#&}-,%}#%})-(~+`~,=?~I9'9%~!,#%})%})%}@%}?%}(~!?~#<~#pP~#BG~#=1#%K+~#?#~%;)~#A~#mF1~#A'~'X%'~#lR~#N~'N~#r~#m#-~#i'?%#'%~#B%##%,%#~#_%#0%~#]732~,w~2+#:&#%&'0%&>%}#>##F+)#%&&#(+_}4&}-%}(&}@&}O7Fdf0@+/v4}&WU##&/0#&'('B#%}.%}'+#%}#%%&#&%#%##+#&#)#6#'#.},%}c%},%#%##%&#&%#&~#>'*-.%##%##%}#%%}%'~#)D1}#%*&~#_%%'(~#S2%'.}#~#=##*'*-%}&'%'##&&~'E%.#&~#M4}%%##&'%#~#O1##%&#'+~#<B%##%%'%+~#;#@%}#&%#&&%#(~#H1}'%'##&&~#?A}&'~#D#%32}'&&&&~#[}'(#%}'~#;C})&}%%#%~#=&%,3}%'(#%%~#^'#&&)#%'~#Y%-~#d-%'~#^%%&#&&&}#~#b~2t*&'~&(~&@~0%~e~3}%*''0})&}+~!9##-}#%-hD*)1fC#%/&/fB#40~!+#)*4~!+~!K'&:~!/*7~!.#~!H~!L':~%x&~!H#~!*~%1~!I#~!+A~#p'~!F~~#-#~,,(~.Z~!V~%;'B'mq-W~!N~%I%#&&#&}#%},%%}'%}+X#%}#&}(%}'%}<%}#%}%%'}'%}:~![)9@~%>~#UA%-%##&~!C%~!-.9:~!1~!-^2/:a~!y,D*J#-5)/4~%23,~#G~!L1~!0X3`~!2+~!!0-~&E~!W~!o,>Y&]~%cZx_&~#O*9#A#'#+I'%#)~!0B*-5A+-((F&*M#)(-7-5+'-3a5Vi~!Y~!?+[)%3),ERHm~!+:D,VG.+)?fB%%*(%)'(#&80%1'8`K8?`+'Z#&O&'H5#*9)A%%5&3))0%39+.*7#()&&*=4@**L)<'_&*+..;(#*+)./&0#3)%')-8(4ixD(&.}%,('aI:,)%,k2231T)I'#/-W7,/'Q#.'Y24+h')37</31&83##&0#),H(?'&?/1##%#&&#%''-%&&&#(&''&#.-'%#%%(,')*'&#&#'##%(%(#%('#&##%%%%('%#%#%%#%#&%##h>w+v<ayvyvcg.uuhKr}g/v|g>u9i[~>g5uI~=RvdwEg;v/g;uk!!TTSx]@RT!U!#!@VBRUU!'UTe-d0c`e&gSdicedFcrdTaqb.kYcAohdYd@a3e+d}dMdtd.aJ#bqcK`dle/e.e'dwdPdodddjbEb}ogd^ofdpduc6j?l%d{drdqc)d7bacOdQ%T#Y)X.sR[yH>6Vyv3[xwLu>vo'!*.[yBacahoj>6Rew3[xqdZa#!a&#^(X-[yG>6Vyu3[xvg3sEr|g.u/Ri9db0T#^(Xa)!-[y;>6Vylg4wKs{JwNZt3@3r=c4Z([xlg;wKt!cpq's@v7A'*a(a+!-a#[y<3Dt?3Dt'>6Vym3[xmg9rxsNJwLZt4~?r?db1T#`-!(Xa,!0[yS>6Vz%NuQs.g4wKtnJwNZtS@3r>c4Z([y%g;wKtrdga8!a(!#&T*Y-Xa#!a0<or[yc3Dtq>6Vz43[y3JwNZtf@3s!Ju}!%Dti:pm3c_%X#tjB5pkd6q!r]u?voC'*-a.a2!0a&a+[yI3DtI3Ds~3DtH>6Vyw3[xx;:s#~<5pKJwNZtE@3r~d`a)!a2T#a.(!+U.X1[yT3Dt`3Dtv>6Vz&3[y&g9rxwzcxstPu.<rAJwLZtT~?r@dZa%!a.&^*Za(/Reu[ya>6Vz23[y1g3sEr}wkg{NuQRg{ci(U#5@b`~,cg#U(2WnH5wugcRh7dX#T(Y,a'Ta!!a,[yZ<]mj>6Vz,3[y+Pv#5ReZKu+=,%!H}7ABwkaS?Rh:BcW(X#<]mrj:ubv/ARekdg%!(!a.*Ta(Y.X1!#sP>Rl*Dt6[y>>6Vyo3Wf*jOvuumvuRgRJuq*!:9<B@bX~3jVv&v@s@5Re[d/rQt{uAvo&a&a*)a2!,0Wf!3Dt0=Bs'>6Re}3[xy~<5s%JwJZt1~Gs)c;&!#2sJkNuXvzq7rxu,Re8dka4!a8(aEZ+a@Y.X1Xa)[yd=Bs(3DtP>6Vz53[y4cX#X&Re:avRe9~<5s&JwJZtQ~Gs*i^rzvdRg+Jv{%!2sbB@bX}kdga,!Za?&^*T1/!a'Dt+[y6>6Vyf3Wf%g/u;s4hGu6?Rh-JvZ,!c%#&RoX54Rivj7uyvf8RgTKvZB%*!2sGh<vu5Rgq<=C::9bb~#dZ#T&Ta6Y.X*Dt>[y93Wf)coZ(T,6VyifluvRgC@95@B@bX~/hFu34cC#T,k/unq8w8Q5RkUklwQuzunq8w8Q5Rk8d/rJu?v8w9)-&!a0a;a&aIWejg3sEr/h1s<DtDJvyZqY5aws3Jvy!&Wei~Hr1:au5@Bag>23E~5c:Z&bX};kKv?w&unuVu5Rjc;>bs)#~@:Rh.=ay<a]C;b`}Vd6s/t{uAvoaxa()!a,a7%-a#a2Dt,[yF2Wo[>6Vyt3[xuNuPRi&NuPwpi#RoWh?vf8Ri%Jv]!%Ri:KvxD!.'2WeAjZu`q9rxu,Re7woeAg-unLq(qA_/*2Wg_g3u5q^9:4E}/jTrxrzv=Wkkd~0UX#^^Xa-a1a5T&a=U1a'*aEa]!a*aPaA-adok[y54Rn>;:p3~Dp5g9rpsFNvZqjg3uJp4~<5p0Pw;5qlJwNZt*@3p1Pw:5p/Ou!5p2JvG'!6Vye=<qnJvh_[xhg3v,Rh3kOwOw-sDuev/Re^dha[a%!%!a+#Ta7)-5TaCaO!aka!a)sf[yb2>Rl!9ARiq5E}Qg=ucRkBE|oJrJ_@Wk~@Wk{JrJ_@Wk|@WkyJrJ_@Wk}@WkzJvO_[y2g-vMRmiKuYC!)&>Ri;>Ri<@3RkNc](X#@9Rk=g5vuRmhKvDB!+'=]meg3u4Rmgd)#Y'Vz3CARmfd`a+!%T'!+#Ta1Ta6TaM-sTDt9[yA9sYd'%Y#s[[xpj:ueunaXRgEjRq,v-vuqdd2'`#6Rev<32@5>:2<E}5xIo9a*X#Y(;5RePJvD_g>vyRgNj8w)v8<wggs:RgXiZt|vjx,hSq3ah!-(~@:Ro/Ou!5RhWj^v(pyw8unRhUdx-UY#^Ua.a3a70!)%UX1TaDa)'omRiRRhE[y:3Dsz=Br,>6Vyj3[xkg6ruwjcqsrPw;5r*Ku]D'Zt-@3r(~?r.i[vwv]dU1a--U#`a4(g/vsRhPOu!5RhLj:rmu9Wo!~@:wdh@g/vsRiTjXuvvNr}:RhBj^v(pyw8unRn]dz1UYa'a+^Y(!aETZalaRY.Ta?a4[yDJw1!#qLsW>6Vyrfzq-pLflpwRe|Js>%!Dt@3Dt&Jvy_[xs~HrnjMuwpsw'RecKu+D#'!t<~Grl~?rjg5u-x,gwp{ah!-(~@:Rg~Ou!5Rh'jXuvvNr}:Rh#cW#X/c;&!#2sLi[v7u7RgpJv)(!iLrxu,Re6j7v@s@5Se[e7d`aW!Za(a`T.a#!a3!&aDa-!9)Dt_=6s+3[x~~DR|h~DS6avhGun5RkZj3w)v-]mkKunB!&*]kb97R|i<ARk<c:Z(6Vy}Juh'!wziMRoS:F|vkLuauJv5vtvQRh1d='T+Y#VyO~DR|jcF#T'7R|g97R|kJv3'!ay<Rj,Jvh&!:ReXcsa6*a+#a#_aIRf9aLRf?c,Z&Rf5Rf7c.Z&Rf;Rf>cQ#%T'p-Rf8Rf=ct#%'(*!,p,Rf4p+Rf6Rf:Rf<d~'Ua%U*^UYa(!a,-!#a4YaTalaEX0a8a<Weo3Dt/3Dsx=Br93Wen~Dr;~<5p<JwNZt2@3p=Pw:5p;Ou!5r3c7&!#:p>3Ds}KvGB)_6Vyk2sM=<r7x'eovA(!hFu1ARf}cV#X&@r5j6rvwQa^Rf3c=Za'wkghJv__g;unRggA53B9=b^}%j6uduo5Jq;!(hIv%2Re`Ou4ARe_e%a#^^^Xa&!a*a2!&a6YaP!*ad!#a:aE/5Rn?[y@>6Vyp;:pE~DrY~<5pBJwNZt8@3pCh=rt3rWPw:5pAJup_[xoNuPpF9c!#'45pD5ARn)d8#X'X*3@rU72s]h>v<<sSjJpqvewOJq/(!hNw'5ReBk0s2u3w/w'5ReE5@Jq.!a+JQ!&WeU23d(#Y&RjG5]jBk!u7w&u0udARjEe#+^^^Ub#!a2/a`Z(agT1!a-a;|@TaG!aS[yV=Re~fow'RguNuPRe?bz#'>RoUWeL>:Cbb|?JwPZtVg6ruRmzJvD'!6Vz(g/vmRh~Jvy_[y(g9voRgyx*cy(#2>Ri2B9b]~9kIw9u7rluJu3Rg]dI#a%UY'@=p%CAx.gQZ&RhwwygtRm{x5g_Z'+ABqR9Woa=Bp&dV#^*Xa'!&@o{g4v]Rk;Jv{!%Rk[wkkiA5RkiwwfUB=x,fUuqC&*!>RfTg8v0RfV~ARfSd;rJsAuAv9wR'ae+/aO!a@aza/a#[yQ@Wg!2Wemg3sEr0JvB_g>uvReWg2v+Re=KupB_+[y!2AbY~-~Hr2AJwD!(h<~El>h<~El?Kun@+_:9b`}Kg-v/Ri3g;vtwyk_9]k_d=&T#*U.6qh@Ab`|K9:H|CJv[!&3Dtex'fDwC%!Rf[9WlMd[(^X,!a%Z06Vz!@WgBg=v~Rgvg,QRe@awd,#Y+jTv|Q~EfWj]uNr|~FRfXdy#Y&^Ua%!aO.!(a)Ua;=!a@aKap!a-,a!Ta]a[rSa]p?[y82sK=Bq~;:p:~<5p8Pw:5p7d'#Y'Wf(;RnRi[u4w&RgJJvG'!6Vyh=<r#ijuuv/sIKuYD'ZtG@3p9~Gr&d2#`(g<vtRgFj`u5w&rqpxRf2CJuY!+:wfnTOu!5Rg}jNs1ucv&RfwJvA!&3@q|BDcC#T,k/unq8w8Q5RkTklwQuzunq8w8Q5Rk9dga#!a'!a=#a0!:+Tb*b@aO.a4!aba8aFJv^}?!VyR~Dr<g;u%Rn.~<5p[x'e`wNZtR@3p]Pw:5pZhNvjBp.woe_g5u-r4JwF!%DtO3:ooc7&!#:p^3DtpLuGw(!+%)Dtk6Vz#2sd=<r8d'#Y([y#<x3gJt`w@!)%}MRiowzikRij=]ilxAf3,U(#B2Rf#g0v-Rm[ck{`U#]giKv3>)!&6Ri154s,KuGB_%@r68r:dJ|t`#X(9<E|u2@H|rx3gJu?w'!+'1Nu7Reg4=H~+9<wxgY95Rm]xLggZ-`(X}U2:Ri4h<uOawRmsJv__5@bb{jbV~3dka#a'a]!,#a+U=a>b6a3b%!/aKa/)!arwve^VyJ;:pR~DpTg3uJpS~<5pOPw;5qmPw:5pNOu!5pQJvG'!6Vyx=<qoJvA!{~Jup!%@qk7Rn/KvyD!}''[xz;>wkh'?Rh,x8gyt`w5D!&),(SgyccRgztJ@3pPB5p#d'(Y#<]mmifubw&RgoJvE&!82s^JvF&!8Rf,ADb]~;x=h'rNu]vK!,%'*0RnORh)4Rh*AqQg-vaRnNg;wHwkh'ba~4cE#Ta*x3gctyw@'!+%RnFRnD<4Rn@hFvK5RnCxWg[#`&a0Ua()`1Rm75Rg[c]%X#qi8Rg^NvdRj>BwzgZauwji7Rm6A4wgg]d1#&(*,.0a#Rm;Rm<Rm=Rm>Rm?Rm@RmARmBe%#^^^Xaea?aC/b+(,!a+a#!a/!>a&Ta<aKbD!2wphBRnk[yPw}hE|.=Br-3Dtm>6Vy~g6urRf.x,hPrNav!%'RnqRo%Ro#Nu;q[Pw;5r+JwNZtM@3r)d'#Y'Weh;xChL#`&RnmRnoKu}>%(!Rne~Bs-;2wjcussJv+'!aYSO}6@B<5?ba~8LrNvj!.%*ROwungw~ng~:9;Ri^>wtnig;wHRnixDh@|(UZ.x1h@|)!#:2<H|*xHn]#-UX'3Ro)z=iT}6ARns=Bwsn_wpnaRncw]aR(#UXa&Ua*a/=]iPd'#Y&Ro'WnXf{QRm2hNvj]nZd`'T~&1`{|`#9b]{}c:'!#Wl{>@=be}]?cl{{U#:5Abb}Jds#^YaF!a*b4a#a3aPa>&Tb!bH!*a_!Eau?/a&RjY<]gj>6Vz*;:pe~DrZg,QRj1JwNZtX@wihspcJvZ&!VyX9WmOJu|!|N2WmHJvh&!]ht~Bpbcn&T(!#RmQ<s7Nu;padH#X'`+WmJ@>RmKCARhnKup=!)&Wf+:RhqNuPpf9c!#'45pd5AwghpARn(Ls@w!%,)!RmP@Wfe<E|IJva!&WmNg8vsRmLd`*.`#Y'Xa!axRn*]hrA8Rhug5s@rXg8u!RmMd8#X'X*3@rV72smdI*#UY&RmICARho~GsgxVgd)Ta'U-Y&Xa!T#RnEWnA@Wffg1uDRi0hFvK5RnBxGnG&#`%owp)@wsf+bX}Ze-*1!a*^^^Ua|!#a.aq&Ya2!a>.a6!a:aO`aJDtL[y`@Wg#>6Vz12@wzoYRoZNuPRi!NuPRhzg=ucRi,@=b`{Yg=ucRi-ACJvB!&Sh[ebSh]ebi`wUuFRm4Jw2_[y0JvB!.<Ju(!&SoG}6Shd}6<Ju(!&SoH}6She}6Kur@._g5vHRieJvx!{L2G{Kx6gd'T#?Rh82Wi5cZ#X(g1w)Rm5dW-Y(Ta#!a)!#aYa=wnfE=su2>>bU{0j9udv:<svj8uQv-7RgHdE%#^'sq9sp=>Bb_{TJv`!&g/r|snj6v(us5d,#Y(56H}[978H}]Jw5!&g1rushJvB!+j;v{u5?zDhd}6}bj;v{u5?zDhe}6}ce*#`(^^^a[aea!=!a6a*aoXb1a.!aAbL!b>,b'aL!aV@Wf|2Wlg3[y/JwNZt^@3piPw:5pgJunZou3@rsJva&!Vy_g<v~Rm#JvG'!6Vz0=<r{Ju{%!:pj@WfsiXuJu3Rm:JvZ&!WfA~Bph@c4Z&Dtwax5rubx(#:awRk1@d,#Y&RfjRfid1#,Y(@Wfp2Wlrg5s@ryKu[@!,'=]ig9wlk?Rk>g5u-rqJvy'!@9RkQcH(T#=>Ri~@<wkj(Wj(KuZB*!&<7rw@9RkRcH(T#=>Ri}@<wkj)Wj)dg(Ta2Xa9X#`-!a*CARhg@@=I}d9x;c~#X%so=<sj>2@@=aybb}XjWv0Q~EfEj3vLv;<d,#Y(56H}`978H}_dgaPaFa'a/!#a3Y0a_a;a|!1(a7-[yE3[xt;:pJNvZrrg3uJrvJwNZt=@3pIh=rt3rxPw:5pGOu!5rpJvG'!6Vys=<rz@c4Z&Dt(ax5rtJvZ!&~BpH@wsfNg-vaRlNci*U#=<wei<F}a5@Jq.!a*JQ!%@qZ23d(#Y&RjH5]jCk!u7w&u0udARjFd/prq=tyvpaEa(a:.!a1aZ(@@=I}:9wpd%=<sX55w_h}@@=I{t=ay<aU@@=I}T=ay<2@@=I})?C9:9au@9Cb]}DP~=x-fAZ(2Wl1=ay<aU@@=I}>5@d##Y+jTv|vV~EfFj]uNpn~FRfGdgaK!Z2&!a8a-Tb({E!acTbM*!a(DtY[yYd'%Y#sl[y*hHvh>Re5x2c{Z}.j4uCvcawRiMd+#X+_x&d!},<5RkX;2Hzw@x,gavfB-!{CcF&T#Roe;RodwWbBg5urRgaKvHC*_6Vz+<4opieuew&Rmq@d]&Y)X,T#X0Rh}<BqP=4qS9:ReMg/ujReNJw0!/<Jui%!bd{kawwnemRelAxUa?a3#*.&UX(Ya+a/RhvRnQ<o}9Wmtd-#Y&RgSRmw9;Rmxay=Rmyg-vaRmuxEhSrNu,v-voC!%(aR.a(a7+1Ro1>Ro5CE{A9b]{@;5x#eO{:g;urRi+KrNA!%(Ro3>Ro79;Ri_Ku@>{;&!x%gX|{KunA_+g5QRj/g3u5Rj#g>uERj%wio/xRhS&!,!#^1U}wba{8>>@=be}qC@:D5ba{7Ku+A&!}x?ba}t>>@=be}se(aA^^^Uat!b0#{pa+awUazbGa#aLb9bgaWac'a5TbS=Br!d1#`%scp_Jvl!#rT>Re0JvX&!VyN=H{Fcm#U&:pY=ReaJv2&!]h0=]nUJvG'!6Vy|=<r%JrM_=]h2@Wlud'#)U'Wf'b]{i=]h/Jvh!&~BpWg=v]RnMx+ny#'Nu;pVwjnu=]nwxJnx,T#`&Reqwjnt=]nvieu9vrRjLLuYwP(#+!th@wih5pX~Gr'g5v/Rh4KunA'!-CARnP@wwiN:Rm_9x'cvw>!|l=<saKvAA!0&3@q}>w^e1bp#&Re2Re3BDx7gH#T|f5H|eKuZ>!%(:qNAH{]Jv6!+3B2B9=b^{X<5<B92:E{ZLvhwA(a;a%!igQuyRmad+#Y}m@3Rh5d8#X'X*:AqUAHzmaxwbh<aXRnVcF}RT#Nw&cj#U(BWnug/vsRntdka)(a3+.Zb7aYYan1!bVa@Xa}[y^@b[{G=H{+hFu73Rj&Pv#5ReQcK%T#sig1v{Rj'Ku+D#'!t]~Grm~?rkKuMB!01d5#`'Vy.ta3Dtu~Hroc8#'{^45s85AwZbP&!#Rn!wghxWn#KvEA!)&2RlA2RlBx:h|#(T,=]j09Wobz>x]z/@awRoTd+#Y(az]hFhCrm4d,#Y+jTv|Q~EfMj]uNr|~FRfOdCa!Xa9_X#@<plJvf!%b`{(9;Rgwc;.!#2x7cw#T|UDb]|T5Ju={(!=@E{&Jv)&!Ab`{'awJvf!~*>>@=be{#KuY>!+&4Ezyi[ugv&RjIdea+T)#UXa&T-T&a!Rh9auRmW=]kLg5vuRn+g3u4Rn-Ow6ARn,hHus5xNk?#UX(U~)/g8v0RkD~AwkkF?Ri.OuNBwkkA?Ri/d|a2`a*^UYa.!aBTZaTa'Xa;!(!2!-a#b2[yC>6Vyq3[xr2Wi?g1rusVh%s?DtF~<5rbJs;%!DtBfswKtCj[uvuSsEu3RgVx3o:u+wN'*Zt;@3rd~Grh~?rfg8w)Lq)qE&-a%!>bI|`jWv0vV~EfCjTv|vV~Ef@j]uNpn~FRfBcK#T']gWNu7x,k7q4ai(0!hHv8<RhmkMu9vrsBuev/RhlCJvB!,g<v{wchh~@:Rhji[vrv{wchi~@:RhkdS&a5UY#Ta!RgPwwiI5BwciI~@:Rh`x'iJvj'!5]iJPu8Bwch]~@:Rhach)U#h3rp]gLh@t|Ax,hTq3ah!-(~@:Ro0Ou!5RhXj^v(pyw8unRhVd|)`,^UYas!a?/a2Z'a^Ta{Tb7Ta(a#!a,Wf&9sZ3DtAadamov=Bqt3[xig8vsRm~>waiL2b`{QJv*_Ouv2qgj<v]v2BqfdR'X*X#Y-@3qr~Gqv~?p6hHv-]glPup5Lq+q?_%*b_{qF{n9b^{rOu4ARhpKvCD!+&~Bqp:5Dbb}nwoiKl&unuTuBv]v+ueunaXRf0=Jvh!0nKufu8v1w&w7q%w&uHrz:Rgnj5w,uxDJq/(!hNw'5ReCk0s2u3w/w'5ReFd>Za&!*UaA=<wkgsRnSJv^!%Refifw3vyRgOKu_B'!,<]gkiiu:w&Rh<=C@a^<B57@2F{[<B5@aW:=3away9A5aW=<B=C@a^<B57@2F{Ie-#`(^^^bCara.b8aza6!/bZ,!adTbnTbOb+aFaS!aAT9@Wf~2Wli3Dtl2@d,#Y&RfnRfmJwJZtN~GqyJva&!VyMg<v~Rm%iXuJu3Rm9Jv[_=]ih9wlkDRkCd1#`(@Wg>2Wls3cH#T(@<Rj*=>Ri|b~'#23s9h<~El.d'#Y&Dtxi^rzvdRl#d*#U%(o|B2s`hJwSaxRmDKv4B&!1:Rmdd5#`'Vx}to~Hq{x'f1v3(!BA5ba|bJv_&!Wfug1v]ReIdO+U/Y#&G}-8wze=Rh{g1v]ReHg/uQRf/by#)ibQwERl/cH#T(@<Rj+=>Ri{cNu+vlax-!(#a0qa9<Rii2;;bU{H;x<i=&X#Rk`<4wwi=C9H~8xAI(Y#<azRi@45wXI<B9;5bb~7dL(X#Xa(+!aL6Vy{g5QqOau:5au2@ay547EzbxOcU(UX-T#Ta#:Cbb|A?wjh/b_|SOw6ARgtihr}u7Rhy<d1#T)X1@@=I|~=ay<2@@=aybb}Sj3vLv;<d,#Y(56H}A978H}@dGpvs@uAu`vcw9*!aFa+ai%(b!aXa8.a?a[ozWey=sU2@G}Nch&U#Rf_WexKu+D#'!t:~Gr`~?r^j]uNr|~FRg*j^psurwJt|RmcKv)@&!)7Rkv~Br[@wxfO:Rl3co#U'6Rezj_q#vIuavjRltwzeyh@vr5JqD0!>aY?C9:9au@9Cb]}9cl#U*5;5<H||jbuus1ucv&Rfvg1v~d/pppzqFr^a--a~!aMat1(hFv;Wiz@@=Izoj5uuv-7Rix~Cw`fk2WlVcZ#X,k)u3vWs@u2]ktg;wEx'fBq(_2Wg/jTv|vV~EfoJv]!15x'hzqG!(P~EfU~CRl_j6v(us5x4i-#T(2WmZ?C2F|d>Kq<aj1!*jTqIsBv=Wl`~Cw`fi2WlWj`v0u*~>RlR=c>Z,k#u3vWs@u2]kr<c1Z+jTqIsBv=Wla~Cw`fm2WlXdmb3!a{(arZa`bkTa%TbQTa-a9+c'!aM!/[yL=Bqug.w'RifhFvyDRj.g>vgwyk^9]k^Jv3_@WfbAARkhJw2_[x|JvB_wkoIRoKwkoJRoLd'(Y#<]gm=<9<H|yd'%_X#skDtb3awwqkgNulRkgdB#^',9:p'hJwSaxRmEBwVb8@4=H|qLu+w50&!)@3qs~?pU>Awwn;;Rn=c:Z'ARn<=<qwKvC@!/&~BqqJv6!&]eVb^z^xRge'/a%+^`#Sge}6<4Rn3=]n0Pw2>Rn8Jw0!&>Rn:>Rn6cY#a7+!a&=<wkaNw~h3z_c5Z{=wjh#=]nLKv^D!&)Vyz=bW|swYb<WetcG#T(2wxa@qVx@gD#Y&b^|V5JwG&!5bb|pg/w&RgD@x=kHs=uAvn!a%%/'+RmSRh694Ro`g-vaRmRhHv-]mlxCcS#`&ba~.5cD#Ta)P~=d,#Y(56H{>978H{Dd_#{2^Y%_+qbbb{6g3sERhsbU{?dfa.,`a(Xa<!aiX#(55RiG54RiHcI#T'WiU3RiVNvdwtfcRlKNvdd,#Y&RlHRlExQgf.1*^T'X#Sgf}6Wn4=]hfPrk>Rn7Jw0!&>Rn5>Rn9Lunw?&a2!,5<oq@@wqfdRlJj5Q~=d,#Y(~ARfcOuN]fdDKw;ay(}i!547E}j?cI#T(@5bV}iCbV}hdv(^^Tb?a40,b##Tbo!a*bR!a<b|a/!aKai!aU[yK=]o^g:v>ReGJwPZtK<7Rh+h<~El,Pv#5ReR@awwxjCg,ulRjDJv6&!]j!z?aQeeg>w=Sh<eeJw;!&axEzOg,Qosc!#*:wkeJ]eJ>x'h-u(!%Ro.w~h.zPdNZ(X,Ya![x{;9ReY;wkgxRiF:x?ap#Y&RmUg<s2Rkod]+UY0TZ'!a&A9sw<=bczLNvuw{gqzNhJwSaxRmCKuLay!#&s_Rf-55b^{uJvZa!!c%#(55Ri654wmiu5RiuawLu,vp!+}^%b_}Y9;wkgxba}o>A9:=b^}zKuh=a''!3awRk3c*'!#aHRk6c+Z&Rk5Rk4Jv)&!awRjSawd9*`#0?C2@EzMj8u<uJ5RmbjQrquJu3x,k>uq@_+=ayb^|W~ARkEOuN]k@7dhzV^X/X&a-#zRzSb`zXcJzTT#2WkVKvDBzW!%FzY9;5bbzWjQrquJu3Jw3%!b`zU=ayb^zQd:#X(T-a!6Vyywxh}=b]{Jg=u1RiAdGp~qHtzv!w(wA+a+a;<!aJaYai'anasb(=azRmV:Cbb{MLq2vb!%')RjuRjrRjtRjqx3jnqCw3!%')Rk(Rk+Rk&Rk)Lq2vb!%')Rj{RjxRjzRjwLq2vb!%')RjsRjpRjfRjex3jcqCw3!%')Rk'Rk*RjkRjl9<CbbzfOu4ARhxLq2vb!%')RjyRjvRjhRjgx=joq*uKvb!%')+-Rk.Rk%Rj~Rk-Rk#Rj}x=jdq*uKvb!%')+-Rk,Rk!Rj|RjmRjjRjidAq&qKs@uAv8Aa.'*-a@a&0!aM@a5[y73Dsy3Ds|3Dt):wxgI2sHJwJZt.~Gqxwsf0ikrzt}Rl0Jvy_[xj~HqzKv_A|D!&WfP8axRoVcf,U#k(v]v+ueunaXRf1Ju}'!g8u#Ri=jQw!sCunLprq>!,')~<5qeGzq9F{W=c##%s5au:5aU3CBE|;d4#X(D!a&6Vygx(b;#(=]ed?C2F{N<capoq2r[a&!aPa9,'Pw;5s:@@=I|,55w_h|@@=IzcP~=x'fCqB_2Wl2>aU@@=I|1OuNBc1Z+jTqIsBv=Wlc~Cw`fl2WlZ~AcTa%!Z+jTqIsBv=Wlb~Cw`fh2WlYk+uNqJsBv=WlSg,u3dca3#UXaMYa)TaB-=cM|7T#<bI}l5@B932:aV2G{BOuNBJq:|M!5Ezt=<B=C@a^<B57@2F{v>cB{/T#=ay<bI{3Jv6!a.6BKq0ah&+!5E}HP~Ef{978BaU@@=Iza<7d#.Y#978BaU@@=IzH~AJq0!(@@=IzG978BaU@@=IzFe,aU*Y&^^^bvJb,b:bFad!a,c2Ta>aL.bo6!a#CbTa'T#Re{2Wlh2@G{yg6t~Ro_NvdRfticuRQRllJv3&!x&c|zs@Jw3!%RflwpfkRlpKuL;%(!Re<@G|C2GzdhIvuBwgjAg-u0RjAKQB%!(GzZ@G|5NuuRl7d='T+Y#Vy[g<v~Rm!==G|>JvA!)@wma=]m1ifuaw&RmnLs@vT'!|/+[y,g:v>ReTJw1!#qX=x!eC{bLu+wT&)ZtZauq_~Graci&U#F|89:r_Lupvq!.)&2RlG8RfaC=x!eF{_h?rpWlmd&'!#X|&]k::xJey#`'T|+<E|&2@H|%dE#(^,g;u.RiEg6vjRiC9xCkA{O|zY#g=ucRmXKs0@!&*@G|m@awRknJuh!,3d(}gY}eJvj!%Rm):Jw3!%Rm+Rm-Ls0w(&!a(a#@b[|6cZ#X'7RkxWgAOu4ARn'dH'U#Y*Vz-Wm'CARm}d]*#a%^a*T'aK!a<9bV{PC=p*Jw4!&SgxcbB5r]idw(wBRmF7xFkt#&`(Rm/Rm8E|!JuY_9:Rl5=wrgr2:bbxd@xXfB(a*#T+!.X0X1Ta/a'T&RlDRfL>RlyARl9b[z[>RfZ:RlL:RfRwlg/ARl;9;RlxKv,A/!%7s69<74=BA5ba{-8Bde#`a<XaKYa1,a'P~=wxfB2bZ}}?C972@@=I}r8@55B9;5bb}G978B2@@=aybb}3j3vLv;<Jw3&!>Rfk=ayb^}4~Ad1#`*@@=aybb{w2@>==<bbz]dx+UY#^UaF!a9!bB'Ya1.!ajXa#%olRhD[y=3Dt#Ov5BrHKuMB%!(Rf^Wep~HrJwkiQjKr|~FRg)Ku+D#'!t5~GrF~?rDdV)UY,Z/_7RkuG{<~BrBg,rlsO:235B@bX}|d?a1!#`(6Vyn5@d##Y+jTv|vV~EfIj]uNpn~FRfH7Lq2vb1!a9-978BaU@@=Iz9978BbU}#~AJq0!(@@=Iz8978BaU@@=Iz7~AJQ|}!978BbU}!JvkaK!AdUa21-U#`a+(g/vsRn~Ou!5RPj:rmu9WhOjXuvvNr}:RhAj^v(pyw8unRn[kPr}p|u7vwv]RiSBd;pppzq@qHQa?(b.!a.a`@.|xa(hFv;Wiyj5uuv-7Riw~Cw`fg2WlU978BbU|wOuNBJqG!(P~EfD~CRlQcZ#X,k)u3vWs@u2]ksg;wEx'f@q1_2Wg.j]uNpn~FRfqJv]!15x'h{qG!(@@=IzK~CRl^j6v(us5x4i,#T(2WmY?C2F{1>Kq<aj1!*jTqIsBv=Wld~Cw`fj2Wl[j`v0u*~>RlT=c>Z,k#u3vWs@u2]kq<c1Z+jTqIsBv=Wle~Cw`fn2Wl]dn1#c(a(b^a2!b/bAT(bj!aDa7bu,a_a{c0!2T0g:v>ReD2@G{42@G{5~DpM~<5rc=Bx6i>{RT#RnI@zCx]y]z:2Jv[!zr5Awyk]9]k]dD(Y+X#6Vz.g=wKtgwhaCwgmTWj2Lu,w%_+/[y-B;b^xeg3u3Rj-2@bX{*KrJ<!+'@Wg(g?QRlC@Jv`!%b[zIwsfII}8JQ_@w|kW|=Jv(%!AqcOuNBJvEzh!bYzjLs@wP#(0!oy@>RkdJwMZtc3Dtd@BcG#T'9bWxg2@2Fznd*#Y+;2x'c}w<zizixNgwa#Z'U+!/!a'!a+w~g~z6wcn{Rn}wcnzRn|5Rh%=]nJg5vuRmvNvdRlvcprJu}w*az*a#!%.a.'Bot9qT]kj@Wg'ay2Gzv@Jv`!%b[zEwsfHI}1;ck#Ux`<Cbbx_Lu+w!a&0*!wko*wwo,So,}6Juqxf!E}PigQuyRm`d3(`#8>Rn%:A5B;bZ~%KvhCa!a2!x>k7#Uxb@b{#xaRk7Jw0!)>wwhlShl}6>wwhmShm}6CJvB!.x'hhvj{!!5Bwkhhbaz}x'hivjz~!5Bwkhibaz|xEhTrNu,v-vpD!a%&/)a3a.,%Ro2t[CE{)@3re9b]{%wjo09:rgc:Z&Ro6=<riifuaw&RmoKrNA!%(Ro4>Ro89;Ri`dSaL'UYzxZb)7Rka3xRhT&!,!#^1U}vbaz{>>@=be}yC@:D5bazzKu+A&!}{?ba}y>>@=be}wxBh[t`u~vJvr!%a!a()a,a0a4RoC=]o;Ju(!%RoGRhdwjh`=]oAg>w#Ro?g5vuRo=NvdRl|Ku]C.!&;RoEJvB!%RoORoMBx'h[v+_?w~h`}~5?w~hd~!xKh]oiptu-utv.vp!#%&a30a@a'a+(a/aOp(o~p!RoDJu(!%RoHRhewjha=]oBNvdRl}g>w#Ro@g5vuRo>c[#X']o<CauRoRAd-#Y':RkpauRoQKu]C.!&;RoFJvB!%RoNRoPBx'h]v+_?w~ha}t5?w~he}ue!/UbhYacXaW^Tc&a;b:a-c/#b&aja1(!cL+!bKbt!bmcRc9aIc?8[yW3Dtt94Rg`Jv}!&SiRMzBhEebShEMNuPRe>x7gL#TzuwjirRipc<Z&>on;>z=h-MSh.Mwqczx'a7vj&!>Re4@=ResJt__NuPRi*NuPRi)j]uNr|~FRfzKrJ>_+@Wfy@Wf]2WocKrJ<!+'@Wg%g/QRl@@Jv`!&awRl<wsfFIzgLu(w*!.*&ShBMwvhIRhI9;RhNx1hK'!#Sn]Mx1hK~0!#:2<H~7cNu+w7D*'1ZtW>Rn1~?rOc:Z&Rn2=<rQ<7wjh&=BSnLMc]#X(6Vz)w[b=a!U#9wzgMc3#&(RgMRitRis<x,gKt`ax!&+SioM=BSilMc3#&(RgKRinRimKurB,!&SiQMzBhDebShDM6BJQ!(P~Efx978B2@@=I}WLrJw!!,a*&@G}O@9wkibRid@@x'fKwC!&SlDMSfLMjUv~Q~EfKKv3@a+!(hFv-]mpx/hYZ(C5RiWz<o/MwkhY?So/M@x,gbvfB*&!SgEM:SoeeehFu3:Rgbda(,^TZa)X/7Sg[eb:2RgI~BrMC@wgkc:wwkcRerx3h(uUvK!&*,SnOM4Sh*MArRg;wHRh(x=h;rJvPwI!a4',a'0@Wg&=BSh/Mg>w=Rh=g3w*wwgGRgGcW(X#;Sg}M2Gzk@Jv`!&awRl=wsfGIz`dKZ*T'Y-:RhR7RhQg5u-p`j6v(us5d,#Y+~Awkia?RicOuNBwkibba}Ld6p~tyu_vbAa'a+!a/'a3aEa8a!>Sh,ebJv{!&Sh@ebSaReb9;SgwebNuPRi(NvdRl)NuPRi'hHu^<Rm^Jvv_@Wl(g;u1Si/ebKu'B&!*Sh?eb@Wl'z@aPeb95Si.ebcpputyvjB)!,&a+0a%ShAMWeK@G}C@WfJ9;RhMwvhH9w{ia}ix,hJvRA1(!zAn[MRhHx1hJ~*!#hFv(BSn[MBJQ!(@@=I~'978B2@@=I}2db.Ua<'X}+T#a0XaG2G}E;wkg|wuh!Rh!x,hZu,@)!&So0MVy)C5RiXACJvB!&5RiY5RiZg8w)cG}*T#2@bU}=KsA>(!a.3wkhZba~(x,h^u(A!&(SoCMRhb5Bz=h[eb?w~hb~6x,h_u(A!&(SoDMRhc5Bz=h]eb?w~hc~6e)aA1T#T,^^^c-bMb&blcPaP(a/!0!bA=b5c@a(!bfbrc#2afwmhARnjwchORnp2Wlf3DtsNvdRl-2@wpa<]m0bx(#:awRk2@Jw3!%RfhwpfgRlnKQB%!(G{V@G|'NuuRl6d='T+Y#VyUg<v~Rl~==G|<Jv+'!aYShC}6@B<5?ba~8@Jw3'!g2QRljhLrpWlOd+#Y'g.w'rIg>w*wgj@g-u0Rj@Lu+wT&)ZtUauq]~GrGci&U#F|39:rELrNvj!.%*RhCwunfw~nf~:9;Ri]>wtnhg;wHRnhx3hDs@v~!/+'@Wfr@9RkSNu&Rlo=@<5GzoKs0@_+@Wl+@awRkmJuh!-3d(}pY#qWJvj!%Rm(:Jw3!%Rm,Rm*de&!1U-U#`)Re;@G|.@9Ri82@wjfvRlq=@<5GzpLvOvr!).&2RlF8Rf`C=x!eE{.Jw3_g2QRlkhLrpWlPde(!#U{s,UXa*Ta'[y'g:v>ReS;x0PZ&RnlRnn~HrKJw1}f!=x!eB|2w]aP(#Xa&a*Ta.Ua2a7=]iOd'#Y&Ro&WnWg;u.RiDg6vjRiBNvdRlzhNvj]nYJuW_2Wm3x)kFze{9d])!a.!,Y01!#&aC!a3RndC=ox~BrC@2b^{pg,rlse7x'ksuq!%Rm.E{xidw(wBRmGx9o+)X#wwo-So-}69:Rl4@xSf@a#XZ'X)X,Ta(/ARl8b[xc>RfY:RlI:RfQwlg.ARl:9;Rlwdn'#^XafaQa1X1TaHTa)@b[{zcZ#X'7RkwWg@Ou4ARn&x)kG#{,g7u/RkGdH'U#Y*Vz'Wm&CARm|bx#(A]gUbUzJj9Q~=d,#Y(56H}l978H{U7d,0#U*2>ABb_xZ978BbU{e~AJQ{g!978BbU{hxMh?ad{oUYZ.x1h?{l!#:2<H{mx3n[t{vl!,&a%3Ro(z=iS}6ARnr=Bwsn^wvn`Rnbd`*T}B0!#^X'BG{c9b]{a>>@=be}F?JvS!&BG{d7BG}(Bde#`a1X,Ya@!a'P~=wxf@2bZ}I56B2@@=aybb}08@55B9;5bb}<j3vLv;<Jw3&!>Rfg=ayb^}&OuNBKuLA!)a!P~=x#fD{f2@>==<bbzl?C972@@=Ix^d6rSu,v7w*C(0a)a6#B+a%!sQ[y?3Dt%3[xn~<5rLOu!5p@Ku+D#'!t7~GrP~?rNKvlaya7'!h+v-5qMg=t|cd,U#5AAaa5Abb{S@52B5@a[@52B5Gx[iXueu;d<#`a(!/549C;ag>23ExY5@Dah89b^~689Jv)!~2b[~1Lv'w(%*!a#bX|aPrmawRe]keu7uhv-q6rxu,q`xTo]/a5aU!bNaDXbi!b-!ao!b<bwA!#5@B932:aV2G|:d-)Y#hJrL>RhG<7@C5<H|_=Cau:5aj5@B932:bJ|ng>vIbs)#?C2F|9jPv0w.vISh-MKvUaz(.!9ABbb|[5;5<H|Eg>unwfh;9:4E|YjQsBt|vjx'hYq3!(?C2F|J:2<BaY?C2F|GOu!5x,g|p{ah!-(?C2F|c9:4E|OjXuvvNr}:Rh&i[w*t|cd+U#jJvsu)vsSn~Mkfrmu9p}u7vwv]So!McW#Xa!ax5@A5aY:5;5<H|>kJv~vYrquJu3x4ib#T)2@SmZM?C2F|Bj:rmu9@xPhI(a*a#U#`a3-5Abb|L~@:RhK9:4E|0@52B5G|#C::aY?C2F|-:2<BaY?C2F|.5Jvk!a)javYrquJu3x4ia#T)2@SmYM?C2F|HAxPhH(!a#U#`a*-5Abb|4~@:RhJ9:4E|R@52B5G|F:2<BaY?C2F|Sc^#Xa2j=Qq5CJvB!-g<v{z;hhM?C2F|Zi[vrv{z;hiM?C2F|XKsA>!a)-g<v{z;h[eb?C2F|]i[vrv{z;h]eb?C2F|^iZu.vix,hZq3ah!.(?C2F|QOu!5ShXM:2<BaY?C2F|P", 13494, 2713, 49, 25, 61);
104
258
  //#endregion
105
259
  //#region node_modules/entities/dist/internal/bin-trie-flags.js
106
260
  /**
107
261
  * Bit flags & masks for the binary trie encoding used for entity decoding.
108
262
  *
109
- * Bit layout (16 bits total):
110
- * 15..14 VALUE_LENGTH (+1 encoding; 0 => no value)
111
- * 13 FLAG13. If valueLength>0: semicolon required flag (implicit ';').
112
- * If valueLength==0: compact run flag.
113
- * 12..7 BRANCH_LENGTH Branch length (0 => single branch in 6..0 if jumpOffset==char) OR run length (when compact run)
114
- * 6..0 JUMP_TABLE Jump offset (jump table) OR single-branch char code OR first run char
263
+ * The trie is a flat `Uint16Array`. Every node starts with one header word:
264
+ *
265
+ * 15..14 VALUE_LENGTH Number of words the value occupies, +1.
266
+ * 0 = no value; 1 = value inline in bits 12..0;
267
+ * 2/3 = value in the 1/2 words after the header.
268
+ * 13 FLAG13 If VALUE_LENGTH > 0: semicolon required ("strict"
269
+ * entity; `;` is never stored as a branch).
270
+ * If VALUE_LENGTH == 0: this node is a compact run.
271
+ * 12..7 BRANCH_LENGTH Number of branches (or run length for runs).
272
+ * 6..0 JUMP_TABLE Jump-table offset / single-branch char / first
273
+ * run char (see below).
274
+ *
275
+ * Branch data follows the header and any value words. Its shape is selected
276
+ * by (JUMP_TABLE, BRANCH_LENGTH) in the header:
277
+ *
278
+ * Single branch JUMP_TABLE = the only child's char, BRANCH_LENGTH = 0.
279
+ * No branch words; the child node follows immediately.
280
+ * Jump table JUMP_TABLE = first covered char (> 0), BRANCH_LENGTH =
281
+ * table length. One word per covered char: 0 = no branch,
282
+ * otherwise the child's offset from the END of the table,
283
+ * +1 (so 0 stays the no-branch sentinel).
284
+ * Dictionary JUMP_TABLE = 0, BRANCH_LENGTH = number of branches.
285
+ * ceil(n/2) words of sorted keys packed two per word
286
+ * (low byte first), then n pointer words storing the
287
+ * child's offset from the END of the branch data.
288
+ * Compact run VALUE_LENGTH = 0, FLAG13 set. BRANCH_LENGTH = run
289
+ * length (3..63), JUMP_TABLE = first char; remaining run
290
+ * chars packed two per word after the header. The target
291
+ * node follows the packed words immediately.
292
+ *
293
+ * Pointers are end-relative (rather than relative to the pointer's own
294
+ * position) because that makes the common "child encoded right after the
295
+ * branch data" case a small constant, which compresses far better. Offsets
296
+ * to already-encoded (shared) nodes wrap via uint16 modulo arithmetic; the
297
+ * decoder masks navigation results with `& 0xff_ff` to match.
115
298
  */
116
299
  var BinTrieFlags;
117
300
  (function(BinTrieFlags) {
@@ -119,9 +302,11 @@ var BinTrieFlags;
119
302
  BinTrieFlags[BinTrieFlags["FLAG13"] = 8192] = "FLAG13";
120
303
  BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
121
304
  BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE";
305
+ /** Bits 12..0: the inline value of a VALUE_LENGTH = 1 header word. */
306
+ BinTrieFlags[BinTrieFlags["VALUE_MASK"] = 8191] = "VALUE_MASK";
122
307
  })(BinTrieFlags || (BinTrieFlags = {}));
123
308
  //#endregion
124
- //#region \0@oxc-project+runtime@0.142.0/helpers/esm/typeof.js
309
+ //#region \0@oxc-project+runtime@0.154.0/helpers/esm/typeof.js
125
310
  function _typeof(o) {
126
311
  "@babel/helpers - typeof";
127
312
  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
@@ -131,7 +316,7 @@ function _typeof(o) {
131
316
  }, _typeof(o);
132
317
  }
133
318
  //#endregion
134
- //#region \0@oxc-project+runtime@0.142.0/helpers/esm/toPrimitive.js
319
+ //#region \0@oxc-project+runtime@0.154.0/helpers/esm/toPrimitive.js
135
320
  function toPrimitive(t, r) {
136
321
  if ("object" != _typeof(t) || !t) return t;
137
322
  var e = t[Symbol.toPrimitive];
@@ -143,13 +328,13 @@ function toPrimitive(t, r) {
143
328
  return ("string" === r ? String : Number)(t);
144
329
  }
145
330
  //#endregion
146
- //#region \0@oxc-project+runtime@0.142.0/helpers/esm/toPropertyKey.js
331
+ //#region \0@oxc-project+runtime@0.154.0/helpers/esm/toPropertyKey.js
147
332
  function toPropertyKey(t) {
148
333
  var i = toPrimitive(t, "string");
149
334
  return "symbol" == _typeof(i) ? i : i + "";
150
335
  }
151
336
  //#endregion
152
- //#region \0@oxc-project+runtime@0.142.0/helpers/esm/defineProperty.js
337
+ //#region \0@oxc-project+runtime@0.154.0/helpers/esm/defineProperty.js
153
338
  function _defineProperty(e, r, t) {
154
339
  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
155
340
  value: t,
@@ -162,39 +347,65 @@ function _defineProperty(e, r, t) {
162
347
  //#region node_modules/entities/dist/decode.js
163
348
  var CharCodes;
164
349
  (function(CharCodes) {
350
+ CharCodes[CharCodes["AMP"] = 38] = "AMP";
165
351
  CharCodes[CharCodes["NUM"] = 35] = "NUM";
166
352
  CharCodes[CharCodes["SEMI"] = 59] = "SEMI";
167
353
  CharCodes[CharCodes["EQUALS"] = 61] = "EQUALS";
168
354
  CharCodes[CharCodes["ZERO"] = 48] = "ZERO";
169
355
  CharCodes[CharCodes["NINE"] = 57] = "NINE";
170
356
  CharCodes[CharCodes["LOWER_A"] = 97] = "LOWER_A";
171
- CharCodes[CharCodes["LOWER_F"] = 102] = "LOWER_F";
172
357
  CharCodes[CharCodes["LOWER_X"] = 120] = "LOWER_X";
173
- CharCodes[CharCodes["LOWER_Z"] = 122] = "LOWER_Z";
174
- CharCodes[CharCodes["UPPER_A"] = 65] = "UPPER_A";
175
- CharCodes[CharCodes["UPPER_F"] = 70] = "UPPER_F";
176
- CharCodes[CharCodes["UPPER_Z"] = 90] = "UPPER_Z";
177
358
  })(CharCodes || (CharCodes = {}));
178
359
  /** Bit that needs to be set to convert an upper case ASCII character to lower case */
179
360
  var TO_LOWER_BIT = 32;
361
+ var CONSUMED_SHIFT = 21;
362
+ var CODE_POINT_MASK = 2097151;
363
+ /**
364
+ * Reserved consumed field for counts of at least 2047 characters after `&`.
365
+ * The true count is in `longNumericConsumed`.
366
+ */
367
+ var CONSUMED_OVERFLOW = 2047;
368
+ /**
369
+ * Side channel for numeric entities of at least 2048 characters including
370
+ * `&`. Set by `parseNumericEntity` when its consumed count reaches the
371
+ * reserved value `CONSUMED_OVERFLOW`; callers read the true count from here.
372
+ * A module-level slot avoids a tuple allocation on the hot path.
373
+ */
374
+ var longNumericConsumed = 0;
375
+ /**
376
+ * Extract the consumed count from a `parseNumericEntity` packed result,
377
+ * recovering the true length from `longNumericConsumed` when the packed
378
+ * field contains the sentinel. Read it before the next `parseNumericEntity`
379
+ * call, which may overwrite the side channel. This helper owns that protocol.
380
+ * @param packed Packed result of `parseNumericEntity`.
381
+ */
382
+ function unpackConsumed(packed) {
383
+ const consumed = packed >>> CONSUMED_SHIFT;
384
+ return consumed === CONSUMED_OVERFLOW ? longNumericConsumed : consumed;
385
+ }
386
+ /**
387
+ * Unsigned subtraction trick: (code - lo) >>> 0 wraps negatives to large
388
+ * values, so a single `<=` covers the entire [lo..hi] range check.
389
+ * @param code Code point to check.
390
+ */
180
391
  function isNumber(code) {
181
- return code >= CharCodes.ZERO && code <= CharCodes.NINE;
392
+ return code - CharCodes.ZERO >>> 0 <= 9;
182
393
  }
183
394
  function isHexadecimalCharacter(code) {
184
- return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F;
395
+ return (code | TO_LOWER_BIT) - CharCodes.LOWER_A >>> 0 <= 5;
185
396
  }
186
- function isAsciiAlphaNumeric(code) {
187
- return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber(code);
397
+ function isAlpha(code) {
398
+ return (code | TO_LOWER_BIT) - CharCodes.LOWER_A >>> 0 <= 25;
188
399
  }
189
400
  /**
190
401
  * Checks if the given character is a valid end character for an entity in an attribute.
191
402
  *
192
403
  * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.
193
404
  * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state
194
- * @param code Code point to decode.
405
+ * @param code Code point to check.
195
406
  */
196
407
  function isEntityInAttributeInvalidEnd(code) {
197
- return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
408
+ return code === CharCodes.EQUALS || isAlpha(code) || isNumber(code);
198
409
  }
199
410
  var EntityDecoderState;
200
411
  (function(EntityDecoderState) {
@@ -217,355 +428,231 @@ var DecodingMode;
217
428
  DecodingMode[DecodingMode["Attribute"] = 2] = "Attribute";
218
429
  })(DecodingMode || (DecodingMode = {}));
219
430
  /**
220
- * Token decoder with support of writing partial entities.
221
- */
222
- var EntityDecoder = class {
223
- constructor(decodeTree, emitCodePoint, errors) {
224
- _defineProperty(this, "decodeTree", void 0);
225
- _defineProperty(this, "emitCodePoint", void 0);
226
- _defineProperty(this, "errors", void 0);
227
- _defineProperty(
228
- this,
229
- /** The current state of the decoder. */
230
- "state",
231
- EntityDecoderState.EntityStart
232
- );
233
- _defineProperty(
234
- this,
235
- /** Characters that were consumed while parsing an entity. */
236
- "consumed",
237
- 1
238
- );
239
- _defineProperty(
240
- this,
241
- /**
242
- * The result of the entity.
243
- *
244
- * Either the result index of a numeric entity, or the codepoint of a
245
- * numeric entity.
246
- */
247
- "result",
248
- 0
249
- );
250
- _defineProperty(
251
- this,
252
- /** The current index in the decode tree. */
253
- "treeIndex",
254
- 0
255
- );
256
- _defineProperty(
257
- this,
258
- /** The number of characters that were consumed in excess. */
259
- "excess",
260
- 1
261
- );
262
- _defineProperty(
263
- this,
264
- /** The mode in which the decoder is operating. */
265
- "decodeMode",
266
- DecodingMode.Strict
267
- );
268
- _defineProperty(
269
- this,
270
- /** The number of characters that have been consumed in the current run. */
271
- "runConsumed",
272
- 0
273
- );
274
- this.decodeTree = decodeTree;
275
- this.emitCodePoint = emitCodePoint;
276
- this.errors = errors;
277
- }
278
- /**
279
- * Resets the instance to make it reusable.
280
- * @param decodeMode Entity decoding mode to use.
281
- */
282
- startEntity(decodeMode) {
283
- this.decodeMode = decodeMode;
284
- this.state = EntityDecoderState.EntityStart;
285
- this.result = 0;
286
- this.treeIndex = 0;
287
- this.excess = 1;
288
- this.consumed = 1;
289
- this.runConsumed = 0;
290
- }
291
- /**
292
- * Write an entity to the decoder. This can be called multiple times with partial entities.
293
- * If the entity is incomplete, the decoder will return -1.
294
- *
295
- * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
296
- * entity is incomplete, and resume when the next string is written.
297
- * @param input The string containing the entity (or a continuation of the entity).
298
- * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
299
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
300
- */
301
- write(input, offset) {
302
- switch (this.state) {
303
- case EntityDecoderState.EntityStart:
304
- if (input.charCodeAt(offset) === CharCodes.NUM) {
305
- this.state = EntityDecoderState.NumericStart;
306
- this.consumed += 1;
307
- return this.stateNumericStart(input, offset + 1);
308
- }
309
- this.state = EntityDecoderState.NamedEntity;
310
- return this.stateNamedEntity(input, offset);
311
- case EntityDecoderState.NumericStart: return this.stateNumericStart(input, offset);
312
- case EntityDecoderState.NumericDecimal: return this.stateNumericDecimal(input, offset);
313
- case EntityDecoderState.NumericHex: return this.stateNumericHex(input, offset);
314
- case EntityDecoderState.NamedEntity: return this.stateNamedEntity(input, offset);
315
- }
316
- }
317
- /**
318
- * Switches between the numeric decimal and hexadecimal states.
319
- *
320
- * Equivalent to the `Numeric character reference state` in the HTML spec.
321
- * @param input The string containing the entity (or a continuation of the entity).
322
- * @param offset The current offset.
323
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
324
- */
325
- stateNumericStart(input, offset) {
326
- if (offset >= input.length) return -1;
327
- if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
328
- this.state = EntityDecoderState.NumericHex;
329
- this.consumed += 1;
330
- return this.stateNumericHex(input, offset + 1);
331
- }
332
- this.state = EntityDecoderState.NumericDecimal;
333
- return this.stateNumericDecimal(input, offset);
334
- }
335
- /**
336
- * Parses a hexadecimal numeric entity.
337
- *
338
- * Equivalent to the `Hexademical character reference state` in the HTML spec.
339
- * @param input The string containing the entity (or a continuation of the entity).
340
- * @param offset The current offset.
341
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
342
- */
343
- stateNumericHex(input, offset) {
344
- while (offset < input.length) {
345
- const char = input.charCodeAt(offset);
346
- if (isNumber(char) || isHexadecimalCharacter(char)) {
347
- const digit = char <= CharCodes.NINE ? char - CharCodes.ZERO : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;
348
- this.result = this.result * 16 + digit;
349
- this.consumed++;
350
- offset++;
351
- } else return this.emitNumericEntity(char, 3);
352
- }
353
- return -1;
354
- }
355
- /**
356
- * Parses a decimal numeric entity.
357
- *
358
- * Equivalent to the `Decimal character reference state` in the HTML spec.
359
- * @param input The string containing the entity (or a continuation of the entity).
360
- * @param offset The current offset.
361
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
362
- */
363
- stateNumericDecimal(input, offset) {
364
- while (offset < input.length) {
365
- const char = input.charCodeAt(offset);
366
- if (isNumber(char)) {
367
- this.result = this.result * 10 + (char - CharCodes.ZERO);
368
- this.consumed++;
369
- offset++;
370
- } else return this.emitNumericEntity(char, 2);
371
- }
372
- return -1;
373
- }
374
- /**
375
- * Validate and emit a numeric entity.
376
- *
377
- * Implements the logic from the `Hexademical character reference start
378
- * state` and `Numeric character reference end state` in the HTML spec.
379
- * @param lastCp The last code point of the entity. Used to see if the
380
- * entity was terminated with a semicolon.
381
- * @param expectedLength The minimum number of characters that should be
382
- * consumed. Used to validate that at least one digit
383
- * was consumed.
384
- * @returns The number of characters that were consumed.
385
- */
386
- emitNumericEntity(lastCp, expectedLength) {
387
- if (this.consumed <= expectedLength) {
388
- var _this$errors;
389
- (_this$errors = this.errors) === null || _this$errors === void 0 || _this$errors.absenceOfDigitsInNumericCharacterReference(this.consumed);
390
- return 0;
391
- }
392
- if (lastCp === CharCodes.SEMI) this.consumed += 1;
393
- else if (this.decodeMode === DecodingMode.Strict) return 0;
394
- this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
395
- if (this.errors) {
396
- if (lastCp !== CharCodes.SEMI) this.errors.missingSemicolonAfterCharacterReference();
397
- this.errors.validateNumericCharacterReference(this.result);
398
- }
399
- return this.consumed;
400
- }
401
- /**
402
- * Parses a named entity.
403
- *
404
- * Equivalent to the `Named character reference state` in the HTML spec.
405
- * @param input The string containing the entity (or a continuation of the entity).
406
- * @param offset The current offset.
407
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
408
- */
409
- stateNamedEntity(input, offset) {
410
- const { decodeTree } = this;
411
- let current = decodeTree[this.treeIndex];
412
- let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
413
- while (offset < input.length) {
414
- if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {
415
- const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
416
- if (this.runConsumed === 0) {
417
- const firstChar = current & BinTrieFlags.JUMP_TABLE;
418
- if (input.charCodeAt(offset) !== firstChar) return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
419
- offset++;
420
- this.excess++;
421
- this.runConsumed++;
422
- }
423
- while (this.runConsumed < runLength) {
424
- if (offset >= input.length) return -1;
425
- const charIndexInPacked = this.runConsumed - 1;
426
- const packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];
427
- const expectedChar = charIndexInPacked % 2 === 0 ? packedWord & 255 : packedWord >> 8 & 255;
428
- if (input.charCodeAt(offset) !== expectedChar) {
429
- this.runConsumed = 0;
430
- return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
431
- }
432
- offset++;
433
- this.excess++;
434
- this.runConsumed++;
435
- }
436
- this.runConsumed = 0;
437
- this.treeIndex += 1 + (runLength >> 1);
438
- current = decodeTree[this.treeIndex];
439
- valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
440
- }
441
- if (offset >= input.length) break;
442
- const char = input.charCodeAt(offset);
443
- if (char === CharCodes.SEMI && valueLength !== 0 && (current & BinTrieFlags.FLAG13) !== 0) return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
444
- this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
445
- if (this.treeIndex < 0) return this.result === 0 || this.decodeMode === DecodingMode.Attribute && (valueLength === 0 || isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();
446
- current = decodeTree[this.treeIndex];
447
- valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
448
- if (valueLength !== 0) {
449
- if (char === CharCodes.SEMI) return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
450
- if (this.decodeMode !== DecodingMode.Strict && (current & BinTrieFlags.FLAG13) === 0) {
451
- this.result = this.treeIndex;
452
- this.consumed += this.excess;
453
- this.excess = 0;
454
- }
455
- }
456
- offset++;
457
- this.excess++;
458
- }
459
- return -1;
460
- }
461
- /**
462
- * Emit a named entity that was not terminated with a semicolon.
463
- * @returns The number of characters consumed.
464
- */
465
- emitNotTerminatedNamedEntity() {
466
- var _this$errors2;
467
- const { result, decodeTree } = this;
468
- const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
469
- this.emitNamedEntityData(result, valueLength, this.consumed);
470
- (_this$errors2 = this.errors) === null || _this$errors2 === void 0 || _this$errors2.missingSemicolonAfterCharacterReference();
471
- return this.consumed;
472
- }
473
- /**
474
- * Emit a named entity.
475
- * @param result The index of the entity in the decode tree.
476
- * @param valueLength The number of bytes in the entity.
477
- * @param consumed The number of characters consumed.
478
- * @returns The number of characters consumed.
479
- */
480
- emitNamedEntityData(result, valueLength, consumed) {
481
- const { decodeTree } = this;
482
- this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13) : decodeTree[result + 1], consumed);
483
- if (valueLength === 3) this.emitCodePoint(decodeTree[result + 2], consumed);
484
- return consumed;
485
- }
486
- /**
487
- * Signal to the parser that the end of the input was reached.
488
- *
489
- * Remaining data will be emitted and relevant errors will be produced.
490
- * @returns The number of characters consumed.
491
- */
492
- end() {
493
- switch (this.state) {
494
- case EntityDecoderState.NamedEntity: return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
495
- case EntityDecoderState.NumericDecimal: return this.emitNumericEntity(0, 2);
496
- case EntityDecoderState.NumericHex: return this.emitNumericEntity(0, 3);
497
- case EntityDecoderState.NumericStart:
498
- var _this$errors3;
499
- (_this$errors3 = this.errors) === null || _this$errors3 === void 0 || _this$errors3.absenceOfDigitsInNumericCharacterReference(this.consumed);
500
- return 0;
501
- case EntityDecoderState.EntityStart: return 0;
502
- }
503
- }
504
- };
505
- /**
506
- * Creates a function that decodes entities in a string.
507
- * @param decodeTree The decode tree.
508
- * @returns A function that decodes entities in a string.
509
- */
510
- function getDecoder(decodeTree) {
511
- let returnValue = "";
512
- const decoder = new EntityDecoder(decodeTree, (data) => returnValue += String.fromCodePoint(data));
513
- return function decodeWithTrie(input, decodeMode) {
514
- let lastIndex = 0;
515
- let offset = 0;
516
- while ((offset = input.indexOf("&", offset)) >= 0) {
517
- returnValue += input.slice(lastIndex, offset);
518
- decoder.startEntity(decodeMode);
519
- const length = decoder.write(input, offset + 1);
520
- if (length < 0) {
521
- lastIndex = offset + decoder.end();
522
- break;
523
- }
524
- lastIndex = offset + length;
525
- offset = length === 0 ? lastIndex + 1 : lastIndex;
526
- }
527
- const result = returnValue + input.slice(lastIndex);
528
- returnValue = "";
529
- return result;
530
- };
531
- }
532
- /**
533
431
  * Determines the branch of the current node that is taken given the current
534
432
  * character. This function is used to traverse the trie.
433
+ *
434
+ * See `BinTrieFlags` for the branch-data layouts handled here.
535
435
  * @param decodeTree The trie.
536
- * @param current The current node.
537
- * @param nodeIndex Index immediately after the current node header.
436
+ * @param current The current node's header word.
437
+ * @param nodeIndex Index of the node's first branch-data word (the header
438
+ * plus any value words have been skipped by the caller).
538
439
  * @param char The current character.
539
440
  * @returns The index of the next node, or -1 if no branch is taken.
540
441
  */
541
442
  function determineBranch(decodeTree, current, nodeIndex, char) {
542
443
  const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
543
444
  const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
544
- if (branchCount === 0) return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;
545
445
  if (jumpOffset) {
546
- const value = char - jumpOffset;
547
- return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIndex + value] - 1;
446
+ if (branchCount === 0) return char === jumpOffset ? nodeIndex : -1;
447
+ const slot = char - jumpOffset;
448
+ if (slot >>> 0 >= branchCount) return -1;
449
+ const stored = decodeTree[nodeIndex + slot];
450
+ return stored === 0 ? -1 : nodeIndex + branchCount + stored - 1 & 65535;
548
451
  }
452
+ if (branchCount === 0) return -1;
549
453
  const packedKeySlots = branchCount + 1 >> 1;
550
- let lo = 0;
551
- let hi = branchCount - 1;
552
- while (lo <= hi) {
553
- const mid = lo + hi >>> 1;
554
- const midKey = decodeTree[nodeIndex + (mid >> 1)] >> (mid & 1) * 8 & 255;
555
- if (midKey < char) lo = mid + 1;
556
- else if (midKey > char) hi = mid - 1;
557
- else return decodeTree[nodeIndex + packedKeySlots + mid];
454
+ const branchEnd = nodeIndex + packedKeySlots + branchCount;
455
+ for (let index = 0; index < branchCount; index++) {
456
+ const key = decodeTree[nodeIndex + (index >> 1)] >> ((index & 1) << 3) & 255;
457
+ if (key === char) return branchEnd + decodeTree[nodeIndex + packedKeySlots + index] & 65535;
458
+ if (key > char) return -1;
558
459
  }
559
460
  return -1;
560
461
  }
561
- var htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);
462
+ /**
463
+ * Read the decoded value from a trie node.
464
+ * @param decodeTree The trie.
465
+ * @param nodeIndex The index of the node.
466
+ * @param valueLength The length of the value (1, 2, or 3).
467
+ * @returns The decoded string.
468
+ */
469
+ function readTrieValue(decodeTree, nodeIndex, valueLength) {
470
+ if (valueLength === 1) return String.fromCharCode(decodeTree[nodeIndex] & BinTrieFlags.VALUE_MASK);
471
+ if (valueLength === 2) return String.fromCharCode(decodeTree[nodeIndex + 1]);
472
+ return String.fromCharCode(decodeTree[nodeIndex + 1], decodeTree[nodeIndex + 2]);
473
+ }
474
+ /**
475
+ * Parse a numeric entity (`&#DDD;` or `&#xHHH;`).
476
+ *
477
+ * Encodes the result as `(consumed << CONSUMED_SHIFT) | codepoint` (see
478
+ * the packing comment at the top of the file; overlong entities spill
479
+ * their length into `longNumericConsumed`). Returns 0 when no digits were
480
+ * found.
481
+ *
482
+ * This is the sync counterpart of the streaming
483
+ * `EntityDecoder#stateNumericDecimal` / `#stateNumericHex`. Digit parsing
484
+ * matches those methods; only this packed result needs a value clamp.
485
+ * @param input The input string.
486
+ * @param numberStart Index of the `#` character.
487
+ * @param inputLength Cached `input.length`.
488
+ */
489
+ function parseNumericEntity(input, numberStart, inputLength) {
490
+ let offset = numberStart + 1;
491
+ let cp = 0;
492
+ let digitStart = offset;
493
+ if (offset < inputLength && (input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
494
+ offset += 1;
495
+ digitStart = offset;
496
+ while (offset < inputLength) {
497
+ const char = input.charCodeAt(offset);
498
+ if (isNumber(char)) cp = cp * 16 + (char - CharCodes.ZERO);
499
+ else if (isHexadecimalCharacter(char)) cp = cp * 16 + ((char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10);
500
+ else break;
501
+ offset += 1;
502
+ }
503
+ } else while (offset < inputLength) {
504
+ const digit = input.charCodeAt(offset) - CharCodes.ZERO;
505
+ if (digit >>> 0 > 9) break;
506
+ cp = cp * 10 + digit;
507
+ offset += 1;
508
+ }
509
+ if (offset === digitStart) return 0;
510
+ if (offset < inputLength && input.charCodeAt(offset) === CharCodes.SEMI) offset += 1;
511
+ if (cp > 1114111) cp = 1114112;
512
+ let consumed = offset - numberStart;
513
+ if (consumed >= CONSUMED_OVERFLOW) {
514
+ longNumericConsumed = consumed;
515
+ consumed = CONSUMED_OVERFLOW;
516
+ }
517
+ return consumed << CONSUMED_SHIFT | cp;
518
+ }
519
+ /**
520
+ * Decode all entities in `input` using the HTML trie.
521
+ *
522
+ * Hard-wired to `htmlDecodeTree`: the inline root navigation below assumes
523
+ * the HTML root's jump-table shape, so this must not be generalized to
524
+ * other tries (the XML trie's dictionary root would silently match no
525
+ * entities — `decodeXML` has its own hand-coded fast path instead).
526
+ * @param input The string to decode.
527
+ * @param isStrict Only match semicolon-terminated entities.
528
+ * @param isAttribute Whether to apply attribute-specific parsing rules (disallowing certain non-semicolon terminators).
529
+ * @returns The decoded string.
530
+ */
531
+ function decodeWithTrie(input, isStrict, isAttribute) {
532
+ const decodeTree = htmlDecodeTree;
533
+ let offset = input.indexOf("&");
534
+ if (offset < 0) return input;
535
+ const inputLength = input.length;
536
+ let chunkStart = 0;
537
+ let result = "";
538
+ const root = decodeTree[0];
539
+ const rootJumpOffset = root & BinTrieFlags.JUMP_TABLE;
540
+ const rootBranchCount = (root & BinTrieFlags.BRANCH_LENGTH) >> 7;
541
+ do {
542
+ const entityStart = offset + 1;
543
+ const firstChar = input.charCodeAt(entityStart);
544
+ let consumed;
545
+ let value;
546
+ if (firstChar === CharCodes.NUM) {
547
+ const packed = parseNumericEntity(input, entityStart, inputLength);
548
+ consumed = unpackConsumed(packed);
549
+ if (isStrict && consumed > 0 && input.charCodeAt(entityStart + consumed - 1) !== CharCodes.SEMI) consumed = 0;
550
+ value = consumed === 0 ? "" : codePointToString(packed & CODE_POINT_MASK);
551
+ } else if (isAlpha(firstChar)) {
552
+ consumed = 0;
553
+ value = "";
554
+ const rootSlotIndex = firstChar - rootJumpOffset;
555
+ let nodeIndex;
556
+ if (rootSlotIndex >>> 0 < rootBranchCount) {
557
+ const stored = decodeTree[1 + rootSlotIndex];
558
+ nodeIndex = stored === 0 ? -1 : rootBranchCount + stored & 65535;
559
+ } else nodeIndex = -1;
560
+ let bestNodeIndex = 0;
561
+ let bestValueLength = 0;
562
+ let current = nodeIndex < 0 ? 0 : decodeTree[nodeIndex];
563
+ let index = entityStart + 1;
564
+ trie: while (index < inputLength) {
565
+ while ((current & (BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)) === 0 && (current & BinTrieFlags.JUMP_TABLE) !== 0) {
566
+ const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
567
+ const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
568
+ if (branchCount === 0) {
569
+ if (input.charCodeAt(index) !== jumpOffset) break trie;
570
+ nodeIndex += 1;
571
+ } else {
572
+ const slot = input.charCodeAt(index) - jumpOffset;
573
+ if (slot >>> 0 >= branchCount) break trie;
574
+ const stored = decodeTree[nodeIndex + 1 + slot];
575
+ if (stored === 0) break trie;
576
+ nodeIndex = nodeIndex + branchCount + stored & 65535;
577
+ }
578
+ current = decodeTree[nodeIndex];
579
+ index += 1;
580
+ if (index >= inputLength) break trie;
581
+ }
582
+ if ((current & (BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)) === BinTrieFlags.FLAG13) {
583
+ const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
584
+ if (input.charCodeAt(index) !== (current & BinTrieFlags.JUMP_TABLE)) break;
585
+ index += 1;
586
+ const remaining = runLength - 1;
587
+ let wordIndex = nodeIndex + 1;
588
+ let charIndexInPacked = 0;
589
+ for (; charIndexInPacked + 1 < remaining; charIndexInPacked += 2) {
590
+ const packed = decodeTree[wordIndex];
591
+ if (input.charCodeAt(index) !== (packed & 255)) break trie;
592
+ index += 1;
593
+ if (input.charCodeAt(index) !== (packed >> 8 & 255)) break trie;
594
+ index += 1;
595
+ wordIndex += 1;
596
+ }
597
+ if (charIndexInPacked < remaining) {
598
+ if (input.charCodeAt(index) !== (decodeTree[wordIndex] & 255)) break;
599
+ index += 1;
600
+ }
601
+ nodeIndex += 1 + (runLength >> 1);
602
+ current = decodeTree[nodeIndex];
603
+ continue;
604
+ }
605
+ const valueLength = current >>> 14;
606
+ const char = input.charCodeAt(index);
607
+ if (valueLength !== 0) {
608
+ if (char === CharCodes.SEMI) {
609
+ consumed = index - entityStart + 1;
610
+ value = valueLength === 1 ? String.fromCharCode(current & BinTrieFlags.VALUE_MASK) : readTrieValue(decodeTree, nodeIndex, valueLength);
611
+ break;
612
+ }
613
+ if (!isStrict && (current & BinTrieFlags.FLAG13) === 0) {
614
+ consumed = index - entityStart;
615
+ bestNodeIndex = nodeIndex;
616
+ bestValueLength = valueLength;
617
+ }
618
+ if (valueLength === 1) break;
619
+ }
620
+ const next = determineBranch(decodeTree, current, nodeIndex + (valueLength || 1), char);
621
+ if (next < 0) break;
622
+ nodeIndex = next;
623
+ current = decodeTree[nodeIndex];
624
+ index += 1;
625
+ }
626
+ if (value === "") {
627
+ const finalVL = current >>> 14;
628
+ if (finalVL !== 0 && !isStrict && (current & BinTrieFlags.FLAG13) === 0) {
629
+ consumed = index - entityStart;
630
+ bestNodeIndex = nodeIndex;
631
+ bestValueLength = finalVL;
632
+ }
633
+ if (consumed > 0) value = readTrieValue(decodeTree, bestNodeIndex, bestValueLength);
634
+ }
635
+ } else {
636
+ consumed = 0;
637
+ value = "";
638
+ }
639
+ if (consumed === 0 || isAttribute && firstChar !== CharCodes.NUM && input.charCodeAt(entityStart + consumed - 1) !== CharCodes.SEMI && entityStart + consumed < inputLength && isEntityInAttributeInvalidEnd(input.charCodeAt(entityStart + consumed))) offset = entityStart;
640
+ else {
641
+ if (chunkStart < offset) result += input.slice(chunkStart, offset);
642
+ result += value;
643
+ offset = chunkStart = entityStart + consumed;
644
+ }
645
+ if (input.charCodeAt(offset) !== CharCodes.AMP) offset = input.indexOf("&", offset);
646
+ } while (offset >= 0);
647
+ return result + input.slice(chunkStart);
648
+ }
562
649
  /**
563
650
  * Decodes an HTML string, requiring all entities to be terminated by a semicolon.
564
651
  * @param htmlString The string to decode.
565
652
  * @returns The decoded string.
566
653
  */
567
654
  function decodeHTMLStrict(htmlString) {
568
- return htmlDecoder(htmlString, DecodingMode.Strict);
655
+ return decodeWithTrie(htmlString, true, false);
569
656
  }
570
657
  //#endregion
571
658
  //#region src/common/utils.ts
@@ -1926,12 +2013,14 @@ var StateBlock = class {
1926
2013
  const s = this.src;
1927
2014
  for (let start = 0, pos = 0, indent = 0, offset = 0, len = s.length, indent_found = false; pos < len; pos++) {
1928
2015
  const ch = s.charCodeAt(pos);
1929
- if (!indent_found) if (isSpace(ch)) {
1930
- indent++;
1931
- if (ch === 9) offset += 4 - offset % 4;
1932
- else offset++;
1933
- continue;
1934
- } else indent_found = true;
2016
+ if (!indent_found) {
2017
+ if (isSpace(ch)) {
2018
+ indent++;
2019
+ if (ch === 9) offset += 4 - offset % 4;
2020
+ else offset++;
2021
+ continue;
2022
+ } else indent_found = true;
2023
+ }
1935
2024
  if (ch === 10 || pos === len - 1) {
1936
2025
  if (ch !== 10) pos++;
1937
2026
  this.bMarks.push(start);
@@ -1998,9 +2087,10 @@ var StateBlock = class {
1998
2087
  else last = this.eMarks[line];
1999
2088
  while (first < last && lineIndent < indent) {
2000
2089
  const ch = this.src.charCodeAt(first);
2001
- if (isSpace(ch)) if (ch === 9) lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;
2002
- else lineIndent++;
2003
- else if (first - lineStart < this.tShift[line]) lineIndent++;
2090
+ if (isSpace(ch)) {
2091
+ if (ch === 9) lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;
2092
+ else lineIndent++;
2093
+ } else if (first - lineStart < this.tShift[line]) lineIndent++;
2004
2094
  else break;
2005
2095
  first++;
2006
2096
  }
@@ -2027,13 +2117,15 @@ function escapedSplit(str) {
2027
2117
  let lastPos = 0;
2028
2118
  let current = "";
2029
2119
  while (pos < max) {
2030
- if (ch === 124) if (!isEscaped) {
2031
- result.push(current + str.substring(lastPos, pos));
2032
- current = "";
2033
- lastPos = pos + 1;
2034
- } else {
2035
- current += str.substring(lastPos, pos - 1);
2036
- lastPos = pos;
2120
+ if (ch === 124) {
2121
+ if (!isEscaped) {
2122
+ result.push(current + str.substring(lastPos, pos));
2123
+ current = "";
2124
+ lastPos = pos + 1;
2125
+ } else {
2126
+ current += str.substring(lastPos, pos - 1);
2127
+ lastPos = pos;
2128
+ }
2037
2129
  }
2038
2130
  isEscaped = ch === 92;
2039
2131
  pos++;
@@ -2065,8 +2157,10 @@ function table(state, startLine, endLine, silent) {
2065
2157
  const aligns = [];
2066
2158
  for (let i = 0; i < columns.length; i++) {
2067
2159
  const t = columns[i].trim();
2068
- if (!t) if (i === 0 || i === columns.length - 1) continue;
2069
- else return false;
2160
+ if (!t) {
2161
+ if (i === 0 || i === columns.length - 1) continue;
2162
+ else return false;
2163
+ }
2070
2164
  if (!/^:?-+:?$/.test(t)) return false;
2071
2165
  if (t.charCodeAt(t.length - 1) === 58) aligns.push(t.charCodeAt(0) === 58 ? "center" : "right");
2072
2166
  else if (t.charCodeAt(0) === 58) aligns.push("left");
@@ -2259,9 +2353,10 @@ function blockquote(state, startLine, endLine, silent) {
2259
2353
  state.bMarks[nextLine] = pos;
2260
2354
  while (pos < max) {
2261
2355
  const ch = state.src.charCodeAt(pos);
2262
- if (isSpace(ch)) if (ch === 9) offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;
2263
- else offset++;
2264
- else break;
2356
+ if (isSpace(ch)) {
2357
+ if (ch === 9) offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;
2358
+ else offset++;
2359
+ } else break;
2265
2360
  pos++;
2266
2361
  }
2267
2362
  lastLineEmpty = pos >= max;
@@ -2494,129 +2589,141 @@ function list(state, startLine, endLine, silent) {
2494
2589
  }
2495
2590
  //#endregion
2496
2591
  //#region src/rules_block/reference.ts
2592
+ var MAX_LABEL_LENGTH = 999;
2593
+ function countCodePoints(str) {
2594
+ let length = str.length;
2595
+ for (let i = 0; i < str.length - 1; i++) {
2596
+ const high = str.charCodeAt(i);
2597
+ if (high < 55296 || high > 56319) continue;
2598
+ const low = str.charCodeAt(i + 1);
2599
+ if (low >= 56320 && low <= 57343) {
2600
+ length--;
2601
+ i++;
2602
+ }
2603
+ }
2604
+ return length;
2605
+ }
2606
+ function lineEnd(state, line) {
2607
+ return Math.min(state.eMarks[line] + 1, state.src.length);
2608
+ }
2609
+ function getNextLinePos(state, nextLine) {
2610
+ const endLine = state.lineMax;
2611
+ if (nextLine >= endLine || state.isEmpty(nextLine)) return -1;
2612
+ let isContinuation = false;
2613
+ if (state.sCount[nextLine] - state.blkIndent > 3) isContinuation = true;
2614
+ if (state.sCount[nextLine] < 0) isContinuation = true;
2615
+ if (!isContinuation) {
2616
+ const terminatorRules = state.md.block.ruler.getRules("reference");
2617
+ const oldParentType = state.parentType;
2618
+ state.parentType = "reference";
2619
+ let terminate = false;
2620
+ for (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {
2621
+ terminate = true;
2622
+ break;
2623
+ }
2624
+ state.parentType = oldParentType;
2625
+ if (terminate) return -1;
2626
+ }
2627
+ return state.bMarks[nextLine] + state.tShift[nextLine];
2628
+ }
2497
2629
  function reference(state, startLine, _endLine, silent) {
2630
+ const src = state.src;
2498
2631
  let pos = state.bMarks[startLine] + state.tShift[startLine];
2499
- let max = state.eMarks[startLine];
2500
2632
  let nextLine = startLine + 1;
2501
2633
  if (state.sCount[startLine] - state.blkIndent >= 4) return false;
2502
- if (state.src.charCodeAt(pos) !== 91) return false;
2503
- function getNextLine(nextLine) {
2504
- const endLine = state.lineMax;
2505
- if (nextLine >= endLine || state.isEmpty(nextLine)) return null;
2506
- let isContinuation = false;
2507
- if (state.sCount[nextLine] - state.blkIndent > 3) isContinuation = true;
2508
- if (state.sCount[nextLine] < 0) isContinuation = true;
2509
- if (!isContinuation) {
2510
- const terminatorRules = state.md.block.ruler.getRules("reference");
2511
- const oldParentType = state.parentType;
2512
- state.parentType = "reference";
2513
- let terminate = false;
2514
- for (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {
2515
- terminate = true;
2516
- break;
2517
- }
2518
- state.parentType = oldParentType;
2519
- if (terminate) return null;
2520
- }
2521
- const pos = state.bMarks[nextLine] + state.tShift[nextLine];
2522
- const max = state.eMarks[nextLine];
2523
- return state.src.slice(pos, max + 1);
2524
- }
2525
- let str = state.src.slice(pos, max + 1);
2526
- max = str.length;
2634
+ if (src.charCodeAt(pos) !== 91) return false;
2635
+ let max = lineEnd(state, startLine);
2636
+ let rawLabel = "";
2527
2637
  let labelEnd = -1;
2528
- for (pos = 1; pos < max; pos++) {
2529
- const ch = str.charCodeAt(pos);
2638
+ let segmentStart = ++pos;
2639
+ while (pos < max) {
2640
+ if (rawLabel.length + pos - segmentStart > MAX_LABEL_LENGTH * 2) return false;
2641
+ let ch = src.charCodeAt(pos);
2530
2642
  if (ch === 91) return false;
2531
- else if (ch === 93) {
2643
+ if (ch === 93) {
2532
2644
  labelEnd = pos;
2533
2645
  break;
2534
- } else if (ch === 10) {
2535
- const lineContent = getNextLine(nextLine);
2536
- if (lineContent !== null) {
2537
- str += lineContent;
2538
- max = str.length;
2539
- nextLine++;
2540
- }
2541
- } else if (ch === 92) {
2542
- pos++;
2543
- if (pos < max && str.charCodeAt(pos) === 10) {
2544
- const lineContent = getNextLine(nextLine);
2545
- if (lineContent !== null) {
2546
- str += lineContent;
2547
- max = str.length;
2548
- nextLine++;
2549
- }
2550
- }
2551
2646
  }
2647
+ if (ch === 92) ch = src.charCodeAt(++pos);
2648
+ if (ch === 10 && pos < max) {
2649
+ const nextPos = getNextLinePos(state, nextLine);
2650
+ if (nextPos < 0) return false;
2651
+ rawLabel += src.slice(segmentStart, max);
2652
+ pos = segmentStart = nextPos;
2653
+ max = lineEnd(state, nextLine++);
2654
+ continue;
2655
+ }
2656
+ pos++;
2552
2657
  }
2553
- if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 58) return false;
2554
- for (pos = labelEnd + 2; pos < max; pos++) {
2555
- const ch = str.charCodeAt(pos);
2658
+ if (labelEnd < 0 || src.charCodeAt(labelEnd + 1) !== 58) return false;
2659
+ rawLabel += src.slice(segmentStart, labelEnd);
2660
+ if (rawLabel.length > MAX_LABEL_LENGTH && countCodePoints(rawLabel) > MAX_LABEL_LENGTH) return false;
2661
+ pos = labelEnd + 2;
2662
+ while (pos < max) {
2663
+ const ch = src.charCodeAt(pos);
2556
2664
  if (ch === 10) {
2557
- const lineContent = getNextLine(nextLine);
2558
- if (lineContent !== null) {
2559
- str += lineContent;
2560
- max = str.length;
2561
- nextLine++;
2562
- }
2563
- } else if (isSpace(ch)) {} else break;
2564
- }
2565
- const destRes = state.md.helpers.parseLinkDestination(str, pos, max);
2665
+ const nextPos = getNextLinePos(state, nextLine);
2666
+ if (nextPos < 0) break;
2667
+ pos = nextPos;
2668
+ max = lineEnd(state, nextLine++);
2669
+ } else if (isSpace(ch)) pos++;
2670
+ else break;
2671
+ }
2672
+ const destRes = state.md.helpers.parseLinkDestination(src, pos, max);
2566
2673
  if (!destRes.ok) return false;
2567
2674
  const href = state.md.normalizeLink(destRes.str);
2568
2675
  if (!state.md.validateLink(href)) return false;
2569
2676
  pos = destRes.pos;
2570
2677
  const destEndPos = pos;
2678
+ const destEndMax = max;
2571
2679
  const destEndLineNo = nextLine;
2572
- const start = pos;
2573
- for (; pos < max; pos++) {
2574
- const ch = str.charCodeAt(pos);
2680
+ while (pos < max) {
2681
+ const ch = src.charCodeAt(pos);
2575
2682
  if (ch === 10) {
2576
- const lineContent = getNextLine(nextLine);
2577
- if (lineContent !== null) {
2578
- str += lineContent;
2579
- max = str.length;
2580
- nextLine++;
2581
- }
2582
- } else if (isSpace(ch)) {} else break;
2583
- }
2584
- let titleRes = state.md.helpers.parseLinkTitle(str, pos, max);
2683
+ const nextPos = getNextLinePos(state, nextLine);
2684
+ if (nextPos < 0) break;
2685
+ pos = nextPos;
2686
+ max = lineEnd(state, nextLine++);
2687
+ } else if (isSpace(ch)) pos++;
2688
+ else break;
2689
+ }
2690
+ const titleStart = pos;
2691
+ let titleRes = state.md.helpers.parseLinkTitle(src, pos, max);
2585
2692
  while (titleRes.can_continue) {
2586
- const lineContent = getNextLine(nextLine);
2587
- if (lineContent === null) break;
2588
- str += lineContent;
2589
- pos = max;
2590
- max = str.length;
2591
- nextLine++;
2592
- titleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes);
2693
+ const nextPos = getNextLinePos(state, nextLine);
2694
+ if (nextPos < 0) break;
2695
+ pos = nextPos;
2696
+ max = lineEnd(state, nextLine++);
2697
+ titleRes = state.md.helpers.parseLinkTitle(src, pos, max, titleRes);
2593
2698
  }
2594
2699
  let title;
2595
- if (pos < max && start !== pos && titleRes.ok) {
2700
+ if (titleStart !== destEndPos && titleRes.ok) {
2596
2701
  title = titleRes.str;
2597
2702
  pos = titleRes.pos;
2598
2703
  } else {
2599
2704
  title = "";
2600
2705
  pos = destEndPos;
2706
+ max = destEndMax;
2601
2707
  nextLine = destEndLineNo;
2602
2708
  }
2603
2709
  while (pos < max) {
2604
- if (!isSpace(str.charCodeAt(pos))) break;
2710
+ if (!isSpace(src.charCodeAt(pos))) break;
2605
2711
  pos++;
2606
2712
  }
2607
- if (pos < max && str.charCodeAt(pos) !== 10) {
2713
+ if (pos < max && src.charCodeAt(pos) !== 10) {
2608
2714
  if (title) {
2609
2715
  title = "";
2610
2716
  pos = destEndPos;
2717
+ max = destEndMax;
2611
2718
  nextLine = destEndLineNo;
2612
2719
  while (pos < max) {
2613
- if (!isSpace(str.charCodeAt(pos))) break;
2720
+ if (!isSpace(src.charCodeAt(pos))) break;
2614
2721
  pos++;
2615
2722
  }
2616
2723
  }
2617
2724
  }
2618
- if (pos < max && str.charCodeAt(pos) !== 10) return false;
2619
- const label = normalizeReference(str.slice(1, labelEnd));
2725
+ if (pos < max && src.charCodeAt(pos) !== 10) return false;
2726
+ const label = normalizeReference(rawLabel);
2620
2727
  if (!label) return false;
2621
2728
  /* istanbul ignore if */
2622
2729
  if (silent) return true;
@@ -2704,7 +2811,7 @@ var html_blocks_default = [
2704
2811
  //#region src/common/html_re.ts
2705
2812
  var open_tag = `<[A-Za-z][A-Za-z0-9\\-]*(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*(?:[^"'=<>\`\\x00-\\x20]+|'[^']*'|"[^"]*"))?)*\\s*\\/?>`;
2706
2813
  var close_tag = "<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>";
2707
- var HTML_TAG_RE = new RegExp(`^(?:${open_tag}|${close_tag}|<!---?>|<!--(?:[^-]|-[^-]|--[^>])*-->|<[?][\\s\\S]*?[?]>|<![A-Za-z][^>]*>|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>)`);
2814
+ new RegExp(`^(?:${open_tag}|${close_tag}|<!---?>|<!--(?:[^-]|-[^-]|--[^>])*-->|<[?][\\s\\S]*?[?]>|<![A-Za-z][^>]*>|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>)`);
2708
2815
  var HTML_OPEN_CLOSE_TAG_RE = new RegExp(`^(?:${open_tag}|${close_tag})`);
2709
2816
  //#endregion
2710
2817
  //#region src/rules_block/html_block.ts
@@ -3030,6 +3137,7 @@ var StateInline = class {
3030
3137
  _defineProperty(this, "cache", {});
3031
3138
  _defineProperty(this, "backticks", {});
3032
3139
  _defineProperty(this, "backticksScanned", false);
3140
+ _defineProperty(this, "skipHtmlSpecial", false);
3033
3141
  _defineProperty(this, "linkLevel", 0);
3034
3142
  _defineProperty(this, "delimiters", []);
3035
3143
  _defineProperty(this, "_prev_delimiters", []);
@@ -3196,16 +3304,19 @@ function newline(state, silent) {
3196
3304
  if (state.src.charCodeAt(pos) !== 10) return false;
3197
3305
  const pmax = state.pending.length - 1;
3198
3306
  const max = state.posMax;
3199
- if (!silent) if (pmax >= 0 && state.pending.charCodeAt(pmax) === 32) if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 32) {
3200
- let ws = pmax - 1;
3201
- while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 32) ws--;
3202
- state.pending = state.pending.slice(0, ws);
3203
- state.push("hardbreak", "br", 0);
3204
- } else {
3205
- state.pending = state.pending.slice(0, -1);
3206
- state.push("softbreak", "br", 0);
3307
+ if (!silent) {
3308
+ if (pmax >= 0 && state.pending.charCodeAt(pmax) === 32) {
3309
+ if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 32) {
3310
+ let ws = pmax - 1;
3311
+ while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 32) ws--;
3312
+ state.pending = state.pending.slice(0, ws);
3313
+ state.push("hardbreak", "br", 0);
3314
+ } else {
3315
+ state.pending = state.pending.slice(0, -1);
3316
+ state.push("softbreak", "br", 0);
3317
+ }
3318
+ } else state.push("softbreak", "br", 0);
3207
3319
  }
3208
- else state.push("softbreak", "br", 0);
3209
3320
  pos++;
3210
3321
  while (pos < max && isSpace(state.src.charCodeAt(pos))) pos++;
3211
3322
  state.pos = pos;
@@ -3694,22 +3805,53 @@ function isLetter(ch) {
3694
3805
  const lc = ch | 32;
3695
3806
  return lc >= 97 && lc <= 122;
3696
3807
  }
3808
+ function scanSpecial(state, pos) {
3809
+ const src = state.src;
3810
+ let start;
3811
+ let terminator;
3812
+ if (src.startsWith("<!--", pos)) {
3813
+ if (src.startsWith(">", pos + 4)) return pos + 5;
3814
+ if (src.startsWith("->", pos + 4)) return pos + 6;
3815
+ start = pos + 4;
3816
+ terminator = "-->";
3817
+ } else if (src.startsWith("<![CDATA[", pos)) {
3818
+ start = pos + 9;
3819
+ terminator = "]]>";
3820
+ } else if (src.charCodeAt(pos + 1) === 63) {
3821
+ start = pos + 2;
3822
+ terminator = "?>";
3823
+ } else if (isLetter(src.charCodeAt(pos + 2))) {
3824
+ start = pos + 3;
3825
+ terminator = ">";
3826
+ } else return -1;
3827
+ if (state.skipHtmlSpecial) return -1;
3828
+ const end = src.indexOf(terminator, start);
3829
+ if (end < 0) {
3830
+ state.skipHtmlSpecial = true;
3831
+ return -1;
3832
+ }
3833
+ return end + terminator.length;
3834
+ }
3697
3835
  function html_inline(state, silent) {
3698
3836
  if (!state.md.options.html) return false;
3699
3837
  const max = state.posMax;
3700
3838
  const pos = state.pos;
3701
3839
  if (state.src.charCodeAt(pos) !== 60 || pos + 2 >= max) return false;
3840
+ let end;
3702
3841
  const ch = state.src.charCodeAt(pos + 1);
3703
- if (ch !== 33 && ch !== 63 && ch !== 47 && !isLetter(ch)) return false;
3704
- const match = state.src.slice(pos).match(HTML_TAG_RE);
3705
- if (!match) return false;
3842
+ if (ch === 33 || ch === 63) end = scanSpecial(state, pos);
3843
+ else if (ch === 47 || isLetter(ch)) {
3844
+ const match = state.src.slice(pos).match(HTML_OPEN_CLOSE_TAG_RE);
3845
+ end = match ? pos + match[0].length : -1;
3846
+ } else return false;
3847
+ if (end < 0) return false;
3706
3848
  if (!silent) {
3707
3849
  const token = state.push("html_inline", "", 0);
3708
- token.content = match[0];
3850
+ token.content = state.src.slice(pos, end);
3709
3851
  if (isLinkOpen(token.content)) state.linkLevel++;
3710
3852
  if (isLinkClose(token.content)) state.linkLevel--;
3711
3853
  }
3712
- state.pos += match[0].length;
3854
+ state.pos = end;
3713
3855
  return true;
3714
3856
  }
3715
3857
  //#endregion
@@ -4039,7 +4181,7 @@ var commonmark_default = {
4039
4181
  }
4040
4182
  };
4041
4183
  //#endregion
4042
- //#region \0@oxc-project+runtime@0.142.0/helpers/esm/objectSpread2.js
4184
+ //#region \0@oxc-project+runtime@0.154.0/helpers/esm/objectSpread2.js
4043
4185
  function ownKeys(e, r) {
4044
4186
  var t = Object.keys(e);
4045
4187
  if (Object.getOwnPropertySymbols) {