@loaders.gl/compression 3.3.0-alpha.5 → 3.3.0-alpha.7

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 (58) hide show
  1. package/dist/es5/brotli/decode.js +3 -423
  2. package/dist/es5/brotli/decode.js.map +1 -1
  3. package/dist/es5/bundle.js +0 -1
  4. package/dist/es5/bundle.js.map +1 -1
  5. package/dist/es5/compression-worker.js +3 -6
  6. package/dist/es5/compression-worker.js.map +1 -1
  7. package/dist/es5/index.js +16 -26
  8. package/dist/es5/index.js.map +1 -1
  9. package/dist/es5/lib/brotli-compression.js +2 -56
  10. package/dist/es5/lib/brotli-compression.js.map +1 -1
  11. package/dist/es5/lib/compression.js +15 -34
  12. package/dist/es5/lib/compression.js.map +1 -1
  13. package/dist/es5/lib/deflate-compression.js +40 -129
  14. package/dist/es5/lib/deflate-compression.js.map +1 -1
  15. package/dist/es5/lib/gzip-compression.js +4 -21
  16. package/dist/es5/lib/gzip-compression.js.map +1 -1
  17. package/dist/es5/lib/lz4-compression.js +10 -33
  18. package/dist/es5/lib/lz4-compression.js.map +1 -1
  19. package/dist/es5/lib/lzo-compression.js +0 -32
  20. package/dist/es5/lib/lzo-compression.js.map +1 -1
  21. package/dist/es5/lib/no-compression.js +4 -29
  22. package/dist/es5/lib/no-compression.js.map +1 -1
  23. package/dist/es5/lib/snappy-compression.js +0 -18
  24. package/dist/es5/lib/snappy-compression.js.map +1 -1
  25. package/dist/es5/lib/zstd-compression.js +0 -26
  26. package/dist/es5/lib/zstd-compression.js.map +1 -1
  27. package/dist/es5/types.js.map +1 -1
  28. package/dist/es5/workers/worker.js +6 -28
  29. package/dist/es5/workers/worker.js.map +1 -1
  30. package/dist/esm/brotli/decode.js +4 -422
  31. package/dist/esm/brotli/decode.js.map +1 -1
  32. package/dist/esm/bundle.js +1 -1
  33. package/dist/esm/bundle.js.map +1 -1
  34. package/dist/esm/compression-worker.js +3 -1
  35. package/dist/esm/compression-worker.js.map +1 -1
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/lib/brotli-compression.js +6 -26
  38. package/dist/esm/lib/brotli-compression.js.map +1 -1
  39. package/dist/esm/lib/compression.js +1 -7
  40. package/dist/esm/lib/compression.js.map +1 -1
  41. package/dist/esm/lib/deflate-compression.js +7 -42
  42. package/dist/esm/lib/deflate-compression.js.map +1 -1
  43. package/dist/esm/lib/gzip-compression.js +5 -7
  44. package/dist/esm/lib/gzip-compression.js.map +1 -1
  45. package/dist/esm/lib/lz4-compression.js +3 -19
  46. package/dist/esm/lib/lz4-compression.js.map +1 -1
  47. package/dist/esm/lib/lzo-compression.js +5 -13
  48. package/dist/esm/lib/lzo-compression.js.map +1 -1
  49. package/dist/esm/lib/no-compression.js +2 -11
  50. package/dist/esm/lib/no-compression.js.map +1 -1
  51. package/dist/esm/lib/snappy-compression.js +2 -9
  52. package/dist/esm/lib/snappy-compression.js.map +1 -1
  53. package/dist/esm/lib/zstd-compression.js +3 -12
  54. package/dist/esm/lib/zstd-compression.js.map +1 -1
  55. package/dist/esm/types.js.map +1 -1
  56. package/dist/esm/workers/worker.js +8 -10
  57. package/dist/esm/workers/worker.js.map +1 -1
  58. package/package.json +4 -4
@@ -1,3 +1,5 @@
1
+
2
+
1
3
  let Options;
2
4
 
3
5
  let makeBrotliDecode = () => {
@@ -19,57 +21,45 @@ let makeBrotliDecode = () => {
19
21
  {
20
22
  unpackCommandLookupTable(CMD_LOOKUP);
21
23
  }
22
-
23
24
  function log2floor(i) {
24
25
  let result = -1;
25
26
  let step = 16;
26
-
27
27
  while (step > 0) {
28
28
  if (i >>> step != 0) {
29
29
  result += step;
30
30
  i = i >>> step;
31
31
  }
32
-
33
32
  step = step >> 1;
34
33
  }
35
-
36
34
  return result + i;
37
35
  }
38
-
39
36
  function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) {
40
37
  return 16 + ndirect + 2 * (maxndistbits << npostfix);
41
38
  }
42
-
43
39
  function calculateDistanceAlphabetLimit(maxDistance, npostfix, ndirect) {
44
40
  if (maxDistance < ndirect + (2 << npostfix)) {
45
41
  throw 'maxDistance is too small';
46
42
  }
47
-
48
43
  let offset = (maxDistance - ndirect >> npostfix) + 4;
49
44
  let ndistbits = log2floor(offset) - 1;
50
45
  let group = ndistbits - 1 << 1 | offset >> ndistbits & 1;
51
46
  return (group - 1 << npostfix) + (1 << npostfix) + ndirect + 16;
52
47
  }
53
-
54
48
  function unpackCommandLookupTable(cmdLookup) {
55
49
  let insertLengthOffsets = new Int16Array(24);
56
50
  let copyLengthOffsets = new Int16Array(24);
57
51
  copyLengthOffsets[0] = 2;
58
-
59
52
  for (let i = 0; i < 23; ++i) {
60
53
  insertLengthOffsets[i + 1] = insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i]);
61
54
  copyLengthOffsets[i + 1] = copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i]);
62
55
  }
63
-
64
56
  for (let cmdCode = 0; cmdCode < 704; ++cmdCode) {
65
57
  let rangeIdx = cmdCode >>> 6;
66
58
  let distanceContextOffset = -4;
67
-
68
59
  if (rangeIdx >= 2) {
69
60
  rangeIdx -= 2;
70
61
  distanceContextOffset = 0;
71
62
  }
72
-
73
63
  let insertCode = (0x29850 >>> rangeIdx * 2 & 0x3) << 3 | cmdCode >>> 3 & 7;
74
64
  let copyCode = (0x26244 >>> rangeIdx * 2 & 0x3) << 3 | cmdCode & 7;
75
65
  let copyLengthOffset = copyLengthOffsets[copyCode];
@@ -81,97 +71,74 @@ let makeBrotliDecode = () => {
81
71
  cmdLookup[index + 3] = distanceContext;
82
72
  }
83
73
  }
84
-
85
74
  function decodeWindowBits(s) {
86
75
  let largeWindowEnabled = s.isLargeWindow;
87
76
  s.isLargeWindow = 0;
88
-
89
77
  if (s.bitOffset >= 16) {
90
78
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
91
79
  s.bitOffset -= 16;
92
80
  }
93
-
94
81
  if (readFewBits(s, 1) == 0) {
95
82
  return 16;
96
83
  }
97
-
98
84
  let n = readFewBits(s, 3);
99
-
100
85
  if (n != 0) {
101
86
  return 17 + n;
102
87
  }
103
-
104
88
  n = readFewBits(s, 3);
105
-
106
89
  if (n != 0) {
107
90
  if (n == 1) {
108
91
  if (largeWindowEnabled == 0) {
109
92
  return -1;
110
93
  }
111
-
112
94
  s.isLargeWindow = 1;
113
-
114
95
  if (readFewBits(s, 1) == 1) {
115
96
  return -1;
116
97
  }
117
-
118
98
  n = readFewBits(s, 6);
119
-
120
99
  if (n < 10 || n > 30) {
121
100
  return -1;
122
101
  }
123
-
124
102
  return n;
125
103
  } else {
126
104
  return 8 + n;
127
105
  }
128
106
  }
129
-
130
107
  return 17;
131
108
  }
132
-
133
109
  function enableEagerOutput(s) {
134
110
  if (s.runningState != 1) {
135
111
  throw 'State MUST be freshly initialized';
136
112
  }
137
-
138
113
  s.isEager = 1;
139
114
  }
140
-
141
115
  function enableLargeWindow(s) {
142
116
  if (s.runningState != 1) {
143
117
  throw 'State MUST be freshly initialized';
144
118
  }
145
-
146
119
  s.isLargeWindow = 1;
147
120
  }
148
-
149
121
  function attachDictionaryChunk(s, data) {
150
122
  if (s.runningState != 1) {
151
123
  throw 'State MUST be freshly initialized';
152
124
  }
153
-
154
125
  if (s.cdNumChunks == 0) {
155
126
  s.cdChunks = new Array(16);
156
127
  s.cdChunkOffsets = new Int32Array(16);
157
128
  s.cdBlockBits = -1;
158
129
  }
159
-
160
130
  if (s.cdNumChunks == 15) {
161
131
  throw 'Too many dictionary chunks';
162
132
  }
163
-
164
133
  s.cdChunks[s.cdNumChunks] = data;
165
134
  s.cdNumChunks++;
166
135
  s.cdTotalSize += data.length;
167
136
  s.cdChunkOffsets[s.cdNumChunks] = s.cdTotalSize;
168
137
  }
