@openclaw/whatsapp 2026.5.28 → 2026.5.31-beta.1
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.
- package/dist/{access-control-Z0fYaWrx.js → access-control-C53zKYSN.js} +1 -1
- package/dist/{accounts-BMGM1RtF.js → accounts-DgViSyJx.js} +1 -0
- package/dist/{action-runtime-BdhkGtaP.js → action-runtime-Cyp5GNIT.js} +2 -2
- package/dist/action-runtime-api.js +1 -1
- package/dist/action-runtime.runtime.js +1 -1
- package/dist/api.js +9 -9
- package/dist/{approval-handler.runtime-C25wPeBf.js → approval-handler.runtime-BVmOu6x1.js} +1 -2
- package/dist/{auth-store-BrKb0mwT.js → auth-store-CZ22aNcV.js} +4 -2
- package/dist/{channel-D3y4A5Dd.js → channel-DA2BAIo5.js} +17 -64
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/{channel-react-action-Cd2qkLqp.js → channel-react-action-zvbaCnGe.js} +3 -3
- package/dist/{channel.runtime-C228XUjs.js → channel.runtime-Q1LZDB5s.js} +4 -4
- package/dist/{channel.setup-BJQyTUUP.js → channel.setup-DHXOo4h5.js} +2 -3
- package/dist/{config-schema-CsNDlDpL.js → config-schema-CROZuhT-.js} +16 -0
- package/dist/{connection-controller-mpPGmqGq.js → connection-controller-Bnm4INld.js} +2 -2
- package/dist/contract-api.js +1 -1
- package/dist/light-runtime-api.js +1 -1
- package/dist/{login-CE4UYnyO.js → login-2fuBM7Je.js} +4 -4
- package/dist/{login-qr-LBvhEes5.js → login-qr-B1o7GFy8.js} +10 -6
- package/dist/login-qr-runtime.js +1 -1
- package/dist/{monitor-Ccph7Y8M.js → monitor-BVRq04Dt.js} +36 -18
- package/dist/runtime-api.js +7 -7
- package/dist/{send-C4LG-Cl6.js → send-DSlVXKL_.js} +53 -41
- package/dist/{send-api-C66vkRl9.js → send-api-Bjn-h80j.js} +3 -2
- package/dist/{session-D8UW2Vbn.js → session-DyGWNClj.js} +1 -1
- package/dist/{setup-core-DpfT4K-2.js → setup-core-OvPMaAsx.js} +4 -4
- package/dist/{setup-finalize-CFnxX7la.js → setup-finalize-Dk23pfKc.js} +3 -3
- package/dist/setup-plugin-api.js +1 -1
- package/dist/{setup-surface-DRsmp0ZS.js → setup-surface-F-jVrH8u.js} +3 -3
- package/node_modules/@audio/decode-aac/LICENSE +9 -0
- package/node_modules/@audio/decode-aac/README.md +60 -0
- package/node_modules/@audio/decode-aac/decode-aac.d.ts +16 -0
- package/node_modules/@audio/decode-aac/decode-aac.js +391 -0
- package/node_modules/@audio/decode-aac/package.json +47 -0
- package/node_modules/@audio/decode-aac/src/aac.wasm.cjs +0 -0
- package/node_modules/@audio/decode-aiff/LICENSE +21 -0
- package/node_modules/@audio/decode-aiff/README.md +53 -0
- package/node_modules/@audio/decode-aiff/decode-aiff.d.ts +16 -0
- package/node_modules/@audio/decode-aiff/decode-aiff.js +583 -0
- package/node_modules/@audio/decode-aiff/package.json +42 -0
- package/node_modules/@audio/decode-amr/LICENSE +191 -0
- package/node_modules/@audio/decode-amr/README.md +65 -0
- package/node_modules/@audio/decode-amr/decode-amr.d.ts +16 -0
- package/node_modules/@audio/decode-amr/decode-amr.js +159 -0
- package/node_modules/@audio/decode-amr/package.json +48 -0
- package/node_modules/@audio/decode-amr/src/amr.wasm.cjs +0 -0
- package/node_modules/@audio/decode-caf/LICENSE +21 -0
- package/node_modules/@audio/decode-caf/README.md +55 -0
- package/node_modules/@audio/decode-caf/decode-caf.d.ts +16 -0
- package/node_modules/@audio/decode-caf/decode-caf.js +190 -0
- package/node_modules/@audio/decode-caf/package.json +43 -0
- package/node_modules/{audio-buffer → @audio/decode-flac}/LICENSE +5 -2
- package/node_modules/@audio/decode-flac/README.md +23 -0
- package/node_modules/@audio/decode-flac/decode-flac.d.ts +16 -0
- package/node_modules/@audio/decode-flac/decode-flac.js +2994 -0
- package/node_modules/@audio/decode-flac/meta.js +115 -0
- package/node_modules/@audio/decode-flac/package.json +49 -0
- package/node_modules/@audio/decode-mp3/LICENSE +25 -0
- package/node_modules/@audio/decode-mp3/README.md +23 -0
- package/node_modules/@audio/decode-mp3/decode-mp3.d.ts +16 -0
- package/node_modules/@audio/decode-mp3/decode-mp3.js +868 -0
- package/node_modules/@audio/decode-mp3/meta.js +143 -0
- package/node_modules/@audio/decode-mp3/package.json +50 -0
- package/node_modules/@audio/decode-opus/LICENSE +25 -0
- package/node_modules/@audio/decode-opus/README.md +23 -0
- package/node_modules/@audio/decode-opus/decode-opus.d.ts +16 -0
- package/node_modules/@audio/decode-opus/decode-opus.js +3179 -0
- package/node_modules/@audio/decode-opus/package.json +47 -0
- package/node_modules/@audio/decode-qoa/LICENSE +25 -0
- package/node_modules/@audio/decode-qoa/README.md +21 -0
- package/node_modules/@audio/decode-qoa/decode-qoa.d.ts +16 -0
- package/node_modules/@audio/decode-qoa/decode-qoa.js +278 -0
- package/node_modules/@audio/decode-qoa/package.json +46 -0
- package/node_modules/@audio/decode-vorbis/LICENSE +25 -0
- package/node_modules/@audio/decode-vorbis/README.md +23 -0
- package/node_modules/@audio/decode-vorbis/decode-vorbis.d.ts +16 -0
- package/node_modules/@audio/decode-vorbis/decode-vorbis.js +2984 -0
- package/node_modules/@audio/decode-vorbis/package.json +47 -0
- package/node_modules/@audio/decode-wav/decode-wav.js +104 -0
- package/node_modules/@audio/decode-wav/meta.js +114 -0
- package/node_modules/@audio/decode-wav/package.json +27 -0
- package/node_modules/@audio/decode-webm/LICENSE +21 -0
- package/node_modules/@audio/decode-webm/README.md +57 -0
- package/node_modules/@audio/decode-webm/decode-webm.d.ts +16 -0
- package/node_modules/@audio/decode-webm/decode-webm.js +3964 -0
- package/node_modules/@audio/decode-webm/package.json +51 -0
- package/node_modules/@audio/decode-wma/LICENSE +12 -0
- package/node_modules/@audio/decode-wma/README.md +76 -0
- package/node_modules/@audio/decode-wma/decode-wma.d.ts +33 -0
- package/node_modules/@audio/decode-wma/decode-wma.js +525 -0
- package/node_modules/@audio/decode-wma/package.json +47 -0
- package/node_modules/@audio/decode-wma/src/wma.wasm.cjs +0 -0
- package/node_modules/audio-decode/.claude/settings.json +204 -0
- package/node_modules/audio-decode/.github/workflows/test.js.yml +11 -20
- package/node_modules/audio-decode/.gitmodules +9 -0
- package/node_modules/audio-decode/audio-decode.d.ts +48 -10
- package/node_modules/audio-decode/audio-decode.js +193 -77
- package/node_modules/audio-decode/meta.js +11 -0
- package/node_modules/audio-decode/package.json +49 -21
- package/node_modules/audio-decode/readme.md +129 -29
- package/node_modules/audio-decode/stream.d.ts +15 -0
- package/node_modules/audio-decode/stream.js +1 -0
- package/node_modules/audio-decode/test.html +29 -10
- package/node_modules/lru-cache/dist/commonjs/browser/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/commonjs/browser/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/browser/index.js.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/browser/index.min.js.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/commonjs/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/index.js.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/index.min.js.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/node/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/commonjs/node/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/node/index.js.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/node/index.min.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/browser/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/esm/browser/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/esm/browser/index.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/browser/index.min.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/esm/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/esm/index.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/index.min.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/node/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/esm/node/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/esm/node/index.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/node/index.min.js.map +1 -1
- package/node_modules/lru-cache/package.json +1 -1
- package/node_modules/typebox/build/type/script/mapping.d.mts +5 -2
- package/node_modules/typebox/build/type/script/mapping.mjs +15 -8
- package/node_modules/typebox/build/type/script/parser.d.mts +3 -1
- package/node_modules/typebox/build/type/script/parser.mjs +2 -1
- package/node_modules/typebox/package.json +29 -29
- package/npm-shrinkwrap.json +156 -39
- package/openclaw.plugin.json +76 -0
- package/package.json +6 -6
- package/node_modules/audio-buffer/.eslintrc.json +0 -44
- package/node_modules/audio-buffer/.github/workflows/node.js.yml +0 -31
- package/node_modules/audio-buffer/.travis.yml +0 -7
- package/node_modules/audio-buffer/index.js +0 -76
- package/node_modules/audio-buffer/package.json +0 -37
- package/node_modules/audio-buffer/readme.md +0 -56
- package/node_modules/audio-decode/.eslintrc.json +0 -43
- package/node_modules/audio-decode/.travis.yml +0 -13
- package/node_modules/audio-decode/tea.yaml +0 -6
- package/node_modules/audio-decode/test-case.js +0 -11
- package/node_modules/audio-decode/test.js +0 -107
- package/node_modules/node-wav/README.md +0 -35
- package/node_modules/node-wav/file.wav +0 -0
- package/node_modules/node-wav/index.js +0 -291
- package/node_modules/node-wav/package.json +0 -29
- package/node_modules/node-wav/tests/file1.wav +0 -0
- package/node_modules/node-wav/tests/test.js +0 -66
- package/node_modules/node-wav/x.js +0 -12
- package/node_modules/node-wav/x.json +0 -86702
- package/node_modules/node-wav/x.js~ +0 -13
|
@@ -0,0 +1,3179 @@
|
|
|
1
|
+
// ../../node_modules/simple-yenc/dist/esm.js
|
|
2
|
+
var t = (t2, n = 4294967295, e2 = 79764919) => {
|
|
3
|
+
const r = new Int32Array(256);
|
|
4
|
+
let o, s, i, c = n;
|
|
5
|
+
for (o = 0; o < 256; o++) {
|
|
6
|
+
for (i = o << 24, s = 8; s > 0; --s) i = 2147483648 & i ? i << 1 ^ e2 : i << 1;
|
|
7
|
+
r[o] = i;
|
|
8
|
+
}
|
|
9
|
+
for (o = 0; o < t2.length; o++) c = c << 8 ^ r[255 & (c >> 24 ^ t2[o])];
|
|
10
|
+
return c;
|
|
11
|
+
};
|
|
12
|
+
var e = (n, e2 = t) => {
|
|
13
|
+
const r = (t2) => new Uint8Array(t2.length / 2).map(((n2, e3) => parseInt(t2.substring(2 * e3, 2 * (e3 + 1)), 16))), o = (t2) => r(t2)[0], s = /* @__PURE__ */ new Map();
|
|
14
|
+
[, 8364, , 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, , 381, , , 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250, 339, , 382, 376].forEach(((t2, n2) => s.set(t2, n2)));
|
|
15
|
+
const i = new Uint8Array(n.length);
|
|
16
|
+
let c, a, l, f = false, g = 0, h = 42, p = n.length > 13 && "dynEncode" === n.substring(0, 9), u = 0;
|
|
17
|
+
p && (u = 11, a = o(n.substring(9, u)), a <= 1 && (u += 2, h = o(n.substring(11, u))), 1 === a && (u += 8, l = ((t2) => new DataView(r(t2).buffer).getInt32(0, true))(n.substring(13, u))));
|
|
18
|
+
const d = 256 - h;
|
|
19
|
+
for (let t2 = u; t2 < n.length; t2++) if (c = n.charCodeAt(t2), 61 !== c || f) {
|
|
20
|
+
if (92 === c && t2 < n.length - 5 && p) {
|
|
21
|
+
const e3 = n.charCodeAt(t2 + 1);
|
|
22
|
+
117 !== e3 && 85 !== e3 || (c = parseInt(n.substring(t2 + 2, t2 + 6), 16), t2 += 5);
|
|
23
|
+
}
|
|
24
|
+
if (c > 255) {
|
|
25
|
+
const t3 = s.get(c);
|
|
26
|
+
t3 && (c = t3 + 127);
|
|
27
|
+
}
|
|
28
|
+
f && (f = false, c -= 64), i[g++] = c < h && c > 0 ? c + d : c - h;
|
|
29
|
+
} else f = true;
|
|
30
|
+
const m = i.subarray(0, g);
|
|
31
|
+
if (p && 1 === a) {
|
|
32
|
+
const t2 = e2(m);
|
|
33
|
+
if (t2 !== l) {
|
|
34
|
+
const n2 = "Decode failed crc32 validation";
|
|
35
|
+
throw console.error("`simple-yenc`\n", n2 + "\n", "Expected: " + l + "; Got: " + t2 + "\n", "Visit https://github.com/eshaz/simple-yenc for more information"), Error(n2);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return m;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// ../../node_modules/@wasm-audio-decoders/common/src/WASMAudioDecoderCommon.js
|
|
42
|
+
function WASMAudioDecoderCommon() {
|
|
43
|
+
const uint8Array2 = Uint8Array;
|
|
44
|
+
const float32Array = Float32Array;
|
|
45
|
+
if (!WASMAudioDecoderCommon.modules) {
|
|
46
|
+
Object.defineProperties(WASMAudioDecoderCommon, {
|
|
47
|
+
modules: {
|
|
48
|
+
value: /* @__PURE__ */ new WeakMap()
|
|
49
|
+
},
|
|
50
|
+
setModule: {
|
|
51
|
+
value(Ref, module) {
|
|
52
|
+
WASMAudioDecoderCommon.modules.set(Ref, Promise.resolve(module));
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
getModule: {
|
|
56
|
+
value(Ref, wasmString) {
|
|
57
|
+
let module = WASMAudioDecoderCommon.modules.get(Ref);
|
|
58
|
+
if (!module) {
|
|
59
|
+
if (!wasmString) {
|
|
60
|
+
wasmString = Ref.wasm;
|
|
61
|
+
module = WASMAudioDecoderCommon.inflateDynEncodeString(
|
|
62
|
+
wasmString
|
|
63
|
+
).then((data3) => WebAssembly.compile(data3));
|
|
64
|
+
} else {
|
|
65
|
+
module = WebAssembly.compile(e(wasmString));
|
|
66
|
+
}
|
|
67
|
+
WASMAudioDecoderCommon.modules.set(Ref, module);
|
|
68
|
+
}
|
|
69
|
+
return module;
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
concatFloat32: {
|
|
73
|
+
value(buffers, length2) {
|
|
74
|
+
let ret = new float32Array(length2), i = 0, offset = 0;
|
|
75
|
+
while (i < buffers.length) {
|
|
76
|
+
ret.set(buffers[i], offset);
|
|
77
|
+
offset += buffers[i++].length;
|
|
78
|
+
}
|
|
79
|
+
return ret;
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
getDecodedAudio: {
|
|
83
|
+
value: (errors, channelData, samplesDecoded, sampleRate2, bitDepth2) => ({
|
|
84
|
+
errors,
|
|
85
|
+
channelData,
|
|
86
|
+
samplesDecoded,
|
|
87
|
+
sampleRate: sampleRate2,
|
|
88
|
+
bitDepth: bitDepth2
|
|
89
|
+
})
|
|
90
|
+
},
|
|
91
|
+
getDecodedAudioMultiChannel: {
|
|
92
|
+
value(errors, input, channelsDecoded, samplesDecoded, sampleRate2, bitDepth2) {
|
|
93
|
+
let channelData = [], i, j;
|
|
94
|
+
for (i = 0; i < channelsDecoded; i++) {
|
|
95
|
+
const channel2 = [];
|
|
96
|
+
for (j = 0; j < input.length; ) channel2.push(input[j++][i] || []);
|
|
97
|
+
channelData.push(
|
|
98
|
+
WASMAudioDecoderCommon.concatFloat32(channel2, samplesDecoded)
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
return WASMAudioDecoderCommon.getDecodedAudio(
|
|
102
|
+
errors,
|
|
103
|
+
channelData,
|
|
104
|
+
samplesDecoded,
|
|
105
|
+
sampleRate2,
|
|
106
|
+
bitDepth2
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
/*
|
|
111
|
+
******************
|
|
112
|
+
* Compression Code
|
|
113
|
+
******************
|
|
114
|
+
*/
|
|
115
|
+
inflateDynEncodeString: {
|
|
116
|
+
value(source) {
|
|
117
|
+
source = e(source);
|
|
118
|
+
return new Promise((resolve) => {
|
|
119
|
+
const puffString = String.raw`dynEncode012804c7886d()((()>+*§§)§,§§§§)§+§§§)§+.-()(*)-+)(.7*§)i¸¸,3§(i¸¸,3/G+.¡*(,(,3+)2å:-),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)^*<H,H(P*4U((I-H(H*i0J,^*DH+H-H*I+H,I*4)33H(H*H)^*DH(H+H)^*@H+i§H)i§3æ*).§K(iHI/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)J.H.W)(i)c)(H,i)I,H-i*I-4)33i(I.*hH(V)(H+n5(H(i*I-i(I,i)I.+hH,i*J+iHn,hi(I-i*I,+hH,H/H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)J(H(V)(J(i)c)(H)H(i)H,c)(3H*i*I*H,i)I,4(3(-H(H,W)(H-I-H,i*I,4)3(3(3H,H-I1H+I,H.i)H1V)(J.i(v5(33H.-H(H,i(c)(H,i*I,4)333)-§i*I*+§H*iHn,hi73H,H(i)8(H+J+H)P*(H*V)(J-r,§H)P*,H.i)H+H,i)V)(-H*i*I*H+i)I+H-H.I.H,H-i)I,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7H,c)(i)H+i´8W)(H,I,H+i*I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,H-b((3H(P*0i)I.4)3H-i¨*n5*H-iÅ*s,hi73H-i)J+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)J+i¸7V)(H(H+iø7V)(8(J/H(P*0J+s,hi73H+H,H.J,I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+H.H+H/U((b((H(H(P*0i)J+^*0H,i)I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)c)(H,i*I,H+i)I+4)33i)I-3H-3!2)0§K(i2J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,J(H,P*8J/s50H,H.i+J0^*<i¦I*H.H,P*4J1J.U(*H.U((J2i')o5/H.U()I.H,H(^*<H0H1U((H.i0J.i§i0i')o5/H/H.H2J*H(J.q50H,P*0J/H*I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0H(H1U((b((H/i)I/H(i)I(H*i)I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-H(i0c)(H(i*I(4)33iè1i1H,i-iÈ*8)Bi(I(+hH(ido,hH,i-H(i-c)(H(i*I(4)33iÈ6iè6H,i-iF8)BiØ1i)b((41-H,i-H(i/c)(H(i*I(4)3(3(-H,i-H(i1c)(H(i*I(4)3(3(-H,i-H(i0c)(H(i*I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)^*TH,H,iø-^*PH,H,iX^*LH,H,i(^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iEr5)H(i©*I1H-i)I0i(i;H.i,J(i(H(i(rCJ(J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-H-V)(i)H,i+8(c)(H/i)I/H-i*I-H*i)I*4)-H(i)i¨1I/+hH(H*o,hH,i-H/V)(i)i(c)(H/i*I/H(i)I(4)33i¤I*H,iø-H,i¸)H,i-i;8)5+H0H1I2i(I-+hH-H2p,hH,H,iP8*J*i(p5-H*i7u,hH,i-H-i)H*c)(H-i)I-4*3i(I/i+I.i+I(*h*h*hH*i86*(*)3H-m,hi£I*403H-i)H,W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.J(H-J.p,hi¢I*4.3H,i-H-i)I*+hH(,hH*H/c)(H*i*I*H(i)I(4)-H.I-4+3(3(33H,W)1m,hiI*4,3H,iø-H,i¸)H,i-H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-o5,3H,i(H,iXH,i-H1i)H08)J(,hi I*H(i(p5,H0H,V)H,V)o5,3H,H,iPH,iH8+I*4+3(3(3H,i$6i¬78+I*3H*H3m5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(((«(Ë(ë((*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7*S7US0U `;
|
|
120
|
+
WASMAudioDecoderCommon.getModule(WASMAudioDecoderCommon, puffString).then((wasm) => WebAssembly.instantiate(wasm, {})).then(({ exports }) => {
|
|
121
|
+
const instanceExports = new Map(Object.entries(exports));
|
|
122
|
+
const puff = instanceExports.get("puff");
|
|
123
|
+
const memory = instanceExports.get("memory")["buffer"];
|
|
124
|
+
const dataArray = new uint8Array2(memory);
|
|
125
|
+
const heapView = new DataView(memory);
|
|
126
|
+
let heapPos = instanceExports.get("__heap_base");
|
|
127
|
+
const sourceLength = source.length;
|
|
128
|
+
const sourceLengthPtr = heapPos;
|
|
129
|
+
heapPos += 4;
|
|
130
|
+
heapView.setInt32(sourceLengthPtr, sourceLength, true);
|
|
131
|
+
const sourcePtr = heapPos;
|
|
132
|
+
heapPos += sourceLength;
|
|
133
|
+
dataArray.set(source, sourcePtr);
|
|
134
|
+
const destLengthPtr = heapPos;
|
|
135
|
+
heapPos += 4;
|
|
136
|
+
heapView.setInt32(
|
|
137
|
+
destLengthPtr,
|
|
138
|
+
dataArray.byteLength - heapPos,
|
|
139
|
+
true
|
|
140
|
+
);
|
|
141
|
+
puff(heapPos, destLengthPtr, sourcePtr, sourceLengthPtr);
|
|
142
|
+
resolve(
|
|
143
|
+
dataArray.slice(
|
|
144
|
+
heapPos,
|
|
145
|
+
heapPos + heapView.getInt32(destLengthPtr, true)
|
|
146
|
+
)
|
|
147
|
+
);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
Object.defineProperty(this, "wasm", {
|
|
155
|
+
enumerable: true,
|
|
156
|
+
get: () => this._wasm
|
|
157
|
+
});
|
|
158
|
+
this.getOutputChannels = (outputData, channelsDecoded, samplesDecoded) => {
|
|
159
|
+
let output = [], i = 0;
|
|
160
|
+
while (i < channelsDecoded)
|
|
161
|
+
output.push(
|
|
162
|
+
outputData.slice(
|
|
163
|
+
i * samplesDecoded,
|
|
164
|
+
i++ * samplesDecoded + samplesDecoded
|
|
165
|
+
)
|
|
166
|
+
);
|
|
167
|
+
return output;
|
|
168
|
+
};
|
|
169
|
+
this.allocateTypedArray = (len, TypedArray, setPointer = true) => {
|
|
170
|
+
const ptr = this._wasm.malloc(TypedArray.BYTES_PER_ELEMENT * len);
|
|
171
|
+
if (setPointer) this._pointers.add(ptr);
|
|
172
|
+
return {
|
|
173
|
+
ptr,
|
|
174
|
+
len,
|
|
175
|
+
buf: new TypedArray(this._wasm.HEAP, ptr, len)
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
this.free = () => {
|
|
179
|
+
this._pointers.forEach((ptr) => {
|
|
180
|
+
this._wasm.free(ptr);
|
|
181
|
+
});
|
|
182
|
+
this._pointers.clear();
|
|
183
|
+
};
|
|
184
|
+
this.codeToString = (ptr) => {
|
|
185
|
+
const characters = [], heap = new Uint8Array(this._wasm.HEAP);
|
|
186
|
+
for (let character = heap[ptr]; character !== 0; character = heap[++ptr])
|
|
187
|
+
characters.push(character);
|
|
188
|
+
return String.fromCharCode.apply(null, characters);
|
|
189
|
+
};
|
|
190
|
+
this.addError = (errors, message, frameLength2, frameNumber2, inputBytes, outputSamples) => {
|
|
191
|
+
errors.push({
|
|
192
|
+
message,
|
|
193
|
+
frameLength: frameLength2,
|
|
194
|
+
frameNumber: frameNumber2,
|
|
195
|
+
inputBytes,
|
|
196
|
+
outputSamples
|
|
197
|
+
});
|
|
198
|
+
};
|
|
199
|
+
this.instantiate = (_EmscriptenWASM, _module) => {
|
|
200
|
+
if (_module) WASMAudioDecoderCommon.setModule(_EmscriptenWASM, _module);
|
|
201
|
+
this._wasm = new _EmscriptenWASM(WASMAudioDecoderCommon).instantiate();
|
|
202
|
+
this._pointers = /* @__PURE__ */ new Set();
|
|
203
|
+
return this._wasm.ready.then(() => this);
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// ../_build/empty-worker.js
|
|
208
|
+
var empty_worker_default = null;
|
|
209
|
+
|
|
210
|
+
// ../../node_modules/@wasm-audio-decoders/common/src/WASMAudioDecoderWorker.js
|
|
211
|
+
var getWorker = () => globalThis.Worker || empty_worker_default;
|
|
212
|
+
var WASMAudioDecoderWorker = class extends getWorker() {
|
|
213
|
+
constructor(options, name, Decoder, EmscriptenWASM2) {
|
|
214
|
+
if (!WASMAudioDecoderCommon.modules) new WASMAudioDecoderCommon();
|
|
215
|
+
let source = WASMAudioDecoderCommon.modules.get(Decoder);
|
|
216
|
+
if (!source) {
|
|
217
|
+
let type = "text/javascript", isNode, webworkerSourceCode = `'use strict';(${((_Decoder, _WASMAudioDecoderCommon, _EmscriptenWASM) => {
|
|
218
|
+
let decoder2, moduleResolve, modulePromise = new Promise((resolve) => {
|
|
219
|
+
moduleResolve = resolve;
|
|
220
|
+
});
|
|
221
|
+
self.onmessage = ({ data: { id, command, data: data3 } }) => {
|
|
222
|
+
let messagePromise = modulePromise, messagePayload = { id }, transferList;
|
|
223
|
+
if (command === "init") {
|
|
224
|
+
Object.defineProperties(_Decoder, {
|
|
225
|
+
WASMAudioDecoderCommon: { value: _WASMAudioDecoderCommon },
|
|
226
|
+
EmscriptenWASM: { value: _EmscriptenWASM },
|
|
227
|
+
module: { value: data3.module },
|
|
228
|
+
isWebWorker: { value: true }
|
|
229
|
+
});
|
|
230
|
+
decoder2 = new _Decoder(data3.options);
|
|
231
|
+
moduleResolve();
|
|
232
|
+
} else if (command === "free") {
|
|
233
|
+
decoder2.free();
|
|
234
|
+
} else if (command === "ready") {
|
|
235
|
+
messagePromise = messagePromise.then(() => decoder2.ready);
|
|
236
|
+
} else if (command === "reset") {
|
|
237
|
+
messagePromise = messagePromise.then(() => decoder2.reset());
|
|
238
|
+
} else {
|
|
239
|
+
Object.assign(
|
|
240
|
+
messagePayload,
|
|
241
|
+
decoder2[command](
|
|
242
|
+
// detach buffers
|
|
243
|
+
Array.isArray(data3) ? data3.map((data4) => new Uint8Array(data4)) : new Uint8Array(data3)
|
|
244
|
+
)
|
|
245
|
+
);
|
|
246
|
+
transferList = messagePayload.channelData ? messagePayload.channelData.map((channel2) => channel2.buffer) : [];
|
|
247
|
+
}
|
|
248
|
+
messagePromise.then(
|
|
249
|
+
() => self.postMessage(messagePayload, transferList)
|
|
250
|
+
);
|
|
251
|
+
};
|
|
252
|
+
}).toString()})(${Decoder}, ${WASMAudioDecoderCommon}, ${EmscriptenWASM2})`;
|
|
253
|
+
try {
|
|
254
|
+
isNode = typeof process.versions.node !== "undefined";
|
|
255
|
+
} catch {
|
|
256
|
+
}
|
|
257
|
+
source = isNode ? `data:${type};base64,${Buffer.from(webworkerSourceCode).toString(
|
|
258
|
+
"base64"
|
|
259
|
+
)}` : URL.createObjectURL(new Blob([webworkerSourceCode], { type }));
|
|
260
|
+
WASMAudioDecoderCommon.modules.set(Decoder, source);
|
|
261
|
+
}
|
|
262
|
+
super(source, { name });
|
|
263
|
+
this._id = Number.MIN_SAFE_INTEGER;
|
|
264
|
+
this._enqueuedOperations = /* @__PURE__ */ new Map();
|
|
265
|
+
this.onmessage = ({ data: data3 }) => {
|
|
266
|
+
const { id, ...rest } = data3;
|
|
267
|
+
this._enqueuedOperations.get(id)(rest);
|
|
268
|
+
this._enqueuedOperations.delete(id);
|
|
269
|
+
};
|
|
270
|
+
new EmscriptenWASM2(WASMAudioDecoderCommon).getModule().then((module) => {
|
|
271
|
+
this.postToDecoder("init", { module, options });
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
async postToDecoder(command, data3) {
|
|
275
|
+
return new Promise((resolve) => {
|
|
276
|
+
this.postMessage({
|
|
277
|
+
command,
|
|
278
|
+
id: this._id,
|
|
279
|
+
data: data3
|
|
280
|
+
});
|
|
281
|
+
this._enqueuedOperations.set(this._id++, resolve);
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
get ready() {
|
|
285
|
+
return this.postToDecoder("ready");
|
|
286
|
+
}
|
|
287
|
+
async free() {
|
|
288
|
+
await this.postToDecoder("free").finally(() => {
|
|
289
|
+
this.terminate();
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
async reset() {
|
|
293
|
+
await this.postToDecoder("reset");
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
// ../../node_modules/@wasm-audio-decoders/common/src/utilities.js
|
|
298
|
+
var assignNames = (Class, name) => {
|
|
299
|
+
Object.defineProperty(Class, "name", { value: name });
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
// ../../node_modules/opus-decoder/src/EmscriptenWasm.js
|
|
303
|
+
function EmscriptenWASM(WASMAudioDecoderCommon2) {
|
|
304
|
+
var Module = Module;
|
|
305
|
+
function ready() {
|
|
306
|
+
}
|
|
307
|
+
Module = {};
|
|
308
|
+
function abort(what) {
|
|
309
|
+
throw what;
|
|
310
|
+
}
|
|
311
|
+
var HEAP8, HEAP16, HEAP32, HEAPU8, HEAPU16, HEAPU32, HEAPF32, HEAPF64, HEAP64, HEAPU64, wasmMemory;
|
|
312
|
+
function updateMemoryViews() {
|
|
313
|
+
var b = wasmMemory.buffer;
|
|
314
|
+
HEAP8 = new Int8Array(b);
|
|
315
|
+
HEAP16 = new Int16Array(b);
|
|
316
|
+
HEAPU8 = new Uint8Array(b);
|
|
317
|
+
HEAPU16 = new Uint16Array(b);
|
|
318
|
+
HEAP32 = new Int32Array(b);
|
|
319
|
+
HEAPU32 = new Uint32Array(b);
|
|
320
|
+
HEAPF32 = new Float32Array(b);
|
|
321
|
+
HEAPF64 = new Float64Array(b);
|
|
322
|
+
HEAP64 = new BigInt64Array(b);
|
|
323
|
+
HEAPU64 = new BigUint64Array(b);
|
|
324
|
+
}
|
|
325
|
+
var base64Decode = (b64) => {
|
|
326
|
+
var b1, b2, i2 = 0, j = 0, bLength = b64.length;
|
|
327
|
+
var output = new Uint8Array((bLength * 3 >> 2) - (b64[bLength - 2] == "=") - (b64[bLength - 1] == "="));
|
|
328
|
+
for (; i2 < bLength; i2 += 4, j += 3) {
|
|
329
|
+
b1 = base64ReverseLookup[b64.charCodeAt(i2 + 1)];
|
|
330
|
+
b2 = base64ReverseLookup[b64.charCodeAt(i2 + 2)];
|
|
331
|
+
output[j] = base64ReverseLookup[b64.charCodeAt(i2)] << 2 | b1 >> 4;
|
|
332
|
+
output[j + 1] = b1 << 4 | b2 >> 2;
|
|
333
|
+
output[j + 2] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i2 + 3)];
|
|
334
|
+
}
|
|
335
|
+
return output;
|
|
336
|
+
};
|
|
337
|
+
var __abort_js = () => abort("");
|
|
338
|
+
var __emscripten_runtime_keepalive_clear = () => {
|
|
339
|
+
};
|
|
340
|
+
var timers = {};
|
|
341
|
+
var callUserCallback = (func) => func();
|
|
342
|
+
var _emscripten_get_now = () => performance.now();
|
|
343
|
+
var __setitimer_js = (which, timeout_ms) => {
|
|
344
|
+
if (timers[which]) {
|
|
345
|
+
clearTimeout(timers[which].id);
|
|
346
|
+
delete timers[which];
|
|
347
|
+
}
|
|
348
|
+
if (!timeout_ms) return 0;
|
|
349
|
+
var id = setTimeout(() => {
|
|
350
|
+
delete timers[which];
|
|
351
|
+
callUserCallback(() => __emscripten_timeout(which, _emscripten_get_now()));
|
|
352
|
+
}, timeout_ms);
|
|
353
|
+
timers[which] = {
|
|
354
|
+
id,
|
|
355
|
+
timeout_ms
|
|
356
|
+
};
|
|
357
|
+
return 0;
|
|
358
|
+
};
|
|
359
|
+
var _emscripten_math_cos = Math.cos;
|
|
360
|
+
var _emscripten_resize_heap = (requestedSize) => {
|
|
361
|
+
var oldSize = HEAPU8.length;
|
|
362
|
+
requestedSize >>>= 0;
|
|
363
|
+
return false;
|
|
364
|
+
};
|
|
365
|
+
var _proc_exit = (code) => {
|
|
366
|
+
throw `exit(${code})`;
|
|
367
|
+
};
|
|
368
|
+
for (var base64ReverseLookup = new Uint8Array(123), i = 25; i >= 0; --i) {
|
|
369
|
+
base64ReverseLookup[48 + i] = 52 + i;
|
|
370
|
+
base64ReverseLookup[65 + i] = i;
|
|
371
|
+
base64ReverseLookup[97 + i] = 26 + i;
|
|
372
|
+
}
|
|
373
|
+
base64ReverseLookup[43] = 62;
|
|
374
|
+
base64ReverseLookup[47] = 63;
|
|
375
|
+
var wasmImports = {
|
|
376
|
+
/** @export */
|
|
377
|
+
"d": __abort_js,
|
|
378
|
+
/** @export */
|
|
379
|
+
"c": __emscripten_runtime_keepalive_clear,
|
|
380
|
+
/** @export */
|
|
381
|
+
"e": __setitimer_js,
|
|
382
|
+
/** @export */
|
|
383
|
+
"a": _emscripten_math_cos,
|
|
384
|
+
/** @export */
|
|
385
|
+
"f": _emscripten_resize_heap,
|
|
386
|
+
/** @export */
|
|
387
|
+
"b": _proc_exit
|
|
388
|
+
};
|
|
389
|
+
function assignWasmExports(wasmExports) {
|
|
390
|
+
_opus_frame_decoder_create = wasmExports["i"];
|
|
391
|
+
_malloc = wasmExports["j"];
|
|
392
|
+
_opus_frame_decode_float_deinterleaved = wasmExports["k"];
|
|
393
|
+
_opus_frame_decoder_destroy = wasmExports["l"];
|
|
394
|
+
_free = wasmExports["m"];
|
|
395
|
+
__emscripten_timeout = wasmExports["o"];
|
|
396
|
+
}
|
|
397
|
+
var _opus_frame_decoder_create, _malloc, _opus_frame_decode_float_deinterleaved, _opus_frame_decoder_destroy, _free, __emscripten_timeout;
|
|
398
|
+
function initRuntime(wasmExports) {
|
|
399
|
+
wasmExports["h"]();
|
|
400
|
+
}
|
|
401
|
+
if (!EmscriptenWASM.wasm) Object.defineProperty(EmscriptenWASM, "wasm", { get: () => String.raw`dynEncode013bc58350c1Éð|@|O*XØ3R}@³ùÆöÁ¤½CuÙFõ¶=}VònоÑX³W~aGÕ5?Q= Ú
Î
N= WeǸß3í=MÛßǹHÜjLvïêÀ:m°¹30>ÉX!¿býOýn
|
|
402
|
+
®Fj{øú¢ç=}(ÝñÜn moǰ¥àeò?È×µh
|
|
403
|
+
ØW¨;Ñ aØXæU{¤øàÖÕÀì·ÝÌíø±tâÔøeVO÷PÉ´È~ÃòsX1´ÊPyK·ÿKZçµ WÑ¡¡_ dÍí+]Õ~%Yïþîñ ¾Ú·p[òß ¶ó÷ylhnn«²ù*¶Ìéñ®ï(éÇÃRÊÆRÌ-¬ÐoÒÊ2z+ä$:ÄsxÏ#Ït!MlBq§%Jè ®Ä3ó°á¸eÅ_Ö=}iTÐÍmoðbMpl¬EP°e,¼Æju®ix>#}NgdÿÇÄbç9WZÇ·n\Öá1ÚÈt.ú6bì:ûào¯ú4Ïø üzå¯#ÆkM#úÿ9ë:üÒÝëÚà¡d%0ÒekÓ×mðÆ¸½ùÿâ¿Ò9 ÄgªÕÂ%ü¸» HÁM#Âq²~èn¯Ûa_9j= ùÿRèæÊó%M
|
|
404
|
+
¨,Àæq%98a9%T2)´z«9gsÒÖ!ZhRõRÛyÕ²Ý=M<Öcº »~VFÕÖx:þrÞðn£x¦8.è$K9þ¹úSnÍ3¦v
üuºsÕñ=}1=M5ZʦCÿSÉ2×qÒ««Sa»ù±(¢º]ÀmÍh÷/¥3@sns2 %7ù-Q|nÏoöjYÛ]}à2{EBêÎ6>ÁbÄü
|
|
405
|
+
á, [DAÐuùjeNDEëÔàZºlq»J/˲ájºßCÃÝ1b)øtN7Ê=}gÕ®òÍá§8²kDïû¤åÒÅóºc=M²= aË.ooèf.QZj@bñ>qV©?æxñRô|_xwê¸÷È¡ö"C¶2[¼ï¯¸©KmäºúZ
¡%^°bóþ»-¼Ú¥ZI(pþ
µS%øµã*Ò±8f:t¡éþõz¶<Äfñ*öeP8AÓ¾/g×\С1Ï"= ¤ûGsW_¹ÔÈX TãàuTíEKPüݸ#åB¢ñ?:µßĬîFI8QY;X
¶í¦k{|¦éíà/fªi>´EÈoK= 6¼lÖr²ÿ*YÇvÄdàG{Ö,Gz½.gzSdïV%
z¥8¶²bO¡2\nOßV¡S2KçK´UûuÛã~f¾K)ÊÖ#´?#»ÅYXOøò TCB}LUk,kÍ)]íiE^ÿyW)Ê»³= ô1_½úÌÞÊçýS¡
|
|
406
|
+
»£jÆkhÐ1G<è^àÙç?
æF¦Ç/ã«Eý6ZI¹tl.aëül|!&:MÓå?N@øËÅf 6cì$w,3~17F=M𸳰aõu\9æk I&>V®Æ/Øa´ %¶¢],ÿ:±wäé¬áS¥FK±U¢±ÓPóß&®e= ÍÍܯÏ×À@= Ø#Ðk[NCó÷ÀÄÞGQRcnI}HGñ\ç= öè^áygyDÔa©D¦
'ߣMߣPI¯à¨=}=MUÀ¸çy 9W½LíU·ôzwzÃsÝZòÓ3F¸Áè£âÑnÕ%Í¥k
á®=M×GTÀÊøfëM-UF;uåÙ#
X#
|
|
407
|
+
n©ïÖDÅñ¸q ,Թи;h¿åñ#µNÓ÷¸v} *Ϊ_= ãýØb6N=MH§'®Iu¯78ªÊÝ#42p´[/¿E= =MxåÄV§Ým©3?;bô9fb÷Ð'¨ÈIS7ñ>¬IÍÜK tçÖJ 7û6ߥA/|BÏ=Mõªw¿T¼91óíÒèÔ_6»Âõªvg2ý¡õ÷Ò=}Å3ýXm²¬bÛ}U¬0¸Ük~e
|
|
408
|
+
aY¬ÈÛµ¨¢0Nñ¬t³VÉhÖYvx§"Ç5\N'ªÂ£æKlÂ?þ{m¼ôê±ñÔ|Lm¬t_2%¤E}Ù>ÎFûalSXø²tRªÀ8¥£Å|ÖW(Ù)\3Úwåì:oíý±Y4ì©géµC³¨Q\ÍõMÕ
|
|
409
|
+
!J½6ë:ËgípoÒ=}I=}ëS¯¸
F=}ÙT__U¾&\íÛ ¼Âkg#úÚ¡ÀsÏÔTµ³ÑËßxNÉæGç^4Ñ¡%.¦U±O[ø¼4pͺ7ÜâªcÔ¦¢:ou¹8ÌzîXf¬56DC´Þ]Ó!=MOÀÕâGÖÓ«0¤¿Å2ú
|
|
410
|
+
éηNóÚÄr_Z)6y&2^F|#²ì36eòa¦rcLõ5Hö<r¼J!í¼©DøÓ@¨åPófÑ£®·§hQ®õ½c±M¥W,ÝàÜ««¿¢Vmù| Ë·wj$témè±°&í9yòµfæuC:E@[RX\.qéuDýé(iao»]W5?I!z®¡±âàkËý¼LóFµUM¨cEu¼üÃFÔì<@y´ÜøÆ#y«µàdMå@ÛXüû¼á¾ù[CHºÀ[4ñ5z:ÓàV[BÒ/I!ÕÓÂXj«ýH&o³©sFÍ&-ö«7d\X#>¦yñÜÃMGc~#!Tüt? ªÌ·«á¨É»ÕBms¸Û®0úBjÛ(^ÓÅ®¤ÛF¹Ðma)'¨ë(²ÄÞÍm²¦á¡Bá|%«L¹a\×Ub= -f®¢Ü¢«GÌSÔxÖXcÃÈÄh½4e#"'
;P >Rõo;%tÐC$g%Ä>70* *©cX!C7yôîËtO'j?óíÛµÁûH= IróÛ= kòwiJ]]þßY÷{mûpLÿÊeLA¾À <½å
iWÎ?o©t¡caâB¼iBüÛÚ¯:_îOJ7"\¥^EPHQ¼Cõ *{ÎÁIÅÅ$ÉVÇbo]XÆs)^H²®wójÔÎE6OÙÿsRͨEùï¼/²OÉQÿmå«õØÆZa;Ä{ <}¸°Ró=MÖ²ýÜz´|´pµÛá!cïÆ,@zÃT«¶d³åoÙ-KyÁÓ4gß-²ÂxÊØÏ\@q&}eÔÂè\ßÍT1Ï\kì÷Úw
é\ÀÄ~<à¢e«4E¡/«Äaõu½=}l°ÃNë/Jå=}ÿ®!.N8
Ær)HÖ43¡C3Ôz/N:
|
|
411
|
+
Ú7!Z1Þqö)Mî½%"O7^+TÉêaF8øc2ú%ù3}Ô²dU(³ÍZű£y¤af¿Ï][Hþs·Ù$EpFæt4¦$Vú
|
|
412
|
+
í!hãV53øKéâ=}Nå22Úú"AÃ5£áª6WÕæYôÈ^ AÜÍ)ýYÌúë¾a0= ºvéè:7Mô=MWsE²£²ÇL¿ò޲ܳJ+= 5æ+,>
|
|
413
|
+
¸M÷7jè;/_ý7ãzÈ)D÷·Ç4*È#Ú¹"ó!z0 º®µZ*ìx®
|
|
414
|
+
R>sÚýP7:¯ZZ=MÍ
W²Dê6Ó^Nq= fÍbN¿VþÒª£;û<cVýîåª6§7dËÃ-²us¶Ò¹%·iÄs4òf N
(á¨|õ-yZ$E)¹ï5¶Wí]Q\·1U9:[-zQ¼É7÷/þiÉõ ¿«Ob)Iµñ0
|
|
415
|
+
lÁNpʦË-+Kfø»
|
|
416
|
+
cù@®W¡Y,îuC6ZK¤éϲµI=}= óáÔÁ4´-õfÔmõVÛvFÞÀç*=}éåú6³úÄßy'GD1dÕ±È"x^ù1)DÚ'ö\©^6§ö_³îªZ|¾S= @$^*- 'ªÈÄb7ÎÜt7Z4©ö§É
UhY{ÓÚh£ ±TÞÁÉýÒR7Ë¡t¨<#Ĩ¡@EK7Ïb3Uri)åw=}ø»n#MMuåÛÄ ¼ü÷´ÒuâÆ8¯¬»R6I¡WBòîtnP=Má-0óà¤ÕÆ+¯KæÛcâÑG½þÛÀFä7"ATMáu+mø¼?Ó^Ê?Ts÷ÁR7ñ³!åogã _ËRª«J$¼nÇ h ýõgcíÿ·ÅºÊ§~Ì= @<Ûx¿a¥L¦ÃO·òi½ eû
ÎL~tÞ/'
=M$x@½tZÅYÖ&¼£]6o¹åÛÑvàMfgp£7Ç6ùßkØ5i>9àlÊ >Ð7w)ý;³(JKLª.z7ðfê2jÐ"£.SJ®.çòìV\3(ÎÍÊt"´»µ¾¸[
|
|
417
|
+
¸8÷Ê+¶AúCñ&ÿøH]÷hly^Îàî®ðgåA6íKÊ7ÒäGo¿:¥G[Åþ¡«a¶GÞ¾!â
|
|
418
|
+
=MnB»ªÖ1ÔIZò2»JkëÆwùºÃ
tª¯xÇ»×ut#jà:æîOÒ6P¿èrñË×ôm2¸ÓJ±*h«koâ}îµ»¯£F÷§÷¸#a®Å.ùÌ/³3Ú9VÏ[³22L[Ó,ö«W&$/UVq* fÐ;F°®/Ѧ·qo:SCÚɼñ|¨íu09é±|Þ'ÏYÍ. 5Cm;Àúñ=MmW8ÒSM³¦äHmsA^mÞ¢£Â©}oO21*ÒÃÊFbäT~¿P'7ÑDØÖW®äO{Z»AØ;t£82Jb^:®ÇOßv@r*o:×>·ûxGÌt/ë*F:7ÝÁwd¾º£D´{¢= ´¾3EK·<MÉ¿8ÂìiÔÁ°r6Ö!F{'H§Ü
|
|
419
|
+
y¢rÍn(2RæQ{ Û»Ìg{¸G%~»¥QÜm$BË¡[Ú®jþXè59[ô
|
|
420
|
+
âRAÁïywìüwrz)yhX#p¼èt!Â1~^ h6kî^C6}hpB{£Q5x¿ÁoÐ= à £É<ó«¡ìè31ÜÌç±3X~:ÚÂS~«3/÷9ÚJ8Æ~^\¨ÕÀvÈØýd9zX|ÿ1¨
|
|
421
|
+
= S^bÅ]É:×l÷EÜ1= ¦¼Ê
|
|
422
|
+
T4ÙCéhåìcÅ»èZ³}!©ð:~^¯ãó*Mï8rÚm}6S3#ùÊ(%òYï¬%a¶¯N½
|
|
423
|
+
ïõî/Q ½É}I£Û£þ×ÍLtä,QMÊÚ0la; {Z½¥{é¹3§£:Nj´¸ÆbýÖÜÊÝizeµvýEärìY(£Î£Ô¾oþ39hn,9øÚ¯úõyä¿Ôb4q
|
|
424
|
+
ÏTÊî·ÑÚQÆï+zy¥0ob;¢ÀïüÕçIòõ[I"îY°âÂp×AÕ # }êN92Ü'Ú=}Å®Õà¹Xg[9ÿÐ58¿Cke.ÓÏ#êzü=}ÒGkÌ%Æ"èÏ^q±R3
|
|
425
|
+
=}*@Å@¹æÛir·÷³¸{Ôd«WÈHÒ=M®Ôææa!RqÄ×óÁá¯SÛ®?Ãëê ¨.ÃW§r+TSóÛ5_µ®cT8_WqPãtå!Wü= ºmµ¬È
|
|
426
|
+
Ò+Kq¢¢ãgõ ËÁYbHG@¡yt]NÖ¥¼~0X+ûx85&Bù2×Ûßoç¤A:$'áôÑÀ9º|:ª °zï:$Jo¯«ËÜÛ÷àSWîK5´ÁË$fÙÓ¨ÃÞ1£L .uïÇ-ê{¹/&êÖVÆcí[>£µØ¢ÅµûÈ{-VÊm_°S³òÀmªQ©FlaÞñíÏW¬D©lÑñ)ðss½ÎÿVBt LªS+¬KB\;ªå'þmd'=}ÈnÊu&þÚ®4Ps±ô°ñZ÷¹(ÌýlÜ*M»N«Ïö:[Õ.lrP½0w¬=Mâ×sWíQx_ó?CA'
|
|
427
|
+
ZW-òªi±´¥²ÊMZ§ædÀZÐùõ«óZófÉÑüÔè\rNÀóV6Á69f~6dOgD пo>é#Y¾u?ØÞØ-Ù±¶WE¯=M^ÏèbȽqÚäqjr½ZmFïâjÊ4áÃ1XÒ93OÊ´YöcÛj¥[Èñ£@!9+ÿIübFu#PB©
|
|
428
|
+
DÑÌYíuÃàÓ+µ"8q1·ìÚ¸óTü-¤¯ïiõæ)êI÷ïÑýÙ¤£.Ð£Û P¬A-|¸ëu¥ätj ì¬ÔåÔ8O¥ §IØqÍB¨|D8xò)ºmÕCÚßÒj&çþâ&}D#² ½Af9« ÛÐÑWï^Àþ°w4Ì÷ÿäŦü-yÑïc®Tú÷5YQp'ùÆ×Íçj1vaî@;åQÃÀ~¶´õ|}ñh×ébÔF4\BÂC&ÿé>SB0qç=}¤+«mÜp®¶-[j7ÈÁ(bC´=}CѼ±§=}Êx±µn!üÍ@je ¾
Új¯q!Ró6×üv$2ÐCÿÞ2!ý^oäuÏtmQ»ý)ËgÏ_¦npËvõâ;þª«âÍ×;sbûûoD³auæ³e<=}ÿaSªrýô:kû
Üuü>YÃWa³'ÞF{À¼ìragïÞP-n£íñN¬Xª½Z43<yþ²]¡a®ãK[³'· h~ÚW6xòv2ß:.Y¢vÐ|°3_+Æ×@8±+p e+©Æû|Ã\|. gè+âT%ç#0ÃêÛ|ò4Õ®ü= 6©Q?оô=}Vnqæ
ö«
ø{ÕÝ£y"ërkÜn§ÛVKý¯«¼2Ìäí½÷Á_9¸O$6GÌljÜÁªYý»ï#ç[Þ&0¸5á# p*zÄɦ/¦ßõè{»ú-%Ç.¥ ×¾A?Ñ¥m0!{eõR,nÖ° íe .Ë= \pÈÞ=}4½²N\xÏnYÏÁÏ®»Ö½T¡Ðº.^¿èÝÛ.@¸u9¼pÖZ¹ÞÐöxjC%fÚl1 ÷þ¬Ñq
â|Tí*mc~
|
|
429
|
+
4:íd;8Å"7Jî^óðP<ª4ïîrضgc
|
|
430
|
+
|
|
431
|
+
m©°áÔ
ßjf+áÁC®êAªiO!Ðp8!1ÇÒë-Jö9Õp+mz¸
K#ôxpGS øQP@c1)Ó ¢_·=}ºøÁ9VÙ£ÞþôbF0C±ózHþ, ÏÊ?dgºPÙ6 ìÒ
òÐMþz²ÓR½7d~t¾óÍw¼äN×3lVªk ·6O@*%1ð®Ðùã͸iæhÔ3é6度ªÐN:A6xðéÝË =}¾\&¿§ß<Í=MS¼Ê¬ü8â÷/Þä:ô*4Äê¯b(çi@ñ¼(|«¥M$.'i3ÖL>\#qkºýþé;3éyM)"N\>'?9.Û6c7síÒÛ)°tU9QA5zòfvèð.+þèÃÐg?»|îb$±)|9äáàgJ
aJù[ÿh:©rÎxò¼
ÿ* h5z«ÅضKÚÛ¯èß«Àú½¾]½íDØÙ¼mñx½E¯T£E·*%eúÙ=}å>òGG7Õ.ì(ö,(lÙ³¶°çÿßrê§@óOcZßëÏ/m|Ñ4Jô-@dbºX
þx.I*çÃ3éÙx9dÚ*zQÙP;Òönk·µ×ú¤îB@ÇW[3îÉ"Lhó Y["nÌH8<^¬ =}µ«|ͱ^·+¤¬Å/3h^Óìçç» *ãöø5a¿3uýñÌ0 |jWp.mÞ.MÉÅw*iìe|î¼ÂSÈÊWÒ£éÜ
Lbé4^&©SÉ«°çnx¨JgÄ9°XXî=MñÒ?Ñ¢öN¿=
|
|
432
|
+
AèWÜ õþ5¿¡~ì "3nßÐ׿â¨Bª3ÎNdÖb(,,âÿé®wä¨Â[ þ4þè|Çaán?C¦°¼è{Üsîb>ûåxmîNúÿZ"Lß+û= ÞßO
üwí·¨î®Ü_Rä± \Õì±g?Òst¢ÌcÂÉ,ÊE9<{{ì20Jùl{JDE¯= JõËaÿôÀbàè±Ô¥hV>¡%á:ƯîÈ%E3-8ð= öüönÑ[Q_fTpEFc½´ÇÖýc§PÄOOdâ+IÒR%Ï7 ¦Ãe¬ô®9¢2Ù*4
|
|
433
|
+
EòCñÔ·T¦aG¯a*1HOX®Ï=}J¦¿JæÂ m¯J1«uð¦JJw
|
|
434
|
+
ÄtÌñVÔkMqÛÄ=MTÏ&ïÌÒ9}¨ânzìrµ³¤ñæ4lÔ=MÎ7l¾É-¿oÐwàâf¯RìàÅXÿbÃfõÈS$y^x{u=M~ÿõ K¸x}ϵRÌ&¸ÿÕ Læ5;¬©Ü¤{³«0{ÿ¹g«êD¾ÓWFäQ ù]±koÊBÖUÁ!ìörH~.LHþwq>nGÂSÕáÁÜ´';§§SÕþïM]Ê"p'ÚÅÞ«äÕãZöêAè(¦7fa&ÁÜ´§BçoGEñ¡SÕ±üµÁÜ£1;Þ.t±aJöL¥o:]ôáÉÊ"¨ªhì*GÑ=} 1ÙBW'(ßk{Tξ!ñi2k˼´wô|&¤Õê·,Ú=M¡oV¡î|8HÔùK$¥J(mËßÝïOís¹Cÿ½au^<ï£Édó/%í²Ýá'_dKÉ;æó}:5®Ì?9ÈdÒ¯Gúa}{=}¡bG23bØ26Þpâë@QÃÞoÜ«í¸Äî5
ß:¶9¹4¨·ó5}A·~¯m¥©ªs{?ÓüôZ3rèzÔUª¬<ur¥}uµmT{~c3!ºù(h$ÙÄ5!8Ýö¨ç½ý½lÇ·ü^VfÉ£i§³væ·3Bm;«ä³ãVÁ©Òò"³ñëíëß§T
¬ý¦CÝHéôtàÔ1¦<¦e¶\qÚ$92¦>-oO
|
|
435
|
+
!ú)h;qS£Ç@²äÃÔw×Õê99©¯Oñ^á|mæé4´áíiñI¥\¼)±Ù=MÛȦcîõy4~1uh\é=Mòðs=MËh笹ç ¥Ò$IºQfK·|ëpÆ©{Ù3?ñêÑKòV¨ôÿ½ªÝyÎ'¯4oôØäï§cXfy¬q: <|µ
ÿ9$9jÒ[ÙÌc#KHÜL4&g|ÎÝ&°¥ô££Öþ(µØ2u3:¾Jptjb^/X8½Þñ!°.^Î97ÚØ úÉcDÉP0óï>Ì~y5ïÍ{ÿgµ'Næ¤ö¾+ÙÊîiìüXRjàF1Ïñ*
|
|
436
|
+
>>¦s'ÉØð§ãñ¥A<uÍ'XV
÷Fd}^ÿÑILÖÓAÅÉL^P?Y©Oð)]i$pÿõ}/Là)[Øk¹Vìå6ÃÙYï0Iß#³{Ç(ù*1$q?àôb;MìÁÜ´§=}qpGvrH~.Ó½kGòû1G~.pklGöÁÜ´'uko¤\sñn}}Ì_ÜhùåÌ7oʨ»èVÁ!ìà£YV½èTÁ!ìL
|
|
437
|
+
kïF1ãËÝ}ôÉFàß2¸½ò¿áW±RÄËÐðãó¾!òýù©
|
|
438
|
+
N~%sL¬cv®)iUïJ«]R¸yJr\xÿö\P¸i¯e¿)JßÌÂM§ÈñI
|
|
439
|
+
LUz¦
|
|
440
|
+
1µØ,5ôq,:
|
|
441
|
+
EC0P$θ>Â쥪+8ÌÀ]RPļ£cÎü´éÿôÚÄî?sÜ$ÿÆSÇDô¸]OyÎ-j¦*<a¬ßıÔ)é)%ÙéTGB>]åC½;DbM_ìOÎOCKà»O cè¸~)½=}4׫گÙ2=}!÷´âø®&Òsªï6³ªh
|
|
442
|
+
¶**8º7¨;Çÿ2Ù»ªõef^n^n^^n^^^y iµÔÙ÷Ä>ÍÒ<.ø²±,À6<
|
|
443
|
+
.VRF é üÏ@¢®gsÖí'UQ×tF ×@¢¼@¢QÜÂûd±ûxªÐ ÉäH§¸Ú+
|
|
444
|
+
ÍuBý*
|
|
445
|
+
¬E¤´a#±¯uÌyÊQåÑÏzâØåj¨sPðÉðn±Õ¼£ááH¬óGsz¶5$>àAÆbT§¸ßäÓB÷ûÀË
{³á
½À5ÍÞæÓ«Éz5%Úþ±c
*|ð)o÷ ·Kôàþÿ~Ùc0>ãvP«A°K8·¡¹ÚªÑÖ·ùgÆwÆÆ®,céuÎæ´ò'ü
|
|
446
|
+
ÈeÚð?enojÉGþ±âRÙòõòõ1~%îPozá>zwVÊuR âÞR[¯¥J%ÕSæWT_Ñ7ËWø1*¡=MÀYµ:¥ðZ·üø¦Âõ3JÂ5ýü¤FüºQÒªÖêBvQT²ç)Û
|
|
447
|
+
%çI¯«ù
|
|
448
|
+
õç°|Õ ïiÛ
ê~b¼ZQ&ûÕN²ùC²(^Äv¥Äëk
|
|
449
|
+
§.øÇü
|
|
450
|
+
Ð|Q= á& !I$±bö½Âí9îmÔ ¶IyÖg×!ļi^(¬³óx}5'&¶2ÎgL~à"ÙÏã^ðãD~aíBÄøãS þ<@4¥è»
iäb#ïèUÑUhèÏìªL[ÙQ]©â_Hi_¾°Yîµ7vn¶ieÕØÈF³Êå,ètKýKÉýBS&ØÅw»0¤Èlûͼl£[= ø5»]a8bÈUÎ-,zDÜ«dÏäsQ
|
|
451
|
+
¹.Ýõã¡c
o$'ð§ éÞT-¦æm&ñäÄ1ÊÉLC|($àÛCسW/¸âÉÇ@âAtVb¸5À
|
|
452
|
+
Ý%ËÞËѼjÀß¶ÛN¿2âaä_oÃ'°^ÓåÞpòÏÏýóJHð¨6ñ â×xà»öX5¯;|J Ⱥ©(SèþóMZìÞ+à#·7¼£W»©6zª¯w±ÆAHcËæïøÝÈÐF[þ\
Wñ£Ò¨Éýóª<D éä;$-=MõmN·çeF³ï²½öaÎX´.&ICÃ~üK NßÚÉXKèa2C[ñëÇY³ÌøöµÀvÞÿRë>SJ®sºîÜwûöHÞ [8Y/£ä2ϾÖr÷2ûFI÷@+óWg#7,åûd¨×ÞyµOÊ wë¾B-~ö×/X3Íè|êʹ"Ê.A ¦óöDYêÖDJ»5èI0*U»}:]\X]*»>Béúûücv= }#å
|
|
453
|
+
â˪27,7]òÛ¼ìñýWÅ8'¼êe~»7¿ªFËruÃâWë Ä«=M= ÄÏÓXIóoN8->Y/~6H_Ð¥Ä ¬ª¢c]d)Málúr57§k~¼÷aÃÍL}WE;ÄÛG~Mêæ¦·Å'D^ñ<zJµ,ÂÅ8ùÈ©^ζËõihê?´à¿åh÷÷D3Ô2ëhð"èç°í½0°§Ä ëPHà:Yjuû])²®ØXÞÉç]Üiù±Zp}ZL¾r
|
|
454
|
+
Iñ>ßv¼>O¡W}kbêîô¡AIزuïÖãíå¢Úpv¿!_ÿA¬¡!òË51@B¯~¨QÂQ¦G<ÜclHôµÓʶ=}©T¬3*ÂDà"ÃsI&=Mî¦
ª p"EéjÊ;ÑÂ}¾¯,¶.Þ¦òò¸C!^kLØJ.Ð%~Á:ʹ:xJ'wµ+z³TÊ% Â+6zjx¯4ÂgU¯¬ç¨ÀZdútÚ=M¯^U¦rNPÔæO£EîÖ÷i§Â*ÄZþ^í¿Þ£|þÁ|:y&{6g(<«K-Y®ûðz©m-zQD¢ÄÃÅls(Ù$ÅK-ë3Îe´Ôj-¼µËüÍTITÐ)¡âZWäVëã>Ûß#ÜÆo3<= 2Ó£¬è ZtFtLüªó#Å Ct-é>¯¤Ë$¿ªBex ¦£õÌ!Ég©åïÍB~Å4¬}ÊÕåÄÑc©þ{¢ÆTêU!Ò,Ph}ä~ôçéU©h½Ð=}_0©ïþFn£k¨ÓýVFéýïc=Máv-÷Vn= v¹Åg͸^*5Ý$¯rÜÞRÄK&ÊfíåÃKÈÄA¦ò¯9iië:Ù0´.Vf$= ¥í. òùØËMIÆ«¦Ëý0ËõW6õ 8I¹]&kóNgì3Û¶M²«hc.ùN= TF%É1=}Ô;ñ_Öº6@Z² îë¤pò6]©rcºa¼o2ç¶á¡YçdḎH×6íãí/f¹°Ö#͹G=}ˬQ°Åwõ ùYY$waìÿ¿³Ä§ß³º¸xù4ÐøÒ¯)Ãé*-±øÐVöFéñ#ðj^´¬N Ã{þ0ø´-vHDå)LN¡ñ2¿ÇIܪZ{Ñ ë:B6ßè>Ø=}ðaÃcJ-Á_ëâÀïþÇðïð^¿åN]ÆX¦-Ô¼^&¢j~óFÅÜSÕß¼l bR»BØöÂÍ^<p$k(kCÚç§=d{()ÌJýv\ e*XÉ!¢)XÂ[¿ëö Êü¢JãÛW=}±«öuï^TÔâ«9¹O$ßÖY°LtZØ= qåN2UÔ}îÓÆ¯¼Éà mÉM1g%²½£hÅq]÷h¨oÊ$¼e>B¥]e^Ñ'QÿL= ó¤J¨yÉ õ<ÛJDáhG³d[bñz-wWªxýÙcö
cÎPÆx|«AXÚÎÉRLæ3cÁ+ôä\0Wyâ?î@·aº3z¦ÅÁp³=}" Ë= L0¨ÝK¶Úõpi¬Y{¸#ø³[¯zãBw¿øØ"å³ò(mpß³=MI-Ûp´69¬°Âe<JíªíXy¶)kô0¦8»ýmIó%SÑ'Ov³]ó§S|M òsz
|
|
455
|
+
ËÁ..#ç¬A<ð<£ãOà'Ü\ò§"
ùxÓh*ÅPC~
|
|
456
|
+
Òá(a?-ÍJtUÿU?
=}ó
|
|
457
|
+
lÖöaß.Êl.f#þxñü÷D²WdÀTæ7ÔÁ'r¬Yï6£ëö&©ðÎ'ìÎð9(G©òä:·kãúñêUàs±=}àÛ¢Ud¸!;PN4RÝõ EKå¦í¥ë iuõ½ïÕ©?sx&ÌËjï=MÍè£ÏzÞ|\Ùâü%Ó§¿Ííà±Ço³×Op{vµ²Ä=}Å/Q£Ig&[UèY}oòÄ©.¥>½öÔ½ÃdRN:Î]åjW'ÃYÒàßEqJòuJtBédIvRñyÂÖe?íb{ælWÆû°uÙ3-ÇQîfSÿK²sÉÃ$mm!¼MTª(·Û-Cß?-\HXÚ=M\é¤JÜô¦5ta,}Z±Í¨JÃÑX¢¨ÀÌÝÈFk@ª)ÄK®YvÄ}<h%&³ÀCn¶ØEß#êöp»n¬ÉäNÓ²WA>t@f½loso{'òÉηøð§Ŷ=}ÊûN
J%ú/%:pû¹=}'µ»K'@'! åj1l?3XF<·Úå¯nûܹjAÎFë »è®ò;1û Ç÷k{óvîæu{°q±ûL WùXöñKnìM¼0ügUi©X²{¶vÒüËuÜ| XkÛÆmø÷af?÷°ªBé¶@G#fç¶ÛêHßQ¨õÒ±Ëà¤à0§H¿ÊÑÌç* WyTf|éw¼½2=}®
|
|
458
|
+
ÅÃÔnVãoM+¨±fZò|ws´+çÄ6Kd3JÊl¯Éf¯}ïÄ^̸¸8'Ãx[V ¦õÉ&+Ó\ÚÜ]©ÃIÄ^©u]3v'?êIÁpSymÒÙQ#Â7sæ¿¿ÕÞýèIt£1ªÔ=}Xàv$Õn¬Æþç-µ,Qñ*À·7wʾä
û¤z°á×K¬¿ÐtÝpWÌÄÌÂT óBGJ¦XÄÐÃkÜ^étpï3·Mêo¤"Æ»(Ä~jr¦æàè¨GñNß(1.©iõË=M©ÁuµSKù¹ãÝÐ
~ä¹s;©êѤrw¶O«m¾ùéܡڢÒÌ'"°3³ÿM{v*W¸¶]¿ÿôèxBÖÛO ï= ;n¹Îf;7:ÝÇ1½cÞ¾¼W+Ã3¸)ÿRHñ¢ÞÙô¢¨çt[¥Æa£hìl, ~ËäÔ
|
|
459
|
+
7ª=Mû-ÅàêÒxýað!gGÃÿ³Ë_½)ýÚÅÜ %#ay!WÔxÀÀÝåTíϤ¹®ø;(gU¥´(ØMȲ:gªýü(Ï0BÝc×éË@¹¦jÎoy쯶'½a>õiKÂÓ÷Åc$ÃãöËûÏy_UÏwø{ÿm«9?cÞT#Mê8=}¶Pôì_#µýì7¼c%?gÎ}ÕüéÖÿmNÐiF(ãq
çoxh>Nä«Ï¤&ÈkûÈ´í
´¿ªÕn?èÀ²ÆÿÔxoÚi÷ÃÚ
|
|
460
|
+
]Ø;$3DƼâW2ÚÝ= ÃBdQ}ø
±W¢ÜZUNשð´rr+Ëϲº$)¨à>ê=M&Èt¬Ë,º/ê|ÈÇ*½U®î*¤ïßÚ=Má!$92ÕávJä
|
|
461
|
+
°ò5gqa:#D8¹ÈXqøë±Ã:°:ô>+K¨U°*YnçÑ:32ùuÀ"öë%KæP¯]vÎ%¥§Ñ×@üþ±Y×Òd!ÀÚ_¨éH8ÄgÖíÙ«´äñ«TÀW4*
½
|
|
462
|
+
4G?ÊRÛÁ[ý©L@§÷MyjÐÎôzG{¯ZÏB¼[UGjmGÑÛcKÔÜýH¢>Qì"^Ý,XÇÈ~ÿ[ ÷âÑÔ«Gï/ò[3Ëm<¡IS?º+R|+¾í½ú¯e3Æ¡½úC½zÇê@ºÌM7ôx÷cC9µAç_3ÎRÉ]ÃÊÃ}üò¦?ºD9^zÎqü:s2k½¸|9½¨´x!{hÔ_iû7-wýsÅõ»zz¼S R÷-²ma½üDy~½E
|
|
463
|
+
Y¶:qgWýURDÏjr¥ú>ÏüP²¨!ê=Mº_¦ækÏצÏçØmx ,17Jds!¥á¨mòmý}ÉÍêÙzZïTò%¼ óõÓµÁQ9Ôõ= §òUB~Üáìsæi_.zWb$fc+îÏ$vD3ôì i3u z?ªD/9k¹.r¬ó)£êðY8ü¸£"BÆÁ£Ô¹Ëd¬jhôc¬¡GÐ×5u³Ð5è\é4-ÊsàlT2ºá¥øÉÜ6n6°Þbpw !×^ßdeÛ,cg rääÃqÈ·1¤Å^o8®â¦dæWÂßTÎaF1sºíD¶×ø¯
|
|
464
|
+
Z"Ü/èïúÝ aè}ÅåãòlêÉAîÄ<óª}V=MbÏ>OÉl¥+ì'U¢ø¨Ñº?ùZ¦ï³»ºÛI©³+ÈuóÒ
ÿ1,Ü머Ç
|
|
465
|
+
Y=}Dµ¤ç:¥áTdL÷Ï ï¢ G4¨Q¾îm1ü-ôîûYV=}æñoF§É·mO¯¯tÞx= ¥(
ôÙ¸ ðXå©Ü5XF!mã^½
³'5ÁïF×¼å×eÂckyß<QÞ,hòo·âªãÁêº4:¬kçÑÖñÂãNP»QÑ Xy°(¯°ºmö8tb[°
rH]=}d^ØKäà=M§¾Ûä~RîûYpã¥A©ð©qpµî3 (bèÜÿÜùêfÝÌ®F°I0Hê²'/e¶éàÞ,Q:À)#Èi=}$\Ê\ÿù]Ì<ÒþMÆ¢$¤üo1X¿÷9ÇHLlÑkÑÌØª6uG¶>²ÏäTÝñvÔÀwRa]÷pxZì¹ð>ëê¤÷ü= ÌJvÚ¬ØAÄáÝfçë]þú·ÚÇVêym3pÊÚÀDzÇ=}U"¾îÇÐhP8˹ r8_ûL.ÕìÑ^ªÐ% ¹ò쥿4L[ùÉcÛí8Ä@Ðhå1HåãYf¡hê6&ÈÔ¹~åAÇÿ¶ìï½,iu¸+{
|
|
466
|
+
Û0Çóæ8ÕãѨz3z?Nýhg1ç^7È·= \ØwaV5QÅ¥FöÒÂÇ©Q'³%cogßgÓºÂò8_uÚ
ó.ĹS¥©*¬h´þ¯¬²v2z-Æw&[ÿbIû^>;?ùΫ«nTjÅJÑQëóÈãÖ_öÔHeÞ®ËtǤSÂpnáøó¿ÌuµØ~YPL½y4æÑ;!:«¸-ô"=}Ò±§»X¨Ýñ¡Ì§>Uâ>Yã¾"çaFfe´·6e.Ã$NÉÔÃ_ü÷ÛßË:ücó'¬ð[øé.àú/hè#Nyq*¢½ûÀáͦBq!9
;ögMgùÊ«®ºÊ$£ûÌ̤K[Ïnv(ó$±ãâÉÏ-
|
|
467
|
+
ú{ÂÅ,<ÊT8ö¤ê}æõq¤!aü:ʨÔû\¹I}ëT5Æ\Ïiÿ0QEïµ*ñKh7b¾gæ'ÐÂd[§hsYàm£¹KP®pýîöñ輸[u/Ú¸= Y6 ÀYu÷²ÖÖ]r[7bmj¨'æjòàlMO*Ç·¤ñ1(*TÙZûÇIîiÁþ.ÖûS6Õb6yYìÒ$©iêãâ{9DÖ[0t*4ÿÐzº0ð*µÝJ7ÐRbå§ G'Ká
|
|
468
|
+
è2xêy.êä:kñnËÞ8ÖúuqhÛâ|èä(Æ5õ}v÷êÍF=MîXé³mî´ü|pî´ÌõÆÅµÔ÷)jDo
L¾6ücÖtÞÔ,Æ3 eð_ÄÏ.3,VöHDNå@ÔIØ
hÈ1¾¸ô"§wt]Càñìßï÷\kò§Ëk¡áÛØ<vÐJÞQi[ÂÇ¢Nª¹á¥¹$t¹Ða&Á_r5×hzM8%
|
|
469
|
+
Îf93é.¸E¿ÒZ_=}̯ܵ±üù×fó ù2½NQXEÿZ ìt«î9^z?êfô0Hf4êêfá¤>P^^'Öâh䪽
|
|
470
|
+
à§÷ÊZ4t¯.®'cÎ÷þ!%n/ =}¤=}}Ú²Spêw½ËÖPçT¤õߪU,2õVuPT8ÌÍ!YVÕ,,]^éyào7=MRÇt]=
.&ùdDÒhP\ã¨-FRÆx3´¿¥ûOªÄ:{·ª7A=}ÛEx¥=}VîAOúõL*þ¥ÑÚ¬,t .²ÑO·(ùqò×Q1 Iì(é¡U©ª_L÷¼Ü jmªÑm_{ÞQQõÔ}óköJ%¡ÚL£²ÆÓuSU#zÓ*§ºl¶8BÐ"@b3ôÚzbÛvÈdÓÌg&áêühSÍw3È[©tÄn*\2¢¦à
|
|
471
|
+
v6ßyÜ0Íw)à×èS{Ñ.Ò¦Íæ ÙbµîÑ<eá_ñB.½®u÷\'&nRTx)= Í=}-ûô¥Í.>éô5) 'ý¨êëçõª·õJ+mvä¯1= 9×µÄúb3®:OaÌw;±QãJt= .÷g)^=}%9Òwq9D>èÅí:9º_À$ÒÁ{cÅ?°Nzíø~ÊY8Ä)#2b°µ#¢ix3ñÈiæ9z¨ÿJæäë%<êR MÑÄQÖ2Ô½aôc5}t5ìø#Vñb Iòj&=M¶Êwd!
|
|
472
|
+
é7[ÀÚU*l6¸ïÙ©¡NIn%ä Ì%GùÑ6¨ uo·6Å)=}PíÎîT=M쪤){èÐSX&P2¿ÜÍvHÎâ¶Á3ÇÌð¹õ-êÂâ©s¥¾¨ò-õ£seø«OÛÝ·ÔnW@e¤l4¯ ÏÞ¾QjAÞiòÈë,òPGPñ¾wfQdSu^ïÿ+l©ª£¡Eõ£){æ ìððõâ¡ÿ¬ Ôé
|
|
473
|
+
£¶p¾lø
w³= ¡Km=}û5HàI§Ò%S5x÷i$¡;ÈwßôRxfaðZj&h6æé+4²èþ"ñÐ
|
|
474
|
+
ú¤ UÚªôÆßذ;¯Ê¹¸ùʧÈÖßoÑZ!ÞôÙÙÊþ#·/ÙÀ#P±/·/}¯1®¶¸zÉöóýaaâ%
|
|
475
|
+
â]
|
|
476
|
+
÷^ïCÙã¥þ]÷FvÈÅHÒJ÷Ùñs¦ÖGúìtp»²Xæßñ 3ÞF}ÃéD½~Úkí]æd®ã±êµ×èÑèq1%¹ªÓåÌÇ-ùµFøI´ðìeò3ëí
|
|
477
|
+
#1ñ)ì)Þ÷ÔÊ0ÐÊÈÊÐØÊÝ÷D"¢×û>öÑ X>>>éÍ5u²m¦ÌdlÏg=MFSôS
QÄ@׬Gó^Å£y©ZIdÉÜÌýwË}E¬G0Tò0RñSòÜsÁ¡¬ßâ= É÷Ù¨+Ò_)Mv«<§(ÁQbùÀÇ=}Þk¨jl¿Ð±ðØ÷ÙjÕ²"éñpѤûر¸Ø1\âÙ= û÷áùTn¯8 1¢:«çùdõ¦ÖÝ'dd1&"w2uù$Ì$Ì%üÕÉïÁá~E£ÄâŤÆÂÚ¤JÙ©¡¤î= Wxòý%=}QÚÄöªÖþopgÇ Xr*ôMR
#ìmÕ§Íõp-¥ÆÑaòÿL¼ÿÑͱP3;Â^W])³Ïãþm¨8e»êÈÓ=MJUðPmr ¹-=}® Äy H LúRX(,Ð:= Õ^',Ön¶jØÜiPW2(Ò7©<:4Ê:2N¸ÍÊ8²Ï.ýI4·I"k¦$ôq{ øâ¹f ñe1hªQ¼[_é2NÈ´jQ°*YÉîÍϾÿÑ
|
|
478
|
+
Ív@Øiú!zÚ.>ÔZ³b]@ëú²çÝ+ ÑFP¹»áEZ¥4ÈJ-Û£-ºzUØÛq3= Å´Ôw© P±-ÊQÊfYcÊ×Á_~%*©{غ)àÀÒ÷ø'Öd¯Ý²Yíì»Ço!LÍ9ËË$+À5)O½È¯¡ÉzØÊqAaûÔ4IæÊxâ&[CÊ.¥iÂw×9iW°ÀC¸(^'©ÇÊTºL±uvýÀQÉënðÈ¿·ö!CvH²ÇxÎÚÉ5ÒÃy¶ôÿúÍÅ-
|
|
479
|
+
>ÉÿHìæ U4ίþ§½ûmÁÈÁÈ&mGx¹¨¾Tc²Ø
|
|
480
|
+
ª|ð(JK¡+BN©ÅÝácÕ®O©ÅÝöd}´sã¶Ð©~Ýî#{µ/ÅÚM8özÂ)$WÜbªÀß÷Ùϲ$Ì4Tú2Ö©q¥VµCÙ%<PÓHùQ^h ?ܳóÞ38_Ó:Mu´[@®2 È,q~*:C⩵϶i¡Ø
b´_õRàag÷ÂÖ£á=MI
Ã(\|MdX^¥dÞH¿¯¨®ÎEWöroODlÙ¶£¥²r±íòq%@Ë}\âÇi"PÖ àÂôÆß®YZ¹£Î ÞLð'7}=}:¢ÿÊ$¬¥ßÐ:£v| M,¯ÚE¹y5§ôLóx*Ó¶¢
𢩽é®#;8@ðn5;
UI¾
w$"-ÎÁuµí±ÜÚ.Jû2¦ÓBì+²¢!Qȹi¤Öù¿ìà ÿ¹·QlBa!¤kh)ý¹Rª¿}I2gÔ×BԯϬª/@õ¦*;iÂØëÞpÝ= ÝÃd$= ?¦OrQнÌ"x¤ÙR²fòW*s8|¼¸2Ô õ ÂcÔQ´µªôÚ<
ã6Ñ?{Âj®Rj(ÏKáWë³½ÓÛ[¢"kaå k¦Ðwï
±bëýF¦ÞàYvôrH¨Z>èç/Å¿ËTtºã#:}@÷æ(2Ö}væ} ÑØIxÕ¨NÏxúÿIMc¶ÒåwtJ»Ç¢Ð>Q{Ôòh.ph.ù¡]ƼԹ&¯áMÐy]LÌÆ¥µÿ³·á*ùPwãSÛ|">4·[U8
|
|
481
|
+
I®ð,õï4\\Aÿb5+]QRL&5ãh£\ÆE!s1Ïı+2pÓôÏ9¶ÖR¡¶m)5!^PqÏRf%\hR'ñ«òSßîÃÍH3íÿÌ'RݯþÙJñÝ©\\PVQÞ{ewjÍî=}MåuçbÕõ·Ð?Âßmì\¡2Îd©EG¥G= Ê}-¶Ùw¸R ¢zy(Ï¡Xê¿q½ö±»ýø6vÞÄ7«¨¹Ü Ø=MÕh {çÓ]ñ1)%Ðj£TNqõ~r¥à×õð襮x¹BûÛèbÍ¿õ-Ò¹Òæ\¤_BAýQ±¨4²|×>9WP®&ÊëMèØ¶&{ÑîGb¢è¦=ME
èÀ¶eî¯a=MáÓ!jvñ#ÝÔ¦D¨¯|;ÈRRj"éFÅ{1ÿÏr<ÑÄwöå¾zÈùÇy© 13'&7x.uzØ"
|
|
482
|
+
£JßóÀ@ ù~TMS°@Ù\ê= óe%Ñâ§mþ÷fRôAäêtjõ3Iár4&¤×ùÍÜ´¼Ý|Õ¥ñ³çBä!vØéXxÕ²§DËR<=}~aXuä·%Ì Ðñ+µÁº
|
|
483
|
+
%*g(Xâ±3÷ñX0ËOÊGË>Å=Md[[hg®1·D!v&/íjoô®bü= T?iBÔØ= ªX+óq6Eôyãa·ÂXI¡ªbp¬{q¦-¤Éõ¢ÀÕgÚCD®±±¶ÑN?fÇ¢Ò lÙûnHê¸!zþThl¿VÖY5*Tº=M-füfè/4;)
|
|
484
|
+
«éáh»¯ÜdFÎrhÈûåJSùáÎW¾^7<gøò¬
|
|
485
|
+
ÃT{(êwq¥â~-ß§O yú^yåæ;íÎûPyÉ?÷øÆñʵâþu¸|pa×ÅÐøj&
|
|
486
|
+
>c*Ò¯1½xÈ«µwSîÃðIðO3XËKÉ(tì66þ<çÊñ2J /bÝ}täëåq¦¸â$à±G
SC°Þý§îá.èKëí
|
|
487
|
+
a/Z¸ðWöI¦(|R)dzÖL²,¦ÞëJ¡±âMô{Öã¨ñµ«¯Î'~7,[¸Ì,:Ø'zÊ9WÊlLAÄÊK/x¼<Æí·1äÕ:½Ö¦ }ȦqÑûÚá~p.
|
|
488
|
+
|
|
489
|
+
-Ù0ùýÈ= H3Âm°nOzªxBÂ 4$o÷·V\
nÐà+wÅV¬® âhþ ä t¶5Nþt*6FΧû¿¿}¾Ë\¥^igiî¸×/._'*öÃq=}Ì=M½£á9 ?LÕÓ&sÄ& Ø>:Áê7WP7'z4üºÓ.¦0àr"ËNͨ °Yñ!Uñ¤¤Ó&¤0 ;äL= ÝD¨KÃ÷Ò¿ëYFb#2¹ôñ¸ÑÑxì¾[/Ë·Ø¡ßy9? 7s*$OaìÃ=}ºñËÃàÏ¿ZCÉà×å
}ÆÏ³ÃyÈ"¦ø7ã L1 äÛqhlfó=MȨÐZ^sfúì¹9ÈLsrÂÝå|.Á%Jðó×zÆZ¶C÷òKIÉÕkd
|
|
490
|
+
ܹڷ/vÍ6²å®v±i·4M0ñd*-ÏÿFËÞ,X,Kîºi´å÷¹)Z6±ÊlãÙ, -G¡Y$Ò+þÒ"Y8/©txÙ$îæ±
|
|
491
|
+
ݱZîÊ'bG0}av1¶µy©"²'ä0ô-^1Äly"â(-7pè½þ<Õk5}JÞ¦ýé":Rí²g:»
®ðuv²Io¥ÇUÝ{èÐ!Õ"fl.W²½'>4N¨cóxí*ÃÅöèì¼qiï hò7·UÚ£«Ü
¬g$ÝèõÞ¨îÜ1cÌ(ßçÉå^cãÅ-%Q>ø$Î kKÿß·µØæ¬:è¼Ãyz
µ.RwÃkÈÚ,Ñ;Õ¸»^O¥'
|
|
492
|
+
ræï½|Ð:¯7Ú=}|ù¦õÇk'ð¯÷0Å·Ýêwµ²xï.WMyH¡Æ=M
|
|
493
|
+
Ú
Ïò©ì/3_Ö=M ²ü|a÷²=MÄÙ¶We©ÏäN¹?ï×Ñ^W*szý~N櫤Ôèímܸ«óä³Ä´q9òKKZ³Û]ÂMÞеuÚÓOôxIäõx¼H&D'#È8Æö¥ÃrÉiª°ÅÎYGy ñÃÐNXÛ³ÙªO2¨X¦Y=MÓ"¦&Æ'Zô2¸IÓÃw6-®Ð¯SïÉ÷À»-Q9ÅÛ¡TV\å>CÇØ¡òo[+lÞéQnU¨k®ïn ³_Î>ø9ß-§¼?A(QD]>ýßOɪÝ:ï´hy'ÍRÔeL Ðĺ.jÚ-j̺¤4Ò(põ§°7>·G|wÙP¦êyÉ[YÚ/Þ5?½³wòZ= V}Äú;5l>û(ôûíy ¬Ú}bT2W lI7&Ò´j~®ÇvbñÁskóJ¶Â@æÞÚÀ"ÿ±
|
|
494
|
+
Õ±6kVñòòpù¸ÅªTyò½ÄE&Þë^·UI¼HÍeÈÝ'©L½8"ýÓTÆ#
Pºn
C6ÉÏàWíPÜ}9ÅÅhoÃ'ÃR9«x®]î*§__G¦TtòÛ×ÎJ}Þ(QjÈü³å /ìúJ®ó·ÿy'N"ÂÚVô/%7IEô@äµ,»jlg~=}UQÃÌÉÁ dhÈ\SPbTzÒUUÔqøÖ±ÈÌGÕY.N ¾h=}ÔãiÆw{ÈèLºÒ;·$k¥ç<p®×
|
|
495
|
+
*¥2ÕÁbÆeý£³å¢ØRÅRwîé'øa&a-þ*Hl¶baiç%¦/EÐX33"ݳêé|hÈp-ÆVÊ7= fþj<ÚgG°¹Êp8ÆAºùؼóU7S7hH9]G9ÑAºLAº¾úêB3HBºSrW7s¬ÞünÏ}éì·ïQA:Q,ÑAzPfô3cvüø ¥Zð>ßüfÃhÅ7 1¯ÃOEã®»gat|¸ @c¼âp³Qû¤ºßA*Næù i¸O²
|
|
496
|
+
¬ÒQP{{׺Ťê3TðÒAó@U§â¤éóä+ØÞ?Ò×â0TØq©ùÆÁ^úÜùëw©g-ÜÀ\¦ùý¸K¾4Nï×ÿ.>Oª²\Åm>Â,Ò"·ÇKU3ù² $4Öùà ÐäO:»È<ÔøæU=}ĨJ¥:¶¨éÚêòϧàÓÆx¸í0ËÜܱèüx"R¹÷l±Im°¾3wAðÄ(îB·2)7d×ÖÄê71÷·[çW.©ShêÞü6®àù°íNVR-0S5"aÄP*{ 3[9 vcXî= ¶lJ±øÕ¥4CqèÈ´Kõæk>âæiÚæo'ÇóÓÆö 3!7ìË¢Ö/õïæâC²,ZÝ')í)¹Þ!iöFÆð¹>ïþTTwjdæäsºRøÝI9EyFEÜß¼X?«dNö&gÊ6/ÝÁA:ÂR§5m1¨|ÊÑOë»±´=}3y½>i )JFߥöÐ!í(¸×VcØS,£àe]ÅÛÓi¿cZäÀcHò«¹µc´
ªy¾/÷Ò18Õ÷¯ìHyñ²Öðëä"ÙÈdBt 8±YªJ2Ûx6×JÈréîe)^#!¢ê;-WYû9ÚSvM¹Ù^4<YÌS¢ 6wÙh}ÿn!c ôN*5l~A¿â¶¨^2¾-2~ÂcçØù-£ò)¸Ë
ƪºtM~á*#xbÄõËD{ºöüuòª19NLO)LªöçªûYPô8z:µ4Ç꺺ï¥L}æJ×U¹UJO( uóyx!PÍ<"= ôj·ÆèÆé¤0É©òT©¥ùÿ¡Th-íÓ½3E¶ó19O[©ÕW«IoTø~ÊCN;Ò<X
|
|
497
|
+
8NIY$'ÕJ¢¡Ô·¶¨î2.b8¯²X^ÚØJØïPþ6ø,j})S¬DCÓr¿ÈXYìtﯳ§[r'÷tªìbWÊà|hÍj6;æ#1Ä2à
|
|
498
|
+
Ϩ]ºÄturUÀ<xdS§iÖÑÿW´ÆHð×'Åæßpº<}sæjñ× jþ0LÔ ì¢[$;3_KT%'U침®ªðv!ß*þÒY§¯¾ïÆ·¼²·ä= <2üF Ú¸
|
|
499
|
+
´ñÝÀúÇÉTãN>ås&juZ´¼3RøÁ&~ë\rÑPÊç'iIcY{ªþ]»âæãZÐÂ+~ðZpj ZþÃ×ûÁ7îßpräÆçýÀûqEâ¾,¶éV¬tû³¦.ø
|
|
500
|
+
¼æqÆQƶö¸Ó¢°ÜbKmjgøÃÖ×®²T,fIZa
|
|
501
|
+
]Õë´U»°F°Ý³ÑTw<hÒühÇ üE¯ÐMë>ɳTä©lW4QJÂs©r'©> <e Ò¾Ys¨£¹@¾f¶ÈýíZ1¡DØê£Ù~Ò>ÞÅòñ2aÆâ2@gÕùñdªÉ#¿.ÙNëÎr:·Û-tÉtÜ®½¯qµ=Mû|
èÏï±Ù}<L %?g xÐÂfÈM¦Nî~ïîð
|
|
502
|
+
Ó^iÙÈÀK÷RgÛÅ%ÈÙ¨Þ¢×Ãp¡^gZ·t¸ã|z£*Ø*2£Æ1ø+-[£çR°bb§8«sê,fµ\±aß=}ØèÝ(ÜÈkÓ
à Ô>¦½Ø©³ZÒÐ2uAjXø1øLDâU¼,gFV¿ãªèíB-ÞsXwNc³RI+ Xjr<ä-ëènÑÚå©|Ãi!K1yH{ob iµ)VÏR¾çh¢Ë÷Þ¨vg §±<EøÅ¥Þ¿/½=M³,vá ©ù4ûÅoÑÒѪ~&3]iéª@óÃÓKíÈíå².e,ÈþèJµôز'|bò6p¾øeKß(ð¥ÖnÄÝhóîú¨&ùÙîxE8ó¢vÛÈñøMl¥Û|Z¶@ÕpÿËÏåÑSÇP²¶Ï³hõºÜ!n¨kÞÝm7áü²ãüFrðýâ.s&ò_åì$=}U@ã$üD%ZJfo=}ó´(c×}^a¥Æ·Êâ'Bú5
|
|
503
|
+
ª}"mù¼Ñü?W®ÑChÍ©"ÃÀù¦ÇEgIË´ÄÑ®ðRÕfËøA+ö©øP\GTuà-yAQä?=MÇì²Ð®$T~nТòG¤õph0¤¶Qs¹ù¶1®öD ý-ÝZÇ|ég®<pp ÌEÑÖÛ|A
|
|
504
|
+
>Ö>·AäÞ¡ïDïìoàÈ= ·N¨¯BÆïìoVìá@õvÖMAã@&æÉÀABL'?ʾ)à¢Ñ
|
|
505
|
+
+oëR¡ÌÑF«nv5°ÏÙ%åiùEqÛëXã÷míQN1Xä!Hc
|
|
506
|
+
"°ttbïØ~Å>)qcÔÒ)Òqv}ßÈýÈQõç¡.¼º|Ñÿï¦@Ðo®uØ×½|:}Ðpܱ·ÿÖ·Fy£(
Uî¶K;¦3>Y@ÁèSYÀtÛQèyM©>ÕÁÖ%ù¨÷¼J^¯ôtBíü³m¡V! ûÚ/QA ¿¼&Ñ/R¿qW.Û¬¼ñËÊhTÁºå{Ãâha]NÈÆPÙ9;bKwF[ñó+²æe²ÊWe
Ì^2¡ã>1vÛÅé¶xØ÷5¸©ði=MiMH!UQ5çR/EÅÖm³Úö¬ûF¤ÑZjå[ÌrP=Mx ȮãÄO/ÕÈd¢Ø4Wì=}·'~T"Ô¶°'ûóu3ý îç&5MÉQ[7s¾¾¥©c"cë¼'lÕà{î¦ÿVÙèOÈ
|
|
507
|
+
YAM%£r¼Oª6TEú ?!©ò\Ký©1d¦ÀÙ;Pª>kdÇjmQ=MßRD>_®ð/by©§9ËM¸ pð';hõîêe;R¤¦Ìù³ô @ãÛöa'Ã%´#= ¡¾g»ê°+9ß#,³è~>1[ð@÷Xeñ¸ÑÊ+>ý»ÃF;[aÿâ÷wKVÍÚmÌ
|
|
508
|
+
? ô!¯Údiø<f[2Ìz\Y8RÛå°CW§FÆ%â3ìÀY-lòÓEðÙ_²ÞW{¸£ ®(_4!¶WXx_0cHüÜ|ÔÑG¦BKÑrwî?¦'Ô Ä<Q[YEý'ÝWÛæ8T¯kÓ©z-
Cîry´OÈÑiù$I,ò,Þ¬Eà¤ÏÁ{Ù×¼Lá ÎàæìÝÕ¾ãXòF0ã-¤·rê!nu[jZ"Þ¹ûq[cJkÏÑìö14kòo«Ûzä©u¢2Uúu}!º©ñ6øx¯ii'GBä«XÈp7)D'׿Wm2[)íë8éª5DcNçZ),,ð+»6ºÂìßÇ:Áâ¸Ù3ZÀ+¡³PY\®ßi?ns(Dõ¶ÈÇÁºëO Ôg]eLÓåW¸1Ï",{4eæÑ_ÄöoÅ<7?rLè¶±Áç&k=}Î%L
Ρ)Q¦[õ·E§k\Þ,Rø§§ Ä×åJ þ ALÊÃð¬7Iã|X¢I=}¬#Vúo<µ;ײ®w÷ºU")LíîÈÂNúEnMV5P³IH,6~)Øeÿ0¶¬= 9´MjR\þõËÓMVã¹I%-ªcöÇ.JJÈÎè=Mä ÃõV$õ1¿H+å<Tz?[«bú{·>µ=MÄHÊAN¦É{cðþlÖÑ-3Ûu¶Pö6p1Y9UÊöL£¶¿l3DzÃð{¼Ê'h1yZͯ8ú>ÉJH¨If~«þy3³ð½Àjþ= Á«t;FÊ^ R³²c#ðÓq%˱¦½çcÀÕòkwé{éÿMèfQ ßßD¥ð¶ÎSË>"ÿmå(<
çó£âüï·B-]²ãñÜGþ¾RFÃbg®Ý.ì¶§ÎN\y©½öZshàw0ønÄ¥X¶ßùF³Ñ´Â¥¸µ!t\=MIÔ±:S
|
|
509
|
+
¯E*t9|§äÅ6äÃTï9(×Ý«ÕôËWɶ©òó#í7¦âHoëÚUfðd0·hWÓc0¨\0Ë%#°´¾½f?[´ÖòpÕ-¿HuH',4\âæ/=M]=}yÌâWi¶û>lõÂÆq+IñA= =}5ëïx©ÆI $Cùó8{Ñ·o8õJ^¼+¶è"Ï\ëli)î2»B¢Ã tÁ=Mu/g~kY"Þü=}à42YÑì½ÅÈ9$sS@7ëHë
ï¾lQÆ
|
|
510
|
+
릶è¿ÁÒeÇ£'»ïïZ4ÐzsñNùá·ôá= e˸¬f&àÔDIÏÂ!6[µ¨Öýù«j+ad´_R6ÂÏóâÏíð'záaXD<Ç
|
|
511
|
+
¨Çä ni?P-oP桬-ÀÝóïM/Ð-¸½Åã<nyµ WL(H«3õ<4!:9Ù²©Öh+!8N¯ûÅ(zæ9B*ú¦oL´V^ÿ;öKåSëÁÙRÓE²«W_x7kÒß8ð!ƪ A[ QÅôy²Ù°wyf=}4µ'g~L´#ÃÕ÷5ÈÛ#3÷1¬C= J>èGLÂ=MîtºôtRÏ?Ùôyê1?´u
|
|
512
|
+
î7&0L÷zãE¼.ʹN6)6?sG=M¹?BE.WÕ³!çÃÓ
|
|
513
|
+
zÎä}"ú3Ö¢/µIê"þøÍ¢DZ (ÕÿIõÒÙTIzL0fõjûNHÛû]=M£WÐÓr@Gúi<ò,¾8bo µ¸ê ÐNØ9¯.eáVH^cxùê<÷pÂÆ¼
&ÆmQ6þý¥XÖuE»Ö&´Ù<¿>Aö4K®%Çäwiõ/#oF¦5B024¾ÞCYZ©eYêgðÂú³G[¼°þUõIkòsø0$zY6ÒÑo<ñoå&&w÷*Px4H<Áë rº?¯WìW®×î3¤öÚ6Ét´WÕ\.ô<¨ïmÑddòiV³1;JU&æI4A5
|
|
514
|
+
9Ùz.ÖÊ¿>9ÂgEb§¦Vá>¯ËE»£ÀÉûÃ%TY%yrßMÁæ÷%nSÑZ "¯Ê×H}Oþãmx9:M?+ ÃpY¦*þÅ2³
æÏ«àjð7Ó6T³Ó6J9Ü óÚþT2nê²¾·< ÆÛ!÷+æz·¿ä¡=MôÌpPýØUb÷_â÷RãmÎ51Êï}·?þ³ógk'X//³Aþ0ËwfÌòYó[èu!áôÓ3$dY[¿Í)¯g$ÂåÈ7íHE¬ún~ÇÊB'y&LãëÅN¼ãÑ>¹µÓĤ
50ì$9¶î&!ò8mÌh¹Yº K/wºyÿÃ6(&< {¥á¹«?'ç(î£Ýf(þ§ÝÒwD¬]sãµDgÑE¢x¬{C[Zý>>VvÆåLH×ÝîųgÚëÉÊXë§Ú?¸)Esuy¥Êu
|
|
515
|
+
Ä~Ùå8[ÈÛÏÆÕ>\È´©@âñXÇGN%@ÝOþWÛlÇìu½äöÙ:øYïªpÜãr¬®2(¬Ú½õâêG×{ÈcxQ«vºx©Oÿ%ÙÁÆõfÈäL>ZUÀ¶JÃÐ$µ=MHÒ¨Ñ(Én7§4:¶¹²Óñg͵
_Mý'^½Ð}=M\¦E³-}ÉYâ£w¹ÉâGY\½«]=M
|
|
516
|
+
çªrò¬&ÐÍà©îórÁAìàÖP ¨Ý°ÔìÑîa´¸Ïë¹è{¢°µ¥Þ2x æô²âú-~êìíXÊ%ÕÂv
|
|
517
|
+
ô~)hbüXµ¨Õ4~ìÑ_ÜIϦ ë£"¤$#ç=}ø5( yW1Na.Ðêq)àüfÑ
üpà½fæ5®y\= ú/+
|
|
518
|
+
Ï8«âP
|
|
519
|
+
ê\.°ûé+<¦³ºcËJ@Ò0ʰzµ$&EĶÁÏ2(³ dö©´kèqTßù*ÆÊ°ó
ÛeÅk»)p;§UyJ¨ë¦YòOTrE÷%´eTrET¯Ñ¦0aZÞàò¸ãl²¨%Îñè4<¶E¢XÄëf¡Lð}ó;Ì}= Þ} ÛËðQZÏLÒ¨!@Ȧîö¤Õ5oöüoöP â·\îÅ¢<®w}fÿ¼T¨T¨ÛÇÆà÷öÂÕïhvPöG6ì PP-nðþ$ôpû_~=MëNXÃínîeÛÞµ[mª4ùGl»@i5ï9¾lX©ëîN«6G0´÷#J¸å×ï
>RoîPîcV¡C.°2Olèo9 ¡üGü)gëâ[¥=MÝÝÒ£â)îr|tSZKÀpX"fìà§»¬= HUmÍÔlôa2Ví9Y§¬k±W¡ñÍjéñZ¹¥Ê«ú\ÉL)zfBÞ<_^>¬°p¥2= ûìÀàÁðuäe«¼\{&;Ç'v¢»óÄ_¾¸ÐAÕ%H<J¡Nß?ßj= ¢©'aɰi> ;uËD¸XCï¦$;³wDÑRùJ®ýà/Pä%²ð~¾à§k)ijr$R:Y®¹xv6ªÖJ&CÖç}È´ÝÖ\×?¿Þt¿ð¨×´]kôCÍnaØý¹õúäøt8àv{ln3û« ÓÇm˽׵¡zü7eÏøVÙbø@FE§,î9 }~T)ɪ¸C·-¸?zRf;êÈagÄî߯m7JòË3aJÒúã¢9¹I¿fWÇç{%¨ÐÌI¡1Y¯Â
|
|
520
|
+
½Ý:÷M²ip̲õùÇqgÜ5«w¯hI.[+¬Å£Ôáj¯Ï´^8OµøþÒ¨qÜ?X÷o5é¢H¤èò¨@¹Ú2PY5¯DèFþRwy(Fg58ÿ'+ DÂhÏ|I¨EÛcD¤J'K
|
|
521
|
+
ËBðö:ò= ð,¼=M,yí¤l£bít¶ìpE,óÑ¿3Ä$Hr§^+5ÖóP¬0_V®F¦=}}ä3y¸ñé%HíÓHÊ;é Ä}<?zêÀòp1W§0ÆuáãE¬/E¦ÒZ8òÒêÏÚûïöí°¹!º6äBÔ:I*x5K,5(ØjzÚºP~q
|
|
522
|
+
\\=MçEW^³æû;)!*ÊÁÍ¥8(78ævuüÿIסÞEeo OôCúÞ¹wp£t-¨YÉÑ}¾ÁJ ç¦B¸´¦þ-â5hô ëG
|
|
523
|
+
RgêUjëG¼CÎ0íÇNUjPä-:5Úý,oáé-¼ðr]
|
|
524
|
+
ñ|â39&9¨oe¼qôä nñ¯Ë$reú¼æ×Ó<Né^MŨÐ~Nët¥/Sh6&«}7©ÃÔñlÙZÞè½Ð¹·ãU§'Ĭ¡Ã>²®Q4!iÀéc¬ø{ËtÔU3 7-_ì,?UÎì ;p¿;PÖ»õ'cîÑj1çjÓ
|
|
525
|
+
«Ô%àõo þvìÙ!íçsÌí" >ËfÎDL(D\ÏCcð"
Wà±{d¾]³FsHÄ´wý6= "ÛèÌOÞ'Xñ,½Øä¿±QÆBש;ËÏã®ÞYÍJóUýí ~t©V~ÒlÔ{Ù(¡Dk¨!§RrN®X3ªÏE/;¾3bH=}D¸ÿUùh¾»nO@äDø·ÎsËÒýV××/n-<¢ÝxTcÉiªm¬NnäÑìÄò¿{®OÁ2¦w0cmw§Jaq\c¾ðÖAQÿíÁs°N¦ôgv2QüûAÆìúÑîÕ8{æ%!¿1¦æ±&ßÒp±¶ÞD3ǪtV5'Ñd/×ëÝH°5Þ.Ï ¡È®,ÿ}þîphËãý7Ú7"ù=}ýûö\¡p;5ftñQ¦¯WyÖ&$Á>GÂU®µºÂåqöót¹7ÃïçZñ67o@Ä:@¼N6eñÀµ,ðË3= ë¾p¾+m,³Ão ý@JæAtª¼.í}ö©×íLs= ¨*R1ú¬tar!ù %þb^ø\Q×ÖámfÏØ¡àdÚº¦Wð]íÓ Øa¨§¬oãϳFÂZJõÖ2Akæè[&õmDÞUÝ änçòmÂ0
|
|
526
|
+
á஥ÒDÕ=MÕí/³²ù+)ç+'&RIÙn0õ¨[<:OòëøÍ!¦ø±¨úÈßO¸~Ñu>ÿ5lçFùD"é¤s²Ô!ÒNU§mRu@â÷pÿÒ»qRNlÒ÷Qv0¡8ä¤ÿP.ÆÌk¾ògihUc=MÙ= úÓ9@ý6ôB²mUn(ÀÕ
|
|
527
|
+
ý )C!y'¿Wgõ#ïÜÑøÃ§«ã3ÔÛq¥m×3Wɳ÷.}Ax$«Ü9hÊ{çÕú²t]¨oo¯
|
|
528
|
+
̿§©ú,ê÷,M5)AÃN#Íp kÃm!?ê [%¿½¶¤¨{b>Pª
nH0%V®ÖäçÙv×þ0·}ôWOÅt»MÌ=MpeÕm¯WñÈtüb»½iØ3#sgHÙ,ºÏÇ!Êû[ñG¢s¹äfI±E]MeN¸¿FÈVy4®È[.:=MÈG¦Ãä
|
|
529
|
+
9¯ñ:)ÿÓ95M¹AR{ëå´Y¸43ÓÞÉ©/Y¦Uµ!)rÑH£;s1V8
|
|
530
|
+
ÌO*Gã0d÷@è5¢öDt';>ÁÿÝltÊÛø Z1æ¡e,+©Á ×Þ ÝâjÒÚ9»DbÓåHS üì±H51q|¶íÂ*ÑÁ^ïªØÛb3-ذ=}©}Ô{?jtÛÁ5ý¶?ÐôbXÐrhÞ8¯ðW"Úéî¦ÎNûò;ÊB¶Xê/<ÿçÀk¿ÖTgm÷ùÄEDö°gåXë&_/¡¥4Gö7ðÃMf9ã¥G9ËÏ=MÀaQh±Xì"Öô ï[ãGgnâ_dU}ư}[íáÀýí4Ú ùù@Ë¥= gæý(p1ÇGuÆ3ìâQFÙôLÉè»áUJÔM£'ÇÔKöÖÀQ£õ:gxq/c/-kMpí¯J
%Ö!§ï<n§«¨ØRGÿøjõqY!±¥¶°*ÔYP9h= ¯Þa]¡¹"º¥= Ðh·¯fGÙOéve^E¼ç¡öãH1¯JäèØÈ0¥Ä["³ïys/Ö¶¤nR<Ë"cg¹UÌa£¼¨çƳfuåÖ[÷JÆ¢9|â@Ó
D$Á= ÚÙ)üËæI smOù
ÈkþRòIaëÃlÑ1:Íi{¤w²E¯Ôó
m¦7kZÚÈY{øSeõ4'n:Ú¬(:ná:
|
|
531
|
+
×*BåÓè<´wCP!ØpæÎ¿çÎ˰%4E9{xÁU[ø©qéÒÿgÑwæ¾= 4\´ÉB-Ú©Ý0Óʼh§HeÌ:£Àø¨]-BÕÏï2w3xÓ®º°ùÊêDÊÒæyólÇpVÍ^µ¦ù±¿Ów!6Qòý*ï»Fkª¦;ÿÛÞ¬¹¦ÜÖLÒ×óÓ
F<ÙäfÒãã3|À7ñêÒAu»ùª$Õ½ð3è¯ÁO¬(µ+6Ý^äÕeMÚ\åÄôä>¹0Õïté¾)xêl©Èû\&kfÍ5[~pv9¬ÊîRï:ÈtÅã¬äiÑ]è#Pï_ÿéA®Þ²#¦ân\¿³âC´w*W9ðpðO®W#¡F-C(61ÅõfÃ\¿Y´v¯»º¥Õdî ~¢;Åvʺ²¿_1ðµmjW\6"h»%:ÈðäZÙ¶j6%XªíËr7{OÕhUsWvÉÃVã"Æsë³PÒB?Ï~²Ìß x£z¿t¬Û¬´ "¯}4åàwK·´Õñ°ÿJjý@_ÉÓS·~Y¶Ö&÷+AY8¦ª¹O4Ù¾ßRøÛüYl£Q¿þÝwþô9¨¿ÐZÙª¿2j6¿ìiîF6{íTjÎ&^-·ÃJqjqy~lÞS!ºdaâ¿bé[¼'®NªI²ÀÌJùNÔ ?/7-¦tIç´=M¸^\ðÚcÏß%|Ú8µ¢¶,G58J58Mu=M-ýúÁO0zªÓ»®o%ÎÿaN=}Oï6.j*ÄѤÚ9[q³èr.üS¦¹Äæ1ã1Q¨óú{Æ5^¬®$:}iQ 9ØTIáâ¤<<¸4@ífyë¼EæÓ!×ðk_8*6= T¨DÎ/®¯!ð½-ÑVª¨´[¯U&TyðÓÊÐ=}cÆÒ:ç*ü£À¯k»EÊ>õ Ñp¦éiÝ5ÓÒ¢¤@·ËôepÁ#qú®×nÍ÷â Sk@ÑÂ?3pIÑAk¯»×ý ½6÷þ öþ°@2Õþ0±Â&D)î7d±BM:ÚüE¼
|
|
532
|
+
)f=}6i9§(Iñeë¨9)&=}6P7tëvÁûùÈz±BOâ3®²ëh¼¸×zb±Bö
|
|
533
|
+
-")aë.7tðv= ëJ,"9üIC'gºYX'ÛGñ×
|
|
534
|
+
[¼àFI^Ö\òlñ äÇÚw§ªÈ¬õQWF¾ßÓfá%})¶»ä©q¢^âè¸FÂ~aR9;È<Å3,ÉRO[P{ñf{;ø<m<Oö=}¯@ëõf{;Vö=}gD¦»Ý
Dp{õ;Ðfù4A'M7ìU÷¶¨¹ì;YP[Pû8ö=}ï?«¥»;b²@#Eÿé;x<WP;±@C±Û¥F;ÜV°Ý¦ù=M°n°Ï
|
|
535
|
+
s¹&®7ÊúfÁ:'ö2"Xö:ö1¢Xòz.)ó8*Éz7)ó88*ÉÚµ²9 1䮫¬6ªSJ=M§D;Z3XV^hÄyçäÐ=MÍÑn çpÞ§¦ Âô=Mr˹ Õùü/·õ×fMkåÒ¥Ü(Úµ"2þìÔèr³Ýª2ìV¡ôÿóQ
|
|
536
|
+
è ѧ~-]DþÆOjÚ¦xµ5è5ù°Aðóß%}+੾ðѶþÏéXù⵪,øð¶o8D®4yÇØ5¶qB¶2Ùúf
|
|
537
|
+
= ßå6BË%ZùzT@çº'ZDÉó±OýÂÁòÊhÖð&Y#ÌoÿO- "d¶ø!= X¦_QÄA³/ר=M¢-,ÇÁî¯VñhK1DóW:²¶5Ìóðu£Ln7ÔráÔr%Î.¹ÞÃä{C<ÖÈ]¤NýxC:ůn¹³/*¸"£sWh¾Ï+Æ(³âóÆYt<0j]9LMsScÒíßr¹aÍ3 = ,ýø¡U¥9^f,u53JµìíɳAð#ç¾õH¨hüÁTJt¶Md°JÛÝîtÅ+~ÈsOggËóÊ$«c§-,uY¸ÙZýÚn\8¾¼âéA#¹'à×Áàò&v¹É>=}7#PbWU<wíî"ÜV]Åx%U£¯ð]ÖÃçvâõ÷/S±@ÝË>DiT:ÿiHiì+;HQ]
|
|
538
|
+
ßãT´j\è´gl2X£/+SÒy\+#ÈÆ
²t>äÏ(ô%²ÞóuôëÏÈAC¡ON¾
|
|
539
|
+
p¥qTXü&ÛCæáÆhLH\°<ìñU*ñhÜlÙWîtxçÜd¢4ɦÑèÕ æëdw÷HÏ~~äÀ/µ$ûE2à¶KÌ©KcfB°î»Q'ëÏà~¯¥+Þh\3víÈOÿú¾ívUÈWí¹ÊIWsVþl .²0K²·&%÷?=MSÝì^júï)r)
|
|
540
|
+
³#eó§þ'6- βÿ²URp§/c°,}êùzI5Ê\¦r(/rí³ZPRÁñÁo;ë;T"¯æ*£þ8 u.1= J¢iY8KmÙ:E
|
|
541
|
+
iÞæ½õíÿòèÊÁ|°±ð0¨]ï°s!ÊCp:Ýx5"(z¦æ/Ü<Õ,¨9cÝM9@4= ¬À=M=MæãHóOתÊ*õD¼Ï¾j<·WÈ%Bd,´?x\W¨ÞË=M/üÔÜ÷Ía¼H*òûGm4I8ÖR²¨÷*NxÇÝeU¸I]îÝ[Çð@fzc:Ïy÷ÓgÙaSçy½DP0D'= 1dü¸ø~Î^.ä×z+GBû0<o= ȯ(Ôí{ÇM¬Õ«-uËá3üæßb&hX ¤(ÛæÄCYÞq8K\sÌðdØ
ëÚðsvÍ
|
|
542
|
+
k©ÖlVlXÒÛ{5ÿÇVaNîç5³¾YRPôä= wµb^Ùp\= )mbV= h°¦á6uÕbæQ!e°Yª¢ñN¶ÄLü,wÆìh-æxAûQÚ3uÿ\\ävòe¶OÏl8%µaªËeÒjö½dòìwÎÊãtÒ§-´×¿ïYY¦Ë[Q=Mòa:yG/bÞ
|
|
543
|
+
õ¦Kz0læð¢^D= ^ÞoâÛ²@Ð÷fãÏ0)À.uùa¥/iÌ e¥ÐÈïU¯=MMdÍÅtaæsóãôVÒpÚê³SäÞ?q¦¶]î¥úpUäÙë¿È¤ýQäùÕ§ =}³+VѾÿü±¬Ï:"O%oo@ú2¬l»{p©®"¬ÚÅñ,¤«æÆZ\9©2³Ø£±ä0íg|CÍDP¬cËa8»@¤ÂnàU'Ö[¦ÙÁ×ÅdÛ¥Æò&G:r ¢x:j$¶âD¨Øaﳸ?Æÿ7¿j×-oúFÆ3>}U[é>#ï}cÐå'ÍØnÒe!,gª2z YΰV
|
|
544
|
+
u|êÂÖãmÉçñu1àX-ªbO&dùoVxÍoÊÄyãhúkäçË!¯äÂÏ©dá_µÛh£ôY,É¥åK4zC\Q.aïE,#´é6§,(¡ú$-3÷ÀÚËz¿^j)hâù&ð4³Rĸ³êPÝ¥ó1ýÄ1w:= ñè>éÄï$z$Öh[ܽKV?F{ÕÀ¡Rö!;|ì·¨oF*À~<tK ëØ-vç×Åd,?ß?1Öó¢ÓÔ´¡9nöwö²%Äg¦Ø½Ld§ÆyÂæÀÝ}Ûåß«ÅR--´è4i®Z.Ñ<BAóI³ñGrqðqhp¬pô¥'©·#óÜÿ«¾ü¢ëçeÌ%Î&©ÆHeTåÎ/]ÄösÉK¡ò@§¼bzIJÙ6ÐD¢*8ÄKU1 2ùS¥½¶ñ±¯0°õ±a7÷)ùé(J'úîúºöåòðqñsò'¤rÀqØ:¡7h0æ5½jÚb·é76$1ZÚ¸¸#³ú82òúº²ø¬Þí,¨~þ½ÁÜHX0ò&®%Î%¢¶Jèrç&0ãY´*Ä|û= IÖý´·ÜÃÀ¿·IÒÂì½íHWNLñü¤pLbÙç
|
|
545
|
+
¶¶\xïÓÍ/Ø~§éº.§oØùÇÇí!Á,ÆÛ¡õÑÉ{â#
|
|
546
|
+
¯[¦÷AþB´]h¨ô¬
|
|
547
|
+
F= ÞïMÈ¡Ü{ñÎ=M
|
|
548
|
+
Ê?Æyëí#Un¢§%©Bx?ôÝ¥5oØ¿èù²øYûÅ,º/÷4¾ÁLJppïÁ1;3k5dXY ZÄ\zøÚüö|º/²ÕÈ[Kp*â
|
|
549
|
+
É ¹ü³ w6]f0KÄkÿ}X/õÌéÂ^B]Pe{zËB¦xæÓ°ÂÀ5$Ue#ýÉÇF$%Yg©_µ¾EupïY6&Z]YX'¨%÷ô= ¯AbùÐz 5ybðp]z¸ÂÎàY±Ó!g76ǸYw¥Ö¢j¡:1.Ëp8v&ò)½Êsû|gWì45s§ceEóÃ~E?C0±ò¸´µ,{'ݤ¼)^ÁÓO\ÿ?·YÒþ¡Ü%Jæ)÷ë^¥ý|¡mL "íÌ2¬LÈö¯%!õ Æ¡Á3¶uvIìÓTV#_É,ðÆêÑWs O´ÄÜYþè[¼ËÆÉGÌ)Ñá:5+øj&JÙø[ð1ÔðeÎÊßÄýßøâ*Ô5Àêç/|> seoupö/ü¶ìÄè3%X@ЪàÙÎöFéznsÁaXgçµ¢©"Xø){ ø·ÿÿÀ¦±¹-|¥m=Mº© 7Vêhxbi¸åà{¢:f²!Tu@iÇ4¡)siw¹üèrÁEBÚ4,¶ÛÁ,{âÛótà²&HA3
|
|
550
|
+
Ãòúëà$ûJPªkî/Ùúo #Ô%AԤФ
)ùñï,CÙö%#ôBZÇjÒ´-ýÎJ-ü îM 8y'ï v·¦!KOôd"} .
|
|
551
|
+
!þbg²ë±¨.{¦Ê®Wx.ãü·ÇPÊO¸7 y¥¼7ZAt³È
y²*S¼FT©lãüÇ{F_³ó«gVlX*üiDÐûõû&cyÿ|PëUÃQQ½jÛ½2[àa}ûêàè¾Î¹_ ɱ YZG³X²Ð±ðdQÙaEÆìiåñ]ÿ¬eZ¾{pÃuÁÈýWÀ¬}^¨ sh¢¾9ªÌØcBU>°K±ÌwY ÿÃUëºË*Ö³BùN«²ûmE®\-Ã,sÂE¶û±B+XaάTèý;r+û}Ñ=}9ï¸3̲§\@Ð6M[¿ÛåóHÚ¼¦">ø¿.ä}£ëW|¬:¯a¾ä\À»É[¦Üë]u C³SâØ
q·
Àõ¼dYÈÀ{໣ô£÷#ÆW©>Ïд§\âÉk{]Ë=}Ñv]Á~HtÆVDÞT»ÓýU]³·V«R/ÙEÎê±å?oþü5Ñs±{}Dvg¢Mÿ;A¨ò+j«2kòtÝO ëDöÄ"f,b«Òùn·fbÙûýa'$4¸dRÖWM!'oýü µü
À»ÿtgòòp¸¤³°ø'ª6òéPlvgû¸ßÈ;ÔÚ_³#}!ñ¸B2Zy³m©òt¼å®Ë²íL,Ä= |{ƸÏ
à= Oz óCºÍC*¤ùЬJ Pád¶ÌÌÙPPÜ-0x:å÷÷ë(ÐfÀ¨é÷ ÇwÙL²$#Üè$jE®QX¥6øç÷k2æ¢vêùe£ù0£|¡(&çºùcóÙP9õwàçÅë/04Qø´«%c:ÉÝÇçÇÞꢸøh]¡ºÞ6oêç¯
2ré$ãCûT¯¤máùÐÁ&l
¢¸}tÒĤeÙzû}¥ÝÀݤuÈúÖ¡ã¤é³¼äÓM+ÁÇò/t<"%H¨Å|ôòyûüpPÏ7,iÙoî¶ÇêåÃ8ÈsÃJýkò:7»ÀË@ýÌ[{#sA?}F{ÍD¿»;LSHY(rPÒñ2ÿ4ÖÊ&dÎ7ágì¬êå¥Öÿëµ?
|
|
552
|
+
Äë0ä-BH¥{$sq¹'Á(úQ¶+áqh³BYæ¬ìÀóë@f±Oö¿TG-Iï~!½FrÙ÷]ÑA
|
|
553
|
+
ÕËñ*´&aÄ}$Wm¶¤ý^Ò*qN>§bÍï {¤ È4ͼ1)N"ÿç9ø7 îA}eò°¼»pI8¹4
|
|
554
|
+
äôøû5ù÷Ʋ·níí²IÕNø±nø:ñߢr¥'ÿlæJQ¸3hÏÓJ°IÓTÔÓ¬ß#¾òMä=Mü =MÇ= D$BÐ:4åÄnZXKqj¥þ8ôR*ø¤QJS)Tí«°ÉÞ@àPÊ&kÌ n³-ÈvÊØø,ãéyýn5)¢éê8aÍe(waõa.¤}%f'bÉÖ´ß#8rÏÙý¡Ï:Ϥ6Ü:¡x~f¦ôì&îÉQ¸êÿÑÉágØñB)Î5
m¢7/4ÎnI×÷/ëöÙÛÌb İ7'ZzP^÷âãr(8(Ðöp*9Ç/ØTTú\®:®GyÄ4«ÊÄK=}4>fÊ,Raá§z¶6.³m:øûCtìÆß§}HÜ ëþlVqdt«yYey^ ^ñË?}HQ³Hk&6ãÒLä0@Ü[溩9Ö3°$°¤=}ôûæÂ]ÔÈ¢aqÙaùa$ÈͧþªÐÖ8YãêOLu·iBéA÷Ú[!p4Õ^îÇ'»ïÃòdR{u´?îôª¿Hçÿ
?5Î/íÀÿb#\ôLjÔ)ûJÌÉ[¯7,º$Íh<xA¥vAWeûõK= ÝM¤<lÇrK'DËT¦óC!òÀáÑ;0ÔÇOìG"Ä®%e CjÌE&½Z»YìÔix-ÿfäÀSlÈlêÏÐ>³©Ï¼#p¯zùjD[»ÃÒk:ÿ%ozÔ{Ñ×AÀv^äÌý&§F ¼ËWsæÔ5= Z-æÜI!0ANH¾üûöÅ¥!¼s^x¦léPõfØpÊ<"<æDTçÔè ˰ÎÏßÀÏ÷>ð¬»ÆISopJá:
|
|
555
|
+
NÜx16;hiêéßÓöO÷ÀUG(GñÞ_kÜ,Ý·÷Q¢Ë|¨¨Aa½Ëc¤ß©:À7úå#KÈÑô¦ëc%¼#[= à+Xß½Á+EúD
|
|
556
|
+
:%RÌ^ôÙoâÓâF£ºÞp£½±Y7-
|
|
557
|
+
Xyk~h~a[Í||jd®%ï©ñ8.æ½ÃkóAÛfûBèÂo÷|k0²Ìê¼JÝÐyùDy3«÷9øí¢®ÉWÍóµ 'íÆ!Â3ɯ¯ëîìÓ$W2·63/ 4bJ¡éÆÈEJÙ*"¢¤§{k:» )vù3)ônÐRªó#&$YSzhw&üX²WÚANrg?÷ÐÑFî]÷·ÊQÊîñ:¬ã7£½Ýã7ÃÃïQ=}Í#íÓ-çYzÙ·³¨ßM¤Ä Ûv3©ÖÓS$òrmd\\]!èúÑw×ð4¬|"ÿ¦vÿÇë¿7µ'%ª¦nѧï= %Ý%¡ÐúêúÊÊ Õ¹¿êÍ}Ö§¤$Î9ï^bfa¡¿%05º _áêÍìßcm21Ø Bëº÷§ýÐm]Ê_3= ,Rÿ
àÊê½CÐMìBÙwNÜÕ¡æÍMÐòÇL·vïÌ8I0¾°
|
|
558
|
+
NRé¤6òÚ$4qÛðãjR¤Ð.î wuØümÇóþá¤uÖ¶¿¡#¿³ÉäÔWÿcBaHW6G ?ÇdBàx^ûhƬà4s5ÿ¯¹ßlÞo%bPÛÜ[G.ËCS?#SM]<×¢¦ú^_c«LFë{G]F<^m¿
{Ë<=M=M×zêúó²ßl6ú)¦qNàeÎC.DQy~°8'£ª68"øöò ±®YnË_«Ü;´Üå>#4ú.{˪BM
1}Ú®«/L8³®z;êUû,¼v{QH+zsM¿¥ÅÍâÛ5VÎR³|ÿÄ»>&ÅÔÔ2p2r]³¾9Xêh9ðeûµë{À4;nN^~>3ÎÃOÛ5ê:aùëS@sûiZ´ë= *(ò§ü;Jb¦F^lÁùr7°"þv=Méí¡£ÛÒÆÞ(¼!mDdìÌè\ÇG_O¿\iû~ÃÈKtSà4dñqLì5wÂ8'S诮¸?ØM¼ãÚcþ\_è/m&)ý#ìSƪÚk%¢Ó¨j¢éÔ¯ÃVâÎȽCâܨòãÏ^'Í8=M ¯ÖÝ*>¸¸'6ÿW{mçCêµaÒ")xØzà.º]lÚÆp:ëdI3¨¥ö¸ºë¾L64+HvöÈs× 4>óX[2*o²XþTw3NÖíáOAU¢¶ÕñE4\(-Ù4.ªTr§ÿvTÕ¤ 8ïØ%p/¯
|
|
559
|
+
ZVmÝÜ)ßlðz§:8W^s=}qMnÎ= [C¤¤øÎäù3ºÍ'G:âà!OrVFCO½ÈþèA9¶2ÂæávàOÉ0õùÏ¢b,T x{ÊýòÂôD|1¡M󮆦ö¦:×!mÇ.ô§ë/¯osï©ÿl~Hÿê4
|
|
560
|
+
NçB#Î}yg~+
|
|
561
|
+
YDø*
|
|
562
|
+
â
|
|
563
|
+
Ók¿%©9õh Ãy.êçþç/U¸q{¨ ¼?%·Ñ§h{ØHÀÜaw¯¶þ£¸I%©4&flJ°ºåeÙt¿Êohj2hHSå
|
|
564
|
+
øzU)bÂöccI%&3-/=M ¨È«»èéöHY¼Myîîï¸å9ÊxìN(Y¢Öt)5SZYÒ)ÄØaM«ÓLàÛÉãdÁ>¬ÎÈú
|
|
565
|
+
kÝÙjPäÙmi%©µ¯·,«xIÝjjáÀH^Óx&ølYmqãYQa²oM»---ùà9~/TwÕZȲ<Øî×m(ÚÙkÂÖKhõ!PbÎ"µIÍ¥0°ºª·«©2-KbôÓJ¤/¤ÈǶ³W°zT~Õ
|
|
566
|
+
Ètã¸rø¨j®"Hãòø,µ»Ô;ïÉÑsVl[uúo¨óÏ3,á÷:[ö&±¹¸G6þ\ÑZnd&ñ(Z*)<1l!OòÚ²·è!©Ã®T¯%Ì»iP°Ú ]îVy¾©A¾)¶ÕîÃH2&ä´SFYð
|
|
567
|
+
røÈSSxèºØ§b!m%Êõ¤NAMW(»y9ÔîÿÆâ2"ò¢R=Mâ
@8#%eÊè+Ű#µÑ= "Él^sõ¦&ÖÅ×35ø¢o\¡.¿]ÔÔÐ(£*Û+ãÿh«öN¼¸^@Ùö3qܪç1yün!xQTv4.ÝÑèØtj¯!7Cÿ}ÃLQݸ'yj¼
¾|dç!X@\;A5êúîü>e¿$wo.~î[ZöÒ$«o©JêöÂ"z:Â[ázÕä
|
|
568
|
+
{»= §+;æZW}ÇÒÁZ{þ$&>§|@!/¼È( 0¥3UyêB&)$M-Ô¨T¿>Í·@Ü_sV/Fum¦g=M-
A#k߯^{%ü1WOtC¯9µ@Wá]kHÜ
|
|
569
|
+
[QQC¨@_)Û¶[ä~Á£i\yM{WÌ¿_ÁÇ;ÄÁ]BɽÌE´òöKç+ĹØGðoÒ$ãÚ¾>÷Ø'ÁÓØl\q)/Ä9©ÞÁJSÄôC£~Åã4îá?B5óÊYyÿýÊ?ÖraèÅs¶Õ u½î± ßéT.7ÔÎb4¶ô{!¼áÜÔ$¦Òjo¢µ#¿¬Yc çN2(ï¬%àLFýâA@{x¶t&¯ ÜØT¤&Næ!C{)1(ÖjØjisÔ®³
O-é²^ɬlßÄÑH»ÈÌtG{įOxö.f§è¦¥.GòÇ"s:Dõ;:e@wktwïy²wWÞÙw-w9Á,wÖæKx@èex¿ýx!xLĽxÂÚÎxíàxùóxuúxêxOÅ2xI= By/MylZy£fyÅsykyÏZyúyÉ«yëÒºyÂyJÊyÓ Ñy´Ùy«)áyVêy6òyLöúybyòÝy³eyÏöyG%y(-yAÄ6yùK=}zZAz_ÚEzIzfQNGÔ>{×WûÖ¨±8í¨óÈô¡ñ¨1§¶ñÚ±Jma1-Ï<ÐJ\t=}½¨ëIÊ0ÔrSØI!×eî_"ØHý¼\ä i«ÞíûÎJdyS5ÎVÃèC"Êkm=}^ícÕâônÙ±¢NôùoT³eYH-´Å×å5$WEÛ
|
|
570
|
+
íÉý: qf®Ó®xÒRV-
|
|
571
|
+
¢K@"PgEÝ2}ý{PÂÉæc#Þ!ìÁx¥é·n³ÓÛû«sk¶Ù±|n½Ù²?NCYøQ'9_c4is6«6ÊÛzüe9Êàþ$\QQpp4bÔUL=Mâ#f¸Æá=M2£cD¿ÐXÐï·LÚÔ®Á:ßùPÍ5fÓ,U2âo¤ÉÊ=}ò^ Ú Jà5ֽƽdbß41FI¨L×d#p«ïëCâDíÞ@ y=}ÔÈìɹºüÅñ½Úºgå¹À¥7qåTxÈò®u¼öÕÔ5¥0nòùÕde©LòÀ¯PÔÔey3åsãê¢Páз÷ä&±= ÉÐ÷
-û|ʼ
8³ü ¨EoO7Éü¿qEe.¬Ú
|
|
572
|
+
-Å·ÞßïynÖÞ´jÊ&.C
|
|
573
|
+
ÞlÊî.3ÐÆ¢i©®«àé¦i«¤Itt7[Â!®Ë¡'§¿jVågg¢lbpFfggz¡m®aaÔÔS#¡3d¾ÌnSg
|
|
574
|
+
[¶A&=M$óuØÓ¯Õ2â(o7âßÜËúº·2äjγÛ×ã¶$lÑùÔ/A¦ ³Bs}üüàß=Mæ¢e* â^jÀ ¾S²^Ô>]TÊLݧMþÎöÌG]é>MÄtÚû´=}¦vb«&{wLL,soÇ¢Õs¯×ºX×-7Í®tÁjäl§T~6H§®Ã¡¦ O¨b¬èOÚ1ÍXÖCQb½x«F¢¬ SòOÀ\X°!I¯C¼Ú¾,gC¡®Ò=MAìkâ>TZ ;)T<CÈ;õÏ6ðÖzN5rÊT6·lñ14ÝJ¢··7ÖµlWä.Ý)À3%?ÀbZ:´« ÝBÖ³«øØÚhÔ)©oÖÖéóãÐFaà w¦%Êç*¿v-1Â>mXS3 ÙrD1G¶©8[vo©íûÑȧqÑJëá·éP*¬±×= zT¢ü¶$?xIÕ®¬ßtQÕìãàTÂPá¿ÔËP}./=Ml¡M^IïkýyK
|
|
575
|
+
"A²l©¸Í6%ÎçÚJõoD=M lXÑI|®ÅqïóVßÂ^ÕGS·Ê¡÷6£ïòÊ]ìcÁÊ_4 CGGu²s,¬ºS6²Jö¯mÁ«%©ÊU[H_=M¥[&QH{0øz÷5® zV2^s÷j2/ywÊ*È!Ìï(Æ,dxÔ¯÷Bö1ûuðvUöôV5±ãF±\yõnf±°]öbÙ@¯ õIÃÚ(Ù¬.ÑUþñe§þ¼èäSÕú-ozÍX-ê@Ñrb5¨nEÇÕsädVjra3p¡üÁ7Ëq¡HlÖ»qÒ%ìy½&Lô¾d9N?J;}{<;í¨ñ:ñ¨ñ¢ñ¨ñ¨¦¦:§V>E+µÇ¦^úrtëYb4µçü{òEðôÐÏÏ^ô÷GDMEPÞÃ=}Á¶"ÌùtÒy© ÈA<V=M´ÑÚðd/«]ª¤]FÚXÞ±Gª®iÍË<LºF^åp¿ò½gE!À;¡5ÜùÒéÏg-ý¾^6)7¢eªuì_¼Ø1g¯ïà§áHF çã%¥%Â!¯n iNQT\l˺/dêà7½Iª½ïËåAP°°XPoÞÐËÞC´Q0Ï^.ÉGîÞß#öÍ*:¦:üº-6À'Ú5.Ø> ÔF-ÑÚëS-Ìï÷²S%ú65FQ ·
)~õ$,çÖ«¾cËø3¼®Ç$¶ÕKÚøxý(PBtñR²Ø=MËhB§['èþÍpÓ èç=M9)ÿá.´¦pÖ¡[t·e27aÍ7§Wn®r©sE«µ{×í5jÆ^¯áónPÆÊ°ôõá'ÒM4ýÿÅé=Mý^è0Oe:Ø¿²ÑðóîcºNNÀ5W,)ðÏãF9hu;º;»:FWÀx·x±ªxOxìxôxK&tx Ágx{]ZxgøLxí?xð(wRw±
ówF¸Øwmê½w5üw9_UweJvÔâvvi¸ô=M¬öæöáÇb÷¼d÷Ä÷Ûkß÷'8ù÷î÷Ñ/÷lìBøÎQP?ü>SAO{ü¨ñ¨ñ¨È¨5jñ¨q*\-ºTë§ùSUêL±ô}ÿPd$45AøË-Ö* @tÕÛa(
|
|
576
|
+
¯ ÿN íͺzs
WJ$c+LîjüMoz
ñP= Õj$kr1"ÐвÍyðuƲï82NfÊ:O"z«6 Z=M²:ÊÅJ
µNðázfAìܳcn-ÆlSÉb±ÙÙÚÁÞ&É:sÒêÖQk¸l¶-ÒpPr¦>6º½8(ÀGtÎsª¹×¼ÐâSr WEií$E¢UêNv.q*ª~$\*w¡´*âóuz^¥6Fù_6¦ú vG·²Ú7çêwÉû$÷Mʺ\Ðÿ%WÇ1ThÁ¹âþ<=M"¹»<Â1TL¨ûF1p¢Îð@çãÊò!dg': ¼F8Ø3ÔFÄG²ÞÚB
@ÀÙG7ÖÜEy£J-îÀzn>Ä0D5KM}4:sÉL3ÅoZ-/³Ñù7z¯e_fÐU¤/ZÓüEÂèÚþzþ-{zÚë\À=MhÖ¼= Gcêt²Oek:öÅäªå4*Âê^íùÙi½<{é?<Ûwñ¨ñ¨ñzñ¨
|
|
577
|
+
1Ƭùðv¶v97«2j¬À.:dÍMzc×8ãCqU¾7ºóv¢g+©W.&?-§bÍ2þ¹oÄ= gfì0ÃmVÓªá:å-¡ÕU½4:°1ªûyάwwáÀª¾qÁuçõÝþ|%W0s3ÈYá&Þ¢»h>éhotÃYUÌ÷ýÓSN¹¹¥ý¿áׯp~&ÔTjÕR¨|.^Fyiìÿ\ÅÚªrÕòq¸¦~éÿÑê¨'ó®IÜÙIÏZ®~Ü^ºvýubqsÞ±þÔ½F¦áØ®âHâ© þkJÑ9ü|/÷s¹Æùoª2Óþz·®ýÒÔ¹·,ûJ9woE[%;Áļ¯9W}ªK&н$Z *KE¹cZÂ-M@«ªI"÷²?ª
|
|
578
|
+
«[vÍÚ©mènÅX*ÞÃÙVÙGrò«fÑ¥´g´Ä¬c9R=M³9óN
|
|
579
|
+
À1?a9Ùûã_ÌÂÎÓnrÄHsçgÀÀÖ#í 7 ¡õßlõjÈuʯBT"Ðü¾Tµ¡M[NÔQ¹¶íc«!9§)!ËøqB¢¾uQ äÍwiùªyÁÊ.ô»)²@Wj4}×=}ÆSîòÃÆÙie!MÁ6
côý7iÐ=M#(h e ä fã[-·@)ÐOèç*з¥éÝ4:3ÀöôÕrÎ¥ó~#Òp÷Gç´hÎz=MưóvkîY8µ½MVû ,Èçè¤ÅeÕS¥(Òÿ¶oÎqæÔ¾rÖ$E¤ÍQaw¥Âãñí7f#qÒò-ëÈçë±qj£b(vXWÓ|þ:uSë%bØÐö+g#êÓx(rÎö·øVhY)Ò/ÛòàÂJµ#,# ®ªjÉâµT6éRy)4ÀyiÈ*b= ùZ$8'"ì>'ÉU;¢Aë4¸»?*|ù£X11|±9mÃÜKzG,5K-\¯HsÇã¯SÀþóØZ5¡SVÂLGFcÚtý&N^7³²?xL¦Þ/°Ãë¿ LrÃ3×S±lñÃçªÆlÑ)\ É¿êA_^á}üjM5y
ód ¨ßϨPÅà§^ $d¸dà1ôÏcPTh±m©À[§ÂGîTméêά$ÃGÈæmñ9_FTbD3UC÷²OFQSQ«eQëªM#WKÓs]<Î0=}f±DXP#ZP3)íûÇ:C4j=}P²@]YFïùKó.
|
|
580
|
+
Ú=}-
|
|
581
|
+
GÇ>¯<OÎñ¨öüöì¨Uúñ¨ñ¨ñ¨WÈ":ª *Üz:4 *ÊúE¸:cg:é4|ÜnÀ!rPýe'áKôÜÀ´EL<E¶öe¿£4æø¡ÝaÕtÑaøöT6úa·ÊÔÓmÈ;NbæÔ° Ì÷ØÇ÷8©/e>
|
|
582
|
+
ÞGsÑn«¶ÎÙhµ %$ïTXV)¤ôàÄàU
/7:.cÌveù_æøcýdæÃÒÀh8=}I¿P2¯y âÕw±ÛYø¿INrhÖtxÙaÔW ¹gØù°=MÔÔ×)õ±·ücd§&Ú)¼_Q_Lγ=}æT®jÉ+¥¬çìÊ ·G⡺O.Ùñ§_+h×pÂ-³C"?ÎóvÃ4â>T°n»8ø.~2ÒYú·4Ööº÷ó/Îwc2üØ»"©_¬0÷Fz2vn£ØNÊ¢t=Mã>ô1/CñÞµóS1þÁçïÅÞ6íqäJçµnìj
(¼¬²ùVõlûðf°æ±ûðc®uMÍ<òQ(ijѬF+máp4°-}FIª®¤Á%¸N
g§À»wí£Ã(%5JèÆõÖð,ùAúb¢~Ê¥×õ@ú7sçÿÝàPkÐ"/íiþ®=M'ÙÍõè
·lÑo3±7ÍZ¢ùĶÊ:&Øf0fù϶Ú&%Ê8¼GèÏú= êö*Ò æF51¶%Ï?§zi¶RYÌz^J
ؽ¸fò/\2¥ªÐÚr7.&-íEtVù²_Vg!Æ)7§TwªÁÙe6Í´øÞàÿLÍTq}UGͲ5QG ªÌ'ï ÌÖö÷¿jÃËúp½ÿºëò_¹¯LÒvä³÷ê×#=M$[@z»ãXêaÅ1Z¾;æt©±Ù).ب§q¹óhñ¨ò(ybJö'hJ:ø¸³y1¬b9ÉeVM]°4eSøOÍ*Cxæ@ÅýäÓ¸ýoÐÈýÍ(Æ@H"¤}
|
|
583
|
+
õÜh{g¿¨À~¿ÑxX¿u$õ+ãpq¬§i)çïQ½fï×Ve¶yã-Øîî6¤¸ÏÑo
,ÈÈbýßJ @=MûHn= 6 3Q¤Ä¾²%ÖbèÐ)"öúÑ=MUàß¾¨Íö}ØâÉ#ýÖ 2ÚNBL·¡xY[Ó-)2,·ÁåxZëÐÒU3+ â½³ë_z«xÙ
|
|
584
|
+
I2Ù.l÷ô×BYc" Zâ¬Føwj©iî»vêåj"è,jT¦´ü5HóíÔ9.ð²,&¶ô<9£ýÊ,|j-ÅñE)l¿.¥Æî:=}Êæ!¬u©ù3eê·¾òv¯Örnjy:I÷7!zê³6º·2(÷$vi9z×:ýr+¸z3Õ°ú4t7´|f
|
|
585
|
+
o¨BÐ(=M@ª7HÌU+çÿlXÌìáNï*½Çé#Haxëªg5F²6Û£9J¢½B[¹:{3°SÇt|~Ûð®ci:UÁfÉ^Ûð³_Ê|BèίËYú&s~o V¢N£#ÔÜyWrÑÈS¦UÆÁ,i¯=}¹ÖÃIBhÛ¬Meè£S©¾&1=}ÿn3a÷¦Æ±ó¯Y(:"»¹zXÜÝ)ÇFøKwýPbÇ+çv)µùDh-½^.Á(¾ª¸L©%¨ºó2J{Ø[¹:Dÿð|+õLÇ×\Óó\O&þëdyWi=}À~]2vMé£/iÅü"/Åþþ¢¬K²²¡=}=}b}ÓCþ«¦O7´Õ½\®þö*¤sú¤Mu¶ßuÙè{Ýa·Z ¬Q=}µ¡^´qYI±ü3·ÀÐgJôe4£ØÐÊ¢ØE<£P]¸\QñOÝLßóOÇ9"Ŭÿó?ÒÐÛ-ªD/^,ëíO6ÒÜ~¹T
&qA(T}
|
|
586
|
+
ÉÝtl àWjeW⻵@·)dëÛîMåñ
WA= ±e,î|Äý¹]Gç¯JRgÝìÃzö'Ìg÷i6nLÚzÃ9\Ý.z7ÚÃJ¨]ø9^=MÉr]ÔÅ__=M-GÌ
mé=M4
%Ý_uæ[º²@ôúò¥fÞ¹ õåÏÁd\hðM% ïjóË÷^F]_ÚÅ-ãÒiHÜHJí£6ÁíH
|
|
587
|
+
[ â¯
zÍ>·¤¥]1i¼!ÂìÏäR~õc=MúW|öÁ»¦c¨hDáôV>¤ór¸¤&NªÍÙ´=M6)æÐBد¼^= ðñ/$Ò+ÒçyÍ12ÙÊÞT|¾T0dqÜßQ~UáÖú$àÓ¯áµs(Z
öâGÝv²6Î6ùÓÆÑ)'¯\ê¤æè¥/±¡Bm¬©LôºÔ1
|
|
588
|
+
$¡®/= ..3º°ÒénYÙ&Ú¢tÈ'NçtKfZõÂhä-îGÈÐ'õç£Iv¸§eæ i^=MnÊ¡KûÂvîúgÓ)´^ñ¨¡=M¾Àïäëç¿
|
|
589
|
+
ýt$Ñ+ã&dµÜ´0OÜ¥ÚÊËo³ÛëõèȦÖî= 2eW®æ})´Ñ&õ¸¢%ß
iȸc´²5\6¤«îø4*6^31)¡·ÂØH×ø!?.æÖMó*9W)¯üö?"V¥!-iQ³
|
|
590
|
+
æ³íÉ#(7üÌøwè(krwZ!+3@93XéÎvHô
|
|
591
|
+
FÙ-Áì0÷7xzn-fÚ,b6ñÄɧBFPwYÝÉðzpLDúÒ¯£J31&Èæ64;kYǼrÂ]n¦?1å¥OGm{0^g(¨Å$!8uAb¸^£
|
|
592
|
+
rýAnSaýQ®ú^ÛÚNEbóÌâV=MþxxFþ¸û÷7ë¡};É1H}"çC s©]9¸OgQû_Id¢ì hL¥Í+|8é'Õ?ø¯?)ûëjÔcãºI1Q] Yÿ4³öñ;ÒQ}tôCfƬí?¡%àŹmgnËÜØG l¸j:o@@§ØÐS÷ÄfúÏ+]ÐÄsìÿ%Ö]WyÄsgÖ%òßf]&L@tTiϲæmõ}xõPêÄÀ¯²·y¤¥ þg5¦Ù|Æ¡ßÌEsÔ{ÑÍò¦OtF^PQÎ8d¤ørê«âf$ o¤ãx8x[Ë(%ÍtÉçnÞÔ6G$AXݽϤmÃi2Üiyd0¯
*ßá.9*oíÁr·2Ã(s´ÈÅz÷zY¢Á¼öÔ°ç0}Ñ4µEöÖ r5l®Ä'1Æüç\ã>ÆøièLïÖÀ|e¨ùRBaEHТMßÏãØª$Äß=Mç.·¼ªnD õ´÷"T·ñy)5¹ùÊÊ(·ÕJÏLr4jô*2÷5=Mù#¯v#Ñå~¶¢z>õ8ySæ É{Úõ«:£¿!ÃrYØçµÐÜ ×>å
Û&¼¤æ¸kgz;Ö0}Ë«]WÒÁþwqIM,[x@UbG'1ÿôÃê(}/QÇÁÛâm¿p/|¼éBÐc«Q(ë3º(z2é¹:ºoû;@ÕS?¿GSk«70>³r<ÞaåUGÒ;BAi¤°óGåÅ¥Û7BëUi~vJ;ãG}@OUm½ÛXKÁnnál!kýKe[kWG¼ëÃì½ìÉìÔLs4F³SÆAvÌ{¾ÿ=M ~û=Müj[cowmuai\dpxnvbêÛãï÷íõáé|~zswuil= hnvúóçíáéìôøöªÏ¤n¢
|
|
593
|
+
÷§ Õ°VrfSu5a¢Rð¯/×u®9=MVñ'¶3r)w·58ÝÅ9Ä@ðØ!iò¨*Î"ªy¹84òÛí¸°2ÇàV²Zx²(îòú_ øÞnVõaóÑØ6ó¹*$&J:Fãs!pÓú±"Ì.rZø5/Æfø5Õ8RZ¹7
|
|
594
|
+
ä(Úð³4³Îæbg±'Îʺt°=}F6Wó15zö8½8²ùîTòèu8Åz÷µ1ÉfªMv3û¥Ôp8û®&7´âyîÕâ8»á«ôZgÉ&Zësª¶@JÛ<K'ô®áP¨ñåküJ{«974ñ>Óëâ@\S@;ýnñð±æ§ñ(ñ¨ñ¨+ò¨ !5¶½ÔTT7}÷ÂØu°û¼jÿ¦°%æâ(ØLT7}÷âÃÛRðõµ$=MàÞ²ÆGy0âÚy³«ÏÃÛRðõ¯974^±ÈGaúºM:fÍcîKúD²àç?´=Ms¯]üoÓÄ·= rÄÈÿìÎR}j©ÍÔ!¢aØb' kÃÂO²Ü
|
|
595
|
+
o-ÛÈsUB4SïgtW¦I-ºôç= Á(w¦=}õ¬Ðpr4×¥©ðUrêÕ½¹àë®hùâÙ¶è
|
|
596
|
+
ö¡Sd(îϤ!Ö¬ÏGI.ä=MÕ°ÏTºÃ«ÐLç}¶ó¯!M\m¿·} rÔÿðîÒ
ª©ûQQ¡R((hmÓÏ«Ì= ÿjo1ËÈtB6Óï"W<Én»¬·{´Ù°ÿïø"²é̤!U¨¢VD()p=MÚ¶O¬ÙÓJ²Ú0
6¶
|
|
597
|
+
ÇG"T ¡TÑ,Bx¡®ÉÌynU¨sqÖÈ7ÒV¥ÝÞFÒ$®mÔ䡿ëÔ³±,í#þ¨Eu½!%óu'aÔ¸÷¨uÁ+ÓÍiñ_Æ4ÐaYñDÂ"KZVÆI×b,AmÙJäµfëÙ±+÷Ä#ü°-u÷"¥óU§bÌx÷©eA«ÚÝ òc.4ÌA)ò<6 ;*ÖÄLwb Áí×z¤¬«×É+ô¤Tív'ÇºÏ°È ~¯µ3¯ Eô×iá+TñKélt¸ô~\"Ãt·2Òx_òê²
|
|
598
|
+
Ù= ÑDú^q C$X%NÌF?tü[a+LPqKÉklxô|y¢ÓÊT·²ÎX_ñâr{Y@Q<z>q;äX#>nnͺL!Eþüï/¿ht|¡5j\eGÃ¥6&zf꺾ÞyTTQê28ÞºH¼°@{ë±VñĨñ4ñ¨6(ñ¨¡)®TòÙÑ$Tü¡ôO)ýÁµdOyGNùvùÜ[:=}Âýxý*ÔM¯ó]'°ÎÛ¹v\,çSf±âÎä'´fëàLyÒ((3sØìXBIB¾q×¹Í{ørñ+Ú-·½¹oâ@® /]ãTªÁGà!7a³:S ÈÈ£gÖñÝAÕ|ðh0£®Ô%ë5OÆø
|
|
599
|
+
ïH·ØrÌe¯Q(Ûá^Ð3ºSÏpß=}
ªJ=Mâs|²
¬W"½¤#ÍlyÑÝÁÀ:»uæPÛñ1TÈVÚÂÙÀª/IÝyÎ/§ï7|ò±#mmÛ,ãFjG
~.¼)wºEù)ÍÒ(©aÁ;¹6x)zÉf¬½PÃÁ¥æmºÉÿ¤Fp±FÄæUwícÆïô
|
|
600
|
+
[S¥#,4F<C§û4ü
|
|
601
|
+
Óâï3DQ÷øOüN¹´f'Á éñwl@ÀÆ(:l¯Z?;ÿkG>Ôh2¶ïY]gªp¢Ù"9ÓÇØtÔvUU£Ê÷nÎ\aíØyX=M uà¯$×)þ[gÁGÞëU¡rGþ-kHþsçJ.ëºÁ$»;;KC}l:å ¾ïÓa¤nÈ=M¥Õào¤Õñsèâ´Ê¼SNìl ÿ SÅàlPg'ÈüWÎìt°)SÉ lXw·'
|
|
602
|
+
>´ÙV.t
|
|
603
|
+
Ø.u è.v
|
|
604
|
+
ø.w!"÷5wâÓyCg;S»;iKKÞ£ý6©ZÇaj¸²4¹±8
|
|
605
|
+
é"0µ±øÚ&즸±(é8°Y±ØÊ" 4°Z±Ê2 8pJ±Â.7p±Ò.¡7ÐBö-'Ê´íf± é7B±0¾¸ºb±0Ƹ:±0θ º¢±0Ö¸¢: ¼y À¹ Äù È9 Ìy Ð91Ó"÷¦ø¶èh¦Y1íâøØü×רüûgÿ§ç'g§ç' [FÔíÍÔ'cÔíÑô'°{R¯}r¯¯²¯Ò¯
ò¯¯2¯R°r°°²°Ò°ò°°2T¼DqSÀT±SÄdñSÈt1SÌqT бngüP»kGþU´1-ÊwÛ§$.7÷ºùz:Ú. 4"ù®:Ô"Ò´nº1¹r6bÊÎ÷Í-ùv4âÊ/Îù=M5ú$v8ÂÂ+Lý³Eh7HÊþ"+u7I
|
|
606
|
+
þ2+y7ÊJ3m9Ç3q9ÈÊ"3u9É
|
|
607
|
+
23y9:gD<»{;»kÖLýDZìøf<J=MÂ/]8=MÒ/a8Ê=Mâ/e8
|
|
608
|
+
=Mò/i8J/m8/q8Ê"/u8
|
|
609
|
+
2/y8
|
|
610
|
+
J-Â7]:-Ò7a:Ê-â7e:
|
|
611
|
+
-ò7i:J.7m:.7ñ"ºú¨£z Ú.&7vz
|
|
612
|
+
.67zYÃJÀ3\ÙÃjÈ3^YÄÐ3= ÙĪØ3bYÅÊà3dÙÅêè3fYÆ
|
|
613
|
+
ð3hÙÆ*ø3jYÇJ3lÙÇj3nYÈ3pÙȪ3rYÉÊ 3tÙÉê(3vYÊ
|
|
614
|
+
03xÙÊ*83ºíB@;»{K¿Å´î84¼QB!B.À4þ·¹lÓº-η= º¢-Ö·b:Â-Þ·dºâ-æ·f:-î·hº"-ö·j:B.þ·lºb.·.7.·/7/·070·1714)6?ü>}[;;;ëØ¨ñ¨ñ¨ñ¨ñ¨VxÜÈí5&éï%U¦êò-¥¦éî9
ãݼqµcÞÁau#Þ½u#Ý{p ¸PeàÕ$à×Õ$ßÚ
%¤àÖ]z&Îx'.y(® zÄmaÊ=M_·bÆM_Ô¥Á!Ô§ÕÔ!ÓªÅ$¡Ô¦ýßcö÷Ífî×-døçÏ3&ªø6=Mæª÷8êø4 6jìA'ìUÖ'ë
|
|
615
|
+
E&§ì½= «xÒ®X2¬h²ó¥V¨ò¦¨ñ¹fèò©ÆÑ{@>§+{AH«ûB@¯ëû@<ÍãÃhÙÝÄdÉ3ÝÃiÑó]EpÇëþFtïkþDzÏþErÞÉl1³^Êq!sÊm5ÉSì¬'>Ç_;»úõñ¨êÞ¥§ñôW¢ñ¨@"Ó¢ÿ$èP.ÏñZ¼4ôôDk rWkt7"9ö= ¦î»÷nºP>.mJ±Î}HQ?Û\ÂQWÃ{DxÓ¾½GUë\¿_E#ûÀSIü;MÙ'\ÐgD_Ù¬_M>à/Åj
m¤ÿÑÍdßNt= ¾+j¤KDÁNSdÞJn7ÌN±¿ÜàÃiÃKG\Ö¸ßÊpü_Ív îÚ5lZposuÅ$ØWáÕ»ôtÆ_TÅB-ÆF¸¸êsv5½n¢"lëg|Cölü<Z]¼F<ÿÛ|ýQ}¾dÉ3MÄMD_ѳS¶lþDzÝÀV|ÿÌ»W¶÷D¢Z!so¥ç¬bÓ_ͯ!Ua<§ËÚþè6= &ÓÙ}K¶C;Ûà Nh¹K8.; üBSyLÆa8ô!JDï4±ñfR(Hº<a{.V«+n³ ®ÀzþýýøýèýðýÕë_j'CVýhw¢Âêyvø"
ÁJ
úÉUÉVÊTÉ$ʤ@8ìÅçÅ'Åçí'¼9ÃùÃdêdê°§YñµÿìFåÏnèÙ= 2XåfjdfpÑ*ª'vMlQVØðrzæ[ò_øcè3«¥ ¢åõÁ.èq²x¥9½ÆQÊõzå%pT&IâÐYih
|
|
616
|
+
ehäk%ÖMÖÎÍAPlFü9ðÔì Ðè(Ìì>øxN® i«ÞøñÊx¢,í~ÑrôyÕ°ócøë[úÍ×ÌÒ=MÕé%/ä¶o2'?i4@¢ÈSvÝö^A>}Á>ÊA ?hõ©õ(Þ"ð²õy+ï(vñÆ1©Ê%5=M-E-f-Õðpdp6Vµ~ÅËxö¢y7Á»°ûC£=M|ÁKaÛáÂ×ÉÙRï·×ÜÐSÉz]usöõ¶³´6354B??A@@Æ7uÜ"Τ
!ãã=}Ò³öYÕ[ßPÑ[àXÙRgu{jC^ýÏ;[ó8d5ÐD3:9ä ÷ÐüWë?ç·iÉ»nEó>Ù»rF3>¼{k+R¾/OkDM¾<«¨*ªñ¨wñ¨ñ¨ñ¨6ñY¥wÒ_Íe$Íi4Od h0o=Mf(¯=Mj8GmcmgVîdÖî= îhî^vîföîb¶îj6®[B®c®_®g®]b®eâ®a¢®i"®\R®dÒ®= ®h®^r®fò®b²®j2.[J.cÊ._.g
|
|
617
|
+
.]j.eê.aª.i*.\Z.dÚ.= .h.^z.fú.bº.j:n²é4îËg tfNkÜ¿NoìÿÎmäßÎqôlàÏpðnèïrø/nkÞÇno1õÒ
AÌNôPt$ø§à·'wvþð7&·n µRÓV¼F(Dmõ£§¡ilnuÒÕDiÎdâi.E®ém1hÎp!ÿÀ¦((uÔèrb)Gë²¼µEÍë~Èp±ªÓØEò²L±m=MÙ£÷É0×*8aüªN8bºÎØ\Ëýo¢ávvþXÔ)¢Éö®ËâÑ·pPåèÈ¥h®Ô0[æ/èòx$ð|
|
|
618
|
+
ȵªÑ|Æg=MiÖT°å¡¸í&ÒÛgÂu]lTʵ!íÚp¾ÈNn§ñkÞ襦n'ñr~~W²p³îÙ)¦¢2"{êJ1ÜùvªÉ/Þ8":xTbu&¢Ù%'n¬Ñö ¬"´)ù{HRæ péñf³Èê.H¥úJò% Ixàò¶/³úZ.^µºA¤ÔwbÖR/íçÐVí¶Á*->Ô¹g 7ÀçrkIì_O9åBxÙsä¢nñ6íñ¨E¶¦¨ñ(ñ¦¨Èút7¶º½ªº¼æºBB»<?sQãK×SATÀûAÐ;νQ¥0
|
|
619
|
+
=}tZ÷= [Õû¯û;³ÞêBb©<¢«2>:ck~)Cé<¬j
|
|
620
|
+
»·J×Z{ÒûDÑFW= Cw[
|
|
621
|
+
M?òÐ0Ò@!|i¤q#g'ÞgÐQ.QFnvÿõ\÷,K9è\7g¿çIéXÞ:ÀDõ]Ã^]JËC O¸
O.Ïì4q |qòtìaÁbîÓÞÊ1= Òbëþ9÷JÍÃpÓBÇèØÚÌÿFmg)@í¼ôõ½
½ÂeL¦ºÀwßUb¾ùìAîhz×Â%è"ÿª%Ì"pKç\= Ä´Aô~¢± }:zF6"¨xRsJ^!n1,·÷ÂQÒij/]ÙÆ¬r½zõOîǽÐf,fìVÌøsæpÞr¦ü'Ó©þôÝX °Ï6²]n?>xã>µl0Ì6÷Z²)[µ\'ÁÌtBªXÀóµ?S §,÷p+Ò躨·ÞþjéÊÔË£½nq|G6ùÌV§Ä.#îòü/ªº¶×²¨ìnb'Å7r½æ1{XóR¡Zn2þ*ÊM«î@,C3lTÃü.ûªAÜ4KzW/ÛÚÁ3ºë÷[a@9&½Öhãô\7v~ÿrH®®]½5[½¹w-§*K$?æ%uFóì_G2ÎÁÛÔE×VkÓÔ(psÔHIby6aÀÔHEnnnnî
|
|
622
|
+
ÕÕW¸0922hPåcA3åWãÜ
·G»ñm=}ñ¾D=}n ;¡HsQkBs>5#AÕɻҳ;®þBÓÇi»äKÛý¹BïÝb«ûIǨÔG/ýgIQ;ÉY;'*ÛRÇ>á³efæ<â<o¸T[:H»®²> ¬CÓ¿®{vAñ7@L»Î
LX§ÄëLÀú@[©Z¿!ß\®;ýt¥UKïUTÂãÒK6M¬²?¶Éû6>CõuÉýBMóè½è]#¿^?^¹}6lĦuÍV|ÝL¾wúÌßÙrÌ>ÍñE¤R<IL«Öæ?/ãa<Ù4ûUãÀîC\-gR2òDì%ÀË)g)âÆ+÷Ô]%,´Lu_!ÿ'3l ócáó©M×
#ZUuº±ÑÝ.àãdÙøÙg
*£Ó×ö{É]@²w|²séûb¸Ð§&=}= bãe%+PI
|
|
623
|
+
l5pUâGäÄL#+d^©®çlV°SêlÜ2ømÊp= A¡ç¯ÔTR§ SmâeÁàä= ïþM¡§tªî¡m.¨#ÖÑ¥±¤pypÑÆ* 21³D¶±ø>¢Ô(Ãu³uD¢W¯ÔÄ'ºêÐ;eV;~Z»;= »1A{{s½×ÂC%rNÌÛQý%]ó|KªÑüÌÚ
+¤n½BâüÞ
HT +hæNç¨1¾Ë7sËVüê¦d¿õÉ>õÜI5Ù>WI¾ÌÂ+ÿGÞ®äY£=MÆO$uH"pÜtc·Ázìø2£áH´ØÑ/ó¡Ò/Ow¶öÛFQ1'µÃ6áÅÁ·RôOë<²_¾µ°ý|ß/öb=MR©¡µg*5ÑI6#ÜU²¸Û<n2ÛGºªáEW]ãt¿Àl¸-{+&å¡°ð3éð³¢ú¹Ù'7äö¨"÷øýìØèAµg#w¶L°ê7=}=MB¤C&hé#ñ4á´8 &2Éósnæï î%í¢-ê·m|h*¤WåØ;AÀ>
|
|
624
|
+
@3Å[ûNhDîQFü*Ý?uJûØ6ë
|
|
625
|
+
A§²Âp[ôsFû .oCtï@ÝÚý#£=MÖ#wìîxýß½GÒÿDó|Ü}5jìÝNȰ5EÇ>ïvßøNÀªfÈÆHøý §åpª( øç°ÓX*)· ©T0¢Ç¹ÆÑB¿¤iÅ5mtímhâ¡'»BNiÇ©¦=}{fLÐË+¡ùC}ØûÀÓ}qb³.x;Ý<¸Ø<墯rEØø>¬Cä ·|ãKLQfäÕ65avTõÝýîtÐ"¦6Ál¬¨6ñý>HG8¶$ =MøÄd»¥BGÁØÇ¼¹$=}¯ã)uYGz;C}pd¿\|6(L=Mf_ï#ß«WÞ¥§fp@0N6
|
|
626
|
+
'¤sªQø÷Õ¬Åq¾>.øü·¢D5³T
áhÅ8zDvO= ¯óÝyàÙåFÆÒçcËóz?Ê5cèúë.ÌðÐÞ~OË|¿ÓQ§v)BHX6øöÇ¥kÒÚa¡cÙ7¦x©nº¡6¾}®iÏ<ÎWh2 9's"IÉ<»ïX\#F\Ë_4F[ eÚ¸ø¹2øH$ß9_xì9i2µã
|
|
627
|
+
ã/¸Äyf"5TàyÊ0îEê²Þm6ëÞè6ðÏâ§9¬k=}¼àt<¦Mdç6"p_î3,oO3p"pw÷´/(1ñøs.íA/&ÏUÃ_XÍpÕ1hÌ80EQö
|
|
628
|
+
ow÷!x.AÜ"¢j+惡¦¶®äRow÷!xêpn
â#ðù
|
|
629
|
+
z AÍp\0NHJê´ªØ^U
|
|
630
|
+
Iwu¸öôú!3å6³âVq£³¹´RN£%y10º:p#\:J:b9Hµ7h_:¢I9 _¼µV,þ<` });
|
|
631
|
+
var imports = {
|
|
632
|
+
"a": wasmImports
|
|
633
|
+
};
|
|
634
|
+
this.setModule = (data3) => {
|
|
635
|
+
WASMAudioDecoderCommon2.setModule(EmscriptenWASM, data3);
|
|
636
|
+
};
|
|
637
|
+
this.getModule = () => WASMAudioDecoderCommon2.getModule(EmscriptenWASM);
|
|
638
|
+
this.instantiate = () => {
|
|
639
|
+
this.getModule().then((wasm) => WebAssembly.instantiate(wasm, imports)).then((instance) => {
|
|
640
|
+
const wasmExports = instance.exports;
|
|
641
|
+
assignWasmExports(wasmExports);
|
|
642
|
+
wasmMemory = wasmExports["g"];
|
|
643
|
+
updateMemoryViews();
|
|
644
|
+
initRuntime(wasmExports);
|
|
645
|
+
ready();
|
|
646
|
+
});
|
|
647
|
+
this.ready = new Promise((resolve) => {
|
|
648
|
+
ready = resolve;
|
|
649
|
+
}).then(() => {
|
|
650
|
+
this.HEAP = wasmMemory.buffer;
|
|
651
|
+
this.malloc = _malloc;
|
|
652
|
+
this.free = _free;
|
|
653
|
+
this.opus_frame_decoder_create = _opus_frame_decoder_create;
|
|
654
|
+
this.opus_frame_decode_float_deinterleaved = _opus_frame_decode_float_deinterleaved;
|
|
655
|
+
this.opus_frame_decoder_destroy = _opus_frame_decoder_destroy;
|
|
656
|
+
});
|
|
657
|
+
return this;
|
|
658
|
+
};
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
// ../../node_modules/opus-decoder/src/OpusDecoder.js
|
|
662
|
+
function OpusDecoder(options = {}) {
|
|
663
|
+
if (!OpusDecoder.errors) {
|
|
664
|
+
Object.defineProperties(OpusDecoder, {
|
|
665
|
+
errors: {
|
|
666
|
+
value: /* @__PURE__ */ new Map([
|
|
667
|
+
[-1, "OPUS_BAD_ARG: One or more invalid/out of range arguments"],
|
|
668
|
+
[-2, "OPUS_BUFFER_TOO_SMALL: Not enough bytes allocated in the buffer"],
|
|
669
|
+
[-3, "OPUS_INTERNAL_ERROR: An internal error was detected"],
|
|
670
|
+
[-4, "OPUS_INVALID_PACKET: The compressed data passed is corrupted"],
|
|
671
|
+
[-5, "OPUS_UNIMPLEMENTED: Invalid/unsupported request number"],
|
|
672
|
+
[-6, "OPUS_INVALID_STATE: An encoder or decoder structure is invalid or already freed"],
|
|
673
|
+
[-7, "OPUS_ALLOC_FAIL: Memory allocation has failed"]
|
|
674
|
+
])
|
|
675
|
+
}
|
|
676
|
+
});
|
|
677
|
+
}
|
|
678
|
+
this._init = () => new this._WASMAudioDecoderCommon(this).instantiate(this._EmscriptenWASM, this._module).then((common) => {
|
|
679
|
+
this._common = common;
|
|
680
|
+
this._inputBytes = 0;
|
|
681
|
+
this._outputSamples = 0;
|
|
682
|
+
this._frameNumber = 0;
|
|
683
|
+
this._input = this._common.allocateTypedArray(
|
|
684
|
+
this._inputSize,
|
|
685
|
+
Uint8Array
|
|
686
|
+
);
|
|
687
|
+
this._output = this._common.allocateTypedArray(
|
|
688
|
+
this._outputChannels * this._outputChannelSize,
|
|
689
|
+
Float32Array
|
|
690
|
+
);
|
|
691
|
+
const mapping = this._common.allocateTypedArray(
|
|
692
|
+
this._channels,
|
|
693
|
+
Uint8Array
|
|
694
|
+
);
|
|
695
|
+
mapping.buf.set(this._channelMappingTable);
|
|
696
|
+
this._decoder = this._common.wasm.opus_frame_decoder_create(
|
|
697
|
+
this._sampleRate,
|
|
698
|
+
this._channels,
|
|
699
|
+
this._streamCount,
|
|
700
|
+
this._coupledStreamCount,
|
|
701
|
+
mapping.ptr,
|
|
702
|
+
this._preSkip,
|
|
703
|
+
this._forceStereo
|
|
704
|
+
);
|
|
705
|
+
});
|
|
706
|
+
Object.defineProperty(this, "ready", {
|
|
707
|
+
enumerable: true,
|
|
708
|
+
get: () => this._ready
|
|
709
|
+
});
|
|
710
|
+
this.reset = () => {
|
|
711
|
+
this.free();
|
|
712
|
+
return this._init();
|
|
713
|
+
};
|
|
714
|
+
this.free = () => {
|
|
715
|
+
this._common.free();
|
|
716
|
+
this._common.wasm.opus_frame_decoder_destroy(this._decoder);
|
|
717
|
+
this._common.wasm.free(this._decoder);
|
|
718
|
+
};
|
|
719
|
+
this._decode = (opusFrame) => {
|
|
720
|
+
if (!(opusFrame instanceof Uint8Array))
|
|
721
|
+
throw Error(
|
|
722
|
+
"Data to decode must be Uint8Array. Instead got " + typeof opusFrame
|
|
723
|
+
);
|
|
724
|
+
this._input.buf.set(opusFrame);
|
|
725
|
+
let samplesDecoded = this._common.wasm.opus_frame_decode_float_deinterleaved(
|
|
726
|
+
this._decoder,
|
|
727
|
+
this._input.ptr,
|
|
728
|
+
opusFrame.length,
|
|
729
|
+
this._output.ptr
|
|
730
|
+
);
|
|
731
|
+
let error;
|
|
732
|
+
if (samplesDecoded < 0) {
|
|
733
|
+
error = "libopus " + samplesDecoded + " " + (OpusDecoder.errors.get(samplesDecoded) || "Unknown Error");
|
|
734
|
+
console.error(error);
|
|
735
|
+
samplesDecoded = 0;
|
|
736
|
+
}
|
|
737
|
+
return {
|
|
738
|
+
outputBuffer: this._common.getOutputChannels(
|
|
739
|
+
this._output.buf,
|
|
740
|
+
this._outputChannels,
|
|
741
|
+
samplesDecoded
|
|
742
|
+
),
|
|
743
|
+
samplesDecoded,
|
|
744
|
+
error
|
|
745
|
+
};
|
|
746
|
+
};
|
|
747
|
+
this.decodeFrame = (opusFrame) => {
|
|
748
|
+
let errors = [];
|
|
749
|
+
const decoded = this._decode(opusFrame);
|
|
750
|
+
if (decoded.error)
|
|
751
|
+
this._common.addError(
|
|
752
|
+
errors,
|
|
753
|
+
decoded.error,
|
|
754
|
+
opusFrame.length,
|
|
755
|
+
this._frameNumber,
|
|
756
|
+
this._inputBytes,
|
|
757
|
+
this._outputSamples
|
|
758
|
+
);
|
|
759
|
+
this._frameNumber++;
|
|
760
|
+
this._inputBytes += opusFrame.length;
|
|
761
|
+
this._outputSamples += decoded.samplesDecoded;
|
|
762
|
+
return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(
|
|
763
|
+
errors,
|
|
764
|
+
[decoded.outputBuffer],
|
|
765
|
+
this._outputChannels,
|
|
766
|
+
decoded.samplesDecoded,
|
|
767
|
+
this._sampleRate
|
|
768
|
+
);
|
|
769
|
+
};
|
|
770
|
+
this.decodeFrames = (opusFrames) => {
|
|
771
|
+
let outputBuffers = [], errors = [], samplesDecoded = 0, i = 0;
|
|
772
|
+
while (i < opusFrames.length) {
|
|
773
|
+
const opusFrame = opusFrames[i++];
|
|
774
|
+
const decoded = this._decode(opusFrame);
|
|
775
|
+
outputBuffers.push(decoded.outputBuffer);
|
|
776
|
+
samplesDecoded += decoded.samplesDecoded;
|
|
777
|
+
if (decoded.error)
|
|
778
|
+
this._common.addError(
|
|
779
|
+
errors,
|
|
780
|
+
decoded.error,
|
|
781
|
+
opusFrame.length,
|
|
782
|
+
this._frameNumber,
|
|
783
|
+
this._inputBytes,
|
|
784
|
+
this._outputSamples
|
|
785
|
+
);
|
|
786
|
+
this._frameNumber++;
|
|
787
|
+
this._inputBytes += opusFrame.length;
|
|
788
|
+
this._outputSamples += decoded.samplesDecoded;
|
|
789
|
+
}
|
|
790
|
+
return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(
|
|
791
|
+
errors,
|
|
792
|
+
outputBuffers,
|
|
793
|
+
this._outputChannels,
|
|
794
|
+
samplesDecoded,
|
|
795
|
+
this._sampleRate
|
|
796
|
+
);
|
|
797
|
+
};
|
|
798
|
+
this._isWebWorker = OpusDecoder.isWebWorker;
|
|
799
|
+
this._WASMAudioDecoderCommon = OpusDecoder.WASMAudioDecoderCommon || WASMAudioDecoderCommon;
|
|
800
|
+
this._EmscriptenWASM = OpusDecoder.EmscriptenWASM || EmscriptenWASM;
|
|
801
|
+
this._module = OpusDecoder.module;
|
|
802
|
+
const MAX_FORCE_STEREO_CHANNELS = 8;
|
|
803
|
+
const isNumber = (param) => typeof param === "number";
|
|
804
|
+
const sampleRate2 = options.sampleRate;
|
|
805
|
+
const channels3 = options.channels;
|
|
806
|
+
const streamCount3 = options.streamCount;
|
|
807
|
+
const coupledStreamCount3 = options.coupledStreamCount;
|
|
808
|
+
const channelMappingTable3 = options.channelMappingTable;
|
|
809
|
+
const preSkip3 = options.preSkip;
|
|
810
|
+
const forceStereo = options.forceStereo ? 1 : 0;
|
|
811
|
+
if (channels3 > 2 && (!isNumber(streamCount3) || !isNumber(coupledStreamCount3) || !Array.isArray(channelMappingTable3))) {
|
|
812
|
+
throw new Error("Invalid Opus Decoder Options for multichannel decoding.");
|
|
813
|
+
}
|
|
814
|
+
this._sampleRate = [8e3, 12e3, 16e3, 24e3, 48e3].includes(sampleRate2) ? sampleRate2 : 48e3;
|
|
815
|
+
this._channels = isNumber(channels3) ? channels3 : 2;
|
|
816
|
+
this._streamCount = isNumber(streamCount3) ? streamCount3 : 1;
|
|
817
|
+
this._coupledStreamCount = isNumber(coupledStreamCount3) ? coupledStreamCount3 : this._channels - 1;
|
|
818
|
+
this._channelMappingTable = channelMappingTable3 || (this._channels === 2 ? [0, 1] : [0]);
|
|
819
|
+
this._preSkip = preSkip3 || 0;
|
|
820
|
+
this._forceStereo = channels3 <= MAX_FORCE_STEREO_CHANNELS && channels3 != 2 ? forceStereo : 0;
|
|
821
|
+
this._inputSize = 32e3 * 0.12 * this._channels;
|
|
822
|
+
this._outputChannelSize = 120 * 48;
|
|
823
|
+
this._outputChannels = this._forceStereo ? 2 : this._channels;
|
|
824
|
+
this._ready = this._init();
|
|
825
|
+
return this;
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
// ../../node_modules/opus-decoder/src/OpusDecoderWebWorker.js
|
|
829
|
+
var OpusDecoderWebWorker = class extends WASMAudioDecoderWorker {
|
|
830
|
+
constructor(options) {
|
|
831
|
+
super(options, "opus-decoder", OpusDecoder, EmscriptenWASM);
|
|
832
|
+
}
|
|
833
|
+
async decodeFrame(data3) {
|
|
834
|
+
return this.postToDecoder("decodeFrame", data3);
|
|
835
|
+
}
|
|
836
|
+
async decodeFrames(data3) {
|
|
837
|
+
return this.postToDecoder("decodeFrames", data3);
|
|
838
|
+
}
|
|
839
|
+
};
|
|
840
|
+
|
|
841
|
+
// ../../node_modules/opus-decoder/index.js
|
|
842
|
+
assignNames(OpusDecoder, "OpusDecoder");
|
|
843
|
+
assignNames(OpusDecoderWebWorker, "OpusDecoderWebWorker");
|
|
844
|
+
|
|
845
|
+
// ../../node_modules/codec-parser/src/constants.js
|
|
846
|
+
var symbol = Symbol;
|
|
847
|
+
var mappingJoin = ", ";
|
|
848
|
+
var channelMappings = (() => {
|
|
849
|
+
const front = "front";
|
|
850
|
+
const side = "side";
|
|
851
|
+
const rear = "rear";
|
|
852
|
+
const left = "left";
|
|
853
|
+
const center = "center";
|
|
854
|
+
const right = "right";
|
|
855
|
+
return ["", front + " ", side + " ", rear + " "].map(
|
|
856
|
+
(x) => [
|
|
857
|
+
[left, right],
|
|
858
|
+
[left, right, center],
|
|
859
|
+
[left, center, right],
|
|
860
|
+
[center, left, right],
|
|
861
|
+
[center]
|
|
862
|
+
].flatMap((y) => y.map((z) => x + z).join(mappingJoin))
|
|
863
|
+
);
|
|
864
|
+
})();
|
|
865
|
+
var lfe = "LFE";
|
|
866
|
+
var monophonic = "monophonic (mono)";
|
|
867
|
+
var stereo = "stereo";
|
|
868
|
+
var surround = "surround";
|
|
869
|
+
var getChannelMapping = (channelCount, ...mappings) => `${[
|
|
870
|
+
monophonic,
|
|
871
|
+
stereo,
|
|
872
|
+
`linear ${surround}`,
|
|
873
|
+
"quadraphonic",
|
|
874
|
+
`5.0 ${surround}`,
|
|
875
|
+
`5.1 ${surround}`,
|
|
876
|
+
`6.1 ${surround}`,
|
|
877
|
+
`7.1 ${surround}`
|
|
878
|
+
][channelCount - 1]} (${mappings.join(mappingJoin)})`;
|
|
879
|
+
var vorbisOpusChannelMapping = [
|
|
880
|
+
monophonic,
|
|
881
|
+
getChannelMapping(2, channelMappings[0][0]),
|
|
882
|
+
getChannelMapping(3, channelMappings[0][2]),
|
|
883
|
+
getChannelMapping(4, channelMappings[1][0], channelMappings[3][0]),
|
|
884
|
+
getChannelMapping(5, channelMappings[1][2], channelMappings[3][0]),
|
|
885
|
+
getChannelMapping(6, channelMappings[1][2], channelMappings[3][0], lfe),
|
|
886
|
+
getChannelMapping(7, channelMappings[1][2], channelMappings[2][0], channelMappings[3][4], lfe),
|
|
887
|
+
getChannelMapping(8, channelMappings[1][2], channelMappings[2][0], channelMappings[3][0], lfe)
|
|
888
|
+
];
|
|
889
|
+
var rate192000 = 192e3;
|
|
890
|
+
var rate176400 = 176400;
|
|
891
|
+
var rate96000 = 96e3;
|
|
892
|
+
var rate88200 = 88200;
|
|
893
|
+
var rate64000 = 64e3;
|
|
894
|
+
var rate48000 = 48e3;
|
|
895
|
+
var rate44100 = 44100;
|
|
896
|
+
var rate32000 = 32e3;
|
|
897
|
+
var rate24000 = 24e3;
|
|
898
|
+
var rate22050 = 22050;
|
|
899
|
+
var rate16000 = 16e3;
|
|
900
|
+
var rate12000 = 12e3;
|
|
901
|
+
var rate11025 = 11025;
|
|
902
|
+
var rate8000 = 8e3;
|
|
903
|
+
var rate7350 = 7350;
|
|
904
|
+
var absoluteGranulePosition = "absoluteGranulePosition";
|
|
905
|
+
var bandwidth = "bandwidth";
|
|
906
|
+
var bitDepth = "bitDepth";
|
|
907
|
+
var bitrate = "bitrate";
|
|
908
|
+
var bitrateMaximum = bitrate + "Maximum";
|
|
909
|
+
var bitrateMinimum = bitrate + "Minimum";
|
|
910
|
+
var bitrateNominal = bitrate + "Nominal";
|
|
911
|
+
var buffer = "buffer";
|
|
912
|
+
var bufferFullness = buffer + "Fullness";
|
|
913
|
+
var codec = "codec";
|
|
914
|
+
var codecFrames = codec + "Frames";
|
|
915
|
+
var coupledStreamCount = "coupledStreamCount";
|
|
916
|
+
var crc = "crc";
|
|
917
|
+
var crc16 = crc + "16";
|
|
918
|
+
var crc32 = crc + "32";
|
|
919
|
+
var data = "data";
|
|
920
|
+
var description = "description";
|
|
921
|
+
var duration = "duration";
|
|
922
|
+
var emphasis = "emphasis";
|
|
923
|
+
var hasOpusPadding = "hasOpusPadding";
|
|
924
|
+
var header = "header";
|
|
925
|
+
var isContinuedPacket = "isContinuedPacket";
|
|
926
|
+
var isCopyrighted = "isCopyrighted";
|
|
927
|
+
var isFirstPage = "isFirstPage";
|
|
928
|
+
var isHome = "isHome";
|
|
929
|
+
var isLastPage = "isLastPage";
|
|
930
|
+
var isOriginal = "isOriginal";
|
|
931
|
+
var isPrivate = "isPrivate";
|
|
932
|
+
var isVbr = "isVbr";
|
|
933
|
+
var layer = "layer";
|
|
934
|
+
var length = "length";
|
|
935
|
+
var mode = "mode";
|
|
936
|
+
var modeExtension = mode + "Extension";
|
|
937
|
+
var mpeg = "mpeg";
|
|
938
|
+
var mpegVersion = mpeg + "Version";
|
|
939
|
+
var numberAACFrames = "numberAACFrames";
|
|
940
|
+
var outputGain = "outputGain";
|
|
941
|
+
var preSkip = "preSkip";
|
|
942
|
+
var profile = "profile";
|
|
943
|
+
var profileBits = symbol();
|
|
944
|
+
var protection = "protection";
|
|
945
|
+
var rawData = "rawData";
|
|
946
|
+
var segments = "segments";
|
|
947
|
+
var subarray = "subarray";
|
|
948
|
+
var version = "version";
|
|
949
|
+
var vorbis = "vorbis";
|
|
950
|
+
var vorbisComments = vorbis + "Comments";
|
|
951
|
+
var vorbisSetup = vorbis + "Setup";
|
|
952
|
+
var block = "block";
|
|
953
|
+
var blockingStrategy = block + "ingStrategy";
|
|
954
|
+
var blockingStrategyBits = symbol();
|
|
955
|
+
var blockSize = block + "Size";
|
|
956
|
+
var blocksize0 = block + "size0";
|
|
957
|
+
var blocksize1 = block + "size1";
|
|
958
|
+
var blockSizeBits = symbol();
|
|
959
|
+
var channel = "channel";
|
|
960
|
+
var channelMappingFamily = channel + "MappingFamily";
|
|
961
|
+
var channelMappingTable = channel + "MappingTable";
|
|
962
|
+
var channelMode = channel + "Mode";
|
|
963
|
+
var channelModeBits = symbol();
|
|
964
|
+
var channels = channel + "s";
|
|
965
|
+
var copyright = "copyright";
|
|
966
|
+
var copyrightId = copyright + "Id";
|
|
967
|
+
var copyrightIdStart = copyright + "IdStart";
|
|
968
|
+
var frame = "frame";
|
|
969
|
+
var frameCount = frame + "Count";
|
|
970
|
+
var frameLength = frame + "Length";
|
|
971
|
+
var Number2 = "Number";
|
|
972
|
+
var frameNumber = frame + Number2;
|
|
973
|
+
var framePadding = frame + "Padding";
|
|
974
|
+
var frameSize = frame + "Size";
|
|
975
|
+
var Rate = "Rate";
|
|
976
|
+
var inputSampleRate = "inputSample" + Rate;
|
|
977
|
+
var page = "page";
|
|
978
|
+
var pageChecksum = page + "Checksum";
|
|
979
|
+
var pageSegmentBytes = symbol();
|
|
980
|
+
var pageSegmentTable = page + "SegmentTable";
|
|
981
|
+
var pageSequenceNumber = page + "Sequence" + Number2;
|
|
982
|
+
var sample = "sample";
|
|
983
|
+
var sampleNumber = sample + Number2;
|
|
984
|
+
var sampleRate = sample + Rate;
|
|
985
|
+
var sampleRateBits = symbol();
|
|
986
|
+
var samples = sample + "s";
|
|
987
|
+
var stream = "stream";
|
|
988
|
+
var streamCount = stream + "Count";
|
|
989
|
+
var streamInfo = stream + "Info";
|
|
990
|
+
var streamSerialNumber = stream + "Serial" + Number2;
|
|
991
|
+
var streamStructureVersion = stream + "StructureVersion";
|
|
992
|
+
var total = "total";
|
|
993
|
+
var totalBytesOut = total + "BytesOut";
|
|
994
|
+
var totalDuration = total + "Duration";
|
|
995
|
+
var totalSamples = total + "Samples";
|
|
996
|
+
var readRawData = symbol();
|
|
997
|
+
var incrementRawData = symbol();
|
|
998
|
+
var mapCodecFrameStats = symbol();
|
|
999
|
+
var mapFrameStats = symbol();
|
|
1000
|
+
var logWarning = symbol();
|
|
1001
|
+
var logError2 = symbol();
|
|
1002
|
+
var syncFrame = symbol();
|
|
1003
|
+
var fixedLengthFrameSync = symbol();
|
|
1004
|
+
var getHeader = symbol();
|
|
1005
|
+
var setHeader = symbol();
|
|
1006
|
+
var getFrame = symbol();
|
|
1007
|
+
var parseFrame = symbol();
|
|
1008
|
+
var parseOggPage = symbol();
|
|
1009
|
+
var checkCodecUpdate = symbol();
|
|
1010
|
+
var reset = symbol();
|
|
1011
|
+
var enable = symbol();
|
|
1012
|
+
var getHeaderFromUint8Array = symbol();
|
|
1013
|
+
var checkFrameFooterCrc16 = symbol();
|
|
1014
|
+
var uint8Array = Uint8Array;
|
|
1015
|
+
var dataView = DataView;
|
|
1016
|
+
var reserved = "reserved";
|
|
1017
|
+
var bad = "bad";
|
|
1018
|
+
var free = "free";
|
|
1019
|
+
var none = "none";
|
|
1020
|
+
var sixteenBitCRC = "16bit CRC";
|
|
1021
|
+
|
|
1022
|
+
// ../../node_modules/codec-parser/src/utilities.js
|
|
1023
|
+
var getCrcTable = (crcTable, crcInitialValueFunction, crcFunction) => {
|
|
1024
|
+
for (let byte = 0; byte < crcTable[length]; byte++) {
|
|
1025
|
+
let crc2 = crcInitialValueFunction(byte);
|
|
1026
|
+
for (let bit = 8; bit > 0; bit--) crc2 = crcFunction(crc2);
|
|
1027
|
+
crcTable[byte] = crc2;
|
|
1028
|
+
}
|
|
1029
|
+
return crcTable;
|
|
1030
|
+
};
|
|
1031
|
+
var crc8Table = getCrcTable(
|
|
1032
|
+
new uint8Array(256),
|
|
1033
|
+
(b) => b,
|
|
1034
|
+
(crc2) => crc2 & 128 ? 7 ^ crc2 << 1 : crc2 << 1
|
|
1035
|
+
);
|
|
1036
|
+
var flacCrc16Table = [
|
|
1037
|
+
getCrcTable(
|
|
1038
|
+
new Uint16Array(256),
|
|
1039
|
+
(b) => b << 8,
|
|
1040
|
+
(crc2) => crc2 << 1 ^ (crc2 & 1 << 15 ? 32773 : 0)
|
|
1041
|
+
)
|
|
1042
|
+
];
|
|
1043
|
+
var crc32Table = [
|
|
1044
|
+
getCrcTable(
|
|
1045
|
+
new Uint32Array(256),
|
|
1046
|
+
(b) => b,
|
|
1047
|
+
(crc2) => crc2 >>> 1 ^ (crc2 & 1) * 3988292384
|
|
1048
|
+
)
|
|
1049
|
+
];
|
|
1050
|
+
for (let i = 0; i < 15; i++) {
|
|
1051
|
+
flacCrc16Table.push(new Uint16Array(256));
|
|
1052
|
+
crc32Table.push(new Uint32Array(256));
|
|
1053
|
+
for (let j = 0; j <= 255; j++) {
|
|
1054
|
+
flacCrc16Table[i + 1][j] = flacCrc16Table[0][flacCrc16Table[i][j] >>> 8] ^ flacCrc16Table[i][j] << 8;
|
|
1055
|
+
crc32Table[i + 1][j] = crc32Table[i][j] >>> 8 ^ crc32Table[0][crc32Table[i][j] & 255];
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
var crc8 = (data3) => {
|
|
1059
|
+
let crc2 = 0;
|
|
1060
|
+
const dataLength = data3[length];
|
|
1061
|
+
for (let i = 0; i !== dataLength; i++) crc2 = crc8Table[crc2 ^ data3[i]];
|
|
1062
|
+
return crc2;
|
|
1063
|
+
};
|
|
1064
|
+
var flacCrc16 = (data3) => {
|
|
1065
|
+
const dataLength = data3[length];
|
|
1066
|
+
const crcChunkSize = dataLength - 16;
|
|
1067
|
+
let crc2 = 0;
|
|
1068
|
+
let i = 0;
|
|
1069
|
+
while (i <= crcChunkSize) {
|
|
1070
|
+
crc2 ^= data3[i++] << 8 | data3[i++];
|
|
1071
|
+
crc2 = flacCrc16Table[15][crc2 >> 8] ^ flacCrc16Table[14][crc2 & 255] ^ flacCrc16Table[13][data3[i++]] ^ flacCrc16Table[12][data3[i++]] ^ flacCrc16Table[11][data3[i++]] ^ flacCrc16Table[10][data3[i++]] ^ flacCrc16Table[9][data3[i++]] ^ flacCrc16Table[8][data3[i++]] ^ flacCrc16Table[7][data3[i++]] ^ flacCrc16Table[6][data3[i++]] ^ flacCrc16Table[5][data3[i++]] ^ flacCrc16Table[4][data3[i++]] ^ flacCrc16Table[3][data3[i++]] ^ flacCrc16Table[2][data3[i++]] ^ flacCrc16Table[1][data3[i++]] ^ flacCrc16Table[0][data3[i++]];
|
|
1072
|
+
}
|
|
1073
|
+
while (i !== dataLength)
|
|
1074
|
+
crc2 = (crc2 & 255) << 8 ^ flacCrc16Table[0][crc2 >> 8 ^ data3[i++]];
|
|
1075
|
+
return crc2;
|
|
1076
|
+
};
|
|
1077
|
+
var crc32Function = (data3) => {
|
|
1078
|
+
const dataLength = data3[length];
|
|
1079
|
+
const crcChunkSize = dataLength - 16;
|
|
1080
|
+
let crc2 = 0;
|
|
1081
|
+
let i = 0;
|
|
1082
|
+
while (i <= crcChunkSize)
|
|
1083
|
+
crc2 = crc32Table[15][(data3[i++] ^ crc2) & 255] ^ crc32Table[14][(data3[i++] ^ crc2 >>> 8) & 255] ^ crc32Table[13][(data3[i++] ^ crc2 >>> 16) & 255] ^ crc32Table[12][data3[i++] ^ crc2 >>> 24] ^ crc32Table[11][data3[i++]] ^ crc32Table[10][data3[i++]] ^ crc32Table[9][data3[i++]] ^ crc32Table[8][data3[i++]] ^ crc32Table[7][data3[i++]] ^ crc32Table[6][data3[i++]] ^ crc32Table[5][data3[i++]] ^ crc32Table[4][data3[i++]] ^ crc32Table[3][data3[i++]] ^ crc32Table[2][data3[i++]] ^ crc32Table[1][data3[i++]] ^ crc32Table[0][data3[i++]];
|
|
1084
|
+
while (i !== dataLength)
|
|
1085
|
+
crc2 = crc32Table[0][(crc2 ^ data3[i++]) & 255] ^ crc2 >>> 8;
|
|
1086
|
+
return crc2 ^ -1;
|
|
1087
|
+
};
|
|
1088
|
+
var concatBuffers = (...buffers) => {
|
|
1089
|
+
const buffer2 = new uint8Array(
|
|
1090
|
+
buffers.reduce((acc, buf) => acc + buf[length], 0)
|
|
1091
|
+
);
|
|
1092
|
+
buffers.reduce((offset, buf) => {
|
|
1093
|
+
buffer2.set(buf, offset);
|
|
1094
|
+
return offset + buf[length];
|
|
1095
|
+
}, 0);
|
|
1096
|
+
return buffer2;
|
|
1097
|
+
};
|
|
1098
|
+
var bytesToString = (bytes) => String.fromCharCode(...bytes);
|
|
1099
|
+
var reverseTable = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15];
|
|
1100
|
+
var reverse = (val) => reverseTable[val & 15] << 4 | reverseTable[val >> 4];
|
|
1101
|
+
var BitReader = class {
|
|
1102
|
+
constructor(data3) {
|
|
1103
|
+
this._data = data3;
|
|
1104
|
+
this._pos = data3[length] * 8;
|
|
1105
|
+
}
|
|
1106
|
+
set position(position) {
|
|
1107
|
+
this._pos = position;
|
|
1108
|
+
}
|
|
1109
|
+
get position() {
|
|
1110
|
+
return this._pos;
|
|
1111
|
+
}
|
|
1112
|
+
read(bits) {
|
|
1113
|
+
const byte = Math.floor(this._pos / 8);
|
|
1114
|
+
const bit = this._pos % 8;
|
|
1115
|
+
this._pos -= bits;
|
|
1116
|
+
const window = (reverse(this._data[byte - 1]) << 8) + reverse(this._data[byte]);
|
|
1117
|
+
return window >> 7 - bit & 255;
|
|
1118
|
+
}
|
|
1119
|
+
};
|
|
1120
|
+
var readInt64le = (view, offset) => {
|
|
1121
|
+
try {
|
|
1122
|
+
return view.getBigInt64(offset, true);
|
|
1123
|
+
} catch {
|
|
1124
|
+
const sign = view.getUint8(offset + 7) & 128 ? -1 : 1;
|
|
1125
|
+
let firstPart = view.getUint32(offset, true);
|
|
1126
|
+
let secondPart = view.getUint32(offset + 4, true);
|
|
1127
|
+
if (sign === -1) {
|
|
1128
|
+
firstPart = ~firstPart + 1;
|
|
1129
|
+
secondPart = ~secondPart + 1;
|
|
1130
|
+
}
|
|
1131
|
+
if (secondPart > 1048575) {
|
|
1132
|
+
console.warn("This platform does not support BigInt");
|
|
1133
|
+
}
|
|
1134
|
+
return sign * (firstPart + secondPart * 2 ** 32);
|
|
1135
|
+
}
|
|
1136
|
+
};
|
|
1137
|
+
|
|
1138
|
+
// ../../node_modules/codec-parser/src/codecs/HeaderCache.js
|
|
1139
|
+
var HeaderCache = class {
|
|
1140
|
+
constructor(onCodecHeader, onCodecUpdate) {
|
|
1141
|
+
this._onCodecHeader = onCodecHeader;
|
|
1142
|
+
this._onCodecUpdate = onCodecUpdate;
|
|
1143
|
+
this[reset]();
|
|
1144
|
+
}
|
|
1145
|
+
[enable]() {
|
|
1146
|
+
this._isEnabled = true;
|
|
1147
|
+
}
|
|
1148
|
+
[reset]() {
|
|
1149
|
+
this._headerCache = /* @__PURE__ */ new Map();
|
|
1150
|
+
this._codecUpdateData = /* @__PURE__ */ new WeakMap();
|
|
1151
|
+
this._codecHeaderSent = false;
|
|
1152
|
+
this._codecShouldUpdate = false;
|
|
1153
|
+
this._bitrate = null;
|
|
1154
|
+
this._isEnabled = false;
|
|
1155
|
+
}
|
|
1156
|
+
[checkCodecUpdate](bitrate2, totalDuration2) {
|
|
1157
|
+
if (this._onCodecUpdate) {
|
|
1158
|
+
if (this._bitrate !== bitrate2) {
|
|
1159
|
+
this._bitrate = bitrate2;
|
|
1160
|
+
this._codecShouldUpdate = true;
|
|
1161
|
+
}
|
|
1162
|
+
const codecData = this._codecUpdateData.get(
|
|
1163
|
+
this._headerCache.get(this._currentHeader)
|
|
1164
|
+
);
|
|
1165
|
+
if (this._codecShouldUpdate && codecData) {
|
|
1166
|
+
this._onCodecUpdate(
|
|
1167
|
+
{
|
|
1168
|
+
bitrate: bitrate2,
|
|
1169
|
+
...codecData
|
|
1170
|
+
},
|
|
1171
|
+
totalDuration2
|
|
1172
|
+
);
|
|
1173
|
+
}
|
|
1174
|
+
this._codecShouldUpdate = false;
|
|
1175
|
+
}
|
|
1176
|
+
}
|
|
1177
|
+
[getHeader](key) {
|
|
1178
|
+
const header3 = this._headerCache.get(key);
|
|
1179
|
+
if (header3) {
|
|
1180
|
+
this._updateCurrentHeader(key);
|
|
1181
|
+
}
|
|
1182
|
+
return header3;
|
|
1183
|
+
}
|
|
1184
|
+
[setHeader](key, header3, codecUpdateFields) {
|
|
1185
|
+
if (this._isEnabled) {
|
|
1186
|
+
if (!this._codecHeaderSent) {
|
|
1187
|
+
this._onCodecHeader({ ...header3 });
|
|
1188
|
+
this._codecHeaderSent = true;
|
|
1189
|
+
}
|
|
1190
|
+
this._updateCurrentHeader(key);
|
|
1191
|
+
this._headerCache.set(key, header3);
|
|
1192
|
+
this._codecUpdateData.set(header3, codecUpdateFields);
|
|
1193
|
+
}
|
|
1194
|
+
}
|
|
1195
|
+
_updateCurrentHeader(key) {
|
|
1196
|
+
if (this._onCodecUpdate && key !== this._currentHeader) {
|
|
1197
|
+
this._codecShouldUpdate = true;
|
|
1198
|
+
this._currentHeader = key;
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
};
|
|
1202
|
+
|
|
1203
|
+
// ../../node_modules/codec-parser/src/globals.js
|
|
1204
|
+
var headerStore = /* @__PURE__ */ new WeakMap();
|
|
1205
|
+
var frameStore = /* @__PURE__ */ new WeakMap();
|
|
1206
|
+
|
|
1207
|
+
// ../../node_modules/codec-parser/src/codecs/Parser.js
|
|
1208
|
+
var Parser = class {
|
|
1209
|
+
constructor(codecParser, headerCache) {
|
|
1210
|
+
this._codecParser = codecParser;
|
|
1211
|
+
this._headerCache = headerCache;
|
|
1212
|
+
}
|
|
1213
|
+
*[syncFrame]() {
|
|
1214
|
+
let frameData;
|
|
1215
|
+
do {
|
|
1216
|
+
frameData = yield* this.Frame[getFrame](
|
|
1217
|
+
this._codecParser,
|
|
1218
|
+
this._headerCache,
|
|
1219
|
+
0
|
|
1220
|
+
);
|
|
1221
|
+
if (frameData) return frameData;
|
|
1222
|
+
this._codecParser[incrementRawData](1);
|
|
1223
|
+
} while (true);
|
|
1224
|
+
}
|
|
1225
|
+
/**
|
|
1226
|
+
* @description Searches for Frames within bytes containing a sequence of known codec frames.
|
|
1227
|
+
* @param {boolean} ignoreNextFrame Set to true to return frames even if the next frame may not exist at the expected location
|
|
1228
|
+
* @returns {Frame}
|
|
1229
|
+
*/
|
|
1230
|
+
*[fixedLengthFrameSync](ignoreNextFrame) {
|
|
1231
|
+
let frameData = yield* this[syncFrame]();
|
|
1232
|
+
const frameLength2 = frameStore.get(frameData)[length];
|
|
1233
|
+
if (ignoreNextFrame || this._codecParser._flushing || // check if there is a frame right after this one
|
|
1234
|
+
(yield* this.Header[getHeader](
|
|
1235
|
+
this._codecParser,
|
|
1236
|
+
this._headerCache,
|
|
1237
|
+
frameLength2
|
|
1238
|
+
))) {
|
|
1239
|
+
this._headerCache[enable]();
|
|
1240
|
+
this._codecParser[incrementRawData](frameLength2);
|
|
1241
|
+
this._codecParser[mapFrameStats](frameData);
|
|
1242
|
+
return frameData;
|
|
1243
|
+
}
|
|
1244
|
+
this._codecParser[logWarning](
|
|
1245
|
+
`Missing ${frame} at ${frameLength2} bytes from current position.`,
|
|
1246
|
+
`Dropping current ${frame} and trying again.`
|
|
1247
|
+
);
|
|
1248
|
+
this._headerCache[reset]();
|
|
1249
|
+
this._codecParser[incrementRawData](1);
|
|
1250
|
+
}
|
|
1251
|
+
};
|
|
1252
|
+
|
|
1253
|
+
// ../../node_modules/codec-parser/src/containers/Frame.js
|
|
1254
|
+
var Frame = class {
|
|
1255
|
+
constructor(headerValue, dataValue) {
|
|
1256
|
+
frameStore.set(this, { [header]: headerValue });
|
|
1257
|
+
this[data] = dataValue;
|
|
1258
|
+
}
|
|
1259
|
+
};
|
|
1260
|
+
|
|
1261
|
+
// ../../node_modules/codec-parser/src/codecs/CodecFrame.js
|
|
1262
|
+
var CodecFrame = class extends Frame {
|
|
1263
|
+
static *[getFrame](Header, Frame2, codecParser, headerCache, readOffset) {
|
|
1264
|
+
const headerValue = yield* Header[getHeader](
|
|
1265
|
+
codecParser,
|
|
1266
|
+
headerCache,
|
|
1267
|
+
readOffset
|
|
1268
|
+
);
|
|
1269
|
+
if (headerValue) {
|
|
1270
|
+
const frameLengthValue = headerStore.get(headerValue)[frameLength];
|
|
1271
|
+
const samplesValue = headerStore.get(headerValue)[samples];
|
|
1272
|
+
const frame2 = (yield* codecParser[readRawData](
|
|
1273
|
+
frameLengthValue,
|
|
1274
|
+
readOffset
|
|
1275
|
+
))[subarray](0, frameLengthValue);
|
|
1276
|
+
return new Frame2(headerValue, frame2, samplesValue);
|
|
1277
|
+
} else {
|
|
1278
|
+
return null;
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1281
|
+
constructor(headerValue, dataValue, samplesValue) {
|
|
1282
|
+
super(headerValue, dataValue);
|
|
1283
|
+
this[header] = headerValue;
|
|
1284
|
+
this[samples] = samplesValue;
|
|
1285
|
+
this[duration] = samplesValue / headerValue[sampleRate] * 1e3;
|
|
1286
|
+
this[frameNumber] = null;
|
|
1287
|
+
this[totalBytesOut] = null;
|
|
1288
|
+
this[totalSamples] = null;
|
|
1289
|
+
this[totalDuration] = null;
|
|
1290
|
+
frameStore.get(this)[length] = dataValue[length];
|
|
1291
|
+
}
|
|
1292
|
+
};
|
|
1293
|
+
|
|
1294
|
+
// ../../node_modules/codec-parser/src/metadata/ID3v2.js
|
|
1295
|
+
var unsynchronizationFlag = "unsynchronizationFlag";
|
|
1296
|
+
var extendedHeaderFlag = "extendedHeaderFlag";
|
|
1297
|
+
var experimentalFlag = "experimentalFlag";
|
|
1298
|
+
var footerPresent = "footerPresent";
|
|
1299
|
+
var ID3v2 = class _ID3v2 {
|
|
1300
|
+
static *getID3v2Header(codecParser, headerCache, readOffset) {
|
|
1301
|
+
const headerLength = 10;
|
|
1302
|
+
const header3 = {};
|
|
1303
|
+
let data3 = yield* codecParser[readRawData](3, readOffset);
|
|
1304
|
+
if (data3[0] !== 73 || data3[1] !== 68 || data3[2] !== 51) return null;
|
|
1305
|
+
data3 = yield* codecParser[readRawData](headerLength, readOffset);
|
|
1306
|
+
header3[version] = `id3v2.${data3[3]}.${data3[4]}`;
|
|
1307
|
+
if (data3[5] & 15) return null;
|
|
1308
|
+
header3[unsynchronizationFlag] = !!(data3[5] & 128);
|
|
1309
|
+
header3[extendedHeaderFlag] = !!(data3[5] & 64);
|
|
1310
|
+
header3[experimentalFlag] = !!(data3[5] & 32);
|
|
1311
|
+
header3[footerPresent] = !!(data3[5] & 16);
|
|
1312
|
+
if (data3[6] & 128 || data3[7] & 128 || data3[8] & 128 || data3[9] & 128)
|
|
1313
|
+
return null;
|
|
1314
|
+
const dataLength = data3[6] << 21 | data3[7] << 14 | data3[8] << 7 | data3[9];
|
|
1315
|
+
header3[length] = headerLength + dataLength;
|
|
1316
|
+
return new _ID3v2(header3);
|
|
1317
|
+
}
|
|
1318
|
+
constructor(header3) {
|
|
1319
|
+
this[version] = header3[version];
|
|
1320
|
+
this[unsynchronizationFlag] = header3[unsynchronizationFlag];
|
|
1321
|
+
this[extendedHeaderFlag] = header3[extendedHeaderFlag];
|
|
1322
|
+
this[experimentalFlag] = header3[experimentalFlag];
|
|
1323
|
+
this[footerPresent] = header3[footerPresent];
|
|
1324
|
+
this[length] = header3[length];
|
|
1325
|
+
}
|
|
1326
|
+
};
|
|
1327
|
+
|
|
1328
|
+
// ../../node_modules/codec-parser/src/codecs/CodecHeader.js
|
|
1329
|
+
var CodecHeader = class {
|
|
1330
|
+
/**
|
|
1331
|
+
* @private
|
|
1332
|
+
*/
|
|
1333
|
+
constructor(header3) {
|
|
1334
|
+
headerStore.set(this, header3);
|
|
1335
|
+
this[bitDepth] = header3[bitDepth];
|
|
1336
|
+
this[bitrate] = null;
|
|
1337
|
+
this[channels] = header3[channels];
|
|
1338
|
+
this[channelMode] = header3[channelMode];
|
|
1339
|
+
this[sampleRate] = header3[sampleRate];
|
|
1340
|
+
}
|
|
1341
|
+
};
|
|
1342
|
+
|
|
1343
|
+
// ../../node_modules/codec-parser/src/codecs/mpeg/MPEGHeader.js
|
|
1344
|
+
var bitrateMatrix = {
|
|
1345
|
+
// bits | V1,L1 | V1,L2 | V1,L3 | V2,L1 | V2,L2 & L3
|
|
1346
|
+
0: [free, free, free, free, free],
|
|
1347
|
+
16: [32, 32, 32, 32, 8],
|
|
1348
|
+
// 0b00100000: [64, 48, 40, 48, 16,],
|
|
1349
|
+
// 0b00110000: [96, 56, 48, 56, 24,],
|
|
1350
|
+
// 0b01000000: [128, 64, 56, 64, 32,],
|
|
1351
|
+
// 0b01010000: [160, 80, 64, 80, 40,],
|
|
1352
|
+
// 0b01100000: [192, 96, 80, 96, 48,],
|
|
1353
|
+
// 0b01110000: [224, 112, 96, 112, 56,],
|
|
1354
|
+
// 0b10000000: [256, 128, 112, 128, 64,],
|
|
1355
|
+
// 0b10010000: [288, 160, 128, 144, 80,],
|
|
1356
|
+
// 0b10100000: [320, 192, 160, 160, 96,],
|
|
1357
|
+
// 0b10110000: [352, 224, 192, 176, 112,],
|
|
1358
|
+
// 0b11000000: [384, 256, 224, 192, 128,],
|
|
1359
|
+
// 0b11010000: [416, 320, 256, 224, 144,],
|
|
1360
|
+
// 0b11100000: [448, 384, 320, 256, 160,],
|
|
1361
|
+
240: [bad, bad, bad, bad, bad]
|
|
1362
|
+
};
|
|
1363
|
+
var calcBitrate = (idx, interval, intervalOffset) => 8 * ((idx + intervalOffset) % interval + interval) * (1 << (idx + intervalOffset) / interval) - 8 * interval * (interval / 8 | 0);
|
|
1364
|
+
for (let i = 2; i < 15; i++)
|
|
1365
|
+
bitrateMatrix[i << 4] = [
|
|
1366
|
+
i * 32,
|
|
1367
|
+
// V1,L1
|
|
1368
|
+
calcBitrate(i, 4, 0),
|
|
1369
|
+
// V1,L2
|
|
1370
|
+
calcBitrate(i, 4, -1),
|
|
1371
|
+
// V1,L3
|
|
1372
|
+
calcBitrate(i, 8, 4),
|
|
1373
|
+
// V2,L1
|
|
1374
|
+
calcBitrate(i, 8, 0)
|
|
1375
|
+
// V2,L2 & L3
|
|
1376
|
+
];
|
|
1377
|
+
var v1Layer1 = 0;
|
|
1378
|
+
var v1Layer2 = 1;
|
|
1379
|
+
var v1Layer3 = 2;
|
|
1380
|
+
var v2Layer1 = 3;
|
|
1381
|
+
var v2Layer23 = 4;
|
|
1382
|
+
var bands = "bands ";
|
|
1383
|
+
var to31 = " to 31";
|
|
1384
|
+
var layer12ModeExtensions = {
|
|
1385
|
+
0: bands + 4 + to31,
|
|
1386
|
+
16: bands + 8 + to31,
|
|
1387
|
+
32: bands + 12 + to31,
|
|
1388
|
+
48: bands + 16 + to31
|
|
1389
|
+
};
|
|
1390
|
+
var bitrateIndex = "bitrateIndex";
|
|
1391
|
+
var v2 = "v2";
|
|
1392
|
+
var v1 = "v1";
|
|
1393
|
+
var intensityStereo = "Intensity stereo ";
|
|
1394
|
+
var msStereo = ", MS stereo ";
|
|
1395
|
+
var on = "on";
|
|
1396
|
+
var off = "off";
|
|
1397
|
+
var layer3ModeExtensions = {
|
|
1398
|
+
0: intensityStereo + off + msStereo + off,
|
|
1399
|
+
16: intensityStereo + on + msStereo + off,
|
|
1400
|
+
32: intensityStereo + off + msStereo + on,
|
|
1401
|
+
48: intensityStereo + on + msStereo + on
|
|
1402
|
+
};
|
|
1403
|
+
var layersValues = {
|
|
1404
|
+
0: { [description]: reserved },
|
|
1405
|
+
2: {
|
|
1406
|
+
[description]: "Layer III",
|
|
1407
|
+
[framePadding]: 1,
|
|
1408
|
+
[modeExtension]: layer3ModeExtensions,
|
|
1409
|
+
[v1]: {
|
|
1410
|
+
[bitrateIndex]: v1Layer3,
|
|
1411
|
+
[samples]: 1152
|
|
1412
|
+
},
|
|
1413
|
+
[v2]: {
|
|
1414
|
+
[bitrateIndex]: v2Layer23,
|
|
1415
|
+
[samples]: 576
|
|
1416
|
+
}
|
|
1417
|
+
},
|
|
1418
|
+
4: {
|
|
1419
|
+
[description]: "Layer II",
|
|
1420
|
+
[framePadding]: 1,
|
|
1421
|
+
[modeExtension]: layer12ModeExtensions,
|
|
1422
|
+
[samples]: 1152,
|
|
1423
|
+
[v1]: {
|
|
1424
|
+
[bitrateIndex]: v1Layer2
|
|
1425
|
+
},
|
|
1426
|
+
[v2]: {
|
|
1427
|
+
[bitrateIndex]: v2Layer23
|
|
1428
|
+
}
|
|
1429
|
+
},
|
|
1430
|
+
6: {
|
|
1431
|
+
[description]: "Layer I",
|
|
1432
|
+
[framePadding]: 4,
|
|
1433
|
+
[modeExtension]: layer12ModeExtensions,
|
|
1434
|
+
[samples]: 384,
|
|
1435
|
+
[v1]: {
|
|
1436
|
+
[bitrateIndex]: v1Layer1
|
|
1437
|
+
},
|
|
1438
|
+
[v2]: {
|
|
1439
|
+
[bitrateIndex]: v2Layer1
|
|
1440
|
+
}
|
|
1441
|
+
}
|
|
1442
|
+
};
|
|
1443
|
+
var mpegVersionDescription = "MPEG Version ";
|
|
1444
|
+
var isoIec = "ISO/IEC ";
|
|
1445
|
+
var mpegVersions = {
|
|
1446
|
+
0: {
|
|
1447
|
+
[description]: `${mpegVersionDescription}2.5 (later extension of MPEG 2)`,
|
|
1448
|
+
[layer]: v2,
|
|
1449
|
+
[sampleRate]: {
|
|
1450
|
+
0: rate11025,
|
|
1451
|
+
4: rate12000,
|
|
1452
|
+
8: rate8000,
|
|
1453
|
+
12: reserved
|
|
1454
|
+
}
|
|
1455
|
+
},
|
|
1456
|
+
8: { [description]: reserved },
|
|
1457
|
+
16: {
|
|
1458
|
+
[description]: `${mpegVersionDescription}2 (${isoIec}13818-3)`,
|
|
1459
|
+
[layer]: v2,
|
|
1460
|
+
[sampleRate]: {
|
|
1461
|
+
0: rate22050,
|
|
1462
|
+
4: rate24000,
|
|
1463
|
+
8: rate16000,
|
|
1464
|
+
12: reserved
|
|
1465
|
+
}
|
|
1466
|
+
},
|
|
1467
|
+
24: {
|
|
1468
|
+
[description]: `${mpegVersionDescription}1 (${isoIec}11172-3)`,
|
|
1469
|
+
[layer]: v1,
|
|
1470
|
+
[sampleRate]: {
|
|
1471
|
+
0: rate44100,
|
|
1472
|
+
4: rate48000,
|
|
1473
|
+
8: rate32000,
|
|
1474
|
+
12: reserved
|
|
1475
|
+
}
|
|
1476
|
+
},
|
|
1477
|
+
length
|
|
1478
|
+
};
|
|
1479
|
+
var protectionValues = {
|
|
1480
|
+
0: sixteenBitCRC,
|
|
1481
|
+
1: none
|
|
1482
|
+
};
|
|
1483
|
+
var emphasisValues = {
|
|
1484
|
+
0: none,
|
|
1485
|
+
1: "50/15 ms",
|
|
1486
|
+
2: reserved,
|
|
1487
|
+
3: "CCIT J.17"
|
|
1488
|
+
};
|
|
1489
|
+
var channelModes = {
|
|
1490
|
+
0: { [channels]: 2, [description]: stereo },
|
|
1491
|
+
64: { [channels]: 2, [description]: "joint " + stereo },
|
|
1492
|
+
128: { [channels]: 2, [description]: "dual channel" },
|
|
1493
|
+
192: { [channels]: 1, [description]: monophonic }
|
|
1494
|
+
};
|
|
1495
|
+
var MPEGHeader = class _MPEGHeader extends CodecHeader {
|
|
1496
|
+
static *[getHeader](codecParser, headerCache, readOffset) {
|
|
1497
|
+
const header3 = {};
|
|
1498
|
+
const id3v2Header = yield* ID3v2.getID3v2Header(
|
|
1499
|
+
codecParser,
|
|
1500
|
+
headerCache,
|
|
1501
|
+
readOffset
|
|
1502
|
+
);
|
|
1503
|
+
if (id3v2Header) {
|
|
1504
|
+
yield* codecParser[readRawData](id3v2Header[length], readOffset);
|
|
1505
|
+
codecParser[incrementRawData](id3v2Header[length]);
|
|
1506
|
+
}
|
|
1507
|
+
const data3 = yield* codecParser[readRawData](4, readOffset);
|
|
1508
|
+
const key = bytesToString(data3[subarray](0, 4));
|
|
1509
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
1510
|
+
if (cachedHeader) return new _MPEGHeader(cachedHeader);
|
|
1511
|
+
if (data3[0] !== 255 || data3[1] < 224) return null;
|
|
1512
|
+
const mpegVersionValues2 = mpegVersions[data3[1] & 24];
|
|
1513
|
+
if (mpegVersionValues2[description] === reserved) return null;
|
|
1514
|
+
const layerBits = data3[1] & 6;
|
|
1515
|
+
if (layersValues[layerBits][description] === reserved) return null;
|
|
1516
|
+
const layerValues2 = {
|
|
1517
|
+
...layersValues[layerBits],
|
|
1518
|
+
...layersValues[layerBits][mpegVersionValues2[layer]]
|
|
1519
|
+
};
|
|
1520
|
+
header3[mpegVersion] = mpegVersionValues2[description];
|
|
1521
|
+
header3[layer] = layerValues2[description];
|
|
1522
|
+
header3[samples] = layerValues2[samples];
|
|
1523
|
+
header3[protection] = protectionValues[data3[1] & 1];
|
|
1524
|
+
header3[length] = 4;
|
|
1525
|
+
header3[bitrate] = bitrateMatrix[data3[2] & 240][layerValues2[bitrateIndex]];
|
|
1526
|
+
if (header3[bitrate] === bad) return null;
|
|
1527
|
+
header3[sampleRate] = mpegVersionValues2[sampleRate][data3[2] & 12];
|
|
1528
|
+
if (header3[sampleRate] === reserved) return null;
|
|
1529
|
+
header3[framePadding] = data3[2] & 2 && layerValues2[framePadding];
|
|
1530
|
+
header3[isPrivate] = !!(data3[2] & 1);
|
|
1531
|
+
header3[frameLength] = Math.floor(
|
|
1532
|
+
125 * header3[bitrate] * header3[samples] / header3[sampleRate] + header3[framePadding]
|
|
1533
|
+
);
|
|
1534
|
+
if (!header3[frameLength]) return null;
|
|
1535
|
+
const channelModeBits2 = data3[3] & 192;
|
|
1536
|
+
header3[channelMode] = channelModes[channelModeBits2][description];
|
|
1537
|
+
header3[channels] = channelModes[channelModeBits2][channels];
|
|
1538
|
+
header3[modeExtension] = layerValues2[modeExtension][data3[3] & 48];
|
|
1539
|
+
header3[isCopyrighted] = !!(data3[3] & 8);
|
|
1540
|
+
header3[isOriginal] = !!(data3[3] & 4);
|
|
1541
|
+
header3[emphasis] = emphasisValues[data3[3] & 3];
|
|
1542
|
+
if (header3[emphasis] === reserved) return null;
|
|
1543
|
+
header3[bitDepth] = 16;
|
|
1544
|
+
{
|
|
1545
|
+
const { length: length2, frameLength: frameLength2, samples: samples2, ...codecUpdateFields } = header3;
|
|
1546
|
+
headerCache[setHeader](key, header3, codecUpdateFields);
|
|
1547
|
+
}
|
|
1548
|
+
return new _MPEGHeader(header3);
|
|
1549
|
+
}
|
|
1550
|
+
/**
|
|
1551
|
+
* @private
|
|
1552
|
+
* Call MPEGHeader.getHeader(Array<Uint8>) to get instance
|
|
1553
|
+
*/
|
|
1554
|
+
constructor(header3) {
|
|
1555
|
+
super(header3);
|
|
1556
|
+
this[bitrate] = header3[bitrate];
|
|
1557
|
+
this[emphasis] = header3[emphasis];
|
|
1558
|
+
this[framePadding] = header3[framePadding];
|
|
1559
|
+
this[isCopyrighted] = header3[isCopyrighted];
|
|
1560
|
+
this[isOriginal] = header3[isOriginal];
|
|
1561
|
+
this[isPrivate] = header3[isPrivate];
|
|
1562
|
+
this[layer] = header3[layer];
|
|
1563
|
+
this[modeExtension] = header3[modeExtension];
|
|
1564
|
+
this[mpegVersion] = header3[mpegVersion];
|
|
1565
|
+
this[protection] = header3[protection];
|
|
1566
|
+
}
|
|
1567
|
+
};
|
|
1568
|
+
|
|
1569
|
+
// ../../node_modules/codec-parser/src/codecs/mpeg/MPEGFrame.js
|
|
1570
|
+
var MPEGFrame = class _MPEGFrame extends CodecFrame {
|
|
1571
|
+
static *[getFrame](codecParser, headerCache, readOffset) {
|
|
1572
|
+
return yield* super[getFrame](
|
|
1573
|
+
MPEGHeader,
|
|
1574
|
+
_MPEGFrame,
|
|
1575
|
+
codecParser,
|
|
1576
|
+
headerCache,
|
|
1577
|
+
readOffset
|
|
1578
|
+
);
|
|
1579
|
+
}
|
|
1580
|
+
constructor(header3, frame2, samples2) {
|
|
1581
|
+
super(header3, frame2, samples2);
|
|
1582
|
+
}
|
|
1583
|
+
};
|
|
1584
|
+
|
|
1585
|
+
// ../../node_modules/codec-parser/src/codecs/mpeg/MPEGParser.js
|
|
1586
|
+
var MPEGParser = class extends Parser {
|
|
1587
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
1588
|
+
super(codecParser, headerCache);
|
|
1589
|
+
this.Frame = MPEGFrame;
|
|
1590
|
+
this.Header = MPEGHeader;
|
|
1591
|
+
onCodec(this[codec]);
|
|
1592
|
+
}
|
|
1593
|
+
get [codec]() {
|
|
1594
|
+
return mpeg;
|
|
1595
|
+
}
|
|
1596
|
+
*[parseFrame]() {
|
|
1597
|
+
return yield* this[fixedLengthFrameSync]();
|
|
1598
|
+
}
|
|
1599
|
+
};
|
|
1600
|
+
|
|
1601
|
+
// ../../node_modules/codec-parser/src/codecs/aac/AACHeader.js
|
|
1602
|
+
var mpegVersionValues = {
|
|
1603
|
+
0: "MPEG-4",
|
|
1604
|
+
8: "MPEG-2"
|
|
1605
|
+
};
|
|
1606
|
+
var layerValues = {
|
|
1607
|
+
0: "valid",
|
|
1608
|
+
2: bad,
|
|
1609
|
+
4: bad,
|
|
1610
|
+
6: bad
|
|
1611
|
+
};
|
|
1612
|
+
var protectionValues2 = {
|
|
1613
|
+
0: sixteenBitCRC,
|
|
1614
|
+
1: none
|
|
1615
|
+
};
|
|
1616
|
+
var profileValues = {
|
|
1617
|
+
0: "AAC Main",
|
|
1618
|
+
64: "AAC LC (Low Complexity)",
|
|
1619
|
+
128: "AAC SSR (Scalable Sample Rate)",
|
|
1620
|
+
192: "AAC LTP (Long Term Prediction)"
|
|
1621
|
+
};
|
|
1622
|
+
var sampleRates = {
|
|
1623
|
+
0: rate96000,
|
|
1624
|
+
4: rate88200,
|
|
1625
|
+
8: rate64000,
|
|
1626
|
+
12: rate48000,
|
|
1627
|
+
16: rate44100,
|
|
1628
|
+
20: rate32000,
|
|
1629
|
+
24: rate24000,
|
|
1630
|
+
28: rate22050,
|
|
1631
|
+
32: rate16000,
|
|
1632
|
+
36: rate12000,
|
|
1633
|
+
40: rate11025,
|
|
1634
|
+
44: rate8000,
|
|
1635
|
+
48: rate7350,
|
|
1636
|
+
52: reserved,
|
|
1637
|
+
56: reserved,
|
|
1638
|
+
60: "frequency is written explicitly"
|
|
1639
|
+
};
|
|
1640
|
+
var channelModeValues = {
|
|
1641
|
+
0: { [channels]: 0, [description]: "Defined in AOT Specific Config" },
|
|
1642
|
+
/*
|
|
1643
|
+
'monophonic (mono)'
|
|
1644
|
+
'stereo (left, right)'
|
|
1645
|
+
'linear surround (front center, front left, front right)'
|
|
1646
|
+
'quadraphonic (front center, front left, front right, rear center)'
|
|
1647
|
+
'5.0 surround (front center, front left, front right, rear left, rear right)'
|
|
1648
|
+
'5.1 surround (front center, front left, front right, rear left, rear right, LFE)'
|
|
1649
|
+
'7.1 surround (front center, front left, front right, side left, side right, rear left, rear right, LFE)'
|
|
1650
|
+
*/
|
|
1651
|
+
64: { [channels]: 1, [description]: monophonic },
|
|
1652
|
+
128: { [channels]: 2, [description]: getChannelMapping(2, channelMappings[0][0]) },
|
|
1653
|
+
192: { [channels]: 3, [description]: getChannelMapping(3, channelMappings[1][3]) },
|
|
1654
|
+
256: { [channels]: 4, [description]: getChannelMapping(4, channelMappings[1][3], channelMappings[3][4]) },
|
|
1655
|
+
320: { [channels]: 5, [description]: getChannelMapping(5, channelMappings[1][3], channelMappings[3][0]) },
|
|
1656
|
+
384: { [channels]: 6, [description]: getChannelMapping(6, channelMappings[1][3], channelMappings[3][0], lfe) },
|
|
1657
|
+
448: { [channels]: 8, [description]: getChannelMapping(8, channelMappings[1][3], channelMappings[2][0], channelMappings[3][0], lfe) }
|
|
1658
|
+
};
|
|
1659
|
+
var AACHeader = class _AACHeader extends CodecHeader {
|
|
1660
|
+
static *[getHeader](codecParser, headerCache, readOffset) {
|
|
1661
|
+
const header3 = {};
|
|
1662
|
+
const data3 = yield* codecParser[readRawData](7, readOffset);
|
|
1663
|
+
const key = bytesToString([
|
|
1664
|
+
data3[0],
|
|
1665
|
+
data3[1],
|
|
1666
|
+
data3[2],
|
|
1667
|
+
data3[3] & 252 | data3[6] & 3
|
|
1668
|
+
// frame length, buffer fullness varies so don't cache it
|
|
1669
|
+
]);
|
|
1670
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
1671
|
+
if (!cachedHeader) {
|
|
1672
|
+
if (data3[0] !== 255 || data3[1] < 240) return null;
|
|
1673
|
+
header3[mpegVersion] = mpegVersionValues[data3[1] & 8];
|
|
1674
|
+
header3[layer] = layerValues[data3[1] & 6];
|
|
1675
|
+
if (header3[layer] === bad) return null;
|
|
1676
|
+
const protectionBit = data3[1] & 1;
|
|
1677
|
+
header3[protection] = protectionValues2[protectionBit];
|
|
1678
|
+
header3[length] = protectionBit ? 7 : 9;
|
|
1679
|
+
header3[profileBits] = data3[2] & 192;
|
|
1680
|
+
header3[sampleRateBits] = data3[2] & 60;
|
|
1681
|
+
const privateBit = data3[2] & 2;
|
|
1682
|
+
header3[profile] = profileValues[header3[profileBits]];
|
|
1683
|
+
header3[sampleRate] = sampleRates[header3[sampleRateBits]];
|
|
1684
|
+
if (header3[sampleRate] === reserved) return null;
|
|
1685
|
+
header3[isPrivate] = !!privateBit;
|
|
1686
|
+
header3[channelModeBits] = (data3[2] << 8 | data3[3]) & 448;
|
|
1687
|
+
header3[channelMode] = channelModeValues[header3[channelModeBits]][description];
|
|
1688
|
+
header3[channels] = channelModeValues[header3[channelModeBits]][channels];
|
|
1689
|
+
header3[isOriginal] = !!(data3[3] & 32);
|
|
1690
|
+
header3[isHome] = !!(data3[3] & 8);
|
|
1691
|
+
header3[copyrightId] = !!(data3[3] & 8);
|
|
1692
|
+
header3[copyrightIdStart] = !!(data3[3] & 4);
|
|
1693
|
+
header3[bitDepth] = 16;
|
|
1694
|
+
header3[samples] = 1024;
|
|
1695
|
+
header3[numberAACFrames] = data3[6] & 3;
|
|
1696
|
+
{
|
|
1697
|
+
const {
|
|
1698
|
+
length: length2,
|
|
1699
|
+
channelModeBits: channelModeBits2,
|
|
1700
|
+
profileBits: profileBits2,
|
|
1701
|
+
sampleRateBits: sampleRateBits2,
|
|
1702
|
+
frameLength: frameLength2,
|
|
1703
|
+
samples: samples2,
|
|
1704
|
+
numberAACFrames: numberAACFrames2,
|
|
1705
|
+
...codecUpdateFields
|
|
1706
|
+
} = header3;
|
|
1707
|
+
headerCache[setHeader](key, header3, codecUpdateFields);
|
|
1708
|
+
}
|
|
1709
|
+
} else {
|
|
1710
|
+
Object.assign(header3, cachedHeader);
|
|
1711
|
+
}
|
|
1712
|
+
header3[frameLength] = (data3[3] << 11 | data3[4] << 3 | data3[5] >> 5) & 8191;
|
|
1713
|
+
if (!header3[frameLength]) return null;
|
|
1714
|
+
const bufferFullnessBits = (data3[5] << 6 | data3[6] >> 2) & 2047;
|
|
1715
|
+
header3[bufferFullness] = bufferFullnessBits === 2047 ? "VBR" : bufferFullnessBits;
|
|
1716
|
+
return new _AACHeader(header3);
|
|
1717
|
+
}
|
|
1718
|
+
/**
|
|
1719
|
+
* @private
|
|
1720
|
+
* Call AACHeader.getHeader(Array<Uint8>) to get instance
|
|
1721
|
+
*/
|
|
1722
|
+
constructor(header3) {
|
|
1723
|
+
super(header3);
|
|
1724
|
+
this[copyrightId] = header3[copyrightId];
|
|
1725
|
+
this[copyrightIdStart] = header3[copyrightIdStart];
|
|
1726
|
+
this[bufferFullness] = header3[bufferFullness];
|
|
1727
|
+
this[isHome] = header3[isHome];
|
|
1728
|
+
this[isOriginal] = header3[isOriginal];
|
|
1729
|
+
this[isPrivate] = header3[isPrivate];
|
|
1730
|
+
this[layer] = header3[layer];
|
|
1731
|
+
this[length] = header3[length];
|
|
1732
|
+
this[mpegVersion] = header3[mpegVersion];
|
|
1733
|
+
this[numberAACFrames] = header3[numberAACFrames];
|
|
1734
|
+
this[profile] = header3[profile];
|
|
1735
|
+
this[protection] = header3[protection];
|
|
1736
|
+
}
|
|
1737
|
+
get audioSpecificConfig() {
|
|
1738
|
+
const header3 = headerStore.get(this);
|
|
1739
|
+
const audioSpecificConfig = header3[profileBits] + 64 << 5 | header3[sampleRateBits] << 5 | header3[channelModeBits] >> 3;
|
|
1740
|
+
const bytes = new uint8Array(2);
|
|
1741
|
+
new dataView(bytes[buffer]).setUint16(0, audioSpecificConfig, false);
|
|
1742
|
+
return bytes;
|
|
1743
|
+
}
|
|
1744
|
+
};
|
|
1745
|
+
|
|
1746
|
+
// ../../node_modules/codec-parser/src/codecs/aac/AACFrame.js
|
|
1747
|
+
var AACFrame = class _AACFrame extends CodecFrame {
|
|
1748
|
+
static *[getFrame](codecParser, headerCache, readOffset) {
|
|
1749
|
+
return yield* super[getFrame](
|
|
1750
|
+
AACHeader,
|
|
1751
|
+
_AACFrame,
|
|
1752
|
+
codecParser,
|
|
1753
|
+
headerCache,
|
|
1754
|
+
readOffset
|
|
1755
|
+
);
|
|
1756
|
+
}
|
|
1757
|
+
constructor(header3, frame2, samples2) {
|
|
1758
|
+
super(header3, frame2, samples2);
|
|
1759
|
+
}
|
|
1760
|
+
};
|
|
1761
|
+
|
|
1762
|
+
// ../../node_modules/codec-parser/src/codecs/aac/AACParser.js
|
|
1763
|
+
var AACParser = class extends Parser {
|
|
1764
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
1765
|
+
super(codecParser, headerCache);
|
|
1766
|
+
this.Frame = AACFrame;
|
|
1767
|
+
this.Header = AACHeader;
|
|
1768
|
+
onCodec(this[codec]);
|
|
1769
|
+
}
|
|
1770
|
+
get [codec]() {
|
|
1771
|
+
return "aac";
|
|
1772
|
+
}
|
|
1773
|
+
*[parseFrame]() {
|
|
1774
|
+
return yield* this[fixedLengthFrameSync]();
|
|
1775
|
+
}
|
|
1776
|
+
};
|
|
1777
|
+
|
|
1778
|
+
// ../../node_modules/codec-parser/src/codecs/flac/FLACFrame.js
|
|
1779
|
+
var FLACFrame = class _FLACFrame extends CodecFrame {
|
|
1780
|
+
static _getFrameFooterCrc16(data3) {
|
|
1781
|
+
return (data3[data3[length] - 2] << 8) + data3[data3[length] - 1];
|
|
1782
|
+
}
|
|
1783
|
+
// check frame footer crc
|
|
1784
|
+
// https://xiph.org/flac/format.html#frame_footer
|
|
1785
|
+
static [checkFrameFooterCrc16](data3) {
|
|
1786
|
+
const expectedCrc16 = _FLACFrame._getFrameFooterCrc16(data3);
|
|
1787
|
+
const actualCrc16 = flacCrc16(data3[subarray](0, -2));
|
|
1788
|
+
return expectedCrc16 === actualCrc16;
|
|
1789
|
+
}
|
|
1790
|
+
constructor(data3, header3, streamInfoValue) {
|
|
1791
|
+
header3[streamInfo] = streamInfoValue;
|
|
1792
|
+
header3[crc16] = _FLACFrame._getFrameFooterCrc16(data3);
|
|
1793
|
+
super(header3, data3, headerStore.get(header3)[samples]);
|
|
1794
|
+
}
|
|
1795
|
+
};
|
|
1796
|
+
|
|
1797
|
+
// ../../node_modules/codec-parser/src/codecs/flac/FLACHeader.js
|
|
1798
|
+
var getFromStreamInfo = "get from STREAMINFO metadata block";
|
|
1799
|
+
var blockingStrategyValues = {
|
|
1800
|
+
0: "Fixed",
|
|
1801
|
+
1: "Variable"
|
|
1802
|
+
};
|
|
1803
|
+
var blockSizeValues = {
|
|
1804
|
+
0: reserved,
|
|
1805
|
+
16: 192
|
|
1806
|
+
// 0b00100000: 576,
|
|
1807
|
+
// 0b00110000: 1152,
|
|
1808
|
+
// 0b01000000: 2304,
|
|
1809
|
+
// 0b01010000: 4608,
|
|
1810
|
+
// 0b01100000: "8-bit (blocksize-1) from end of header",
|
|
1811
|
+
// 0b01110000: "16-bit (blocksize-1) from end of header",
|
|
1812
|
+
// 0b10000000: 256,
|
|
1813
|
+
// 0b10010000: 512,
|
|
1814
|
+
// 0b10100000: 1024,
|
|
1815
|
+
// 0b10110000: 2048,
|
|
1816
|
+
// 0b11000000: 4096,
|
|
1817
|
+
// 0b11010000: 8192,
|
|
1818
|
+
// 0b11100000: 16384,
|
|
1819
|
+
// 0b11110000: 32768,
|
|
1820
|
+
};
|
|
1821
|
+
for (let i = 2; i < 16; i++)
|
|
1822
|
+
blockSizeValues[i << 4] = i < 6 ? 576 * 2 ** (i - 2) : 2 ** i;
|
|
1823
|
+
var sampleRateValues = {
|
|
1824
|
+
0: getFromStreamInfo,
|
|
1825
|
+
1: rate88200,
|
|
1826
|
+
2: rate176400,
|
|
1827
|
+
3: rate192000,
|
|
1828
|
+
4: rate8000,
|
|
1829
|
+
5: rate16000,
|
|
1830
|
+
6: rate22050,
|
|
1831
|
+
7: rate24000,
|
|
1832
|
+
8: rate32000,
|
|
1833
|
+
9: rate44100,
|
|
1834
|
+
10: rate48000,
|
|
1835
|
+
11: rate96000,
|
|
1836
|
+
// 0b00001100: "8-bit sample rate (in kHz) from end of header",
|
|
1837
|
+
// 0b00001101: "16-bit sample rate (in Hz) from end of header",
|
|
1838
|
+
// 0b00001110: "16-bit sample rate (in tens of Hz) from end of header",
|
|
1839
|
+
15: bad
|
|
1840
|
+
};
|
|
1841
|
+
var channelAssignments = {
|
|
1842
|
+
/*'
|
|
1843
|
+
'monophonic (mono)'
|
|
1844
|
+
'stereo (left, right)'
|
|
1845
|
+
'linear surround (left, right, center)'
|
|
1846
|
+
'quadraphonic (front left, front right, rear left, rear right)'
|
|
1847
|
+
'5.0 surround (front left, front right, front center, rear left, rear right)'
|
|
1848
|
+
'5.1 surround (front left, front right, front center, LFE, rear left, rear right)'
|
|
1849
|
+
'6.1 surround (front left, front right, front center, LFE, rear center, side left, side right)'
|
|
1850
|
+
'7.1 surround (front left, front right, front center, LFE, rear left, rear right, side left, side right)'
|
|
1851
|
+
*/
|
|
1852
|
+
0: { [channels]: 1, [description]: monophonic },
|
|
1853
|
+
16: { [channels]: 2, [description]: getChannelMapping(2, channelMappings[0][0]) },
|
|
1854
|
+
32: { [channels]: 3, [description]: getChannelMapping(3, channelMappings[0][1]) },
|
|
1855
|
+
48: { [channels]: 4, [description]: getChannelMapping(4, channelMappings[1][0], channelMappings[3][0]) },
|
|
1856
|
+
64: { [channels]: 5, [description]: getChannelMapping(5, channelMappings[1][1], channelMappings[3][0]) },
|
|
1857
|
+
80: { [channels]: 6, [description]: getChannelMapping(6, channelMappings[1][1], lfe, channelMappings[3][0]) },
|
|
1858
|
+
96: { [channels]: 7, [description]: getChannelMapping(7, channelMappings[1][1], lfe, channelMappings[3][4], channelMappings[2][0]) },
|
|
1859
|
+
112: { [channels]: 8, [description]: getChannelMapping(8, channelMappings[1][1], lfe, channelMappings[3][0], channelMappings[2][0]) },
|
|
1860
|
+
128: { [channels]: 2, [description]: `${stereo} (left, diff)` },
|
|
1861
|
+
144: { [channels]: 2, [description]: `${stereo} (diff, right)` },
|
|
1862
|
+
160: { [channels]: 2, [description]: `${stereo} (avg, diff)` },
|
|
1863
|
+
176: reserved,
|
|
1864
|
+
192: reserved,
|
|
1865
|
+
208: reserved,
|
|
1866
|
+
224: reserved,
|
|
1867
|
+
240: reserved
|
|
1868
|
+
};
|
|
1869
|
+
var bitDepthValues = {
|
|
1870
|
+
0: getFromStreamInfo,
|
|
1871
|
+
2: 8,
|
|
1872
|
+
4: 12,
|
|
1873
|
+
6: reserved,
|
|
1874
|
+
8: 16,
|
|
1875
|
+
10: 20,
|
|
1876
|
+
12: 24,
|
|
1877
|
+
14: reserved
|
|
1878
|
+
};
|
|
1879
|
+
var FLACHeader = class _FLACHeader extends CodecHeader {
|
|
1880
|
+
// https://datatracker.ietf.org/doc/html/rfc3629#section-3
|
|
1881
|
+
// Char. number range | UTF-8 octet sequence
|
|
1882
|
+
// (hexadecimal) | (binary)
|
|
1883
|
+
// --------------------+---------------------------------------------
|
|
1884
|
+
// 0000 0000-0000 007F | 0xxxxxxx
|
|
1885
|
+
// 0000 0080-0000 07FF | 110xxxxx 10xxxxxx
|
|
1886
|
+
// 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
|
|
1887
|
+
// 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
|
|
1888
|
+
static _decodeUTF8Int(data3) {
|
|
1889
|
+
if (data3[0] > 254) {
|
|
1890
|
+
return null;
|
|
1891
|
+
}
|
|
1892
|
+
if (data3[0] < 128) return { value: data3[0], length: 1 };
|
|
1893
|
+
let length2 = 1;
|
|
1894
|
+
for (let zeroMask = 64; zeroMask & data3[0]; zeroMask >>= 1) length2++;
|
|
1895
|
+
let idx = length2 - 1, value = 0, shift = 0;
|
|
1896
|
+
for (; idx > 0; shift += 6, idx--) {
|
|
1897
|
+
if ((data3[idx] & 192) !== 128) {
|
|
1898
|
+
return null;
|
|
1899
|
+
}
|
|
1900
|
+
value |= (data3[idx] & 63) << shift;
|
|
1901
|
+
}
|
|
1902
|
+
value |= (data3[idx] & 127 >> length2) << shift;
|
|
1903
|
+
return { value, length: length2 };
|
|
1904
|
+
}
|
|
1905
|
+
static [getHeaderFromUint8Array](data3, headerCache) {
|
|
1906
|
+
const codecParserStub = {
|
|
1907
|
+
[readRawData]: function* () {
|
|
1908
|
+
return data3;
|
|
1909
|
+
}
|
|
1910
|
+
};
|
|
1911
|
+
return _FLACHeader[getHeader](codecParserStub, headerCache, 0).next().value;
|
|
1912
|
+
}
|
|
1913
|
+
static *[getHeader](codecParser, headerCache, readOffset) {
|
|
1914
|
+
let data3 = yield* codecParser[readRawData](6, readOffset);
|
|
1915
|
+
if (data3[0] !== 255 || !(data3[1] === 248 || data3[1] === 249)) {
|
|
1916
|
+
return null;
|
|
1917
|
+
}
|
|
1918
|
+
const header3 = {};
|
|
1919
|
+
const key = bytesToString(data3[subarray](0, 4));
|
|
1920
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
1921
|
+
if (!cachedHeader) {
|
|
1922
|
+
header3[blockingStrategyBits] = data3[1] & 1;
|
|
1923
|
+
header3[blockingStrategy] = blockingStrategyValues[header3[blockingStrategyBits]];
|
|
1924
|
+
header3[blockSizeBits] = data3[2] & 240;
|
|
1925
|
+
header3[sampleRateBits] = data3[2] & 15;
|
|
1926
|
+
header3[blockSize] = blockSizeValues[header3[blockSizeBits]];
|
|
1927
|
+
if (header3[blockSize] === reserved) {
|
|
1928
|
+
return null;
|
|
1929
|
+
}
|
|
1930
|
+
header3[sampleRate] = sampleRateValues[header3[sampleRateBits]];
|
|
1931
|
+
if (header3[sampleRate] === bad) {
|
|
1932
|
+
return null;
|
|
1933
|
+
}
|
|
1934
|
+
if (data3[3] & 1) {
|
|
1935
|
+
return null;
|
|
1936
|
+
}
|
|
1937
|
+
const channelAssignment = channelAssignments[data3[3] & 240];
|
|
1938
|
+
if (channelAssignment === reserved) {
|
|
1939
|
+
return null;
|
|
1940
|
+
}
|
|
1941
|
+
header3[channels] = channelAssignment[channels];
|
|
1942
|
+
header3[channelMode] = channelAssignment[description];
|
|
1943
|
+
header3[bitDepth] = bitDepthValues[data3[3] & 14];
|
|
1944
|
+
if (header3[bitDepth] === reserved) {
|
|
1945
|
+
return null;
|
|
1946
|
+
}
|
|
1947
|
+
} else {
|
|
1948
|
+
Object.assign(header3, cachedHeader);
|
|
1949
|
+
}
|
|
1950
|
+
header3[length] = 5;
|
|
1951
|
+
data3 = yield* codecParser[readRawData](header3[length] + 8, readOffset);
|
|
1952
|
+
const decodedUtf8 = _FLACHeader._decodeUTF8Int(data3[subarray](4));
|
|
1953
|
+
if (!decodedUtf8) {
|
|
1954
|
+
return null;
|
|
1955
|
+
}
|
|
1956
|
+
if (header3[blockingStrategyBits]) {
|
|
1957
|
+
header3[sampleNumber] = decodedUtf8.value;
|
|
1958
|
+
} else {
|
|
1959
|
+
header3[frameNumber] = decodedUtf8.value;
|
|
1960
|
+
}
|
|
1961
|
+
header3[length] += decodedUtf8[length];
|
|
1962
|
+
if (header3[blockSizeBits] === 96) {
|
|
1963
|
+
if (data3[length] < header3[length])
|
|
1964
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1965
|
+
header3[blockSize] = data3[header3[length] - 1] + 1;
|
|
1966
|
+
header3[length] += 1;
|
|
1967
|
+
} else if (header3[blockSizeBits] === 112) {
|
|
1968
|
+
if (data3[length] < header3[length])
|
|
1969
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1970
|
+
header3[blockSize] = (data3[header3[length] - 1] << 8) + data3[header3[length]] + 1;
|
|
1971
|
+
header3[length] += 2;
|
|
1972
|
+
}
|
|
1973
|
+
header3[samples] = header3[blockSize];
|
|
1974
|
+
if (header3[sampleRateBits] === 12) {
|
|
1975
|
+
if (data3[length] < header3[length])
|
|
1976
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1977
|
+
header3[sampleRate] = data3[header3[length] - 1] * 1e3;
|
|
1978
|
+
header3[length] += 1;
|
|
1979
|
+
} else if (header3[sampleRateBits] === 13) {
|
|
1980
|
+
if (data3[length] < header3[length])
|
|
1981
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1982
|
+
header3[sampleRate] = (data3[header3[length] - 1] << 8) + data3[header3[length]];
|
|
1983
|
+
header3[length] += 2;
|
|
1984
|
+
} else if (header3[sampleRateBits] === 14) {
|
|
1985
|
+
if (data3[length] < header3[length])
|
|
1986
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1987
|
+
header3[sampleRate] = ((data3[header3[length] - 1] << 8) + data3[header3[length]]) * 10;
|
|
1988
|
+
header3[length] += 2;
|
|
1989
|
+
}
|
|
1990
|
+
if (data3[length] < header3[length])
|
|
1991
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
1992
|
+
header3[crc] = data3[header3[length] - 1];
|
|
1993
|
+
if (header3[crc] !== crc8(data3[subarray](0, header3[length] - 1))) {
|
|
1994
|
+
return null;
|
|
1995
|
+
}
|
|
1996
|
+
{
|
|
1997
|
+
if (!cachedHeader) {
|
|
1998
|
+
const {
|
|
1999
|
+
blockingStrategyBits: blockingStrategyBits2,
|
|
2000
|
+
frameNumber: frameNumber2,
|
|
2001
|
+
sampleNumber: sampleNumber2,
|
|
2002
|
+
samples: samples2,
|
|
2003
|
+
sampleRateBits: sampleRateBits2,
|
|
2004
|
+
blockSizeBits: blockSizeBits2,
|
|
2005
|
+
crc: crc2,
|
|
2006
|
+
length: length2,
|
|
2007
|
+
...codecUpdateFields
|
|
2008
|
+
} = header3;
|
|
2009
|
+
headerCache[setHeader](key, header3, codecUpdateFields);
|
|
2010
|
+
}
|
|
2011
|
+
}
|
|
2012
|
+
return new _FLACHeader(header3);
|
|
2013
|
+
}
|
|
2014
|
+
/**
|
|
2015
|
+
* @private
|
|
2016
|
+
* Call FLACHeader.getHeader(Array<Uint8>) to get instance
|
|
2017
|
+
*/
|
|
2018
|
+
constructor(header3) {
|
|
2019
|
+
super(header3);
|
|
2020
|
+
this[crc16] = null;
|
|
2021
|
+
this[blockingStrategy] = header3[blockingStrategy];
|
|
2022
|
+
this[blockSize] = header3[blockSize];
|
|
2023
|
+
this[frameNumber] = header3[frameNumber];
|
|
2024
|
+
this[sampleNumber] = header3[sampleNumber];
|
|
2025
|
+
this[streamInfo] = null;
|
|
2026
|
+
}
|
|
2027
|
+
};
|
|
2028
|
+
|
|
2029
|
+
// ../../node_modules/codec-parser/src/codecs/flac/FLACParser.js
|
|
2030
|
+
var MIN_FLAC_FRAME_SIZE = 2;
|
|
2031
|
+
var MAX_FLAC_FRAME_SIZE = 512 * 1024;
|
|
2032
|
+
var FLACParser = class extends Parser {
|
|
2033
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
2034
|
+
super(codecParser, headerCache);
|
|
2035
|
+
this.Frame = FLACFrame;
|
|
2036
|
+
this.Header = FLACHeader;
|
|
2037
|
+
onCodec(this[codec]);
|
|
2038
|
+
}
|
|
2039
|
+
get [codec]() {
|
|
2040
|
+
return "flac";
|
|
2041
|
+
}
|
|
2042
|
+
*_getNextFrameSyncOffset(offset) {
|
|
2043
|
+
const data3 = yield* this._codecParser[readRawData](2, 0);
|
|
2044
|
+
const dataLength = data3[length] - 2;
|
|
2045
|
+
while (offset < dataLength) {
|
|
2046
|
+
const firstByte = data3[offset];
|
|
2047
|
+
if (firstByte === 255) {
|
|
2048
|
+
const secondByte = data3[offset + 1];
|
|
2049
|
+
if (secondByte === 248 || secondByte === 249) break;
|
|
2050
|
+
if (secondByte !== 255) offset++;
|
|
2051
|
+
}
|
|
2052
|
+
offset++;
|
|
2053
|
+
}
|
|
2054
|
+
return offset;
|
|
2055
|
+
}
|
|
2056
|
+
*[parseFrame]() {
|
|
2057
|
+
do {
|
|
2058
|
+
const header3 = yield* FLACHeader[getHeader](
|
|
2059
|
+
this._codecParser,
|
|
2060
|
+
this._headerCache,
|
|
2061
|
+
0
|
|
2062
|
+
);
|
|
2063
|
+
if (header3) {
|
|
2064
|
+
let nextHeaderOffset = headerStore.get(header3)[length] + MIN_FLAC_FRAME_SIZE;
|
|
2065
|
+
while (nextHeaderOffset <= MAX_FLAC_FRAME_SIZE) {
|
|
2066
|
+
if (this._codecParser._flushing || (yield* FLACHeader[getHeader](
|
|
2067
|
+
this._codecParser,
|
|
2068
|
+
this._headerCache,
|
|
2069
|
+
nextHeaderOffset
|
|
2070
|
+
))) {
|
|
2071
|
+
let frameData = yield* this._codecParser[readRawData](nextHeaderOffset);
|
|
2072
|
+
if (!this._codecParser._flushing)
|
|
2073
|
+
frameData = frameData[subarray](0, nextHeaderOffset);
|
|
2074
|
+
if (FLACFrame[checkFrameFooterCrc16](frameData)) {
|
|
2075
|
+
const frame2 = new FLACFrame(frameData, header3);
|
|
2076
|
+
this._headerCache[enable]();
|
|
2077
|
+
this._codecParser[incrementRawData](nextHeaderOffset);
|
|
2078
|
+
this._codecParser[mapFrameStats](frame2);
|
|
2079
|
+
return frame2;
|
|
2080
|
+
}
|
|
2081
|
+
}
|
|
2082
|
+
nextHeaderOffset = yield* this._getNextFrameSyncOffset(
|
|
2083
|
+
nextHeaderOffset + 1
|
|
2084
|
+
);
|
|
2085
|
+
}
|
|
2086
|
+
this._codecParser[logWarning](
|
|
2087
|
+
`Unable to sync FLAC frame after searching ${nextHeaderOffset} bytes.`
|
|
2088
|
+
);
|
|
2089
|
+
this._codecParser[incrementRawData](nextHeaderOffset);
|
|
2090
|
+
} else {
|
|
2091
|
+
this._codecParser[incrementRawData](
|
|
2092
|
+
yield* this._getNextFrameSyncOffset(1)
|
|
2093
|
+
);
|
|
2094
|
+
}
|
|
2095
|
+
} while (true);
|
|
2096
|
+
}
|
|
2097
|
+
[parseOggPage](oggPage) {
|
|
2098
|
+
if (oggPage[pageSequenceNumber] === 0) {
|
|
2099
|
+
this._headerCache[enable]();
|
|
2100
|
+
this._streamInfo = oggPage[data][subarray](13);
|
|
2101
|
+
} else if (oggPage[pageSequenceNumber] === 1) {
|
|
2102
|
+
} else {
|
|
2103
|
+
oggPage[codecFrames] = frameStore.get(oggPage)[segments].map((segment) => {
|
|
2104
|
+
const header3 = FLACHeader[getHeaderFromUint8Array](
|
|
2105
|
+
segment,
|
|
2106
|
+
this._headerCache
|
|
2107
|
+
);
|
|
2108
|
+
if (header3) {
|
|
2109
|
+
return new FLACFrame(segment, header3, this._streamInfo);
|
|
2110
|
+
} else {
|
|
2111
|
+
this._codecParser[logWarning](
|
|
2112
|
+
"Failed to parse Ogg FLAC frame",
|
|
2113
|
+
"Skipping invalid FLAC frame"
|
|
2114
|
+
);
|
|
2115
|
+
}
|
|
2116
|
+
}).filter((frame2) => !!frame2);
|
|
2117
|
+
}
|
|
2118
|
+
return oggPage;
|
|
2119
|
+
}
|
|
2120
|
+
};
|
|
2121
|
+
|
|
2122
|
+
// ../../node_modules/codec-parser/src/containers/ogg/OggPageHeader.js
|
|
2123
|
+
var OggPageHeader = class _OggPageHeader {
|
|
2124
|
+
static *[getHeader](codecParser, headerCache, readOffset) {
|
|
2125
|
+
const header3 = {};
|
|
2126
|
+
let data3 = yield* codecParser[readRawData](28, readOffset);
|
|
2127
|
+
if (data3[0] !== 79 || // O
|
|
2128
|
+
data3[1] !== 103 || // g
|
|
2129
|
+
data3[2] !== 103 || // g
|
|
2130
|
+
data3[3] !== 83) {
|
|
2131
|
+
return null;
|
|
2132
|
+
}
|
|
2133
|
+
header3[streamStructureVersion] = data3[4];
|
|
2134
|
+
const zeros = data3[5] & 248;
|
|
2135
|
+
if (zeros) return null;
|
|
2136
|
+
header3[isLastPage] = !!(data3[5] & 4);
|
|
2137
|
+
header3[isFirstPage] = !!(data3[5] & 2);
|
|
2138
|
+
header3[isContinuedPacket] = !!(data3[5] & 1);
|
|
2139
|
+
const view = new dataView(uint8Array.from(data3[subarray](0, 28))[buffer]);
|
|
2140
|
+
header3[absoluteGranulePosition] = readInt64le(view, 6);
|
|
2141
|
+
header3[streamSerialNumber] = view.getInt32(14, true);
|
|
2142
|
+
header3[pageSequenceNumber] = view.getInt32(18, true);
|
|
2143
|
+
header3[pageChecksum] = view.getInt32(22, true);
|
|
2144
|
+
const pageSegmentTableLength = data3[26];
|
|
2145
|
+
header3[length] = pageSegmentTableLength + 27;
|
|
2146
|
+
data3 = yield* codecParser[readRawData](header3[length], readOffset);
|
|
2147
|
+
header3[frameLength] = 0;
|
|
2148
|
+
header3[pageSegmentTable] = [];
|
|
2149
|
+
header3[pageSegmentBytes] = uint8Array.from(
|
|
2150
|
+
data3[subarray](27, header3[length])
|
|
2151
|
+
);
|
|
2152
|
+
for (let i = 0, segmentLength = 0; i < pageSegmentTableLength; i++) {
|
|
2153
|
+
const segmentByte = header3[pageSegmentBytes][i];
|
|
2154
|
+
header3[frameLength] += segmentByte;
|
|
2155
|
+
segmentLength += segmentByte;
|
|
2156
|
+
if (segmentByte !== 255 || i === pageSegmentTableLength - 1) {
|
|
2157
|
+
header3[pageSegmentTable].push(segmentLength);
|
|
2158
|
+
segmentLength = 0;
|
|
2159
|
+
}
|
|
2160
|
+
}
|
|
2161
|
+
return new _OggPageHeader(header3);
|
|
2162
|
+
}
|
|
2163
|
+
/**
|
|
2164
|
+
* @private
|
|
2165
|
+
* Call OggPageHeader.getHeader(Array<Uint8>) to get instance
|
|
2166
|
+
*/
|
|
2167
|
+
constructor(header3) {
|
|
2168
|
+
headerStore.set(this, header3);
|
|
2169
|
+
this[absoluteGranulePosition] = header3[absoluteGranulePosition];
|
|
2170
|
+
this[isContinuedPacket] = header3[isContinuedPacket];
|
|
2171
|
+
this[isFirstPage] = header3[isFirstPage];
|
|
2172
|
+
this[isLastPage] = header3[isLastPage];
|
|
2173
|
+
this[pageSegmentTable] = header3[pageSegmentTable];
|
|
2174
|
+
this[pageSequenceNumber] = header3[pageSequenceNumber];
|
|
2175
|
+
this[pageChecksum] = header3[pageChecksum];
|
|
2176
|
+
this[streamSerialNumber] = header3[streamSerialNumber];
|
|
2177
|
+
}
|
|
2178
|
+
};
|
|
2179
|
+
|
|
2180
|
+
// ../../node_modules/codec-parser/src/containers/ogg/OggPage.js
|
|
2181
|
+
var OggPage = class _OggPage extends Frame {
|
|
2182
|
+
static *[getFrame](codecParser, headerCache, readOffset) {
|
|
2183
|
+
const header3 = yield* OggPageHeader[getHeader](
|
|
2184
|
+
codecParser,
|
|
2185
|
+
headerCache,
|
|
2186
|
+
readOffset
|
|
2187
|
+
);
|
|
2188
|
+
if (header3) {
|
|
2189
|
+
const frameLengthValue = headerStore.get(header3)[frameLength];
|
|
2190
|
+
const headerLength = headerStore.get(header3)[length];
|
|
2191
|
+
const totalLength = headerLength + frameLengthValue;
|
|
2192
|
+
const rawDataValue = (yield* codecParser[readRawData](totalLength, 0))[subarray](0, totalLength);
|
|
2193
|
+
const frame2 = rawDataValue[subarray](headerLength, totalLength);
|
|
2194
|
+
return new _OggPage(header3, frame2, rawDataValue);
|
|
2195
|
+
} else {
|
|
2196
|
+
return null;
|
|
2197
|
+
}
|
|
2198
|
+
}
|
|
2199
|
+
constructor(header3, frame2, rawDataValue) {
|
|
2200
|
+
super(header3, frame2);
|
|
2201
|
+
frameStore.get(this)[length] = rawDataValue[length];
|
|
2202
|
+
this[codecFrames] = [];
|
|
2203
|
+
this[rawData] = rawDataValue;
|
|
2204
|
+
this[absoluteGranulePosition] = header3[absoluteGranulePosition];
|
|
2205
|
+
this[crc32] = header3[pageChecksum];
|
|
2206
|
+
this[duration] = 0;
|
|
2207
|
+
this[isContinuedPacket] = header3[isContinuedPacket];
|
|
2208
|
+
this[isFirstPage] = header3[isFirstPage];
|
|
2209
|
+
this[isLastPage] = header3[isLastPage];
|
|
2210
|
+
this[pageSequenceNumber] = header3[pageSequenceNumber];
|
|
2211
|
+
this[samples] = 0;
|
|
2212
|
+
this[streamSerialNumber] = header3[streamSerialNumber];
|
|
2213
|
+
}
|
|
2214
|
+
};
|
|
2215
|
+
|
|
2216
|
+
// ../../node_modules/codec-parser/src/codecs/opus/OpusFrame.js
|
|
2217
|
+
var OpusFrame = class extends CodecFrame {
|
|
2218
|
+
constructor(data3, header3, samples2) {
|
|
2219
|
+
super(header3, data3, samples2);
|
|
2220
|
+
}
|
|
2221
|
+
};
|
|
2222
|
+
|
|
2223
|
+
// ../../node_modules/codec-parser/src/codecs/opus/OpusHeader.js
|
|
2224
|
+
var channelMappingFamilies = {
|
|
2225
|
+
0: vorbisOpusChannelMapping.slice(0, 2),
|
|
2226
|
+
/*
|
|
2227
|
+
0: "monophonic (mono)"
|
|
2228
|
+
1: "stereo (left, right)"
|
|
2229
|
+
*/
|
|
2230
|
+
1: vorbisOpusChannelMapping
|
|
2231
|
+
/*
|
|
2232
|
+
0: "monophonic (mono)"
|
|
2233
|
+
1: "stereo (left, right)"
|
|
2234
|
+
2: "linear surround (left, center, right)"
|
|
2235
|
+
3: "quadraphonic (front left, front right, rear left, rear right)"
|
|
2236
|
+
4: "5.0 surround (front left, front center, front right, rear left, rear right)"
|
|
2237
|
+
5: "5.1 surround (front left, front center, front right, rear left, rear right, LFE)"
|
|
2238
|
+
6: "6.1 surround (front left, front center, front right, side left, side right, rear center, LFE)"
|
|
2239
|
+
7: "7.1 surround (front left, front center, front right, side left, side right, rear left, rear right, LFE)"
|
|
2240
|
+
*/
|
|
2241
|
+
// additional channel mappings are user defined
|
|
2242
|
+
};
|
|
2243
|
+
var silkOnly = "SILK-only";
|
|
2244
|
+
var celtOnly = "CELT-only";
|
|
2245
|
+
var hybrid = "Hybrid";
|
|
2246
|
+
var narrowBand = "narrowband";
|
|
2247
|
+
var mediumBand = "medium-band";
|
|
2248
|
+
var wideBand = "wideband";
|
|
2249
|
+
var superWideBand = "super-wideband";
|
|
2250
|
+
var fullBand = "fullband";
|
|
2251
|
+
var configTable = {
|
|
2252
|
+
0: { [mode]: silkOnly, [bandwidth]: narrowBand, [frameSize]: 10 },
|
|
2253
|
+
8: { [mode]: silkOnly, [bandwidth]: narrowBand, [frameSize]: 20 },
|
|
2254
|
+
16: { [mode]: silkOnly, [bandwidth]: narrowBand, [frameSize]: 40 },
|
|
2255
|
+
24: { [mode]: silkOnly, [bandwidth]: narrowBand, [frameSize]: 60 },
|
|
2256
|
+
32: { [mode]: silkOnly, [bandwidth]: mediumBand, [frameSize]: 10 },
|
|
2257
|
+
40: { [mode]: silkOnly, [bandwidth]: mediumBand, [frameSize]: 20 },
|
|
2258
|
+
48: { [mode]: silkOnly, [bandwidth]: mediumBand, [frameSize]: 40 },
|
|
2259
|
+
56: { [mode]: silkOnly, [bandwidth]: mediumBand, [frameSize]: 60 },
|
|
2260
|
+
64: { [mode]: silkOnly, [bandwidth]: wideBand, [frameSize]: 10 },
|
|
2261
|
+
72: { [mode]: silkOnly, [bandwidth]: wideBand, [frameSize]: 20 },
|
|
2262
|
+
80: { [mode]: silkOnly, [bandwidth]: wideBand, [frameSize]: 40 },
|
|
2263
|
+
88: { [mode]: silkOnly, [bandwidth]: wideBand, [frameSize]: 60 },
|
|
2264
|
+
96: { [mode]: hybrid, [bandwidth]: superWideBand, [frameSize]: 10 },
|
|
2265
|
+
104: { [mode]: hybrid, [bandwidth]: superWideBand, [frameSize]: 20 },
|
|
2266
|
+
112: { [mode]: hybrid, [bandwidth]: fullBand, [frameSize]: 10 },
|
|
2267
|
+
120: { [mode]: hybrid, [bandwidth]: fullBand, [frameSize]: 20 },
|
|
2268
|
+
128: { [mode]: celtOnly, [bandwidth]: narrowBand, [frameSize]: 2.5 },
|
|
2269
|
+
136: { [mode]: celtOnly, [bandwidth]: narrowBand, [frameSize]: 5 },
|
|
2270
|
+
144: { [mode]: celtOnly, [bandwidth]: narrowBand, [frameSize]: 10 },
|
|
2271
|
+
152: { [mode]: celtOnly, [bandwidth]: narrowBand, [frameSize]: 20 },
|
|
2272
|
+
160: { [mode]: celtOnly, [bandwidth]: wideBand, [frameSize]: 2.5 },
|
|
2273
|
+
168: { [mode]: celtOnly, [bandwidth]: wideBand, [frameSize]: 5 },
|
|
2274
|
+
176: { [mode]: celtOnly, [bandwidth]: wideBand, [frameSize]: 10 },
|
|
2275
|
+
184: { [mode]: celtOnly, [bandwidth]: wideBand, [frameSize]: 20 },
|
|
2276
|
+
192: { [mode]: celtOnly, [bandwidth]: superWideBand, [frameSize]: 2.5 },
|
|
2277
|
+
200: { [mode]: celtOnly, [bandwidth]: superWideBand, [frameSize]: 5 },
|
|
2278
|
+
208: { [mode]: celtOnly, [bandwidth]: superWideBand, [frameSize]: 10 },
|
|
2279
|
+
216: { [mode]: celtOnly, [bandwidth]: superWideBand, [frameSize]: 20 },
|
|
2280
|
+
224: { [mode]: celtOnly, [bandwidth]: fullBand, [frameSize]: 2.5 },
|
|
2281
|
+
232: { [mode]: celtOnly, [bandwidth]: fullBand, [frameSize]: 5 },
|
|
2282
|
+
240: { [mode]: celtOnly, [bandwidth]: fullBand, [frameSize]: 10 },
|
|
2283
|
+
248: { [mode]: celtOnly, [bandwidth]: fullBand, [frameSize]: 20 }
|
|
2284
|
+
};
|
|
2285
|
+
var OpusHeader = class _OpusHeader extends CodecHeader {
|
|
2286
|
+
static [getHeaderFromUint8Array](dataValue, packetData, headerCache) {
|
|
2287
|
+
const header3 = {};
|
|
2288
|
+
header3[channels] = dataValue[9];
|
|
2289
|
+
header3[channelMappingFamily] = dataValue[18];
|
|
2290
|
+
header3[length] = header3[channelMappingFamily] !== 0 ? 21 + header3[channels] : 19;
|
|
2291
|
+
if (dataValue[length] < header3[length])
|
|
2292
|
+
throw new Error("Out of data while inside an Ogg Page");
|
|
2293
|
+
const packetMode = packetData[0] & 3;
|
|
2294
|
+
const packetLength = packetMode === 3 ? 2 : 1;
|
|
2295
|
+
const key = bytesToString(dataValue[subarray](0, header3[length])) + bytesToString(packetData[subarray](0, packetLength));
|
|
2296
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
2297
|
+
if (cachedHeader) return new _OpusHeader(cachedHeader);
|
|
2298
|
+
if (key.substr(0, 8) !== "OpusHead") {
|
|
2299
|
+
return null;
|
|
2300
|
+
}
|
|
2301
|
+
if (dataValue[8] !== 1) return null;
|
|
2302
|
+
header3[data] = uint8Array.from(dataValue[subarray](0, header3[length]));
|
|
2303
|
+
const view = new dataView(header3[data][buffer]);
|
|
2304
|
+
header3[bitDepth] = 16;
|
|
2305
|
+
header3[preSkip] = view.getUint16(10, true);
|
|
2306
|
+
header3[inputSampleRate] = view.getUint32(12, true);
|
|
2307
|
+
header3[sampleRate] = rate48000;
|
|
2308
|
+
header3[outputGain] = view.getInt16(16, true);
|
|
2309
|
+
if (header3[channelMappingFamily] in channelMappingFamilies) {
|
|
2310
|
+
header3[channelMode] = channelMappingFamilies[header3[channelMappingFamily]][header3[channels] - 1];
|
|
2311
|
+
if (!header3[channelMode]) return null;
|
|
2312
|
+
}
|
|
2313
|
+
if (header3[channelMappingFamily] !== 0) {
|
|
2314
|
+
header3[streamCount] = dataValue[19];
|
|
2315
|
+
header3[coupledStreamCount] = dataValue[20];
|
|
2316
|
+
header3[channelMappingTable] = [
|
|
2317
|
+
...dataValue[subarray](21, header3[channels] + 21)
|
|
2318
|
+
];
|
|
2319
|
+
}
|
|
2320
|
+
const packetConfig = configTable[248 & packetData[0]];
|
|
2321
|
+
header3[mode] = packetConfig[mode];
|
|
2322
|
+
header3[bandwidth] = packetConfig[bandwidth];
|
|
2323
|
+
header3[frameSize] = packetConfig[frameSize];
|
|
2324
|
+
switch (packetMode) {
|
|
2325
|
+
case 0:
|
|
2326
|
+
header3[frameCount] = 1;
|
|
2327
|
+
break;
|
|
2328
|
+
case 1:
|
|
2329
|
+
// 1: 2 frames in the packet, each with equal compressed size
|
|
2330
|
+
case 2:
|
|
2331
|
+
header3[frameCount] = 2;
|
|
2332
|
+
break;
|
|
2333
|
+
case 3:
|
|
2334
|
+
header3[isVbr] = !!(128 & packetData[1]);
|
|
2335
|
+
header3[hasOpusPadding] = !!(64 & packetData[1]);
|
|
2336
|
+
header3[frameCount] = 63 & packetData[1];
|
|
2337
|
+
break;
|
|
2338
|
+
default:
|
|
2339
|
+
return null;
|
|
2340
|
+
}
|
|
2341
|
+
{
|
|
2342
|
+
const {
|
|
2343
|
+
length: length2,
|
|
2344
|
+
data: headerData,
|
|
2345
|
+
channelMappingFamily: channelMappingFamily2,
|
|
2346
|
+
...codecUpdateFields
|
|
2347
|
+
} = header3;
|
|
2348
|
+
headerCache[setHeader](key, header3, codecUpdateFields);
|
|
2349
|
+
}
|
|
2350
|
+
return new _OpusHeader(header3);
|
|
2351
|
+
}
|
|
2352
|
+
/**
|
|
2353
|
+
* @private
|
|
2354
|
+
* Call OpusHeader.getHeader(Array<Uint8>) to get instance
|
|
2355
|
+
*/
|
|
2356
|
+
constructor(header3) {
|
|
2357
|
+
super(header3);
|
|
2358
|
+
this[data] = header3[data];
|
|
2359
|
+
this[bandwidth] = header3[bandwidth];
|
|
2360
|
+
this[channelMappingFamily] = header3[channelMappingFamily];
|
|
2361
|
+
this[channelMappingTable] = header3[channelMappingTable];
|
|
2362
|
+
this[coupledStreamCount] = header3[coupledStreamCount];
|
|
2363
|
+
this[frameCount] = header3[frameCount];
|
|
2364
|
+
this[frameSize] = header3[frameSize];
|
|
2365
|
+
this[hasOpusPadding] = header3[hasOpusPadding];
|
|
2366
|
+
this[inputSampleRate] = header3[inputSampleRate];
|
|
2367
|
+
this[isVbr] = header3[isVbr];
|
|
2368
|
+
this[mode] = header3[mode];
|
|
2369
|
+
this[outputGain] = header3[outputGain];
|
|
2370
|
+
this[preSkip] = header3[preSkip];
|
|
2371
|
+
this[streamCount] = header3[streamCount];
|
|
2372
|
+
}
|
|
2373
|
+
};
|
|
2374
|
+
|
|
2375
|
+
// ../../node_modules/codec-parser/src/codecs/opus/OpusParser.js
|
|
2376
|
+
var OpusParser = class extends Parser {
|
|
2377
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
2378
|
+
super(codecParser, headerCache);
|
|
2379
|
+
this.Frame = OpusFrame;
|
|
2380
|
+
this.Header = OpusHeader;
|
|
2381
|
+
onCodec(this[codec]);
|
|
2382
|
+
this._identificationHeader = null;
|
|
2383
|
+
this._preSkipRemaining = null;
|
|
2384
|
+
}
|
|
2385
|
+
get [codec]() {
|
|
2386
|
+
return "opus";
|
|
2387
|
+
}
|
|
2388
|
+
/**
|
|
2389
|
+
* @todo implement continued page support
|
|
2390
|
+
*/
|
|
2391
|
+
[parseOggPage](oggPage) {
|
|
2392
|
+
if (oggPage[pageSequenceNumber] === 0) {
|
|
2393
|
+
this._headerCache[enable]();
|
|
2394
|
+
this._identificationHeader = oggPage[data];
|
|
2395
|
+
} else if (oggPage[pageSequenceNumber] === 1) {
|
|
2396
|
+
} else {
|
|
2397
|
+
oggPage[codecFrames] = frameStore.get(oggPage)[segments].map((segment) => {
|
|
2398
|
+
const header3 = OpusHeader[getHeaderFromUint8Array](
|
|
2399
|
+
this._identificationHeader,
|
|
2400
|
+
segment,
|
|
2401
|
+
this._headerCache
|
|
2402
|
+
);
|
|
2403
|
+
if (header3) {
|
|
2404
|
+
if (this._preSkipRemaining === null)
|
|
2405
|
+
this._preSkipRemaining = header3[preSkip];
|
|
2406
|
+
let samples2 = header3[frameSize] * header3[frameCount] / 1e3 * header3[sampleRate];
|
|
2407
|
+
if (this._preSkipRemaining > 0) {
|
|
2408
|
+
this._preSkipRemaining -= samples2;
|
|
2409
|
+
samples2 = this._preSkipRemaining < 0 ? -this._preSkipRemaining : 0;
|
|
2410
|
+
}
|
|
2411
|
+
return new OpusFrame(segment, header3, samples2);
|
|
2412
|
+
}
|
|
2413
|
+
this._codecParser[logError2](
|
|
2414
|
+
"Failed to parse Ogg Opus Header",
|
|
2415
|
+
"Not a valid Ogg Opus file"
|
|
2416
|
+
);
|
|
2417
|
+
});
|
|
2418
|
+
}
|
|
2419
|
+
return oggPage;
|
|
2420
|
+
}
|
|
2421
|
+
};
|
|
2422
|
+
|
|
2423
|
+
// ../../node_modules/codec-parser/src/codecs/vorbis/VorbisFrame.js
|
|
2424
|
+
var VorbisFrame = class extends CodecFrame {
|
|
2425
|
+
constructor(data3, header3, samples2) {
|
|
2426
|
+
super(header3, data3, samples2);
|
|
2427
|
+
}
|
|
2428
|
+
};
|
|
2429
|
+
|
|
2430
|
+
// ../../node_modules/codec-parser/src/codecs/vorbis/VorbisHeader.js
|
|
2431
|
+
var blockSizes = {
|
|
2432
|
+
// 0b0110: 64,
|
|
2433
|
+
// 0b0111: 128,
|
|
2434
|
+
// 0b1000: 256,
|
|
2435
|
+
// 0b1001: 512,
|
|
2436
|
+
// 0b1010: 1024,
|
|
2437
|
+
// 0b1011: 2048,
|
|
2438
|
+
// 0b1100: 4096,
|
|
2439
|
+
// 0b1101: 8192
|
|
2440
|
+
};
|
|
2441
|
+
for (let i = 0; i < 8; i++) blockSizes[i + 6] = 2 ** (6 + i);
|
|
2442
|
+
var VorbisHeader = class _VorbisHeader extends CodecHeader {
|
|
2443
|
+
static [getHeaderFromUint8Array](dataValue, headerCache, vorbisCommentsData, vorbisSetupData) {
|
|
2444
|
+
if (dataValue[length] < 30)
|
|
2445
|
+
throw new Error("Out of data while inside an Ogg Page");
|
|
2446
|
+
const key = bytesToString(dataValue[subarray](0, 30));
|
|
2447
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
2448
|
+
if (cachedHeader) return new _VorbisHeader(cachedHeader);
|
|
2449
|
+
const header3 = { [length]: 30 };
|
|
2450
|
+
if (key.substr(0, 7) !== "vorbis") {
|
|
2451
|
+
return null;
|
|
2452
|
+
}
|
|
2453
|
+
header3[data] = uint8Array.from(dataValue[subarray](0, 30));
|
|
2454
|
+
const view = new dataView(header3[data][buffer]);
|
|
2455
|
+
header3[version] = view.getUint32(7, true);
|
|
2456
|
+
if (header3[version] !== 0) return null;
|
|
2457
|
+
header3[channels] = dataValue[11];
|
|
2458
|
+
header3[channelMode] = vorbisOpusChannelMapping[header3[channels] - 1] || "application defined";
|
|
2459
|
+
header3[sampleRate] = view.getUint32(12, true);
|
|
2460
|
+
header3[bitrateMaximum] = view.getInt32(16, true);
|
|
2461
|
+
header3[bitrateNominal] = view.getInt32(20, true);
|
|
2462
|
+
header3[bitrateMinimum] = view.getInt32(24, true);
|
|
2463
|
+
header3[blocksize1] = blockSizes[(dataValue[28] & 240) >> 4];
|
|
2464
|
+
header3[blocksize0] = blockSizes[dataValue[28] & 15];
|
|
2465
|
+
if (header3[blocksize0] > header3[blocksize1]) return null;
|
|
2466
|
+
if (dataValue[29] !== 1) return null;
|
|
2467
|
+
header3[bitDepth] = 32;
|
|
2468
|
+
header3[vorbisSetup] = vorbisSetupData;
|
|
2469
|
+
header3[vorbisComments] = vorbisCommentsData;
|
|
2470
|
+
{
|
|
2471
|
+
const {
|
|
2472
|
+
length: length2,
|
|
2473
|
+
data: data3,
|
|
2474
|
+
version: version2,
|
|
2475
|
+
vorbisSetup: vorbisSetup2,
|
|
2476
|
+
vorbisComments: vorbisComments2,
|
|
2477
|
+
...codecUpdateFields
|
|
2478
|
+
} = header3;
|
|
2479
|
+
headerCache[setHeader](key, header3, codecUpdateFields);
|
|
2480
|
+
}
|
|
2481
|
+
return new _VorbisHeader(header3);
|
|
2482
|
+
}
|
|
2483
|
+
/**
|
|
2484
|
+
* @private
|
|
2485
|
+
* Call VorbisHeader.getHeader(Array<Uint8>) to get instance
|
|
2486
|
+
*/
|
|
2487
|
+
constructor(header3) {
|
|
2488
|
+
super(header3);
|
|
2489
|
+
this[bitrateMaximum] = header3[bitrateMaximum];
|
|
2490
|
+
this[bitrateMinimum] = header3[bitrateMinimum];
|
|
2491
|
+
this[bitrateNominal] = header3[bitrateNominal];
|
|
2492
|
+
this[blocksize0] = header3[blocksize0];
|
|
2493
|
+
this[blocksize1] = header3[blocksize1];
|
|
2494
|
+
this[data] = header3[data];
|
|
2495
|
+
this[vorbisComments] = header3[vorbisComments];
|
|
2496
|
+
this[vorbisSetup] = header3[vorbisSetup];
|
|
2497
|
+
}
|
|
2498
|
+
};
|
|
2499
|
+
|
|
2500
|
+
// ../../node_modules/codec-parser/src/codecs/vorbis/VorbisParser.js
|
|
2501
|
+
var VorbisParser = class extends Parser {
|
|
2502
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
2503
|
+
super(codecParser, headerCache);
|
|
2504
|
+
this.Frame = VorbisFrame;
|
|
2505
|
+
onCodec(this[codec]);
|
|
2506
|
+
this._identificationHeader = null;
|
|
2507
|
+
this._setupComplete = false;
|
|
2508
|
+
this._prevBlockSize = null;
|
|
2509
|
+
}
|
|
2510
|
+
get [codec]() {
|
|
2511
|
+
return vorbis;
|
|
2512
|
+
}
|
|
2513
|
+
[parseOggPage](oggPage) {
|
|
2514
|
+
oggPage[codecFrames] = [];
|
|
2515
|
+
for (const oggPageSegment of frameStore.get(oggPage)[segments]) {
|
|
2516
|
+
if (oggPageSegment[0] === 1) {
|
|
2517
|
+
this._headerCache[enable]();
|
|
2518
|
+
this._identificationHeader = oggPage[data];
|
|
2519
|
+
this._setupComplete = false;
|
|
2520
|
+
} else if (oggPageSegment[0] === 3) {
|
|
2521
|
+
this._vorbisComments = oggPageSegment;
|
|
2522
|
+
} else if (oggPageSegment[0] === 5) {
|
|
2523
|
+
this._vorbisSetup = oggPageSegment;
|
|
2524
|
+
this._mode = this._parseSetupHeader(oggPageSegment);
|
|
2525
|
+
this._setupComplete = true;
|
|
2526
|
+
} else if (this._setupComplete) {
|
|
2527
|
+
const header3 = VorbisHeader[getHeaderFromUint8Array](
|
|
2528
|
+
this._identificationHeader,
|
|
2529
|
+
this._headerCache,
|
|
2530
|
+
this._vorbisComments,
|
|
2531
|
+
this._vorbisSetup
|
|
2532
|
+
);
|
|
2533
|
+
if (header3) {
|
|
2534
|
+
oggPage[codecFrames].push(
|
|
2535
|
+
new VorbisFrame(
|
|
2536
|
+
oggPageSegment,
|
|
2537
|
+
header3,
|
|
2538
|
+
this._getSamples(oggPageSegment, header3)
|
|
2539
|
+
)
|
|
2540
|
+
);
|
|
2541
|
+
} else {
|
|
2542
|
+
this._codecParser[logError](
|
|
2543
|
+
"Failed to parse Ogg Vorbis Header",
|
|
2544
|
+
"Not a valid Ogg Vorbis file"
|
|
2545
|
+
);
|
|
2546
|
+
}
|
|
2547
|
+
}
|
|
2548
|
+
}
|
|
2549
|
+
return oggPage;
|
|
2550
|
+
}
|
|
2551
|
+
_getSamples(segment, header3) {
|
|
2552
|
+
const blockFlag = this._mode.blockFlags[segment[0] >> 1 & this._mode.mask];
|
|
2553
|
+
const currentBlockSize = blockFlag ? header3[blocksize1] : header3[blocksize0];
|
|
2554
|
+
const samplesValue = this._prevBlockSize === null ? 0 : (this._prevBlockSize + currentBlockSize) / 4;
|
|
2555
|
+
this._prevBlockSize = currentBlockSize;
|
|
2556
|
+
return samplesValue;
|
|
2557
|
+
}
|
|
2558
|
+
// https://gitlab.xiph.org/xiph/liboggz/-/blob/master/src/liboggz/oggz_auto.c#L911
|
|
2559
|
+
// https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/vorbis_parser.c
|
|
2560
|
+
/*
|
|
2561
|
+
* This is the format of the mode data at the end of the packet for all
|
|
2562
|
+
* Vorbis Version 1 :
|
|
2563
|
+
*
|
|
2564
|
+
* [ 6:number_of_modes ]
|
|
2565
|
+
* [ 1:size | 16:window_type(0) | 16:transform_type(0) | 8:mapping ]
|
|
2566
|
+
* [ 1:size | 16:window_type(0) | 16:transform_type(0) | 8:mapping ]
|
|
2567
|
+
* [ 1:size | 16:window_type(0) | 16:transform_type(0) | 8:mapping ]
|
|
2568
|
+
* [ 1:framing(1) ]
|
|
2569
|
+
*
|
|
2570
|
+
* e.g.:
|
|
2571
|
+
*
|
|
2572
|
+
* MsB LsB
|
|
2573
|
+
* <-
|
|
2574
|
+
* 0 0 0 0 0 1 0 0
|
|
2575
|
+
* 0 0 1 0 0 0 0 0
|
|
2576
|
+
* 0 0 1 0 0 0 0 0
|
|
2577
|
+
* 0 0 1|0 0 0 0 0
|
|
2578
|
+
* 0 0 0 0|0|0 0 0
|
|
2579
|
+
* 0 0 0 0 0 0 0 0
|
|
2580
|
+
* 0 0 0 0|0 0 0 0
|
|
2581
|
+
* 0 0 0 0 0 0 0 0
|
|
2582
|
+
* 0 0 0 0|0 0 0 0
|
|
2583
|
+
* 0 0 0|1|0 0 0 0 |
|
|
2584
|
+
* 0 0 0 0 0 0 0 0 V
|
|
2585
|
+
* 0 0 0|0 0 0 0 0
|
|
2586
|
+
* 0 0 0 0 0 0 0 0
|
|
2587
|
+
* 0 0|1 0 0 0 0 0
|
|
2588
|
+
*
|
|
2589
|
+
* The simplest way to approach this is to start at the end
|
|
2590
|
+
* and read backwards to determine the mode configuration.
|
|
2591
|
+
*
|
|
2592
|
+
* liboggz and ffmpeg both use this method.
|
|
2593
|
+
*/
|
|
2594
|
+
_parseSetupHeader(setup) {
|
|
2595
|
+
const bitReader = new BitReader(setup);
|
|
2596
|
+
const mode2 = {
|
|
2597
|
+
count: 0,
|
|
2598
|
+
blockFlags: []
|
|
2599
|
+
};
|
|
2600
|
+
while ((bitReader.read(1) & 1) !== 1) {
|
|
2601
|
+
}
|
|
2602
|
+
let modeBits;
|
|
2603
|
+
while (mode2.count < 64 && bitReader.position > 0) {
|
|
2604
|
+
reverse(bitReader.read(8));
|
|
2605
|
+
let currentByte = 0;
|
|
2606
|
+
while (bitReader.read(8) === 0 && currentByte++ < 3) {
|
|
2607
|
+
}
|
|
2608
|
+
if (currentByte === 4) {
|
|
2609
|
+
modeBits = bitReader.read(7);
|
|
2610
|
+
mode2.blockFlags.unshift(modeBits & 1);
|
|
2611
|
+
bitReader.position += 6;
|
|
2612
|
+
mode2.count++;
|
|
2613
|
+
} else {
|
|
2614
|
+
if (((reverse(modeBits) & 126) >> 1) + 1 !== mode2.count) {
|
|
2615
|
+
this._codecParser[logWarning](
|
|
2616
|
+
"vorbis derived mode count did not match actual mode count"
|
|
2617
|
+
);
|
|
2618
|
+
}
|
|
2619
|
+
break;
|
|
2620
|
+
}
|
|
2621
|
+
}
|
|
2622
|
+
mode2.mask = (1 << Math.log2(mode2.count)) - 1;
|
|
2623
|
+
return mode2;
|
|
2624
|
+
}
|
|
2625
|
+
};
|
|
2626
|
+
|
|
2627
|
+
// ../../node_modules/codec-parser/src/containers/ogg/OggParser.js
|
|
2628
|
+
var OggStream = class {
|
|
2629
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
2630
|
+
this._codecParser = codecParser;
|
|
2631
|
+
this._headerCache = headerCache;
|
|
2632
|
+
this._onCodec = onCodec;
|
|
2633
|
+
this._continuedPacket = new uint8Array();
|
|
2634
|
+
this._codec = null;
|
|
2635
|
+
this._isSupported = null;
|
|
2636
|
+
this._previousAbsoluteGranulePosition = null;
|
|
2637
|
+
}
|
|
2638
|
+
get [codec]() {
|
|
2639
|
+
return this._codec || "";
|
|
2640
|
+
}
|
|
2641
|
+
_updateCodec(codec2, Parser2) {
|
|
2642
|
+
if (this._codec !== codec2) {
|
|
2643
|
+
this._headerCache[reset]();
|
|
2644
|
+
this._parser = new Parser2(
|
|
2645
|
+
this._codecParser,
|
|
2646
|
+
this._headerCache,
|
|
2647
|
+
this._onCodec
|
|
2648
|
+
);
|
|
2649
|
+
this._codec = codec2;
|
|
2650
|
+
}
|
|
2651
|
+
}
|
|
2652
|
+
_checkCodecSupport({ data: data3 }) {
|
|
2653
|
+
const idString = bytesToString(data3[subarray](0, 8));
|
|
2654
|
+
switch (idString) {
|
|
2655
|
+
case "fishead\0":
|
|
2656
|
+
return false;
|
|
2657
|
+
// ignore ogg skeleton packets
|
|
2658
|
+
case "OpusHead":
|
|
2659
|
+
this._updateCodec("opus", OpusParser);
|
|
2660
|
+
return true;
|
|
2661
|
+
case (/^\x7fFLAC/.test(idString) && idString):
|
|
2662
|
+
this._updateCodec("flac", FLACParser);
|
|
2663
|
+
return true;
|
|
2664
|
+
case (/^\x01vorbis/.test(idString) && idString):
|
|
2665
|
+
this._updateCodec(vorbis, VorbisParser);
|
|
2666
|
+
return true;
|
|
2667
|
+
default:
|
|
2668
|
+
return false;
|
|
2669
|
+
}
|
|
2670
|
+
}
|
|
2671
|
+
_checkPageSequenceNumber(oggPage) {
|
|
2672
|
+
if (oggPage[pageSequenceNumber] !== this._pageSequenceNumber + 1 && this._pageSequenceNumber > 1 && oggPage[pageSequenceNumber] > 1) {
|
|
2673
|
+
this._codecParser[logWarning](
|
|
2674
|
+
"Unexpected gap in Ogg Page Sequence Number.",
|
|
2675
|
+
`Expected: ${this._pageSequenceNumber + 1}, Got: ${oggPage[pageSequenceNumber]}`
|
|
2676
|
+
);
|
|
2677
|
+
}
|
|
2678
|
+
this._pageSequenceNumber = oggPage[pageSequenceNumber];
|
|
2679
|
+
}
|
|
2680
|
+
_parsePage(oggPage) {
|
|
2681
|
+
if (this._isSupported === null) {
|
|
2682
|
+
this._pageSequenceNumber = oggPage[pageSequenceNumber];
|
|
2683
|
+
this._isSupported = this._checkCodecSupport(oggPage);
|
|
2684
|
+
}
|
|
2685
|
+
this._checkPageSequenceNumber(oggPage);
|
|
2686
|
+
const oggPageStore = frameStore.get(oggPage);
|
|
2687
|
+
const headerData = headerStore.get(oggPageStore[header]);
|
|
2688
|
+
let offset = 0;
|
|
2689
|
+
oggPageStore[segments] = headerData[pageSegmentTable].map(
|
|
2690
|
+
(segmentLength) => oggPage[data][subarray](offset, offset += segmentLength)
|
|
2691
|
+
);
|
|
2692
|
+
if (this._continuedPacket[length]) {
|
|
2693
|
+
oggPageStore[segments][0] = concatBuffers(
|
|
2694
|
+
this._continuedPacket,
|
|
2695
|
+
oggPageStore[segments][0]
|
|
2696
|
+
);
|
|
2697
|
+
this._continuedPacket = new uint8Array();
|
|
2698
|
+
}
|
|
2699
|
+
if (headerData[pageSegmentBytes][headerData[pageSegmentBytes][length] - 1] === 255) {
|
|
2700
|
+
this._continuedPacket = concatBuffers(
|
|
2701
|
+
this._continuedPacket,
|
|
2702
|
+
oggPageStore[segments].pop()
|
|
2703
|
+
);
|
|
2704
|
+
}
|
|
2705
|
+
if (this._previousAbsoluteGranulePosition !== null) {
|
|
2706
|
+
oggPage[samples] = Number(
|
|
2707
|
+
oggPage[absoluteGranulePosition] - this._previousAbsoluteGranulePosition
|
|
2708
|
+
);
|
|
2709
|
+
}
|
|
2710
|
+
this._previousAbsoluteGranulePosition = oggPage[absoluteGranulePosition];
|
|
2711
|
+
if (this._isSupported) {
|
|
2712
|
+
const frame2 = this._parser[parseOggPage](oggPage);
|
|
2713
|
+
this._codecParser[mapFrameStats](frame2);
|
|
2714
|
+
return frame2;
|
|
2715
|
+
} else {
|
|
2716
|
+
return oggPage;
|
|
2717
|
+
}
|
|
2718
|
+
}
|
|
2719
|
+
};
|
|
2720
|
+
var OggParser = class extends Parser {
|
|
2721
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
2722
|
+
super(codecParser, headerCache);
|
|
2723
|
+
this._onCodec = onCodec;
|
|
2724
|
+
this.Frame = OggPage;
|
|
2725
|
+
this.Header = OggPageHeader;
|
|
2726
|
+
this._streams = /* @__PURE__ */ new Map();
|
|
2727
|
+
this._currentSerialNumber = null;
|
|
2728
|
+
}
|
|
2729
|
+
get [codec]() {
|
|
2730
|
+
const oggStream = this._streams.get(this._currentSerialNumber);
|
|
2731
|
+
return oggStream ? oggStream.codec : "";
|
|
2732
|
+
}
|
|
2733
|
+
*[parseFrame]() {
|
|
2734
|
+
const oggPage = yield* this[fixedLengthFrameSync](true);
|
|
2735
|
+
this._currentSerialNumber = oggPage[streamSerialNumber];
|
|
2736
|
+
let oggStream = this._streams.get(this._currentSerialNumber);
|
|
2737
|
+
if (!oggStream) {
|
|
2738
|
+
oggStream = new OggStream(
|
|
2739
|
+
this._codecParser,
|
|
2740
|
+
this._headerCache,
|
|
2741
|
+
this._onCodec
|
|
2742
|
+
);
|
|
2743
|
+
this._streams.set(this._currentSerialNumber, oggStream);
|
|
2744
|
+
}
|
|
2745
|
+
if (oggPage[isLastPage]) this._streams.delete(this._currentSerialNumber);
|
|
2746
|
+
return oggStream._parsePage(oggPage);
|
|
2747
|
+
}
|
|
2748
|
+
};
|
|
2749
|
+
|
|
2750
|
+
// ../../node_modules/codec-parser/src/CodecParser.js
|
|
2751
|
+
var noOp = () => {
|
|
2752
|
+
};
|
|
2753
|
+
var CodecParser = class {
|
|
2754
|
+
constructor(mimeType2, {
|
|
2755
|
+
onCodec,
|
|
2756
|
+
onCodecHeader,
|
|
2757
|
+
onCodecUpdate,
|
|
2758
|
+
enableLogging = false,
|
|
2759
|
+
enableFrameCRC32 = true
|
|
2760
|
+
} = {}) {
|
|
2761
|
+
this._inputMimeType = mimeType2;
|
|
2762
|
+
this._onCodec = onCodec || noOp;
|
|
2763
|
+
this._onCodecHeader = onCodecHeader || noOp;
|
|
2764
|
+
this._onCodecUpdate = onCodecUpdate;
|
|
2765
|
+
this._enableLogging = enableLogging;
|
|
2766
|
+
this._crc32 = enableFrameCRC32 ? crc32Function : noOp;
|
|
2767
|
+
this[reset]();
|
|
2768
|
+
}
|
|
2769
|
+
/**
|
|
2770
|
+
* @public
|
|
2771
|
+
* @returns The detected codec
|
|
2772
|
+
*/
|
|
2773
|
+
get [codec]() {
|
|
2774
|
+
return this._parser ? this._parser[codec] : "";
|
|
2775
|
+
}
|
|
2776
|
+
[reset]() {
|
|
2777
|
+
this._headerCache = new HeaderCache(
|
|
2778
|
+
this._onCodecHeader,
|
|
2779
|
+
this._onCodecUpdate
|
|
2780
|
+
);
|
|
2781
|
+
this._generator = this._getGenerator();
|
|
2782
|
+
this._generator.next();
|
|
2783
|
+
}
|
|
2784
|
+
/**
|
|
2785
|
+
* @public
|
|
2786
|
+
* @description Generator function that yields any buffered CodecFrames and resets the CodecParser
|
|
2787
|
+
* @returns {Iterable<CodecFrame|OggPage>} Iterator that operates over the codec data.
|
|
2788
|
+
* @yields {CodecFrame|OggPage} Parsed codec or ogg page data
|
|
2789
|
+
*/
|
|
2790
|
+
*flush() {
|
|
2791
|
+
this._flushing = true;
|
|
2792
|
+
for (let i = this._generator.next(); i.value; i = this._generator.next()) {
|
|
2793
|
+
yield i.value;
|
|
2794
|
+
}
|
|
2795
|
+
this._flushing = false;
|
|
2796
|
+
this[reset]();
|
|
2797
|
+
}
|
|
2798
|
+
/**
|
|
2799
|
+
* @public
|
|
2800
|
+
* @description Generator function takes in a Uint8Array of data and returns a CodecFrame from the data for each iteration
|
|
2801
|
+
* @param {Uint8Array} chunk Next chunk of codec data to read
|
|
2802
|
+
* @returns {Iterable<CodecFrame|OggPage>} Iterator that operates over the codec data.
|
|
2803
|
+
* @yields {CodecFrame|OggPage} Parsed codec or ogg page data
|
|
2804
|
+
*/
|
|
2805
|
+
*parseChunk(chunk) {
|
|
2806
|
+
for (let i = this._generator.next(chunk); i.value; i = this._generator.next()) {
|
|
2807
|
+
yield i.value;
|
|
2808
|
+
}
|
|
2809
|
+
}
|
|
2810
|
+
/**
|
|
2811
|
+
* @public
|
|
2812
|
+
* @description Parses an entire file and returns all of the contained frames.
|
|
2813
|
+
* @param {Uint8Array} fileData Coded data to read
|
|
2814
|
+
* @returns {Array<CodecFrame|OggPage>} CodecFrames
|
|
2815
|
+
*/
|
|
2816
|
+
parseAll(fileData) {
|
|
2817
|
+
return [...this.parseChunk(fileData), ...this.flush()];
|
|
2818
|
+
}
|
|
2819
|
+
/**
|
|
2820
|
+
* @private
|
|
2821
|
+
*/
|
|
2822
|
+
*_getGenerator() {
|
|
2823
|
+
if (this._inputMimeType.match(/aac/)) {
|
|
2824
|
+
this._parser = new AACParser(this, this._headerCache, this._onCodec);
|
|
2825
|
+
} else if (this._inputMimeType.match(/mpeg/)) {
|
|
2826
|
+
this._parser = new MPEGParser(this, this._headerCache, this._onCodec);
|
|
2827
|
+
} else if (this._inputMimeType.match(/flac/)) {
|
|
2828
|
+
this._parser = new FLACParser(this, this._headerCache, this._onCodec);
|
|
2829
|
+
} else if (this._inputMimeType.match(/ogg/)) {
|
|
2830
|
+
this._parser = new OggParser(this, this._headerCache, this._onCodec);
|
|
2831
|
+
} else {
|
|
2832
|
+
throw new Error(`Unsupported Codec ${mimeType}`);
|
|
2833
|
+
}
|
|
2834
|
+
this._frameNumber = 0;
|
|
2835
|
+
this._currentReadPosition = 0;
|
|
2836
|
+
this._totalBytesIn = 0;
|
|
2837
|
+
this._totalBytesOut = 0;
|
|
2838
|
+
this._totalSamples = 0;
|
|
2839
|
+
this._sampleRate = void 0;
|
|
2840
|
+
this._rawData = new Uint8Array(0);
|
|
2841
|
+
while (true) {
|
|
2842
|
+
const frame2 = yield* this._parser[parseFrame]();
|
|
2843
|
+
if (frame2) yield frame2;
|
|
2844
|
+
}
|
|
2845
|
+
}
|
|
2846
|
+
/**
|
|
2847
|
+
* @protected
|
|
2848
|
+
* @param {number} minSize Minimum bytes to have present in buffer
|
|
2849
|
+
* @returns {Uint8Array} rawData
|
|
2850
|
+
*/
|
|
2851
|
+
*[readRawData](minSize = 0, readOffset = 0) {
|
|
2852
|
+
let rawData2;
|
|
2853
|
+
while (this._rawData[length] <= minSize + readOffset) {
|
|
2854
|
+
rawData2 = yield;
|
|
2855
|
+
if (this._flushing) return this._rawData[subarray](readOffset);
|
|
2856
|
+
if (rawData2) {
|
|
2857
|
+
this._totalBytesIn += rawData2[length];
|
|
2858
|
+
this._rawData = concatBuffers(this._rawData, rawData2);
|
|
2859
|
+
}
|
|
2860
|
+
}
|
|
2861
|
+
return this._rawData[subarray](readOffset);
|
|
2862
|
+
}
|
|
2863
|
+
/**
|
|
2864
|
+
* @protected
|
|
2865
|
+
* @param {number} increment Bytes to increment codec data
|
|
2866
|
+
*/
|
|
2867
|
+
[incrementRawData](increment) {
|
|
2868
|
+
this._currentReadPosition += increment;
|
|
2869
|
+
this._rawData = this._rawData[subarray](increment);
|
|
2870
|
+
}
|
|
2871
|
+
/**
|
|
2872
|
+
* @protected
|
|
2873
|
+
*/
|
|
2874
|
+
[mapCodecFrameStats](frame2) {
|
|
2875
|
+
this._sampleRate = frame2[header][sampleRate];
|
|
2876
|
+
frame2[header][bitrate] = frame2[duration] > 0 ? Math.round(frame2[data][length] / frame2[duration]) * 8 : 0;
|
|
2877
|
+
frame2[frameNumber] = this._frameNumber++;
|
|
2878
|
+
frame2[totalBytesOut] = this._totalBytesOut;
|
|
2879
|
+
frame2[totalSamples] = this._totalSamples;
|
|
2880
|
+
frame2[totalDuration] = this._totalSamples / this._sampleRate * 1e3;
|
|
2881
|
+
frame2[crc32] = this._crc32(frame2[data]);
|
|
2882
|
+
this._headerCache[checkCodecUpdate](
|
|
2883
|
+
frame2[header][bitrate],
|
|
2884
|
+
frame2[totalDuration]
|
|
2885
|
+
);
|
|
2886
|
+
this._totalBytesOut += frame2[data][length];
|
|
2887
|
+
this._totalSamples += frame2[samples];
|
|
2888
|
+
}
|
|
2889
|
+
/**
|
|
2890
|
+
* @protected
|
|
2891
|
+
*/
|
|
2892
|
+
[mapFrameStats](frame2) {
|
|
2893
|
+
if (frame2[codecFrames]) {
|
|
2894
|
+
if (frame2[isLastPage]) {
|
|
2895
|
+
let absoluteGranulePositionSamples = frame2[samples];
|
|
2896
|
+
frame2[codecFrames].forEach((codecFrame) => {
|
|
2897
|
+
const untrimmedCodecSamples = codecFrame[samples];
|
|
2898
|
+
if (absoluteGranulePositionSamples < untrimmedCodecSamples) {
|
|
2899
|
+
codecFrame[samples] = absoluteGranulePositionSamples > 0 ? absoluteGranulePositionSamples : 0;
|
|
2900
|
+
codecFrame[duration] = codecFrame[samples] / codecFrame[header][sampleRate] * 1e3;
|
|
2901
|
+
}
|
|
2902
|
+
absoluteGranulePositionSamples -= untrimmedCodecSamples;
|
|
2903
|
+
this[mapCodecFrameStats](codecFrame);
|
|
2904
|
+
});
|
|
2905
|
+
} else {
|
|
2906
|
+
frame2[samples] = 0;
|
|
2907
|
+
frame2[codecFrames].forEach((codecFrame) => {
|
|
2908
|
+
frame2[samples] += codecFrame[samples];
|
|
2909
|
+
this[mapCodecFrameStats](codecFrame);
|
|
2910
|
+
});
|
|
2911
|
+
}
|
|
2912
|
+
frame2[duration] = frame2[samples] / this._sampleRate * 1e3 || 0;
|
|
2913
|
+
frame2[totalSamples] = this._totalSamples;
|
|
2914
|
+
frame2[totalDuration] = this._totalSamples / this._sampleRate * 1e3 || 0;
|
|
2915
|
+
frame2[totalBytesOut] = this._totalBytesOut;
|
|
2916
|
+
} else {
|
|
2917
|
+
this[mapCodecFrameStats](frame2);
|
|
2918
|
+
}
|
|
2919
|
+
}
|
|
2920
|
+
/**
|
|
2921
|
+
* @private
|
|
2922
|
+
*/
|
|
2923
|
+
_log(logger, messages) {
|
|
2924
|
+
if (this._enableLogging) {
|
|
2925
|
+
const stats = [
|
|
2926
|
+
`${codec}: ${this[codec]}`,
|
|
2927
|
+
`inputMimeType: ${this._inputMimeType}`,
|
|
2928
|
+
`readPosition: ${this._currentReadPosition}`,
|
|
2929
|
+
`totalBytesIn: ${this._totalBytesIn}`,
|
|
2930
|
+
`${totalBytesOut}: ${this._totalBytesOut}`
|
|
2931
|
+
];
|
|
2932
|
+
const width = Math.max(...stats.map((s) => s[length]));
|
|
2933
|
+
messages.push(
|
|
2934
|
+
`--stats--${"-".repeat(width - 9)}`,
|
|
2935
|
+
...stats,
|
|
2936
|
+
"-".repeat(width)
|
|
2937
|
+
);
|
|
2938
|
+
logger(
|
|
2939
|
+
"codec-parser",
|
|
2940
|
+
messages.reduce((acc, message) => acc + "\n " + message, "")
|
|
2941
|
+
);
|
|
2942
|
+
}
|
|
2943
|
+
}
|
|
2944
|
+
/**
|
|
2945
|
+
* @protected
|
|
2946
|
+
*/
|
|
2947
|
+
[logWarning](...messages) {
|
|
2948
|
+
this._log(console.warn, messages);
|
|
2949
|
+
}
|
|
2950
|
+
/**
|
|
2951
|
+
* @protected
|
|
2952
|
+
*/
|
|
2953
|
+
[logError2](...messages) {
|
|
2954
|
+
this._log(console.error, messages);
|
|
2955
|
+
}
|
|
2956
|
+
};
|
|
2957
|
+
|
|
2958
|
+
// ../../node_modules/codec-parser/index.js
|
|
2959
|
+
var codec_parser_default = CodecParser;
|
|
2960
|
+
var absoluteGranulePosition2 = absoluteGranulePosition;
|
|
2961
|
+
var codecFrames2 = codecFrames;
|
|
2962
|
+
var coupledStreamCount2 = coupledStreamCount;
|
|
2963
|
+
var data2 = data;
|
|
2964
|
+
var header2 = header;
|
|
2965
|
+
var isLastPage2 = isLastPage;
|
|
2966
|
+
var preSkip2 = preSkip;
|
|
2967
|
+
var channelMappingTable2 = channelMappingTable;
|
|
2968
|
+
var channels2 = channels;
|
|
2969
|
+
var streamCount2 = streamCount;
|
|
2970
|
+
var totalSamples2 = totalSamples;
|
|
2971
|
+
|
|
2972
|
+
// ../../node_modules/ogg-opus-decoder/src/OggOpusDecoder.js
|
|
2973
|
+
var simd = async () => WebAssembly.validate(new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 5, 1, 96, 0, 1, 123, 3, 2, 1, 0, 10, 10, 1, 8, 0, 65, 0, 253, 15, 253, 98, 11]));
|
|
2974
|
+
var OggOpusDecoder = class {
|
|
2975
|
+
constructor(options = {}) {
|
|
2976
|
+
this._sampleRate = options.sampleRate || 48e3;
|
|
2977
|
+
this._speechQualityEnhancement = options.speechQualityEnhancement;
|
|
2978
|
+
this._forceStereo = options.forceStereo !== void 0 ? options.forceStereo : false;
|
|
2979
|
+
this._onCodec = (codec2) => {
|
|
2980
|
+
if (codec2 !== "opus")
|
|
2981
|
+
throw new Error(
|
|
2982
|
+
"ogg-opus-decoder does not support this codec " + codec2
|
|
2983
|
+
);
|
|
2984
|
+
};
|
|
2985
|
+
new WASMAudioDecoderCommon();
|
|
2986
|
+
this._useMLDecoder = ["lace", "nolace"].includes(
|
|
2987
|
+
this._speechQualityEnhancement
|
|
2988
|
+
);
|
|
2989
|
+
this._decoderLibraryLoaded = this._loadDecoderLibrary();
|
|
2990
|
+
this._ready = this._init();
|
|
2991
|
+
}
|
|
2992
|
+
_initDecoderClass() {
|
|
2993
|
+
this._decoderClass = this._useMLDecoder ? this.OpusMLDecoder : this.OpusDecoder;
|
|
2994
|
+
}
|
|
2995
|
+
async _loadDecoderLibrary() {
|
|
2996
|
+
if (this._useMLDecoder) {
|
|
2997
|
+
const simdSupported = await simd();
|
|
2998
|
+
if (simdSupported) {
|
|
2999
|
+
const { OpusMLDecoder, OpusMLDecoderWebWorker } = await import(
|
|
3000
|
+
/* webpackChunkName: "opus-ml" */
|
|
3001
|
+
"@wasm-audio-decoders/opus-ml"
|
|
3002
|
+
);
|
|
3003
|
+
this.OpusMLDecoder = OpusMLDecoder;
|
|
3004
|
+
this.OpusMLDecoderWebWorker = OpusMLDecoderWebWorker;
|
|
3005
|
+
} else {
|
|
3006
|
+
console.warn(
|
|
3007
|
+
`ogg-opus-decoder: This platform does not support WebAssembly SIMD; { speechQualityEnhancements: '${this._speechQualityEnhancement}' } has been disabled`
|
|
3008
|
+
);
|
|
3009
|
+
this._useMLDecoder = false;
|
|
3010
|
+
}
|
|
3011
|
+
}
|
|
3012
|
+
this.OpusDecoder = OpusDecoder;
|
|
3013
|
+
this.OpusDecoderWebWorker = OpusDecoderWebWorker;
|
|
3014
|
+
this._initDecoderClass();
|
|
3015
|
+
}
|
|
3016
|
+
async _init() {
|
|
3017
|
+
if (this._decoder) await this._decoder.free();
|
|
3018
|
+
this._decoder = null;
|
|
3019
|
+
this._decoderReady = null;
|
|
3020
|
+
this._codecParser = new codec_parser_default("application/ogg", {
|
|
3021
|
+
onCodec: this._onCodec,
|
|
3022
|
+
enableFrameCRC32: false
|
|
3023
|
+
});
|
|
3024
|
+
}
|
|
3025
|
+
async _instantiateDecoder(header3) {
|
|
3026
|
+
this._totalSamplesDecoded = 0;
|
|
3027
|
+
this._preSkip = header3[preSkip2];
|
|
3028
|
+
this._channels = this._forceStereo ? 2 : header3[channels2];
|
|
3029
|
+
await this._decoderLibraryLoaded;
|
|
3030
|
+
this._decoder = new this._decoderClass({
|
|
3031
|
+
channels: header3[channels2],
|
|
3032
|
+
streamCount: header3[streamCount2],
|
|
3033
|
+
coupledStreamCount: header3[coupledStreamCount2],
|
|
3034
|
+
channelMappingTable: header3[channelMappingTable2],
|
|
3035
|
+
preSkip: Math.round(this._preSkip / 48e3 * this._sampleRate),
|
|
3036
|
+
sampleRate: this._sampleRate,
|
|
3037
|
+
speechQualityEnhancement: this._speechQualityEnhancement,
|
|
3038
|
+
forceStereo: this._forceStereo
|
|
3039
|
+
});
|
|
3040
|
+
return this._decoder.ready;
|
|
3041
|
+
}
|
|
3042
|
+
get ready() {
|
|
3043
|
+
return this._ready;
|
|
3044
|
+
}
|
|
3045
|
+
async reset() {
|
|
3046
|
+
this._ready = this._init();
|
|
3047
|
+
await this._ready;
|
|
3048
|
+
}
|
|
3049
|
+
free() {
|
|
3050
|
+
if (this._decoder) this._decoder.free();
|
|
3051
|
+
}
|
|
3052
|
+
async _decode(oggPages) {
|
|
3053
|
+
let opusFrames = [], allErrors = [], allChannelData = [], samplesThisDecode = 0;
|
|
3054
|
+
const flushFrames = async () => {
|
|
3055
|
+
if (opusFrames.length) {
|
|
3056
|
+
await this._decoderReady;
|
|
3057
|
+
const { channelData, samplesDecoded, errors } = await this._decoder.decodeFrames(opusFrames);
|
|
3058
|
+
allChannelData.push(channelData);
|
|
3059
|
+
allErrors.push(...errors);
|
|
3060
|
+
samplesThisDecode += samplesDecoded;
|
|
3061
|
+
this._totalSamplesDecoded += samplesDecoded;
|
|
3062
|
+
opusFrames = [];
|
|
3063
|
+
}
|
|
3064
|
+
};
|
|
3065
|
+
for (let i = 0; i < oggPages.length; i++) {
|
|
3066
|
+
const oggPage = oggPages[i];
|
|
3067
|
+
const frames = oggPage[codecFrames2].map((f) => f[data2]);
|
|
3068
|
+
if (frames.length) {
|
|
3069
|
+
opusFrames.push(...frames);
|
|
3070
|
+
if (!this._decoderReady)
|
|
3071
|
+
this._decoderReady = this._instantiateDecoder(
|
|
3072
|
+
oggPage[codecFrames2][0][header2]
|
|
3073
|
+
);
|
|
3074
|
+
}
|
|
3075
|
+
if (oggPage[isLastPage2]) {
|
|
3076
|
+
await flushFrames();
|
|
3077
|
+
if (oggPage[absoluteGranulePosition2] !== void 0 && allChannelData.length) {
|
|
3078
|
+
const totalDecodedSamples_48000 = this._totalSamplesDecoded / this._sampleRate * 48e3;
|
|
3079
|
+
const samplesToTrim = Math.round(
|
|
3080
|
+
(totalDecodedSamples_48000 - oggPage[totalSamples2]) / 48e3 * this._sampleRate
|
|
3081
|
+
);
|
|
3082
|
+
const channelData = allChannelData[allChannelData.length - 1];
|
|
3083
|
+
if (samplesToTrim > 0) {
|
|
3084
|
+
for (let i2 = 0; i2 < channelData.length; i2++) {
|
|
3085
|
+
channelData[i2] = channelData[i2].subarray(
|
|
3086
|
+
0,
|
|
3087
|
+
channelData[i2].length - samplesToTrim
|
|
3088
|
+
);
|
|
3089
|
+
}
|
|
3090
|
+
}
|
|
3091
|
+
samplesThisDecode -= samplesToTrim;
|
|
3092
|
+
this._totalSamplesDecoded -= samplesToTrim;
|
|
3093
|
+
}
|
|
3094
|
+
await this.reset();
|
|
3095
|
+
}
|
|
3096
|
+
}
|
|
3097
|
+
await flushFrames();
|
|
3098
|
+
return [
|
|
3099
|
+
allErrors,
|
|
3100
|
+
allChannelData,
|
|
3101
|
+
this._channels,
|
|
3102
|
+
samplesThisDecode,
|
|
3103
|
+
this._sampleRate,
|
|
3104
|
+
16
|
|
3105
|
+
];
|
|
3106
|
+
}
|
|
3107
|
+
async decode(oggOpusData) {
|
|
3108
|
+
const decoded = await this._decode([
|
|
3109
|
+
...this._codecParser.parseChunk(oggOpusData)
|
|
3110
|
+
]);
|
|
3111
|
+
return WASMAudioDecoderCommon.getDecodedAudioMultiChannel(...decoded);
|
|
3112
|
+
}
|
|
3113
|
+
async decodeFile(oggOpusData) {
|
|
3114
|
+
const decoded = await this._decode([
|
|
3115
|
+
...this._codecParser.parseAll(oggOpusData)
|
|
3116
|
+
]);
|
|
3117
|
+
await this.reset();
|
|
3118
|
+
return WASMAudioDecoderCommon.getDecodedAudioMultiChannel(...decoded);
|
|
3119
|
+
}
|
|
3120
|
+
async flush() {
|
|
3121
|
+
const decoded = await this._decode([...this._codecParser.flush()]);
|
|
3122
|
+
await this.reset();
|
|
3123
|
+
return WASMAudioDecoderCommon.getDecodedAudioMultiChannel(...decoded);
|
|
3124
|
+
}
|
|
3125
|
+
};
|
|
3126
|
+
|
|
3127
|
+
// ../../node_modules/ogg-opus-decoder/src/OggOpusDecoderWebWorker.js
|
|
3128
|
+
var OggOpusDecoderWebWorker = class extends OggOpusDecoder {
|
|
3129
|
+
constructor(options) {
|
|
3130
|
+
super(options);
|
|
3131
|
+
}
|
|
3132
|
+
_initDecoderClass() {
|
|
3133
|
+
this._decoderClass = this._useMLDecoder ? this.OpusMLDecoderWebWorker : this.OpusDecoderWebWorker;
|
|
3134
|
+
}
|
|
3135
|
+
async free() {
|
|
3136
|
+
if (this._decoder) await this._decoder.free();
|
|
3137
|
+
}
|
|
3138
|
+
};
|
|
3139
|
+
|
|
3140
|
+
// ../../node_modules/ogg-opus-decoder/index.js
|
|
3141
|
+
assignNames(OggOpusDecoder, "OggOpusDecoder");
|
|
3142
|
+
assignNames(OggOpusDecoderWebWorker, "OggOpusDecoderWebWorker");
|
|
3143
|
+
|
|
3144
|
+
// src/decode-opus.src.js
|
|
3145
|
+
var EMPTY = Object.freeze({ channelData: Object.freeze([]), sampleRate: 0 });
|
|
3146
|
+
async function decode(src) {
|
|
3147
|
+
let buf = src instanceof Uint8Array ? src : new Uint8Array(src);
|
|
3148
|
+
let dec = await decoder();
|
|
3149
|
+
try {
|
|
3150
|
+
let a = await dec.decode(buf);
|
|
3151
|
+
let b = dec.flush ? await dec.flush() : null;
|
|
3152
|
+
return b?.channelData?.length ? merge(a, b) : a;
|
|
3153
|
+
} finally {
|
|
3154
|
+
dec.free();
|
|
3155
|
+
}
|
|
3156
|
+
}
|
|
3157
|
+
async function decoder() {
|
|
3158
|
+
let d = new OggOpusDecoder();
|
|
3159
|
+
await d.ready;
|
|
3160
|
+
return d;
|
|
3161
|
+
}
|
|
3162
|
+
function merge(a, b) {
|
|
3163
|
+
if (!b?.channelData?.length) return a;
|
|
3164
|
+
if (!a?.channelData?.length) return b;
|
|
3165
|
+
return {
|
|
3166
|
+
channelData: a.channelData.map((ch, i) => {
|
|
3167
|
+
let bc = b.channelData[i] || b.channelData[0];
|
|
3168
|
+
let m = new Float32Array(ch.length + bc.length);
|
|
3169
|
+
m.set(ch);
|
|
3170
|
+
m.set(bc, ch.length);
|
|
3171
|
+
return m;
|
|
3172
|
+
}),
|
|
3173
|
+
sampleRate: a.sampleRate
|
|
3174
|
+
};
|
|
3175
|
+
}
|
|
3176
|
+
export {
|
|
3177
|
+
decoder,
|
|
3178
|
+
decode as default
|
|
3179
|
+
};
|