@vizor-vr/vue 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +31 -0
- package/dist/VzAnnotation.vue.d.ts +25 -0
- package/dist/VzAnnotation.vue.d.ts.map +1 -0
- package/dist/VzCaption.vue.d.ts +12 -0
- package/dist/VzCaption.vue.d.ts.map +1 -0
- package/dist/VzCinema.vue.d.ts +202 -0
- package/dist/VzCinema.vue.d.ts.map +1 -0
- package/dist/VzImg.vue.d.ts +162 -0
- package/dist/VzImg.vue.d.ts.map +1 -0
- package/dist/VzLive.vue.d.ts +203 -0
- package/dist/VzLive.vue.d.ts.map +1 -0
- package/dist/VzPlaylist.vue.d.ts +54 -0
- package/dist/VzPlaylist.vue.d.ts.map +1 -0
- package/dist/VzTour.vue.d.ts +162 -0
- package/dist/VzTour.vue.d.ts.map +1 -0
- package/dist/VzVideo.vue.d.ts +205 -0
- package/dist/VzVideo.vue.d.ts.map +1 -0
- package/dist/__tests__/components.test.d.ts +2 -0
- package/dist/__tests__/components.test.d.ts.map +1 -0
- package/dist/__tests__/vz-caption.test.d.ts +2 -0
- package/dist/__tests__/vz-caption.test.d.ts.map +1 -0
- package/dist/dash-adapter-tid9ZyhO-4XHuq5__.js +63 -0
- package/dist/dash.all.min-DJEXrg26.js +18063 -0
- package/dist/hls-CxmYC9fy.js +21786 -0
- package/dist/hls-adapter-BivH46L_-BkyufEEx.js +84 -0
- package/dist/index-a2S14O1a.js +283 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22428 -0
- package/dist/omnitone-BEhsj_gd.js +494 -0
- package/dist/use-vizor.d.ts +166 -0
- package/dist/use-vizor.d.ts.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2016 Google Inc. All Rights Reserved.
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
(function() {
|
|
17
|
+
const s = {};
|
|
18
|
+
s.log = function() {
|
|
19
|
+
const A = `[Omnitone] ${Array.prototype.slice.call(arguments).join(" ")} (${performance.now().toFixed(2)}ms)`;
|
|
20
|
+
window.console.log(A);
|
|
21
|
+
}, s.throw = function() {
|
|
22
|
+
const A = `[Omnitone] ${Array.prototype.slice.call(arguments).join(" ")} (${performance.now().toFixed(2)}ms)`;
|
|
23
|
+
throw new Error(A);
|
|
24
|
+
};
|
|
25
|
+
let v, P, B, l, u, Q, _, C, d, E, p, M, I, m, b, x, H, F, R, G, z, L, U, Y, X, N, T, j, o;
|
|
26
|
+
s.invertMatrix4 = function(A, t) {
|
|
27
|
+
return v = t[0], P = t[1], B = t[2], l = t[3], u = t[4], Q = t[5], _ = t[6], C = t[7], d = t[8], E = t[9], p = t[10], M = t[11], I = t[12], m = t[13], b = t[14], x = t[15], H = v * Q - P * u, F = v * _ - B * u, R = v * C - l * u, G = P * _ - B * Q, z = P * C - l * Q, L = B * C - l * _, U = d * m - E * I, Y = d * b - p * I, X = d * x - M * I, N = E * b - p * m, T = E * x - M * m, j = p * x - M * b, o = H * j - F * T + R * N + G * X - z * Y + L * U, o ? (o = 1 / o, A[0] = (Q * j - _ * T + C * N) * o, A[1] = (B * T - P * j - l * N) * o, A[2] = (m * L - b * z + x * G) * o, A[3] = (p * z - E * L - M * G) * o, A[4] = (_ * X - u * j - C * Y) * o, A[5] = (v * j - B * X + l * Y) * o, A[6] = (b * R - I * L - x * F) * o, A[7] = (d * L - p * R + M * F) * o, A[8] = (u * T - Q * X + C * U) * o, A[9] = (P * X - v * T - l * U) * o, A[10] = (I * z - m * R + x * H) * o, A[11] = (E * R - d * z - M * H) * o, A[12] = (Q * Y - u * N - _ * U) * o, A[13] = (v * N - P * Y + B * U) * o, A[14] = (m * F - I * G - b * H) * o, A[15] = (d * G - E * F + p * H) * o, A) : null;
|
|
28
|
+
}, s.isDefinedENUMEntry = function(A, t) {
|
|
29
|
+
for (const e in A)
|
|
30
|
+
if (t === A[e])
|
|
31
|
+
return !0;
|
|
32
|
+
return !1;
|
|
33
|
+
}, s.isAudioContext = function(A) {
|
|
34
|
+
return A instanceof AudioContext || A instanceof OfflineAudioContext;
|
|
35
|
+
}, s.isAudioBuffer = function(A) {
|
|
36
|
+
return A instanceof AudioBuffer;
|
|
37
|
+
}, s.mergeBufferListByChannel = function(A, t) {
|
|
38
|
+
const e = t[0].length, n = t[0].sampleRate;
|
|
39
|
+
let i = 0;
|
|
40
|
+
for (let r = 0; r < t.length; ++r)
|
|
41
|
+
i > 32 && s.throw("Utils.mergeBuffer: Number of channels cannot exceed 32.(got " + i + ")"), e !== t[r].length && s.throw("Utils.mergeBuffer: AudioBuffer lengths are inconsistent. (expected " + e + " but got " + t[r].length + ")"), n !== t[r].sampleRate && s.throw("Utils.mergeBuffer: AudioBuffer sample rates are inconsistent. (expected " + n + " but got " + t[r].sampleRate + ")"), i += t[r].numberOfChannels;
|
|
42
|
+
const w = A.createBuffer(
|
|
43
|
+
i,
|
|
44
|
+
e,
|
|
45
|
+
n
|
|
46
|
+
);
|
|
47
|
+
let K = 0;
|
|
48
|
+
for (let r = 0; r < t.length; ++r)
|
|
49
|
+
for (let f = 0; f < t[r].numberOfChannels; ++f)
|
|
50
|
+
w.getChannelData(K++).set(
|
|
51
|
+
t[r].getChannelData(f)
|
|
52
|
+
);
|
|
53
|
+
return w;
|
|
54
|
+
}, s.splitBufferbyChannel = function(A, t, e) {
|
|
55
|
+
t.numberOfChannels <= e && s.throw("Utils.splitBuffer: Insufficient number of channels. (" + t.numberOfChannels + " splitted by " + e + ")");
|
|
56
|
+
let n = 0;
|
|
57
|
+
const i = Math.ceil(t.numberOfChannels / e);
|
|
58
|
+
for (let w = 0; w < i; ++w) {
|
|
59
|
+
const K = A.createBuffer(
|
|
60
|
+
e,
|
|
61
|
+
t.length,
|
|
62
|
+
t.sampleRate
|
|
63
|
+
);
|
|
64
|
+
for (let r = 0; r < e; ++r)
|
|
65
|
+
n < t.numberOfChannels && K.getChannelData(r).set(
|
|
66
|
+
t.getChannelData(n++)
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
return bufferList;
|
|
70
|
+
}, s.getArrayBufferFromBase64String = function(A) {
|
|
71
|
+
const t = window.atob(A), e = new Uint8Array(t.length);
|
|
72
|
+
return e.forEach(
|
|
73
|
+
(n, i) => e[i] = t.charCodeAt(i)
|
|
74
|
+
), e.buffer;
|
|
75
|
+
};
|
|
76
|
+
const k = {
|
|
77
|
+
BASE64: "base64",
|
|
78
|
+
URL: "url"
|
|
79
|
+
};
|
|
80
|
+
function h(A, t, e) {
|
|
81
|
+
this._context = s.isAudioContext(A) ? A : s.throw("BufferList: Invalid BaseAudioContext."), this._options = {
|
|
82
|
+
dataType: k.BASE64,
|
|
83
|
+
verbose: !1
|
|
84
|
+
}, e && (e.dataType && s.isDefinedENUMEntry(k, e.dataType) && (this._options.dataType = e.dataType), e.verbose && (this._options.verbose = !!e.verbose)), this._bufferList = [], this._bufferData = this._options.dataType === k.BASE64 ? t : t.slice(0), this._numberOfTasks = this._bufferData.length, this._resolveHandler = null, this._rejectHandler = new Function();
|
|
85
|
+
}
|
|
86
|
+
h.prototype.load = function() {
|
|
87
|
+
return new Promise(this._promiseGenerator.bind(this));
|
|
88
|
+
}, h.prototype._promiseGenerator = function(A, t) {
|
|
89
|
+
typeof A != "function" ? s.throw("BufferList: Invalid Promise resolver.") : this._resolveHandler = A, typeof t == "function" && (this._rejectHandler = t);
|
|
90
|
+
for (let e = 0; e < this._bufferData.length; ++e)
|
|
91
|
+
this._options.dataType === k.BASE64 ? this._launchAsyncLoadTask(e) : this._launchAsyncLoadTaskXHR(e);
|
|
92
|
+
}, h.prototype._launchAsyncLoadTask = function(A) {
|
|
93
|
+
const t = this;
|
|
94
|
+
this._context.decodeAudioData(
|
|
95
|
+
s.getArrayBufferFromBase64String(this._bufferData[A]),
|
|
96
|
+
function(e) {
|
|
97
|
+
t._updateProgress(A, e);
|
|
98
|
+
},
|
|
99
|
+
function(e) {
|
|
100
|
+
t._updateProgress(A, null);
|
|
101
|
+
const n = 'BufferList: decoding ArrayByffer("' + A + '" from Base64-encoded data failed. (' + e + ")";
|
|
102
|
+
t._rejectHandler(n), s.throw(n);
|
|
103
|
+
}
|
|
104
|
+
);
|
|
105
|
+
}, h.prototype._launchAsyncLoadTaskXHR = function(A) {
|
|
106
|
+
const t = new XMLHttpRequest();
|
|
107
|
+
t.open("GET", this._bufferData[A]), t.responseType = "arraybuffer";
|
|
108
|
+
const e = this;
|
|
109
|
+
t.onload = function() {
|
|
110
|
+
if (t.status === 200)
|
|
111
|
+
e._context.decodeAudioData(
|
|
112
|
+
t.response,
|
|
113
|
+
function(n) {
|
|
114
|
+
e._updateProgress(A, n);
|
|
115
|
+
},
|
|
116
|
+
function(n) {
|
|
117
|
+
e._updateProgress(A, null);
|
|
118
|
+
const i = 'BufferList: decoding "' + e._bufferData[A] + '" failed. (' + n + ")";
|
|
119
|
+
e._rejectHandler(i), s.log(i);
|
|
120
|
+
}
|
|
121
|
+
);
|
|
122
|
+
else {
|
|
123
|
+
const n = 'BufferList: XHR error while loading "' + e._bufferData[A] + '". (' + t.status + " " + t.statusText + ")";
|
|
124
|
+
e._rejectHandler(n), s.log(n);
|
|
125
|
+
}
|
|
126
|
+
}, t.onerror = function(n) {
|
|
127
|
+
e._updateProgress(A, null), e._rejectHandler(), s.log(
|
|
128
|
+
'BufferList: XHR network failed on loading "' + e._bufferData[A] + '".'
|
|
129
|
+
);
|
|
130
|
+
}, t.send();
|
|
131
|
+
}, h.prototype._updateProgress = function(A, t) {
|
|
132
|
+
if (this._bufferList[A] = t, this._options.verbose) {
|
|
133
|
+
const e = this._options.dataType === k.BASE64 ? "ArrayBuffer(" + A + ") from Base64-encoded HRIR" : '"' + this._bufferData[A] + '"';
|
|
134
|
+
s.log("BufferList: " + e + " successfully loaded.");
|
|
135
|
+
}
|
|
136
|
+
if (--this._numberOfTasks === 0) {
|
|
137
|
+
const e = this._options.dataType === k.BASE64 ? this._bufferData.length + " AudioBuffers from Base64-encoded HRIRs" : this._bufferData.length + " files via XHR";
|
|
138
|
+
s.log("BufferList: " + e + " loaded successfully."), this._resolveHandler(this._bufferList);
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
const nA = {
|
|
142
|
+
DEFAULT: [0, 1, 2, 3],
|
|
143
|
+
SAFARI: [2, 0, 1, 3],
|
|
144
|
+
FUMA: [0, 3, 1, 2]
|
|
145
|
+
};
|
|
146
|
+
function W(A, t) {
|
|
147
|
+
this._context = A, this._splitter = this._context.createChannelSplitter(4), this._merger = this._context.createChannelMerger(4), this.input = this._splitter, this.output = this._merger, this.setChannelMap(t || nA.DEFAULT);
|
|
148
|
+
}
|
|
149
|
+
W.prototype.setChannelMap = function(A) {
|
|
150
|
+
Array.isArray(A) && (this._channelMap = A, this._splitter.disconnect(), this._splitter.connect(this._merger, 0, this._channelMap[0]), this._splitter.connect(this._merger, 1, this._channelMap[1]), this._splitter.connect(this._merger, 2, this._channelMap[2]), this._splitter.connect(this._merger, 3, this._channelMap[3]));
|
|
151
|
+
}, W.ChannelMap = nA;
|
|
152
|
+
function Z(A) {
|
|
153
|
+
this._context = A, this._splitter = this._context.createChannelSplitter(4), this._inY = this._context.createGain(), this._inZ = this._context.createGain(), this._inX = this._context.createGain(), this._m0 = this._context.createGain(), this._m1 = this._context.createGain(), this._m2 = this._context.createGain(), this._m3 = this._context.createGain(), this._m4 = this._context.createGain(), this._m5 = this._context.createGain(), this._m6 = this._context.createGain(), this._m7 = this._context.createGain(), this._m8 = this._context.createGain(), this._outY = this._context.createGain(), this._outZ = this._context.createGain(), this._outX = this._context.createGain(), this._merger = this._context.createChannelMerger(4), this._splitter.connect(this._inY, 1), this._splitter.connect(this._inZ, 2), this._splitter.connect(this._inX, 3), this._inY.gain.value = -1, this._inX.gain.value = -1, this._inY.connect(this._m0), this._inY.connect(this._m1), this._inY.connect(this._m2), this._inZ.connect(this._m3), this._inZ.connect(this._m4), this._inZ.connect(this._m5), this._inX.connect(this._m6), this._inX.connect(this._m7), this._inX.connect(this._m8), this._m0.connect(this._outY), this._m1.connect(this._outZ), this._m2.connect(this._outX), this._m3.connect(this._outY), this._m4.connect(this._outZ), this._m5.connect(this._outX), this._m6.connect(this._outY), this._m7.connect(this._outZ), this._m8.connect(this._outX), this._splitter.connect(this._merger, 0, 0), this._outY.connect(this._merger, 0, 1), this._outZ.connect(this._merger, 0, 2), this._outX.connect(this._merger, 0, 3), this._outY.gain.value = -1, this._outX.gain.value = -1, this.setRotationMatrix3(new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1])), this.input = this._splitter, this.output = this._merger;
|
|
154
|
+
}
|
|
155
|
+
Z.prototype.setRotationMatrix3 = function(A) {
|
|
156
|
+
this._m0.gain.value = A[0], this._m1.gain.value = A[1], this._m2.gain.value = A[2], this._m3.gain.value = A[3], this._m4.gain.value = A[4], this._m5.gain.value = A[5], this._m6.gain.value = A[6], this._m7.gain.value = A[7], this._m8.gain.value = A[8];
|
|
157
|
+
}, Z.prototype.setRotationMatrix4 = function(A) {
|
|
158
|
+
this._m0.gain.value = A[0], this._m1.gain.value = A[1], this._m2.gain.value = A[2], this._m3.gain.value = A[4], this._m4.gain.value = A[5], this._m5.gain.value = A[6], this._m6.gain.value = A[8], this._m7.gain.value = A[9], this._m8.gain.value = A[10];
|
|
159
|
+
}, Z.prototype.getRotationMatrix3 = function() {
|
|
160
|
+
return [
|
|
161
|
+
this._m0.gain.value,
|
|
162
|
+
this._m1.gain.value,
|
|
163
|
+
this._m2.gain.value,
|
|
164
|
+
this._m3.gain.value,
|
|
165
|
+
this._m4.gain.value,
|
|
166
|
+
this._m5.gain.value,
|
|
167
|
+
this._m6.gain.value,
|
|
168
|
+
this._m7.gain.value,
|
|
169
|
+
this._m8.gain.value
|
|
170
|
+
];
|
|
171
|
+
}, Z.prototype.getRotationMatrix4 = function() {
|
|
172
|
+
const A = new Float32Array(16);
|
|
173
|
+
return A[0] = this._m0.gain.value, A[1] = this._m1.gain.value, A[2] = this._m2.gain.value, A[4] = this._m3.gain.value, A[5] = this._m4.gain.value, A[6] = this._m5.gain.value, A[8] = this._m6.gain.value, A[9] = this._m7.gain.value, A[10] = this._m8.gain.value, A;
|
|
174
|
+
};
|
|
175
|
+
function S(A, t) {
|
|
176
|
+
this._context = A, this._active = !1, this._isBufferLoaded = !1, this._buildAudioGraph(), t && this.setHRIRBufferList(t), this.enable();
|
|
177
|
+
}
|
|
178
|
+
S.prototype._buildAudioGraph = function() {
|
|
179
|
+
this._splitterWYZX = this._context.createChannelSplitter(4), this._mergerWY = this._context.createChannelMerger(2), this._mergerZX = this._context.createChannelMerger(2), this._convolverWY = this._context.createConvolver(), this._convolverZX = this._context.createConvolver(), this._splitterWY = this._context.createChannelSplitter(2), this._splitterZX = this._context.createChannelSplitter(2), this._inverter = this._context.createGain(), this._mergerBinaural = this._context.createChannelMerger(2), this._summingBus = this._context.createGain(), this._splitterWYZX.connect(this._mergerWY, 0, 0), this._splitterWYZX.connect(this._mergerWY, 1, 1), this._splitterWYZX.connect(this._mergerZX, 2, 0), this._splitterWYZX.connect(this._mergerZX, 3, 1), this._mergerWY.connect(this._convolverWY), this._mergerZX.connect(this._convolverZX), this._convolverWY.connect(this._splitterWY), this._convolverZX.connect(this._splitterZX), this._splitterWY.connect(this._mergerBinaural, 0, 0), this._splitterWY.connect(this._mergerBinaural, 0, 1), this._splitterWY.connect(this._mergerBinaural, 1, 0), this._splitterWY.connect(this._inverter, 1, 0), this._inverter.connect(this._mergerBinaural, 0, 1), this._splitterZX.connect(this._mergerBinaural, 0, 0), this._splitterZX.connect(this._mergerBinaural, 0, 1), this._splitterZX.connect(this._mergerBinaural, 1, 0), this._splitterZX.connect(this._mergerBinaural, 1, 1), this._convolverWY.normalize = !1, this._convolverZX.normalize = !1, this._inverter.gain.value = -1, this.input = this._splitterWYZX, this.output = this._summingBus;
|
|
180
|
+
}, S.prototype.setHRIRBufferList = function(A) {
|
|
181
|
+
this._isBufferLoaded || (this._convolverWY.buffer = A[0], this._convolverZX.buffer = A[1], this._isBufferLoaded = !0);
|
|
182
|
+
}, S.prototype.enable = function() {
|
|
183
|
+
this._mergerBinaural.connect(this._summingBus), this._active = !0;
|
|
184
|
+
}, S.prototype.disable = function() {
|
|
185
|
+
this._mergerBinaural.disconnect(), this._active = !1;
|
|
186
|
+
};
|
|
187
|
+
const sA = [
|
|
188
|
+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD+/wIA9v8QAPv/CwD+/wcA/v8MAP//AQD7/wEACAAEAPj/+v8YABAA7v/n//v/9P/M/8D//f34/R38EvzxAfEBtA2lDTcBJQFJ9T71FP0D/cD1tfVo/Wv9uPTO9PPmOufc/U/+agL3Aisc/RxuGKEZBv3j/iYMzQ2gAzsEQQUABiQFrASzA5cB2QmyCy0AtgR4AeYGtfgAA2j5OQHP+scArPsMBJgEggIEBtz6+QVq/pj/aPg8BPP3gQEi+jEAof0fA1v9+/7S+8IBjvwd/xD4IADL/Pf9zvs+/l3+wgB7/+L+7fzFADH9kf6A+n3+DP6+/TP9xP68/pn+w/26/i39YgA0/u790Pt9/kD+7v1s/Wb+8f4C/1P+pf/x/cT+6/3p/Xz9ff5F/0f9G/4r/6v/4P5L/sL+ff7c/pj+Ov7X/UT+9P5G/oz+6v6A/2D+9/6P/8r/bP7m/ij+C//e/tj/Gf4e/9v+FwDP/lz/sP7F/2H+rv/G/s7/Hf7y/4P+NAD9/k0AK/6w/zP/hACh/sX/gf44AOP+dgCm/iUAk/5qAOD+PwC+/jEAWP4CAAr/bQBw/vv/zf5iACD/OgCS/uD/Cv9oAAb/CgDK/kwA//5tACH/TgCg/h4AHP9aABP/JADP/hEAYv9gAAj/3f8m/ysAYv8gACX/8/8k/ysAXv8bABH//v8j/ygAa/8qAAD/9f9g/1YAWf8JACH/AgB2/z4AXP/w/z3/FgB2/ykAX//9/z//EwCV/zUAS//n/1T/GACK/x4ATv/0/4P/QQB4//v/WP/2/3X/HAB8//P/V//3/2f/AQBh/9v/Tf/x/5P/IwCI/wMAf/8hAKP/JACZ/xUAiv8nAK//HgCr/yMAm/8uAMz/OACi/yQAqf87AMT/MwCY/yUAtP9FAMH/KgCu/ycAyP85AMv/IwCz/xoA1f8qAMn/FgC8/xQA4/8nAMX/CwDJ/xQA4f8ZAMH/BgDO/xQA4f8WAMP/BwDU/xQA4P8QAMH/AQDb/xQA3P8JAMP/AgDh/xIA2v8EAMj/AgDk/w0A1f/+/8v/AwDm/wwA0v/+/9H/BgDl/wkAzv/8/9T/BwDk/wcAzv/8/9r/CQDi/wQAzf/8/9//CADf////0P/9/+L/BwDd//7/0////+T/BgDb//z/1f8AAOf/BQDZ//v/2v8CAOb/AwDY//v/3v8EAOb/AgDY//3/4f8FAOX/AQDZ//7/5P8GAOP/AADb/wAA5/8GAOH////d/wIA5/8FAOD////f/wMA6P8FAOD////h/wQA6P8EAN7////h/wUA4v8DANv/AQDd/wQA3P8CANn/AgDb/wMA2/8CANv/AgDd/wIA3v8CAOH/AQDj/wEA",
|
|
189
|
+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAAAAAAA/f8CAP//AQD//wEA//8BAP3/AAACAP7/+f8AAAIA/P8FAAQA8/8AABoA+f/V/wQAHQDO/xoAQQBO/ocA0Px1/ucHW/4UCm8HLO6kAjv8/fCRDdAAYfPiBIgFXveUCM0GBvh6/nz7rf0J/QcQSRVdBgoBSgFR62r9NP8m+LoEAvriBVAAiAPmABEGMf2l+SwBjva6/G4A//8P/CYDMgXm/R0CKAE6/fcBBwAtAND+kQA0A5UDhwFs/8IB8fydAEP/A/8v/e7/mP8j/2YBIwE3Av0AYv+uAOD8lgAg/wwAIf/L/n0Ae//OAJMB3P/XAF//XwCM/08AB/8NAEf/rf4jAT3/lgAJAP4AHgDpAO8AUf9L/07/Qf8KAOD/x/+D/3sATQCDAMoA0f79/+L/EQDt/7EAqv+S/7IAuv/o/wgAc//X//H/SwCm/+3/Yf/B/yoAAADI/7X/AwBg/5EATgCX/xYA/P+q/00AVACY/6v/BADD/zwALQCN/8z/KQDu/ygAEgCZ/6f/VQDC//T/KQCs/7P/UgAfAO7/NgC8/57/awAZAPP/+P/V/8z/bQBBAL//DgD0/+T/TABBAMz/CwAxAPz/SQBqALn/BgALAPz/EAA7AIz/3/8iAAUA//8kALf/y/9VABQA+v81AOj/0P9cAB4A+f8WAOr/vv83ABgAw/8JAOj/4f8nACIAsf/y/w4A3v8gACQAxP/n/ycA7P8WAC0Ayf/U/ycA9v/7/yUA0P/P/zUABADc/xUA5P/J/zcACwDS/xUA9P/m/zAACQDX/+3/9v/2/yQACgDZ/+P/AwAKABYA///b/9j/EQALABkADgD6/+7/GwD4/w4A8P/w//j/EgAEAAUA9f/1/wQAGgD4/wAA5////wAAGQD1////7f8FAAUAFQDv/wAA6v8LAAcAFQDs/wEA9P8SAAYACwDr//7/AQASAAYABQDv/wIAAwAWAAIAAgDv/wAABgATAAEA/f/u/wQABgAQAPr/+P/z/wUACQALAPj/9//4/wgABwAKAPT/+f/5/w4ABwAIAPT/+//9/w4AAwADAPH//f///w8A//8BAPP///8BAA0A/f/+//X/AgACAA0A+//8//b/BAADAAoA+f/7//n/BgADAAcA+P/7//v/BwABAAQA+P/8//3/CQABAAIA9//9////CQD/////+P///wAACAD9//7/+f8AAAAABwD8//3/+v8CAAAABgD7//z//P8EAAAABAD6//3//P8FAP//AgD6//7//v8FAP7/AQD7//////8GAP7/AAD7/wEA//8EAP3/AAD9/wEA/v8DAP3/AAD9/wIA/v8CAP3/AQD9/wIA/v8CAP7/AQD+/wEA"
|
|
190
|
+
], V = {
|
|
191
|
+
AMBISONIC: "ambisonic",
|
|
192
|
+
BYPASS: "bypass",
|
|
193
|
+
OFF: "off"
|
|
194
|
+
};
|
|
195
|
+
function c(A, t) {
|
|
196
|
+
this._context = s.isAudioContext(A) ? A : s.throw("FOARenderer: Invalid BaseAudioContext."), this._config = {
|
|
197
|
+
channelMap: W.ChannelMap.DEFAULT,
|
|
198
|
+
renderingMode: V.AMBISONIC
|
|
199
|
+
}, t && (t.channelMap && (Array.isArray(t.channelMap) && t.channelMap.length === 4 ? this._config.channelMap = t.channelMap : s.throw(
|
|
200
|
+
"FOARenderer: Invalid channel map. (got " + t.channelMap + ")"
|
|
201
|
+
)), t.hrirPathList && (Array.isArray(t.hrirPathList) && t.hrirPathList.length === 2 ? this._config.pathList = t.hrirPathList : s.throw(
|
|
202
|
+
"FOARenderer: Invalid HRIR URLs. It must be an array with 2 URLs to HRIR files. (got " + t.hrirPathList + ")"
|
|
203
|
+
)), t.renderingMode && (Object.values(V).includes(t.renderingMode) ? this._config.renderingMode = t.renderingMode : s.log(
|
|
204
|
+
"FOARenderer: Invalid rendering mode order. (got" + t.renderingMode + ') Fallbacks to the mode "ambisonic".'
|
|
205
|
+
))), this._buildAudioGraph(), this._tempMatrix4 = new Float32Array(16), this._isRendererReady = !1;
|
|
206
|
+
}
|
|
207
|
+
c.prototype._buildAudioGraph = function() {
|
|
208
|
+
this.input = this._context.createGain(), this.output = this._context.createGain(), this._bypass = this._context.createGain(), this._foaRouter = new W(this._context, this._config.channelMap), this._foaRotator = new Z(this._context), this._foaConvolver = new S(this._context), this.input.connect(this._foaRouter.input), this.input.connect(this._bypass), this._foaRouter.output.connect(this._foaRotator.input), this._foaRotator.output.connect(this._foaConvolver.input), this._foaConvolver.output.connect(this.output), this.input.channelCount = 4, this.input.channelCountMode = "explicit", this.input.channelInterpretation = "discrete";
|
|
209
|
+
}, c.prototype._initializeCallback = function(A, t) {
|
|
210
|
+
(this._config.pathList ? new h(this._context, this._config.pathList, { dataType: "url" }) : new h(this._context, sA)).load().then(
|
|
211
|
+
(function(n) {
|
|
212
|
+
this._foaConvolver.setHRIRBufferList(n), this.setRenderingMode(this._config.renderingMode), this._isRendererReady = !0, s.log("FOARenderer: HRIRs loaded successfully. Ready."), A();
|
|
213
|
+
}).bind(this),
|
|
214
|
+
function() {
|
|
215
|
+
const n = "FOARenderer: HRIR loading/decoding failed.";
|
|
216
|
+
t(n), s.throw(n);
|
|
217
|
+
}
|
|
218
|
+
);
|
|
219
|
+
}, c.prototype.initialize = function() {
|
|
220
|
+
return s.log(
|
|
221
|
+
"FOARenderer: Initializing... (mode: " + this._config.renderingMode + ")"
|
|
222
|
+
), new Promise(this._initializeCallback.bind(this));
|
|
223
|
+
}, c.prototype.setChannelMap = function(A) {
|
|
224
|
+
this._isRendererReady && A.toString() !== this._config.channelMap.toString() && (s.log(
|
|
225
|
+
"Remapping channels ([" + this._config.channelMap.toString() + "] -> [" + A.toString() + "])."
|
|
226
|
+
), this._config.channelMap = A.slice(), this._foaRouter.setChannelMap(this._config.channelMap));
|
|
227
|
+
}, c.prototype.setRotationMatrix3 = function(A) {
|
|
228
|
+
this._isRendererReady && this._foaRotator.setRotationMatrix3(A);
|
|
229
|
+
}, c.prototype.setRotationMatrix4 = function(A) {
|
|
230
|
+
this._isRendererReady && this._foaRotator.setRotationMatrix4(A);
|
|
231
|
+
}, c.prototype.setRotationMatrixFromCamera = function(A) {
|
|
232
|
+
this._isRendererReady && (s.invertMatrix4(this._tempMatrix4, A.elements), this._foaRotator.setRotationMatrix4(this._tempMatrix4));
|
|
233
|
+
}, c.prototype.setRenderingMode = function(A) {
|
|
234
|
+
if (A !== this._config.renderingMode) {
|
|
235
|
+
switch (A) {
|
|
236
|
+
case V.AMBISONIC:
|
|
237
|
+
this._foaConvolver.enable(), this._bypass.disconnect();
|
|
238
|
+
break;
|
|
239
|
+
case V.BYPASS:
|
|
240
|
+
this._foaConvolver.disable(), this._bypass.connect(this.output);
|
|
241
|
+
break;
|
|
242
|
+
case V.OFF:
|
|
243
|
+
this._foaConvolver.disable(), this._bypass.disconnect();
|
|
244
|
+
break;
|
|
245
|
+
default:
|
|
246
|
+
s.log(
|
|
247
|
+
'FOARenderer: Rendering mode "' + A + '" is not supported.'
|
|
248
|
+
);
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
this._config.renderingMode = A, s.log("FOARenderer: Rendering mode changed. (" + A + ")");
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
function J(A, t, e) {
|
|
255
|
+
this._context = A, this._active = !1, this._isBufferLoaded = !1, this._ambisonicOrder = t, this._numberOfChannels = (this._ambisonicOrder + 1) * (this._ambisonicOrder + 1), this._buildAudioGraph(), e && this.setHRIRBufferList(e), this.enable();
|
|
256
|
+
}
|
|
257
|
+
J.prototype._buildAudioGraph = function() {
|
|
258
|
+
const A = Math.ceil(this._numberOfChannels / 2);
|
|
259
|
+
this._inputSplitter = this._context.createChannelSplitter(this._numberOfChannels), this._stereoMergers = [], this._convolvers = [], this._stereoSplitters = [], this._positiveIndexSphericalHarmonics = this._context.createGain(), this._negativeIndexSphericalHarmonics = this._context.createGain(), this._inverter = this._context.createGain(), this._binauralMerger = this._context.createChannelMerger(2), this._outputGain = this._context.createGain();
|
|
260
|
+
for (let t = 0; t < A; ++t)
|
|
261
|
+
this._stereoMergers[t] = this._context.createChannelMerger(2), this._convolvers[t] = this._context.createConvolver(), this._stereoSplitters[t] = this._context.createChannelSplitter(2), this._convolvers[t].normalize = !1;
|
|
262
|
+
for (let t = 0; t <= this._ambisonicOrder; ++t)
|
|
263
|
+
for (let e = -t; e <= t; e++) {
|
|
264
|
+
const n = t * t + t + e, i = Math.floor(n / 2);
|
|
265
|
+
this._inputSplitter.connect(
|
|
266
|
+
this._stereoMergers[i],
|
|
267
|
+
n,
|
|
268
|
+
n % 2
|
|
269
|
+
), this._stereoMergers[i].connect(this._convolvers[i]), this._convolvers[i].connect(this._stereoSplitters[i]), e >= 0 ? this._stereoSplitters[i].connect(
|
|
270
|
+
this._positiveIndexSphericalHarmonics,
|
|
271
|
+
n % 2
|
|
272
|
+
) : this._stereoSplitters[i].connect(
|
|
273
|
+
this._negativeIndexSphericalHarmonics,
|
|
274
|
+
n % 2
|
|
275
|
+
);
|
|
276
|
+
}
|
|
277
|
+
this._positiveIndexSphericalHarmonics.connect(this._binauralMerger, 0, 0), this._positiveIndexSphericalHarmonics.connect(this._binauralMerger, 0, 1), this._negativeIndexSphericalHarmonics.connect(this._binauralMerger, 0, 0), this._negativeIndexSphericalHarmonics.connect(this._inverter), this._inverter.connect(this._binauralMerger, 0, 1), this._inverter.gain.value = -1, this.input = this._inputSplitter, this.output = this._outputGain;
|
|
278
|
+
}, J.prototype.setHRIRBufferList = function(A) {
|
|
279
|
+
if (!this._isBufferLoaded) {
|
|
280
|
+
for (let t = 0; t < A.length; ++t)
|
|
281
|
+
this._convolvers[t].buffer = A[t];
|
|
282
|
+
this._isBufferLoaded = !0;
|
|
283
|
+
}
|
|
284
|
+
}, J.prototype.enable = function() {
|
|
285
|
+
this._binauralMerger.connect(this._outputGain), this._active = !0;
|
|
286
|
+
}, J.prototype.disable = function() {
|
|
287
|
+
this._binauralMerger.disconnect(), this._active = !1;
|
|
288
|
+
};
|
|
289
|
+
function eA(A, t) {
|
|
290
|
+
return A === t ? 1 : 0;
|
|
291
|
+
}
|
|
292
|
+
function rA(A, t, e, n, i) {
|
|
293
|
+
const w = (n + t) * (2 * t + 1) + (e + t);
|
|
294
|
+
A[t - 1][w].gain.value = i;
|
|
295
|
+
}
|
|
296
|
+
function g(A, t, e, n) {
|
|
297
|
+
const i = (n + t) * (2 * t + 1) + (e + t);
|
|
298
|
+
return A[t - 1][i].gain.value;
|
|
299
|
+
}
|
|
300
|
+
function D(A, t, e, n, i) {
|
|
301
|
+
return n === i ? g(A, 1, t, 1) * g(A, i - 1, e, i - 1) - g(A, 1, t, -1) * g(A, i - 1, e, -i + 1) : n === -i ? g(A, 1, t, 1) * g(A, i - 1, e, -i + 1) + g(A, 1, t, -1) * g(A, i - 1, e, i - 1) : g(A, 1, t, 0) * g(A, i - 1, e, n);
|
|
302
|
+
}
|
|
303
|
+
function oA(A, t, e, n) {
|
|
304
|
+
return D(A, 0, t, e, n);
|
|
305
|
+
}
|
|
306
|
+
function aA(A, t, e, n) {
|
|
307
|
+
if (t === 0)
|
|
308
|
+
return D(A, 1, 1, e, n) + D(A, -1, -1, e, n);
|
|
309
|
+
if (t > 0) {
|
|
310
|
+
const i = eA(t, 1);
|
|
311
|
+
return D(A, 1, t - 1, e, n) * Math.sqrt(1 + i) - D(A, -1, -t + 1, e, n) * (1 - i);
|
|
312
|
+
} else {
|
|
313
|
+
const i = eA(t, -1);
|
|
314
|
+
return D(A, 1, t + 1, e, n) * (1 - i) + D(A, -1, -t - 1, e, n) * Math.sqrt(1 + i);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
function fA(A, t, e, n) {
|
|
318
|
+
return t === 0 ? 0 : t > 0 ? D(A, 1, t + 1, e, n) + D(A, -1, -t - 1, e, n) : D(A, 1, t - 1, e, n) - D(A, -1, -t + 1, e, n);
|
|
319
|
+
}
|
|
320
|
+
function hA(A, t, e) {
|
|
321
|
+
const n = eA(A, 0), i = Math.abs(t) === e ? 1 / (2 * e * (2 * e - 1)) : 1 / ((e + t) * (e - t));
|
|
322
|
+
return [
|
|
323
|
+
Math.sqrt((e + A) * (e - A) * i),
|
|
324
|
+
0.5 * (1 - 2 * n) * Math.sqrt((1 + n) * (e + Math.abs(A) - 1) * (e + Math.abs(A)) * i),
|
|
325
|
+
-0.5 * (1 - n) * Math.sqrt((e - Math.abs(A) - 1) * (e - Math.abs(A))) * i
|
|
326
|
+
];
|
|
327
|
+
}
|
|
328
|
+
function DA(A, t) {
|
|
329
|
+
for (let e = -t; e <= t; e++)
|
|
330
|
+
for (let n = -t; n <= t; n++) {
|
|
331
|
+
const i = hA(e, n, t);
|
|
332
|
+
Math.abs(i[0]) > 0 && (i[0] *= oA(A, e, n, t)), Math.abs(i[1]) > 0 && (i[1] *= aA(A, e, n, t)), Math.abs(i[2]) > 0 && (i[2] *= fA(A, e, n, t)), rA(
|
|
333
|
+
A,
|
|
334
|
+
t,
|
|
335
|
+
e,
|
|
336
|
+
n,
|
|
337
|
+
i[0] + i[1] + i[2]
|
|
338
|
+
);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
function iA(A) {
|
|
342
|
+
for (let t = 2; t <= A.length; t++)
|
|
343
|
+
DA(A, t);
|
|
344
|
+
}
|
|
345
|
+
function O(A, t) {
|
|
346
|
+
this._context = A, this._ambisonicOrder = t;
|
|
347
|
+
const e = (t + 1) * (t + 1);
|
|
348
|
+
this._splitter = this._context.createChannelSplitter(e), this._merger = this._context.createChannelMerger(e), this._gainNodeMatrix = [];
|
|
349
|
+
let n, i, w, K, r;
|
|
350
|
+
for (let f = 1; f <= t; f++) {
|
|
351
|
+
n = f * f, i = 2 * f + 1, this._gainNodeMatrix[f - 1] = [];
|
|
352
|
+
for (let AA = 0; AA < i; AA++) {
|
|
353
|
+
w = n + AA;
|
|
354
|
+
for (let tA = 0; tA < i; tA++)
|
|
355
|
+
K = n + tA, r = AA * i + tA, this._gainNodeMatrix[f - 1][r] = this._context.createGain(), this._splitter.connect(
|
|
356
|
+
this._gainNodeMatrix[f - 1][r],
|
|
357
|
+
w
|
|
358
|
+
), this._gainNodeMatrix[f - 1][r].connect(
|
|
359
|
+
this._merger,
|
|
360
|
+
0,
|
|
361
|
+
K
|
|
362
|
+
);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
this._splitter.connect(this._merger, 0, 0), this.setRotationMatrix3(new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1])), this.input = this._splitter, this.output = this._merger;
|
|
366
|
+
}
|
|
367
|
+
O.prototype.setRotationMatrix3 = function(A) {
|
|
368
|
+
this._gainNodeMatrix[0][0].gain.value = -A[0], this._gainNodeMatrix[0][1].gain.value = A[1], this._gainNodeMatrix[0][2].gain.value = -A[2], this._gainNodeMatrix[0][3].gain.value = -A[3], this._gainNodeMatrix[0][4].gain.value = A[4], this._gainNodeMatrix[0][5].gain.value = -A[5], this._gainNodeMatrix[0][6].gain.value = -A[6], this._gainNodeMatrix[0][7].gain.value = A[7], this._gainNodeMatrix[0][8].gain.value = -A[8], iA(this._gainNodeMatrix);
|
|
369
|
+
}, O.prototype.setRotationMatrix4 = function(A) {
|
|
370
|
+
this._gainNodeMatrix[0][0].gain.value = -A[0], this._gainNodeMatrix[0][1].gain.value = A[1], this._gainNodeMatrix[0][2].gain.value = -A[2], this._gainNodeMatrix[0][3].gain.value = -A[4], this._gainNodeMatrix[0][4].gain.value = A[5], this._gainNodeMatrix[0][5].gain.value = -A[6], this._gainNodeMatrix[0][6].gain.value = -A[8], this._gainNodeMatrix[0][7].gain.value = A[9], this._gainNodeMatrix[0][8].gain.value = -A[10], iA(this._gainNodeMatrix);
|
|
371
|
+
}, O.prototype.getRotationMatrix3 = function() {
|
|
372
|
+
const A = new Float32Array(9);
|
|
373
|
+
return A[0] = -this._gainNodeMatrix[0][0].gain.value, A[1] = this._gainNodeMatrix[0][1].gain.value, A[2] = -this._gainNodeMatrix[0][2].gain.value, A[4] = -this._gainNodeMatrix[0][3].gain.value, A[5] = this._gainNodeMatrix[0][4].gain.value, A[6] = -this._gainNodeMatrix[0][5].gain.value, A[8] = -this._gainNodeMatrix[0][6].gain.value, A[9] = this._gainNodeMatrix[0][7].gain.value, A[10] = -this._gainNodeMatrix[0][8].gain.value, A;
|
|
374
|
+
}, O.prototype.getRotationMatrix4 = function() {
|
|
375
|
+
const A = new Float32Array(16);
|
|
376
|
+
return A[0] = -this._gainNodeMatrix[0][0].gain.value, A[1] = this._gainNodeMatrix[0][1].gain.value, A[2] = -this._gainNodeMatrix[0][2].gain.value, A[4] = -this._gainNodeMatrix[0][3].gain.value, A[5] = this._gainNodeMatrix[0][4].gain.value, A[6] = -this._gainNodeMatrix[0][5].gain.value, A[8] = -this._gainNodeMatrix[0][6].gain.value, A[9] = this._gainNodeMatrix[0][7].gain.value, A[10] = -this._gainNodeMatrix[0][8].gain.value, A;
|
|
377
|
+
}, O.prototype.getAmbisonicOrder = function() {
|
|
378
|
+
return this._ambisonicOrder;
|
|
379
|
+
};
|
|
380
|
+
const gA = [
|
|
381
|
+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD+/wQA8/8YAP3/CgACAAAA//8CAAYA8/8AAPH/CgDv/97/e/+y/9P+UQDwAHUBEwV7/pP8P/y09bsDwAfNBGYIFf/Y+736+fP890Hv8AGcC3T/vwYy+S70AAICA3AD4AagBw0R4w3ZEAcN8RVYAV8Q8P2z+kECHwdK/jIG0QNKAYUElf8IClj7BgjX+/f8j/l3/5f/6fkK+xz8FP0v/nj/Mf/n/FcBPfvH/1H3+gBP/Hf8cfiCAR/54QBh+UQAcvkzAWL8TP13+iD/V/73+wv9Kv+Y/hv+xPz7/UL83//a/z/9AP6R/5L+jf26/P3+rP26/tD8nP7B/Pv+WP1V/sP9gv91/3P9xP3J/nv/GP5S/sb+IP8v/9j/dv7U/pr+6v+u/Z3/sv5cAOr9Q/83/+n/zP5x/57+2//k/nwA/v01//L+SACB/sD/Ff81AJT+TgDp/ocAm/5dAFT+MgD+/pMAW/7o/yH/xQDA/kkA9P6LAL3+pAC0/iQAz/5UALD+UwAt/3UAhf4UAA//pwC+/joAz/5aAAv/fwDY/iMAIf+uAPP+ZAAc/0QAy/4xAB7/TgDs/goADP8wAEL/NwDo/ub/Uf9BAC3/+v9F/y4ARP9HAFP/EQA3/xMATP81AG3/HQAu/wgAaP9FACb/9f9B/y0AUP8rAED/CwBV/z4AW/8TAGH/BQBK/xsAfv8eAFn/AgB3/zwAff8RAGj//v+E/yAAb//0/3n/FwBz/xcAiv8PAHn/FQCJ/xgAg//x/3j/EQCa/ycAff/w/47/HwCI//X/iv/7/43/JQCM/+n/kP8AAJb/JACj//7/oP8ZAML/SwCo/w4Atv8tAMb/PACr/xcAwP9HAMP/OADF/y4A0f9IANL/NwC//zEA0f9LAMb/MAC8/y4A3f9GAMH/FQDQ/yYA2/8sAMT/AwDX/xkA3v8SAM3/9v/c/w8A4f8LAMj/8f/h/xQA2P8CAMn/8//j/xQA0v/7/9H//P/i/xEA0v/1/9L//f/j/w0A0f/x/9f//v/k/wgAz//u/9z/AwDg/wMA0P/v/9//BQDf////0v/y/+D/CADc//3/0v/2/+L/CgDa//r/1v/5/+T/CgDY//j/2f/9/+T/CADY//f/3P8AAOT/BwDY//f/4P8EAOP/BADZ//j/4v8GAOL/AwDa//r/5f8IAOH/AQDc//3/5v8JAOD//v/f////5v8IAOD//v/h/wIA5/8HAOD//f/j/wMA5/8GAOD//f/l/wYA5v8EAOD//v/m/wYA5f8CAOL////n/wYA5P8BAOH/AADl/wUA4f///+H/AQDk/wMA4f///+T/AQDm/wEA5////+r/AADt/wAA7/////P/AAD1////",
|
|
382
|
+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD//////v///wAAAAAAAAAAAQAAAAAA///9/wAABAD+//n/AgAJAAAA+v/+//f/DAAdAPv/+v+l/8L+jf/4/vgAdwVPAQACLQBo+Qj/Ev7o/N3/VgCbA08Bxf+L+yn9J/2HCU8FmgBvDe30Rv5h/LT09gi5CxkA5gOi8/30kwEM+4YJMf2nBmkJJAQQBLoFtvvv+m4A7PF6/R0Bif3qAuf8WARAAf4GyABG/BIAwvr4Acv8U//c/yIC8AEn/B8Daf2CAgMBAf3MAN38vgLK/UT/QwCyAPYClPyvAW/+pQAoASD+zP+R/IYC1f7C/nEBQP96AZb+1QAIAM//yQE7/tkAZ/7TAXL/w/8+AIsAtwB7/24A4v9a/z4A7v4iADb/dwCj/23/kgBOANUAIv8lAKEAxP9gAK7/BwCP/5kA7/9v/0wAzv9DAGT/3/9vAHv/6P+q/xUA7P8XAO//uv/g/2UAEgCV/wEATADM/+7/+//j/+D/9v/i//j/IgD+/xoAxf/6/z4A5/+8/9D/QwDq/+3/OQDT/zUAIgA/APP/PgAjAPD/BwAGACAADAC3//b/HAA3AN//RgDN/w8AIAACAN//GQBDACEAIwA+ACoAJQAeAPz/KgAYAPr/DgAEABYAIgAcAMT/7f8OAOL/5P/2//L/9P8GAPT/7v/8/+7/6v/t//z/AgAUAOL//P8VAAMA4/8IAPb/+P8MAAoA5v8NAAsA9v///wEAAAD9//n/9/8JAAYA7v/6/wMA+f8GAAEA7f/7/xgACAD4/w8A///3/w0A+f8BAAIA/P/5/xIA///9//r/7v/+/xYACQD///H/CwDz/wEADgAHAPP/FADn/+3/AQD5//f/AgD7/wEABwAMAAEADQD8//n/8f8OAPX/BAD+//X/+v8WAAQA+f8CAAEA7/8QAAEA/P8DAAUA9f8KAAwA9v8DAAUA+f8OAAoA9f/7/w0A+v8EAAgA8P/6/woA+//8/wkA+P/3/woA+//8/wcA9//1/woAAwD5/wcA/P/3/w0AAwD3/wEABAD2/wkABgD3/wEABQD3/wUABQD3//v/BwD3/wMABQD3//r/CQD7////BQD6//n/CQD9//3/BAD9//j/BwAAAPv/AwD///j/BwABAPn/AQABAPn/BQACAPn///8DAPr/AwADAPr//v8EAPv/AQADAPv//P8FAP3///8DAPz/+/8FAP7//f8CAP7/+/8EAP///P8BAP//+/8DAAEA+/8AAAEA+/8CAAIA+////wIA/f8AAAIA/P/+/wIA/f8AAAIA/f/9/wMA/////wEA///+/wIA/////wAAAAD+/wAAAAD/////AAD//wAA//8AAP//AAD//wAA",
|
|
383
|
+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD////////+//////8AAP////8AAP//AAAAAPz//f8IAAMA9////w4AAQD6/wwA8//+/y8Afv/0/2H/UP5gAbH+2QG1B2cAVAIh/l32FPyM/nACPQDV/+UEo/Q6AQwCu/oLD9kF8QJA/Uz+Wf2KCOcC+wUKBsL5aQBQ97rwOPiPAvn5CAl8AHEDkQPcAA8Bn/lIAdz7HQF1+xz9cAM4/94E4gDKAun+cgPYAYr9JgJr/bf+ivxz/MoBgv5UA8EBSgAQAJ7/UgEk/cQB7f63/sD/vf4XAhT/BQFCADYAnQGI/9EBtv3hALD/vP+c/3H/TgIN/1sBpf8yAP3/4f8qABr+1f8OAJ3/dwAGADEBnv9JAPz/IQBwAIH/jgAS/4wAsACTAOn/DQDCALn/ZQCSAAIAAwD1/9//jv9aADQA/v9EAB0AfgA8AAQACgB9APr/IAARAPT/5v9xACAABAAHAGUAt/89AC4ACgAjAMP/+v/9/xYA7f/1/+D/7P87AC0Auv8RAAcA9/8FAC8A2//y/xIAEwAaADQAJADp/zoAAgAfABIA2f/e/zUA+P/6/w4A9//A/zcA4//P//T/5f/R////EwDb/w4A8/8BABkANADh/xEA+f/0/wIAHADc//j/GwD1//f/GADs/+v/EAAAAPz/EgD3/+r/FgAMAAkAGAD9/+z/IQAQAPH/GQD3//z/CgAfAOX/AgD8//H/BAATAOv/+v///wIABAAdAOj/BQAPAAcAAQATAOz/8/8JAAkA6f8VAOv/+f8QABUA/v8OAO3/+P8KABUA9f8FAPv/5/8TAA0A7f8XAAkAAQAJABYA4/8WAAcACgANABEA7v8EAP7/AAD+/wMA9//7/xAAAQD8/wQA+f/7/wMABgDq/wAA+v/3/wYACQD1//3/BAD9/wgADgDw//r/AgD6/wEACADv//j/BQD///X/BwDu//j/AgACAPP/BAD2//n/BAAGAPb/BAD8//3/BQAJAPL/AwD+//3/BAAIAPP//f8DAPz/AAAGAPP/+/8CAP7//f8FAPX/+f8DAAAA/P8EAPf/+v8GAAMA+/8EAPv/+/8GAAQA+v8CAP///P8EAAUA+f8AAP///f8CAAUA+P///wEA/v8BAAUA+f/+/wIAAAD//wUA+v/9/wMAAQD9/wQA+//9/wMAAgD8/wMA/P/9/wMAAwD7/wEA/v/+/wIAAwD6/wEA///+/wAABAD6/wAAAQD//wAAAwD7////AQAAAP//AwD8//7/AgABAP3/AgD9//7/AQABAP3/AQD+//7/AAACAPz/AAD+//////8BAP3/AAD//wAA//8BAP7/AAD//wAA/v8AAP7/AAD//wAA//8AAP//",
|
|
384
|
+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD//////P/9//3//////wAAAAAAAAIAAgACAP//CAAEAEEA//+cAAUAb/8HAAH9+P9eARkAogQUAJn8BwCd/gX/+QQNAKoC9gFdAtb/b/vd/936TP/6AsD/nfqn/un1W/0dA8IEsQLvAJv2bP72+WMAkP8dAcX+nQO2AIr6bP/EABX+NgK/Bdj2IQv2AE4EUAiD/xQAnwIm/B0B/wGNAoH7sQaP/b8CiQakAqD+R/9xA477KQL//6r75v/O/pcCgQCtAiMCBQAkANAARwHf//39hgBl/kUAJgEtAUEATgA/AgoASADK/zUAJv29/vL+l/9c/0cAUwBBAE8A6QE5/87/Wv9NAOf+5v7P/5P/4/9BAKYAQwDD/zYB5v+r/zYATwAp/1v/WQAEAB0AhwA0AA0AIAA3AAEAzv/u/+//5v9m/zwAIADQ/8T/SABiANb/SwAbAFf/MQDX/7L/hP8TAPr/AgAMAAsAHwAZAI3/VgDC/9v/5//x/6P/AwBlAMv/yf82AB4A+P9WAPj/NwDi/1EA0v9JANj/JwAcAAEADABYANj/4f8MAEwAmP82AN//3P8UADYA7//6/wIACADU/ygAyv82AN7/9v/2/ygAxv/9/+3/5//n/zUA6//g/y4ADgD5/wsABwDv/xIADwAGACoAJQD3/zIA+/8FABsAFgDO/zAAHAAIABQALADp/xcACAAAAPH/GADs/wkACQAFAAgAFQDp/wIAHAD1//P/EQDw/+3/GAD9/+f/HAD8//T/DAAQAPH/HwD4//r/DwAPAOj/EQACAOn/DAAXAOX/BAAOANH/9/8MAO//9f8LANT/9f8EAO//6f8NANb/+P8KAOz/5v8MAOD/7f8UAO//7//+//7/9v8YAPj/9f/z/wsA+v8SAPD/+v/x/xYA+f8SAPb/9//3/xEABQACAPn/9//y/xQACQD///b//v/7/xIACQD9//H/AAD7/xEAAgD5//P/AwD9/w8AAgD3//D/BAD//wUA/v/0//D/BgADAAMA/P/2//f/BwAGAP7/+//2//j/CAAFAPv/+f/5//v/BwAHAPn/9//7//7/BQAFAPf/9//+/wEABAACAPf/+P8BAAIAAgAAAPj/9/8CAAMAAAD+//n/+f8EAAQA/v/8//r/+/8EAAMA/P/7//z//P8EAAIA/P/5//7//v8DAAEA+//5//////8CAAAA+//5/wEAAAABAP//+//6/wIAAQD///3//P/7/wMAAQD///3//f/9/wIAAQD9//3//v/9/wMAAQD9//z/AAD//wEAAAD9//z/AAAAAAAA///9//3/AAD//wAA/v////7/AAD//wAA////////AAD//wAA//8AAP//",
|
|
385
|
+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD+////+f////v//v///wAA/////wUAAQAIAAIABwACAHkATAAOAaMAAf9C/9X6QvwhArAAtghABW37nv/y+0wAWQNcAE8JRwSOC6AEJe8P8S/zrPWaBI/+LQA/+0L+P/4K8AgAb/8uCh78BQtC614GaQWfAin5UfzN8Tf+GQizAZ4MCQMbGJ4BoRS7AvcHyQARA6n9ZwHZ/z4DvwAZAlAB6gbNAS4GFADFATL7E/2K+j37C/xp/SD9Uv0VAOsDs//WAd3+bv7F/f79mP2X/KH+FwC0/1n+VgFcATABHQGaAET+nf8Y/hoAovpqAXj9CQKW/lsCl/4RApj+bAHk/RcAlv4BAG/+DgDi//3/GwAOAEIAq/+y/3z/8v8+/7T/Tv8//27/mgDZ/1sA+P+cAAAA/P/i/yMAi/85AMP/KgDM/9MA9P+QABoA4QAiACwACwBdAP7/TQDb/y0Ayf+SAA0AZwDg/4wA+/8/AAMAgQDp/w0ADAAQAAoANgAgAA4AKABIAB4A4v/3/+f/+v/c/+n/EADn/wgAFAAqAOz/IwDc/9//3f8XAND/2v/a/w0A5v8BANb/9P/m/wAA8P8ZAN3/RwAGAEsABgB/AP7/NAASAEgABAA3AP3/KgD9/1sA8P8lAOr/FgD1/xAA4/8kAOv/AwD4/xEA5f8NAPT/+v/3/x8A7f8PAPj/IwD5/yAA9/8ZAAEAGgD4/xoA9f8HAAMACAD0/xgA+P8AAPr/IQDp/w4A8v8HAPX/IgD1/wYA+P8GAPX/GgD3/woABQASAAcAGQDw/+v/9P8bAP3/HADs/+f/7/8LAPr//v/0//T/AgD2/wsA6P///+P/CADY//7/5v/3/wQA/v8LAPD/GgD1/yMA/P8QAOv/LADw/yQA+P8XAO7/MQD9/yEAAQAcAPD/IgD9/xMA+/8OAO//FQABAAoA+/8PAPP/FQABAAQA9/8PAPX/CAADAAEA+P8NAPv/CAAGAAUA9/8JAP//AAAFAPz/+f8HAAQA/f8FAP3//P8FAAYA+P8DAP7/+/8AAAcA9/8BAP///f///wgA9//+/wAA/v/8/wUA9//8/wIA///7/wUA+v/7/wIAAAD6/wMA/P/6/wEAAQD6/wEA/v/7/wIAAgD6////AAD7/wEAAgD7//7/AQD8/wAAAwD8//3/AwD9/wAAAgD9//z/AwD/////AgD+//z/AwAAAP7/AQD///3/AgABAP3/AAAAAP3/AgACAPz///8BAP3/AQACAP3//v8BAP7/AAABAP3//v8CAP7///8BAP7//f8CAP////8AAAAA/v8CAAAAAAAAAAAA/v8BAAAAAAD//wAA//8AAP//AAD//wAA//8AAP//",
|
|
386
|
+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAAAAP//AAD//wAA//8AAAAA/////wAAAQD+////AAAGAP3/OAABAIIAAwBv//f/E/0QAK0ADQCzA/7/8P4u/0cBDQCJA6ABbQDg/w7/z/9o+Vn/SPnL/1//Ef+2+jr9RfZgA5QFZwILDFj+PAb2/nEFKgKk/R0Dlv6b/FUDsP6YAoj9SgAT/iL/tAPwAv8A0P6zAr7/dwAnAf39uP22/skA2v///2YCoP4UAUsAZgF2AJH+4P70/rz9+f+U/Xv/8v7CAcb+TACS/kwAv/+x/tX9oP71/oL/1f8nAEUAZwGtAAgAIgC/AD4BaP8GAGH/dQDF/64Arf8nAakAhAH9/+kAQQD3AFb/q/8p/yIAR/8FAPD/ZAA/AIYA3v8tADQADQBp/3f/CwABAP3/Wf8OANj/WwDH/xoAe/8DAKz/zv96/z8A3f/J/5X/IAD5//j/q//c/+//RADq//D/vv8pADUAFQDI/y8ACAAbANb/OwD3/+3/9f/e/wcAIAAeAMH/8/8xAC0AEADW/+3/HAADAPv/8P8DAOL/OwD3/xcACQAHAM//5f8XAAcAz//T/9D/HgD9////yf/e//v/AgD//9H/6/////H/+/8hAAIA9//7/w0AFgAQAPL/2v/8/xsAGQABANz/9P8YAAQA/v/y/wMA5v8YAAkAAAAAAAMA7/8KABgADwDs//j/BwATABsA8P/1//z/BAAMAAAA9P/s/xAA/v8GAAkA/v/p/wMACwALAP7/9P/p/wcADQAFAPb/7//4/w0ACAD8//b//v/1/wMACwD1//T/8P/8/wAACQDz/+f/5P8GAAkABQD5//D/+v8FAA0AAwD///T/AgACABAA/v8CAPD/+/8FAAoA9f/3//f//v8GAP7/9v/t//z/+f8AAPj/+v/3/wEA+v8HAPr//P/5/wQA//8DAPr/+P/3/wYA///+//X/+//5/wQA/f/7//X/+//4/wMA/f/8//j//v/9/wYA///8//f/AgAAAAUA/f/6//n/AwACAAIA/f/7//z/AwACAAAA/f/6//3/AgADAP7//f/7/wAAAwAFAPz////8/wMAAgAEAPv//v/+/wMAAgADAPv//v///wMAAQABAPv//f8AAAIAAAD///v//f8BAAIA///+//z//v8CAAIA/v/9//3///8CAAEA/v/9//7/AAACAAAA/v/9////AAABAAAA/f/9/wAAAQABAP///f/+/wEAAQAAAP///v/+/wEAAQD///7//v///wEAAQD///7//v///wEAAAD+//7///8AAAAAAAD+//7///8AAAAA///+//7///8AAAAA////////AAAAAP////////////8AAP//////////",
|
|
387
|
+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAAAAAAAAAABAAAAAAD//////////////v////3/////////+//8////AQD9//z/9f8BAAIA+f8dACgAWQBxAJX/qv+Y/uz9aP9k/7UDUQQBAiQA4Pgi/AkB0gKaBsD/+fxp/vz9CQSp/I/+ywDO+vMD0fzK/PABcgBeBfoBv/+uAuH9Sf5gAy39awMmBWUBuP9fA9/9fgDj/2/+EACaACcCSv9Z/2j/rv7hAA0AWf55/7L84P7E/SIAT/67AMv/tf+FAA7/1v+7/gv/IP+E/sQA+P5aAXz/tP9XAFX/tP8o/4r/j//e/yQAMv9mAJT/rgCr/9X/EwCb//H/9f7F/6D/EAAoAK3//v+e/zsAh/+B/7r/if/C/2r/4P/z/6//HwCy/0IA7/9ZALT/y/80ACgA9v/J/9//DgA5ADUALQARADIACwAfAOf/NgArACMACQBBAEcAGAAjAC4AWQBUAHcAAAAfACEAIAAcAPj/CADk/yQA7v89AEEAFwD5/xYA6f8aAOX/AADF/zQADwAUAOT/BQDr/yUA6P8XAOf/HADR/0AA8P8nAAgACQDt/ycAKAAHAPH/IQDz/xsACADn//n/DgADAA4A8P///8z/GgDN/yMA/f8QANj/MwACAC0ACwAOAO3/JgAZAAUACgAAAA4AIgAaAAkADwACAAAAHQATAAUABQACAAgACwAjAO////8AAA8ABQAPAPL//f8GAAsABgAGAPD/8v8GAPz/CAD6//H/6v8PAAgABgD4//3/9v8aAAgABwD1//7//v8QAAoACAD//wUA9v8QAAoABAAFAAgAAgAJAAoAAwD//w0AAgD//wcA/v8DAAoABQAFABUABAAKAAYABwAHAA8ACgAGAAwADwAMAAkAEAAJAAgADwAMAAgADgAJAAUACQAPAAUACwAHAAEABgAIAAEABAAGAP//AgAJAAAAAgAEAP7///8IAAIA//8GAAEAAQAJAAIA/v8EAAMA//8JAAEA/v8DAAMA/v8HAAMA/f8BAAUA/v8FAAMA/v8BAAcA//8DAAMA/v8BAAYA//8CAAMA/////wcAAAAAAAMAAAD//wYAAQD+/wMAAQD//wUAAQD+/wIAAgD//wQAAgD+/wEAAwD//wMAAwD+/wEAAwD//wIAAwD//wEABAAAAAEABAD//wAABAABAAAAAwAAAAAABAABAP//AwABAAAAAwACAP//AgACAAAAAwACAP//AgACAAAAAgACAAAAAQADAAAAAQACAAAAAQADAAAAAQACAAAAAAACAAEAAAACAAEAAAACAAEAAAABAAEAAAABAAEAAAABAAEAAAABAAEAAAABAAEAAAABAAEAAAAAAAAAAAAAAAAA",
|
|
388
|
+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAAAAP//AAD//wAA//8AAAAA//8AAP//AAACAAAA+f8BAAYA///4/wIA//8AAA8A/v/V/wEAEwA9AAEBRwA2AF7/kfog/3gBwv99CDYBU/qtAUX/AP7OAfkAX/o9B38FSfwaAuT14/60BAr8CQAI/tfyIQTzAXP+egdUBBwBof7TBMT8bAWi/5EEWwBRAAAKyfxE/8b88vp6ACP+PAF4/qD8MQNM/ygCJ/2XAPD9kP5gAVT/iP9I/lEB4P8qAD0BFAGa/+7/DgB2AOP98gFm/u/+Vv5/AG8ASP9gAM//qv9w//oAcv+2/jIBHgA7/6D/oAAGAKH/lADT/wAAggC8AAYAkP9yAEcAkf8BAOD/RAAr/zUANwDt/xQAJQAkAMT/zwA/AOH/xv9zAGsANQBTAIcALAAvACIATACy/xMADADg/xcAWABvAJL/7f9VAPb/EgDt/wcA4f8kAPP/5P+h/wgACQDy//r/LgAQAMn/8/9CAOX/5v/S/9//3P8pABYAuP/s/w8AFgDt/+3/7v/w/9j/5/8GAOf/2P/2//P//v8kABMAuf/m/xoADADZ/+r/3P8KAAUAKwDe/wsA3P8VAAAADgAfAB0ACAAMAF4AGgAhAPL/MwDz/0kABAAKAPX/LwAbAAkA9v/s/+3/8/8CABAAAADm//n/BQALAAUAAQDj//n/JQAVAPX/9v/+/wIAEQABAPP/8P/1/wAABgD6/+3/7//o//j/DAD8/+b/8P8IAAkABgD4//D/8P8UAAoAAwD4/wAA+f8OAAcAAAAFAPX/9v8TAAkA8v8EAPb/9/8dAA0A7/8CAPn/+f8SAAQA8/8CAOf/+v8DAAgA9P////H//P8IAAUA8//0/wIAAQAGAAgA9//7/wAA+/8EAP//+P/+////AgACAAsA8v/+/wIABQD7/wgA9v/7/wMABAD5/wAA/P/3/wEAAQD7//7//P/1/wQA///3//r////3/wMAAwD1//r/AwD6////AgD4//n/AwD8//7/AgD4//n/AwD+//3/AQD4//n/BQD///n/AAD6//j/BAABAPj/AAD9//v/AwADAPj//v/+//z/AwAEAPj//v8BAP7/AQADAPj//f8CAP////8EAPr//P8DAAAA/v8CAPv//P8DAAEA/f8BAP3//f8DAAIA/P8AAP7//f8DAAIA/P///wAA/f8BAAIA+//+/wEA//8AAAEA+//+/wEA/////wEA/P/+/wEA///+/wAA/f/9/wEAAAD9/wAA/f/+/wEAAQD8/////v/+/wAAAQD8////////////AQD9////AAD/////AAD+////AAAAAP//AAD///////8AAP//AAD//wAA//8AAP//"
|
|
389
|
+
], wA = [
|
|
390
|
+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD+/wQA8/8ZAPr/DAD+/wMA/v8KAAQA/f8DAAMABADs//z/8v/z/8f/R/90/ob+//zAAWsDAwY3DKn9//tu93DvkwI6An4CuwJ0/BH7VPux92X0Gu7N/EX9mgfqCkkIiRMgBd4NQQGL/c0G/xBxAKELZATUA/sIHRSx+fkCyAUmBNEJIARlAdHz2AjNACcIsAW4AlECsvtJ/P/7K/tf++n8aP4W+g0FXAElAMn8nQHn/sT+Zv7N+9X2xvzM/O3+EvpqBBD7SQLd+vb/sPlw/JD72/3n+Rr+L/wS/vz6UQGg/Nf+Av5L/5X9Gv2//SP+mf3j/lf+v/2B/ZH/5P05/iL9MP9F/uf9UP4v/qv9mv7o/Xn+wP2k/8L+uP5J/tD+Dv/Y/bL+mP72/n3+pP+7/hAA+/5zAGH+Z/+u/g8Azv2y/6L+//9o/iIADP8VACz/CwCN/pb/1v4yAFP+wf+4/jsAcf5VAP3+bADa/nMA6f4sAOT+IQBd/v7/7v6aAIL+QADe/nEA0P4yAKz+CQCo/moAuf5xAN7+mAC8/jcANf9eAPX+IAA1/1kAAP9hAMz+PQD5/m0A2/4gAPr+UQDh/jQAEv9BAPH+FABN/zkASv9DADP/BABe/1IAGf8oAE3/RQAw/zIAQf8mADn/GgBE/xIAR/8hAD7/BABy/zEAKP/0/07/GwBX/z4ARf8mAFr/QQBV/zUAVP8eAFz/JABt/0EAUP8MAHz/KgBr/ycAYv8EAH3/MABl/x8Agv8bAIj/GgBv//z/ff8AAJX/IABu/+T/jv/r/4z/9/9n/77/pP8JAJD/EQCJ//r/q/8WAJ//GQCU/xYAtv8qAKr/PQCW/ysAwf8+ALb/OgC3/ygAz/8uAM7/OgDH/ygAz/8kAMz/OgC//xsA1f8qAMn/LwDN/xcA1f8oAMv/JQDR/xMAzf8bAM//HgDU/wUA2v8ZANL/EwDW/wEA1f8ZAMz/BwDX/wIA0v8SANT/BQDW/wMA0/8PANT/AADY/wIA1f8MANX/+f/a/wUA0v8IANf/+//Y/wUA0/8DANr/+f/Y/wQA1v8BANr/+f/Z/wUA1//8/9z/+v/Y/wYA2f/8/93//v/Y/wUA2v/9/93////Z/wUA3P/8/97/AgDa/wMA3v/8/97/AwDb/wIA3//9/97/BADd/wEA4f///9//BQDf/wAA4v8AAN//BQDf/wAA4/8CAN//BADh/wAA4/8DAOD/BADi////4/8DAOH/AwDk/wAA5P8FAOL/AgDl/wEA5P8FAOL/AQDl/wEA4/8EAOL/AQDj/wIA4P8DAN//AADg/wIA3v8CAOD/AADh/wEA4v8AAOP/AADm/wAA6P8AAOz/AADu/wAA",
|
|
391
|
+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD//////f/+//7///8AAP////8BAAEA/f8AAAEAAQAFAAUA9//6/x0A2f/9/xMA3P+jAE//of9HAKP//gCj/77/Z/vi/28D9/ywDJAJIvr6AsX0Xec4BhcGzf23DZP7yfZ6C1//nwBDBIHyYgob/Tf3sQ41ANoKRA/A+E7yffAa9gD5EQUBDMwMygiqAHMAqPqhAGUB2/gE+a78H/+4APT6DwIUAA0HNwMhBfL8E/90A5n7dP9cALIC+v5C/q0AOv9kAogBHv01/+3/qAQD/ub8T/4vAOUA5P6KATv+ywEYAeT+KP6i/3gCFP6h/hr/+P83ACL/VADn/8UARQJI/4MAu/8qAlj+wf4iAPb/LgFJ/8QAUABAAI4ABf+k/3X/YgFK/ij/j/9HADoAi/+WAA0BVwC/ACL/LACe//cARv9i/xgAUgA0ACj/FgBgAIj/5P9M/7z/zv8/AKz/gv8sAEQA6/+I/yYAawDL/7T/xf8qAOv/FQCu/5n/EgAyAO3/i/9LAE4A+//R//P/FgDe/8z/u/8DADIALAAZALL/TAA8ABwAo//1/xwA/P/L/z0A6P8jAN7/7v+a/zAAwf/7/3//KQAuACwA9v8RAGYAIwBNADgAKgASAF0ADgANACEAMQDH//H/LQACAB0Ay////x0APAABAAQA2v8iAAcAEgDE/+v/FQD+/+P/DAD1/97/6v/4//X/EwD4/+7/5P8cAA0ACQDH//7/CQAXAAEA/P/5//j/CwAWAAEABQD9//n/AQAWAB0A7v/k/wAACQAmAP//9/8AAPn/8/8aAO//6/8fAOv/5v8hAP//5/8PAOf/AAAGAPn/6v8JAAYABgABAOv/1//1//L/+P8DABcA6f/8/wMACgD7/xAA3v/2//z/DADu//z/5v/5/wEA/P/6//7/7v/x/wQABgD5/wAA8v/w/wkAEQD2//j/+v8EAAcAEAD3//v/+v8CAAAACQD3//v//v/9/wUADAD2//X/AgAHAAAABwD2//T/BgAKAP7/AQD4//r/BAAIAPn/AAD3//f/BQAHAPv//v/7//n/BQAJAPj/+v/9//7/AgAGAPj/+f8BAAEAAgAFAPn/+v8BAAIAAAAEAPn/+f8CAAQA/v8BAPr/+v8CAAQA/P////v//P8CAAQA+//+//3//f8CAAUA+v/9//////8AAAQA+v/8////AAD//wIA+//8/wAAAQD+/wEA+//8/wAAAgD9/////P/9/wEAAgD8//7//f/9/wAAAgD8//3//v/+////AQD8//z/////////AAD8//3///8AAP7/AAD9//7///8AAP7////+//////8AAP7////+////////////////////",
|
|
392
|
+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD//////v8AAP///////wAAAAAAAP7/AQABAAAABwD///X/BQAjAPL/CQDb/9D/GAAb/7sAYwCW/z0BcP/X/7T/2QDW+wH8yANCCCUJ5QT++UXmhPwhA78FuAxH+p78ifudBlAG9vmu/lAK2fdlB///cfjoCa0E7Akn9Yb/zvba+AkAHPywBGEBFwUNAL8AXAAGA20DFvmR/kz+F/06Ag/+GwHl/5EEKgJd/q0AP/ym/9n6EfxY/2H+/QFtAC4C6QBDAaMCo/20/+3/3f/p/fL9rv9V/6cBhQHuAX4AcwJYAaH/IP/P/gsApP0LAe7/sQBuAI0AAgGDAE4BzACe/5X//v+v/+f+Zf+gAOv/5QBhAOIApAANASYAuP+h/8b/HQBr/9//bACWAGEAFAB5AD0AWQDU/+D/Yf/p//D/s/+R/4QAMQBvABEAkQBfABQAJgDW/wwA8/8XALz/vf8zAFAAKwD1/zEAPwDJ/x0A7/8LAOX/FwDR//H/EQAdAO//6P8QAFEA2f8WABEAMgDy/xIA+f/s/xAALgDv////HQAvAPT/+f8iAAYAEgAFABoAGgD//w0A+f/0/xsAHgDx/9f/GAACAPH/8f8JAPf/GwALABEA7/8cAPT/CgD2//j/BQD8/+3/OgAgAAYA9f8PAN7/DgD9/9r/1//3/+3/9//1//b/8//5//f/AgAJAOf/+v8OAAMACwD9/+7/5f8eAAEA9//q//7/8P8WAP7/+//4/wIA+f8TAAIA9f/5/wcA+P8iAAgA9v/n/xoA//8gAAUABwDj/wAA9v8BAAUAFQDn/wMA7v8QABAAEQDm/wwA8f8aAAAABwDu/wcACgASAAEA7//w//f/BgARAAkA6P/3/wcADgAKAAYA4f/4/wYADgAAAPr/8P/9/xQACgAHAPn/7//9/xEAAgD+//L/8v/8/xUAAwDw//H/9f8CAAsA/v/q//L/+f8FAAYA/P/r//j///8GAAkA+//o//j/AQAIAP//+v/o//v/CAAIAPv/+P/w/wEACQAHAPj/+f/0/wIACwAFAPb/+f/4/wQACwACAPP/+f/+/wYACAD///L/+/8BAAYABQD9//P//P8FAAUAAgD7//T//f8HAAQA///7//f///8IAAMA/P/6//r/AQAIAAEA+v/6//3/AgAHAAAA+f/7/wAAAwAFAP7/+P/8/wIAAgACAP3/+f/9/wMAAwAAAPz/+v/+/wQAAgD+//z/+/8AAAQAAQD8//z//f8BAAQAAAD7//3///8BAAMA///7//3/AAACAAEA/v/7//7/AQABAAAA/v/9////AQAAAP///v/+////AAD/////////////////////////////",
|
|
393
|
+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD////////+//////8AAAAA/v/+/wAAAQD8//3/CQAJAP3/+v8PAAcApABlABkBkwCO/i//lfqa/HQAcf/3BdkCzwJcBCMC0wMN/9/9wgI7AaECYfxV/Tf83vhn/xrt8Owx/8n7cgHABYb43QcZDh4WugNrA7P74gHu/9z/zv0t/acCiQHY/iv4qQOl/ysCE/0//XT9Sf4O//j9xfupAn394gHO+rsCXAFIAxQC9wIXBgcD2AQuAnb/9gJh/6wAVfxEAI4Bvf7oAFv/bALsAMQBe/88/joAT/4dAH39/v9LAXn/gwDI//QBdABcAA0A7f4lAMn///+9/tv/iABp/13/pP/dALv/w/8MAHv//f+y/6////7U/5AAZP+Z/8r/nQDR/5r/DwDr/xAA4v+s/3z/+P9uAOv/t/82AGcAHgCb/yQAFQBGAM7/CgD3/xoAegAaAOz/CgBHAA8Adv8/AAAABQC2/xIAAAA7ABQAKgCj/z4AAQAXAJz/JAADAAcA8f/1/2AAAQAlAPD/NgDx/1wA7v/4/wMAZADv//3/HQAkAFoA8P9FAPv/FgBIAPf/WQAHAEUACQD0/xIAQwDu/wMAwP9VALn/XwCw/yEA5f8sAPj/FgDD/1YAyv8rAOX/HQDo//j/IQAQACAAHwD9/yQAHQBAABgABQAiAAUAKAD3/wkACwAKAAMABwAJAPb/+f8GAOr/JQAHABMA6P8TAA4AGgD//woA8/8ZAP//GADu/w0A9v8SAAMABwD4/wQA5P8XAAQACgDq/wUA+/8VAAcACADs/xIAAAATAPH/+v/1//T/7f///+z/+v/y/+//9/8KAAcACgAJAPT/BAAKAAAABgAIAPL/9v8KAAMABAACAPr/9v8OAAIA+P/x//v/+f8MAPb/+P/w/wQA9f8MAPn////7/woA/v8PAAEAAgD1/xAAAQAPAP//AwD//xQABwALAAAABgADABAAAgAHAAAACAABAA8ABQAFAAMABwAEAA4ABwADAAEACQAFAAoAAwD//wAACQADAAUAAQD/////CAABAAMAAAD/////BwACAAEAAAD/////BwACAP7///8BAAAABgABAP7///8CAAAABAAAAP7///8DAAAAAwAAAP3///8DAAAAAQAAAP3//v8EAAAAAAD+//////8EAP/////+/wAA/v8EAP/////+/wEA/v8EAP///v/+/wIA//8DAP///v/+/wIA//8BAP///v/+/wMA//8BAP/////+/wMA//8AAP//AAD+/wQA//8AAP7/AQD//wIA////////AQD//wIA////////AQAAAAEAAAAAAP//AQD//wEAAAAAAP//AQAAAAEAAAAAAAAA",
|
|
394
|
+
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD+/wAA+v8AAPz/AAD//wAA/f8AAAEAAAD+/wAACQAAAAQAAAAZAAAAtgAAAFsBAABW/gAAH/oAAGcBAABoBwAAlAAAAO3/AAARAQAA+wIAAEoEAACe/gAAiv4AALD0AADJ8wAAkQQAAF34AABi8QAAPQAAAAH2AAD19AAADAMAAJwGAACTEAAA0AwAAJkHAACOBwAAuQEAANcDAAC6AgAAHwUAAHEFAAB0AwAAbgEAADz+AADYAQAAGAAAAJwCAADgAAAA//0AAMn+AAAT/AAAwP8AAOn9AAAJAAAAewEAAOn+AACN/wAAOv0AAO3+AADN/gAAcP8AACj/AACq/gAA+f4AAML9AACa/wAA/f4AAN7/AABo/wAA6/4AAE//AAAC/wAAEQAAAHX/AAB0AAAA5f8AAEwAAAB3AAAA5/8AAMIAAABCAAAAzgAAAE8AAAB3AAAAKAAAADMAAACqAAAALwAAAK4AAAASAAAAVgAAACgAAAAtAAAATAAAAP3/AAA7AAAA2/8AACQAAADw/wAALQAAADEAAAAlAAAAbAAAADMAAABUAAAAEAAAACgAAAD1/wAA9v8AAPr/AADu/wAALgAAABIAAABUAAAARAAAAGUAAABGAAAAOAAAAGAAAAAuAAAARQAAACEAAAAfAAAAAAAAAAkAAAAQAAAAAwAAABIAAADs/wAAEAAAAAYAAAASAAAAIgAAABEAAAADAAAABAAAAA8AAAD4/wAAHQAAAAsAAAAIAAAADgAAAP//AAAcAAAADwAAAAYAAAASAAAAFwAAAAMAAAAYAAAAEgAAAPr/AAAQAAAADQAAAAoAAAD3/wAABgAAAPb/AADf/wAA/v8AAPL/AAD6/wAAFAAAAAQAAAAEAAAAGwAAAAEAAAAMAAAAIAAAAAIAAAAdAAAAGAAAAAIAAAAcAAAAEgAAAAcAAAAeAAAADwAAAAQAAAAeAAAABAAAAAYAAAAZAAAAAQAAAA4AAAATAAAA/v8AAAoAAAAOAAAA+/8AAAsAAAAJAAAA+f8AAAsAAAABAAAA+f8AAAoAAAD9/wAA+v8AAAcAAAD5/wAA+v8AAAUAAAD3/wAA/f8AAAQAAAD2/wAAAAAAAAEAAAD3/wAAAgAAAAAAAAD4/wAAAwAAAP7/AAD6/wAABAAAAP3/AAD8/wAABAAAAPv/AAD+/wAAAwAAAPv/AAD//wAAAQAAAPv/AAAAAAAAAAAAAPv/AAACAAAA//8AAPz/AAACAAAA/v8AAP3/AAACAAAA/f8AAP7/AAABAAAA/f8AAP//AAABAAAA/f8AAAAAAAAAAAAA/v8AAAEAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
|
|
395
|
+
], q = {
|
|
396
|
+
AMBISONIC: "ambisonic",
|
|
397
|
+
BYPASS: "bypass",
|
|
398
|
+
OFF: "off"
|
|
399
|
+
}, cA = [2, 3];
|
|
400
|
+
function y(A, t) {
|
|
401
|
+
this._context = s.isAudioContext(A) ? A : s.throw("HOARenderer: Invalid BaseAudioContext."), this._config = {
|
|
402
|
+
ambisonicOrder: 3,
|
|
403
|
+
renderingMode: q.AMBISONIC
|
|
404
|
+
}, t && t.ambisonicOrder && (cA.includes(t.ambisonicOrder) ? this._config.ambisonicOrder = t.ambisonicOrder : s.log(
|
|
405
|
+
"HOARenderer: Invalid ambisonic order. (got " + t.ambisonicOrder + ") Fallbacks to 3rd-order ambisonic."
|
|
406
|
+
)), this._config.numberOfChannels = (this._config.ambisonicOrder + 1) * (this._config.ambisonicOrder + 1), this._config.numberOfStereoChannels = Math.ceil(this._config.numberOfChannels / 2), t && t.hrirPathList && (Array.isArray(t.hrirPathList) && t.hrirPathList.length === this._config.numberOfStereoChannels ? this._config.pathList = t.hrirPathList : s.throw(
|
|
407
|
+
"HOARenderer: Invalid HRIR URLs. It must be an array with " + this._config.numberOfStereoChannels + " URLs to HRIR files. (got " + t.hrirPathList + ")"
|
|
408
|
+
)), t && t.renderingMode && (Object.values(q).includes(t.renderingMode) ? this._config.renderingMode = t.renderingMode : s.log(
|
|
409
|
+
"HOARenderer: Invalid rendering mode. (got " + t.renderingMode + ') Fallbacks to "ambisonic".'
|
|
410
|
+
)), this._buildAudioGraph(), this._isRendererReady = !1;
|
|
411
|
+
}
|
|
412
|
+
y.prototype._buildAudioGraph = function() {
|
|
413
|
+
this.input = this._context.createGain(), this.output = this._context.createGain(), this._bypass = this._context.createGain(), this._hoaRotator = new O(this._context, this._config.ambisonicOrder), this._hoaConvolver = new J(this._context, this._config.ambisonicOrder), this.input.connect(this._hoaRotator.input), this.input.connect(this._bypass), this._hoaRotator.output.connect(this._hoaConvolver.input), this._hoaConvolver.output.connect(this.output), this.input.channelCount = this._config.numberOfChannels, this.input.channelCountMode = "explicit", this.input.channelInterpretation = "discrete";
|
|
414
|
+
}, y.prototype._initializeCallback = function(A, t) {
|
|
415
|
+
let e;
|
|
416
|
+
this._config.pathList ? e = new h(this._context, this._config.pathList, { dataType: "url" }) : e = this._config.ambisonicOrder === 2 ? new h(this._context, wA) : new h(this._context, gA), e.load().then(
|
|
417
|
+
(function(n) {
|
|
418
|
+
this._hoaConvolver.setHRIRBufferList(n), this.setRenderingMode(this._config.renderingMode), this._isRendererReady = !0, s.log("HOARenderer: HRIRs loaded successfully. Ready."), A();
|
|
419
|
+
}).bind(this),
|
|
420
|
+
function() {
|
|
421
|
+
const n = "HOARenderer: HRIR loading/decoding failed.";
|
|
422
|
+
t(n), s.throw(n);
|
|
423
|
+
}
|
|
424
|
+
);
|
|
425
|
+
}, y.prototype.initialize = function() {
|
|
426
|
+
return s.log(
|
|
427
|
+
"HOARenderer: Initializing... (mode: " + this._config.renderingMode + ", ambisonic order: " + this._config.ambisonicOrder + ")"
|
|
428
|
+
), new Promise(this._initializeCallback.bind(this));
|
|
429
|
+
}, y.prototype.setRotationMatrix3 = function(A) {
|
|
430
|
+
this._isRendererReady && this._hoaRotator.setRotationMatrix3(A);
|
|
431
|
+
}, y.prototype.setRotationMatrix4 = function(A) {
|
|
432
|
+
this._isRendererReady && this._hoaRotator.setRotationMatrix4(A);
|
|
433
|
+
}, y.prototype.setRenderingMode = function(A) {
|
|
434
|
+
if (A !== this._config.renderingMode) {
|
|
435
|
+
switch (A) {
|
|
436
|
+
case q.AMBISONIC:
|
|
437
|
+
this._hoaConvolver.enable(), this._bypass.disconnect();
|
|
438
|
+
break;
|
|
439
|
+
case q.BYPASS:
|
|
440
|
+
this._hoaConvolver.disable(), this._bypass.connect(this.output);
|
|
441
|
+
break;
|
|
442
|
+
case q.OFF:
|
|
443
|
+
this._hoaConvolver.disable(), this._bypass.disconnect();
|
|
444
|
+
break;
|
|
445
|
+
default:
|
|
446
|
+
s.log(
|
|
447
|
+
'HOARenderer: Rendering mode "' + A + '" is not supported.'
|
|
448
|
+
);
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
this._config.renderingMode = A, s.log("HOARenderer: Rendering mode changed. (" + A + ")");
|
|
452
|
+
}
|
|
453
|
+
};
|
|
454
|
+
const $ = {};
|
|
455
|
+
$.getBrowserInfo = function() {
|
|
456
|
+
const A = navigator.userAgent;
|
|
457
|
+
let t = A.match(
|
|
458
|
+
/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*([\d\.]+)/i
|
|
459
|
+
) || [], e;
|
|
460
|
+
if (/trident/i.test(t[1]))
|
|
461
|
+
return e = /\brv[ :]+(\d+)/g.exec(A) || [], { name: "IE", version: e[1] || "" };
|
|
462
|
+
if (t[1] === "Chrome" && (e = A.match(/\bOPR|Edge\/(\d+)/), e != null))
|
|
463
|
+
return { name: "Opera", version: e[1] };
|
|
464
|
+
t = t[2] ? [t[1], t[2]] : [navigator.appName, navigator.appVersion, "-?"], (e = A.match(/version\/([\d.]+)/i)) != null && t.splice(1, 1, e[1]);
|
|
465
|
+
let n = A.match(/android|ipad|iphone/i);
|
|
466
|
+
return n || (n = A.match(/cros|linux|mac os x|windows/i)), {
|
|
467
|
+
name: t[0],
|
|
468
|
+
version: t[1],
|
|
469
|
+
platform: n ? n[0] : "unknown"
|
|
470
|
+
};
|
|
471
|
+
}, $.patchSafari = function() {
|
|
472
|
+
window.webkitAudioContext && window.webkitOfflineAudioContext && (window.AudioContext = window.webkitAudioContext, window.OfflineAudioContext = window.webkitOfflineAudioContext);
|
|
473
|
+
};
|
|
474
|
+
const vA = "1.3.0", a = {};
|
|
475
|
+
return a.browserInfo = $.getBrowserInfo(), a.createBufferList = function(A, t, e) {
|
|
476
|
+
return new h(A, t, e || { dataType: "url" }).load();
|
|
477
|
+
}, a.mergeBufferListByChannel = s.mergeBufferListByChannel, a.splitBufferbyChannel = s.splitBufferbyChannel, a.createFOAConvolver = function(A, t) {
|
|
478
|
+
return new S(A, t);
|
|
479
|
+
}, a.createFOARouter = function(A, t) {
|
|
480
|
+
return new W(A, t);
|
|
481
|
+
}, a.createFOARotator = function(A) {
|
|
482
|
+
return new Z(A);
|
|
483
|
+
}, a.createHOARotator = function(A, t) {
|
|
484
|
+
return new O(A, t);
|
|
485
|
+
}, a.createHOAConvolver = function(A, t, e) {
|
|
486
|
+
return new J(A, t, e);
|
|
487
|
+
}, a.createFOARenderer = function(A, t) {
|
|
488
|
+
return new c(A, t);
|
|
489
|
+
}, a.createHOARenderer = function(A, t) {
|
|
490
|
+
return new y(A, t);
|
|
491
|
+
}, (function() {
|
|
492
|
+
s.log(`Version ${vA} (running ${a.browserInfo.name} ${a.browserInfo.version} on ${a.browserInfo.platform})`), a.browserInfo.name.toLowerCase() === "safari" && ($.patchSafari(), s.log(`${a.browserInfo.name} detected. Polyfill applied.`));
|
|
493
|
+
})(), a;
|
|
494
|
+
})();
|