169
-
170
138
  function initState(s, input) {
171
139
  if (s.runningState != 0) {
172
140
  throw 'State MUST be uninitialized';
173
141
  }
174
-
175
142
  s.blockTrees = new Int32Array(3091);
176
143
  s.blockTrees[0] = 7;
177
144
  s.distRbIdx = 3;
@@ -182,85 +149,65 @@ let makeBrotliDecode = () => {
182
149
  initBitReader(s);
183
150
  s.runningState = 1;
184
151
  }
185
-
186
152
  function close(s) {
187
153
  if (s.runningState == 0) {
188
154
  throw 'State MUST be initialized';
189
155
  }
190
-
191
156
  if (s.runningState == 11) {
192
157
  return;
193
158
  }
194
-
195
159
  s.runningState = 11;
196
-
197
160
  if (s.input != null) {
198
161
  closeInput(s.input);
199
162
  s.input = null;
200
163
  }
201
164
  }
202
-
203
165
  function decodeVarLenUnsignedByte(s) {
204
166
  if (s.bitOffset >= 16) {
205
167
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
206
168
  s.bitOffset -= 16;
207
169
  }
208
-
209
170
  if (readFewBits(s, 1) != 0) {
210
171
  let n = readFewBits(s, 3);
211
-
212
172
  if (n == 0) {
213
173
  return 1;
214
174
  } else {
215
175
  return readFewBits(s, n) + (1 << n);
216
176
  }
217
177
  }
218
-
219
178
  return 0;
220
179
  }
221
-
222
180
  function decodeMetaBlockLength(s) {
223
181
  if (s.bitOffset >= 16) {
224
182
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
225
183
  s.bitOffset -= 16;
226
184
  }
227
-
228
185
  s.inputEnd = readFewBits(s, 1);
229
186
  s.metaBlockLength = 0;
230
187
  s.isUncompressed = 0;
231
188
  s.isMetadata = 0;
232
-
233
189
  if (s.inputEnd != 0 && readFewBits(s, 1) != 0) {
234
190
  return;
235
191
  }
236
-
237
192
  let sizeNibbles = readFewBits(s, 2) + 4;
238
-
239
193
  if (sizeNibbles == 7) {
240
194
  s.isMetadata = 1;
241
-
242
195
  if (readFewBits(s, 1) != 0) {
243
196
  throw 'Corrupted reserved bit';
244
197
  }
245
-
246
198
  let sizeBytes = readFewBits(s, 2);
247
-
248
199
  if (sizeBytes == 0) {
249
200
  return;
250
201
  }
251
-
252
202
  for (let i = 0; i < sizeBytes; i++) {
253
203
  if (s.bitOffset >= 16) {
254
204
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
255
205
  s.bitOffset -= 16;
256
206
  }
257
-
258
207
  let bits = readFewBits(s, 8);
259
-
260
208
  if (bits == 0 && i + 1 == sizeBytes && sizeBytes > 1) {
261
209
  throw 'Exuberant nibble';
262
210
  }
263
-
264
211
  s.metaBlockLength |= bits << i * 8;
265
212
  }
266
213
  } else {
@@ -269,87 +216,67 @@ let makeBrotliDecode = () => {
269
216
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
270
217
  s.bitOffset -= 16;
271
218
  }
272
-
273
219
  let bits = readFewBits(s, 4);
274
-
275
220
  if (bits == 0 && i + 1 == sizeNibbles && sizeNibbles > 4) {
276
221
  throw 'Exuberant nibble';
277
222
  }
278
-
279
223
  s.metaBlockLength |= bits << i * 4;
280
224
  }
281
225
  }
282
-
283
226
  s.metaBlockLength++;
284
-
285
227
  if (s.inputEnd == 0) {
286
228
  s.isUncompressed = readFewBits(s, 1);
287
229
  }
288
230
  }
289
-
290
231
  function readSymbol(tableGroup, tableIdx, s) {
291
232
  let offset = tableGroup[tableIdx];
292
233
  let val = s.accumulator32 >>> s.bitOffset;
293
234
  offset += val & 0xff;
294
235
  let bits = tableGroup[offset] >> 16;
295
236
  let sym = tableGroup[offset] & 0xffff;
296
-
297
237
  if (bits <= 8) {
298
238
  s.bitOffset += bits;
299
239
  return sym;
300
240
  }
301
-
302
241
  offset += sym;
303
242
  let mask = (1 << bits) - 1;
304
243
  offset += (val & mask) >>> 8;
305
244
  s.bitOffset += (tableGroup[offset] >> 16) + 8;
306
245
  return tableGroup[offset] & 0xffff;
307
246
  }
308
-
309
247
  function readBlockLength(tableGroup, tableIdx, s) {
310
248
  if (s.bitOffset >= 16) {
311
249
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
312
250
  s.bitOffset -= 16;
313
251
  }
314
-
315
252
  let code = readSymbol(tableGroup, tableIdx, s);
316
253
  let n = BLOCK_LENGTH_N_BITS[code];
317
-
318
254
  if (s.bitOffset >= 16) {
319
255
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
320
256
  s.bitOffset -= 16;
321
257
  }
322
-
323
258
  return BLOCK_LENGTH_OFFSET[code] + (n <= 16 ? readFewBits(s, n) : readManyBits(s, n));
324
259
  }
325
-
326
260
  function moveToFront(v, index) {
327
261
  let value = v[index];
328
-
329
262
  for (; index > 0; index--) {
330
263
  v[index] = v[index - 1];
331
264
  }
332
-
333
265
  v[0] = value;
334
266
  }
335
-
336
267
  function inverseMoveToFrontTransform(v, vLen) {
337
268
  let mtf = new Int32Array(256);
338
-
339
269
  for (let i = 0; i < 256; i++) {
340
270
  mtf[i] = i;
341
271
  }
342
-
343
272
  for (let i = 0; i < vLen; i++) {
344
273
  let index = v[i] & 0xff;
345
274
  v[i] = mtf[index];
346
-
347
275
  if (index != 0) {
348
276
  moveToFront(mtf, index);
349
277
  }
350
278
  }
351
279
  }
352
-
353
280
  function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) {
354
281
  let symbol = 0;
355
282
  let prevCodeLen = 8;
@@ -359,25 +286,20 @@ let makeBrotliDecode = () => {
359
286
  let table = new Int32Array(32 + 1);
360
287
  let tableIdx = table.length - 1;
361
288
  buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18);
362
-
363
289
  while (symbol < numSymbols && space > 0) {
364
290
  if (s.halfOffset > 2030) {
365
291
  doReadMoreInput(s);
366
292
  }
367
-
368
293
  if (s.bitOffset >= 16) {
369
294
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
370
295
  s.bitOffset -= 16;
371
296
  }
372
-
373
297
  let p = s.accumulator32 >>> s.bitOffset & 31;
374
298
  s.bitOffset += table[p] >> 16;
375
299
  let codeLen = table[p] & 0xffff;
376
-
377
300
  if (codeLen < 16) {
378
301
  repeat = 0;
379
302
  codeLengths[symbol++] = codeLen;
380
-
381
303
  if (codeLen != 0) {
382
304
  prevCodeLen = codeLen;
383
305
  space -= 32768 >> codeLen;
@@ -385,52 +307,40 @@ let makeBrotliDecode = () => {
385
307
  } else {
386
308
  let extraBits = codeLen - 14;
387
309
  let newLen = 0;
388
-
389
310
  if (codeLen == 16) {
390
311
  newLen = prevCodeLen;
391
312
  }
392
-
393
313
  if (repeatCodeLen != newLen) {
394
314
  repeat = 0;
395
315
  repeatCodeLen = newLen;
396
316
  }
397
-
398
317
  let oldRepeat = repeat;
399
-
400
318
  if (repeat > 0) {
401
319
  repeat -= 2;
402
320
  repeat <<= extraBits;
403
321
  }
404
-
405
322
  if (s.bitOffset >= 16) {
406
323
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
407
324
  s.bitOffset -= 16;
408
325
  }
409
-
410
326
  repeat += readFewBits(s, extraBits) + 3;
411
327
  let repeatDelta = repeat - oldRepeat;
412
-
413
328
  if (symbol + repeatDelta > numSymbols) {
414
329
  throw 'symbol + repeatDelta > numSymbols';
415
330
  }
416
-
417
331
  for (let i = 0; i < repeatDelta; i++) {
418
332
  codeLengths[symbol++] = repeatCodeLen;
419
333
  }
420
-
421
334
  if (repeatCodeLen != 0) {
422
335
  space -= repeatDelta << 15 - repeatCodeLen;
423
336
  }
424
337
  }
425
338
  }
426
-
427
339
  if (space != 0) {
428
340
  throw 'Unused space';
429
341
  }
430
-
431
342
  codeLengths.fill(0, symbol, numSymbols);
432
343
  }
433
-
434
344
  function checkDupes(symbols, length) {
435
345
  for (let i = 0; i < length - 1; ++i) {
436
346
  for (let j = i + 1; j < length; ++j) {
@@ -440,166 +350,130 @@ let makeBrotliDecode = () => {
440
350
  }
441
351
  }
442
352
  }
443
-
444
353
  function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {
445
354
  let codeLengths = new Int32Array(alphabetSizeLimit);
446
355
  let symbols = new Int32Array(4);
447
356
  let maxBits = 1 + log2floor(alphabetSizeMax - 1);
448
357
  let numSymbols = readFewBits(s, 2) + 1;
449
-
450
358
  for (let i = 0; i < numSymbols; i++) {
451
359
  if (s.bitOffset >= 16) {
452
360
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
453
361
  s.bitOffset -= 16;
454
362
  }
455
-
456
363
  let symbol = readFewBits(s, maxBits);
457
-
458
364
  if (symbol >= alphabetSizeLimit) {
459
365
  throw "Can't readHuffmanCode";
460
366
  }
461
-
462
367
  symbols[i] = symbol;
463
368
  }
464
-
465
369
  checkDupes(symbols, numSymbols);
466
370
  let histogramId = numSymbols;
467
-
468
371
  if (numSymbols == 4) {
469
372
  histogramId += readFewBits(s, 1);
470
373
  }
471
-
472
374
  switch (histogramId) {
473
375
  case 1:
474
376
  codeLengths[symbols[0]] = 1;
475
377
  break;
476
-
477
378
  case 2:
478
379
  codeLengths[symbols[0]] = 1;
479
380
  codeLengths[symbols[1]] = 1;
480
381
  break;
481
-
482
382
  case 3:
483
383
  codeLengths[symbols[0]] = 1;
484
384
  codeLengths[symbols[1]] = 2;
485
385
  codeLengths[symbols[2]] = 2;
486
386
  break;
487
-
488
387
  case 4:
489
388
  codeLengths[symbols[0]] = 2;
490
389
  codeLengths[symbols[1]] = 2;
491
390
  codeLengths[symbols[2]] = 2;
492
391
  codeLengths[symbols[3]] = 2;
493
392
  break;
494
-
495
393
  case 5:
496
394
  codeLengths[symbols[0]] = 1;
497
395
  codeLengths[symbols[1]] = 2;
498
396
  codeLengths[symbols[2]] = 3;
499
397
  codeLengths[symbols[3]] = 3;
500
398
  break;
501
-
502
399
  default:
503
400
  break;
504
401
  }
505
-
506
402
  return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);
507
403
  }
508
-
509
404
  function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) {
510
405
  let codeLengths = new Int32Array(alphabetSizeLimit);
511
406
  let codeLengthCodeLengths = new Int32Array(18);
512
407
  let space = 32;
513
408
  let numCodes = 0;
514
-
515
409
  for (let i = skip; i < 18 && space > 0; i++) {
516
410
  let codeLenIdx = CODE_LENGTH_CODE_ORDER[i];
517
-
518
411
  if (s.bitOffset >= 16) {
519
412
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
520
413
  s.bitOffset -= 16;
521
414
  }
522
-
523
415
  let p = s.accumulator32 >>> s.bitOffset & 15;
524
416
  s.bitOffset += FIXED_TABLE[p] >> 16;
525
417
  let v = FIXED_TABLE[p] & 0xffff;
526
418
  codeLengthCodeLengths[codeLenIdx] = v;
527
-
528
419
  if (v != 0) {
529
420
  space -= 32 >> v;
530
421
  numCodes++;
531
422
  }
532
423
  }
533
-
534
424
  if (space != 0 && numCodes != 1) {
535
425
  throw 'Corrupted Huffman code histogram';
536
426
  }
537
-
538
427
  readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s);
539
428
  return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);
540
429
  }
541
-
542
430
  function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {
543
431
  if (s.halfOffset > 2030) {
544
432
  doReadMoreInput(s);
545
433
  }
546
-
547
434
  if (s.bitOffset >= 16) {
548
435
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
549
436
  s.bitOffset -= 16;
550
437
  }
551
-
552
438
  let simpleCodeOrSkip = readFewBits(s, 2);
553
-
554
439
  if (simpleCodeOrSkip == 1) {
555
440
  return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s);
556
441
  } else {
557
442
  return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s);
558
443
  }
559
444
  }
560
-
561
445
  function decodeContextMap(contextMapSize, contextMap, s) {
562
446
  if (s.halfOffset > 2030) {
563
447
  doReadMoreInput(s);
564
448
  }
565
-
566
449
  let numTrees = decodeVarLenUnsignedByte(s) + 1;
567
-
568
450
  if (numTrees == 1) {
569
451
  contextMap.fill(0, 0, contextMapSize);
570
452
  return numTrees;
571
453
  }
572
-
573
454
  if (s.bitOffset >= 16) {
574
455
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
575
456
  s.bitOffset -= 16;
576
457
  }
577
-
578
458
  let useRleForZeros = readFewBits(s, 1);
579
459
  let maxRunLengthPrefix = 0;
580
-
581
460
  if (useRleForZeros != 0) {
582
461
  maxRunLengthPrefix = readFewBits(s, 4) + 1;
583
462
  }
584
-
585
463
  let alphabetSize = numTrees + maxRunLengthPrefix;
586
464
  let tableSize = MAX_HUFFMAN_TABLE_SIZE[alphabetSize + 31 >> 5];
587
465
  let table = new Int32Array(tableSize + 1);
588
466
  let tableIdx = table.length - 1;
589
467
  readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s);
590
-
591
468
  for (let i = 0; i < contextMapSize;) {
592
469
  if (s.halfOffset > 2030) {
593
470
  doReadMoreInput(s);
594
471
  }
595
-
596
472
  if (s.bitOffset >= 16) {
597
473
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
598
474
  s.bitOffset -= 16;
599
475
  }
600
-
601
476
  let code = readSymbol(table, tableIdx, s);
602
-
603
477
  if (code == 0) {
604
478
  contextMap[i] = 0;
605
479
  i++;
@@ -608,14 +482,11 @@ let makeBrotliDecode = () => {
608
482
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
609
483
  s.bitOffset -= 16;
610
484
  }
611
-
612
485
  let reps = (1 << code) + readFewBits(s, code);
613
-
614
486
  while (reps != 0) {
615
487
  if (i >= contextMapSize) {
616
488
  throw 'Corrupted context map';
617
489
  }
618
-
619
490
  contextMap[i] = 0;
620
491
  i++;
621
492
  reps--;
@@ -625,31 +496,24 @@ let makeBrotliDecode = () => {
625
496
  i++;
626
497
  }
627
498
  }
628
-
629
499
  if (s.bitOffset >= 16) {
630
500
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
631
501
  s.bitOffset -= 16;
632
502
  }
633
-
634
503
  if (readFewBits(s, 1) == 1) {
635
504
  inverseMoveToFrontTransform(contextMap, contextMapSize);
636
505
  }
637
-
638
506
  return numTrees;
639
507
  }
640
-
641
508
  function decodeBlockTypeAndLength(s, treeType, numBlockTypes) {
642
509
  let ringBuffers = s.rings;
643
510
  let offset = 4 + treeType * 2;
644
-
645
511
  if (s.bitOffset >= 16) {
646
512
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
647
513
  s.bitOffset -= 16;
648
514
  }
649
-
650
515
  let blockType = readSymbol(s.blockTrees, 2 * treeType, s);
651
516
  let result = readBlockLength(s.blockTrees, 2 * treeType + 1, s);
652
-
653
517
  if (blockType == 1) {
654
518
  blockType = ringBuffers[offset + 1] + 1;
655
519
  } else if (blockType == 0) {
@@ -657,16 +521,13 @@ let makeBrotliDecode = () => {
657
521
  } else {
658
522
  blockType -= 2;
659
523
  }
660
-
661
524
  if (blockType >= numBlockTypes) {
662
525
  blockType -= numBlockTypes;
663
526
  }
664
-
665
527
  ringBuffers[offset] = ringBuffers[offset + 1];
666
528
  ringBuffers[offset + 1] = blockType;
667
529
  return result;
668
530
  }
669
-
670
531
  function decodeLiteralBlockSwitch(s) {
671
532
  s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes);
672
533
  let literalBlockType = s.rings[5];
@@ -676,99 +537,76 @@ let makeBrotliDecode = () => {
676
537
  s.contextLookupOffset1 = contextMode << 9;
677
538
  s.contextLookupOffset2 = s.contextLookupOffset1 + 256;
678
539
  }
679
-
680
540
  function decodeCommandBlockSwitch(s) {
681
541
  s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes);
682
542
  s.commandTreeIdx = s.rings[7];
683
543
  }
684
-
685
544
  function decodeDistanceBlockSwitch(s) {
686
545
  s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes);
687
546
  s.distContextMapSlice = s.rings[9] << 2;
688
547
  }
689
-
690
548
  function maybeReallocateRingBuffer(s) {
691
549
  let newSize = s.maxRingBufferSize;
692
-
693
550
  if (newSize > s.expectedTotalSize) {
694
551
  let minimalNewSize = s.expectedTotalSize;
695
-
696
552
  while (newSize >> 1 > minimalNewSize) {
697
553
  newSize >>= 1;
698
554
  }
699
-
700
555
  if (s.inputEnd == 0 && newSize < 16384 && s.maxRingBufferSize >= 16384) {
701
556
  newSize = 16384;
702
557
  }
703
558
  }
704
-
705
559
  if (newSize <= s.ringBufferSize) {
706
560
  return;
707
561
  }
708
-
709
562
  let ringBufferSizeWithSlack = newSize + 37;
710
563
  let newBuffer = new Int8Array(ringBufferSizeWithSlack);
711
-
712
564
  if (s.ringBuffer.length != 0) {
713
565
  newBuffer.set(s.ringBuffer.subarray(0, 0 + s.ringBufferSize), 0);
714
566
  }
715
-
716
567
  s.ringBuffer = newBuffer;
717
568
  s.ringBufferSize = newSize;
718
569
  }
719
-
720
570
  function readNextMetablockHeader(s) {
721
571
  if (s.inputEnd != 0) {
722
572
  s.nextRunningState = 10;
723
573
  s.runningState = 12;
724
574
  return;
725
575
  }
726
-
727
576
  s.literalTreeGroup = new Int32Array(0);
728
577
  s.commandTreeGroup = new Int32Array(0);
729
578
  s.distanceTreeGroup = new Int32Array(0);
730
-
731
579
  if (s.halfOffset > 2030) {
732
580
  doReadMoreInput(s);
733
581
  }
734
-
735
582
  decodeMetaBlockLength(s);
736
-
737
583
  if (s.metaBlockLength == 0 && s.isMetadata == 0) {
738
584
  return;
739
585
  }
740
-
741
586
  if (s.isUncompressed != 0 || s.isMetadata != 0) {
742
587
  jumpToByteBoundary(s);
743
588
  s.runningState = s.isMetadata != 0 ? 5 : 6;
744
589
  } else {
745
590
  s.runningState = 3;
746
591
  }
747
-
748
592
  if (s.isMetadata != 0) {
749
593
  return;
750
594
  }
751
-
752
595
  s.expectedTotalSize += s.metaBlockLength;
753
-
754
596
  if (s.expectedTotalSize > 1 << 30) {
755
597
  s.expectedTotalSize = 1 << 30;
756
598
  }
757
-
758
599
  if (s.ringBufferSize < s.maxRingBufferSize) {
759
600
  maybeReallocateRingBuffer(s);
760
601
  }
761
602
  }
762
-
763
603
  function readMetablockPartition(s, treeType, numBlockTypes) {
764
604
  let offset = s.blockTrees[2 * treeType];
765
-
766
605
  if (numBlockTypes <= 1) {
767
606
  s.blockTrees[2 * treeType + 1] = offset;
768
607
  s.blockTrees[2 * treeType + 2] = offset;
769
608
  return 1 << 28;
770
609
  }
771
-
772
610
  let blockTypeAlphabetSize = numBlockTypes + 2;
773
611
  offset += readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s);
774
612
  s.blockTrees[2 * treeType + 1] = offset;
@@ -777,7 +615,6 @@ let makeBrotliDecode = () => {
777
615
  s.blockTrees[2 * treeType + 2] = offset;
778
616
  return readBlockLength(s.blockTrees, 2 * treeType + 1, s);
779
617
  }
780
-
781
618
  function calculateDistanceLut(s, alphabetSizeLimit) {
782
619
  let distExtraBits = s.distExtraBits;
783
620
  let distOffset = s.distOffset;
@@ -787,27 +624,22 @@ let makeBrotliDecode = () => {
787
624
  let bits = 1;
788
625
  let half = 0;
789
626
  let i = 16;
790
-
791
627
  for (let j = 0; j < ndirect; ++j) {
792
628
  distExtraBits[i] = 0;
793
629
  distOffset[i] = j + 1;
794
630
  ++i;
795
631
  }
796
-
797
632
  while (i < alphabetSizeLimit) {
798
633
  let base = ndirect + ((2 + half << bits) - 4 << npostfix) + 1;
799
-
800
634
  for (let j = 0; j < postfix; ++j) {
801
635
  distExtraBits[i] = bits;
802
636
  distOffset[i] = base + j;
803
637
  ++i;
804
638
  }
805
-
806
639
  bits = bits + half;
807
640
  half = half ^ 1;
808
641
  }
809
642
  }
810
-
811
643
  function readMetablockHuffmanCodesAndContextMaps(s) {
812
644
  s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1;
813
645
  s.literalBlockLength = readMetablockPartition(s, 0, s.numLiteralBlockTypes);
@@ -815,60 +647,48 @@ let makeBrotliDecode = () => {
815
647
  s.commandBlockLength = readMetablockPartition(s, 1, s.numCommandBlockTypes);
816
648
  s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1;
817
649
  s.distanceBlockLength = readMetablockPartition(s, 2, s.numDistanceBlockTypes);
818
-
819
650
  if (s.halfOffset > 2030) {
820
651
  doReadMoreInput(s);
821
652
  }
822
-
823
653
  if (s.bitOffset >= 16) {
824
654
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
825
655
  s.bitOffset -= 16;
826
656
  }
827
-
828
657
  s.distancePostfixBits = readFewBits(s, 2);
829
658
  s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits;
830
659
  s.contextModes = new Int8Array(s.numLiteralBlockTypes);
831
-
832
660
  for (let i = 0; i < s.numLiteralBlockTypes;) {
833
661
  let limit = min(i + 96, s.numLiteralBlockTypes);
834
-
835
662
  for (; i < limit; ++i) {
836
663
  if (s.bitOffset >= 16) {
837
664
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
838
665
  s.bitOffset -= 16;
839
666
  }
840
-
841
667
  s.contextModes[i] = readFewBits(s, 2);
842
668
  }
843
-
844
669
  if (s.halfOffset > 2030) {
845
670
  doReadMoreInput(s);
846
671
  }
847
672
  }
848
-
849
673
  s.contextMap = new Int8Array(s.numLiteralBlockTypes << 6);
850
674
  let numLiteralTrees = decodeContextMap(s.numLiteralBlockTypes << 6, s.contextMap, s);
851
675
  s.trivialLiteralContext = 1;
852
-
853
676
  for (let j = 0; j < s.numLiteralBlockTypes << 6; j++) {
854
677
  if (s.contextMap[j] != j >> 6) {
855
678
  s.trivialLiteralContext = 0;
856
679
  break;
857
680
  }
858
681
  }
859
-
860
682
  s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2);
861
683
  let numDistTrees = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s);
862
684
  s.literalTreeGroup = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s);
863
685
  s.commandTreeGroup = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s);
864
686
  let distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24);
865
687
  let distanceAlphabetSizeLimit = distanceAlphabetSizeMax;
866
-
867
688
  if (s.isLargeWindow == 1) {
868
689
  distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62);
869
690
  distanceAlphabetSizeLimit = calculateDistanceAlphabetLimit(0x7ffffffc, s.distancePostfixBits, s.numDirectDistanceCodes);
870
691
  }
871
-
872
692
  s.distanceTreeGroup = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s);
873
693
  calculateDistanceLut(s, distanceAlphabetSizeLimit);
874
694
  s.contextMapSlice = 0;
@@ -884,157 +704,122 @@ let makeBrotliDecode = () => {
884
704
  s.rings[8] = 1;
885
705
  s.rings[9] = 0;
886
706
  }
887
-
888
707
  function copyUncompressedData(s) {
889
708
  let ringBuffer = s.ringBuffer;
890
-
891
709
  if (s.metaBlockLength <= 0) {
892
710
  reload(s);
893
711
  s.runningState = 2;
894
712
  return;
895
713
  }
896
-
897
714
  let chunkLength = min(s.ringBufferSize - s.pos, s.metaBlockLength);
898
715
  copyRawBytes(s, ringBuffer, s.pos, chunkLength);
899
716
  s.metaBlockLength -= chunkLength;
900
717
  s.pos += chunkLength;
901
-
902
718
  if (s.pos == s.ringBufferSize) {
903
719
  s.nextRunningState = 6;
904
720
  s.runningState = 12;
905
721
  return;
906
722
  }
907
-
908
723
  reload(s);
909
724
  s.runningState = 2;
910
725
  }
911
-
912
726
  function writeRingBuffer(s) {
913
727
  let toWrite = min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten);
914
-
915
728
  if (toWrite != 0) {
916
729
  s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed);
917
730
  s.outputUsed += toWrite;
918
731
  s.ringBufferBytesWritten += toWrite;
919
732
  }
920
-
921
733
  if (s.outputUsed < s.outputLength) {
922
734
  return 1;
923
735
  } else {
924
736
  return 0;
925
737
  }
926
738
  }
927
-
928
739
  function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s) {
929
740
  let maxTableSize = MAX_HUFFMAN_TABLE_SIZE[alphabetSizeLimit + 31 >> 5];
930
741
  let group = new Int32Array(n + n * maxTableSize);
931
742
  let next = n;
932
-
933
743
  for (let i = 0; i < n; ++i) {
934
744
  group[i] = next;
935
745
  next += readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s);
936
746
  }
937
-
938
747
  return group;
939
748
  }
940
-
941
749
  function calculateFence(s) {
942
750
  let result = s.ringBufferSize;
943
-
944
751
  if (s.isEager != 0) {
945
752
  result = min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed);
946
753
  }
947
-
948
754
  return result;
949
755
  }
950
-
951
756
  function doUseDictionary(s, fence) {
952
757
  if (s.distance > 0x7ffffffc) {
953
758
  throw 'Invalid backward reference';
954
759
  }
955
-
956
760
  let address = s.distance - s.maxDistance - 1 - s.cdTotalSize;
957
-
958
761
  if (address < 0) {
959
762
  initializeCompoundDictionaryCopy(s, -address - 1, s.copyLength);
960
763
  s.runningState = 14;
961
764
  } else {
962
765
  let dictionaryData = data;
963
766
  let wordLength = s.copyLength;
964
-
965
767
  if (wordLength > 31) {
966
768
  throw 'Invalid backward reference';
967
769
  }
968
-
969
770
  let shift = sizeBits[wordLength];
970
-
971
771
  if (shift == 0) {
972
772
  throw 'Invalid backward reference';
973
773
  }
974
-
975
774
  let offset = offsets[wordLength];
976
775
  let mask = (1 << shift) - 1;
977
776
  let wordIdx = address & mask;
978
777
  let transformIdx = address >>> shift;
979
778
  offset += wordIdx * wordLength;
980
779
  let transforms = RFC_TRANSFORMS;
981
-
982
780
  if (transformIdx >= transforms.numTransforms) {
983
781
  throw 'Invalid backward reference';
984
782
  }
985
-
986
783
  let len = transformDictionaryWord(s.ringBuffer, s.pos, dictionaryData, offset, wordLength, transforms, transformIdx);
987
784
  s.pos += len;
988
785
  s.metaBlockLength -= len;
989
-
990
786
  if (s.pos >= fence) {
991
787
  s.nextRunningState = 4;
992
788
  s.runningState = 12;
993
789
  return;
994
790
  }
995
-
996
791
  s.runningState = 4;
997
792
  }
998
793
  }
999
-
1000
794
  function initializeCompoundDictionary(s) {
1001
795
  s.cdBlockMap = new Int8Array(256);
1002
796
  let blockBits = 8;
1003
-
1004
797
  while (s.cdTotalSize - 1 >>> blockBits != 0) {
1005
798
  blockBits++;
1006
799
  }
1007
-
1008
800
  blockBits -= 8;
1009
801
  s.cdBlockBits = blockBits;
1010
802
  let cursor = 0;
1011
803
  let index = 0;
1012
-
1013
804
  while (cursor < s.cdTotalSize) {
1014
805
  while (s.cdChunkOffsets[index + 1] < cursor) {
1015
806
  index++;
1016
807
  }
1017
-
1018
808
  s.cdBlockMap[cursor >>> blockBits] = index;
1019
809
  cursor += 1 << blockBits;
1020
810
  }
1021
811
  }
1022
-
1023
812
  function initializeCompoundDictionaryCopy(s, address, length) {
1024
813
  if (s.cdBlockBits == -1) {
1025
814
  initializeCompoundDictionary(s);
1026
815
  }
1027
-
1028
816
  let index = s.cdBlockMap[address >>> s.cdBlockBits];
1029
-
1030
817
  while (address >= s.cdChunkOffsets[index + 1]) {
1031
818
  index++;
1032
819
  }
1033
-
1034
820
  if (s.cdTotalSize > address + length) {
1035
821
  throw 'Invalid backward reference';
1036
822
  }
1037
-
1038
823
  s.distRbIdx = s.distRbIdx + 1 & 0x3;
1039
824
  s.rings[s.distRbIdx] = s.distance;
1040
825
  s.metaBlockLength -= length;
@@ -1043,152 +828,119 @@ let makeBrotliDecode = () => {
1043
828
  s.cdBrLength = length;
1044
829
  s.cdBrCopied = 0;
1045
830
  }
1046
-
1047
831
  function copyFromCompoundDictionary(s, fence) {
1048
832
  let pos = s.pos;
1049
833
  let origPos = pos;
1050
-
1051
834
  while (s.cdBrLength != s.cdBrCopied) {
1052
835
  let space = fence - pos;
1053
836
  let chunkLength = s.cdChunkOffsets[s.cdBrIndex + 1] - s.cdChunkOffsets[s.cdBrIndex];
1054
837
  let remChunkLength = chunkLength - s.cdBrOffset;
1055
838
  let length = s.cdBrLength - s.cdBrCopied;
1056
-
1057
839
  if (length > remChunkLength) {
1058
840
  length = remChunkLength;
1059
841
  }
1060
-
1061
842
  if (length > space) {
1062
843
  length = space;
1063
844
  }
1064
-
1065
845
  copyBytes(s.ringBuffer, pos, s.cdChunks[s.cdBrIndex], s.cdBrOffset, s.cdBrOffset + length);
1066
846
  pos += length;
1067
847
  s.cdBrOffset += length;
1068
848
  s.cdBrCopied += length;
1069
-
1070
849
  if (length == remChunkLength) {
1071
850
  s.cdBrIndex++;
1072
851
  s.cdBrOffset = 0;
1073
852
  }
1074
-
1075
853
  if (pos >= fence) {
1076
854
  break;
1077
855
  }
1078
856
  }
1079
-
1080
857
  return pos - origPos;
1081
858
  }
1082
-
1083
859
  function decompress(s) {
1084
860
  if (s.runningState == 0) {
1085
861
  throw "Can't decompress until initialized";
1086
862
  }
1087
-
1088
863
  if (s.runningState == 11) {
1089
864
  throw "Can't decompress after close";
1090
865
  }
1091
-
1092
866
  if (s.runningState == 1) {
1093
867
  let windowBits = decodeWindowBits(s);
1094
-
1095
868
  if (windowBits == -1) {
1096
869
  throw "Invalid 'windowBits' code";
1097
870
  }
1098
-
1099
871
  s.maxRingBufferSize = 1 << windowBits;
1100
872
  s.maxBackwardDistance = s.maxRingBufferSize - 16;
1101
873
  s.runningState = 2;
1102
874
  }
1103
-
1104
875
  let fence = calculateFence(s);
1105
876
  let ringBufferMask = s.ringBufferSize - 1;
1106
877
  let ringBuffer = s.ringBuffer;
1107
-
1108
878
  while (s.runningState != 10) {
1109
879
  switch (s.runningState) {
1110
880
  case 2:
1111
881
  if (s.metaBlockLength < 0) {
1112
882
  throw 'Invalid metablock length';
1113
883
  }
1114
-
1115
884
  readNextMetablockHeader(s);
1116
885
  fence = calculateFence(s);
1117
886
  ringBufferMask = s.ringBufferSize - 1;
1118
887
  ringBuffer = s.ringBuffer;
1119
888
  continue;
1120
-
1121
889
  case 3:
1122
890
  readMetablockHuffmanCodesAndContextMaps(s);
1123
891
  s.runningState = 4;
1124
-
1125
892
  case 4:
1126
893
  if (s.metaBlockLength <= 0) {
1127
894
  s.runningState = 2;
1128
895
  continue;
1129
896
  }
1130
-
1131
897
  if (s.halfOffset > 2030) {
1132
898
  doReadMoreInput(s);
1133
899
  }
1134
-
1135
900
  if (s.commandBlockLength == 0) {
1136
901
  decodeCommandBlockSwitch(s);
1137
902
  }
1138
-
1139
903
  s.commandBlockLength--;
1140
-
1141
904
  if (s.bitOffset >= 16) {
1142
905
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1143
906
  s.bitOffset -= 16;
1144
907
  }
1145
-
1146
908
  let cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2;
1147
909
  let insertAndCopyExtraBits = CMD_LOOKUP[cmdCode];
1148
910
  let insertLengthOffset = CMD_LOOKUP[cmdCode + 1];
1149
911
  let copyLengthOffset = CMD_LOOKUP[cmdCode + 2];
1150
912
  s.distanceCode = CMD_LOOKUP[cmdCode + 3];
1151
-
1152
913
  if (s.bitOffset >= 16) {
1153
914
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1154
915
  s.bitOffset -= 16;
1155
916
  }
1156
-
1157
917
  let insertLengthExtraBits = insertAndCopyExtraBits & 0xff;
1158
918
  s.insertLength = insertLengthOffset + (insertLengthExtraBits <= 16 ? readFewBits(s, insertLengthExtraBits) : readManyBits(s, insertLengthExtraBits));
1159
-
1160
919
  if (s.bitOffset >= 16) {
1161
920
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1162
921
  s.bitOffset -= 16;
1163
922
  }
1164
-
1165
923
  let copyLengthExtraBits = insertAndCopyExtraBits >> 8;
1166
924
  s.copyLength = copyLengthOffset + (copyLengthExtraBits <= 16 ? readFewBits(s, copyLengthExtraBits) : readManyBits(s, copyLengthExtraBits));
1167
925
  s.j = 0;
1168
926
  s.runningState = 7;
1169
-
1170
927
  case 7:
1171
928
  if (s.trivialLiteralContext != 0) {
1172
929
  while (s.j < s.insertLength) {
1173
930
  if (s.halfOffset > 2030) {
1174
931
  doReadMoreInput(s);
1175
932
  }
1176
-
1177
933
  if (s.literalBlockLength == 0) {
1178
934
  decodeLiteralBlockSwitch(s);
1179
935
  }
1180
-
1181
936
  s.literalBlockLength--;
1182
-
1183
937
  if (s.bitOffset >= 16) {
1184
938
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1185
939
  s.bitOffset -= 16;
1186
940
  }
1187
-
1188
941
  ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s);
1189
942
  s.pos++;
1190
943
  s.j++;
1191
-
1192
944
  if (s.pos >= fence) {
1193
945
  s.nextRunningState = 7;
1194
946
  s.runningState = 12;
@@ -1198,31 +950,25 @@ let makeBrotliDecode = () => {
1198
950
  } else {
1199
951
  let prevByte1 = ringBuffer[s.pos - 1 & ringBufferMask] & 0xff;
1200
952
  let prevByte2 = ringBuffer[s.pos - 2 & ringBufferMask] & 0xff;
1201
-
1202
953
  while (s.j < s.insertLength) {
1203
954
  if (s.halfOffset > 2030) {
1204
955
  doReadMoreInput(s);
1205
956
  }
1206
-
1207
957
  if (s.literalBlockLength == 0) {
1208
958
  decodeLiteralBlockSwitch(s);
1209
959
  }
1210
-
1211
960
  let literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2];
1212
961
  let literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xff;
1213
962
  s.literalBlockLength--;
1214
963
  prevByte2 = prevByte1;
1215
-
1216
964
  if (s.bitOffset >= 16) {
1217
965
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1218
966
  s.bitOffset -= 16;
1219
967
  }
1220
-
1221
968
  prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s);
1222
969
  ringBuffer[s.pos] = prevByte1;
1223
970
  s.pos++;
1224
971
  s.j++;
1225
-
1226
972
  if (s.pos >= fence) {
1227
973
  s.nextRunningState = 7;
1228
974
  s.runningState = 12;
@@ -1230,52 +976,40 @@ let makeBrotliDecode = () => {
1230
976
  }
1231
977
  }
1232
978
  }
1233
-
1234
979
  if (s.runningState != 7) {
1235
980
  continue;
1236
981
  }
1237
-
1238
982
  s.metaBlockLength -= s.insertLength;
1239
-
1240
983
  if (s.metaBlockLength <= 0) {
1241
984
  s.runningState = 4;
1242
985
  continue;
1243
986
  }
1244
-
1245
987
  let distanceCode = s.distanceCode;
1246
-
1247
988
  if (distanceCode < 0) {
1248
989
  s.distance = s.rings[s.distRbIdx];
1249
990
  } else {
1250
991
  if (s.halfOffset > 2030) {
1251
992
  doReadMoreInput(s);
1252
993
  }
1253
-
1254
994
  if (s.distanceBlockLength == 0) {
1255
995
  decodeDistanceBlockSwitch(s);
1256
996
  }
1257
-
1258
997
  s.distanceBlockLength--;
1259
-
1260
998
  if (s.bitOffset >= 16) {
1261
999
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1262
1000
  s.bitOffset -= 16;
1263
1001
  }
1264
-
1265
1002
  let distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xff;
1266
1003
  distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s);
1267
-
1268
1004
  if (distanceCode < 16) {
1269
1005
  let index = s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode] & 0x3;
1270
1006
  s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode];
1271
-
1272
1007
  if (s.distance < 0) {
1273
1008
  throw 'Negative distance';
1274
1009
  }
1275
1010
  } else {
1276
1011
  let extraBits = s.distExtraBits[distanceCode];
1277
1012
  let bits;
1278
-
1279
1013
  if (s.bitOffset + extraBits <= 32) {
1280
1014
  bits = readFewBits(s, extraBits);
1281
1015
  } else {
@@ -1283,44 +1017,35 @@ let makeBrotliDecode = () => {
1283
1017
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1284
1018
  s.bitOffset -= 16;
1285
1019
  }
1286
-
1287
1020
  bits = extraBits <= 16 ? readFewBits(s, extraBits) : readManyBits(s, extraBits);
1288
1021
  }
1289
-
1290
1022
  s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits);
1291
1023
  }
1292
1024
  }
1293
-
1294
1025
  if (s.maxDistance != s.maxBackwardDistance && s.pos < s.maxBackwardDistance) {
1295
1026
  s.maxDistance = s.pos;
1296
1027
  } else {
1297
1028
  s.maxDistance = s.maxBackwardDistance;
1298
1029
  }
1299
-
1300
1030
  if (s.distance > s.maxDistance) {
1301
1031
  s.runningState = 9;
1302
1032
  continue;
1303
1033
  }
1304
-
1305
1034
  if (distanceCode > 0) {
1306
1035
  s.distRbIdx = s.distRbIdx + 1 & 0x3;
1307
1036
  s.rings[s.distRbIdx] = s.distance;
1308
1037
  }
1309
-
1310
1038
  if (s.copyLength > s.metaBlockLength) {
1311
1039
  throw 'Invalid backward reference';
1312
1040
  }
1313
-
1314
1041
  s.j = 0;
1315
1042
  s.runningState = 8;
1316
-
1317
1043
  case 8:
1318
1044
  let src = s.pos - s.distance & ringBufferMask;
1319
1045
  let dst = s.pos;
1320
1046
  let copyLength = s.copyLength - s.j;
1321
1047
  let srcEnd = src + copyLength;
1322
1048
  let dstEnd = dst + copyLength;
1323
-
1324
1049
  if (srcEnd < ringBufferMask && dstEnd < ringBufferMask) {
1325
1050
  if (copyLength < 12 || srcEnd > dst && dstEnd > src) {
1326
1051
  for (let k = 0; k < copyLength; k += 4) {
@@ -1332,7 +1057,6 @@ let makeBrotliDecode = () => {
1332
1057
  } else {
1333
1058
  ringBuffer.copyWithin(dst, src, srcEnd);
1334
1059
  }
1335
-
1336
1060
  s.j += copyLength;
1337
1061
  s.metaBlockLength -= copyLength;
1338
1062
  s.pos += copyLength;
@@ -1342,7 +1066,6 @@ let makeBrotliDecode = () => {
1342
1066
  s.metaBlockLength--;
1343
1067
  s.pos++;
1344
1068
  s.j++;
1345
-
1346
1069
  if (s.pos >= fence) {
1347
1070
  s.nextRunningState = 8;
1348
1071
  s.runningState = 12;
@@ -1350,86 +1073,66 @@ let makeBrotliDecode = () => {
1350
1073
  }
1351
1074
  }
1352
1075
  }
1353
-
1354
1076
  if (s.runningState == 8) {
1355
1077
  s.runningState = 4;
1356
1078
  }
1357
-
1358
1079
  continue;
1359
-
1360
1080
  case 9:
1361
1081
  doUseDictionary(s, fence);
1362
1082
  continue;
1363
-
1364
1083
  case 14:
1365
1084
  s.pos += copyFromCompoundDictionary(s, fence);
1366
-
1367
1085
  if (s.pos >= fence) {
1368
1086
  s.nextRunningState = 14;
1369
1087
  s.runningState = 12;
1370
1088
  return;
1371
1089
  }
1372
-
1373
1090
  s.runningState = 4;
1374
1091
  continue;
1375
-
1376
1092
  case 5:
1377
1093
  while (s.metaBlockLength > 0) {
1378
1094
  if (s.halfOffset > 2030) {
1379
1095
  doReadMoreInput(s);
1380
1096
  }
1381
-
1382
1097
  if (s.bitOffset >= 16) {
1383
1098
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1384
1099
  s.bitOffset -= 16;
1385
1100
  }
1386
-
1387
1101
  readFewBits(s, 8);
1388
1102
  s.metaBlockLength--;
1389
1103
  }
1390
-
1391
1104
  s.runningState = 2;
1392
1105
  continue;
1393
-
1394
1106
  case 6:
1395
1107
  copyUncompressedData(s);
1396
1108
  continue;
1397
-
1398
1109
  case 12:
1399
1110
  s.ringBufferBytesReady = min(s.pos, s.ringBufferSize);
1400
1111
  s.runningState = 13;
1401
-
1402
1112
  case 13:
1403
1113
  if (writeRingBuffer(s) == 0) {
1404
1114
  return;
1405
1115
  }
1406
-
1407
1116
  if (s.pos >= s.maxBackwardDistance) {
1408
1117
  s.maxDistance = s.maxBackwardDistance;
1409
1118
  }
1410
-
1411
1119
  if (s.pos >= s.ringBufferSize) {
1412
1120
  if (s.pos > s.ringBufferSize) {
1413
1121
  ringBuffer.copyWithin(0, s.ringBufferSize, s.pos);
1414
1122
  }
1415
-
1416
1123
  s.pos &= ringBufferMask;
1417
1124
  s.ringBufferBytesWritten = 0;
1418
1125
  }
1419
-
1420
1126
  s.runningState = s.nextRunningState;
1421
1127
  continue;
1422
-
1423
1128
  default:
1424
1129
  throw 'Unexpected state ' + s.runningState;
1425
1130
  }
1426
1131
  }
1427
-
1428
1132
  if (s.runningState == 10) {
1429
1133
  if (s.metaBlockLength < 0) {
1430
1134
  throw 'Invalid metablock length';
1431
1135
  }
1432
-
1433
1136
  jumpToByteBoundary(s);
1434
1137
  checkHealth(s, 1);
1435
1138
  }
@@ -1449,31 +1152,25 @@ let makeBrotliDecode = () => {
1449
1152
  }
1450
1153
 
1451
1154
  let RFC_TRANSFORMS = new Transforms(121, 167, 50);
1452
-
1453
1155
  function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) {
1454
1156
  let n = prefixSuffixSrc.length;
1455
1157
  let index = 1;
1456
1158
  let j = 0;
1457
-
1458
1159
  for (let i = 0; i < n; ++i) {
1459
1160
  let c = prefixSuffixSrc.charCodeAt(i);
1460
-
1461
1161
  if (c == 35) {
1462
1162
  prefixSuffixHeads[index++] = j;
1463
1163
  } else {
1464
1164
  prefixSuffix[j++] = c;
1465
1165
  }
1466
1166
  }
1467
-
1468
1167
  for (let i = 0; i < 363; ++i) {
1469
1168
  transforms[i] = transformsSrc.charCodeAt(i) - 32;
1470
1169
  }
1471
1170
  }
1472
-
1473
1171
  {
1474
1172
  unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, '# #s #, #e #.# the #.com/#\xC2\xA0# of # and # in # to #"#">#\n#]# for # a # that #. # with #\'# from # by #. The # on # as # is #ing #\n\t#:#ed #(# at #ly #="# of the #. This #,# not #er #al #=\'#ful #ive #less #est #ize #ous #', ' !! ! , *! &! " ! ) * * - ! # ! #!*! + ,$ ! - % . / # 0 1 . " 2 3!* 4% ! # / 5 6 7 8 0 1 & $ 9 + : ; < \' != > ?! 4 @ 4 2 & A *# ( B C& ) % ) !*# *-% A +! *. D! %\' & E *6 F G% ! *A *% H! D I!+! J!+ K +- *4! A L!*4 M N +6 O!*% +.! K *G P +%( ! G *D +D Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K');
1475
1173
  }
1476
-
1477
1174
  function transformDictionaryWord(dst, dstOffset, src, srcOffset, len, transforms, transformIndex) {
1478
1175
  let offset = dstOffset;
1479
1176
  let triplets = transforms.triplets;
@@ -1489,48 +1186,37 @@ let makeBrotliDecode = () => {
1489
1186
  let suffixEnd = prefixSuffixHeads[suffixIdx + 1];
1490
1187
  let omitFirst = transformType - 11;
1491
1188
  let omitLast = transformType - 0;
1492
-
1493
1189
  if (omitFirst < 1 || omitFirst > 9) {
1494
1190
  omitFirst = 0;
1495
1191
  }
1496
-
1497
1192
  if (omitLast < 1 || omitLast > 9) {
1498
1193
  omitLast = 0;
1499
1194
  }
1500
-
1501
1195
  while (prefix != prefixEnd) {
1502
1196
  dst[offset++] = prefixSuffixStorage[prefix++];
1503
1197
  }
1504
-
1505
1198
  if (omitFirst > len) {
1506
1199
  omitFirst = len;
1507
1200
  }
1508
-
1509
1201
  srcOffset += omitFirst;
1510
1202
  len -= omitFirst;
1511
1203
  len -= omitLast;
1512
1204
  let i = len;
1513
-
1514
1205
  while (i > 0) {
1515
1206
  dst[offset++] = src[srcOffset++];
1516
1207
  i--;
1517
1208
  }
1518
-
1519
1209
  if (transformType == 10 || transformType == 11) {
1520
1210
  let uppercaseOffset = offset - len;
1521
-
1522
1211
  if (transformType == 10) {
1523
1212
  len = 1;
1524
1213
  }
1525
-
1526
1214
  while (len > 0) {
1527
1215
  let c0 = dst[uppercaseOffset] & 0xff;
1528
-
1529
1216
  if (c0 < 0xc0) {
1530
1217
  if (c0 >= 97 && c0 <= 122) {
1531
1218
  dst[uppercaseOffset] ^= 32;
1532
1219
  }
1533
-
1534
1220
  uppercaseOffset += 1;
1535
1221
  len -= 1;
1536
1222
  } else if (c0 < 0xe0) {
@@ -1547,11 +1233,9 @@ let makeBrotliDecode = () => {
1547
1233
  let shiftOffset = offset - len;
1548
1234
  let param = transforms.params[transformIndex];
1549
1235
  let scalar = (param & 0x7fff) + (0x1000000 - (param & 0x8000));
1550
-
1551
1236
  while (len > 0) {
1552
1237
  let step = 1;
1553
1238
  let c0 = dst[shiftOffset] & 0xff;
1554
-
1555
1239
  if (c0 < 0x80) {
1556
1240
  scalar += c0;
1557
1241
  dst[shiftOffset] = scalar & 0x7f;
@@ -1592,57 +1276,44 @@ let makeBrotliDecode = () => {
1592
1276
  step = len;
1593
1277
  }
1594
1278
  }
1595
-
1596
1279
  shiftOffset += step;
1597
1280
  len -= step;
1598
-
1599
1281
  if (transformType == 21) {
1600
1282
  len = 0;
1601
1283
  }
1602
1284
  }
1603
1285
  }
1604
-
1605
1286
  while (suffix != suffixEnd) {
1606
1287
  dst[offset++] = prefixSuffixStorage[suffix++];
1607
1288
  }
1608
-
1609
1289
  return offset - dstOffset;
1610
1290
  }
1611
1291
 
1612
1292
  function getNextKey(key, len) {
1613
1293
  let step = 1 << len - 1;
1614
-
1615
1294
  while ((key & step) != 0) {
1616
1295
  step >>= 1;
1617
1296
  }
1618
-
1619
1297
  return (key & step - 1) + step;
1620
1298
  }
1621
-
1622
1299
  function replicateValue(table, offset, step, end, item) {
1623
1300
  do {
1624
1301
  end -= step;
1625
1302
  table[offset + end] = item;
1626
1303
  } while (end > 0);
1627
1304
  }
1628
-
1629
1305
  function nextTableBitSize(count, len, rootBits) {
1630
1306
  let left = 1 << len - rootBits;
1631
-
1632
1307
  while (len < 15) {
1633
1308
  left -= count[len];
1634
-
1635
1309
  if (left <= 0) {
1636
1310
  break;
1637
1311
  }
1638
-
1639
1312
  len++;
1640
1313
  left <<= 1;
1641
1314
  }
1642
-
1643
1315
  return len - rootBits;
1644
1316
  }
1645
-
1646
1317
  function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) {
1647
1318
  let tableOffset = tableGroup[tableIdx];
1648
1319
  let key;
@@ -1650,49 +1321,38 @@ let makeBrotliDecode = () => {
1650
1321
  let count = new Int32Array(16);
1651
1322
  let offset = new Int32Array(16);
1652
1323
  let symbol;
1653
-
1654
1324
  for (symbol = 0; symbol < codeLengthsSize; symbol++) {
1655
1325
  count[codeLengths[symbol]]++;
1656
1326
  }
1657
-
1658
1327
  offset[1] = 0;
1659
-
1660
1328
  for (let len = 1; len < 15; len++) {
1661
1329
  offset[len + 1] = offset[len] + count[len];
1662
1330
  }
1663
-
1664
1331
  for (symbol = 0; symbol < codeLengthsSize; symbol++) {
1665
1332
  if (codeLengths[symbol] != 0) {
1666
1333
  sorted[offset[codeLengths[symbol]]++] = symbol;
1667
1334
  }
1668
1335
  }
1669
-
1670
1336
  let tableBits = rootBits;
1671
1337
  let tableSize = 1 << tableBits;
1672
1338
  let totalSize = tableSize;
1673
-
1674
1339
  if (offset[15] == 1) {
1675
1340
  for (key = 0; key < totalSize; key++) {
1676
1341
  tableGroup[tableOffset + key] = sorted[0];
1677
1342
  }
1678
-
1679
1343
  return totalSize;
1680
1344
  }
1681
-
1682
1345
  key = 0;
1683
1346
  symbol = 0;
1684
-
1685
1347
  for (let len = 1, step = 2; len <= rootBits; len++, step <<= 1) {
1686
1348
  for (; count[len] > 0; count[len]--) {
1687
1349
  replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]);
1688
1350
  key = getNextKey(key, len);
1689
1351
  }
1690
1352
  }
1691
-
1692
1353
  let mask = totalSize - 1;
1693
1354
  let low = -1;
1694
1355
  let currentOffset = tableOffset;
1695
-
1696
1356
  for (let len = rootBits + 1, step = 2; len <= 15; len++, step <<= 1) {
1697
1357
  for (; count[len] > 0; count[len]--) {
1698
1358
  if ((key & mask) != low) {
@@ -1703,12 +1363,10 @@ let makeBrotliDecode = () => {
1703
1363
  low = key & mask;
1704
1364
  tableGroup[tableOffset + low] = tableBits + rootBits << 16 | currentOffset - tableOffset - low;
1705
1365
  }
1706
-
1707
1366
  replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, len - rootBits << 16 | sorted[symbol++]);
1708
1367
  key = getNextKey(key, len);
1709
1368
  }
1710
1369
  }
1711
-
1712
1370
  return totalSize;
1713
1371
  }
1714
1372
 
@@ -1717,67 +1375,53 @@ let makeBrotliDecode = () => {
1717
1375
  if (halfAvailable(s) >= -2) {
1718
1376
  return;
1719
1377
  }
1720
-
1721
1378
  throw 'No more input';
1722
1379
  }
1723
-
1724
1380
  let readOffset = s.halfOffset << 1;
1725
1381
  let bytesInBuffer = 4096 - readOffset;
1726
1382
  s.byteBuffer.copyWithin(0, readOffset, 4096);
1727
1383
  s.halfOffset = 0;
1728
-
1729
1384
  while (bytesInBuffer < 4096) {
1730
1385
  let spaceLeft = 4096 - bytesInBuffer;
1731
1386
  let len = readInput(s.input, s.byteBuffer, bytesInBuffer, spaceLeft);
1732
-
1733
1387
  if (len <= 0) {
1734
1388
  s.endOfStreamReached = 1;
1735
1389
  s.tailBytes = bytesInBuffer;
1736
1390
  bytesInBuffer += 1;
1737
1391
  break;
1738
1392
  }
1739
-
1740
1393
  bytesInBuffer += len;
1741
1394
  }
1742
-
1743
1395
  bytesToNibbles(s, bytesInBuffer);
1744
1396
  }
1745
-
1746
1397
  function checkHealth(s, endOfStream) {
1747
1398
  if (s.endOfStreamReached == 0) {
1748
1399
  return;
1749
1400
  }
1750
-
1751
1401
  let byteOffset = (s.halfOffset << 1) + (s.bitOffset + 7 >> 3) - 4;
1752
-
1753
1402
  if (byteOffset > s.tailBytes) {
1754
1403
  throw 'Read after end';
1755
1404
  }
1756
-
1757
1405
  if (endOfStream != 0 && byteOffset != s.tailBytes) {
1758
1406
  throw 'Unused bytes after end';
1759
1407
  }
1760
1408
  }
1761
-
1762
1409
  function assertAccumulatorHealthy(s) {
1763
1410
  if (s.bitOffset > 32) {
1764
1411
  throw 'Accumulator underloaded: ' + s.bitOffset;
1765
1412
  }
1766
1413
  }
1767
-
1768
1414
  function readFewBits(s, n) {
1769
1415
  let val = s.accumulator32 >>> s.bitOffset & (1 << n) - 1;
1770
1416
  s.bitOffset += n;
1771
1417
  return val;
1772
1418
  }
1773
-
1774
1419
  function readManyBits(s, n) {
1775
1420
  let low = readFewBits(s, 16);
1776
1421
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1777
1422
  s.bitOffset -= 16;
1778
1423
  return low | readFewBits(s, n - 16) << 16;
1779
1424
  }
1780
-
1781
1425
  function initBitReader(s) {
1782
1426
  s.byteBuffer = new Int8Array(4160);
1783
1427
  s.accumulator32 = 0;
@@ -1787,64 +1431,50 @@ let makeBrotliDecode = () => {
1787
1431
  s.endOfStreamReached = 0;
1788
1432
  prepare(s);
1789
1433
  }
1790
-
1791
1434
  function prepare(s) {
1792
1435
  if (s.halfOffset > 2030) {
1793
1436
  doReadMoreInput(s);
1794
1437
  }
1795
-
1796
1438
  checkHealth(s, 0);
1797
1439
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1798
1440
  s.bitOffset -= 16;
1799
1441
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1800
1442
  s.bitOffset -= 16;
1801
1443
  }
1802
-
1803
1444
  function reload(s) {
1804
1445
  if (s.bitOffset == 32) {
1805
1446
  prepare(s);
1806
1447
  }
1807
1448
  }
1808
-
1809
1449
  function jumpToByteBoundary(s) {
1810
1450
  let padding = 32 - s.bitOffset & 7;
1811
-
1812
1451
  if (padding != 0) {
1813
1452
  let paddingBits = readFewBits(s, padding);
1814
-
1815
1453
  if (paddingBits != 0) {
1816
1454
  throw 'Corrupted padding bits';
1817
1455
  }
1818
1456
  }
1819
1457
  }
1820
-
1821
1458
  function halfAvailable(s) {
1822
1459
  let limit = 2048;
1823
-
1824
1460
  if (s.endOfStreamReached != 0) {
1825
1461
  limit = s.tailBytes + 1 >> 1;
1826
1462
  }
1827
-
1828
1463
  return limit - s.halfOffset;
1829
1464
  }
1830
-
1831
1465
  function copyRawBytes(s, data, offset, length) {
1832
1466
  if ((s.bitOffset & 7) != 0) {
1833
1467
  throw 'Unaligned copyBytes';
1834
1468
  }
1835
-
1836
1469
  while (s.bitOffset != 32 && length != 0) {
1837
1470
  data[offset++] = s.accumulator32 >>> s.bitOffset;
1838
1471
  s.bitOffset += 8;
1839
1472
  length--;
1840
1473
  }
1841
-
1842
1474
  if (length == 0) {
1843
1475
  return;
1844
1476
  }
1845
-
1846
1477
  let copyNibbles = min(halfAvailable(s), length >> 1);
1847
-
1848
1478
  if (copyNibbles > 0) {
1849
1479
  let readOffset = s.halfOffset << 1;
1850
1480
  let delta = copyNibbles << 1;
@@ -1853,91 +1483,72 @@ let makeBrotliDecode = () => {
1853
1483
  length -= delta;
1854
1484
  s.halfOffset += copyNibbles;
1855
1485
  }
1856
-
1857
1486
  if (length == 0) {
1858
1487
  return;
1859
1488
  }
1860
-
1861
1489
  if (halfAvailable(s) > 0) {
1862
1490
  if (s.bitOffset >= 16) {
1863
1491
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1864
1492
  s.bitOffset -= 16;
1865
1493
  }
1866
-
1867
1494
  while (length != 0) {
1868
1495
  data[offset++] = s.accumulator32 >>> s.bitOffset;
1869
1496
  s.bitOffset += 8;
1870
1497
  length--;
1871
1498
  }
1872
-
1873
1499
  checkHealth(s, 0);
1874
1500
  return;
1875
1501
  }
1876
-
1877
1502
  while (length > 0) {
1878
1503
  let len = readInput(s.input, data, offset, length);
1879
-
1880
1504
  if (len == -1) {
1881
1505
  throw 'Unexpected end of input';
1882
1506
  }
1883
-
1884
1507
  offset += len;
1885
1508
  length -= len;
1886
1509
  }
1887
1510
  }
1888
-
1889
1511
  function bytesToNibbles(s, byteLen) {
1890
1512
  let byteBuffer = s.byteBuffer;
1891
1513
  let halfLen = byteLen >> 1;
1892
1514
  let shortBuffer = s.shortBuffer;
1893
-
1894
1515
  for (let i = 0; i < halfLen; ++i) {
1895
1516
  shortBuffer[i] = byteBuffer[i * 2] & 0xff | (byteBuffer[i * 2 + 1] & 0xff) << 8;
1896
1517
  }
1897
1518
  }
1898
1519
 
1899
1520
  let LOOKUP = new Int32Array(2048);
1900
-
1901
1521
  function unpackLookupTable(lookup, map, rle) {
1902
1522
  for (let i = 0; i < 256; ++i) {
1903
1523
  lookup[i] = i & 0x3f;
1904
1524
  lookup[512 + i] = i >> 2;
1905
1525
  lookup[1792 + i] = 2 + (i >> 6);
1906
1526
  }
1907
-
1908
1527
  for (let i = 0; i < 128; ++i) {
1909
1528
  lookup[1024 + i] = 4 * (map.charCodeAt(i) - 32);
1910
1529
  }
1911
-
1912
1530
  for (let i = 0; i < 64; ++i) {
1913
1531
  lookup[1152 + i] = i & 1;
1914
1532
  lookup[1216 + i] = 2 + (i & 1);
1915
1533
  }
1916
-
1917
1534
  let offset = 1280;
1918
-
1919
1535
  for (let k = 0; k < 19; ++k) {
1920
1536
  let value = k & 3;
1921
1537
  let rep = rle.charCodeAt(k) - 32;
1922
-
1923
1538
  for (let i = 0; i < rep; ++i) {
1924
1539
  lookup[offset++] = value;
1925
1540
  }
1926
1541
  }
1927
-
1928
1542
  for (let i = 0; i < 16; ++i) {
1929
1543
  lookup[1792 + i] = 1;
1930
1544
  lookup[2032 + i] = 6;
1931
1545
  }
1932
-
1933
1546
  lookup[1792] = 0;
1934
1547
  lookup[2047] = 7;
1935
-
1936
1548
  for (let i = 0; i < 256; ++i) {
1937
1549
  lookup[1536 + i] = lookup[1792 + i] << 3;
1938
1550
  }
1939
1551
  }
1940
-
1941
1552
  {
1942
1553
  unpackLookupTable(LOOKUP, " !! ! \"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# ", "A/* ': & : $ \x81 @");
1943
1554
  }
@@ -2025,88 +1636,69 @@ let makeBrotliDecode = () => {
2025
1636
  let data = null;
2026
1637
  let offsets = new Int32Array(32);
2027
1638
  let sizeBits = new Int32Array(32);
2028
-
2029
1639
  function setData(newData, newSizeBits) {
2030
1640
  if (isDirect(newData) == 0 || isReadOnly(newData) == 0) {
2031
1641
  throw 'newData must be a direct read-only byte buffer';
2032
1642
  }
2033
-
2034
1643
  if (newSizeBits.length > 31) {
2035
1644
  throw 'sizeBits length must be at most ' + 31;
2036
1645
  }
2037
-
2038
1646
  for (let i = 0; i < 4; ++i) {
2039
1647
  if (newSizeBits[i] != 0) {
2040
1648
  throw 'first ' + 4 + ' must be 0';
2041
1649
  }
2042
1650
  }
2043
-
2044
1651
  let dictionaryOffsets = offsets;
2045
1652
  let dictionarySizeBits = sizeBits;
2046
1653
  dictionarySizeBits.set(newSizeBits.subarray(0, 0 + newSizeBits.length), 0);
2047
1654
  let pos = 0;
2048
1655
  let limit = newData.length;
2049
-
2050
1656
  for (let i = 0; i < newSizeBits.length; ++i) {
2051
1657
  dictionaryOffsets[i] = pos;
2052
1658
  let bits = dictionarySizeBits[i];
2053
-
2054
1659
  if (bits != 0) {
2055
1660
  if (bits >= 31) {
2056
1661
  throw 'newSizeBits values must be less than 31';
2057
1662
  }
2058
-
2059
1663
  pos += i << bits;
2060
-
2061
1664
  if (pos <= 0 || pos > limit) {
2062
1665
  throw 'newSizeBits is inconsistent: overflow';
2063
1666
  }
2064
1667
  }
2065
1668
  }
2066
-
2067
1669
  for (let i = newSizeBits.length; i < 32; ++i) {
2068
1670
  dictionaryOffsets[i] = pos;
2069
1671
  }
2070
-
2071
1672
  if (pos != limit) {
2072
1673
  throw 'newSizeBits is inconsistent: underflow';
2073
1674
  }
2074
-
2075
1675
  data = newData;
2076
1676
  }
2077
1677
 
2078
1678
  function unpackDictionaryData(dictionary, data0, data1, skipFlip, sizeBits, sizeBitsData) {
2079
1679
  let dict = toUsAsciiBytes(data0 + data1);
2080
-
2081
1680
  if (dict.length != dictionary.length) {
2082
1681
  throw 'Corrupted brotli dictionary';
2083
1682
  }
2084
-
2085
1683
  let offset = 0;
2086
1684
  let n = skipFlip.length;
2087
-
2088
1685
  for (let i = 0; i < n; i += 2) {
2089
1686
  let skip = skipFlip.charCodeAt(i) - 36;
2090
1687
  let flip = skipFlip.charCodeAt(i + 1) - 36;
2091
-
2092
1688
  for (let j = 0; j < skip; ++j) {
2093
1689
  dict[offset] ^= 3;
2094
1690
  offset++;
2095
1691
  }
2096
-
2097
1692
  for (let j = 0; j < flip; ++j) {
2098
1693
  dict[offset] ^= 236;
2099
1694
  offset++;
2100
1695
  }
2101
1696
  }
2102
-
2103
1697
  for (let i = 0; i < sizeBitsData.length; ++i) {
2104
1698
  sizeBits[i] = sizeBitsData.charCodeAt(i) - 65;
2105
1699
  }
2106
-
2107
1700
  dictionary.set(dict);
2108
1701
  }
2109
-
2110
1702
  {
2111
1703
  let dictionaryData = new Int8Array(122784);
2112
1704
  let dictionarySizeBits = new Int32Array(25);
@@ -2148,31 +1740,27 @@ let makeBrotliDecode = () => {
2148
1740
  return 1;
2149
1741
  }
2150
1742
 
2151
- function flipBuffer(buffer) {}
1743
+ function flipBuffer(buffer) {
1744
+ }
2152
1745
 
2153
1746
  function toUsAsciiBytes(src) {
2154
1747
  let n = src.length;
2155
1748
  let result = new Int8Array(n);
2156
-
2157
1749
  for (let i = 0; i < n; ++i) {
2158
1750
  result[i] = src.charCodeAt(i);
2159
1751
  }
2160
-
2161
1752
  return result;
2162
1753
  }
2163
1754
 
2164
1755
  function decode(bytes, options) {
2165
1756
  let s = new State();
2166
1757
  initState(s, new InputStream(bytes));
2167
-
2168
1758
  if (options) {
2169
1759
  let customDictionary = options['customDictionary'];
2170
1760
  if (customDictionary) attachDictionaryChunk(s, customDictionary);
2171
1761
  }
2172
-
2173
1762
  let totalOutput = 0;
2174
1763
  let chunks = [];
2175
-
2176
1764
  while (true) {
2177
1765
  let chunk = new Int8Array(16384);
2178
1766
  chunks.push(chunk);
@@ -2184,28 +1772,22 @@ let makeBrotliDecode = () => {
2184
1772
  totalOutput += s.outputUsed;
2185
1773
  if (s.outputUsed < 16384) break;
2186
1774
  }
2187
-
2188
1775
  close(s);
2189
1776
  let result = new Int8Array(totalOutput);
2190
1777
  let offset = 0;
2191
-
2192
1778
  for (let i = 0; i < chunks.length; ++i) {
2193
1779
  let chunk = chunks[i];
2194
1780
  let end = min(totalOutput, offset + 16384);
2195
1781
  let len = end - offset;
2196
-
2197
1782
  if (len < 16384) {
2198
1783
  result.set(chunk.subarray(0, len), offset);
2199
1784
  } else {
2200
1785
  result.set(chunk, offset);
2201
1786
  }
2202
-
2203
1787
  offset += len;
2204
1788
  }
2205
-
2206
1789
  return result;
2207
1790
  }
2208
-
2209
1791
  return decode;
2210
1792
  };
2211
1793