orchard/src/renderer/apple-hls-old.js
2022-05-21 09:37:14 +07:00

25453 lines
No EOL
1.2 MiB

/*! For license information please see hls.js.LICENSE.txt */ ! function Xy(Yy) {
const Jy = this;
var e, t;
e = this, t = function() {
"use strict";
var P, e = e => e && e.Math === Math && e,
l = e("object" == typeof globalThis && globalThis) || e("object" == typeof window && window) || e("object" == typeof Jy && Jy) || e("object" == typeof global && global) || Function("return this")();
class d {
constructor() {
this.keySize = null, this.ksRows = null, this.keySchedule = null, this.invKeySchedule = null, this.rcon = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54], this.subMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)], this.invSubMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)], this.sBox = new Uint32Array(256), this.invSBox = new Uint32Array(256), this.key = new Uint32Array(0), this.initTable()
}
uint8ArrayToUint32Array_(e) {
const t = new DataView(e),
i = Math.floor(t.byteLength / 4),
r = new Uint32Array(i);
for (let e = 0; e < i; e++) r[e] = t.getUint32(4 * e);
return r
}
initTable() {
const e = this["sBox"],
t = this["invSBox"],
i = this["subMix"],
r = i[0],
n = i[1],
s = i[2],
a = i[3],
o = this["invSubMix"],
l = o[0],
d = o[1],
u = o[2],
c = o[3],
h = new Uint32Array(256);
let p = 0,
f = 0,
m = 0;
for (m = 0; m < 256; m++) h[m] = m < 128 ? m << 1 : m << 1 ^ 283;
for (m = 0; m < 256; m++) {
var g = (g = f ^ f << 1 ^ f << 2 ^ f << 3 ^ f << 4) >>> 8 ^ 255 & g ^ 99;
e[p] = g, t[g] = p;
const o = h[p],
m = h[o],
v = h[m];
var y = 257 * h[g] ^ 16843008 * g;
r[p] = y << 24 | y >>> 8, n[p] = y << 16 | y >>> 16, s[p] = y << 8 | y >>> 24, a[p] = y, y = 16843009 * v ^ 65537 * m ^ 257 * o ^ 16843008 * p, l[g] = y << 24 | y >>> 8, d[g] = y << 16 | y >>> 16, u[g] = y << 8 | y >>> 24, c[g] = y, p ? (p = o ^ h[h[h[v ^ o]]], f ^= h[h[f]]) : p = f = 1
}
}
expandKey(e) {
var n = this.uint8ArrayToUint32Array_(e);
let t = !0,
i = 0;
for (; i < n.length && t;) t = n[i] === this.key[i], i++;
if (!t) {
this.key = n;
var s = this.keySize = n.length;
if (4 !== s && 6 !== s && 8 !== s) throw new Error("Invalid aes key size=" + s);
var a = this.ksRows = 4 * (s + 6 + 1);
let e, t;
const o = this.keySchedule = new Uint32Array(a),
l = this.invKeySchedule = new Uint32Array(a),
d = this.sBox,
u = this["rcon"],
c = this["invSubMix"],
h = c[0],
p = c[1],
f = c[2],
m = c[3];
let i, r;
for (e = 0; e < a; e++) e < s ? i = o[e] = n[e] : (r = i, e % s == 0 ? (r = r << 8 | r >>> 24, r = d[r >>> 24] << 24 | d[r >>> 16 & 255] << 16 | d[r >>> 8 & 255] << 8 | d[255 & r], r ^= u[e / s | 0] << 24) : 6 < s && e % s == 4 && (r = d[r >>> 24] << 24 | d[r >>> 16 & 255] << 16 | d[r >>> 8 & 255] << 8 | d[255 & r]), o[e] = i = (o[e - s] ^ r) >>> 0);
for (t = 0; t < a; t++) e = a - t, r = 3 & t ? o[e] : o[e - 4], l[t] = t < 4 || e <= 4 ? r : h[d[r >>> 24]] ^ p[d[r >>> 16 & 255]] ^ f[d[r >>> 8 & 255]] ^ m[d[255 & r]], l[t] = l[t] >>> 0
}
}
networkToHostOrderSwap(e) {
return e << 24 | (65280 & e) << 8 | (16711680 & e) >> 8 | e >>> 24
}
decrypt(e, t, i) {
var r = this.keySize + 6,
n = this["invKeySchedule"],
s = this.invSBox,
a = this["invSubMix"],
o = a[0],
l = a[1],
d = a[2],
u = a[3],
i = this.uint8ArrayToUint32Array_(i);
let c = i[0],
h = i[1],
p = i[2],
f = i[3];
const m = new Int32Array(e),
g = new Int32Array(m.length);
let y, v, S, b, T, E, I, w, A, O, k, C, D, M;
const x = this.networkToHostOrderSwap;
for (; t < m.length;) {
for (A = x(m[t]), O = x(m[t + 1]), k = x(m[t + 2]), C = x(m[t + 3]), T = A ^ n[0], E = C ^ n[1], I = k ^ n[2], w = O ^ n[3], D = 4, M = 1; M < r; M++) y = o[T >>> 24] ^ l[E >> 16 & 255] ^ d[I >> 8 & 255] ^ u[255 & w] ^ n[D], v = o[E >>> 24] ^ l[I >> 16 & 255] ^ d[w >> 8 & 255] ^ u[255 & T] ^ n[D + 1], S = o[I >>> 24] ^ l[w >> 16 & 255] ^ d[T >> 8 & 255] ^ u[255 & E] ^ n[D + 2], b = o[w >>> 24] ^ l[T >> 16 & 255] ^ d[E >> 8 & 255] ^ u[255 & I] ^ n[D + 3], T = y, E = v, I = S, w = b, D += 4;
y = s[T >>> 24] << 24 ^ s[E >> 16 & 255] << 16 ^ s[I >> 8 & 255] << 8 ^ s[255 & w] ^ n[D], v = s[E >>> 24] << 24 ^ s[I >> 16 & 255] << 16 ^ s[w >> 8 & 255] << 8 ^ s[255 & T] ^ n[D + 1], S = s[I >>> 24] << 24 ^ s[w >> 16 & 255] << 16 ^ s[T >> 8 & 255] << 8 ^ s[255 & E] ^ n[D + 2], b = s[w >>> 24] << 24 ^ s[T >> 16 & 255] << 16 ^ s[E >> 8 & 255] << 8 ^ s[255 & I] ^ n[D + 3], D += 3, g[t] = x(y ^ c), g[t + 1] = x(b ^ h), g[t + 2] = x(S ^ p), g[t + 3] = x(v ^ f), c = A, h = O, p = k, f = C, t += 4
}
return g.buffer
}
destroy() {
this.key = void 0, this.keySize = void 0, this.ksRows = void 0, this.sBox = void 0, this.invSBox = void 0, this.subMix = void 0, this.invSubMix = void 0, this.keySchedule = void 0, this.invKeySchedule = void 0, this.rcon = void 0
}
}
class i {
constructor(e, t) {
this.rpc = e, this.logger = t, this.decrypt = (r, n, s, a, o) => t => {
const i = l.crypto;
if (null != o && o.useJSCrypto || null == i || !i.subtle) {
const s = new d;
var e;
s.expandKey(r);
const i = s.decrypt(a, 0, n);
e = o.plainTextLength ? i.slice(0, o.plainTextLength) : function(e) {
var t = new Uint8Array(e),
i = t[e.byteLength - 1],
r = e.byteLength - 1;
let n = 0;
if (1 <= i && i <= 16)
for (let e = r; e > r - i && t[e] === i; e--) n++;
return e = n === i ? e.slice(0, r - i + 1) : e
}(i), t(e, void 0, [e])
} else i.subtle.importKey("raw", r, s, !1, ["decrypt"]).then(e => i.subtle.decrypt({
name: s,
iv: n
}, e, a)).then(e => {
t(e, void 0, [e])
}).catch(e => t(void 0, e))
}, e.register("decrypt", this.decrypt)
}
}(vr = P = P || {}).MEDIA_ATTACHING = "hlsMediaAttaching", vr.MEDIA_ATTACHED = "hlsMediaAttached", vr.MEDIA_DETACHING = "hlsMediaDetaching", vr.MEDIA_DETACHED = "hlsMediaDetached", vr.BUFFER_CREATED = "hlsBufferCreated", vr.BUFFER_APPENDING = "hlsBufferAppending", vr.BUFFER_APPENDED = "hlsBufferAppended", vr.BUFFER_FLUSHED = "hlsBufferFlushed", vr.MANIFEST_LOADING = "hlsManifestLoading", vr.MANIFEST_LOADED = "hlsManifestLoaded", vr.MANIFEST_PARSED = "hlsManifestParsed", vr.LEVEL_SWITCHING = "hlsLevelSwitching", vr.LEVEL_SWITCHED = "hlsLevelSwitched", vr.LEVEL_LOADING = "hlsLevelLoading", vr.LEVEL_LOADED = "hlsLevelLoaded", vr.LEVEL_UPDATED = "hlsLevelUpdated", vr.LEVELS_CHANGED = "hlsLevelsChanged", vr.AUDIO_TRACKS_UPDATED = "hlsAudioTracksUpdated", vr.AUDIO_TRACK_SWITCH = "hlsAudioTrackSwitch", vr.AUDIO_TRACK_SWITCHED = "hlsAudioTrackSwitched", vr.AUDIO_TRACK_LOADED = "hlsAudioTrackLoaded", vr.SUBTITLE_TRACKS_UPDATED = "hlsSubtitleTracksUpdated", vr.SUBTITLE_TRACKS_CREATED = "hlsSubtitleTracksCreated", vr.SUBTITLE_TRACK_SWITCH = "hlsSubtitleTrackSwitch", vr.INLINE_STYLES_PARSED = "hlsInlineStylesParsed", vr.SESSION_DATA_COMPLETE = "hlsSessionDataComplete", vr.FRAG_LOADING = "hlsFragLoading", vr.FRAG_LOADED = "hlsFragLoaded", vr.FRAG_BUFFERED = "hlsFragBuffered", vr.FRAG_CHANGED = "hlsFragChanged", vr.INTERNAL_ERROR = "hlsInternalError", vr.ERROR = "hlsError", vr.DESTROYING = "hlsDestroying", vr.KEY_REQUEST_STARTED = "hlsKeyRequestStarted", vr.LICENSE_CHALLENGE_CREATED = "hlsLicenseChallengeCreated", vr.LICENSE_RELEASED = "hlsLicenseReleased", vr.KEY_LOADED = "hlsKeyLoaded", vr.UNRESOLVED_URI_LOADING = "hlsUnresolvedUriLoading", vr.DESIRED_RATE_CHANGED = "hlsDesiredRateChanged", vr.PLAYER_STATE_CHANGE = "hlsPlayerStateChange", vr.SEEKING = "hlsSeeking", vr.SEEKED = "hlsSeeked", vr.STALLED = "hlsStalled", vr.RESUME_FROM_STALL = "hlsResumeFromStall", vr.READY_FOR_NEXT_ITEM = "hlsReadyForNextItem", vr.ITEM_TRANSITIONED = "hlsItemTransitioned", vr.ITEM_EVICTED = "hlsItemEvicted", vr.DATERANGE_UPDATED = "hlsDaterangeUpdated";
var v, x = P;
(dl = v = v || {}).FRAG_PARSING_INIT_SEGMENT = "hlsFragParsingInitSegment", dl.FRAG_PARSING_DATA = "hlsFragParsingData", dl.FRAG_PARSED = "hlsFragParsed", dl.INIT_PTS_FOUND = "hlsInitPtsFound";
class p extends Error {
constructor(e, t, i, r, n) {
super(r), this.type = e, this.details = t, this.fatal = i, this.reason = r, this.response = n, this.handled = !1
}
}
class R extends p {
constructor(e, t, i, r, n) {
super(e, t, i, r, n), this.response = n
}
}
const $ = {
PlaylistNotReceived: {
code: -12884,
text: "Playlist not received"
},
CryptResponseReceivedSlowly: {
code: -16833,
text: "Crypt key received slowly"
},
LivePlaylistUpdateError: {
code: -12888,
text: "Live playlist not updated"
},
NoResponseFromMediaRequest: {
code: -12889,
text: "No response for fragment"
},
IncompatibleAsset: {
code: -12927,
text: "IncompatibleAsset"
},
CorruptStream: {
code: -16041,
text: "Corrupt fragment"
},
InternalError: {
code: -12645,
text: "InternalException"
},
CantSwitchInTime: {
code: -12644,
text: "CantSwitchInTime"
},
VideoDecoderBadDataErr: {
code: -12909,
text: "Buffer error"
},
InsufficientDataAvailable: {
code: -12928,
text: "Incomplete data"
},
AllocationFailed: {
code: -12862,
text: "AllocationFailed"
},
PlaylistErrorMissingEXTM3U: {
code: -12269,
text: "Response doesnt have #EXTM3U tag"
},
PlaylistErrorInvalidEntry: {
code: -12264,
text: "Invalid entry"
},
PlaylistErrorBadTargetDuration: {
code: -12271,
text: "Invalid targetduration"
},
NoValidAlternates: {
code: -12925,
text: "No valid alternates"
},
FormatError: {
code: -12642,
text: "Incorrect playlist format"
},
UnsupportedKeySystemError: {
code: -6e4,
text: "Unsupported Key System"
},
EmptyLoadSourceError: {
code: -60001,
text: "Empty loadSource url"
},
UndefinedItemIdError: {
code: -60002,
text: "Undefined itemId"
},
ManifestParseError: {
code: -60003,
text: "Manifest parse error"
},
DemuxWorkerError: {
code: -60004,
text: "Demux worker error"
},
DecryptWorkerError: {
code: -60005,
text: "Decrypt worker error"
},
OutOfRangeSeekError: {
code: -60006,
text: "Seeked out of playable range"
},
ExceptionInKeyLoadError: {
code: -60007,
text: "Exception in Key load"
},
FragmentAbortError: {
code: -60008,
text: "Fragment abort error"
},
ManifestTimeoutError: {
code: -60009,
text: "Manifest Timeout Error"
},
PlaylistTimeoutError: {
code: -60010,
text: "Playlist Timeout Error"
},
FragmentTimeoutError: {
code: -60011,
text: "Fragment Timeout Error"
},
IncompleteSessionData: {
code: -60012,
text: "Session data not complete after loading all items"
},
SessionDataLoadTimeout: {
code: -60013,
text: "Session data load timeout"
},
FailedDemuxerSanityCheck: {
code: -60014,
text: "Failed demuxer sanity check"
},
InvalidADTSSamplingIndex: {
code: -60015,
text: "Invalid ADTS sampling index"
},
DemuxerNotFound: {
code: -60016,
text: "No demux matching with content found"
},
InvalidAC3Magic: {
code: -60029,
text: "Invalid ac-3 magic"
},
InvalidInitTimestamp: {
code: -60017,
text: "Invalid initPTS or initDTS"
},
NoAVSamplesFound: {
code: -60018,
text: "no audio/video samples found"
},
NoTSSyncByteFound: {
code: -60019,
text: "TS packet did not start with 0x47"
},
PESDidNotStartWithADTS: {
code: -60020,
text: "AAC PES did not start with ADTS header"
},
NoADTSHeaderInPES: {
code: -60021,
text: "No ADTS header found in AAC PES"
},
InvalidDolbyAudioMagic: {
code: -60022,
text: "Invalid dolby audio magic"
},
FailedToAllocateVideoMdat: {
code: -60023,
text: "Fail allocating video mdat"
},
FailedToAllocateAudioMdat: {
code: -60024,
text: "Fail allocating audio mdat"
},
InsufficientEC3Data: {
code: -60025,
text: "Error parsing ec-3, not enough data"
},
InvalidEC3Magic: {
code: -60026,
text: "Invalid ec-3 magic"
},
ReservedStreamType: {
code: -60027,
text: "Reserved stream type"
},
InsufficientAC3Data: {
code: -60028,
text: "error parsing ac-3, not enough data"
},
InvalidAC3SamplingRateCode: {
code: -60030,
text: "Invalid ac-3 samplingRateCode"
},
PlaylistErrorInvalidEXTXDEFINE: {
code: -61e3,
text: "Encountered undefined/not imported EXT-X-DEFINE property"
},
PlaylistErrorMissingImportReference: {
code: -61001,
text: "IMPORT references variable not in master playlist and/or NAME"
},
PlaylistErrorInvalidSERVERURI: {
code: -61002,
text: "Encountered undefined/invalid SERVER-URI attribute for EXT-X-CONTENT-STEERING tag"
},
PlaylistErrorInvalidPATHWAYID: {
code: -61003,
text: "Encountered invalid PATHWAY-ID attribute for EXT-X-CONTENT-STEERING tag"
},
PlaylistErrorInvalidSCORE: {
code: -61004,
text: "Encountered negative/non-number SCORE property"
},
KeySystemFailedToUpdateSession: {
code: -62e3,
text: "KeySystem: Promise Rejected while updating session"
},
KeySystemFailedToGenerateLicenseRenewal: {
code: -62001,
text: "KeySystem: Failed to generate license renewal"
},
KeySystemFailedToGenerateLicenseRequest: {
code: -62002,
text: "KeySystem: Failed to generate license request"
},
KeySystemAbort: {
code: -62003,
text: "KeySystem: Aborted"
},
KeySystemUnexpectedStateTransition: {
code: -62004,
text: "KeySystem: Unexpected state transition"
},
KeySystemUnexpectedState: {
code: -62005,
text: "KeySystem: Unexpected state"
},
KeySystemCDMUnknownError: {
code: -62006,
text: "KeySystem: Unknown error from CDM"
},
KeySystemRequestTimedOut: {
code: -62007,
text: "Key request timed out"
},
KeySystemUnexpectedMETHOD: {
code: -62008,
text: "Unexpected METHOD attribute"
},
KeySystemUnmatchedString: {
code: -62009,
text: "KeySystem: string does not match"
},
KeySystemInternalError: {
code: -62010,
text: "KeySystem: internal-error"
},
KeySystemOutputRestricted: {
code: -62011,
text: "KeySystem: output-restricted"
},
KeySystemSetupError: {
code: -62012,
text: "KeySystem: setup error"
},
KeySystemFailedToInitialize: {
code: -62013,
text: "KeySystem: could not initialize"
},
KeySystemFailedToCreateSession: {
code: -62014,
text: "KeySystem: could not create session"
},
KeySystemUndefinedNavigator: {
code: -62015,
text: "KeySystem: navigator undefined"
},
KeySystemNoKeySystemsToTry: {
code: -62016,
text: "KeySystem: no key systems to try"
},
KeySystemNoConstructor: {
code: -62017,
text: "KeySystem: No constructor"
},
KeySystemNoKeySystemAccess: {
code: -62018,
text: "KeySystem: No KeySystemAccess"
},
KeySystemCertificateLoadError: {
code: -62019,
text: "KeySystem: Certificate Load Error"
}
},
o = "networkError",
L = "mediaError",
s = "otherError",
_ = "manifestParsingError",
f = "manifestIncompatibleCodecsError",
N = "levelLoadError",
n = "bufferAppendError",
r = "internalException";
class V extends p {
constructor(e, t, i) {
super(s, r, e, t, i)
}
}
class D extends p {
constructor(e, t, i) {
super(L, "fragParsingError", e, t, i)
}
}
class F extends p {
constructor(e, t, i, r) {
super("muxError", "remuxAllocError", e, t, i), this.bytes = r
}
}
function S(e) {
return e.baseTime / e.timescale
}
function B(e, t) {
return {
baseTime: Math.floor(e * t),
timescale: t
}
}
function g(e, t) {
return S(e) < S(t) ? e : t
}
function y(e, t) {
return S(e) > S(t) ? e : t
}
function b(e, t) {
return S(e) - S(t)
}
var t = void 0 !== l.Buffer ? require("events").EventEmitter : class {
constructor() {
this.eventMap = {}
}
_on(e, t, i = !1) {
return null == this.eventMap[e] && (this.eventMap[e] = []), i ? this.eventMap[e].splice(0, 0, t) : this.eventMap[e].push(t), this
}
_off(e, t) {
return null != this.eventMap[e] && (this.eventMap[e] = this.eventMap[e].filter(e => e.listener !== t.listener), 0 === this.eventMap[e].length && delete this.eventMap[e]), this
}
on(e, t) {
return this._on(e, {
listener: t,
once: !1
})
}
off(e, t) {
return this._off(e, {
listener: t
})
}
addListener(e, t) {
return this.on(e, t)
}
once(e, t) {
return this._on(e, {
listener: t,
once: !0
})
}
removeListener(e, t) {
return this.off(e, t)
}
removeAllListeners(e) {
return delete this.eventMap[e], this
}
setMaxListeners(e) {
return this
}
getMaxListeners() {
return 1 / 0
}
listeners(e) {
return null == this.eventMap[e] ? [] : this.eventMap[e].map(e => e.listener)
}
rawListeners(e) {
return this.listeners(e)
}
emit(e, ...t) {
if (null == this.eventMap[e]) return !1;
let i = !1;
for (const r of this.eventMap[e]) {
try {
r.listener.apply(this, t)
} catch (e) {}
i = !0
}
return i
}
listenerCount(e) {
return null == this.eventMap[e] ? 0 : this.eventMap[e].length
}
prependListener(e, t) {
return this._on(e, {
listener: t,
once: !1
}, !0)
}
prependOnceListener(e, t) {
return this._on(e, {
listener: t,
once: !0
}, !0)
}
eventNames() {
return Object.keys(this.eventMap)
}
};
class a extends t {
trigger(e, t) {
this.emit(e, t)
}
}
function E(e, t, i, r, n) {
let s, a, o, l;
const d = navigator.userAgent.toLowerCase(),
u = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350];
s = 1 + ((192 & t[i + 2]) >>> 6);
var c = (60 & t[i + 2]) >>> 2;
if (!(u.length - 1 < c)) return o = (1 & t[i + 2]) << 2, o |= (192 & t[i + 3]) >>> 6, /firefox/i.test(d) ? 6 <= c ? (s = 5, l = new Array(4), a = c - 3) : (s = 2, l = new Array(2)) : -1 !== d.indexOf("android") ? (s = 2, l = new Array(2)) : (s = 5, l = new Array(4), a = r && (-1 !== r.indexOf("mp4a.40.29") || -1 !== r.indexOf("mp4a.40.5")) || !r && 6 <= c ? c - 3 : ((r && -1 !== r.indexOf("mp4a.40.2") || !r && 1 == o) && (s = 2, l = new Array(2)), c)), l[0] = s << 3, l[0] |= (14 & c) >> 1, l[1] |= (1 & c) << 7, l[1] |= o << 3, 5 === s && (l[1] |= (14 & a) >> 1, l[2] = (1 & a) << 7, l[2] |= 8, l[3] = 0), {
esdsConfig: l,
samplerate: u[c],
channelCount: o,
segmentCodec: "aac",
codec: "mp4a.40." + s
}; {
const t = new D(!0, `invalid ADTS sampling index:${c}`, $.InvalidADTSSamplingIndex);
e.trigger(x.INTERNAL_ERROR, t)
}
}
class u {
constructor(e, t, i, r, n) {
this.observer = e, this.remuxer = t, this.config = i, this.typeSupported = r, this.logger = n
}
static probe(e, t) {
throw new Error("Method not implemented")
}
resetTimeStamp(e) {}
resetInitSegment(e, t, i, r) {}
destroy() {}
}
class c extends u {
constructor(e, t, i, r, n) {
super(e, t, i, r, n), this.observer = e, this.remuxer = t, this.config = i, this.typeSupported = r, this.logger = n, this.esRemuxer = t
}
}
class h {
constructor(e, t, i) {
this.observer = e, this.config = t, this.logger = i
}
resetInitSegment() {}
resetTimeStamp(e) {}
destroy() {}
}
let m, I;
var w = {
strToUtf8array: e => (m = m || new TextEncoder, m.encode(e)),
utf8arrayToStr: e => (I = I || new TextDecoder("utf-8"), I.decode(e))
},
A = {
strToUtf8array(e) {
e = l.Buffer.from(e, "utf-8");
return new Uint8Array(e.buffer, e.byteOffset, e.byteLength)
},
utf8arrayToStr: e => l.Buffer.from(e).toString("utf-8")
};
let O = {
strToUtf8array(e) {
const t = unescape(encodeURIComponent(e)),
i = new Uint8Array(t.length);
for (let e = 0; e < t.length; e++) i[e] = t.charCodeAt(e);
return i
},
utf8arrayToStr: e => String.fromCharCode.apply(null, Array.from(e))
};
"undefined" != typeof TextEncoder && "undefined" != typeof TextDecoder ? O = w : "function" == typeof(null === (fl = l.Buffer) || void 0 === fl ? void 0 : fl.from) && (O = A);
const k = {
name: "ID3"
};
class C {
constructor(e, t) {
this.logger = t, this._hasTimeStamp = !1, this._audioType = null, this._length = 0, this._frames = [];
let i, r, n, s, a = 0;
for (;;)
if (n = C.readUTF(e, a, 3), a += 3, "ID3" === n) {
this._minor = e[a++], this._revision = e[a++];
const t = e[a++];
if (128 & t && (this._unsynchronized = !0, this.logger.error(k, "id3 tag is unsynchronized")), 64 & t && (this._hasExtendedHeader = !0, this.logger.warn(k, "id3 tag has extended header")), i = C.readSynchSafeUint32(e.subarray(a, a + 4)), a += 4, r = a + i, this._hasExtendedHeader) {
const t = C.readSynchSafeUint32(e.subarray(a, a + 4));
this.logger.warn(k, `id3 tag has ${t}-byte extended header. usually 6 or 10 bytes`), a += t
}
2 < this.minor ? this._parseID3Frames(e, a, r) : this.logger.error(k, "[id3] doesn't support older than v2.3 tags"), a = r
} else {
if ("3DI" !== n) return a -= 3, void((s = a) && (this.hasTimeStamp || this.logger.warn(k, "ID3 tag found, but no timestamp"), this._length = s, this._payload = e.slice(0, s)));
a += 7
}
}
static isHeader(e, t) {
return 73 === e[t] && 68 === e[t + 1] && 51 === e[t + 2] && e[t + 3] < 255 && e[t + 4] < 255 && e[t + 6] < 128 && e[t + 7] < 128 && e[t + 8] < 128 && e[t + 9] < 128
}
static readSynchSafeUint32(e) {
return 2097152 * (127 & e[0]) + 16384 * (127 & e[1]) + 128 * (127 & e[2]) + (127 & e[3])
}
static readUTF(e, t, i) {
let r = "",
n = t;
for (var s = t + i; r += String.fromCharCode(e[n++]), n < s;);
return r
}
isID3Frame(e, t) {
return e[t + 4] < 128 && e[t + 5] < 128 && e[t + 6] < 128 && e[t + 7] < 128
}
decodeID3Frame(e) {
return "TXXX" === e.type ? this.decodeTxxxFrame(e) : "WXXX" === e.type ? this.decodeWxxxFrame(e) : "PRIV" === e.type ? this.decodePrivFrame(e) : "T" === e.type[0] ? this.decodeTextFrame(e) : {
key: e.type,
data: e.data
}
}
decodeTxxxFrame(e) {
if (!(e.size < 2) && 3 === e.data[0]) {
var t = 1,
i = this.id3utf8ArrayToStr(e.data.subarray(1));
return t += i.length + 1, {
key: "TXXX",
description: i,
data: this.id3utf8ArrayToStr(e.data.subarray(t))
}
}
}
decodeWxxxFrame(e) {
if (!(e.size < 2) && 3 === e.data[0]) {
var t = 1,
i = this.id3utf8ArrayToStr(e.data.subarray(1));
return t += i.length + 1, {
key: "WXXX",
description: i,
data: O.utf8arrayToStr(e.data.subarray(t))
}
}
}
decodeTextFrame(e) {
if (!(e.size < 2) && 3 === e.data[0]) {
var t = e.data.subarray(1);
return {
key: e.type,
data: this.id3utf8ArrayToStr(t)
}
}
}
decodePrivFrame(e) {
if (!(e.size < 2)) {
var t = this.id3utf8ArrayToStr(e.data);
return {
key: "PRIV",
info: t,
data: e.data.slice(t.length + 1)
}
}
}
_extractID3Frame(e, t, i, r, n) {
var s = r + i;
let a;
return s <= n ? a = {
type: t,
data: e.slice(r, s)
} : this.logger.error(k, `id3 frame ${t} size ${i} exceeded ${n}`), a
}
_parseID3Frames(e, t, i) {
let r, n, s, a;
for (; t + 8 <= i;) {
if (!this.isID3Frame(e, t)) return void this.logger.error(k, `[id3] illegal id3 frame @ offset ${t}. skip this id3 tag`);
if (r = C.readUTF(e, t, 4), t += 4, "" === r) return;
if (0 === (n = C.readSynchSafeUint32(e.subarray(t, t + 4)))) return;
t += 4, e[t++], e[t++], s = t;
var o = this._extractID3Frame(e, r, n, s, i);
if (o) {
const e = this.decodeID3Frame(o);
this._frames.push(e)
}
if ("PRIV" === r)
if (53 === n && "com.apple.streaming.transportStreamTimestamp" === C.readUTF(e, t, 44)) {
t += 44, t += 4;
const i = 1 & e[t++];
this._hasTimeStamp = !0, a = ((e[t++] << 23) + (e[t++] << 15) + (e[t++] << 7) + e[t++]) / 45, i && (a += 47721858.84), a = Math.round(a), this._timeStamp = a
} else 45 <= n && "com.apple.streaming.audioDescription" === C.readUTF(e, t, 36) ? (t += 37, this._audioType = C.readUTF(e, t, 4), t += 4, t += n - 41) : t += n;
else t += n
}
}
id3utf8ArrayToStr(e) {
let t, i, r = "",
n = 0;
const s = e.length;
for (; n < s;) {
const s = e[n++];
switch (s >> 4) {
case 0:
return r;
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
r += String.fromCharCode(s);
break;
case 12:
case 13:
t = e[n++], r += String.fromCharCode((31 & s) << 6 | 63 & t);
break;
case 14:
t = e[n++], i = e[n++], r += String.fromCharCode((15 & s) << 12 | (63 & t) << 6 | (63 & i) << 0)
}
}
}
get hasTimeStamp() {
return this._hasTimeStamp
}
get timeStamp() {
return this._timeStamp
}
get audioType() {
return this._audioType
}
get length() {
return this._length
}
get payload() {
return this._payload
}
get frames() {
return this._frames
}
get minor() {
return this._minor
}
get revision() {
return this._revision
}
}
var M = C;
const U = {
name: "AACDemuxer"
};
class K extends c {
resetInitSegment(e, t) {
this.audioConfig = void 0, this.audioTrack = void 0, this.duration = t
}
static probe(e, t) {
let i, r;
for (i = new M(e, t).length, r = Math.min(e.length - 1, i + 100); i < r; i++)
if (255 === e[i] && 240 == (246 & e[i + 1])) return !0;
return !1
}
append(e, t, i, r, n) {
var s = new M(e, this.logger),
a = s.hasTimeStamp ? 90 * s.timeStamp : 9e4 * t;
let o, l, d, u, c, h, p, f, m, g;
for (s.length && (g = s.payload, s.frames.length && (m = s.frames), f = {
id3Samples: [{
pts: a,
dts: a,
data: g,
frames: m
}],
inputTimescale: 9e4
}), d = s.length, h = e.length; d < h - 1 && (255 !== e[d] || 240 != (246 & e[d + 1])); d++);
if (!this.audioConfig && (this.audioConfig = E(this.observer, e, d, void 0, this.logger), !this.audioConfig)) throw "failed to parse adts config";
if (!this.audioTrack) {
const e = {
id: 258,
inputTimescale: 9e4,
timescale: NaN,
duration: this.duration,
encrypted: !1,
keyTagInfo: n
},
t = {
len: 0,
sequenceNumber: 0,
esSamples: []
};
this.audioTrack = {
info: e,
parsingData: t,
type: "audio",
config: this.audioConfig
}
}
"zaac" !== s.audioType && "zach" !== s.audioType && "zacp" !== s.audioType || (this.audioTrack.info.encrypted = !0), l = 0;
for (var y = 9216e4 / this.audioConfig.samplerate; d + 5 < h && (u = 1 & e[d + 1] ? 7 : 9, o = (3 & e[d + 3]) << 11 | e[d + 4] << 3 | (224 & e[d + 5]) >>> 5, o -= u, 0 < o && d + u + o <= h);)
for (c = a + l * y, p = {
unit: e.subarray(d + u, d + u + o),
pts: c,
dts: c,
keyTagInfo: n
}, this.audioTrack.parsingData.esSamples.push(p), this.audioTrack.parsingData.len += o, d += o + u, l++; d < h - 1; d++) {
if (M.isHeader(e, d)) {
const t = new M(e.subarray(d), this.logger);
if (0 < t.length) {
d += t.length;
const e = t.hasTimeStamp ? 90 * t.timeStamp : a;
f.id3Samples.push({
pts: e,
dts: e,
data: t.payload,
frames: t.frames
})
} else this.logger.error(U, `[id3] invalid length ${h}`)
}
if (255 === e[d] && 240 == (246 & e[d + 1])) break
}
this.esRemuxer.remuxEsTracks(this.audioTrack, void 0, f, void 0, t, i, r, n)
}
}
class q {
bsReadAndUpdate(e, t, i) {
e = this.readBits(e, t, i);
return this.updateOffset(t, i), e
}
bsWriteAndUpdate(e, t, i, r) {
r = this.writeBits(e, t, i, r);
return this.updateOffset(t, i), r
}
bsSkip(e, t) {
this.updateOffset(e, t)
}
readBits(i, r, n) {
if (i && r) {
let t = r.byteOffset;
const s = r["usedBits"];
if (!(8 <= s || 32 < s + n)) {
let e;
const a = new Uint32Array(1),
o = new Uint32Array(1),
l = new Uint8Array(1);
if (!(8 <= s || 32 < n)) {
if (s) {
const r = 8 - s,
a = n < r ? r - n : 0;
o[0] = 4278190080 >>> 32 - r, e = (i[t] & o[0]) >>> a, t += 1, n -= r
}
for (; 0 < n;) {
l[0] = i[t];
const r = Math.min(n, 8),
s = 8 - r;
o[0] = 4278190080 >>> 24 + s << s, a[0] = (l[0] & o[0]) >> s, e = e ? e << r | a[0] : a[0], t += 1, n -= r
}
return e
}
}
}
}
writeBits(t, i, r, n) {
if (t && i) {
let e = i.byteOffset;
var i = i["usedBits"];
if (!(8 <= i || 32 < i + r)) {
const s = new Uint32Array(1),
a = new Uint32Array(1),
o = new Uint32Array(1),
l = new Uint8Array(1);
for (s[0] = n, i && (a[0] = s[0] << 32 - r, o[0] = 4278190080, l[0] = (a[0] & o[0]) >>> 24 + i, t[e] &= ~(o[0] >>> 24 + i), t[e] |= l[0], e += 1, r -= 8 - i); 0 < r;) {
a[0] = s[0] << 32 - r, o[0] = 4278190080, l[0] = (a[0] & o[0]) >>> 24;
const d = r < 0 ? 8 - r : 0;
t[e] &= ~(o[0] >>> 24 >>> d << d), t[e] |= l[0], r -= 8, e += 1
}
return 0
}
}
}
updateOffset(e, t) {
var i, r;
!e || !t || 32 < e.usedBits + t || (i = e.usedBits % 8, r = Math.floor((i + t) / 8), t = (i + t) % 8, e.byteOffset += r, e.usedBits = t)
}
}
function H(e, t) {
return 1536 / e.samplerate * t
}
function j(e, t, i, r) {
let n;
if (i + 8 > t.length) return n = new D(!0, "error parsing ac-3, not enough data", $.InsufficientAC3Data), void e.trigger(x.INTERNAL_ERROR, n);
if (11 !== t[i] || 119 !== t[i + 1]) return n = new D(!0, "invalid ac-3 magic", $.InvalidAC3Magic), void e.trigger(x.INTERNAL_ERROR, n);
var s = t[i + 4] >> 6;
if (3 <= s) return n = new D(!0, `invalid ac-3 samplingRateCode:${s}`, $.InvalidAC3SamplingRateCode), void e.trigger(x.INTERNAL_ERROR, n);
var a = 63 & t[i + 4],
o = t[i + 6] >> 5;
let l = 0;
2 == o ? l += 2 : (1 & o && 1 != o && (l += 2), 4 & o && (l += 2));
var d = (t[i + 6] << 8 | t[i + 7]) >> 12 - l & 1,
u = [2, 1, 2, 3, 3, 4, 4, 5][o] + d,
e = t[i + 5] >> 3,
i = 7 & t[i + 5];
return {
samplerate: W[s],
channelCount: u,
segmentCodec: "ac3",
codec: "ac-3",
extraData: s << 22 | e << 17 | i << 14 | o << 11 | d << 10 | a >> 1 << 5
}
}
function Q(e, t, i) {
let r;
if (i + 8 > t.length) return r = new D(!0, "error parsing ac-3, not enough data", $.InsufficientAC3Data), void e.trigger(x.INTERNAL_ERROR, r);
if (11 !== t[i] || 119 !== t[i + 1]) return r = new D(!0, "invalid ac-3 magic", $.InvalidAC3Magic), void e.trigger(x.INTERNAL_ERROR, r);
var n = t[i + 4] >> 6;
return 3 <= n ? (r = new D(!0, `invalid ac-3 samplingRateCode:${n}`, $.InvalidAC3SamplingRateCode), void e.trigger(x.INTERNAL_ERROR, r)) : (i = 63 & t[i + 4], 2 * G[3 * i + n])
}
const W = [48e3, 44100, 32e3],
G = [64, 69, 96, 64, 70, 96, 80, 87, 120, 80, 88, 120, 96, 104, 144, 96, 105, 144, 112, 121, 168, 112, 122, 168, 128, 139, 192, 128, 140, 192, 160, 174, 240, 160, 175, 240, 192, 208, 288, 192, 209, 288, 224, 243, 336, 224, 244, 336, 256, 278, 384, 256, 279, 384, 320, 348, 480, 320, 349, 480, 384, 417, 576, 384, 418, 576, 448, 487, 672, 448, 488, 672, 512, 557, 768, 512, 558, 768, 640, 696, 960, 640, 697, 960, 768, 835, 1152, 768, 836, 1152, 896, 975, 1344, 896, 976, 1344, 1024, 1114, 1536, 1024, 1115, 1536, 1152, 1253, 1728, 1152, 1254, 1728, 1280, 1393, 1920, 1280, 1394, 1920];
class z extends c {
resetInitSegment(e, t) {
this.audioConfig = void 0, this.audioTrack = void 0, this.duration = t
}
static probe(e, t) {
var i = new M(e, t),
t = i.length;
return !!(i.hasTimeStamp && 11 === e[t] && 119 === e[t + 1] && (new q).bsReadAndUpdate(e, {
byteOffset: t + 5,
usedBits: 0
}, 5) < 16)
}
append(e, t, i, r, n) {
var s = new M(e, this.logger),
a = 90 * s.timeStamp,
o = e.byteLength;
let l = 0,
d = s.length;
if (this.audioConfig || (this.audioConfig = j(this.observer, e, d, this.logger)), !this.audioConfig) throw "failed to parse ac3 config";
if (!this.audioTrack) {
const e = {
id: 258,
inputTimescale: 9e4,
timescale: NaN,
duration: this.duration,
encrypted: !1,
keyTagInfo: n
},
t = {
len: 0,
sequenceNumber: 0,
esSamples: []
};
this.audioTrack = {
info: e,
parsingData: t,
type: "audio",
config: this.audioConfig
}
}
var u = H(this.audioConfig, this.audioTrack.info.inputTimescale);
for ("zac3" === s.audioType && (this.audioTrack.info.encrypted = !0); d < o;) {
if (M.isHeader(e, d) && (d += new M(e.subarray(d), this.logger).length), 11 !== e[d] || 119 !== e[d + 1]) {
const e = new D(!0, "invalid ac-3 magic", $.InvalidAC3Magic);
return void this.observer.trigger(x.INTERNAL_ERROR, e)
}
const t = Q(this.observer, e, d),
i = a + l * u,
r = {
unit: e.subarray(d, d + t),
pts: i,
dts: i,
keyTagInfo: n
};
this.audioTrack.parsingData.esSamples.push(r), this.audioTrack.parsingData.len += t, d += t, l++
}
this.esRemuxer.remuxEsTracks(this.audioTrack, void 0, {
id3Samples: [{
pts: a,
dts: a,
data: s.payload,
frames: s.frames
}],
inputTimescale: this.audioTrack.info.inputTimescale
}, void 0, t, i, r, n)
}
}
var X = function(t, i, r, n) {
const s = new q;
let a, o = !1,
l = 0;
for (; r < i.length;) {
if (r + 8 > i.length) return a = new D(!0, "error parsing ec-3, not enough data", $.InsufficientEC3Data), void t.trigger(x.INTERNAL_ERROR, a);
let e = 0;
if (M.isHeader(i, r) && (e = new M(i.subarray(r), n).length || 0, r += e), 11 !== i[r] || 119 !== i[r + 1]) return a = new D(!0, "invalid ec-3 magic", $.InvalidEC3Magic), void t.trigger(x.INTERNAL_ERROR, a);
var d = {
byteOffset: r + 2,
usedBits: 0
},
u = s.bsReadAndUpdate(i, d, 2),
c = s.bsReadAndUpdate(i, d, 3);
if (0 === u || 2 === u)
if (!0 === o) {
if (0 === c) break
} else o = !0;
else if (1 !== u) return a = new D(!0, "reserved stream type", $.ReservedStreamType), void t.trigger(x.INTERNAL_ERROR, a);
d = 2 * (s.bsReadAndUpdate(i, d, 11) + 1);
r += d, l += d + (e || 0)
}
return l
},
Y = function(t, i, r, n) {
const s = {
frmsiz: 0,
fscod: 0,
numblkscod: 0,
acmod: 0,
lfeon: 0,
bsid: 0,
strmtyp: 0,
substreamid: 0,
chanmape: 0,
chanmap: 0,
mixdef: 0,
mixdeflen: 0,
bsmod: 0
},
a = {
fscod: 0,
acmod: 0,
lfeon: 0,
bsid: 0,
bsmod: 0,
chan_loc: 0,
data_rate: 0,
num_ind_sub: 0,
num_dep_sub: [],
complexity_index_type_a: 0
},
o = new q;
let l, d = !1,
u = 0;
for (; r < i.length;) {
if (r + 8 > i.length) return l = new D(!0, "error parsing ec-3, not enough data", $.InsufficientEC3Data), void t.trigger(x.INTERNAL_ERROR, l);
let e = 0;
if (M.isHeader(i, r) && (e = new M(i.subarray(r), n).length || 0, r += e), 11 !== i[r] || 119 !== i[r + 1]) return l = new D(!0, "invalid ec-3 magic", $.InvalidEC3Magic), void t.trigger(x.INTERNAL_ERROR, l);
const h = {
byteOffset: r + 2,
usedBits: 0
};
if (s.strmtyp = o.bsReadAndUpdate(i, h, 2), s.substreamid = o.bsReadAndUpdate(i, h, 3), 0 === s.strmtyp || 2 === s.strmtyp) {
if (!0 === d) {
if (0 === s.substreamid) break
} else d = !0;
a.num_ind_sub++, a.num_dep_sub.push(0)
} else {
if (1 !== s.strmtyp) return l = new D(!0, "reserved stream type", $.ReservedStreamType), void t.trigger(x.INTERNAL_ERROR, l);
a.num_dep_sub[a.num_ind_sub - 1]++
}
if (s.frmsiz = o.bsReadAndUpdate(i, h, 11), s.fscod = o.bsReadAndUpdate(i, h, 2), 3 === s.fscod ? (o.bsSkip(h, 2), s.numblkscod = 3) : s.numblkscod = o.bsReadAndUpdate(i, h, 2), s.acmod = o.bsReadAndUpdate(i, h, 3), s.lfeon = o.bsReadAndUpdate(i, h, 1), s.bsid = o.bsReadAndUpdate(i, h, 5), o.bsSkip(h, 5), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 8), 0 === s.acmod && (o.bsSkip(h, 5), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 8)), 1 === s.strmtyp && (s.chanmape = o.bsReadAndUpdate(i, h, 1), s.chanmape && (s.chanmap = o.bsReadAndUpdate(i, h, 16))), o.bsReadAndUpdate(i, h, 1) && (2 < s.acmod && o.bsSkip(h, 2), 1 & s.acmod && 2 < s.acmod && o.bsSkip(h, 6), 4 & s.acmod && o.bsSkip(h, 6), s.lfeon && o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 5), 0 === s.strmtyp)) {
if (o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 6), 0 === s.acmod && o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 6), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 6), s.mixdef = o.bsReadAndUpdate(i, h, 2), 1 === s.mixdef) o.bsSkip(h, 5);
else if (2 === s.mixdef) o.bsSkip(h, 12);
else if (3 === s.mixdef) {
s.mixdeflen = o.bsReadAndUpdate(i, h, 5), o.bsReadAndUpdate(i, h, 1) && (o.bsSkip(h, 5), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4), o.bsReadAndUpdate(i, h, 1) && (o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4))), o.bsReadAndUpdate(i, h, 1) && (o.bsSkip(h, 5), o.bsReadAndUpdate(i, h, 1) && (o.bsSkip(h, 7), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 8)));
const t = s.mixdeflen + 2 + (h.usedBits ? 1 : 0);
h.byteOffset += t
}
if (s.acmod < 2 && (o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 14), 0 === s.acmod && o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 14)), o.bsReadAndUpdate(i, h, 1))
if (0 === s.numblkscod) o.bsSkip(h, 5);
else
for (let e = 0; e < s.numblkscod; e++) o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 5)
}
if (s.bsmod = 0, o.bsReadAndUpdate(i, h, 1) && (s.bsmod = o.bsReadAndUpdate(i, h, 3), o.bsSkip(h, 2), 2 === s.acmod && o.bsSkip(h, 4), 6 <= s.acmod && o.bsSkip(h, 2), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 8), 0 === s.acmod && o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 8), s.fscod < 3 && o.bsSkip(h, 1)), 0 === s.strmtyp && 3 !== s.numblkscod && o.bsSkip(h, 1), 2 !== s.strmtyp || (3 === s.numblkscod ? 1 : o.bsReadAndUpdate(i, h, 1)) && o.bsReadAndUpdate(i, h, 6), o.bsReadAndUpdate(i, h, 1)) {
const t = o.bsReadAndUpdate(i, h, 6);
if (0 === s.strmtyp && 0 === s.substreamid && 1 === t) {
const t = o.bsReadAndUpdate(i, h, 7),
r = o.bsReadAndUpdate(i, h, 1),
n = o.bsReadAndUpdate(i, h, 8);
0 === t && 1 === r && 1 <= n && n <= 16 && (a.complexity_index_type_a = n)
}
}
if (s.chanmape) a.chan_loc |= s.chanmap;
else {
const t = [40960, 16384, 40960, 57344, 41472, 57856, 47104, 63488];
a.chan_loc |= t[s.acmod]
}
0 === s.strmtyp && (a.fscod = s.fscod, a.bsid = s.bsid, a.bsmod = s.bsmod, a.acmod = s.acmod, a.lfeon = s.lfeon), a.chan_loc |= s.lfeon ? 1 : 0;
const p = 2 * (s.frmsiz + 1);
r += p, u += p + (e || 0)
}
let c = 0;
for (let e = 0; e < 16; e++) a.chan_loc & 1 << e && c++;
a.lfeon && c++;
let h = 10 + 3 * a.num_ind_sub;
const p = [48e3, 44100, 32e3][a.fscod];
a.data_rate = p / 1536 * u * 8, h = 10 + 3 * a.num_ind_sub;
for (let e = 0; e < a.num_ind_sub; e++) 0 < a.num_dep_sub[e] && h++;
0 < a.complexity_index_type_a && (h += 2);
var f = new Uint8Array(h),
m = {
byteOffset: 0,
usedBits: 0
};
o.bsWriteAndUpdate(f, m, 32, h), o.bsWriteAndUpdate(f, m, 32, 1684366131), o.bsWriteAndUpdate(f, m, 13, a.data_rate), o.bsWriteAndUpdate(f, m, 3, a.num_ind_sub);
for (let e = 0; e < a.num_ind_sub; e++) o.bsWriteAndUpdate(f, m, 2, a.fscod), o.bsWriteAndUpdate(f, m, 5, a.bsid), o.bsWriteAndUpdate(f, m, 1, 0), o.bsWriteAndUpdate(f, m, 1, 0 === e ? 0 : 1), o.bsWriteAndUpdate(f, m, 3, a.bsmod), o.bsWriteAndUpdate(f, m, 3, a.acmod), o.bsWriteAndUpdate(f, m, 1, a.lfeon), o.bsWriteAndUpdate(f, m, 3, 0), o.bsWriteAndUpdate(f, m, 4, a.num_dep_sub[e]), 0 < a.num_dep_sub[e] ? o.bsWriteAndUpdate(f, m, 9, a.chan_loc) : o.bsWriteAndUpdate(f, m, 1, 0);
return 0 < a.complexity_index_type_a && (o.bsWriteAndUpdate(f, m, 7, 0), o.bsWriteAndUpdate(f, m, 1, 1), o.bsWriteAndUpdate(f, m, 8, a.complexity_index_type_a)), {
samplerate: p,
channelCount: c,
segmentCodec: "ec3",
codec: "ec-3",
extraDataBytes: f
}
};
class J extends c {
resetInitSegment(e, t) {
this.audioConfig = void 0, this.audioTrack = void 0, this.duration = t
}
static probe(e, t) {
var i = new M(e, t),
t = i.length;
return !(!i.hasTimeStamp || 11 !== e[t] || 119 !== e[t + 1] || 16 !== (new q).bsReadAndUpdate(e, {
byteOffset: t + 5,
usedBits: 0
}, 5))
}
append(e, t, i, r, n) {
var s = new M(e, this.logger),
a = 90 * s.timeStamp,
o = e.length;
let l = 0,
d = s.length;
if (this.audioConfig || (this.audioConfig = Y(this.observer, e, d, this.logger)), !this.audioConfig) throw "failed to parse ec-3 config";
if (!this.audioTrack) {
const e = {
id: 258,
inputTimescale: 9e4,
timescale: NaN,
duration: this.duration,
encrypted: !1,
keyTagInfo: n
},
t = {
len: 0,
sequenceNumber: 0,
esSamples: []
};
this.audioTrack = {
info: e,
parsingData: t,
type: "audio",
config: this.audioConfig
}
}
var u = H(this.audioConfig, this.audioTrack.info.inputTimescale);
for ("zec3" === s.audioType && (this.audioTrack.info.encrypted = !0); d < o;) {
const t = X(this.observer, e, d, this.logger),
i = a + l * u,
r = {
unit: e.subarray(d, d + t),
pts: i,
dts: i,
keyTagInfo: n
};
this.audioTrack.parsingData.esSamples.push(r), this.audioTrack.parsingData.len += t, d += t, l++
}
this.esRemuxer.remuxEsTracks(this.audioTrack, void 0, {
id3Samples: [{
pts: a,
dts: a,
data: s.payload,
frames: s.frames
}],
inputTimescale: this.audioTrack.info.inputTimescale
}, void 0, t, i, r, n)
}
}
const Z = {
BitratesMap: [32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160],
SamplingRateMap: [44100, 48e3, 32e3, 22050, 24e3, 16e3, 11025, 12e3, 8e3],
SamplesCoefficients: [
[0, 72, 144, 12],
[0, 0, 0, 0],
[0, 72, 144, 12],
[0, 144, 144, 12]
],
BytesInSlot: [0, 1, 1, 4],
onFrame: function(e, t, i, r, n, s, a) {
r = a + s * (10368e4 / r);
e.esSamples.push({
unit: t,
pts: r,
dts: r
}), e.len += t.length
},
onNoise: function(e, t) {
t.warn("mpeg audio has noise: " + e.length + " bytes")
},
parseFrames: function(e, t, i, r, n, s, a) {
if (r < i + 2) return -1;
if (255 === t[i] || 224 == (224 & t[i + 1])) {
if (r < i + 24) return -1;
const a = t[i + 1] >> 3 & 3,
c = t[i + 1] >> 1 & 3,
h = t[i + 2] >> 4 & 15,
p = t[i + 2] >> 2 & 3,
f = !!(2 & t[i + 2]);
if (1 != a && 0 != h && 15 != h && 3 != p) {
var o = 1e3 * [32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160][14 * (3 == a ? 3 - c : 3 == c ? 3 : 4) + h - 1],
l = [44100, 48e3, 32e3, 22050, 24e3, 16e3, 11025, 12e3, 8e3][3 * (3 == a ? 0 : 2 == a ? 1 : 2) + p],
d = f ? 1 : 0,
u = t[i + 3] >> 6 == 3 ? 1 : 2,
d = 3 == c ? (3 == a ? 12 : 6) * o / l + d << 2 : (3 == a ? 144 : 72) * o / l + d | 0;
return r < i + d ? -1 : (Z.onFrame(e, t.subarray(i, i + d), o, l, u, n, s), d)
}
}
let c = i + 2;
for (; c < r;) {
if (255 === t[c - 1] && 224 == (224 & t[c])) return Z.onNoise(t.subarray(i, c - 1), a), c - i - 1;
c++
}
return -1
},
parse: function(e, t, i, r, n) {
var s = t.length;
let a, o = 0;
for (; i < s && 0 < (a = Z.parseFrames(e, t, i, s, o++, r, n));) i += a
},
getAudioConfig: function(e, t) {
var i = e[t + 1] >> 3 & 3,
r = e[t + 1] >> 1 & 3,
n = e[t + 2] >> 4 & 15,
s = e[t + 2] >> 2 & 3,
a = e[t + 2] >> 1 & 1;
if (1 != i && 0 != n && 15 != n && 3 != s) {
var o = 3 == i ? 3 - r : 3 == r ? 3 : 4,
o = 1e3 * Z.BitratesMap[14 * o + n - 1],
n = 3 == i ? 0 : 2 == i ? 1 : 2,
s = Z.SamplingRateMap[3 * n + s],
t = e[t + 3] >> 6 == 3 ? 1 : 2,
i = Z.SamplesCoefficients[i][r],
r = Z.BytesInSlot[r];
return {
segmentCodec: "mp3",
codec: "mp3",
samplerate: s,
channelCount: t,
frameLength: parseInt(i * o / s + a, 10) * r
}
}
},
isHeaderPattern: function(e, t) {
return 255 === e[t] && 224 == (224 & e[t + 1]) && 0 != (6 & e[t + 1])
},
probe: function(t, i) {
if (i + 1 < t.length && Z.isHeaderPattern(t, i)) {
var r = Z.getAudioConfig(t, i);
let e = 4;
r && r.frameLength && (e = r.frameLength);
i = i + e;
if (i === t.length || i + 1 < t.length && Z.isHeaderPattern(t, i)) return !0
}
return !1
}
};
var ee = Z;
const te = {
name: "MP3Demuxer"
};
class ie extends c {
resetInitSegment(e, t) {
this.audioConfig = void 0, this.audioTrack = void 0, this.duration = t
}
static probe(e, t) {
var i = new M(e, t);
let r, n;
if (i.hasTimeStamp)
for (r = i.length, n = Math.min(e.length - 1, r + 100); r < n; r++)
if (ee.probe(e, r)) return t.warn(te, "MPEG Audio sync word found !"), !0;
return !1
}
append(e, t, i, r, n) {
var s = new M(e, this.logger),
a = 90 * s.timeStamp;
if (this.audioConfig || (this.audioConfig = ee.getAudioConfig(e, s.length)), !this.audioConfig) throw "unable to parse mp3 header";
if (!this.audioTrack) {
const e = {
id: 258,
inputTimescale: 9e4,
timescale: NaN,
duration: this.duration,
encrypted: !1,
keyTagInfo: n
},
t = {
len: 0,
sequenceNumber: 0,
esSamples: []
};
this.audioTrack = {
info: e,
parsingData: t,
type: "audio",
config: this.audioConfig
}
}
ee.parse(this.audioTrack.parsingData, e, s.length, a, this.logger), this.esRemuxer.remuxEsTracks(this.audioTrack, void 0, {
id3Samples: [{
pts: a,
dts: a,
data: s.payload,
frames: s.frames
}],
inputTimescale: 9e4
}, void 0, t, i, r)
}
}
function re(e, t) {
if ("mp4a.40.2" === e) {
if (1 === t) return new Uint8Array([0, 200, 0, 128, 35, 128]);
if (2 === t) return new Uint8Array([33, 0, 73, 144, 2, 25, 0, 35, 128]);
if (3 === t) return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 142]);
if (4 === t) return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 128, 44, 128, 8, 2, 56]);
if (5 === t) return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 56]);
if (6 === t) return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 0, 178, 0, 32, 8, 224])
} else {
if (1 === t) return new Uint8Array([1, 64, 34, 128, 163, 78, 230, 128, 186, 8, 0, 0, 0, 28, 6, 241, 193, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]);
if (2 === t) return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]);
if (3 === t) return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94])
}
return null
}
function ne(e) {
return "number" == typeof e && isFinite(e)
}
function se(e, t) {
return ne(e) ? e.toFixed(t) : `${e}`
}
function ae(e, i = 3) {
return JSON.stringify(e, (e, t) => !isNaN(t) && null != t && t.toFixed ? Number(null == t ? void 0 : t.toFixed(i)) : t)
}
let oe = !0;
function le(e) {
return oe ? "<redacted>" : e
}
function de(e) {
if (!e) return e;
if ("object" != typeof e) return e; {
if (Array.isArray(e)) return e.map(de);
const r = {};
for (var [t, i] of Object.entries(e)) r[t] = de(i);
return r
}
}
function ue(e) {
const t = [...e];
for (let e = 0; e < t.length; e++) t[e] = Object.assign({}, t[e]), t[e].url = le(t[e].url), t[e].attrs && (t[e].attrs = Object.assign({}, t[e].attrs), t[e].attrs.URI = le(t[e].attrs.URI));
return t
}
function ce(e) {
const t = [...e];
for (let e = 0; e < t.length; e++) t[e] = Object.assign({}, t[e]), t[e].url = le(t[e].url);
return t
}
const he = Math.pow(2, 32) - 1;
class pe {
static init() {
let e;
for (e in pe.types = {
avc1: [],
avcC: [],
btrt: [],
dinf: [],
dref: [],
esds: [],
free: [],
ftyp: [],
hdlr: [],
mdat: [],
mdhd: [],
mdia: [],
mfhd: [],
minf: [],
moof: [],
moov: [],
mp4a: [],
".mp3": [],
dac3: [],
"ac-3": [],
dec3: [],
"ec-3": [],
mvex: [],
mvhd: [],
pasp: [],
sdtp: [],
stbl: [],
stco: [],
stsc: [],
stsd: [],
stsz: [],
stts: [],
tfdt: [],
tfhd: [],
traf: [],
trak: [],
trun: [],
trex: [],
tkhd: [],
vmhd: [],
smhd: [],
uuid: [],
encv: [],
enca: [],
frma: [],
schm: [],
schi: [],
senc: [],
saio: [],
saiz: [],
sinf: [],
tenc: [],
sbgp: [],
seig: [],
sgpd: [],
pssh: []
}, pe.types) pe.types.hasOwnProperty(e) && (pe.types[e] = [e.charCodeAt(0), e.charCodeAt(1), e.charCodeAt(2), e.charCodeAt(3)]);
var t = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 118, 105, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 105, 100, 101, 111, 72, 97, 110, 100, 108, 101, 114, 0]),
i = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 115, 111, 117, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 111, 117, 110, 100, 72, 97, 110, 100, 108, 101, 114, 0]);
pe.HDLR_TYPES = {
video: t,
audio: i
};
var r = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, 0, 1]),
n = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]);
pe.STTS = pe.STSC = pe.STCO = n, pe.STSZ = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), pe.VMHD = new Uint8Array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]), pe.SMHD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]), pe.STSD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1]);
t = new Uint8Array([105, 115, 111, 109]), i = new Uint8Array([97, 118, 99, 49]), n = new Uint8Array([0, 0, 0, 1]);
pe.FTYP = pe.box(pe.types.ftyp, t, n, t, i), pe.DINF = pe.box(pe.types.dinf, pe.box(pe.types.dref, r))
}
static set16(e, t, i) {
return t[i] = e >> 8 & 255, t[i + 1] = 255 & e, i + 2
}
static set32(e, t, i) {
return t[i] = e >> 24 & 255, t[i + 1] = e >> 16 & 255, t[i + 2] = e >> 8 & 255, t[i + 3] = 255 & e, i + 4
}
static box(e) {
var t = Array.prototype.slice.call(arguments, 1);
let i = 8,
r = t.length;
for (var n = r; r--;) i += t[r].byteLength;
const s = new Uint8Array(i);
for (s[0] = i >> 24 & 255, s[1] = i >> 16 & 255, s[2] = i >> 8 & 255, s[3] = 255 & i, s.set(e, 4), r = 0, i = 8; r < n; r++) s.set(t[r], i), i += t[r].byteLength;
return s
}
static hdlr(e) {
return pe.box(pe.types.hdlr, pe.HDLR_TYPES[e])
}
static mdat(e) {
return pe.box(pe.types.mdat, e)
}
static mdhd(e, t) {
t *= e;
var i = Math.floor(t / (1 + he)),
t = Math.floor(t % (1 + he));
return pe.box(pe.types.mdhd, new Uint8Array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, 255 & e, i >> 24, i >> 16 & 255, i >> 8 & 255, 255 & i, t >> 24, t >> 16 & 255, t >> 8 & 255, 255 & t, 85, 196, 0, 0]))
}
static mdia(e) {
var t = pe.mdhd(e.info.timescale, e.info.duration),
i = pe.hdlr(e.type),
e = pe.minf(e);
return pe.box(pe.types.mdia, t, i, e)
}
static mfhd(e) {
return pe.box(pe.types.mfhd, new Uint8Array([0, 0, 0, 0, e >> 24, e >> 16 & 255, e >> 8 & 255, 255 & e]))
}
static minf(e) {
return "audio" === e.type ? pe.box(pe.types.minf, pe.box(pe.types.smhd, pe.SMHD), pe.DINF, pe.stbl(e)) : pe.box(pe.types.minf, pe.box(pe.types.vmhd, pe.VMHD), pe.DINF, pe.stbl(e))
}
static moof(e, t) {
pe.types || pe.init();
e = pe.traf(t, e);
return pe.box(pe.types.moof, pe.mfhd(t.sequenceNumber), e)
}
static moov(e) {
let t = e.length;
const i = [];
for (; t--;) i[t] = pe.trak(e[t]);
return pe.box.apply(null, [pe.types.moov, pe.mvhd(e[0].info.timescale, e[0].info.duration)].concat(i).concat(pe.mvex(e)))
}
static mvex(e) {
let t = e.length;
const i = [];
for (; t--;) i[t] = pe.trex(e[t]);
return pe.box(pe.types.mvex, ...i)
}
static mvhd(e, t) {
t *= e;
var i = Math.floor(t / (1 + he)),
t = Math.floor(t % (1 + he)),
t = new Uint8Array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, 255 & e, i >> 24, i >> 16 & 255, i >> 8 & 255, 255 & i, t >> 24, t >> 16 & 255, t >> 8 & 255, 255 & t, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255]);
return pe.box(pe.types.mvhd, t)
}
static sdtp(e) {
const t = e.samples || [],
i = new Uint8Array(4 + t.length);
let r, n;
for (n = 0; n < t.length; n++) r = t[n].flags, i[n + 4] = r.dependsOn << 4 | r.isDependedOn << 2 | r.hasRedundancy;
return pe.box(pe.types.sdtp, i)
}
static stbl(e) {
var t = pe.stsd(e),
i = pe.box(pe.types.stts, pe.STTS),
r = pe.box(pe.types.stsc, pe.STSC),
n = pe.box(pe.types.stsz, pe.STSZ),
e = pe.box(pe.types.stco, pe.STCO);
return pe.box(pe.types.stbl, t, i, r, n, e)
}
static avc1(e) {
let t, i, r, n = [],
s = [];
var a = e.info.encrypted ? pe.types.encv : pe.types.avc1;
for (t = 0; t < e.config.sps.length; t++) i = e.config.sps[t], r = i.byteLength, n.push(r >>> 8 & 255), n.push(255 & r), n = n.concat(Array.prototype.slice.call(i));
for (t = 0; t < e.config.pps.length; t++) i = e.config.pps[t], r = i.byteLength, s.push(r >>> 8 & 255), s.push(255 & r), s = s.concat(Array.prototype.slice.call(i));
var o = pe.box(pe.types.avcC, new Uint8Array([1, n[3], n[4], n[5], 255, 224 | e.config.sps.length].concat(n).concat([e.config.pps.length]).concat(s))),
l = e.config.width,
d = e.config.height,
u = e.config.pixelRatio[0],
c = e.config.pixelRatio[1],
h = e.info.encrypted && e.info.keyTagInfo ? pe.sinf(e.info.keyTagInfo, e.type, pe.types.avc1) : new Uint8Array;
return pe.box(a, new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, l >> 8 & 255, 255 & l, d >> 8 & 255, 255 & d, 0, 72, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 1, 18, 100, 97, 105, 108, 121, 109, 111, 116, 105, 111, 110, 47, 104, 108, 115, 46, 106, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 17, 17]), o, h, pe.box(pe.types.btrt, new Uint8Array([0, 28, 156, 128, 0, 45, 198, 192, 0, 45, 198, 192])), pe.box(pe.types.pasp, new Uint8Array([u >> 24, u >> 16 & 255, u >> 8 & 255, 255 & u, c >> 24, c >> 16 & 255, c >> 8 & 255, 255 & c])))
}
static esds(e) {
var t = e.esdsConfig.length;
return new Uint8Array([0, 0, 0, 0, 3, 23 + t, 0, 1, 0, 4, 15 + t, 64, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5].concat([t]).concat(e.esdsConfig).concat([6, 1, 2]))
}
static audioStsd(e) {
var t = e.samplerate;
return new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, e.channelCount, 0, 16, 0, 0, 0, 0, t >> 8 & 255, 255 & t, 0, 0])
}
static dac3(e) {
e = e.extraData;
return new Uint8Array([e >> 16 & 255, e >> 8 & 255, 255 & e])
}
static dec3(e) {
return e.extraDataBytes
}
static mp4a(e, t) {
let i = pe.types.mp4a,
r = null;
r = e.encrypted && e.keyTagInfo ? (i = pe.types.enca, pe.sinf(e.keyTagInfo, "audio", pe.types.mp4a)) : new Uint8Array;
e = pe.audioStsd(t), t = pe.box(pe.types.esds, pe.esds(t));
return pe.box(i, e, t, r)
}
static mp3(e) {
return pe.box(pe.types[".mp3"], pe.audioStsd(e))
}
static ac3(e, t) {
let i = pe.types["ac-3"],
r = null;
return r = e.encrypted && e.keyTagInfo ? (i = pe.types.enca, pe.sinf(e.keyTagInfo, "audio", pe.types["ac-3"])) : new Uint8Array, pe.box(i, pe.audioStsd(t), pe.box(pe.types.dac3, pe.dac3(t)), r)
}
static ec3(e, t) {
let i = pe.types["ec-3"],
r = null;
return r = e.encrypted && e.keyTagInfo ? (i = pe.types.enca, pe.sinf(e.keyTagInfo, "audio", pe.types["ec-3"])) : new Uint8Array, pe.box(i, pe.audioStsd(t), pe.box(pe.types.dec3, pe.dec3(t)), r)
}
static stsd(e) {
if ("audio" !== e.type) return pe.box(pe.types.stsd, pe.STSD, pe.avc1(e));
if ("mp3" === e.config.segmentCodec && "mp3" === e.config.codec) return pe.box(pe.types.stsd, pe.STSD, pe.mp3(e.config));
if ("ac3" === e.config.segmentCodec) return pe.box(pe.types.stsd, pe.STSD, pe.ac3(e.info, e.config));
if ("ec3" === e.config.segmentCodec) return pe.box(pe.types.stsd, pe.STSD, pe.ec3(e.info, e.config));
if ("aac" === e.config.segmentCodec) return pe.box(pe.types.stsd, pe.STSD, pe.mp4a(e.info, e.config));
throw `unknown segmentCodec ${e.config.segmentCodec}`
}
static tkhd(e) {
var t = e.info.id,
i = e.info.duration * e.info.timescale,
r = Math.floor(i / (1 + he)),
i = Math.floor(i % (1 + he));
let n = 0,
s = 0;
return "video" === e.type && (n = e.config.width, s = e.config.height), pe.box(pe.types.tkhd, new Uint8Array([1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, t >> 24 & 255, t >> 16 & 255, t >> 8 & 255, 255 & t, 0, 0, 0, 0, r >> 24, r >> 16 & 255, r >> 8 & 255, 255 & r, i >> 24, i >> 16 & 255, i >> 8 & 255, 255 & i, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, n >> 8 & 255, 255 & n, 0, 0, s >> 8 & 255, 255 & s, 0, 0]))
}
static traf(e, t) {
var i = pe.senc(e),
r = pe.sdtp(e),
n = i.boxData,
s = n.length ? pe.saio(76) : new Uint8Array,
a = n.length ? pe.saiz(i.defaultSampleInfoSize, i.sampleInfoSizes) : new Uint8Array,
o = pe.sbgp(e),
l = pe.sgpd(e),
d = e.id,
i = Math.floor(t / (1 + he)),
t = Math.floor(t % (1 + he));
return pe.box(pe.types.traf, pe.box(pe.types.tfhd, new Uint8Array([0, 2, 0, 0, d >> 24, d >> 16 & 255, d >> 8 & 255, 255 & d])), pe.box(pe.types.tfdt, new Uint8Array([1, 0, 0, 0, i >> 24, i >> 16 & 255, i >> 8 & 255, 255 & i, t >> 24, t >> 16 & 255, t >> 8 & 255, 255 & t])), n, s, a, o, l, pe.trun(e, r.length + n.length + o.length + l.length + s.length + a.length + 16 + 20 + 8 + 16 + 8 + 8), r)
}
static trak(e) {
if ("trakData" in e) return e.trakData;
e.info.duration = e.info.duration || 4294967295;
var t = pe.types.trak,
i = pe.tkhd(e),
e = pe.mdia(e);
return pe.box(t, i, e)
}
static trex(e) {
e = e.info.id;
return pe.box(pe.types.trex, new Uint8Array([0, 0, 0, 0, e >> 24, e >> 16 & 255, e >> 8 & 255, 255 & e, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1]))
}
static trun(e, t) {
const i = e.samples || [],
r = i.length,
n = 12 + 16 * r,
s = new Uint8Array(n);
let a, o, l, d, u, c;
for (t += 8 + n, s.set([0, 0, 15, 1, r >>> 24 & 255, r >>> 16 & 255, r >>> 8 & 255, 255 & r, t >>> 24 & 255, t >>> 16 & 255, t >>> 8 & 255, 255 & t], 0), a = 0; a < r; a++) l = (o = i[a]).duration, d = o.size, u = o.flags, c = o.cts, s.set([l >>> 24 & 255, l >>> 16 & 255, l >>> 8 & 255, 255 & l, d >>> 24 & 255, d >>> 16 & 255, d >>> 8 & 255, 255 & d, u.isLeading << 2 | u.dependsOn, u.isDependedOn << 6 | u.hasRedundancy << 4 | u.paddingValue << 1 | u.isNonSync, 61440 & u.degradPrio, 15 & u.degradPrio, c >>> 24 & 255, c >>> 16 & 255, c >>> 8 & 255, 255 & c], 12 + 16 * a);
return pe.box(pe.types.trun, s)
}
static initSegment(e) {
pe.types || pe.init();
const t = pe.moov(e),
i = new Uint8Array(pe.FTYP.byteLength + t.byteLength);
return i.set(pe.FTYP), i.set(t, pe.FTYP.byteLength), i
}
static saio(e) {
e = e + 4 + 4;
return pe.box(pe.types.saio, new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, 255 & e]))
}
static saiz(e, t) {
ne(e) || (e = 0);
var i = t.length,
t = 0 === e ? new Uint8Array(t) : new Uint8Array;
return pe.box(pe.types.saiz, new Uint8Array([0, 0, 0, 0, e, i >> 24 & 255, i >> 16 & 255, i >> 8 & 255, 255 & i]), t)
}
static senc(e) {
const t = e.samples || [],
i = t.length;
let r = 0,
n = NaN,
s = !0;
const a = [];
if (!e.encrypted || i <= 0) return {
boxData: new Uint8Array,
sampleInfoSizes: a,
defaultSampleInfoSize: 0
};
e = e.defaultPerSampleIVSize || 0;
for (const d of t) d.subsamples && (r += d.subsamples.length);
if (r <= 0) return {
boxData: new Uint8Array,
sampleInfoSizes: a,
defaultSampleInfoSize: 0
};
const o = new Uint8Array(2 * i + i * e + 6 * r + 4);
let l = this.set32(i, o, 0);
for (const d of t) {
const t = d.subsamples || [];
let e = 2;
d.iv && (o.set(d.iv, l), l += d.iv.byteLength, e += d.iv.byteLength), l = this.set16(t.length, o, l);
for (const d of t) l = this.set16(d[0], o, l), l = this.set32(d[1], o, l), e += 6;
a.push(e), ne(n) || (n = e), s = s && n === e, n = e
}
return {
boxData: pe.box(pe.types.senc, new Uint8Array([0, 0, 0, 2]), o),
defaultSampleInfoSize: s ? n : 0,
sampleInfoSizes: a
}
}
static sinf(e, t, i) {
return pe.box(pe.types.sinf, pe.frma(i), pe.schm(), pe.schi(e, t))
}
static frma(e) {
return pe.box(pe.types.frma, new Uint8Array(e))
}
static schm() {
return pe.box(pe.types.schm, new Uint8Array([0, 0, 0, 0, 99, 98, 99, 115, 0, 1, 0, 0]))
}
static schi(e, t) {
return pe.box(pe.types.schi, pe.tenc(e, t))
}
static tenc(e, t) {
let i = 0;
"video" === t && (i = 25);
const r = new Uint8Array(17);
if (r[0] = 16, e.iv && 16 === e.iv.byteLength && r.set(e.iv, 1), !e.keyId) throw "tenc: no key id found in decryptdata";
return pe.box(pe.types.tenc, new Uint8Array([1, 0, 0, 0, 0, i, 1, 0]), e.keyId, r)
}
static sbgp(e) {
if (!e.encrypted || 0 === e.samples.length || !e.samples[0].keyTagInfo) return new Uint8Array;
e = e.samples.length;
return pe.box(pe.types.sbgp, new Uint8Array([0, 0, 0, 0]), new Uint8Array(pe.types.seig), new Uint8Array([0, 0, 0, 1, e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, 255 & e, 0, 1, 0, 1]))
}
static sgpd(e) {
if (!e.encrypted || 0 === e.samples.length || !e.samples[0].keyTagInfo) return new Uint8Array;
var t = e.samples[0].keyTagInfo;
let i = 0;
"video" === e.type && (i = 25);
const r = new Uint8Array(17);
if (r[0] = 16, t.iv && r.set(t.iv, 1), !t.keyId) throw "sgpd: no keyid in decryptdata";
return pe.box(pe.types.sgpd, new Uint8Array([1, 0, 0, 0]), new Uint8Array(pe.types.seig), new Uint8Array([0, 0, 0, 37, 0, 0, 0, 1]), new Uint8Array([0, i, 1, 0]), t.keyId, r)
}
static pssh(e, t, i) {
if (pe.types || pe.init(), !e) throw new TypeError("Bad system id");
if (16 !== e.byteLength) throw new RangeError("Invalid system id");
let r, n, s;
if (t) {
r = 1, n = new Uint8Array(16 * t.length);
for (let e = 0; e < t.length; e++) {
const i = t[e];
if (16 !== i.byteLength) throw new RangeError("Invalid key");
n.set(i, 16 * e)
}
} else r = 0, n = new Uint8Array;
0 < r ? (s = new Uint8Array(4), 0 < t.length && new DataView(s.buffer).setUint32(0, t.length, !1)) : s = new Uint8Array;
var a = new Uint8Array(4);
return i && 0 < i.byteLength && new DataView(a.buffer).setUint32(0, i.byteLength, !1), pe.box(pe.types.pssh, new Uint8Array([r, 0, 0, 0]), e, s, n, a, i || new Uint8Array)
}
}
var fe, me, ge = pe;
(vi = fe = fe || {})[vi.SDR = 0] = "SDR", vi[vi.HDR = 1] = "HDR", vi[vi.HDR10 = 2] = "HDR10", vi[vi.DolbyVision = 3] = "DolbyVision", vi[vi.HLG = 4] = "HLG", (bi = me = me || {})[bi.H264 = 16] = "H264", bi[bi.HEVC = 64] = "HEVC", bi[bi.VP09 = 65] = "VP09";
const ye = new Set(["ac-3", "mp4a.a5", "mp4a.A5"]),
ve = new Set(["ec-3", "mp4a.a6", "mp4a.A6"]),
Se = {
aac: 1024,
mp3: 1024,
ac3: 1536,
ec3: 1536
},
be = {
isAC3: e => Boolean(e && ye.has(e)),
isEC3: e => Boolean(e && ve.has(e)),
isDolbyAtmos(e, t) {
const i = t.split("/");
return Boolean(be.isEC3(e) && 1 < i.length && i[1].split(",").find(e => "JOC" === e))
},
isAAC(e) {
return Boolean(e && ("aac" === e || null !== (e = e.match(/^mp4a\.40\.(.*)/)) && "34" !== e[1]))
},
isMP3(e) {
return Boolean(e && ("mp3" === e || null !== (e = e.match(/^mp4a\.40\.(.*)/)) && "34" === e[1]))
},
isAVC: e => Boolean(e && e.match(/^avc[13]\.(.*)/)),
isXHEAAC: function(e) {
return Boolean("mp4a.40.42" === e)
},
isALAC: function(e) {
return Boolean("alac" === e)
},
isFLAC: function(e) {
return Boolean("fLaC" === e)
},
isHEVC: e => Boolean(e && e.match(/^(hev|hvc)1\..*/)),
isDolby: e => Boolean(e && e.match(/^dv(h1|he|a1|av)\..*/)),
isVP09: e => Boolean(e && e.match(/^vp09\..*/)),
isCompatibleCodecString(e, t) {
const i = e.split(","),
r = t.split(","),
n = i.filter(e => be.isVideoCodec(e)),
s = r.filter(e => be.isVideoCodec(e)),
a = i.filter(e => be.isAudioCodec(e)),
o = r.filter(e => be.isAudioCodec(e)),
l = 0 === n.length && 0 === s.length || n.length === s.length && be.isCompatibleVideoCodec(n[0], s[0]),
d = 0 === a.length && 0 === o.length || a.length === o.length && be.isCompatibleAudioCodec(a[0], o[0]);
return l && d
},
isVideoCodec: e => be.isAVC(e) || be.isDolby(e) || be.isHEVC(e) || be.isVP09(e),
isAudioCodec: e => be.isAC3(e) || be.isEC3(e) || be.isAAC(e) || be.isMP3(e),
isCompatibleVideoCodec: (e, t) => Boolean(e && t && (e === t || be.isDolby(e) && be.isDolby(t) || be.isHEVC(e) && be.isHEVC(t) || be.isAVC(e) && be.isAVC(t) || be.isVP09(e) && be.isVP09(t))),
isCompatibleAudioCodec: (e, t) => Boolean(e && t && (e === t || be.isAAC(e) && be.isAAC(t) || be.isAC3(e) && be.isAC3(t) || be.isEC3(e) && be.isEC3(t) || be.isMP3(e) && be.isMP3(t))),
getSegmentCodec(e) {
let t;
if (be.isAAC(e)) t = "aac";
else if (be.isAC3(e)) t = "ac3";
else if (be.isEC3(e)) t = "ec3";
else {
if ("mp3" !== e) throw new Error(`invalid audio config, codec ${e}`);
t = "mp3"
}
return t
},
getChannelCount(e) {
if (!e) return 0;
e = e.split("/"), e = parseInt(e[0]);
return ne(e) ? e : 0
},
avc1toavcoti(e) {
var t;
const i = e.split(".");
let r;
return 2 < i.length ? (r = i.shift() + ".", r += parseInt(null !== (t = i.shift()) && void 0 !== t ? t : "").toString(16), r += ("000" + parseInt(null !== (t = i.shift()) && void 0 !== t ? t : "").toString(16)).substr(-4)) : r = e, r
},
getDynamicRangeType(e, t) {
let i = fe.SDR;
return "PQ" === e && be.isDolby(t) ? i = fe.DolbyVision : "PQ" === e && (be.isHEVC(t) || be.isVP09(t)) ? i = fe.HDR10 : "HLG" !== e || -1 === t.indexOf("hvc1") && !be.isVP09(t) || (i = fe.HLG), i
},
getCompressionType(e) {
let t = me.H264;
return be.isHEVC(e) || be.isDolby(e) ? t = me.HEVC : be.isVP09(e) && (t = me.VP09), t
},
isHigherCodecByFamily(e, t) {
if (!e) return !0;
const i = e.split("."),
r = t.split(".");
if (i[0] !== r[0]) throw new Error(`mismatch in codec family current/new: ${i[0]}/${r[0]}`);
switch (i[0]) {
case "avc1":
case "avc3":
return r[1] > i[1];
case "vp09":
return e < t;
case "hvc1":
case "hev1":
var n = "H" === i[3].substring(0, 1) ? 1 : 0,
s = i[3].substring(1),
a = "H" === r[3].substring(0, 1) ? 1 : 0,
o = r[3].substring(1);
return r[1] > i[1] || r[2] > i[2] || n < a || s < o;
case "dvh1":
return r[1] > i[1] || r[2] > i[2]
}
}
};
class Te {
static getTrack(e, t, i, r, n) {
let s;
switch (be.getSegmentCodec(i)) {
case "aac":
var a;
(a = E(e, 1 === r ? new Uint8Array([255, 241, 92, 64, 1, 127, 252]) : new Uint8Array([255, 241, 92, 128, 1, 191, 252]), 0, i)) && (s = {
type: "audio",
info: {
id: t,
timescale: a.samplerate,
duration: 0,
encrypted: !1,
keyTagInfo: void 0
},
config: a
});
break;
case "ac3":
case "ec3": {
const i = j(e, new Uint8Array([11, 119, 69, 17, 128, 64, 47, 132]), 0);
i && (s = {
type: "audio",
info: {
id: t,
timescale: i.samplerate,
duration: 0,
encrypted: !1,
keyTagInfo: void 0
},
config: i
})
}
}
return s
}
static getSample(e, t) {
let i;
switch (e) {
case "mp4a.40.2":
case "mp4a.40.5":
i = 1 === t ? new Uint8Array([0, 208, 0, 7]) : new Uint8Array([33, 0, 3, 64, 104, 28]);
break;
case "ac-3":
case "ec-3":
i = new Uint8Array([11, 119, 69, 17, 128, 64, 47, 132, 41, 3, 253, 214, 124, 253, 243, 215, 233, 95, 185, 123, 78, 20, 40, 106, 97, 190, 74, 253, 43, 218, 208, 140, 191, 176, 144, 120, 214, 181, 44, 124, 129, 251, 91, 109, 187, 109, 198, 225, 43, 172, 116, 140, 176, 123, 38, 144, 211, 247, 225, 64, 29, 53, 175, 96, 16, 57, 121, 87, 78, 203, 81, 37, 7, 72, 228, 132, 37, 169, 38, 231, 97, 229, 247, 194, 208, 8, 12, 83, 74, 139, 137, 17, 22, 26, 221, 203, 107, 113, 94, 93, 75, 33, 208, 247, 146, 105, 39, 143, 6, 36, 1, 227, 108, 70, 11, 180, 152, 218, 182, 218, 209, 59, 85, 104, 201, 70, 37, 82, 219, 68, 55, 225, 144, 99, 149, 0, 119, 26, 14, 69, 164, 241, 204, 222, 81, 177, 142, 80, 20, 100, 97, 143, 101, 221, 140, 113, 31, 208, 124, 25, 64, 29, 49, 77, 140, 30, 155, 74, 214, 204, 138, 229, 109, 172, 95, 130, 70, 230, 134, 88, 59, 179, 212, 155, 232, 0, 0, 0, 0, 0, 173, 234])
}
return i
}
static getSegment(e, i, r, n) {
if (e) {
var s = e.info["timescale"],
a = e.config["segmentCodec"],
o = Te.getSample(e.config.codec, e.config.channelCount);
if (o) {
const l = [],
d = {
id: e.info.id,
sequenceNumber: i,
type: "audio",
encrypted: !1,
samples: l,
defaultPerSampleIVSize: 0
},
u = Se[a],
c = Math.ceil(n * s / u),
h = {
baseTime: Math.round(c * u + r),
timescale: s
};
let t = 0;
const p = c * o.byteLength + 8,
f = new Uint8Array(p);
f[0] = p >> 24 & 255, f[1] = p >> 16 & 255, f[2] = p >> 8 & 255, f[3] = 255 & p, ge.types || ge.init(), f.set(ge.types.mdat, 4), t += 8;
for (let e = 0; e < c; e++) l.push({
duration: u,
size: o.byteLength,
cts: 0,
flags: {
isLeading: 0,
isDependedOn: 0,
hasRedundancy: 0,
degradPrio: 0,
dependsOn: 1,
isNonSync: 0,
paddingValue: 0
}
}), f.set(o, t), t += o.byteLength;
const m = ge.moof(r, d),
g = new Uint8Array(m.byteLength + f.byteLength);
return g.set(m), g.set(f, m.byteLength), {
silentFragData: g,
endTs: h
}
}
}
}
}
class Ee extends h {
constructor(e, t, i, r, n) {
super(e, t, n), this.typeSupported = i, this.isVideoContiguous = !1, this.logger = n.child({
name: "EsRemuxer"
});
const s = navigator.userAgent;
this.isSafari = r && -1 < r.indexOf("Apple") && s && !s.match("CriOS")
}
resetTimeStamp(e) {
this._initPTS = this._initDTS = e
}
resetInitSegment() {
this.currentInitTrack = void 0, this._silentAudioTrack = void 0
}
remuxEsTracks(r, n, s, a, o, l, d, u, c, h) {
let p;
l || (this.isVideoContiguous = !1);
c = void 0 === c ? o : c;
if (!this.currentInitTrack) {
if (r && r.config.codec && (this._audioTrackInfo = {
id: r.info.id,
codec: r.config.codec,
channelCount: r.config.channelCount
}), n && h && this._audioTrackInfo) {
const r = Te.getTrack(this.observer, this._audioTrackInfo.id, this._audioTrackInfo.codec, this._audioTrackInfo.channelCount, this.logger);
if (r) {
this._silentAudioTrack = Object.assign(Object.assign({}, r), {
info: Object.assign(Object.assign({}, r.info), {
inputTimescale: 9e4
}),
parsingData: {
len: 0,
sequenceNumber: 0,
esSamples: []
}
});
const s = this._initPTS + Math.round(c * this._silentAudioTrack.info.timescale);
p = Te.getSegment(this._silentAudioTrack, n.parsingData.sequenceNumber, s, h), n.parsingData.sequenceNumber++
}
} else this._silentAudioTrack = void 0;
this.updateInitPTSDTS(n, r, o), this.generateIS(this._silentAudioTrack || r, n)
}
if (this.currentInitTrack) {
const f = n && n.parsingData.esSamples.length,
m = this.isVideoContiguous;
let t, i, e;
if (n && h && this._silentAudioTrack && !p) {
const r = this._initPTS + Math.round((c + this.config.audioPrimingDelay) * this._silentAudioTrack.info.timescale);
p = Te.getSegment(this._silentAudioTrack, n.parsingData.sequenceNumber, r, h)
}
if (r && r.parsingData.esSamples.length) {
if (ne(r.info.timescale) || (this.logger.warn("regenerate InitSegment as audio detected"), this.updateInitPTSDTS(n, r, o), this.generateIS(r, n)), t = this.remuxAudio(r, c, l, d, u), f) {
let e;
t && (e = S(t.endPTS) - S(t.startPTS)), ne(n.info.timescale) || (this.logger.warn("regenerate InitSegment as video detected"), this.updateInitPTSDTS(n, r, o), this.generateIS(r, n)), i = this.remuxVideo(n, c, m, e, h)
}
} else f && (i = this.remuxVideo(n, c, m, void 0, h)), i && r && r.config.codec && (t = this.remuxEmptyAudio(r, c, l, d, i, u));
p ? e = {
data1: i.data1,
data2: p.silentFragData,
startDTS: i.startDTS,
startPTS: i.startPTS,
endDTS: y(i.endDTS, p.endTs),
endPTS: y(i.endPTS, p.endTs),
type: "audiovideo",
track: this.currentInitTrack
} : i && t ? e = {
data1: i.data1,
data2: t.data1,
startDTS: g(i.startDTS, t.startDTS),
startPTS: g(i.startPTS, t.startPTS),
endDTS: y(i.endDTS, t.endDTS),
endPTS: y(i.endPTS, t.endPTS),
type: "audiovideo",
track: this.currentInitTrack,
dropped: i.dropped,
framesWithoutIDR: i.framesWithoutIDR,
firstKeyframePts: i.firstKeyframePts
} : i ? e = {
data1: i.data1,
startDTS: i.startDTS,
startPTS: i.startPTS,
endDTS: i.endDTS,
endPTS: i.endPTS,
type: "video",
track: this.currentInitTrack,
dropped: i.dropped,
framesWithoutIDR: i.framesWithoutIDR,
firstKeyframePts: i.firstKeyframePts
} : t ? e = {
data1: t.data1,
startDTS: t.startDTS,
startPTS: t.startPTS,
endDTS: t.endDTS,
endPTS: t.endPTS,
type: "audio",
track: this.currentInitTrack
} : this.logger.error("Missing video and audio data"), a && a.captionSamples.length && this.remuxText(a, e), null !== (a = null == s ? void 0 : s.id3Samples) && void 0 !== a && a.length && this.remuxID3(s, e), this.observer.trigger(v.FRAG_PARSING_DATA, e)
} else this.logger.error("failed to generate IS");
this.observer.trigger(v.FRAG_PARSED)
}
updateInitPTSDTS(e, t, i) {
let r = 1 / 0,
n = 1 / 0;
var s = e ? e.parsingData.esSamples : [],
a = t ? t.parsingData.esSamples : [];
if (!ne(this._initPTS)) {
if (t && a.length && (r = n = a[0].pts - t.info.inputTimescale * i), e && s.length) {
const t = e.info.inputTimescale;
e.info.timescale = t, r = Math.min(r, s.reduce((e, t) => {
var i = t.pts - e;
return i < -4294967296 ? Ie(e, t.pts) : 0 < i ? e : t.pts
}, s[0].pts) - t * i), n = Math.min(n, s[0].dts - t * i), this.observer.trigger(v.INIT_PTS_FOUND, {
initPTS: B(r, t)
})
}
if (ne(r) && ne(n)) this._initPTS = r, this._initDTS = n;
else {
const e = new D(!1, "invalid initPTS or initDTS", $.InvalidInitTimestamp);
this.observer.trigger(x.INTERNAL_ERROR, e)
}
}
}
generateIS(e, t) {
const i = t ? t.parsingData.esSamples : [],
r = this.typeSupported;
let n, s = "audio/mp4";
if (e && t && i.length) {
const i = t.info.inputTimescale;
t.info.timescale = i, e.info.timescale = e.config.samplerate;
const r = pe.initSegment([t, e]);
n = {
type: "audiovideo",
container: "video/mp4",
codec: `${t.config.codec},${e.config.codec}`,
initSegment: r
}
} else if (e) {
"mp3" === (e.info.timescale = e.config.samplerate, e.config.segmentCodec) && (r.mpeg ? (s = "audio/mpeg", e.config.codec = "") : r.mp3 && (e.config.codec = "mp3"));
const t = "mp3" === e.config.segmentCodec && r.mpeg ? new Uint8Array : pe.initSegment([e]);
n = {
type: "audio",
container: s,
codec: e.config.codec,
initSegment: t
}
} else if (t && i.length) {
const e = t.info.inputTimescale;
t.info.timescale = e;
const i = pe.initSegment([t]);
n = {
type: "video",
container: "video/mp4",
codec: t.config.codec,
initSegment: i
}
}
if (n) {
this.currentInitTrack = n;
const e = {
track: n
};
this.observer.trigger(v.FRAG_PARSING_INIT_SEGMENT, e)
} else {
const e = new D(!1, "no audio/video samples found", $.NoAVSamplesFound);
this.observer.trigger(x.INTERNAL_ERROR, e)
}
}
remuxVideo(n, e, s, a, o) {
let l, d, u, c, h, t, p = 8,
i = n.parsingData.dropped;
const r = !s && this.config.forceKeyFrameOnDiscontinuity,
f = n.parsingData.esSamples,
m = n.info.inputTimescale,
g = [],
y = n.info.encrypted;
let v, S;
v = s ? this.nextAvcDts : Ie(f[0].dts, f[0].pts), f.forEach(function(e) {
e.pts = Ie(e.pts, v), e.dts = Ie(e.dts, v)
}), f.sort(function(e, t) {
var i = e.dts - t.dts,
r = e.pts - t.pts;
return i || r || e.id - t.id
});
var b = f.findIndex(e => e.key);
f[b] && (S = f[b].pts), r && (0 < b ? (this.logger.warn(`Dropped ${b} out of ${f.length} video samples due to a missing keyframe`), f.splice(0, b), i += b) : -1 === b && (this.logger.warn(`No keyframe found out of ${f.length} video samples`), i += f.length));
var T = f[0],
E = f[f.length - 1],
I = f.reduce((e, t) => Math.max(Math.min(e, t.pts - t.dts), -18e3), 0);
if (I < 0) {
this.logger.warn(`PTS < DTS detected in video samples, shifting DTS by ${Math.round(I/90)} ms to overcome this issue`);
for (let e = 0; e < f.length; e++) f[e].dts += I
}
var w = this.isSafari;
if (l = Math.round((E.dts - T.dts) / (f.length - 1)), c = Math.max(T.dts, 0), u = Math.max(T.pts, 0), ne(o) && (c = e * m, u = e * m), s) {
const n = c - v,
M = n > l,
s = n < -1;
(M || s) && (M ? this.logger.warn(`AVC: ${n}/90000 hole between fragments detected`) : this.logger.warn(`AVC: ${n}/90000 overlapping between fragments detected`))
}
let A = 0,
O = 0;
var k = f.length;
for (let e = 0; e < k; e++) {
const M = f[e],
s = M.units,
a = s.length;
let t = 0;
for (let e = 0; e < a; e++) t += s[e].data.length;
O += t, A += a, M.length = t, M.dts = w ? c + e * l : Math.max(M.dts, c), M.pts = Math.max(M.pts, M.dts)
}
t = Math.max(E.dts, 0), h = Math.max(E.pts, 0, t), ne(o) && (t = e * m, h = e * m);
e = O + 4 * A + 8;
try {
d = new Uint8Array(e)
} catch (n) {
const M = new F(!1, `fail allocating video mdat ${e}`, $.FailedToAllocateVideoMdat, e);
return void this.observer.trigger(x.INTERNAL_ERROR, M)
}
const C = new DataView(d.buffer);
C.setUint32(0, e), d.set(pe.types.mdat, 4);
for (let t = 0; t < k; t++) {
const M = f[t],
s = M.units;
let e, i = 0;
const x = [];
let r = 0;
for (let e = 0, t = s.length; e < t; e++) {
const M = s[e],
a = M.data,
o = M.data.byteLength;
if (C.setUint32(p, o), p += 4, d.set(a, p), p += o, i += 4 + o, y)
if (o <= 48 || 1 !== M.type && 5 !== M.type) r += 4 + o;
else {
let e = o - 32;
e % 16 == 0 && (e -= 16), x.push([r + 36, e]), r = o - 32 - e
}
}
if (0 < r && x.push([r, 0]), w) e = Math.max(0, l * Math.round((M.pts - M.dts) / l));
else {
if (t < k - 1) l = f[t + 1].dts - M.dts;
else {
const s = this.config,
o = M.dts - f[0 < t ? t - 1 : t].dts;
if (s.stretchShortVideoTrack) {
const n = s.maxBufferHole,
d = s.maxSeekHole,
c = Math.floor(Math.min(n, d) * m),
h = (a ? u + a * m : this.nextAudioPts) - M.pts;
h > c ? (l = h - o, l < 0 && (l = o)) : l = o
} else l = o
}
e = Math.round(M.pts - M.dts)
}
ne(o) && (e = 0, l = o * m), g.push({
size: i,
duration: l,
cts: e,
flags: {
isLeading: 0,
isDependedOn: 0,
hasRedundancy: 0,
degradPrio: 0,
dependsOn: M.key ? 2 : 1,
isNonSync: M.key ? 0 : 1,
paddingValue: 0
},
keyTagInfo: M.keyTagInfo,
subsamples: x
})
}
if (this.nextAvcDts = t + l, this.isVideoContiguous = !0, g.length && -1 < navigator.userAgent.toLowerCase().indexOf("chrome")) {
const n = g[0].flags;
n.dependsOn = 2, n.isNonSync = 0
}
e = {
sequenceNumber: n.parsingData.sequenceNumber++,
id: n.info.id,
type: n.type,
encrypted: n.info.encrypted,
samples: g,
defaultPerSampleIVSize: 0
}, e = pe.moof(c + this.config.audioPrimingDelay * m, e);
n.parsingData.esSamples = [];
const D = new Uint8Array(e.byteLength + d.byteLength);
return D.set(e), D.set(d, e.byteLength), {
data1: D,
startPTS: B(u / m, m),
endPTS: B((h + l) / m, m),
startDTS: B(c / m, m),
endDTS: B(this.nextAvcDts / m, m),
type: "video",
dropped: i,
framesWithoutIDR: b,
firstKeyframePts: B(S / m, m)
}
}
remuxAudio(r, i, n, e, s) {
const a = r.info.inputTimescale,
o = a / r.info.timescale,
l = ("aac" === r.config.segmentCodec ? 1024 : "mp3" === r.config.segmentCodec ? 1152 : 1536) * o,
d = "mp3" === r.config.segmentCodec && this.typeSupported.mpeg,
u = [],
c = r.info.encrypted,
t = this._initPTS + i * a;
let h, p, f, m, g, y, v, S, b, T, E, I, w, A, O = d ? 0 : 8;
const k = new q,
C = r.parsingData.esSamples;
if (A = this.nextAudioPts, (n = n || C.length && A && (e && Math.abs(t - A) < 9e3 || Math.abs(Ie(C[0].pts - A, t)) < 20 * l)) || (A = Ie(C[0].pts, this._initPTS)), C.forEach(function(e) {
e.pts = e.dts = Ie(e.pts, A)
}), e && "aac" === r.config.segmentCodec)
for (let t = 0, i = A; t < C.length;) {
const M = C[t];
T = M.pts;
const o = T - i,
d = Math.abs(1e3 * o / a);
if (o <= -l) this.logger.warn(`Dropping 1 audio frame @ ${(i/a).toFixed(3)}s due to ${d} ms overlap.`), C.splice(t, 1), r.parsingData.len -= M.unit.length;
else if (o >= l && d < 1e4 && i) {
const d = Math.round(o / l);
this.logger.warn(`Injecting ${d} audio frame @ ${(i/a).toFixed(3)}s due to ${Math.round(1e3*o/a)} ms gap.`);
for (let e = 0; e < d; e++) w = Math.max(i, 0), I = re(r.config.codec, r.config.channelCount), I || (this.logger.warn("Unable to get silent frame for given audio codec; duplicating last frame instead."), I = M.unit.subarray(0)), C.splice(t, 0, {
unit: I,
pts: w,
dts: w,
keyTagInfo: s
}), r.parsingData.len += I.length, i += l, t += 1;
M.pts = M.dts = i, i += l, t += 1
} else i += l, M.pts = M.dts = 0 === t ? A : C[t - 1].pts + l, t += 1
}
for (let e = 0, t = C.length; e < t; e++) {
if (p = C[e], m = p.unit, T = p.pts, E = p.dts, void 0 !== b) f.duration = Math.round((E - b) / o);
else {
const i = Math.round(1e3 * (T - A) / a);
let t = 0;
if (n && "aac" === r.config.segmentCodec && i) {
if (0 < i && i < 1e4) t = Math.round((T - A) / l), 0 < t && (I = re(r.config.codec, r.config.channelCount), I = I || m.subarray(0), r.parsingData.len += t * I.length);
else if (i < -12) {
r.parsingData.len -= m.byteLength;
continue
}
T = E = A
}
if (v = Math.max(0, T), S = Math.max(0, E), !(0 < r.parsingData.len)) return; {
const i = d ? r.parsingData.len : r.parsingData.len + 8;
try {
g = new Uint8Array(i)
} catch (r) {
const n = new F(!1, `fail allocating audio mdat ${i}`, $.FailedToAllocateAudioMdat, i);
return void this.observer.trigger(x.INTERNAL_ERROR, n)
}
d || (h = new DataView(g.buffer), h.setUint32(0, i), g.set(pe.types.mdat, 4))
}
for (let e = 0; e < t; e++) w = T - (t - e) * l, I = re(r.config.codec, r.config.channelCount), I || (this.logger.warn("Unable to get silent frame for given audio codec; duplicating this frame instead."), I = m.subarray(0)), g.set(I, O), O += I.byteLength, f = {
size: I.byteLength,
cts: 0,
duration: 1024,
flags: {
isLeading: 0,
isDependedOn: 0,
hasRedundancy: 0,
degradPrio: 0,
dependsOn: 1,
paddingValue: 0,
isNonSync: 0
},
keyTagInfo: p.keyTagInfo,
subsamples: c ? [
[I.byteLength, 0]
] : []
}, u.push(f)
}
g.set(m, O);
const M = m.byteLength;
O += M;
const s = [];
if (c)
if ("ec3" === r.config.segmentCodec) {
let e = 0;
for (; e < m.byteLength;) {
const i = 2 * (k.bsReadAndUpdate(m, {
byteOffset: e + 2,
usedBits: 5
}, 11) + 1);
e += i;
const n = Math.min(i, 16);
s.push([n, i - n])
}
} else {
const r = Math.min(M, 16);
s.push([r, M - r])
} f = {
size: M,
cts: 0,
duration: 0,
flags: {
isLeading: 0,
isDependedOn: 0,
hasRedundancy: 0,
degradPrio: 0,
dependsOn: 1,
paddingValue: 0,
isNonSync: 0
},
keyTagInfo: p.keyTagInfo,
subsamples: s
}, u.push(f), b = E
}
let D = 0;
e = u.length;
if (2 <= e && (D = u[e - 2].duration, f.duration = D), e) {
if (this.nextAudioPts = T + o * D, r.parsingData.len = 0, d) y = new Uint8Array;
else {
const i = {
sequenceNumber: r.parsingData.sequenceNumber++,
id: r.info.id,
type: r.type,
encrypted: r.info.encrypted,
samples: u,
defaultPerSampleIVSize: 0
};
y = pe.moof((S + this.config.audioPrimingDelay * a) / o, i)
}
const i = new Uint8Array(y.byteLength + g.byteLength);
return i.set(y), i.set(g, y.byteLength), r.parsingData.esSamples = [], {
data1: i,
startPTS: B(v / a, a),
endPTS: B(this.nextAudioPts / a, a),
startDTS: B(S / a, a),
endDTS: B((E + o * D) / a, a),
type: "audio"
}
}
return null
}
remuxEmptyAudio(t, e, i, r, n, s) {
var a = t.info.inputTimescale,
o = a / (t.config.samplerate || a),
l = this.nextAudioPts,
d = (void 0 !== l ? l : S(n.startDTS) * a) + this._initDTS,
a = S(n.endDTS) * a + this._initDTS,
u = 1024 * o,
c = Math.ceil((a - d) / u),
h = re(t.config.codec, t.config.channelCount);
if (this.logger.warn("remux empty Audio"), !h) return this.logger.error("Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec!"), null;
const p = [];
for (let e = 0; e < c; e++) {
const i = d + e * u;
p.push({
unit: h,
pts: i,
dts: i,
keyTagInfo: s
}), t.parsingData.len += h.length
}
return t.parsingData.esSamples = p, this.remuxAudio(t, e, i, r, s)
}
remuxID3(t, e) {
var i = t.id3Samples.length;
let r;
var n = t.inputTimescale;
if (i) {
for (let e = 0; e < i; e++) r = t.id3Samples[e], r.pts = r.pts / n, r.dts = r.dts / n;
e.id3Samples = t.id3Samples
}
t.id3Samples = []
}
remuxText(t, e) {
t.captionSamples.sort(function(e, t) {
return e.pts - t.pts
});
var i = t.captionSamples.length;
let r;
var n = t.inputTimescale;
if (i) {
for (let e = 0; e < i; e++) r = t.captionSamples[e], r.pts = r.pts / n;
e.captionData || (e.captionData = {}), e.captionData.ts = t.captionSamples
}
t.captionSamples = []
}
}
function Ie(e, t) {
var i;
if (void 0 === t) return e;
for (i = t < e ? -8589934592 : 8589934592; 4294967296 < Math.abs(e - t);) e += i;
return e
}
e = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : void 0 !== Jy ? Jy : {};
function we(e) {
try {
return JSON.stringify(e)
} catch (e) {
return '"[Circular]"'
}
}
function Ae(e, t, i) {
var r = i && i.stringify || we;
if ("object" == typeof e && null !== e) {
var n = t.length + 1;
if (1 === n) return e;
var s = new Array(n);
s[0] = r(e);
for (var a = 1; a < n; a++) s[a] = r(t[a]);
return s.join(" ")
}
if ("string" != typeof e) return e;
var o = t.length;
if (0 === o) return e;
for (var l = "", d = 0, u = -1, c = e && e.length || 0, h = 0; h < c;) {
if (37 === e.charCodeAt(h) && h + 1 < c) {
switch (u = -1 < u ? u : 0, e.charCodeAt(h + 1)) {
case 100:
if (o <= d) break;
if (u < h && (l += e.slice(u, h)), null == t[d]) break;
l += Number(t[d]), u = h += 2;
break;
case 79:
case 111:
case 106:
if (o <= d) break;
if (u < h && (l += e.slice(u, h)), void 0 === t[d]) break;
var p = typeof t[d];
if ("string" == p) {
l += "'" + t[d] + "'", u = h + 2, h++;
break
}
if ("function" == p) {
l += t[d].name || "<anonymous>", u = h + 2, h++;
break
}
l += r(t[d]), u = h + 2, h++;
break;
case 115:
if (o <= d) break;
u < h && (l += e.slice(u, h)), l += String(t[d]), u = h + 2, h++;
break;
case 37:
u < h && (l += e.slice(u, h)), l += "%", u = h + 2, h++
}++d
}++h
}
return -1 === u ? e : (u < c && (l += e.slice(u)), l)
}
var Oe = De;
const ke = function() {
function t(e) {
return void 0 !== e && e
}
try {
return "undefined" != typeof globalThis || Object.defineProperty(Object.prototype, "globalThis", {
get: function() {
return delete Object.prototype.globalThis, this.globalThis = this
},
configurable: !0
}), globalThis
} catch (e) {
return t(Jy) || t(window) || t(this) || {}
}
}().console || {},
Ce = {
mapHttpRequest: Le,
mapHttpResponse: Le,
wrapRequestSerializer: _e,
wrapResponseSerializer: _e,
wrapErrorSerializer: _e,
req: Le,
res: Le,
err: function(e) {
const t = {
type: e.constructor.name,
msg: e.message,
stack: e.stack
};
for (const i in e) void 0 === t[i] && (t[i] = e[i]);
return t
}
};
function De(s) {
(s = s || {}).browser = s.browser || {};
const a = s.browser.transmit;
if (a && "function" != typeof a.send) throw Error("pino: transmit option must have a send function");
const e = s.browser.write || ke;
s.browser.write && (s.browser.asObject = !0);
const o = s.serializers || {},
l = (t = s.browser.serialize, i = o, Array.isArray(t) ? t.filter(function(e) {
return "!stdSerializers.err" !== e
}) : !0 === t && Object.keys(i));
var t, i;
let r = s.browser.serialize;
Array.isArray(s.browser.serialize) && -1 < s.browser.serialize.indexOf("!stdSerializers.err") && (r = !1), "function" == typeof e && (e.error = e.fatal = e.warn = e.info = e.debug = e.trace = e), !1 === s.enabled && (s.level = "silent");
const n = s.level || "info",
d = Object.create(e);
d.log || (d.log = Ne), Object.defineProperty(d, "levelVal", {
get: function() {
return "silent" === this.level ? 1 / 0 : this.levels.values[this.level]
}
}), Object.defineProperty(d, "level", {
get: function() {
return this._level
},
set: function(e) {
if ("silent" !== e && !this.levels.values[e]) throw Error("unknown level " + e);
this._level = e, Me(u, d, "error", "log"), Me(u, d, "fatal", "error"), Me(u, d, "warn", "error"), Me(u, d, "info", "log"), Me(u, d, "debug", "log"), Me(u, d, "trace", "log")
}
});
const u = {
transmit: a,
serialize: l,
asObject: s.browser.asObject,
levels: ["error", "fatal", "warn", "info", "debug", "trace"],
timestamp: "function" == typeof(i = s).timestamp ? i.timestamp : !1 === i.timestamp ? Fe : Be
};
return d.levels = De.levels, d.level = n, d.setMaxListeners = d.getMaxListeners = d.emit = d.addListener = d.on = d.prependListener = d.once = d.prependOnceListener = d.removeListener = d.removeAllListeners = d.listeners = d.listenerCount = d.eventNames = d.write = d.flush = Ne, d.serializers = o, d._serialize = l, d._stdErrSerialize = r, d.child = function(t) {
if (!t) throw new Error("missing bindings for child Pino");
var i, r, e = t.serializers;
function n(e) {
this._childLevel = 1 + (0 | e._childLevel), this.error = Pe(e, t, "error"), this.fatal = Pe(e, t, "fatal"), this.warn = Pe(e, t, "warn"), this.info = Pe(e, t, "info"), this.debug = Pe(e, t, "debug"), this.trace = Pe(e, t, "trace"), i && (this.serializers = i, this._serialize = r), a && (this._logEvent = Re([].concat(e._logEvent.bindings, t)))
}
return l && e && (i = Object.assign({}, o, e), r = !0 === s.browser.serialize ? Object.keys(i) : l, delete t.serializers, xe([t], r, i, this._stdErrSerialize)), n.prototype = this, new n(this)
}, a && (d._logEvent = Re()), d
}
function Me(e, t, i, r) {
var n, s, a, o, l = Object.getPrototypeOf(t);
t[i] = !(t.levelVal > t.levels.values[i]) && (l[i] || ke[i] || ke[r]) || Ne, s = t, a = i, !(n = e).transmit && s[a] === Ne || (s[a] = (o = s[a], function() {
const e = n.timestamp(),
t = new Array(arguments.length),
i = Object.getPrototypeOf && Object.getPrototypeOf(this) === ke ? ke : this;
for (var r = 0; r < t.length; r++) t[r] = arguments[r];
if (n.serialize && !n.asObject && xe(t, this._serialize, this.serializers, this._stdErrSerialize), n.asObject ? o.call(i, function(e, t, i, r) {
e._serialize && xe(i, e._serialize, e.serializers, e._stdErrSerialize);
const n = i.slice();
let s = n[0];
const a = {};
r && (a.time = r), a.level = De.levels.values[t];
let o = 1 + (0 | e._childLevel);
if (o < 1 && (o = 1), null !== s && "object" == typeof s) {
for (; o-- && "object" == typeof n[0];) Object.assign(a, n.shift());
s = n.length ? Ae(n.shift(), n) : void 0
} else "string" == typeof s && (s = Ae(n.shift(), n));
return void 0 !== s && (a.msg = s), a
}(this, a, t, e)) : o.apply(i, t), n.transmit) {
const o = n.transmit.level || s.level,
i = De.levels.values[o],
r = De.levels.values[a];
r < i || function(e, t, i) {
const r = t.send,
n = t.ts,
s = t.methodLevel,
a = t.methodValue,
o = t.val,
l = e._logEvent.bindings;
xe(i, e._serialize || Object.keys(e.serializers), e.serializers, void 0 === e._stdErrSerialize || e._stdErrSerialize), e._logEvent.ts = n, e._logEvent.messages = i.filter(function(e) {
return -1 === l.indexOf(e)
}), e._logEvent.level.label = s, e._logEvent.level.value = a, r(s, e._logEvent, o), e._logEvent = Re(l)
}(this, {
ts: e,
methodLevel: a,
methodValue: r,
transmitLevel: o,
transmitValue: De.levels.values[n.transmit.level || s.level],
send: n.transmit.send,
val: s.levelVal
}, t)
}
}))
}
function xe(e, t, i, r) {
for (const n in e)
if (r && e[n] instanceof Error) e[n] = De.stdSerializers.err(e[n]);
else if ("object" == typeof e[n] && !Array.isArray(e[n]))
for (const r in e[n]) t && -1 < t.indexOf(r) && r in i && (e[n][r] = i[r](e[n][r]))
}
function Pe(i, r, n) {
return function() {
try{ const e = new Array(1 + arguments.length);
e[0] = r;
for (var t = 1; t < e.length; t++)
e[t] = arguments[t - 1];
return i[n].apply(this, e) } catch (e){}
}
}
function Re(e) {
return {
ts: 0,
messages: [],
bindings: e || [],
level: {
label: "",
value: 0
}
}
}
function Le() {
return {}
}
function _e(e) {
return e
}
function Ne() {}
function Fe() {
return !1
}
function Be() {
return Date.now()
}
let Ue;
function $e(e = {}) {
return Object.assign(Object.assign({}, e), {
customLevels: Object.assign(Object.assign({}, e.customLevels || {}), {
qe: 35
})
})
}
De.levels = {
values: {
fatal: 60,
error: 50,
warn: 40,
info: 30,
debug: 20,
trace: 10
},
labels: {
10: "trace",
20: "debug",
30: "info",
40: "warn",
50: "error",
60: "fatal"
}
}, De.stdSerializers = Ce, De.stdTimeFunctions = Object.assign({}, {
nullTime: Fe,
epochTime: Be,
unixTime: function() {
return Math.round(Date.now() / 1e3)
},
isoTime: function() {
return new Date(Date.now()).toISOString()
}
});
const Ve = () => {};
function Ke(e, t) {
const i = (e = t in e ? e : console)[t] || e.log;
return i ? i.bind(e) : Ve
}
function qe(r, n, e) {
var {
time: s,
sessionId: t,
critical: i,
name: a,
msg: o
} = e;
let l = "";
if ("data" in e) try {
const r = [],
n = [];
l = JSON.stringify(e.data, (e, t) => {
if ("object" == typeof t && null !== t) {
var i = n.indexOf(t);
if (-1 !== i) return `[Circular object reference: '${r[i]}']`;
r.push(e), n.push(t)
}
return t
})
} catch (r) {
l = `Log serialization error: "${r}"`
}
r(`${function(){const e=new Date(s),t=e.getTimezoneOffset(),i=He(Math.floor(Math.abs(t)/60)),r=He(Math.abs(t)%60);let n=t<=0?"UTC+"+i:"UTC-"+i;return n=r?n+":"+r:n,e.getFullYear()+"-"+He(e.getMonth()+1)+"-"+He(e.getDate())+" "+He(e.getHours())+":"+He(e.getMinutes())+":"+He(e.getSeconds())+"."+(e.getMilliseconds()/1e3).toFixed(3).slice(2,5)+" "+n}()}| [SessionID: ${t}] | [${n}] >${i?" [QE Critical]":""} [${a}] ${o||""} ${l}`)
}
function He(e) {
return e < 10 ? "0" + e : e.toString()
}
function je(e, t = 1 / 0) {
if (!e) return "";
const i = new Uint8Array(e);
let r, n = "";
for (r = 0; r < i.length && r < t; r++) {
let e = i[r].toString(16);
e.length < 2 && (e = "0" + e), n += e
}
return n
}
const Qe = () => (Ue || (Ue = Oe($e()).child({
name: "hls"
}), Ue.qe = e => Ue.info(e), Ue.warn("getLogger called without hls object instantiated, returning a logger that is not configured")), Ue),
We = {
bin2str: e => String.fromCharCode.apply(null, Array.from(e)),
readUint16(e, t) {
t = e[t] << 8 | e[t + 1];
return t < 0 ? 65536 + t : t
},
readSint32: (e, t) => e[t] << 24 | e[t + 1] << 16 | e[t + 2] << 8 | e[t + 3],
readUint32(e, t) {
t = We.readSint32(e, t);
return t < 0 ? 4294967296 + t : t
},
writeUint32(e, t, i) {
e[t] = i >> 24, e[t + 1] = i >> 16 & 255, e[t + 2] = i >> 8 & 255, e[t + 3] = 255 & i
},
readUint64(e, t) {
var i = We.readUint32(e, t);
return i *= Math.pow(2, 32), i += We.readUint32(e, t + 4)
},
writeUint64(e, t, i) {
var r = Math.pow(2, 32) - 1,
n = Math.floor(i / (1 + r)),
r = Math.floor(i % (1 + r));
We.writeUint32(e, t, n), We.writeUint32(e, t + 4, r)
},
findBox(e, t) {
let i, r, n, s, a, o = [];
if (!t.length) return [];
for (i = 0; i < e.byteLength;) r = We.readUint32(e, i), n = We.bin2str(e.subarray(i + 4, i + 8)), s = 1 < r ? i + r : e.byteLength, n === t[0] && (1 === t.length ? o.push(e.subarray(i + 8, s)) : (a = We.findBox(e.subarray(i + 8, s), t.slice(1))).length && (o = o.concat(a))), i = s;
return o
},
findBoxWithOffset(e, t, i, r) {
let n, s, a, o, l, d = [];
if (!i.length) return [];
for (n = 0; n < e.byteLength;) s = We.readUint32(e, n), a = We.bin2str(e.subarray(n + 4, n + 8)), o = 1 < s ? n + s : e.byteLength, a === i[0] && (r && r.push({
offset: n + t,
type: a,
size: s
}), 1 === i.length ? d.push({
offset: n + t,
type: a,
data: e.subarray(n + 8, o),
boxSize: s,
walkedPath: r ? r.slice(0) : void 0
}) : (l = We.findBoxWithOffset(e.subarray(n + 8, o), n + t + 8, i.slice(1), r ? r.slice(0) : void 0)).length && (d = d.concat(l), r = r ? r.slice(0, -1) : void 0)), n = o;
return d
}
},
Ge = {
name: "MP4EncryptionRemuxer"
};
class ze extends h {
constructor(e, t, i, r, n) {
super(e, t, n)
}
static _isCommonEncryptionInternal(e) {
return Boolean(e && !("NONE" === e || "AES-128" === e))
}
static remuxInitSegment(c, h, p, f) {
if (!p) return c;
let e = c;
if (ze._isCommonEncryptionInternal(p.method)) {
const m = p.keyId;
let u = !1;
const g = [];
if (We.findBoxWithOffset(c, 0, ["moov", "trak"]).forEach(t => {
const o = t.data;
let l, i = 0;
const d = We.findBoxWithOffset(o, 0, ["mdia", "minf", "stbl", "stsd"], [])[0],
e = d.data.subarray(8);
let r = !0,
n = We.findBoxWithOffset(e, d.offset + 16, ["enca"]);
0 === n.length && (r = !1, n = We.findBoxWithOffset(e, d.offset + 16, ["encv"])), n.forEach(s => {
let e = null,
a = null;
i = r ? (e = s.data.subarray(28), l = "audio", d.offset + 16 + 8 + 28) : (e = s.data.subarray(78), l = "video", d.offset + 16 + 8 + 78), e && We.findBoxWithOffset(e, i, ["sinf"]).forEach(e => {
const t = e.data,
i = We.findBox(t, ["frma"])[0],
r = We.findBox(t, ["schm"])[0];
if (i)
if (r) {
var n = We.bin2str(r.subarray(4, 8));
if ("aac " === We.bin2str(i.subarray(0, 4)) && (ge.types || ge.init(), i.set(ge.types.mp4a, 0)), "cbcs" === n || "cenc" === n) {
f && f.push(t);
const e = We.findBox(t, ["schi", "tenc"])[0];
if (e) {
const h = 8;
e.subarray(8, 24), e.set(m, 8);
const f = e[6],
t = e[7];
if (1 === f && 0 === t) {
const h = e[24];
0 < h && p.iv && h === p.iv.length && e.set(p.iv, 25)
}
}
} else if ("cbc2" === n) {
u = !0, ge.types || ge.init();
const h = We.findBoxWithOffset(t, 0, ["frma"])[0],
f = ge.box(ge.types.schi, ge.tenc(p, l)),
m = ge.box(ge.types.sinf, t.subarray(h.offset, h.boxSize), ge.schm(), f);
a = ge.box(ge.types.trak, o.subarray(0, e.offset), m, o.subarray(e.offset + e.boxSize));
const i = a.subarray(8),
r = m.byteLength - e.boxSize;
d.walkedPath && (d.walkedPath.push({
type: "stsd",
offset: s.offset,
size: s.boxSize
}), d.walkedPath.forEach(e => {
We.writeUint32(i, e.offset, e.size + r)
}))
}
} else h.error(Ge, "missing schm box");
else h.error(Ge, "missing frma box")
}), a = a || c.subarray(t.offset, t.offset + t.boxSize), g.push(a)
});
var s = We.findBoxWithOffset(o, 0, ["edts"])[0];
s && (ge.types || ge.init(), o.set(ge.types.free, s.offset + 4))
}), u) {
const p = ze.remuxCbc2InitSegment(c, g, h);
e = p || c
}
}
return e
}
static remuxCbc2InitSegment(i, r, n) {
const s = We.findBoxWithOffset(i, 0, ["ftyp"])[0];
if (s) {
const a = We.findBoxWithOffset(i, s.boxSize, ["moov"])[0];
let e = [],
t = 0;
for (; t < a.data.byteLength;) {
const i = We.readUint32(a.data, t),
n = We.bin2str(a.data.subarray(t + 4, t + 8)),
s = 1 < i ? t + i : a.data.byteLength;
"trak" === n ? r && (e = e.concat(r), r = void 0) : e.push(a.data.subarray(t, s)), t = s
}
const o = ge.box(ge.types.moov, ...e),
l = new Uint8Array(s.boxSize + o.byteLength);
return l.set(i.subarray(0, s.boxSize)), l.set(o, s.boxSize), l
}
n.error(Ge, "no ftyp found")
}
static remuxOverflowSegment(i, e) {
ge.types || ge.init();
const t = We.findBoxWithOffset(i, 0, ["moof", "traf", "tfdt"], []);
let r, n = i.byteLength;
if (t.forEach(e => {
0 === e.data[0] && (n += 4)
}), n > i.byteLength) {
r = new Uint8Array(n);
let e = 0,
t = 0;
for (; t < i.byteLength;) {
const n = We.readUint32(i, t),
s = We.bin2str(i.subarray(t + 4, t + 8)),
a = 1 < n ? t + n : i.byteLength;
if ("moof" === s) {
const n = ze.remuxOverflowMoof(i.subarray(t + 8, a));
r.set(n, e), e += n.byteLength
} else r.set(i.subarray(t, a), e), e += n;
t = a
}
} else e.warn(Ge, "no increase in size");
return r || i
}
static remuxOverflowMoof(e) {
let t = 0;
const i = [];
for (; t < e.byteLength;) {
const r = We.readUint32(e, t);
if ("traf" === We.bin2str(e.subarray(t + 4, t + 8))) {
const s = ze.remuxOverflowTraf(e.subarray(t + 8, t + r));
i.push(s)
} else i.push(e.subarray(t, t + r));
t = 1 < r ? t + r : e.byteLength
}
const r = ge.box(ge.types.moof, ...i),
s = r.byteLength - e.byteLength - 8;
return We.findBoxWithOffset(r, 0, ["moof", "traf", "trun"], []).forEach(e => {
var t;
0 != (1 & e.data[3]) && (t = We.readUint32(e.data, 8), We.writeUint32(e.data, 8, t + s))
}), We.findBoxWithOffset(r, 0, ["moof", "traf", "saio"], []).forEach(t => {
const i = 1 & t.data[0];
let r = 4;
1 & t.data[3] && (r += 8);
var n = We.readUint32(t.data, r);
if (r += 4, i)
for (let e = 0; e < n; e++) {
const i = We.readUint64(t.data, r);
We.writeUint64(t.data, r, i + s), r += 8
} else
for (let e = 0; e < n; e++) {
const i = We.readUint32(t.data, r);
We.writeUint32(t.data, r, i + s), r += 4
}
}), r
}
static remuxOverflowTraf(e) {
let t = 0;
const i = [];
for (; t < e.byteLength;) {
var r, n = We.readUint32(e, t);
"tfdt" === We.bin2str(e.subarray(t + 4, t + 8)) && 0 === e[t + 8] ? (r = We.readUint32(e, t + 12), r = ge.box(ge.types.tfdt, new Uint8Array([1, 0, 0, 0, 0, 0, 0, 0, r >> 24, r >> 16 & 255, r >> 8 & 255, 255 & r])), i.push(r)) : i.push(e.subarray(t, t + n)), t = 1 < n ? t + n : e.byteLength
}
return ge.box(ge.types.traf, ...i)
}
remuxText(e, t) {
e.captionSamples.sort(function(e, t) {
return e.pts - t.pts
}), e.captionSamples.length && (t.captionData || (t.captionData = {}), t.captionData.mp4 = e.captionSamples), e.captionSamples = []
}
remuxIFrame(e, t, i, r, n) {
if (!t.samples || !t.samples.length || !t.samples[0].data) return null;
let s;
const a = ge.moof(e * t.timescale, t),
o = new Uint8Array(a.byteLength + t.samples[0].data.byteLength + 8);
o.set(a), We.writeUint32(o, a.byteLength, t.samples[0].data.byteLength + 8), o.set(ge.types.mdat, a.byteLength + 4), o.set(t.samples[0].data, a.byteLength + 8), t.sequenceNumber++;
var l = t.timescale,
d = B(e + r, l),
l = B(e, l);
let u, c;
u = i ? (s = "audiovideo", i.sequenceNumber = t.sequenceNumber, t.sequenceNumber++, c = Te.getSegment(i, i.sequenceNumber, e * i.info.timescale, r), y(c.endTs, d)) : (s = "video", d);
n = {
data1: o,
data2: null == c ? void 0 : c.silentFragData,
startPTS: l,
startDTS: l,
endPTS: u,
endDTS: u,
type: s,
dropped: 0,
track: n
};
this.observer.trigger(v.FRAG_PARSING_DATA, n), this.observer.trigger(v.FRAG_PARSED)
}
remuxEmsgAndRawData(e, t, i, r, n, s, a, o, l, d) {
let u;
t && r ? u = "audiovideo" : t ? u = "audio" : r && (u = "video");
const c = Math.max(i, e),
h = {
data1: l,
track: d,
startPTS: B(a, o),
startDTS: B(a, o),
endPTS: void 0,
endDTS: void 0,
type: u,
dropped: 0
};
return c && (h.endPTS = B(a + c, o), h.endDTS = B(a + c, o)), n && n.captionSamples.length && this.remuxText(n, h), s && 0 < s.id3Samples.length && this.remuxID3(s, h), this.observer.trigger(v.FRAG_PARSING_DATA, h), this.observer.trigger(v.FRAG_PARSED), h
}
remuxID3(t, e) {
let i;
var r = t.id3Samples.length;
if (r) {
for (let e = 0; e < r; e++) i = t.id3Samples[e], i.pts = i.pts - 10, i.dts = i.dts - 10;
e.id3Samples = [...t.id3Samples]
}
t.id3Samples = []
}
}
const Xe = Math.pow(2, 32) - 1,
Ye = Math.pow(2, 20) - 1,
Je = {
name: "MP4Demuxer"
};
class Ze extends u {
constructor(e, t, i, r, n) {
super(e, t, i, {}, n), this.mp4Remuxer = t, this.audioPrimingDelay = i.audioPrimingDelay
}
resetTimeStamp(e) {
ne(e) ? this.initData.audio && !this.initData.video ? this.initPtsTs = {
baseTime: Math.round(e * this.initData.audio.timescale / 9e4),
timescale: this.initData.audio.timescale
} : this.initPtsTs = {
baseTime: e,
timescale: 9e4
} : this.initPtsTs = void 0
}
static isHEVCFlavor(e) {
if (!e) return !1;
var t = e.indexOf("."),
t = t < 0 ? e : e.substring(0, t);
return "hvc1" === t || "hev1" === t || "chvc" === t || "qhvc" === t || "qhev" === t || "muxa" === t || "dvh1" === t || "dvhe" === t || "cdh1" === t || "qdh1" === t || "qdhe" === t
}
resetInitSegment(t, i, r) {
if (this._silentAudioTrack = void 0, t && t.byteLength) {
var n = ze.remuxInitSegment(t, this.logger, r),
s = this.initData = Ze.parseInitSegment(n);
let e;
s.foundLargeTimescale && this.logger.warn(Je, "large timescale found, will check for 32 bit tfdts");
var a = s.audioCodec,
r = s.videoCodec;
if (s.audio && s.video ? e = {
type: "audiovideo",
container: "video/mp4",
codec: a + "," + r,
initSegment: n
} : (s.audio && a && (e = {
type: "audio",
container: "audio/mp4",
codec: a,
initSegment: n
}), s.video && r && (e = {
type: "video",
container: "video/mp4",
codec: r,
initSegment: n
})), s.video) {
const o = s.video,
l = t.subarray(o.trakOffset, o.trakOffset + o.trakSize);
this._videoTrack = Object.assign(Object.assign({}, o), {
info: {
id: o.id,
timescale: o.timescale,
duration: i
},
trakData: l,
sequenceNumber: 0,
samples: []
}), this.trySEICaptions = !be.isVP09(r), this._captionTrack = Object.assign(Object.assign({}, s.caption), {
sequenceNumber: 0,
captionSamples: []
})
}
s.audio && a && (this._audioTrack = Object.assign({}, s.audio)), s.caption && (this.trySEICaptions = !1, this._captionTrack = Object.assign(Object.assign({}, s.caption), {
sequenceNumber: 0,
captionSamples: []
})), this.remuxedInitDataTrack = e;
s = {
track: e
};
this.observer.trigger(v.FRAG_PARSING_INIT_SEGMENT, s)
}
}
static probe(e, t) {
return 0 < We.findBox(e.subarray(0, Math.min(e.length, 512e3)), ["moof"]).length
}
static parseHvcC(e) {
let t;
var i, r;
return e ? 1 === (i = e[0]) ? (r = e[1], t = {
profileSpace: r >> 6,
tierFlag: (32 & r) >> 5 ? "H" : "L",
profileIDC: 31 & r,
profileCompat: We.readUint32(e, 2),
constraintIndicator: e.subarray(6, 12),
levelIDC: e[12]
}) : Qe().warn(Je, `Unhandled version ${i} in hvcC box`) : Qe().warn(Je, "No hvcC box"), t
}
static hvcCToCodecString(t, i) {
const r = t + "." + (i.profileSpace ? String.fromCharCode(i.profileSpace + "A" - 1) : "") + i.profileIDC + "." + i.profileCompat.toString(16).toUpperCase() + "." + i.tierFlag + i.levelIDC;
let n = "";
for (let e = i.constraintIndicator.length - 1; 0 <= e; --e) {
const r = i.constraintIndicator[e];
if (0 !== r || "" !== n) {
const t = r.toString(16).toUpperCase();
n = "." + ("" === n ? t : t + n)
}
}
return r + n
}
static parseDvcC(e) {
let t;
return e ? t = {
versionMajor: e[0],
versionMinor: e[1],
profile: e[2] >> 1 & 127,
level: e[2] << 5 & 32 | e[3] >> 3 & 31
} : Qe().warn(Je, "No dvcC box"), t
}
static dvcCToCodecString(e, t) {
return e + "." + Ze.checkAndAddLeadingZero(t.profile) + "." + Ze.checkAndAddLeadingZero(t.level)
}
static parseVpcC(e) {
let t;
return e ? t = {
profile: e[4],
level: e[5],
bitDepth: e[6] >> 4 & 15
} : Qe().warn(Je, "No vpcC box"), t
}
static vpcCToCodecString(e, t) {
return e + "." + Ze.checkAndAddLeadingZero(t.profile) + "." + Ze.checkAndAddLeadingZero(t.level) + "." + Ze.checkAndAddLeadingZero(t.bitDepth)
}
static checkAndAddLeadingZero(e) {
return (e < 10 ? "0" : "") + e
}
static parseInitSegment(e) {
const c = {
foundLargeTimescale: !1,
tracksById: {}
};
return We.findBoxWithOffset(e, 0, ["moov", "trak"]).forEach(t => {
const i = t.data,
r = We.findBox(i, ["tkhd"])[0];
if (r) {
var n = 0 === (a = r[0]) ? 12 : 20,
s = We.readUint32(r, n),
e = We.findBox(i, ["mdia", "mdhd"])[0];
if (e) {
var a, o = 0 === (a = e[0]) ? 12 : 20,
n = We.readUint32(e, o);
o += 4, 1e6 <= n && (c.foundLargeTimescale = !0);
const l = 0 === a ? We.readUint32(e, o) : 0,
d = We.findBox(i, ["mdia", "hdlr"])[0];
if (d) {
const r = We.bin2str(d.subarray(8, 12)),
u = {
soun: "audio",
vide: "video",
clcp: "caption"
} [r] || r;
if (u) {
const r = We.findBox(i, ["mdia", "minf", "stbl", "stsd"]);
if (r.length) {
const i = r[0];
We.bin2str(i.subarray(12, 16));
o = Ze.parseStsd(i);
let e;
if ("caption" === u) {
const t = Object.assign({
id: s,
type: u,
timescale: n,
duration: l,
isTimingTrack: !1,
sequenceNumber: 0,
captionSamples: []
}, o);
c.caption = t, e = t
} else {
const i = Object.assign({
id: s,
type: u,
timescale: n,
duration: l,
isTimingTrack: !0,
trakOffset: t.offset,
trakSize: t.boxSize,
sequenceNumber: 0,
samples: [],
fragmentDuration: 0
}, o);
"video" === u ? (c.video = i, c.videoCodec = i.codec) : (c.audio = i, c.audioCodec = i.codec), e = i
}
c.tracksById[s] = e
}
}
}
}
}
}), We.findBoxWithOffset(e, 0, ["moov", "mvex", "trex"]).forEach(e => {
var t = e.data,
e = We.readUint32(t, 4),
t = We.readUint32(t, 16);
c.tracksById[e].defaultSampleSize = t
}), c
}
static parseStsd(e) {
let r, t;
const i = e.subarray(8);
let n = We.bin2str(i.subarray(4, 8)),
s = null,
a = null;
"enca" === n ? (s = We.findBox(i, ["enca"])[0], a = s.subarray(28)) : "encv" === n && (s = We.findBox(i, ["encv"])[0], a = s.subarray(78));
e = !!a;
r = 0, a && We.findBox(a, ["sinf"]).forEach(e => {
const t = We.findBox(e, ["schm"])[0];
if (t) {
var i = We.bin2str(t.subarray(4, 8));
if ("cbcs" === i || "cenc" === i) {
const t = We.findBox(e, ["frma"])[0];
t && (n = We.bin2str(t));
e = We.findBox(e, ["schi", "tenc"])[0];
e && (r = e[7])
}
}
});
let o;
var l = i.subarray(86);
switch (n) {
case "mp4a":
t = "mp4a.40.5";
break;
case "ac-3":
case "ec-3":
case "alac":
case "fLaC":
t = n;
break;
case "avc1":
case "avc3":
t = n + ".640028";
break;
case "hvc1":
case "hev1":
const d = We.findBox(l, ["hvcC"])[0];
o = Ze.parseHvcC(d), t = o ? Ze.hvcCToCodecString(n, o) : n + ".2.4.H150.B0";
break;
case "dvh1":
case "dvhe":
const r = We.findBox(l, ["dvcC"])[0];
o = Ze.parseDvcC(r), t = o ? Ze.dvcCToCodecString(n, o) : n + ".05.01";
break;
case "c608":
t = n;
break;
case "vp09":
const i = We.findBox(l, ["vpcC"])[0];
o = Ze.parseVpcC(i), t = Ze.vpcCToCodecString(n, o);
break;
default:
t = n
}
return {
codec: t,
encrypted: e,
defaultPerSampleIVSize: r
}
}
static has32BitTfdts(e) {
const t = We.findBox(e, ["moof", "traf", "tfdt"]);
let i = !1;
return t.forEach(e => {
0 === e[0] && (i = !0)
}), i
}
static getStartDtsTs(r, e) {
const t = We.findBox(e, ["moof", "traf"]);
let n, s = Number.MAX_SAFE_INTEGER;
return t.map(function(i) {
return We.findBox(i, ["tfhd"]).forEach(e => {
var t = We.readUint32(e, 4),
e = r.tracksById[t];
if (e) {
if (!e.isTimingTrack) return 1 / 0;
t = e.timescale || 9e4, e = We.findBox(i, ["tfdt"]).map(function(e) {
let t;
var i = e[0];
return t = We.readUint32(e, 4), 1 === i && (t > Ye && Qe().warn(Je, `Value larger than can be represented by float for upper 32 bits ${t}`), t *= Math.pow(2, 32), t += We.readUint32(e, 8)), t
}), e = 0 < e.length ? e[0] : 1 / 0;
isFinite(e) && e / t < s && (s = e / t, n = {
baseTime: e,
timescale: t
})
}
})
}), n
}
static offsetStartDTS(r, e, l, n) {
We.findBox(e, ["moof", "traf"]).map(function(i) {
return We.findBox(i, ["tfhd"]).map(function(e) {
const t = We.readUint32(e, 4),
s = r.tracksById[t];
if (s) {
const a = s.timescale || 9e4,
o = "caption" === s.type ? 0 : n;
We.findBox(i, ["tfdt"]).map(function(t) {
const i = t[0],
r = s.type;
if (0 === i) {
let e = We.readUint32(t, 4) - Math.round(l.baseTime * a / l.timescale);
"video" === r && e < 0 && (Qe().warn(Je, `video tdft would have gone negative by ${e/a} seconds`), e = 0), e += Math.round(o * a), e = Math.max(e, 0), We.writeUint32(t, 4, e)
} else {
const i = We.readUint32(t, 4);
i > Ye && Qe().error(Je, `baseMediaDecodeTime larger than can be represented by float for upper 32 bits ${i}`);
let e = i;
e *= Math.pow(2, 32), e += We.readUint32(t, 8), e -= Math.round(l.baseTime * a / l.timescale), "video" === r && e < 0 && (Qe().warn(Je, `video tdft would have gone negative by ${e/a} seconds`), e = 0), e += Math.round(o * a), e = Math.max(e, 0);
const n = Math.floor(e / (1 + Xe)),
s = Math.floor(e % (1 + Xe));
We.writeUint32(t, 4, n), We.writeUint32(t, 8, s)
}
})
}
})
})
}
static writeStartDTS(i, e, s) {
We.findBox(e, ["moof", "traf"]).map(function(t) {
return We.findBox(t, ["tfhd"]).map(function(e) {
e = We.readUint32(e, 4), e = i.tracksById[e];
if (e) {
const r = e.timescale || 9e4,
n = Math.round(s * r) / r;
.01 < Math.abs(n - s) && Qe().warn(Je, `[iframes] large rounding error when adjusting timestamps, startDTS: ${s}, roundedStartDTS: ${n}`), We.findBox(t, ["tfdt"]).map(function(e) {
var t, i;
0 === e[0] ? We.writeUint32(e, 4, n * r) : (i = n * r, i = Math.max(i, 0), t = Math.floor(i / (1 + Xe)), i = Math.floor(i % (1 + Xe)), We.writeUint32(e, 4, t), We.writeUint32(e, 8, i))
})
}
})
})
}
static parseSAIO(e) {
let t = 0,
i = 0;
var r = e[0];
i += 4, 0 != (1 & We.readUint32(e, 0)) && (i += 8);
var n = 16777215 & We.readUint32(e, i);
return 1 == n ? (i += 4, t = We.readUint32(e, i), 1 === r && (i += 4, t *= Math.pow(2, 32), t += We.readUint32(e, i))) : Qe().error(Je, `saio entry count error, count is: ${n}`), t
}
static parseSAIZ(e) {
let t = 0,
i = 0;
return i += 4, 0 != (1 & We.readUint32(e, 0)) && (i += 8), t = e[i], i++, i += 4, 0 === t && (t = e[i]), t
}
static parseSubsample(e, t) {
const i = {
subsamples: []
};
let r = 0;
for (e && (i.iv = t.subarray(0, e), r += e), r += 2; r + 6 <= t.byteLength;) {
const e = We.readUint16(t, r);
r += 2;
var n = We.readUint32(t, r);
r += 4, i.subsamples.push([e, n])
}
return i
}
static isSEIMessage(e, t) {
return e ? 39 === t || 40 === t : 6 === t
}
static parseCLCPSample(e, t, i) {
let r = 0;
const n = [];
let s = 0;
for (; r < i;) {
var a = t + r,
o = We.readUint32(e, a);
a += 4;
var l = We.bin2str(e.subarray(a, a + 4));
if (a += 4, "cdat" !== l) break; {
const t = o - 8,
d = e.subarray(a, a + t);
s += t, n.push(d), r += o
}
}
return {
cdatList: n,
cdatTotalSize: s
}
}
static parseSamples(e, S, b, T, E, I) {
const w = b.timescale,
d = b.id;
let A, O = e,
k = 0,
C = !1;
We.findBoxWithOffset(S, 0, ["moof"]).map(function(e) {
const t = e.data,
v = e.offset;
We.findBox(t, ["traf"]).map(function(l) {
var e = We.findBox(l, ["tfdt"]).map(function(e) {
let t;
var i = e[0];
return t = We.readUint32(e, 4), 1 === i && (t *= Math.pow(2, 32), t += We.readUint32(e, 8)), t / w
})[0];
return void 0 !== e && (O = e), We.findBox(l, ["tfhd"]).map(function(e) {
var t = We.readUint32(e, 4),
i = 16777215 & We.readUint32(e, 0),
r = 0 != (1 & i),
n = 0 != (2 & i),
s = 0 != (8 & i);
let g = 0;
var a = 0 != (16 & i);
let y = 0;
i = 0 != (32 & i);
let o = 8;
if (ne(b.defaultSampleSize) && (y = b.defaultSampleSize), t === d) {
if (r && (We.readUint32(e, o), o += 4, We.readUint32(e, o), o += 4), n && (We.readUint32(e, o), o += 4), s && (g = We.readUint32(e, o), o += 4), a && (y = We.readUint32(e, o), o += 4), i && (We.readUint32(e, o), o += 4), "video" === b.type) {
let t = 0,
i = 0;
We.findBox(l, ["saio"]).map(function(e) {
t = Ze.parseSAIO(e)
}), We.findBox(l, ["saiz"]).map(function(e) {
i = Ze.parseSAIZ(e)
}), t && i && (A = Ze.parseSubsample(b.defaultPerSampleIVSize, S.subarray(t, t + i))), C = Ze.isHEVCFlavor(b.codec)
}
We.findBox(l, ["trun"]).map(function(i) {
var t = i[0],
e = 16777215 & We.readUint32(i, 0),
r = 0 != (1 & e);
let n = 0;
var s = 0 != (4 & e),
a = 0 != (256 & e);
let o = 0;
var l = 0 != (512 & e);
let d = 0;
var u = 0 != (1024 & e),
c = 0 != (2048 & e);
let h = 0;
var p = We.readUint32(i, 4);
let f = 8;
r && (n = We.readUint32(i, f), f += 4), s && (f += 4);
let m = n + v;
for (let e = 0; e < p && (I < 0 || k < I); e++) {
if (a ? (o = We.readUint32(i, f), f += 4) : o = g, l ? (d = We.readUint32(i, f), f += 4) : d = y, u && (f += 4), c && (h = 0 === t ? We.readUint32(i, f) : We.readSint32(i, f), f += 4), "video" === b.type) {
if (ne(T)) b.samples.push({
data: S.subarray(m, m + d),
size: d,
duration: T * w,
cts: 0,
flags: {
isLeading: 0,
isDependedOn: 0,
hasRedundancy: 0,
degradPrio: 0,
dependsOn: 2,
isNonSync: 0,
paddingValue: 0
},
subsamples: A ? A.subsamples : [],
iv: A ? A.iv : void 0
});
else if (b.fragmentDuration += o, E) {
let e = 0;
for (; e < d;) {
const T = We.readUint32(S, m);
m += 4;
const E = 31 & S[m];
if (b.seiSamples || (b.seiSamples = []), Ze.isSEIMessage(C, E)) {
const i = S.subarray(m, m + T);
b.seiSamples.push({
pts: O + h / w,
type: E,
data: i,
sampleOffset: m,
naluSize: T
})
}
m += T, e += T + 4
}
}
} else if ("audio" === b.type) b.fragmentDuration += o;
else if ("caption" === b.type) {
const {
cdatList: i,
cdatTotalSize: T
} = Ze.parseCLCPSample(S, m, d);
if (m += d, i.length) {
let t;
if (1 === i.length) t = new Uint8Array(i[0]);
else if (1 < i.length) {
let e = 0;
t = new Uint8Array(T);
for (const T of i) t.set(T, e), e += T.length
}
b.captionSamples.push({
type: 3,
pts: O,
bytes: t
})
}
}
k++, O += o / w
}
})
}
})
})
})
}
static parseEmsg(e) {
let t, i, r, n, s, a = "",
o = "",
l = 0;
if (0 === e[0]) {
for (;
"\0" !== We.bin2str(e.subarray(l, l + 1));) a += We.bin2str(e.subarray(l, l + 1)), l += 1;
for (a += We.bin2str(e.subarray(l, l + 1)), l += 1;
"\0" !== We.bin2str(e.subarray(l, l + 1));) o += We.bin2str(e.subarray(l, l + 1)), l += 1;
o += We.bin2str(e.subarray(l, l + 1)), l += 1, t = We.readUint32(e, 12), i = We.readUint32(e, 16), n = We.readUint32(e, 20), s = We.readUint32(e, 24), l = 28
} else {
l += 4, t = We.readUint32(e, l), l += 4;
const i = We.readUint32(e, l);
l += 4;
var d = We.readUint32(e, l);
for (l += 4, r = Math.pow(2, 32) * i + d, Number.isSafeInteger(r) || (r = Number.MAX_SAFE_INTEGER, Qe().warn(Je, "Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box")), n = We.readUint32(e, l), l += 4, s = We.readUint32(e, l), l += 4;
"\0" !== We.bin2str(e.subarray(l, l + 1));) a += We.bin2str(e.subarray(l, l + 1)), l += 1;
for (a += We.bin2str(e.subarray(l, l + 1)), l += 1;
"\0" !== We.bin2str(e.subarray(l, l + 1));) o += We.bin2str(e.subarray(l, l + 1)), l += 1;
o += We.bin2str(e.subarray(l, l + 1)), l += 1
}
return {
schemeIdUri: a,
value: o,
timeScale: t,
presentationTime: r,
presentationTimeDelta: i,
eventDuration: n,
id: s,
payload: e.subarray(l, e.byteLength)
}
}
static extractID3PayloadCreateID3Track(e, t, i, r) {
const n = new M(e.payload, r),
s = new Uint8Array(e.payload),
a = s.byteLength;
let o = 0,
l = 0;
var d = ne(e.presentationTime) ? e.presentationTime / e.timeScale : t + e.presentationTimeDelta / e.timeScale;
if (ne(d)) {
const c = e.eventDuration,
h = s.subarray(0, 10),
p = We.bin2str(h.subarray(l, l + 3));
l += 3, "ID3" !== p && Qe().error(Je, "No ID3 tag found when extracting ID3 payload"), l += 2;
var t = s.subarray(l, l + 1),
e = 64 & t[0],
u = 16 & t[0];
if (l += 1, M.readSynchSafeUint32(s.subarray(l, l + 4)), l += 4, e) {
const f = M.readSynchSafeUint32(s.subarray(l, l + 4));
l += 4, l += f
}
for (; l + 2 < a;) {
We.bin2str(s.subarray(l, l + 4)), l += 4;
const m = M.readSynchSafeUint32(s.subarray(l, l + 4));
l += 4;
const r = d + o * c,
a = {
data: s,
pts: r,
dts: r,
keyTagInfo: void 0,
frames: n.frames
};
i.id3Samples.push(a), l += m, o++, u && ("DI3" !== We.bin2str(s.subarray(l, l + 3)) && Qe().error(Je, "End should be DI3 if footer present in extracting ID3 payload"), l += 3, l += 7)
}
l + 2 === a && 0 !== We.readUint16(s, l) && Qe().warn(Je, "Padding should be 0 when extracting ID3 payload")
} else Qe().error(Je, "No pts found in emsg info when extracting ID3 payload")
}
append(e, t, i, r, n, s, a) {
let o = this.initData,
l = 0,
d = 0,
u = !1,
c = !1;
void 0 === o && (this.resetInitSegment(e, 0), o = this.initData);
let h, p = this.initPtsTs;
p || (h = Ze.getStartDtsTs(o, e), this.initPtsTs = p = {
baseTime: h.baseTime - Math.round(t * h.timescale),
timescale: h.timescale
}, this.observer.trigger(v.INIT_PTS_FOUND, {
initPTS: p
})), o.foundLargeTimescale && Ze.has32BitTfdts(e) && !a && (e = ze.remuxOverflowSegment(e, this.logger)), h = Ze.getStartDtsTs(o, e);
const f = We.findBox(e, ["emsg"]);
if (o.video && o.video.encrypted && (We.findBox(e, ["moof", "traf"]).find(function(e) {
return Boolean(We.findBox(e, ["senc"])[0] || We.findBox(e, ["saiz"])[0] && We.findBox(e, ["saio"])[0])
}) || this.logger.warn(Je, `Missing subsample information for encrypted content codec=${o.videoCodec}`)), a) {
const t = this._videoTrack.timescale;
a = Math.ceil(a * t) / t;
const i = (h.baseTime + this.audioPrimingDelay * h.timescale) / h.timescale;
if (this._videoTrack && this._audioTrack && !this._silentAudioTrack) {
const e = Te.getTrack(this.observer, this._audioTrack.id, this._audioTrack.codec, 2, this.logger);
if (!e) throw `unable to create silent audio track for codec ${this._audioTrack.codec}`;
this._silentAudioTrack = Object.assign(Object.assign({}, e), {
sequenceNumber: 0
});
const t = ge.initSegment([this._videoTrack, this._silentAudioTrack]);
this.remuxedInitDataTrack = {
type: "audiovideo",
container: "video/mp4",
codec: this._silentAudioTrack.config.codec + "," + this._videoTrack.codec,
initSegment: t
};
const i = {
track: this.remuxedInitDataTrack
};
this.observer.trigger(v.FRAG_PARSING_INIT_SEGMENT, i)
}
Ze.parseSamples(i, e, this._videoTrack, a, !1, 1), this.mp4Remuxer.remuxIFrame(i, this._videoTrack, this._silentAudioTrack, a, this.remuxedInitDataTrack), this._videoTrack.samples = []
} else {
a = (h.baseTime - this.audioPrimingDelay * h.timescale) / h.timescale, a = Math.max(0, a);
if (f && 0 < f.length) {
const e = f.map(e => {
e = Ze.parseEmsg(e);
return "https://aomedia.org/emsg/ID3\0" !== e.schemeIdUri || this._id3Track || (this._id3Track = {
id3Samples: [],
inputTimescale: 9e4
}), e
});
this._id3Track && e.map(e => {
Ze.extractID3PayloadCreateID3Track(e, t, this._id3Track, this.logger)
})
}
this._videoTrack && (Ze.parseSamples(a, e, this._videoTrack, void 0, this.trySEICaptions, -1), l = this._videoTrack.fragmentDuration / this._videoTrack.timescale, u = !0, this._videoTrack.fragmentDuration = 0, this.trySEICaptions ? (Ze.extractSEICaptionsFromNALu(this._videoTrack.seiSamples, this._captionTrack), this._videoTrack.seiSamples = []) : this._captionTrack && Ze.parseSamples(a, e, this._captionTrack, void 0, !1, Number.MAX_SAFE_INTEGER)), this._audioTrack && (Ze.parseSamples(a, e, this._audioTrack, void 0, !1, -1), d = this._audioTrack.fragmentDuration / this._audioTrack.timescale, c = !0, this._audioTrack.fragmentDuration = 0), this.mp4Remuxer.remuxEmsgAndRawData(d, c, l, u, this._captionTrack, this._id3Track, a, h.timescale, e, this.remuxedInitDataTrack), this._id3Track && (this._id3Track.id3Samples = [])
}
}
static extractSEICaptionsFromNALu(a, o) {
if (a) {
for (let s = 0; s < a.length; ++s) {
var l = a[s],
d = l.pts;
let t = 0;
t++;
let e = 0,
i = 0,
r = !1,
n = 0;
for (; !r && t < l.data.length;) {
for (e = 0; !(t >= l.data.length) && (n = l.data[t++], e += n, 255 === n););
for (i = 0; !(t >= l.data.length) && (n = l.data[t++], i += n, 255 === n););
const a = l.data.length - t;
if (4 === e && t < l.data.length) {
if (r = !0, 181 === l.data[t++]) {
const a = We.readUint16(l.data, t);
if (t += 2, 49 === a) {
const a = We.readUint32(l.data, t);
if (t += 4, 1195456820 === a && 3 === l.data[t++]) {
const a = l.data[t++];
t++;
const u = 31 & a,
c = [];
if (64 & a)
for (let e = 0; e < u; e++) {
const a = l.data[t++];
if (a === (252 & a)) {
const o = 3 & a;
if (0 == o || 1 == o) {
const a = l.data[t++],
o = l.data[t++];
c.push(a), c.push(o)
}
} else t += 2
}
0 < c.length && o.captionSamples.push({
type: 3,
pts: d,
bytes: c
})
}
}
}
} else if (i < a) t += i;
else if (i > a) break
}
}
return o
}
}
}
const et = {
name: "ExpGolomb"
};
class tt {
constructor(e, t) {
this.data = e, this.logger = t, this._bytesAvailable = e.byteLength, this.word = 0, this.bitsAvailable = 0
}
get bytesAvailable() {
return this._bytesAvailable
}
loadWord() {
const e = this.data,
t = this._bytesAvailable,
i = e.byteLength - t,
r = new Uint8Array(4),
n = Math.min(4, t);
if (0 === n) throw new Error("no bytes available");
r.set(e.subarray(i, i + n)), this.word = new DataView(r.buffer).getUint32(0), this.bitsAvailable = 8 * n, this._bytesAvailable -= n
}
skipBits(e) {
var t;
this.bitsAvailable > e || (t = (e -= this.bitsAvailable) >> 3, e -= t >> 3, this._bytesAvailable -= t, this.loadWord()), this.word <<= e, this.bitsAvailable -= e
}
readBits(e) {
let t = Math.min(this.bitsAvailable, e);
var i = this.word >>> 32 - t;
return 32 < e && this.logger.error(et, "Cannot read more than 32 bits at a time"), this.bitsAvailable -= t, 0 < this.bitsAvailable ? this.word <<= t : 0 < this._bytesAvailable && this.loadWord(), t = e - t, 0 < t && this.bitsAvailable ? i << t | this.readBits(t) : i
}
skipLZ() {
let e;
for (e = 0; e < this.bitsAvailable; ++e)
if (0 != (this.word & 2147483648 >>> e)) return this.word <<= e, this.bitsAvailable -= e, e;
return this.loadWord(), e + this.skipLZ()
}
skipUEG() {
this.skipBits(1 + this.skipLZ())
}
skipEG() {
this.skipBits(1 + this.skipLZ())
}
readUEG() {
var e = this.skipLZ();
return this.readBits(e + 1) - 1
}
readEG() {
var e = this.readUEG();
return 1 & e ? 1 + e >>> 1 : -1 * (e >>> 1)
}
readBoolean() {
return 1 === this.readBits(1)
}
readUByte() {
return this.readBits(8)
}
readUShort() {
return this.readBits(16)
}
readUInt() {
return this.readBits(32)
}
skipScalingList(e) {
let t, i, r = 8,
n = 8;
for (t = 0; t < e; t++) 0 !== n && (i = this.readEG(), n = (r + i + 256) % 256), r = 0 === n ? r : n
}
readSPS() {
let e, t, i, r = 0,
n = 0,
s = 0,
a = 0;
const o = this.readUByte.bind(this),
l = this.readBits.bind(this),
d = this.readUEG.bind(this),
u = this.readBoolean.bind(this),
c = this.skipBits.bind(this),
h = this.skipEG.bind(this),
p = this.skipUEG.bind(this),
f = this.skipScalingList.bind(this);
o();
var m = o();
if (l(5), c(3), o(), p(), 100 === m || 110 === m || 122 === m || 244 === m || 44 === m || 83 === m || 86 === m || 118 === m || 128 === m) {
const e = d();
if (3 === e && c(1), p(), p(), c(1), u())
for (t = 3 !== e ? 8 : 12, i = 0; i < t; i++) u() && f(i < 6 ? 16 : 64)
}
p();
var g = d();
if (0 === g) d();
else if (1 === g)
for (c(1), h(), h(), e = d(), i = 0; i < e; i++) h();
p(), c(1);
var y = d(),
m = d(),
g = l(1);
0 === g && c(1), c(1), u() && (r = d(), n = d(), s = d(), a = d());
let v = [1, 1];
if (u() && u()) switch (o()) {
case 1:
v = [1, 1];
break;
case 2:
v = [12, 11];
break;
case 3:
v = [10, 11];
break;
case 4:
v = [16, 11];
break;
case 5:
v = [40, 33];
break;
case 6:
v = [24, 11];
break;
case 7:
v = [20, 11];
break;
case 8:
v = [32, 11];
break;
case 9:
v = [80, 33];
break;
case 10:
v = [18, 11];
break;
case 11:
v = [15, 11];
break;
case 12:
v = [64, 33];
break;
case 13:
v = [160, 99];
break;
case 14:
v = [4, 3];
break;
case 15:
v = [3, 2];
break;
case 16:
v = [2, 1];
break;
case 255:
v = [o() << 8 | o(), o() << 8 | o()]
}
return {
width: Math.ceil(16 * (y + 1) - 2 * r - 2 * n),
height: (2 - g) * (m + 1) * 16 - (g ? 2 : 4) * (s + a),
pixelRatio: v
}
}
readSliceType() {
return this.readUByte(), this.readUEG(), this.readUEG()
}
}
const it = {
name: "TS Demuxer"
};
var rt, nt = class extends c {
constructor(e, t, i, r, n) {
super(e, t, i, r, n)
}
static probe(e, t) {
return 564 <= e.length && 71 === e[0] && 71 === e[188] && 71 === e[376]
}
resetInitSegment(e, t, i) {
this.pmtParsed = !1;
var r = {
id: this._pmtId = -1,
inputTimescale: 9e4,
timescale: NaN,
duration: 0,
encrypted: i && i.isEncrypted,
keyTagInfo: i
},
i = {
len: 0,
sequenceNumber: 0
};
this._avcContext = {
info: Object.assign({}, r),
parsingData: Object.assign(Object.assign({}, i), {
esSamples: new Array,
dropped: 0
}),
config: {},
container: "video/mp2t",
type: "video"
}, this._audioContext = {
info: Object.assign({}, r),
parsingData: Object.assign(Object.assign({}, i), {
esSamples: new Array
}),
container: "video/mp2t",
type: "audio"
}, this._id3Track = {
id: -1,
inputTimescale: 9e4,
id3Samples: []
}, this._txtTrack = {
inputTimescale: 9e4,
captionSamples: []
}, this._duration = t, this._initSegment = e
}
append(e, t, i, r, n, s, a) {
let o, l, d, u, c, h = !1;
this.contiguous = i;
const p = this._avcContext,
f = this._audioContext,
m = this._id3Track;
let g = this.pmtParsed,
y = p.info.id,
v = f.info.id,
S = m.id,
b = this._pmtId,
T = p.pesData,
E = f.pesData,
I = m.pesData;
if (this.iframeMode = void 0 !== a, this._initSegment && 0 < this._initSegment.byteLength) {
const t = new Uint8Array(this._initSegment.byteLength + e.byteLength);
t.set(this._initSegment), t.set(e, this._initSegment.byteLength), this._initSegment = void 0, 71 === t[0] && (e = t)
}
let w, A, O = e.length;
for (O -= O % 188, o = 0; o < O; o += 188) {
if (71 !== e[o]) {
const e = new D(!1, "TS packet did not start with 0x47", $.NoTSSyncByteFound);
return void this.observer.trigger(x.INTERNAL_ERROR, e)
}
if (l = !!(64 & e[o + 1]), d = ((31 & e[o + 1]) << 8) + e[o + 2], 1 < (48 & e[o + 3]) >> 4) {
if (u = o + 5 + e[o + 4], u === o + 188) continue
} else u = o + 4;
switch (d) {
case y:
l && (T && (c = this._parsePES(T)) && this._parseAVCPES(c, !1), T = {
data: [],
size: 0,
keyTagInfo: n
}), T && (T.data.push(e.subarray(u, o + 188)), T.size += o + 188 - u);
break;
case v:
if (l && !this.iframeMode) {
if (E && (c = this._parsePES(E))) switch (f.segmentCodec) {
case "aac":
this._parseAACPES(c);
break;
case "mp3":
this._parseMPEGPES(c);
break;
case "ac3":
case "ec3":
this._parseDolbyPES(c)
}
E = {
data: [],
size: 0,
keyTagInfo: n
}
}
E && (E.data.push(e.subarray(u, o + 188)), E.size += o + 188 - u);
break;
case S:
l && (I && (c = this._parsePES(I)) && m.id3Samples.push(c), I = {
data: [],
size: 0
}), I && (I.data.push(e.subarray(u, o + 188)), I.size += o + 188 - u);
break;
case 0:
l && (u += e[u] + 1), b = this._pmtId = this._parsePAT(e, u);
break;
case b:
l && (u += e[u] + 1);
const t = this._parsePMT(e, u, this.typeSupported);
y = t.avcId, 0 < y && (p.info.id = y, p.info.encrypted = t.videoEncrypted), v = t.audioId, 0 < v && (f.info.id = v, f.segmentCodec = t.audioSegmentCodec, f.info.encrypted = t.audioEncrypted), S = t.id3Id, 0 < S && (m.id = S), h && !g && (h = !1, o = -188), g = this.pmtParsed = !0;
break;
case 17:
case 8191:
break;
default:
h = !0
}
}
if (T && (c = this._parsePES(T)) ? (this._parseAVCPES(c, !0), p.pesData = void 0) : p.pesData = T, E && (c = this._parsePES(E))) {
switch (f.segmentCodec) {
case "aac":
this._parseAACPES(c);
break;
case "mp3":
this._parseMPEGPES(c);
break;
case "ac3":
case "ec3":
this._parseDolbyPES(c)
}
f.pesData = void 0
} else E && E.size && this.logger.warn(it, "last AAC PES packet truncated,might overlap between fragments"), f.pesData = E;
I && (c = this._parsePES(I)) ? (m.id3Samples.push(c), m.pesData = void 0) : m.pesData = I, f.config && f.segmentCodec && (w = {
type: "audio",
info: f.info,
config: f.config,
parsingData: f.parsingData
});
var k, C = p.config;
"string" == typeof(k = C).codec && Array.isArray(k.sps) && Array.isArray(k.pps) && "number" == typeof k.width && "number" == typeof k.height && Array.isArray(k.pixelRatio) && (A = {
type: "video",
info: p.info,
config: C,
parsingData: p.parsingData
}), this.esRemuxer.remuxEsTracks(w, A, m, this._txtTrack, t, i, r, n, s, a)
}
destroy() {
this._duration = 0
}
_parsePAT(e, t) {
return (31 & e[t + 10]) << 8 | e[t + 11]
}
_parsePMT(e, t, i) {
var r;
const n = {
audioId: -1,
avcId: -1,
id3Id: -1,
audioEncrypted: !1,
videoEncrypted: !1
},
s = t + 3 + ((15 & e[t + 1]) << 8 | e[t + 2]) - 4;
for (t += 12 + ((15 & e[t + 10]) << 8 | e[t + 11]); t < s;) {
switch (r = (31 & e[t + 1]) << 8 | e[t + 2], e[t]) {
case 207:
n.audioEncrypted = !0;
case 15:
-1 === n.audioId && (n.audioId = r, n.audioSegmentCodec = "aac");
break;
case 21:
-1 === n.id3Id && (n.id3Id = r);
break;
case 219:
n.videoEncrypted = !0;
case 27:
-1 === n.avcId && (n.avcId = r);
break;
case 3:
case 4:
!0 !== i.mpeg && !0 !== i.mp3 ? this.logger.warn(it, "MPEG audio found, not supported in this browser for now") : -1 === n.audioId && (n.audioId = r, n.audioSegmentCodec = "mp3");
break;
case 193:
n.audioEncrypted = !0;
case 129:
!0 !== i.ac3 ? this.logger.warn(it, "AC-3 audio found, not supported in this browser for now") : -1 === n.audioId && (n.audioId = r, n.audioSegmentCodec = "ac3");
break;
case 194:
n.audioEncrypted = !0;
case 135:
!0 !== i.ec3 ? this.logger.warn(it, "EC-3 audio found, not supported in this browser for now") : -1 === n.audioId && (n.audioId = r, n.audioSegmentCodec = "ec3");
break;
case 36:
this.logger.warn(it, "HEVC stream type found, not supported for now");
break;
default:
this.logger.warn(it, "unkown stream type:" + e[t])
}
t += 5 + ((15 & e[t + 3]) << 8 | e[t + 4])
}
return n
}
_parsePES(e) {
let i, t, r, n, s, a, o = 0;
const l = e.data,
d = e.keyTagInfo;
let u = NaN,
c = NaN;
if (e && 0 !== e.size) {
for (; l[0].length < 19 && 1 < l.length;) {
const e = new Uint8Array(l[0].length + l[1].length);
e.set(l[0]), e.set(l[1], l[0].length), l[0] = e, l.splice(1, 1)
}
if (i = l[0], 1 === (i[0] << 16) + (i[1] << 8) + i[2] && (r = (i[4] << 8) + i[5], !(r && r > e.size - 6))) {
192 & (t = i[7]) && (u = 536870912 * (14 & i[9]) + 4194304 * (255 & i[10]) + 16384 * (254 & i[11]) + 128 * (255 & i[12]) + (254 & i[13]) / 2, 64 & t ? (c = 536870912 * (14 & i[14]) + 4194304 * (255 & i[15]) + 16384 * (254 & i[16]) + 128 * (255 & i[17]) + (254 & i[18]) / 2, 54e5 < u - c && (this.logger.warn(it, `${Math.round((u-c)/9e4)}s delta between PTS and DTS, align them`), u = c)) : c = u), n = i[8], a = n + 9, e.size -= a, s = new Uint8Array(e.size);
for (let t = 0, e = l.length; t < e; t++) {
i = l[t];
let e = i.byteLength;
if (a) {
if (a > e) {
a -= e;
continue
}
i = i.subarray(a), e -= a, a = 0
}
s.set(i, o), o += e
}
return r && (r -= n + 3), {
data: s,
pts: u,
dts: c,
len: r,
keyTagInfo: d
}
}
}
}
pushAccesUnit(e, t) {
const i = e.avcSample;
if (i && i.units.length && i.frame) {
const r = e.parsingData.esSamples,
n = r.length;
(!0 === i.key || e.config.sps && (n || this.contiguous)) && (i.id = n, i.keyTagInfo = t, e.info.encrypted) && i.units.forEach(e => {
if (48 < e.data.byteLength) switch (e.type) {
case 1:
case 5:
e.data = this.discardEPB(e.data)
}
}), n || isFinite(i.pts) ? r.push(i) : e.parsingData.dropped++
}
}
_parseAVCPES(o, e) {
if (!o.data) throw "invalid pes data";
const l = this._avcContext,
t = this._parseAVCNALu(o.data);
let d, u, c, h = l.avcSample;
const p = o.keyTagInfo;
o.data = void 0, t.forEach(n => {
switch (n.type) {
case 1:
if (h && !this.iframeMode) {
u = !0, h.frame = !0;
const o = n.data;
if (4 < o.length) {
const n = new tt(o, this.logger).readSliceType();
2 !== n && 4 !== n && 7 !== n && 9 !== n || (h.key = !0)
}
}
break;
case 5:
u = !0, h && (h = h || (l.avcSample = this._createAVCSample(!0, o.pts, o.dts, "")), h.key = !0, h.frame = !0);
break;
case 6:
u = !0, d = new tt(this.discardEPB(n.data), this.logger), d.readUByte();
let e = 0,
t = 0,
i = !1,
r = 0;
for (; !i && 1 < d.bytesAvailable;) {
for (e = 0; r = d.readUByte(), e += r, 255 === r;);
for (t = 0; r = d.readUByte(), t += r, 255 === r;);
if (4 === e && 0 !== d.bytesAvailable) {
if (i = !0, 181 === d.readUByte() && 49 === d.readUShort() && 1195456820 === d.readUInt() && 3 === d.readUByte()) {
const n = d.readUByte(),
l = 31 & n,
s = [n, d.readUByte()];
for (c = 0; c < l; c++) s.push(d.readUByte()), s.push(d.readUByte()), s.push(d.readUByte());
this._insertSampleInOrder(this._txtTrack.captionSamples, {
type: 3,
pts: o.pts,
bytes: s
})
}
} else if (t < d.bytesAvailable)
for (c = 0; c < t; c++) d.readUByte()
}
break;
case 7:
if (u = !0, !l.config.sps) {
d = new tt(n.data, this.logger);
const o = d.readSPS();
l.config.width = o.width, l.config.height = o.height, l.config.pixelRatio = o.pixelRatio, l.config.sps = [n.data], l.info.duration = this._duration;
const a = n.data.subarray(1, 4);
let t = "avc1.";
for (c = 0; c < 3; c++) {
let e = a[c].toString(16);
e.length < 2 && (e = "0" + e), t += e
}
l.config.codec = t
}
break;
case 8:
u = !0, l.config.pps || (l.config.pps = [n.data]);
break;
case 9:
u = !1, h && this.pushAccesUnit(l, p), h = l.avcSample = this._createAVCSample(!1, o.pts, o.dts, "");
break;
case 12:
u = !1;
break;
default:
u = !1, h && (h.debug += "unknown NAL " + n.type + " ")
}
h && u && h.units.push(n)
}), e && h && (this.pushAccesUnit(l, p), l.avcSample = void 0)
}
_createAVCSample(e, t, i, r) {
return {
id: NaN,
key: e,
pts: t,
dts: i,
units: new Array,
debug: r
}
}
_insertSampleInOrder(t, i) {
var r = t.length;
if (0 < r) {
if (i.pts >= t[r - 1].pts) t.push(i);
else
for (let e = r - 1; 0 <= e; e--)
if (i.pts < t[e].pts) {
t.splice(e, 0, i);
break
}
} else t.push(i)
}
_getLastNalUnit() {
const e = this._avcContext;
let t, i = e.avcSample;
if (!i || 0 === i.units.length) {
const t = e.parsingData.esSamples;
i = t[t.length - 1]
}
if (i) {
const e = i.units;
t = e[e.length - 1]
}
return t
}
_parseAVCNALu(e) {
const t = e.byteLength;
let i, r, n = 0;
const s = this._avcContext;
let a = s.naluState || 0;
const o = a,
l = [];
let d, u, c, h = -1;
for (-1 === a && (h = 0, c = 31 & e[0], a = 0, n = 1); n < t;)
if (i = e[n++], a)
if (1 !== a)
if (i)
if (1 === i) {
if (0 <= h) d = {
data: e.subarray(h, n - a - 1),
type: c
}, l.push(d);
else {
const t = this._getLastNalUnit();
if (t && (o && n <= 4 - o && t.state && (t.data = t.data.subarray(0, t.data.byteLength - o)), r = n - a - 1, 0 < r)) {
const i = new Uint8Array(t.data.byteLength + r);
i.set(t.data, 0), i.set(e.subarray(0, r), t.data.byteLength), t.data = i, t.state = 0
}
}
a = n < t ? (u = 31 & e[n], h = n, c = u, 0) : -1
} else a = 0;
else a = 3;
else a = i ? 0 : 2;
else a = i ? 0 : 1;
if (0 <= h && 0 <= a && (d = {
data: e.subarray(h, t),
type: c,
state: a
}, l.push(d)), 0 === l.length) {
const t = this._getLastNalUnit();
if (t) {
const i = new Uint8Array(t.data.byteLength + e.byteLength);
i.set(t.data, 0), i.set(e, t.data.byteLength), t.data = i
}
}
return s.naluState = a, l
}
discardEPB(e) {
const t = e.byteLength,
i = [];
let r = 1;
for (; r < t - 2;) 0 === e[r] && 0 === e[r + 1] && 3 === e[r + 2] ? (i.push(r + 2), r += 2) : r++;
if (0 === i.length) return e;
const n = t - i.length,
s = new Uint8Array(n);
let a = 0;
for (r = 0; r < n; a++, r++) a === i[0] && (a++, i.shift()), s[r] = e[a];
return s
}
_parseAACPES(e) {
const t = this._audioContext,
i = t.audioLastPTS,
r = e.keyTagInfo;
let n, s, a, o, l, d, u, c = e.data,
h = e.pts,
p = t.audioOverFlow;
if (p) {
const e = new Uint8Array(p.byteLength + c.byteLength);
e.set(p, 0), e.set(c, p.byteLength), c = e
}
for (a = 0, d = c.length; a < d - 1 && (255 !== c[a] || 240 != (240 & c[a + 1])); a++);
if (a) {
let e, t, i;
i = a < d - 1 ? (e = `AAC PES did not start with ADTS header,offset:${a}`, t = !1, $.PESDidNotStartWithADTS) : (e = "no ADTS header found in AAC PES", t = !0, $.NoADTSHeaderInPES), this.logger.warn(it, `parsing error:${e}`);
const r = new D(t, e, i);
if (this.observer.trigger(x.INTERNAL_ERROR, r), t) return
}
if (!t.config) {
const e = E(this.observer, c, a, void 0, this.logger);
if (!e) throw "unable to parse adts header";
t.config = e
}
s = 0;
var f = 9216e4 / t.config.samplerate;
if (p && i) {
const e = i + f;
1 < Math.abs(e - h) && (h = e)
}
for (; a + 5 < d && (o = 1 & c[a + 1] ? 7 : 9, n = (3 & c[a + 3]) << 11 | c[a + 4] << 3 | (224 & c[a + 5]) >>> 5, n -= o, 0 < n && a + o + n <= d);)
for (l = h + s * f, u = {
unit: c.subarray(a + o, a + o + n),
pts: l,
dts: l,
keyTagInfo: r
}, t.parsingData.esSamples.push(u), t.parsingData.len += n, a += n + o, s++; a < d - 1 && (255 !== c[a] || 240 != (240 & c[a + 1])); a++);
p = a < d ? c.subarray(a, d) : void 0, t.audioOverFlow = p, t.audioLastPTS = l
}
_parseMPEGPES(e) {
"mp3" === this._audioContext.segmentCodec && ee.parse(this._audioContext.parsingData, e.data, 0, e.pts, this.logger)
}
_parseDolbyPES(e) {
const t = this._audioContext;
let i = e.data,
r = e.pts;
var n = e.keyTagInfo;
let s = 0,
a = 0,
o = t.audioOverFlow;
e = t.audioLastPTS;
if (!t.config) {
let e;
if ("ac3" === t.segmentCodec ? e = j(this.observer, i, a, this.logger) : "ec3" === t.segmentCodec && (e = Y(this.observer, i, a, this.logger)), !e) throw "unable to parse dolby header";
t.config = e
}
if ("ac3" !== t.config.segmentCodec && "ec3" !== t.config.segmentCodec) throw "unexpected config type";
var l = 1536 / t.config.samplerate * t.info.inputTimescale;
if (o) {
const c = new Uint8Array(o.byteLength + i.byteLength);
c.set(o, 0), c.set(i, o.byteLength), i = c
}
var d = i.length;
if (o && e) {
const c = e + l;
1 < Math.abs(c - r) && (r = c)
}
let u = 0;
for (; a + u <= d;) {
if (11 !== i[a] || 119 !== i[a + 1]) {
const c = new D(!0, "invalid dolby audio magic", $.InvalidDolbyAudioMagic);
return void this.observer.trigger(x.INTERNAL_ERROR, c)
}
"ac3" === t.segmentCodec ? u = Q(this.observer, i, a) : "ec3" === t.segmentCodec && (u = X(this.observer, i, a, this.logger));
const c = r + s * l;
t.audioLastPTS = c;
const o = {
unit: i.subarray(a, a + u),
pts: c,
dts: c,
keyTagInfo: n
};
t.parsingData.esSamples.push(o), t.info.duration = this._duration, t.parsingData.len += u, a += u, s++
}
o = a < d ? i.subarray(a, d) : void 0, t.audioOverFlow = o
}
};
class st extends a {
constructor(e, t, i, r) {
super(), this.typeSupported = e, this.config = t, this.vendor = i, this.logger = r
}
destroy() {
this.removeAllListeners();
const e = this.demuxer,
t = this.remuxer;
e && e.destroy(), t && t.destroy()
}
push(t, i, r, n, s, a, o, l, d, u, c, h) {
if (t) {
let e = this.demuxer;
var p = new Uint8Array(t);
if (!e || (s || a) && !this.probeFn(p, this.logger)) {
const {
typeSupported: t,
config: i
} = this, r = [{
demux: Ze,
remux: ze
}, {
demux: nt,
remux: Ee
}, {
demux: J,
remux: Ee
}, {
demux: z,
remux: Ee
}, {
demux: K,
remux: Ee
}, {
demux: ie,
remux: Ee
}];
for (const n of r) {
const r = n.demux["probe"];
if (r(p, this.logger)) {
this.remuxer = new n.remux(this, i, t, this.vendor, this.logger), e = new n.demux(this, this.remuxer, i, t, this.logger), this.probeFn = r;
break
}
}
if (!e) {
const t = new D(!0, "no demux matching with content found", $.DemuxerNotFound);
return void this.trigger(x.INTERNAL_ERROR, t)
}
this.demuxer = e
}
const f = this.remuxer,
m = !this.lastKeyTagInfo || i && "NONE" !== i.method && this.lastKeyTagInfo.uri !== i.uri;
if (this.lastKeyTagInfo = i, (s || a || m) && (e.resetInitSegment(new Uint8Array(r), l, i, s), f.resetInitSegment()), s) {
const t = u ? S(u) : void 0;
e.resetTimeStamp(t), f.resetTimeStamp(t)
}
e.append(p, n, o, d, i, c, h)
}
}
}
function at() {
let e = `${Date.now()}-${Math.random()}`;
return "undefined" != typeof performance && "function" == typeof performance.now && (e += `-${performance.now()}`), e
}
class ot {
constructor(e, t) {
this.rpc = e, this.logger = t, this.init = (t, n, s) => e => {
const i = at(),
r = this.demuxers[i] = new st(t, n, s, this.logger);
[v.INIT_PTS_FOUND, v.FRAG_PARSING_INIT_SEGMENT, v.FRAG_PARSING_DATA, v.FRAG_PARSED, x.INTERNAL_ERROR].forEach(t => {
r.on(t, e => this.rpc.invoke("demuxer.event", [i, t, e])(() => {}))
}), e(i)
}, this.push = (i, r, n, s, a, o, l, d, u, c, h, p, f) => e => {
const t = this.demuxers[i];
t ? (t.push(r, n, s, a, o, l, d, u, c, h, p, f), e()) : e(void 0, `Demuxer with id "${i}" does not exist on push`)
}, this.destroy = i => e => {
const t = this.demuxers[i];
t ? (t.destroy(), delete this.demuxers[i], e()) : this.logger.error(`Demuxer with id "${i}" does not exist on destroy`)
}, this.demuxers = {}, e.register("demuxer.init", this.init), e.register("demuxer.push", this.push), e.register("demuxer.destroy", this.destroy)
}
}
class lt {
constructor(e) {
this.worker = e, this.handlers = {}, this.deferers = {}, this._messageHandler = e => {
var {
type: t,
id: i,
command: r,
args: n,
result: e,
error: s
} = e.data;
if (t === rt.Invoke) try {
if (null == this.handlers[r]) throw new Error(`command ${r} not found`);
this.handlers[r](...n)(this._respond.bind(this, i, r))
} catch (s) {
this._respond(i, r, null, new Error(`command ${r} not found`))
} else t === rt.Result && null != this.deferers[i] && (this.deferers[i](e, s), delete this.deferers[i])
}, e.addEventListener("message", this._messageHandler)
}
register(e, t) {
if (null != this.handlers[e]) return !1;
this.handlers[e] = t
}
unregister(e) {
if (null != this.handlers[e]) return !1;
delete this.handlers[e]
}
invoke(i, r, n) {
return (e = lt._fallbackCallback) => {
var t = at();
this.deferers[t] = e;
t = {
type: rt.Invoke,
id: t,
command: i,
args: r
};
this._send(t, n)
}
}
teardown(e) {
this.worker.removeEventListener("message", this._messageHandler), e()
}
_respond(e, t, i, r, n) {
r instanceof Error && (r = `[${r.name}] ${r.message}\n${r.stack}`);
r = {
type: rt.Result,
id: e,
command: t,
result: i,
error: r
};
this._send(r, n)
}
_send(e, t = []) {
this.worker.postMessage(e, t.map(e => ArrayBuffer.isView(e) ? e.buffer : e).filter(e => void 0 !== e))
}
}
lt._fallbackCallback = (e, t) => {
if (null != t) throw t
}, (vr = rt = rt || {})[vr.Invoke = 0] = "Invoke", vr[vr.Result = 1] = "Result", ArrayBuffer.isView || (ArrayBuffer.isView = function(e) {
return null !== e && "object" == typeof e && e.buffer instanceof ArrayBuffer
}), void 0 !== Yy && Yy && (Vr = new lt(l), iu = (n => {
const t = (i = []) => {
const r = {};
return ["fatal", "error", "warn", "info", "debug", "trace", "qe"].forEach(e => {
return r[e] = (t = e, (...e) => {
n.invoke("logger.log", [i, t, ...e])((e, t) => {
if (null != t) throw t
})
});
var t
}), r.child = e => t([...i, e]), r
};
return t()
})(Vr), new i(Vr, iu), new ot(Vr, iu));
var dt = function(e, t) {
return (dt = Object.setPrototypeOf || {
__proto__: []
}
instanceof Array && function(e, t) {
e.__proto__ = t
} || function(e, t) {
for (var i in t) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i])
})(e, t)
};
function ut(e, t) {
if ("function" != typeof t && null !== t) throw new TypeError("Class extends value " + String(t) + " is not a constructor or null");
function i() {
this.constructor = e
}
dt(e, t), e.prototype = null === t ? Object.create(t) : (i.prototype = t.prototype, new i)
}
var ct = function() {
return (ct = Object.assign || function(e) {
for (var t, i = 1, r = arguments.length; i < r; i++)
for (var n in t = arguments[i]) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);
return e
}).apply(this, arguments)
};
function ht(e, t, i, r) {
var n, s = arguments.length,
a = s < 3 ? t : null === r ? r = Object.getOwnPropertyDescriptor(t, i) : r;
if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) a = Reflect.decorate(e, t, i, r);
else
for (var o = e.length - 1; 0 <= o; o--)(n = e[o]) && (a = (s < 3 ? n(a) : 3 < s ? n(t, i, a) : n(t, i)) || a);
return 3 < s && a && Object.defineProperty(t, i, a), a
}
function pt(e, t) {
if ("object" == typeof Reflect && "function" == typeof Reflect.metadata) return Reflect.metadata(e, t)
}
function ft(e) {
var t = "function" == typeof Symbol && Symbol.iterator,
i = t && e[t],
r = 0;
if (i) return i.call(e);
if (e && "number" == typeof e.length) return {
next: function() {
return {
value: (e = e && r >= e.length ? void 0 : e) && e[r++],
done: !e
}
}
};
throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.")
}
function mt(e, t) {
var i = "function" == typeof Symbol && e[Symbol.iterator];
if (!i) return e;
var r, n, s = i.call(e),
a = [];
try {
for (;
(void 0 === t || 0 < t--) && !(r = s.next()).done;) a.push(r.value)
} catch (e) {
n = {
error: e
}
} finally {
try {
r && !r.done && (i = s.return) && i.call(s)
} finally {
if (n) throw n.error
}
}
return a
}
function gt() {
for (var e = [], t = 0; t < arguments.length; t++) e = e.concat(mt(arguments[t]));
return e
}
function yt(e) {
return "function" == typeof e
}
var vt = !1,
St = {
Promise: void 0,
set useDeprecatedSynchronousErrorHandling(e) {
vt = e
},
get useDeprecatedSynchronousErrorHandling() {
return vt
}
};
function bt(e) {
setTimeout(function() {
throw e
}, 0)
}
var Tt = {
closed: !0,
next: function(e) {},
error: function(e) {
if (St.useDeprecatedSynchronousErrorHandling) throw e;
bt(e)
},
complete: function() {}
},
Et = Array.isArray || function(e) {
return e && "number" == typeof e.length
};
function It(e) {
return null !== e && "object" == typeof e
}
var wt = (kt.prototype = Object.create(Error.prototype), kt),
At = (Ot.prototype.unsubscribe = function() {
var t;
if (!this.closed) {
var e = this._parentOrParents,
i = this._ctorUnsubscribe,
r = this._unsubscribe,
n = this._subscriptions;
if (this.closed = !0, this._parentOrParents = null, this._subscriptions = null, e instanceof Ot) e.remove(this);
else if (null !== e)
for (var s = 0; s < e.length; ++s) e[s].remove(this);
if (yt(r)) {
i && (this._unsubscribe = void 0);
try {
r.call(this)
} catch (e) {
t = e instanceof wt ? Ct(e.errors) : [e]
}
}
if (Et(n))
for (var s = -1, a = n.length; ++s < a;) {
var o = n[s];
if (It(o)) try {
o.unsubscribe()
} catch (e) {
t = t || [], e instanceof wt ? t = t.concat(Ct(e.errors)) : t.push(e)
}
}
if (t) throw new wt(t)
}
}, Ot.prototype.add = function(e) {
var t, i = e;
if (!e) return Ot.EMPTY;
switch (typeof e) {
case "function":
i = new Ot(e);
case "object":
if (i === this || i.closed || "function" != typeof i.unsubscribe) return i;
if (this.closed) return i.unsubscribe(), i;
i instanceof Ot || (t = i, (i = new Ot)._subscriptions = [t]);
break;
default:
throw new Error("unrecognized teardown " + e + " added to Subscription.")
}
var r = i._parentOrParents;
if (null === r) i._parentOrParents = this;
else if (r instanceof Ot) {
if (r === this) return i;
i._parentOrParents = [r, this]
} else {
if (-1 !== r.indexOf(this)) return i;
r.push(this)
}
r = this._subscriptions;
return null === r ? this._subscriptions = [i] : r.push(i), i
}, Ot.prototype.remove = function(e) {
var t = this._subscriptions;
!t || -1 !== (e = t.indexOf(e)) && t.splice(e, 1)
}, Ot.EMPTY = ((dl = new Ot).closed = !0, dl), Ot);
function Ot(e) {
this.closed = !1, this._parentOrParents = null, this._subscriptions = null, e && (this._ctorUnsubscribe = !0, this._unsubscribe = e)
}
function kt(e) {
return Error.call(this), this.message = e ? e.length + " errors occurred during unsubscription:\n" + e.map(function(e, t) {
return t + 1 + ") " + e.toString()
}).join("\n ") : "", this.name = "UnsubscriptionError", this.errors = e, this
}
function Ct(e) {
return e.reduce(function(e, t) {
return e.concat(t instanceof wt ? t.errors : t)
}, [])
}
var Dt, Mt, xt = "function" == typeof Symbol ? Symbol("rxSubscriber") : "@@rxSubscriber_" + Math.random(),
Pt = (ut(_t, Mt = At), _t.prototype[xt] = function() {
return this
}, _t.create = function(e, t, i) {
i = new _t(e, t, i);
return i.syncErrorThrowable = !1, i
}, _t.prototype.next = function(e) {
this.isStopped || this._next(e)
}, _t.prototype.error = function(e) {
this.isStopped || (this.isStopped = !0, this._error(e))
}, _t.prototype.complete = function() {
this.isStopped || (this.isStopped = !0, this._complete())
}, _t.prototype.unsubscribe = function() {
this.closed || (this.isStopped = !0, Mt.prototype.unsubscribe.call(this))
}, _t.prototype._next = function(e) {
this.destination.next(e)
}, _t.prototype._error = function(e) {
this.destination.error(e), this.unsubscribe()
}, _t.prototype._complete = function() {
this.destination.complete(), this.unsubscribe()
}, _t.prototype._unsubscribeAndRecycle = function() {
var e = this._parentOrParents;
return this._parentOrParents = null, this.unsubscribe(), this.closed = !1, this.isStopped = !1, this._parentOrParents = e, this
}, _t),
Rt = (ut(Lt, Dt = Pt), Lt.prototype.next = function(e) {
var t;
!this.isStopped && this._next && (t = this._parentSubscriber, St.useDeprecatedSynchronousErrorHandling && t.syncErrorThrowable ? this.__tryOrSetError(t, this._next, e) && this.unsubscribe() : this.__tryOrUnsub(this._next, e))
}, Lt.prototype.error = function(e) {
if (!this.isStopped) {
var t = this._parentSubscriber,
i = St.useDeprecatedSynchronousErrorHandling;
if (this._error) i && t.syncErrorThrowable ? this.__tryOrSetError(t, this._error, e) : this.__tryOrUnsub(this._error, e), this.unsubscribe();
else if (t.syncErrorThrowable) i ? (t.syncErrorValue = e, t.syncErrorThrown = !0) : bt(e), this.unsubscribe();
else {
if (this.unsubscribe(), i) throw e;
bt(e)
}
}
}, Lt.prototype.complete = function() {
var e, t, i = this;
this.isStopped || (e = this._parentSubscriber, this._complete && (t = function() {
return i._complete.call(i._context)
}, St.useDeprecatedSynchronousErrorHandling && e.syncErrorThrowable ? this.__tryOrSetError(e, t) : this.__tryOrUnsub(t)), this.unsubscribe())
}, Lt.prototype.__tryOrUnsub = function(e, t) {
try {
e.call(this._context, t)
} catch (e) {
if (this.unsubscribe(), St.useDeprecatedSynchronousErrorHandling) throw e;
bt(e)
}
}, Lt.prototype.__tryOrSetError = function(e, t, i) {
if (!St.useDeprecatedSynchronousErrorHandling) throw new Error("bad call");
try {
t.call(this._context, i)
} catch (t) {
return St.useDeprecatedSynchronousErrorHandling ? (e.syncErrorValue = t, e.syncErrorThrown = !0) : bt(t), !0
}
return !1
}, Lt.prototype._unsubscribe = function() {
var e = this._parentSubscriber;
this._context = null, this._parentSubscriber = null, e.unsubscribe()
}, Lt);
function Lt(e, t, i, r) {
var n, s = Dt.call(this) || this;
s._parentSubscriber = e;
e = s;
return yt(t) ? n = t : t && (n = t.next, i = t.error, r = t.complete, t !== Tt && (yt((e = Object.create(t)).unsubscribe) && s.add(e.unsubscribe.bind(e)), e.unsubscribe = s.unsubscribe.bind(s))), s._context = e, s._next = n, s._error = i, s._complete = r, s
}
function _t(e, t, i) {
var r = Mt.call(this) || this;
switch (r.syncErrorValue = null, r.syncErrorThrown = !1, r.syncErrorThrowable = !1, r.isStopped = !1, arguments.length) {
case 0:
r.destination = Tt;
break;
case 1:
if (!e) {
r.destination = Tt;
break
}
if ("object" == typeof e) {
e instanceof _t ? (r.syncErrorThrowable = e.syncErrorThrowable, (r.destination = e).add(r)) : (r.syncErrorThrowable = !0, r.destination = new Rt(r, e));
break
}
default:
r.syncErrorThrowable = !0, r.destination = new Rt(r, e, t, i)
}
return r
}
var Nt = "function" == typeof Symbol && Symbol.observable || "@@observable";
function Ft(e) {
return e
}
function Bt() {
for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
return Ut(e)
}
function Ut(t) {
return 0 === t.length ? Ft : 1 === t.length ? t[0] : function(e) {
return t.reduce(function(e, t) {
return t(e)
}, e)
}
}
var $t = (Vt.prototype.lift = function(e) {
var t = new Vt;
return t.source = this, t.operator = e, t
}, Vt.prototype.subscribe = function(e, t, i) {
var r = this.operator,
i = function(e, t, i) {
if (e) {
if (e instanceof Pt) return e;
if (e[xt]) return e[xt]()
}
return e || t || i ? new Pt(e, t, i) : new Pt(Tt)
}(e, t, i);
if (r ? i.add(r.call(i, this.source)) : i.add(this.source || St.useDeprecatedSynchronousErrorHandling && !i.syncErrorThrowable ? this._subscribe(i) : this._trySubscribe(i)), St.useDeprecatedSynchronousErrorHandling && i.syncErrorThrowable && (i.syncErrorThrowable = !1, i.syncErrorThrown)) throw i.syncErrorValue;
return i
}, Vt.prototype._trySubscribe = function(t) {
try {
return this._subscribe(t)
} catch (e) {
St.useDeprecatedSynchronousErrorHandling && (t.syncErrorThrown = !0, t.syncErrorValue = e),
function(e) {
for (; e;) {
var t = e,
i = t.closed,
r = t.destination,
t = t.isStopped;
if (i || t) return;
e = r && r instanceof Pt ? r : null
}
return 1
}(t) ? t.error(e) : console.warn(e)
}
}, Vt.prototype.forEach = function(r, e) {
var n = this;
return new(e = Kt(e))(function(e, t) {
var i = n.subscribe(function(e) {
try {
r(e)
} catch (e) {
t(e), i && i.unsubscribe()
}
}, t, e)
})
}, Vt.prototype._subscribe = function(e) {
var t = this.source;
return t && t.subscribe(e)
}, Vt.prototype[Nt] = function() {
return this
}, Vt.prototype.pipe = function() {
for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
return 0 === e.length ? this : Ut(e)(this)
}, Vt.prototype.toPromise = function(e) {
var r = this;
return new(e = Kt(e))(function(e, t) {
var i;
r.subscribe(function(e) {
return i = e
}, function(e) {
return t(e)
}, function() {
return e(i)
})
})
}, Vt.create = function(e) {
return new Vt(e)
}, Vt);
function Vt(e) {
this._isScalar = !1, e && (this._subscribe = e)
}
function Kt(e) {
if (!(e = e || (St.Promise || Promise))) throw new Error("no Promise impl found");
return e
}
var qt, Ht, jt, Qt, Wt = (ii.prototype = Object.create(Error.prototype), ii),
Gt = (ut(ti, Qt = At), ti.prototype.unsubscribe = function() {
var e, t;
this.closed || (this.closed = !0, e = (t = this.subject).observers, this.subject = null, !e || 0 === e.length || t.isStopped || t.closed || -1 !== (t = e.indexOf(this.subscriber)) && e.splice(t, 1))
}, ti),
zt = (ut(ei, jt = Pt), ei),
Xt = (ut(Zt, Ht = $t), Zt.prototype[xt] = function() {
return new zt(this)
}, Zt.prototype.lift = function(e) {
var t = new Yt(this, this);
return t.operator = e, t
}, Zt.prototype.next = function(e) {
if (this.closed) throw new Wt;
if (!this.isStopped)
for (var t = this.observers, i = t.length, r = t.slice(), n = 0; n < i; n++) r[n].next(e)
}, Zt.prototype.error = function(e) {
if (this.closed) throw new Wt;
this.hasError = !0, this.thrownError = e, this.isStopped = !0;
for (var t = this.observers, i = t.length, r = t.slice(), n = 0; n < i; n++) r[n].error(e);
this.observers.length = 0
}, Zt.prototype.complete = function() {
if (this.closed) throw new Wt;
this.isStopped = !0;
for (var e = this.observers, t = e.length, i = e.slice(), r = 0; r < t; r++) i[r].complete();
this.observers.length = 0
}, Zt.prototype.unsubscribe = function() {
this.isStopped = !0, this.closed = !0, this.observers = null
}, Zt.prototype._trySubscribe = function(e) {
if (this.closed) throw new Wt;
return Ht.prototype._trySubscribe.call(this, e)
}, Zt.prototype._subscribe = function(e) {
if (this.closed) throw new Wt;
return this.hasError ? (e.error(this.thrownError), At.EMPTY) : this.isStopped ? (e.complete(), At.EMPTY) : (this.observers.push(e), new Gt(this, e))
}, Zt.prototype.asObservable = function() {
var e = new $t;
return e.source = this, e
}, Zt.create = function(e, t) {
return new Yt(e, t)
}, Zt),
Yt = (ut(Jt, qt = Xt), Jt.prototype.next = function(e) {
var t = this.destination;
t && t.next && t.next(e)
}, Jt.prototype.error = function(e) {
var t = this.destination;
t && t.error && this.destination.error(e)
}, Jt.prototype.complete = function() {
var e = this.destination;
e && e.complete && this.destination.complete()
}, Jt.prototype._subscribe = function(e) {
return this.source ? this.source.subscribe(e) : At.EMPTY
}, Jt);
function Jt(e, t) {
var i = qt.call(this) || this;
return i.destination = e, i.source = t, i
}
function Zt() {
var e = Ht.call(this) || this;
return e.observers = [], e.closed = !1, e.isStopped = !1, e.hasError = !1, e.thrownError = null, e
}
function ei(e) {
var t = jt.call(this, e) || this;
return t.destination = e, t
}
function ti(e, t) {
var i = Qt.call(this) || this;
return i.subject = e, i.subscriber = t, i.closed = !1, i
}
function ii() {
return Error.call(this), this.message = "object unsubscribed", this.name = "ObjectUnsubscribedError", this
}
function ri() {
return function(e) {
return e.lift(new pi(e))
}
}
var ni, si, ai, oi, li, di, ui, ci, hi, pi = (Li.prototype.call = function(e, t) {
var i = this.connectable;
i._refCount++;
e = new fi(e, i), t = t.subscribe(e);
return e.closed || (e.connection = i.connect()), t
}, Li),
fi = (ut(Ri, hi = Pt), Ri.prototype._unsubscribe = function() {
var e, t = this.connectable;
t ? (this.connectable = null, (e = t._refCount) <= 0 ? this.connection = null : (t._refCount = e - 1, 1 < e ? this.connection = null : (e = this.connection, t = t._connection, this.connection = null, !t || e && t !== e || t.unsubscribe()))) : this.connection = null
}, Ri),
w = (ut(Pi, ci = $t), Pi.prototype._subscribe = function(e) {
return this.getSubject().subscribe(e)
}, Pi.prototype.getSubject = function() {
var e = this._subject;
return e && !e.isStopped || (this._subject = this.subjectFactory()), this._subject
}, Pi.prototype.connect = function() {
var e = this._connection;
return e || (this._isComplete = !1, (e = this._connection = new At).add(this.source.subscribe(new gi(this.getSubject(), this))), e.closed && (this._connection = null, e = At.EMPTY)), e
}, Pi.prototype.refCount = function() {
return ri()(this)
}, Pi),
mi = {
operator: {
value: null
},
_refCount: {
value: 0,
writable: !0
},
_subject: {
value: null,
writable: !0
},
_connection: {
value: null,
writable: !0
},
_subscribe: {
value: (fl = w.prototype)._subscribe
},
_isComplete: {
value: fl._isComplete,
writable: !0
},
getSubject: {
value: fl.getSubject
},
connect: {
value: fl.connect
},
refCount: {
value: fl.refCount
}
},
gi = (ut(xi, ui = zt), xi.prototype._error = function(e) {
this._unsubscribe(), ui.prototype._error.call(this, e)
}, xi.prototype._complete = function() {
this.connectable._isComplete = !0, this._unsubscribe(), ui.prototype._complete.call(this)
}, xi.prototype._unsubscribe = function() {
var e, t = this.connectable;
t && (this.connectable = null, e = t._connection, t._refCount = 0, t._subject = null, t._connection = null, e && e.unsubscribe())
}, xi),
yi = (ut(Mi, di = Xt), Object.defineProperty(Mi.prototype, "value", {
get: function() {
return this.getValue()
},
enumerable: !0,
configurable: !0
}), Mi.prototype._subscribe = function(e) {
var t = di.prototype._subscribe.call(this, e);
return t && !t.closed && e.next(this._value), t
}, Mi.prototype.getValue = function() {
if (this.hasError) throw this.thrownError;
if (this.closed) throw new Wt;
return this._value
}, Mi.prototype.next = function(e) {
di.prototype.next.call(this, this._value = e)
}, Mi),
A = (ut(Di, li = At), Di.prototype.schedule = function(e, t) {
return this
}, ut(Ci, oi = Di), Ci.prototype.schedule = function(e, t) {
if (void 0 === t && (t = 0), this.closed) return this;
this.state = e;
var i = this.id,
e = this.scheduler;
return null != i && (this.id = this.recycleAsyncId(e, i, t)), this.pending = !0, this.delay = t, this.id = this.id || this.requestAsyncId(e, this.id, t), this
}, Ci.prototype.requestAsyncId = function(e, t, i) {
return void 0 === i && (i = 0), setInterval(e.flush.bind(e, this), i)
}, Ci.prototype.recycleAsyncId = function(e, t, i) {
if (null !== (i = void 0 === i ? 0 : i) && this.delay === i && !1 === this.pending) return t;
clearInterval(t)
}, Ci.prototype.execute = function(e, t) {
if (this.closed) return new Error("executing a cancelled action");
this.pending = !1;
t = this._execute(e, t);
if (t) return t;
!1 === this.pending && null != this.id && (this.id = this.recycleAsyncId(this.scheduler, this.id, null))
}, Ci.prototype._execute = function(e, t) {
var i = !1,
r = void 0;
try {
this.work(e)
} catch (e) {
i = !0, r = !!e && e || new Error(e)
}
if (i) return this.unsubscribe(), r
}, Ci.prototype._unsubscribe = function() {
var e = this.id,
t = this.scheduler,
i = t.actions,
r = i.indexOf(this);
this.work = null, this.state = null, this.pending = !1, this.scheduler = null, -1 !== r && i.splice(r, 1), null != e && (this.id = this.recycleAsyncId(t, e, null)), this.delay = null
}, Ci),
vi = (ut(ki, ai = A), ki.prototype.schedule = function(e, t) {
return 0 < (t = void 0 === t ? 0 : t) ? ai.prototype.schedule.call(this, e, t) : (this.delay = t, this.state = e, this.scheduler.flush(this), this)
}, ki.prototype.execute = function(e, t) {
return 0 < t || this.closed ? ai.prototype.execute.call(this, e, t) : this._execute(e, t)
}, ki.prototype.requestAsyncId = function(e, t, i) {
return null !== (i = void 0 === i ? 0 : i) && 0 < i || null === i && 0 < this.delay ? ai.prototype.requestAsyncId.call(this, e, t, i) : e.flush(this)
}, ki),
Si = (Oi.prototype.schedule = function(e, t, i) {
return void 0 === t && (t = 0), new this.SchedulerAction(this, e).schedule(i, t)
}, Oi.now = function() {
return Date.now()
}, Oi),
bi = (ut(Ai, si = Si), Ai.prototype.schedule = function(e, t, i) {
return void 0 === t && (t = 0), Ai.delegate && Ai.delegate !== this ? Ai.delegate.schedule(e, t, i) : si.prototype.schedule.call(this, e, t, i)
}, Ai.prototype.flush = function(e) {
var t, i = this.actions;
if (this.active) i.push(e);
else {
this.active = !0;
do {
if (t = e.execute(e.state, e.delay)) break
} while (e = i.shift());
if (this.active = !1, t) {
for (; e = i.shift();) e.unsubscribe();
throw t
}
}
}, Ai),
Ti = (ut(wi, ni = bi), new wi(vi)),
Ei = Ti,
Ii = new $t(function(e) {
return e.complete()
});
function wi() {
return null !== ni && ni.apply(this, arguments) || this
}
function Ai(e, t) {
void 0 === t && (t = Si.now);
var i = si.call(this, e, function() {
return Ai.delegate && Ai.delegate !== i ? Ai.delegate.now() : t()
}) || this;
return i.actions = [], i.active = !1, i.scheduled = void 0, i
}
function Oi(e, t) {
void 0 === t && (t = Oi.now), this.SchedulerAction = e, this.now = t
}
function ki(e, t) {
var i = ai.call(this, e, t) || this;
return i.scheduler = e, i.work = t, i
}
function Ci(e, t) {
var i = oi.call(this, e, t) || this;
return i.scheduler = e, i.work = t, i.pending = !1, i
}
function Di(e, t) {
return li.call(this) || this
}
function Mi(e) {
var t = di.call(this) || this;
return t._value = e, t
}
function xi(e, t) {
e = ui.call(this, e) || this;
return e.connectable = t, e
}
function Pi(e, t) {
var i = ci.call(this) || this;
return i.source = e, i.subjectFactory = t, i._refCount = 0, i._isComplete = !1, i
}
function Ri(e, t) {
e = hi.call(this, e) || this;
return e.connectable = t, e
}
function Li(e) {
this.connectable = e
}
function _i(e) {
return e ? (t = e, new $t(function(e) {
return t.schedule(function() {
return e.complete()
})
})) : Ii;
var t
}
function Ni(e) {
return e && "function" == typeof e.schedule
}
var Fi = function(r) {
return function(e) {
for (var t = 0, i = r.length; t < i && !e.closed; t++) e.next(r[t]);
e.complete()
}
};
function Bi(r, n) {
return new $t(function(e) {
var t = new At,
i = 0;
return t.add(n.schedule(function() {
i !== r.length ? (e.next(r[i++]), e.closed || t.add(this.schedule())) : e.complete()
})), t
})
}
function Ui(e, t) {
return t ? Bi(e, t) : new $t(Fi(e))
}
function $i() {
for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
var i = e[e.length - 1];
return Ni(i) ? (e.pop(), Bi(e, i)) : Ui(e)
}
function Vi(t, i) {
return new $t(i ? function(e) {
return i.schedule(Ki, 0, {
error: t,
subscriber: e
})
} : function(e) {
return e.error(t)
})
}
function Ki(e) {
var t = e.error;
e.subscriber.error(t)
}
var qi = (Hi.prototype.observe = function(e) {
switch (this.kind) {
case "N":
return e.next && e.next(this.value);
case "E":
return e.error && e.error(this.error);
case "C":
return e.complete && e.complete()
}
}, Hi.prototype.do = function(e, t, i) {
switch (this.kind) {
case "N":
return e && e(this.value);
case "E":
return t && t(this.error);
case "C":
return i && i()
}
}, Hi.prototype.accept = function(e, t, i) {
return e && "function" == typeof e.next ? this.observe(e) : this.do(e, t, i)
}, Hi.prototype.toObservable = function() {
switch (this.kind) {
case "N":
return $i(this.value);
case "E":
return Vi(this.error);
case "C":
return _i()
}
throw new Error("unexpected notification kind value")
}, Hi.createNext = function(e) {
return void 0 !== e ? new Hi("N", e) : Hi.undefinedValueNotification
}, Hi.createError = function(e) {
return new Hi("E", void 0, e)
}, Hi.createComplete = function() {
return Hi.completeNotification
}, Hi.completeNotification = new Hi("C"), Hi.undefinedValueNotification = new Hi("N", void 0), Hi);
function Hi(e, t, i) {
this.kind = e, this.value = t, this.error = i, this.hasValue = "N" === e
}
function ji(t, i) {
return void 0 === i && (i = 0),
function(e) {
return e.lift(new zi(t, i))
}
}
var Qi, Wi, Gi, zi = (ar.prototype.call = function(e, t) {
return t.subscribe(new Xi(e, this.scheduler, this.delay))
}, ar),
Xi = (ut(sr, Gi = Pt), sr.dispatch = function(e) {
var t = e.notification,
e = e.destination;
t.observe(e), this.unsubscribe()
}, sr.prototype.scheduleMessage = function(e) {
this.destination.add(this.scheduler.schedule(sr.dispatch, this.delay, new Yi(e, this.destination)))
}, sr.prototype._next = function(e) {
this.scheduleMessage(qi.createNext(e))
}, sr.prototype._error = function(e) {
this.scheduleMessage(qi.createError(e)), this.unsubscribe()
}, sr.prototype._complete = function() {
this.scheduleMessage(qi.createComplete()), this.unsubscribe()
}, sr),
Yi = function(e, t) {
this.notification = e, this.destination = t
},
Ji = (ut(nr, Wi = Xt), nr.prototype.nextInfiniteTimeWindow = function(e) {
var t;
this.isStopped || ((t = this._events).push(e), t.length > this._bufferSize && t.shift()), Wi.prototype.next.call(this, e)
}, nr.prototype.nextTimeWindow = function(e) {
this.isStopped || (this._events.push(new Zi(this._getNow(), e)), this._trimBufferThenGetEvents()), Wi.prototype.next.call(this, e)
}, nr.prototype._subscribe = function(e) {
var t, i = this._infiniteTimeWindow,
r = i ? this._events : this._trimBufferThenGetEvents(),
n = this.scheduler,
s = r.length;
if (this.closed) throw new Wt;
if (t = this.isStopped || this.hasError ? At.EMPTY : (this.observers.push(e), new Gt(this, e)), n && e.add(e = new Xi(e, n)), i)
for (var a = 0; a < s && !e.closed; a++) e.next(r[a]);
else
for (a = 0; a < s && !e.closed; a++) e.next(r[a].value);
return this.hasError ? e.error(this.thrownError) : this.isStopped && e.complete(), t
}, nr.prototype._getNow = function() {
return (this.scheduler || Ei).now()
}, nr.prototype._trimBufferThenGetEvents = function() {
for (var e = this._getNow(), t = this._bufferSize, i = this._windowTime, r = this._events, n = r.length, s = 0; s < n && !(e - r[s].time < i);) s++;
return 0 < (s = t < n ? Math.max(s, n - t) : s) && r.splice(0, s), r
}, nr),
Zi = function(e, t) {
this.time = e, this.value = t
},
er = (ut(rr, Qi = Xt), rr.prototype._subscribe = function(e) {
return this.hasError ? (e.error(this.thrownError), At.EMPTY) : this.hasCompleted && this.hasNext ? (e.next(this.value), e.complete(), At.EMPTY) : Qi.prototype._subscribe.call(this, e)
}, rr.prototype.next = function(e) {
this.hasCompleted || (this.value = e, this.hasNext = !0)
}, rr.prototype.error = function(e) {
this.hasCompleted || Qi.prototype.error.call(this, e)
}, rr.prototype.complete = function() {
this.hasCompleted = !0, this.hasNext && Qi.prototype.next.call(this, this.value), Qi.prototype.complete.call(this)
}, rr),
tr = new bi(A),
ir = tr;
function rr() {
var e = null !== Qi && Qi.apply(this, arguments) || this;
return e.value = null, e.hasNext = !1, e.hasCompleted = !1, e
}
function nr(e, t, i) {
void 0 === e && (e = Number.POSITIVE_INFINITY), void 0 === t && (t = Number.POSITIVE_INFINITY);
var r = Wi.call(this) || this;
return r.scheduler = i, r._events = [], r._infiniteTimeWindow = !1, r._bufferSize = e < 1 ? 1 : e, r._windowTime = t < 1 ? 1 : t, t === Number.POSITIVE_INFINITY ? (r._infiniteTimeWindow = !0, r.next = r.nextInfiniteTimeWindow) : r.next = r.nextTimeWindow, r
}
function sr(e, t, i) {
void 0 === i && (i = 0);
e = Gi.call(this, e) || this;
return e.scheduler = t, e.delay = i, e
}
function ar(e, t) {
void 0 === t && (t = 0), this.scheduler = e, this.delay = t
}
function or() {}
var lr = (cr.prototype = Object.create(Error.prototype), cr),
dr = (ur.prototype = Object.create(Error.prototype), ur);
function ur() {
return Error.call(this), this.message = "Timeout has occurred", this.name = "TimeoutError", this
}
function cr() {
return Error.call(this), this.message = "argument out of range", this.name = "ArgumentOutOfRangeError", this
}
function hr(t, i) {
return function(e) {
if ("function" != typeof t) throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");
return e.lift(new gr(t, i))
}
}
var pr, fr, mr, gr = (Ir.prototype.call = function(e, t) {
return t.subscribe(new yr(e, this.project, this.thisArg))
}, Ir),
yr = (ut(Er, mr = Pt), Er.prototype._next = function(e) {
var t;
try {
t = this.project.call(this.thisArg, e, this.count++)
} catch (e) {
return void this.destination.error(e)
}
this.destination.next(t)
}, Er),
vr = (ut(Tr, fr = Pt), Tr.prototype.notifyNext = function(e, t, i, r, n) {
this.destination.next(t)
}, Tr.prototype.notifyError = function(e, t) {
this.destination.error(e)
}, Tr.prototype.notifyComplete = function(e) {
this.destination.complete()
}, Tr),
Sr = (ut(br, pr = Pt), br.prototype._next = function(e) {
this.parent.notifyNext(this.outerValue, e, this.outerIndex, this.index++, this)
}, br.prototype._error = function(e) {
this.parent.notifyError(e, this), this.unsubscribe()
}, br.prototype._complete = function() {
this.parent.notifyComplete(this), this.unsubscribe()
}, br);
function br(e, t, i) {
var r = pr.call(this) || this;
return r.parent = e, r.outerValue = t, r.outerIndex = i, r.index = 0, r
}
function Tr() {
return null !== fr && fr.apply(this, arguments) || this
}
function Er(e, t, i) {
e = mr.call(this, e) || this;
return e.project = t, e.count = 0, e.thisArg = i || e, e
}
function Ir(e, t) {
this.project = e, this.thisArg = t
}
var wr = "function" == typeof Symbol && Symbol.iterator ? Symbol.iterator : "@@iterator",
Ar = function(e) {
return e && "number" == typeof e.length && "function" != typeof e
};
function Or(e) {
return e && "function" != typeof e.subscribe && "function" == typeof e.then
}
var kr = function(e) {
if (e && "function" == typeof e[Nt]) return n = e,
function(e) {
var t = n[Nt]();
if ("function" != typeof t.subscribe) throw new TypeError("Provided object does not correctly implement Symbol.observable");
return t.subscribe(e)
};
if (Ar(e)) return Fi(e);
if (Or(e)) return i = e,
function(t) {
return i.then(function(e) {
t.closed || (t.next(e), t.complete())
}, function(e) {
return t.error(e)
}).then(null, bt), t
};
if (e && "function" == typeof e[wr]) return r = e,
function(t) {
for (var e = r[wr]();;) {
var i = void 0;
try {
i = e.next()
} catch (e) {
return t.error(e), t
}
if (i.done) {
t.complete();
break
}
if (t.next(i.value), t.closed) break
}
return "function" == typeof e.return && t.add(function() {
e.return && e.return()
}), t
};
var r, i, n, e = It(e) ? "an invalid object" : "'" + e + "'";
throw new TypeError("You provided " + e + " where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.")
};
function Cr(e, t, i, r, n) {
if (!(n = void 0 === n ? new Sr(e, i, r) : n).closed) return t instanceof $t ? t.subscribe(n) : kr(t)(n)
}
var Dr = {};
function Mr() {
for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
var i = void 0,
r = void 0;
return Ni(e[e.length - 1]) && (r = e.pop()), "function" == typeof e[e.length - 1] && (i = e.pop()), Ui(e = 1 === e.length && Et(e[0]) ? e[0] : e, r).lift(new Pr(i))
}
var xr, Pr = (_r.prototype.call = function(e, t) {
return t.subscribe(new Rr(e, this.resultSelector))
}, _r),
Rr = (ut(Lr, xr = vr), Lr.prototype._next = function(e) {
this.values.push(Dr), this.observables.push(e)
}, Lr.prototype._complete = function() {
var e = this.observables,
t = e.length;
if (0 === t) this.destination.complete();
else {
this.active = t, this.toRespond = t;
for (var i = 0; i < t; i++) {
var r = e[i];
this.add(Cr(this, r, void 0, i))
}
}
}, Lr.prototype.notifyComplete = function(e) {
0 == --this.active && this.destination.complete()
}, Lr.prototype.notifyNext = function(e, t, i) {
var r = this.values,
n = r[i],
n = this.toRespond ? n === Dr ? --this.toRespond : this.toRespond : 0;
r[i] = t, 0 === n && (this.resultSelector ? this._tryResultSelector(r) : this.destination.next(r.slice()))
}, Lr.prototype._tryResultSelector = function(e) {
var t;
try {
t = this.resultSelector.apply(this, e)
} catch (e) {
return void this.destination.error(e)
}
this.destination.next(t)
}, Lr);
function Lr(e, t) {
e = xr.call(this, e) || this;
return e.resultSelector = t, e.active = 0, e.values = [], e.observables = [], e
}
function _r(e) {
this.resultSelector = e
}
function Nr(e, t) {
if (null != e) {
if (e && "function" == typeof e[Nt]) return s = e, a = t, new $t(function(t) {
var i = new At;
return i.add(a.schedule(function() {
var e = s[Nt]();
i.add(e.subscribe({
next: function(e) {
i.add(a.schedule(function() {
return t.next(e)
}))
},
error: function(e) {
i.add(a.schedule(function() {
return t.error(e)
}))
},
complete: function() {
i.add(a.schedule(function() {
return t.complete()
}))
}
}))
})), i
});
if (Or(e)) return r = e, n = t, new $t(function(t) {
var i = new At;
return i.add(n.schedule(function() {
return r.then(function(e) {
i.add(n.schedule(function() {
t.next(e), i.add(n.schedule(function() {
return t.complete()
}))
}))
}, function(e) {
i.add(n.schedule(function() {
return t.error(e)
}))
})
})), i
});
if (Ar(e)) return Bi(e, t);
if (e && "function" == typeof e[wr] || "string" == typeof e) return function(t, i) {
if (!t) throw new Error("Iterable cannot be null");
return new $t(function(r) {
var n, e = new At;
return e.add(function() {
n && "function" == typeof n.return && n.return()
}), e.add(i.schedule(function() {
n = t[wr](), e.add(i.schedule(function() {
if (!r.closed) {
try {
var e = n.next(),
t = e.value,
i = e.done
} catch (t) {
return void r.error(t)
}
i ? r.complete() : (r.next(t), this.schedule())
}
}))
})), e
})
}(e, t)
}
var r, n, s, a;
throw new TypeError((null !== e && typeof e || e) + " is not observable")
}
function Fr(e, t) {
return t ? Nr(e, t) : e instanceof $t ? e : new $t(kr(e))
}
var Br, Ur, $r = (ut(qr, Ur = Pt), qr.prototype._next = function(e) {
this.parent.notifyNext(e)
}, qr.prototype._error = function(e) {
this.parent.notifyError(e), this.unsubscribe()
}, qr.prototype._complete = function() {
this.parent.notifyComplete(), this.unsubscribe()
}, qr),
Vr = (ut(Kr, Br = Pt), Kr.prototype.notifyNext = function(e) {
this.destination.next(e)
}, Kr.prototype.notifyError = function(e) {
this.destination.error(e)
}, Kr.prototype.notifyComplete = function() {
this.destination.complete()
}, Kr);
function Kr() {
return null !== Br && Br.apply(this, arguments) || this
}
function qr(e) {
var t = Ur.call(this) || this;
return t.parent = e, t
}
function Hr(e, t) {
if (!t.closed) return e instanceof $t ? e.subscribe(t) : kr(e)(t)
}
function jr(t, n, i) {
return void 0 === i && (i = Number.POSITIVE_INFINITY), "function" == typeof n ? function(e) {
return e.pipe(jr(function(i, r) {
return Fr(t(i, r)).pipe(hr(function(e, t) {
return n(i, e, r, t)
}))
}, i))
} : ("number" == typeof n && (i = n), function(e) {
return e.lift(new Wr(t, i))
})
}
var Qr, Wr = (Xr.prototype.call = function(e, t) {
return t.subscribe(new Gr(e, this.project, this.concurrent))
}, Xr),
Gr = (ut(zr, Qr = Vr), zr.prototype._next = function(e) {
this.active < this.concurrent ? this._tryNext(e) : this.buffer.push(e)
}, zr.prototype._tryNext = function(e) {
var t, i = this.index++;
try {
t = this.project(e, i)
} catch (e) {
return void this.destination.error(e)
}
this.active++, this._innerSub(t)
}, zr.prototype._innerSub = function(e) {
var t = new $r(this),
i = this.destination;
i.add(t);
e = Hr(e, t);
e !== t && i.add(e)
}, zr.prototype._complete = function() {
this.hasCompleted = !0, 0 === this.active && 0 === this.buffer.length && this.destination.complete(), this.unsubscribe()
}, zr.prototype.notifyNext = function(e) {
this.destination.next(e)
}, zr.prototype.notifyComplete = function() {
var e = this.buffer;
this.active--, 0 < e.length ? this._next(e.shift()) : 0 === this.active && this.hasCompleted && this.destination.complete()
}, zr);
function zr(e, t, i) {
void 0 === i && (i = Number.POSITIVE_INFINITY);
e = Qr.call(this, e) || this;
return e.project = t, e.concurrent = i, e.hasCompleted = !1, e.buffer = [], e.active = 0, e.index = 0, e
}
function Xr(e, t) {
void 0 === t && (t = Number.POSITIVE_INFINITY), this.project = e, this.concurrent = t
}
function Yr(e) {
return jr(Ft, e = void 0 === e ? Number.POSITIVE_INFINITY : e)
}
function Jr() {
for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
return Yr(1)($i.apply(void 0, e))
}
function Zr(i) {
return new $t(function(t) {
var e;
try {
e = i()
} catch (e) {
return void t.error(e)
}
return (e ? Fr(e) : _i()).subscribe(t)
})
}
function en() {
for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
if (1 === e.length) {
var i = e[0];
if (Et(i)) return tn(i, null);
if (It(i) && Object.getPrototypeOf(i) === Object.prototype) {
var r = Object.keys(i);
return tn(r.map(function(e) {
return i[e]
}), r)
}
}
if ("function" != typeof e[e.length - 1]) return tn(e, null);
var n = e.pop();
return tn(e = 1 === e.length && Et(e[0]) ? e[0] : e, null).pipe(hr(function(e) {
return n.apply(void 0, e)
}))
}
function tn(l, d) {
return new $t(function(r) {
var n = l.length;
if (0 !== n)
for (var s = new Array(n), a = 0, o = 0, e = 0; e < n; e++) ! function(t) {
var e = Fr(l[t]),
i = !1;
r.add(e.subscribe({
next: function(e) {
i || (i = !0, o++), s[t] = e
},
error: function(e) {
return r.error(e)
},
complete: function() {
++a !== n && i || (o === n && r.next(d ? d.reduce(function(e, t, i) {
return e[t] = s[i], e
}, {}) : s), r.complete())
}
}))
}(e);
else r.complete()
})
}
function rn(e, i, r, t) {
return yt(r) && (t = r, r = void 0), t ? rn(e, i, r).pipe(hr(function(e) {
return Et(e) ? t.apply(void 0, e) : t(e)
})) : new $t(function(t) {
! function e(t, i, r, n, s) {
var a;
if (function(e) {
return e && "function" == typeof e.addEventListener && "function" == typeof e.removeEventListener
}(t)) {
var o = t;
t.addEventListener(i, r, s), a = function() {
return o.removeEventListener(i, r, s)
}
} else if (function(e) {
return e && "function" == typeof e.on && "function" == typeof e.off
}(t)) {
var l = t;
t.on(i, r), a = function() {
return l.off(i, r)
}
} else if (function(e) {
return e && "function" == typeof e.addListener && "function" == typeof e.removeListener
}(t)) {
var d = t;
t.addListener(i, r), a = function() {
return d.removeListener(i, r)
}
} else {
if (!t || !t.length) throw new TypeError("Invalid event target");
for (var u = 0, c = t.length; u < c; u++) e(t[u], i, r, n, s)
}
n.add(a)
}(e, i, function(e) {
1 < arguments.length ? t.next(Array.prototype.slice.call(arguments)) : t.next(e)
}, t, r)
})
}
function nn(e, t, i) {
return void 0 === t && (t = Ii), void 0 === i && (i = Ii), Zr(function() {
return e() ? t : i
})
}
function sn(e) {
return !Et(e) && 0 <= e - parseFloat(e) + 1
}
function an() {
for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
var i = Number.POSITIVE_INFINITY,
r = null,
n = e[e.length - 1];
return Ni(n) ? (r = e.pop(), 1 < e.length && "number" == typeof e[e.length - 1] && (i = e.pop())) : "number" == typeof n && (i = e.pop()), null === r && 1 === e.length && e[0] instanceof $t ? e[0] : Yr(i)(Ui(e, r))
}
var on = new $t(or);
function ln(t, i) {
return function(e) {
return e.lift(new un(t, i))
}
}
var dn, un = (pn.prototype.call = function(e, t) {
return t.subscribe(new cn(e, this.predicate, this.thisArg))
}, pn),
cn = (ut(hn, dn = Pt), hn.prototype._next = function(e) {
var t;
try {
t = this.predicate.call(this.thisArg, e, this.count++)
} catch (e) {
return void this.destination.error(e)
}
t && this.destination.next(e)
}, hn);
function hn(e, t, i) {
e = dn.call(this, e) || this;
return e.predicate = t, e.thisArg = i, e.count = 0, e
}
function pn(e, t) {
this.predicate = e, this.thisArg = t
}
function fn() {
for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
if (1 === e.length) {
if (!Et(e[0])) return e[0];
e = e[0]
}
return Ui(e, void 0).lift(new gn)
}
var mn, gn = (Sn.prototype.call = function(e, t) {
return t.subscribe(new yn(e))
}, Sn),
yn = (ut(vn, mn = vr), vn.prototype._next = function(e) {
this.observables.push(e)
}, vn.prototype._complete = function() {
var e = this.observables,
t = e.length;
if (0 === t) this.destination.complete();
else {
for (var i = 0; i < t && !this.hasFirst; i++) {
var r = Cr(this, e[i], void 0, i);
this.subscriptions && this.subscriptions.push(r), this.add(r)
}
this.observables = null
}
}, vn.prototype.notifyNext = function(e, t, i) {
if (!this.hasFirst) {
this.hasFirst = !0;
for (var r, n = 0; n < this.subscriptions.length; n++) n !== i && ((r = this.subscriptions[n]).unsubscribe(), this.remove(r));
this.subscriptions = null
}
this.destination.next(t)
}, vn);
function vn(e) {
e = mn.call(this, e) || this;
return e.hasFirst = !1, e.observables = [], e.subscriptions = [], e
}
function Sn() {}
function bn(i, e, r) {
void 0 === i && (i = 0);
var n = -1;
return sn(e) ? n = Number(e) < 1 ? 1 : Number(e) : Ni(e) && (r = e), Ni(r) || (r = ir), new $t(function(e) {
var t = sn(i) ? i : +i - r.now();
return r.schedule(Tn, t, {
index: 0,
period: n,
subscriber: e
})
})
}
function Tn(e) {
var t = e.index,
i = e.period,
r = e.subscriber;
if (r.next(t), !r.closed) {
if (-1 === i) return r.complete();
e.index = t + 1, this.schedule(e, i)
}
}
function En() {
for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
var i = e[e.length - 1];
return "function" == typeof i && e.pop(), Ui(e, void 0).lift(new An(i))
}
var In, wn, An = (Ln.prototype.call = function(e, t) {
return t.subscribe(new On(e, this.resultSelector))
}, Ln),
On = (ut(Rn, wn = Pt), Rn.prototype._next = function(e) {
var t = this.iterators;
Et(e) ? t.push(new Cn(e)) : "function" == typeof e[wr] ? t.push(new kn(e[wr]())) : t.push(new Dn(this.destination, this, e))
}, Rn.prototype._complete = function() {
var e = this.iterators,
t = e.length;
if (this.unsubscribe(), 0 !== t) {
this.active = t;
for (var i = 0; i < t; i++) {
var r = e[i];
r.stillUnsubscribed ? this.destination.add(r.subscribe()) : this.active--
}
} else this.destination.complete()
}, Rn.prototype.notifyInactive = function() {
this.active--, 0 === this.active && this.destination.complete()
}, Rn.prototype.checkIterators = function() {
for (var e = this.iterators, t = e.length, i = this.destination, r = 0; r < t; r++)
if ("function" == typeof(a = e[r]).hasValue && !a.hasValue()) return;
for (var n = !1, s = [], r = 0; r < t; r++) {
var a, o = (a = e[r]).next();
if (a.hasCompleted() && (n = !0), o.done) return void i.complete();
s.push(o.value)
}
this.resultSelector ? this._tryresultSelector(s) : i.next(s), n && i.complete()
}, Rn.prototype._tryresultSelector = function(e) {
var t;
try {
t = this.resultSelector.apply(this, e)
} catch (e) {
return void this.destination.error(e)
}
this.destination.next(t)
}, Rn),
kn = (Pn.prototype.hasValue = function() {
return !0
}, Pn.prototype.next = function() {
var e = this.nextResult;
return this.nextResult = this.iterator.next(), e
}, Pn.prototype.hasCompleted = function() {
var e = this.nextResult;
return Boolean(e && e.done)
}, Pn),
Cn = (xn.prototype[wr] = function() {
return this
}, xn.prototype.next = function(e) {
var t = this.index++,
i = this.array;
return t < this.length ? {
value: i[t],
done: !1
} : {
value: null,
done: !0
}
}, xn.prototype.hasValue = function() {
return this.array.length > this.index
}, xn.prototype.hasCompleted = function() {
return this.array.length === this.index
}, xn),
Dn = (ut(Mn, In = Vr), Mn.prototype[wr] = function() {
return this
}, Mn.prototype.next = function() {
var e = this.buffer;
return 0 === e.length && this.isComplete ? {
value: null,
done: !0
} : {
value: e.shift(),
done: !1
}
}, Mn.prototype.hasValue = function() {
return 0 < this.buffer.length
}, Mn.prototype.hasCompleted = function() {
return 0 === this.buffer.length && this.isComplete
}, Mn.prototype.notifyComplete = function() {
0 < this.buffer.length ? (this.isComplete = !0, this.parent.notifyInactive()) : this.destination.complete()
}, Mn.prototype.notifyNext = function(e) {
this.buffer.push(e), this.parent.checkIterators()
}, Mn.prototype.subscribe = function() {
return Hr(this.observable, new $r(this))
}, Mn);
function Mn(e, t, i) {
e = In.call(this, e) || this;
return e.parent = t, e.observable = i, e.stillUnsubscribed = !0, e.buffer = [], e.isComplete = !1, e
}
function xn(e) {
this.array = e, this.index = 0, this.length = 0, this.length = e.length
}
function Pn(e) {
this.iterator = e, this.nextResult = e.next()
}
function Rn(e, t, i) {
e = wn.call(this, e) || this;
return e.resultSelector = t, e.iterators = [], e.active = 0, e.resultSelector = "function" == typeof t ? t : void 0, e
}
function Ln(e) {
this.resultSelector = e
}
var _n, Nn = (Un.prototype.call = function(e, t) {
return t.subscribe(new Fn(e, this.durationSelector))
}, Un),
Fn = (ut(Bn, _n = Vr), Bn.prototype._next = function(e) {
if (this.value = e, this.hasValue = !0, !this.throttled) {
var t = void 0;
try {
t = (0, this.durationSelector)(e)
} catch (e) {
return this.destination.error(e)
}
t = Hr(t, new $r(this));
!t || t.closed ? this.clearThrottle() : this.add(this.throttled = t)
}
}, Bn.prototype.clearThrottle = function() {
var e = this.value,
t = this.hasValue,
i = this.throttled;
i && (this.remove(i), this.throttled = void 0, i.unsubscribe()), t && (this.value = void 0, this.hasValue = !1, this.destination.next(e))
}, Bn.prototype.notifyNext = function() {
this.clearThrottle()
}, Bn.prototype.notifyComplete = function() {
this.clearThrottle()
}, Bn);
function Bn(e, t) {
e = _n.call(this, e) || this;
return e.durationSelector = t, e.hasValue = !1, e
}
function Un(e) {
this.durationSelector = e
}
function $n(e, t) {
return void 0 === t && (t = ir), i = function() {
return bn(e, t)
},
function(e) {
return e.lift(new Nn(i))
};
var i
}
function Vn(i) {
return function(e) {
var t = new qn(i),
e = e.lift(t);
return t.caught = e
}
}
var Kn, qn = (Qn.prototype.call = function(e, t) {
return t.subscribe(new Hn(e, this.selector, this.caught))
}, Qn),
Hn = (ut(jn, Kn = Vr), jn.prototype.error = function(e) {
if (!this.isStopped) {
var t = void 0;
try {
t = this.selector(e, this.caught)
} catch (e) {
return void Kn.prototype.error.call(this, e)
}
this._unsubscribeAndRecycle();
var i = new $r(this);
this.add(i);
t = Hr(t, i);
t !== i && this.add(t)
}
}, jn);
function jn(e, t, i) {
e = Kn.call(this, e) || this;
return e.selector = t, e.caught = i, e
}
function Qn(e) {
this.selector = e
}
function Wn(e, t) {
return jr(e, t, 1)
}
function Gn(t, i) {
return void 0 === i && (i = ir),
function(e) {
return e.lift(new Xn(t, i))
}
}
var zn, Xn = (Zn.prototype.call = function(e, t) {
return t.subscribe(new Yn(e, this.dueTime, this.scheduler))
}, Zn),
Yn = (ut(Jn, zn = Pt), Jn.prototype._next = function(e) {
this.clearDebounce(), this.lastValue = e, this.hasValue = !0, this.add(this.debouncedSubscription = this.scheduler.schedule(es, this.dueTime, this))
}, Jn.prototype._complete = function() {
this.debouncedNext(), this.destination.complete()
}, Jn.prototype.debouncedNext = function() {
var e;
this.clearDebounce(), this.hasValue && (e = this.lastValue, this.lastValue = null, this.hasValue = !1, this.destination.next(e))
}, Jn.prototype.clearDebounce = function() {
var e = this.debouncedSubscription;
null !== e && (this.remove(e), e.unsubscribe(), this.debouncedSubscription = null)
}, Jn);
function Jn(e, t, i) {
e = zn.call(this, e) || this;
return e.dueTime = t, e.scheduler = i, e.debouncedSubscription = null, e.lastValue = null, e.hasValue = !1, e
}
function Zn(e, t) {
this.dueTime = e, this.scheduler = t
}
function es(e) {
e.debouncedNext()
}
var ts, is = (ss.prototype.call = function(e, t) {
return t.subscribe(new rs(e, this.defaultValue))
}, ss),
rs = (ut(ns, ts = Pt), ns.prototype._next = function(e) {
this.isEmpty = !1, this.destination.next(e)
}, ns.prototype._complete = function() {
this.isEmpty && this.destination.next(this.defaultValue), this.destination.complete()
}, ns);
function ns(e, t) {
e = ts.call(this, e) || this;
return e.defaultValue = t, e.isEmpty = !0, e
}
function ss(e) {
this.defaultValue = e
}
function as(e) {
return e instanceof Date && !isNaN(+e)
}
var os, ls = (hs.prototype.call = function(e, t) {
return t.subscribe(new ds(e, this.delay, this.scheduler))
}, hs),
ds = (ut(cs, os = Pt), cs.dispatch = function(e) {
for (var t, i = e.source, r = i.queue, n = e.scheduler, s = e.destination; 0 < r.length && r[0].time - n.now() <= 0;) r.shift().notification.observe(s);
0 < r.length ? (t = Math.max(0, r[0].time - n.now()), this.schedule(e, t)) : (this.unsubscribe(), i.active = !1)
}, cs.prototype._schedule = function(e) {
this.active = !0, this.destination.add(e.schedule(cs.dispatch, this.delay, {
source: this,
destination: this.destination,
scheduler: e
}))
}, cs.prototype.scheduleNotification = function(e) {
var t;
!0 !== this.errored && (t = this.scheduler, e = new us(t.now() + this.delay, e), this.queue.push(e), !1 === this.active && this._schedule(t))
}, cs.prototype._next = function(e) {
this.scheduleNotification(qi.createNext(e))
}, cs.prototype._error = function(e) {
this.errored = !0, this.queue = [], this.destination.error(e), this.unsubscribe()
}, cs.prototype._complete = function() {
this.scheduleNotification(qi.createComplete()), this.unsubscribe()
}, cs),
us = function(e, t) {
this.time = e, this.notification = t
};
function cs(e, t, i) {
e = os.call(this, e) || this;
return e.delay = t, e.scheduler = i, e.queue = [], e.active = !1, e.errored = !1, e
}
function hs(e, t) {
this.delay = e, this.scheduler = t
}
var ps, fs, ms, gs = (Es.prototype.call = function(e, t) {
return t.subscribe(new ys(e, this.delayDurationSelector))
}, Es),
ys = (ut(Ts, ms = vr), Ts.prototype.notifyNext = function(e, t, i, r, n) {
this.destination.next(e), this.removeSubscription(n), this.tryComplete()
}, Ts.prototype.notifyError = function(e, t) {
this._error(e)
}, Ts.prototype.notifyComplete = function(e) {
e = this.removeSubscription(e);
e && this.destination.next(e), this.tryComplete()
}, Ts.prototype._next = function(e) {
var t = this.index++;
try {
var i = this.delayDurationSelector(e, t);
i && this.tryDelay(i, e)
} catch (e) {
this.destination.error(e)
}
}, Ts.prototype._complete = function() {
this.completed = !0, this.tryComplete(), this.unsubscribe()
}, Ts.prototype.removeSubscription = function(e) {
e.unsubscribe();
var t = this.delayNotifierSubscriptions.indexOf(e);
return -1 !== t && this.delayNotifierSubscriptions.splice(t, 1), e.outerValue
}, Ts.prototype.tryDelay = function(e, t) {
t = Cr(this, e, t);
t && !t.closed && (this.destination.add(t), this.delayNotifierSubscriptions.push(t))
}, Ts.prototype.tryComplete = function() {
this.completed && 0 === this.delayNotifierSubscriptions.length && this.destination.complete()
}, Ts),
vs = (ut(bs, fs = $t), bs.prototype._subscribe = function(e) {
this.subscriptionDelay.subscribe(new vs(e, this.source))
}, ut(Ss, ps = Pt), Ss.prototype._next = function(e) {
this.subscribeToSource()
}, Ss.prototype._error = function(e) {
this.unsubscribe(), this.parent.error(e)
}, Ss.prototype._complete = function() {
this.unsubscribe(), this.subscribeToSource()
}, Ss.prototype.subscribeToSource = function() {
this.sourceSubscribed || (this.sourceSubscribed = !0, this.unsubscribe(), this.source.subscribe(this.parent))
}, Ss);
function Ss(e, t) {
var i = ps.call(this) || this;
return i.parent = e, i.source = t, i.sourceSubscribed = !1, i
}
function bs(e, t) {
var i = fs.call(this) || this;
return i.source = e, i.subscriptionDelay = t, i
}
function Ts(e, t) {
e = ms.call(this, e) || this;
return e.delayDurationSelector = t, e.completed = !1, e.delayNotifierSubscriptions = [], e.index = 0, e
}
function Es(e) {
this.delayDurationSelector = e
}
function Is(t, i) {
return function(e) {
return e.lift(new As(t, i))
}
}
var ws, As = (Cs.prototype.call = function(e, t) {
return t.subscribe(new Os(e, this.compare, this.keySelector))
}, Cs),
Os = (ut(ks, ws = Pt), ks.prototype.compare = function(e, t) {
return e === t
}, ks.prototype._next = function(e) {
try {
var t = this.keySelector,
i = t ? t(e) : e
} catch (e) {
return this.destination.error(e)
}
t = !1;
if (this.hasKey) try {
t = (0, this.compare)(this.key, i)
} catch (e) {
return this.destination.error(e)
} else this.hasKey = !0;
t || (this.key = i, this.destination.next(e))
}, ks);
function ks(e, t, i) {
e = ws.call(this, e) || this;
return e.keySelector = i, e.hasKey = !1, "function" == typeof t && (e.compare = t), e
}
function Cs(e, t) {
this.compare = e, this.keySelector = t
}
function Ds(t) {
return function(e) {
return 0 === t ? _i() : e.lift(new xs(t))
}
}
var Ms, xs = (Ls.prototype.call = function(e, t) {
return t.subscribe(new Ps(e, this.total))
}, Ls),
Ps = (ut(Rs, Ms = Pt), Rs.prototype._next = function(e) {
var t = this.total,
i = ++this.count;
i <= t && (this.destination.next(e), i === t && (this.destination.complete(), this.unsubscribe()))
}, Rs);
function Rs(e, t) {
e = Ms.call(this, e) || this;
return e.total = t, e.count = 0, e
}
function Ls(e) {
if (this.total = e, this.total < 0) throw new lr
}
function _s(t, n) {
return n ? function(e) {
return e.pipe(_s(function(i, r) {
return Fr(t(i, r)).pipe(hr(function(e, t) {
return n(i, e, r, t)
}))
}))
} : function(e) {
return e.lift(new Fs(t))
}
}
var Ns, Fs = ($s.prototype.call = function(e, t) {
return t.subscribe(new Bs(e, this.project))
}, $s),
Bs = (ut(Us, Ns = Vr), Us.prototype._next = function(e) {
this.hasSubscription || this.tryNext(e)
}, Us.prototype.tryNext = function(e) {
var t, i = this.index++;
try {
t = this.project(e, i)
} catch (e) {
return void this.destination.error(e)
}
this.hasSubscription = !0, this._innerSub(t)
}, Us.prototype._innerSub = function(e) {
var t = new $r(this),
i = this.destination;
i.add(t);
e = Hr(e, t);
e !== t && i.add(e)
}, Us.prototype._complete = function() {
this.hasCompleted = !0, this.hasSubscription || this.destination.complete(), this.unsubscribe()
}, Us.prototype.notifyNext = function(e) {
this.destination.next(e)
}, Us.prototype.notifyError = function(e) {
this.destination.error(e)
}, Us.prototype.notifyComplete = function() {
this.hasSubscription = !1, this.hasCompleted && this.destination.complete()
}, Us);
function Us(e, t) {
e = Ns.call(this, e) || this;
return e.project = t, e.hasSubscription = !1, e.hasCompleted = !1, e.index = 0, e
}
function $s(e) {
this.project = e
}
function Vs(t) {
return function(e) {
return e.lift(new qs(t))
}
}
var Ks, qs = (Qs.prototype.call = function(e, t) {
return t.subscribe(new Hs(e, this.callback))
}, Qs),
Hs = (ut(js, Ks = Pt), js);
function js(e, t) {
e = Ks.call(this, e) || this;
return e.add(new At(t)), e
}
function Qs(e) {
this.callback = e
}
function Ws(t) {
return function(e) {
return 0 === t ? _i() : e.lift(new zs(t))
}
}
var Gs, zs = (Js.prototype.call = function(e, t) {
return t.subscribe(new Xs(e, this.total))
}, Js),
Xs = (ut(Ys, Gs = Pt), Ys.prototype._next = function(e) {
var t = this.ring,
i = this.total,
r = this.count++;
t.length < i ? t.push(e) : t[r % i] = e
}, Ys.prototype._complete = function() {
var e = this.destination,
t = this.count;
if (0 < t)
for (var i = this.count >= this.total ? this.total : this.count, r = this.ring, n = 0; n < i; n++) {
var s = t++ % i;
e.next(r[s])
}
e.complete()
}, Ys);
function Ys(e, t) {
e = Gs.call(this, e) || this;
return e.total = t, e.ring = new Array, e.count = 0, e
}
function Js(e) {
if (this.total = e, this.total < 0) throw new lr
}
function Zs(t) {
return function(e) {
return e.lift(new ta(t))
}
}
var ea, ta = (na.prototype.call = function(e, t) {
return t.subscribe(new ia(e, this.value))
}, na),
ia = (ut(ra, ea = Pt), ra.prototype._next = function(e) {
this.destination.next(this.value)
}, ra);
function ra(e, t) {
e = ea.call(this, e) || this;
return e.value = t, e
}
function na(e) {
this.value = e
}
function sa(t, i) {
var r = 2 <= arguments.length ? !0 : !1;
return function(e) {
return e.lift(new oa(t, i, r))
}
}
var aa, oa = (ua.prototype.call = function(e, t) {
return t.subscribe(new la(e, this.accumulator, this.seed, this.hasSeed))
}, ua),
la = (ut(da, aa = Pt), Object.defineProperty(da.prototype, "seed", {
get: function() {
return this._seed
},
set: function(e) {
this.hasSeed = !0, this._seed = e
},
enumerable: !0,
configurable: !0
}), da.prototype._next = function(e) {
if (this.hasSeed) return this._tryNext(e);
this.seed = e, this.destination.next(e)
}, da.prototype._tryNext = function(e) {
var t, i = this.index++;
try {
t = this.accumulator(this.seed, e, i)
} catch (e) {
this.destination.error(e)
}
this.seed = t, this.destination.next(t)
}, da);
function da(e, t, i, r) {
e = aa.call(this, e) || this;
return e.accumulator = t, e._seed = i, e.hasSeed = r, e.index = 0, e
}
function ua(e, t, i) {
void 0 === i && (i = !1), this.accumulator = e, this.seed = t, this.hasSeed = i
}
ca.prototype.call = function(e, t) {
var i = this.selector,
r = this.subjectFactory(),
e = i(r).subscribe(e);
return e.add(t.subscribe(r)), e
};
function ca(e, t) {
this.subjectFactory = e, this.selector = t
}
function ha() {
return function(e) {
return e.lift(new fa)
}
}
var pa, fa = (ya.prototype.call = function(e, t) {
return t.subscribe(new ma(e))
}, ya),
ma = (ut(ga, pa = Pt), ga.prototype._next = function(e) {
var t;
this.hasPrev ? t = [this.prev, e] : this.hasPrev = !0, this.prev = e, t && this.destination.next(t)
}, ga);
function ga(e) {
e = pa.call(this, e) || this;
return e.hasPrev = !1, e
}
function ya() {}
function va(t) {
return function(e) {
return e.lift(new ba(t, e))
}
}
var Sa, ba = (Ia.prototype.call = function(e, t) {
return t.subscribe(new Ta(e, this.notifier, this.source))
}, Ia),
Ta = (ut(Ea, Sa = Vr), Ea.prototype.error = function(e) {
if (!this.isStopped) {
var t = this.errors,
i = this.retries,
r = this.retriesSubscription;
if (i) this.errors = void 0, this.retriesSubscription = void 0;
else {
t = new Xt;
try {
i = (0, this.notifier)(t)
} catch (e) {
return Sa.prototype.error.call(this, e)
}
r = Hr(i, new $r(this))
}
this._unsubscribeAndRecycle(), this.errors = t, this.retries = i, this.retriesSubscription = r, t.next(e)
}
}, Ea.prototype._unsubscribe = function() {
var e = this.errors,
t = this.retriesSubscription;
e && (e.unsubscribe(), this.errors = void 0), t && (t.unsubscribe(), this.retriesSubscription = void 0), this.retries = void 0
}, Ea.prototype.notifyNext = function() {
var e = this._unsubscribe;
this._unsubscribe = null, this._unsubscribeAndRecycle(), this._unsubscribe = e, this.source.subscribe(this)
}, Ea);
function Ea(e, t, i) {
e = Sa.call(this, e) || this;
return e.notifier = t, e.source = i, e
}
function Ia(e, t) {
this.notifier = e, this.source = t
}
function wa() {
return new Xt
}
function Aa() {
return function(e) {
return ri()((t = e, i = "function" == typeof(r = wa) ? r : function() {
return r
}, (e = Object.create(t, mi)).source = t, e.subjectFactory = i, e));
var t, i, r
}
}
function Oa(e, t, i) {
var c = e && "object" == typeof e ? e : {
bufferSize: e,
windowTime: t,
refCount: !1,
scheduler: i
};
return function(e) {
return e.lift((e = c.bufferSize, n = void 0 === e ? Number.POSITIVE_INFINITY : e, e = c.windowTime, s = void 0 === e ? Number.POSITIVE_INFINITY : e, a = c.refCount, o = c.scheduler, l = 0, u = d = !1, function(e) {
var t;
l++, !i || d ? (d = !1, i = new Ji(n, s, o), t = i.subscribe(this), r = e.subscribe({
next: function(e) {
i.next(e)
},
error: function(e) {
d = !0, i.error(e)
},
complete: function() {
u = !0, r = void 0, i.complete()
}
}), u && (r = void 0)) : t = i.subscribe(this), this.add(function() {
l--, t.unsubscribe(), t = void 0, r && !u && a && 0 === l && (r.unsubscribe(), i = r = void 0)
})
}));
var i, r, n, s, a, o, l, d, u
}
}
function ka(t) {
return function(e) {
return e.lift(new Da(t))
}
}
var Ca, Da = (Pa.prototype.call = function(e, t) {
return t.subscribe(new Ma(e, this.total))
}, Pa),
Ma = (ut(xa, Ca = Pt), xa.prototype._next = function(e) {
++this.count > this.total && this.destination.next(e)
}, xa);
function xa(e, t) {
e = Ca.call(this, e) || this;
return e.total = t, e.count = 0, e
}
function Pa(e) {
this.total = e
}
function Ra() {
for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e];
var i = t[t.length - 1];
return Ni(i) ? (t.pop(), function(e) {
return Jr(t, e, i)
}) : function(e) {
return Jr(t, e)
}
}
function La(t, n) {
return "function" == typeof n ? function(e) {
return e.pipe(La(function(i, r) {
return Fr(t(i, r)).pipe(hr(function(e, t) {
return n(i, e, r, t)
}))
}))
} : function(e) {
return e.lift(new Na(t))
}
}
var _a, Na = (Ua.prototype.call = function(e, t) {
return t.subscribe(new Fa(e, this.project))
}, Ua),
Fa = (ut(Ba, _a = Vr), Ba.prototype._next = function(e) {
var t, i = this.index++;
try {
t = this.project(e, i)
} catch (e) {
return void this.destination.error(e)
}
this._innerSub(t)
}, Ba.prototype._innerSub = function(e) {
var t = this.innerSubscription;
t && t.unsubscribe();
var i = new $r(this),
t = this.destination;
t.add(i), this.innerSubscription = Hr(e, i), this.innerSubscription !== i && t.add(this.innerSubscription)
}, Ba.prototype._complete = function() {
var e = this.innerSubscription;
e && !e.closed || _a.prototype._complete.call(this), this.unsubscribe()
}, Ba.prototype._unsubscribe = function() {
this.innerSubscription = void 0
}, Ba.prototype.notifyComplete = function() {
this.innerSubscription = void 0, this.isStopped && _a.prototype._complete.call(this)
}, Ba.prototype.notifyNext = function(e) {
this.destination.next(e)
}, Ba);
function Ba(e, t) {
e = _a.call(this, e) || this;
return e.project = t, e.index = 0, e
}
function Ua(e) {
this.project = e
}
function $a(e, t) {
return t ? La(function() {
return e
}, t) : La(function() {
return e
})
}
function Va(t) {
return function(e) {
return e.lift(new qa(t))
}
}
var Ka, qa = (Qa.prototype.call = function(e, t) {
var i = new Ha(e),
e = Hr(this.notifier, new $r(i));
return e && !i.seenValue ? (i.add(e), t.subscribe(i)) : i
}, Qa),
Ha = (ut(ja, Ka = Vr), ja.prototype.notifyNext = function() {
this.seenValue = !0, this.complete()
}, ja.prototype.notifyComplete = function() {}, ja);
function ja(e) {
e = Ka.call(this, e) || this;
return e.seenValue = !1, e
}
function Qa(e) {
this.notifier = e
}
function Wa(t, i) {
return void 0 === i && (i = !1),
function(e) {
return e.lift(new za(t, i))
}
}
var Ga, za = (Ja.prototype.call = function(e, t) {
return t.subscribe(new Xa(e, this.predicate, this.inclusive))
}, Ja),
Xa = (ut(Ya, Ga = Pt), Ya.prototype._next = function(e) {
var t, i = this.destination;
try {
t = this.predicate(e, this.index++)
} catch (e) {
return void i.error(e)
}
this.nextOrComplete(e, t)
}, Ya.prototype.nextOrComplete = function(e, t) {
var i = this.destination;
Boolean(t) ? i.next(e) : (this.inclusive && i.next(e), i.complete())
}, Ya);
function Ya(e, t, i) {
e = Ga.call(this, e) || this;
return e.predicate = t, e.inclusive = i, e.index = 0, e
}
function Ja(e, t) {
this.predicate = e, this.inclusive = t
}
function Za(t, i, r) {
return function(e) {
return e.lift(new to(t, i, r))
}
}
var eo, to = (so.prototype.call = function(e, t) {
return t.subscribe(new io(e, this.nextOrObserver, this.error, this.complete))
}, so),
io = (ut(no, eo = Pt), no.prototype._next = function(e) {
try {
this._tapNext.call(this._context, e)
} catch (e) {
return void this.destination.error(e)
}
this.destination.next(e)
}, no.prototype._error = function(e) {
try {
this._tapError.call(this._context, e)
} catch (e) {
return void this.destination.error(e)
}
this.destination.error(e)
}, no.prototype._complete = function() {
try {
this._tapComplete.call(this._context)
} catch (e) {
return void this.destination.error(e)
}
return this.destination.complete()
}, no),
ro = {
leading: !0,
trailing: !1
};
function no(e, t, i, r) {
e = eo.call(this, e) || this;
return e._tapNext = or, e._tapError = or, e._tapComplete = or, e._tapError = i || or, e._tapComplete = r || or, yt(t) ? (e._context = e)._tapNext = t : t && (e._context = t, e._tapNext = t.next || or, e._tapError = t.error || or, e._tapComplete = t.complete || or), e
}
function so(e, t, i) {
this.nextOrObserver = e, this.error = t, this.complete = i
}
function ao(t, i, r) {
return void 0 === i && (i = ir), void 0 === r && (r = ro),
function(e) {
return e.lift(new lo(t, i, r.leading, r.trailing))
}
}
var oo, lo = (ho.prototype.call = function(e, t) {
return t.subscribe(new uo(e, this.duration, this.scheduler, this.leading, this.trailing))
}, ho),
uo = (ut(co, oo = Pt), co.prototype._next = function(e) {
this.throttled ? this.trailing && (this._trailingValue = e, this._hasTrailingValue = !0) : (this.add(this.throttled = this.scheduler.schedule(po, this.duration, {
subscriber: this
})), this.leading ? this.destination.next(e) : this.trailing && (this._trailingValue = e, this._hasTrailingValue = !0))
}, co.prototype._complete = function() {
this._hasTrailingValue && this.destination.next(this._trailingValue), this.destination.complete()
}, co.prototype.clearThrottle = function() {
var e = this.throttled;
e && (this.trailing && this._hasTrailingValue && (this.destination.next(this._trailingValue), this._trailingValue = null, this._hasTrailingValue = !1), e.unsubscribe(), this.remove(e), this.throttled = null)
}, co);
function co(e, t, i, r, n) {
e = oo.call(this, e) || this;
return e.duration = t, e.scheduler = i, e.leading = r, e.trailing = n, e._hasTrailingValue = !1, e._trailingValue = null, e
}
function ho(e, t, i, r) {
this.duration = e, this.scheduler = t, this.leading = i, this.trailing = r
}
function po(e) {
e.subscriber.clearThrottle()
}
var fo, mo = (vo.prototype.call = function(e, t) {
return t.subscribe(new go(e, this.absoluteTimeout, this.waitFor, this.withObservable, this.scheduler))
}, vo),
go = (ut(yo, fo = Vr), yo.dispatchTimeout = function(e) {
var t = e.withObservable;
e._unsubscribeAndRecycle(), e.add(Hr(t, new $r(e)))
}, yo.prototype.scheduleTimeout = function() {
var e = this.action;
e ? this.action = e.schedule(this, this.waitFor) : this.add(this.action = this.scheduler.schedule(yo.dispatchTimeout, this.waitFor, this))
}, yo.prototype._next = function(e) {
this.absoluteTimeout || this.scheduleTimeout(), fo.prototype._next.call(this, e)
}, yo.prototype._unsubscribe = function() {
this.action = void 0, this.scheduler = null, this.withObservable = null
}, yo);
function yo(e, t, i, r, n) {
e = fo.call(this, e) || this;
return e.absoluteTimeout = t, e.waitFor = i, e.withObservable = r, e.scheduler = n, e.scheduleTimeout(), e
}
function vo(e, t, i, r) {
this.waitFor = e, this.absoluteTimeout = t, this.withObservable = i, this.scheduler = r
}
function So(e, t) {
return void 0 === t && (t = ir), r = e, n = Vi(new dr), void 0 === (s = t) && (s = ir),
function(e) {
var t = as(r),
i = t ? +r - s.now() : Math.abs(r);
return e.lift(new mo(i, t, n, s))
};
var r, n, s
}
function bo() {
for (var i = [], e = 0; e < arguments.length; e++) i[e] = arguments[e];
return function(e) {
var t;
return "function" == typeof i[i.length - 1] && (t = i.pop()), e.lift(new Io(i, t))
}
}
var To, Eo, Io = (Co.prototype.call = function(e, t) {
return t.subscribe(new wo(e, this.observables, this.project))
}, Co),
wo = (ut(ko, To = vr), ko.prototype.notifyNext = function(e, t, i) {
this.values[i] = t;
t = this.toRespond;
0 < t.length && (-1 !== (i = t.indexOf(i)) && t.splice(i, 1))
}, ko.prototype.notifyComplete = function() {}, ko.prototype._next = function(e) {
0 === this.toRespond.length && (e = [e].concat(this.values), this.project ? this._tryProject(e) : this.destination.next(e))
}, ko.prototype._tryProject = function(e) {
var t;
try {
t = this.project.apply(this, e)
} catch (e) {
return void this.destination.error(e)
}
this.destination.next(t)
}, ko),
Ao = {
type: null,
entityIds: null,
skip: !1
},
Oo = !1;
function ko(e, t, i) {
var r = To.call(this, e) || this;
r.observables = t, r.project = i, r.toRespond = [];
var n = t.length;
r.values = new Array(n);
for (var s = 0; s < n; s++) r.toRespond.push(s);
for (s = 0; s < n; s++) {
var a = t[s];
r.add(Cr(r, a, void 0, s))
}
return r
}
function Co(e, t) {
this.observables = e, this.project = t
}
function Do(e, t) {
Mo(e, t), Oo = !0
}
function Mo(e, t) {
!1 === Oo && (Ao.type = e, Ao.entityIds = t)
}
function xo(e, t) {
return e.hasOwnProperty(t)
}
function Po(e) {
return null == e
}
function Ro(e) {
return Po(e) ? [] : Array.isArray(e) ? e : [e]
}(iu = Eo = Eo || {}).Set = "Set", iu.Add = "Add", iu.Update = "Update", iu.Remove = "Remove";
var Lo = "undefined" != typeof window,
_o = !0;
function No(e) {
var t = typeof e;
return null != e && ("object" == t || "function" == t)
}
function Fo(e) {
return Array.isArray(e)
}
function Bo(e) {
return !1 === Po(e)
}
function Uo(e) {
return Fo(e) && 0 === e.length
}
function $o(e) {
return "function" == typeof e
}
function Vo(e) {
return void 0 === e
}
function Ko(e) {
return e.hasOwnProperty("active")
}
function qo(e) {
return Fo(e)
}
function Ho(e) {
var t, i = e.active,
r = e.ids,
n = e.entities;
return qo(i) ? (t = r, (r = (e = i).filter(function(e) {
return -1 < t.indexOf(e)
})).length === e.length ? e : r) : !1 === xo(n, i) ? null : i
}
function jo(e, t) {
var i, r, n = {};
try {
for (var s = ft(Object.keys(e)), a = s.next(); !a.done; a = s.next()) {
var o = a.value;
n[o] = t(e[o])
}
} catch (e) {
i = {
error: e
}
} finally {
try {
a && !a.done && (r = s.return) && r.call(s)
} finally {
if (i) throw i.error
}
}
return n
}
var Qo = {
resettable: !1,
ttl: null,
producerFn: void 0
};
function Wo(t) {
Object.freeze(t);
var i = "function" == typeof t,
r = Object.prototype.hasOwnProperty;
return Object.getOwnPropertyNames(t).forEach(function(e) {
!r.call(t, e) || i && ("caller" === e || "callee" === e || "arguments" === e) || null === t[e] || "object" != typeof t[e] && "function" != typeof t[e] || Object.isFrozen(t[e]) || Wo(t[e])
}), t
}
var Go, zo = new Xt,
Xo = new Ji(50, 5e3),
Yo = new Xt;
function Jo(e) {
return null != e && "" + e != "false"
}
function Zo(e) {
return Jo(e) && "Object" === e.constructor.name
}
ut(function(e) {
return Go.call(this, e) || this
}, Go = Error);
var el = {},
tl = {};
Lo && (window.$$stores = el, window.$$queries = tl);
var il = new Xt,
rl = new yi(!1),
nl = {
activeTransactions: 0,
batchTransaction: null
};
function sl() {
return 0 < nl.activeTransactions
}
function al(e, t) {
void 0 === t && (t = void 0), sl() || (nl.batchTransaction = new Xt), nl.activeTransactions++, rl.next(!0);
try {
return e.apply(t)
} finally {
Do("@Transaction"), 0 == --nl.activeTransactions && (nl.batchTransaction.next(!0), nl.batchTransaction.complete(), rl.next(!1), il.next(!0))
}
}
function ol() {
return function(e, t, i) {
var r = i.value;
return i.value = function() {
for (var e = this, t = [], i = 0; i < arguments.length; i++) t[i] = arguments[i];
return al(function() {
return r.apply(e, t)
}, this)
}, i
}
}
function ll(t) {
return function(e) {
return e.pipe(Za(function(e) {
return al(function() {
return t(e)
})
}))
}
}
var dl = (ul.prototype.setLoading = function(t) {
(t = void 0 === t ? !1 : t) !== this._value().loading && (_o && Mo("Set Loading"), this._setState(function(e) {
return ct({}, e, {
loading: t
})
}))
}, ul.prototype.setHasCache = function(e, t) {
var i, r = this;
void 0 === t && (t = {
restartTTL: !1
}), e !== this.cache.active.value && this.cache.active.next(e), t.restartTTL && (i = this.getCacheTTL()) && (null !== this.cache.ttl && clearTimeout(this.cache.ttl), this.cache.ttl = setTimeout(function() {
return r.setHasCache(!1)
}, i))
}, ul.prototype.getValue = function() {
return this.storeValue
}, ul.prototype.setError = function(t) {
t !== this._value().error && (_o && Mo("Set Error"), this._setState(function(e) {
return ct({}, e, {
error: t
})
}))
}, ul.prototype._select = function(t) {
return this.store.asObservable().pipe(hr(function(e) {
return t(e.state)
}), Is())
}, ul.prototype._value = function() {
return this.storeValue
}, ul.prototype._cache = function() {
return this.cache.active
}, Object.defineProperty(ul.prototype, "config", {
get: function() {
return this.constructor.akitaConfig || {}
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(ul.prototype, "storeName", {
get: function() {
return this.config.storeName || this.options.storeName || this.options.name
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(ul.prototype, "deepFreeze", {
get: function() {
return this.config.deepFreezeFn || this.options.deepFreezeFn || Wo
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(ul.prototype, "cacheConfig", {
get: function() {
return this.config.cache || this.options.cache
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(ul.prototype, "_producerFn", {
get: function() {
return this.config.producerFn || this.options.producerFn || Qo.producerFn
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(ul.prototype, "resettable", {
get: function() {
return (Bo(this.config.resettable) ? this.config : this.options).resettable
},
enumerable: !0,
configurable: !0
}), ul.prototype._setState = function(e, t) {
var i, r = this;
if (void 0 === t && (t = !0), $o(e) ? (i = e(this._value()), this.storeValue = _o ? this.deepFreeze(i) : i) : this.storeValue = e, !this.store) return this.store = new yi({
state: this.storeValue
}), void(_o && this.store.subscribe(function(e) {
var t = e.action;
t && (e = r.storeName, Yo.next({
storeName: e,
action: t
}))
}));
sl() ? this.handleTransaction() : this.dispatch(this.storeValue, t)
}, ul.prototype.reset = function() {
var e = this;
this.isResettable() ? (_o && Mo("Reset"), this._setState(function() {
return Object.assign({}, e._initialState)
}), this.setHasCache(!1)) : _o && console.warn("You need to enable the reset functionality")
}, ul.prototype.update = function(e) {
_o && Mo("Update");
var t = this._value(),
e = $o(e) ? $o(this._producerFn) ? this._producerFn(t, e) : e(t) : e,
e = this.akitaPreUpdate(t, ct({}, t, e)),
e = Zo(t) ? e : new t.constructor(e);
this._setState(e)
}, ul.prototype.updateStoreConfig = function(e) {
this.options = ct({}, this.options, e)
}, ul.prototype.akitaPreUpdate = function(e, t) {
return t
}, ul.prototype.ngOnDestroy = function() {
this.destroy()
}, ul.prototype.destroy = function() {
var e;
Lo && window.hmrEnabled || this !== el[this.storeName] || (delete el[this.storeName], e = this.storeName, zo.next(e), this.setHasCache(!1), this.cache.active.complete(), this.store.complete())
}, ul.prototype.onInit = function(e) {
var t, i;
(el[this.storeName] = this)._setState(function() {
return e
}), i = this.storeName, Xo.next(i), this.isResettable() && (this._initialState = e), _o && (t = this.storeName, i = this.constructor.name, t || console.error("@StoreConfig({ name }) is missing in " + i))
}, ul.prototype.dispatch = function(e, t) {
var i = void 0;
(t = void 0 === t ? !0 : t) && (i = Ao, Oo = !1), this.store.next({
state: e,
action: i
})
}, ul.prototype.watchTransaction = function() {
var e = this;
(nl.batchTransaction ? nl.batchTransaction.asObservable() : $i(!0)).subscribe(function() {
e.inTransaction = !1, e.dispatch(e._value())
})
}, ul.prototype.isResettable = function() {
return !1 !== this.resettable && (this.resettable || Qo.resettable)
}, ul.prototype.handleTransaction = function() {
this.inTransaction || (this.watchTransaction(), this.inTransaction = !0)
}, ul.prototype.getCacheTTL = function() {
return this.cacheConfig && this.cacheConfig.ttl || Qo.ttl
}, ul);
function ul(e, t) {
this.options = t = void 0 === t ? {} : t, this.inTransaction = !1, this.cache = {
active: new yi(!1),
ttl: null
}, this.onInit(e)
}
var cl, hl, pl, fl = (ut(yl, pl = dl), Object.defineProperty(yl.prototype, "selectEntityAction$", {
get: function() {
return this.entityActions.asObservable()
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(yl.prototype, "selectEntityIdChanges$", {
get: function() {
return this.entityIdChanges.asObservable()
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(yl.prototype, "idKey", {
get: function() {
return this.config.idKey || this.options.idKey || "id"
},
enumerable: !0,
configurable: !0
}), yl.prototype.set = function(a, o) {
var l, d = this;
void 0 === o && (o = {}), Po(a) || (_o && Mo("Set Entity"), l = this.akitaPreAddEntity === yl.prototype.akitaPreAddEntity, this.setHasCache(!0, {
restartTTL: !0
}), this._setState(function(e) {
var t, i, r, n, s, e = (t = {
state: e,
entities: a,
idKey: d.idKey,
preAddEntity: d.akitaPreAddEntity,
isNativePreAdd: l
}, r = t.state, n = t.entities, s = t.idKey, e = t.preAddEntity, t = t.isNativePreAdd, e = Fo(n) ? (i = (s = function(e, t, i) {
var r, n, s = {
entities: {},
ids: []
};
try {
for (var a = ft(e), o = a.next(); !o.done; o = a.next()) {
var l = i(o.value);
s.entities[l[t]] = l, s.ids.push(l[t])
}
} catch (e) {
r = {
error: e
}
} finally {
try {
o && !o.done && (n = a.return) && n.call(a)
} finally {
if (r) throw r.error
}
}
return s
}(n, s, e)).entities, s.ids) : n.entities && n.ids ? (i = t ? n.entities : jo(n.entities, e), n.ids) : (i = t ? n : jo(n, e), Object.keys(i).map(function(e) {
return isNaN(e) ? e : Number(e)
})), e = ct({}, r, {
entities: i,
ids: e,
loading: !1
}), Ko(r) && (e.active = Ho(e)), e);
return !1 === Vo(o.activeId) && (e.active = o.activeId), e
}), this.hasInitialUIState() && this.handleUICreation(), this.entityActions.next({
type: Eo.Set,
ids: this.ids
}))
}, yl.prototype.add = function(e, t) {
void 0 === t && (t = {
loading: !1
});
var i, e = Ro(e);
Uo(e) || (i = function(e) {
var t, i, r = e.state,
n = e.entities,
s = e.idKey,
a = e.options,
o = void 0 === a ? {} : a,
l = e.preAddEntity,
d = {},
u = [],
c = !1;
try {
for (var h = ft(n), p = h.next(); !p.done; p = h.next()) {
var f, m, g = p.value;
!1 === xo(r.entities, g[s]) && (d[m = (f = l(g))[s]] = f, o.prepend ? u.unshift(m) : u.push(m), c = !0)
}
} catch (e) {
t = {
error: e
}
} finally {
try {
p && !p.done && (i = h.return) && i.call(h)
} finally {
if (t) throw t.error
}
}
return c ? {
newState: ct({}, r, {
entities: ct({}, r.entities, d),
ids: o.prepend ? gt(u, r.ids) : gt(r.ids, u)
}),
newIds: u
} : null
}({
state: this._value(),
preAddEntity: this.akitaPreAddEntity,
entities: e,
idKey: this.idKey,
options: t
})) && (_o && Mo("Add Entity"), i.newState.loading = t.loading, this._setState(function() {
return i.newState
}), this.hasInitialUIState() && this.handleUICreation(!0), this.entityActions.next({
type: Eo.Add,
ids: i.newIds
}))
}, yl.prototype.update = function(t, i) {
var r, n, s = this;
Vo(i) ? pl.prototype.update.call(this, t) : (n = [], Uo(n = $o(t) ? this.ids.filter(function(e) {
return t(s.entities[e])
}) : Po(t) ? this.ids : Ro(t)) || (_o && Mo("Update Entity", n), this._setState(function(e) {
return function(e) {
var t = e.state,
i = e.ids,
r = e.idKey,
n = e.newStateOrFn,
s = e.preUpdateEntity,
a = e.producerFn,
o = e.onEntityIdChanges,
l = {},
d = !1;
try {
for (var u = ft(i), c = u.next(); !c.done; c = u.next()) {
var h, p, f, m, g, y, v = c.value;
!1 !== xo(t.entities, v) && (h = t.entities[v], p = void 0, f = (p = $o(n) ? $o(a) ? a(h, n) : n(h) : n).hasOwnProperty(r) && p[r] !== h[r], y = void 0, m = v, f && (d = !0, m = p[r]), g = ct({}, h, p), y = Zo(h) ? g : new(Zo(p) ? h : p).constructor(g), l[m] = s(h, y))
}
} catch (e) {
T = {
error: e
}
} finally {
try {
c && !c.done && (b = u.return) && b.call(u)
} finally {
if (T) throw T.error
}
}
var S, b = t.ids,
T = t.entities;
return d && (S = mt(i, 1)[0], T = function(e, t) {
var i = {};
for (n in e) Object.prototype.hasOwnProperty.call(e, n) && t.indexOf(n) < 0 && (i[n] = e[n]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols)
for (var r = 0, n = Object.getOwnPropertySymbols(e); r < n.length; r++) t.indexOf(n[r]) < 0 && Object.prototype.propertyIsEnumerable.call(e, n[r]) && (i[n[r]] = e[n[r]]);
return i
}(t.entities, ["symbol" == typeof S ? S : S + ""]), b = t.ids.map(function(e) {
return e === S ? m : e
}), o(S, m)), ct({}, t, {
entities: ct({}, T, l),
ids: b
})
}({
idKey: s.idKey,
ids: n,
preUpdateEntity: s.akitaPreUpdateEntity,
state: e,
newStateOrFn: i,
producerFn: s._producerFn,
onEntityIdChanges: function(e, t) {
r = {
oldId: e,
newId: t
}, s.entityIdChanges.next(ct({}, r, {
pending: !0
}))
}
})
}), r && this.entityIdChanges.next(ct({}, r, {
pending: !1
})), this.entityActions.next({
type: Eo.Update,
ids: n
})))
}, yl.prototype.upsert = function(e, i, r, t) {
var n = this;
void 0 === t && (t = {});
var s = Ro(e),
e = function(t) {
return function(e) {
return xo(n.entities, e) === t
}
},
a = $o(r) ? t.baseClass : r ? r.baseClass : void 0,
o = $o(a),
t = s.filter(e(!0)),
e = s.filter(e(!1)).map(function(e) {
var t = "function" == typeof i ? i({}) : i,
t = $o(r) ? r(e, t) : t,
t = ct({}, t, ((t = {})[n.idKey] = e, t));
return o ? new a(t) : t
});
this.update(t, i), this.add(e), _o && Do("Upsert Entity")
}, yl.prototype.upsertMany = function(e, t) {
var i, r;
void 0 === t && (t = {});
var n = [],
s = [],
a = {};
try {
for (var o = ft(e), l = o.next(); !l.done; l = o.next()) {
var d, u, c, h, p, f, m = l.value,
g = this.akitaPreCheckEntity(m),
y = g[this.idKey];
xo(this.entities, y) ? (d = this._value().entities[y], u = ct({}, this._value().entities[y], g), c = t.baseClass ? new t.baseClass(u) : u, f = (h = this.akitaPreUpdateEntity(d, c))[this.idKey], a[f] = h, s.push(f)) : (p = t.baseClass ? new t.baseClass(g) : g, f = (h = this.akitaPreAddEntity(p))[this.idKey], n.push(f), a[f] = h)
}
} catch (e) {
i = {
error: e
}
} finally {
try {
l && !l.done && (r = o.return) && r.call(o)
} finally {
if (i) throw i.error
}
}
_o && Do("Upsert Many"), this._setState(function(e) {
return ct({}, e, {
ids: n.length ? gt(e.ids, n) : e.ids,
entities: ct({}, e.entities, a),
loading: !!t.loading
})
}), s.length && this.entityActions.next({
type: Eo.Update,
ids: s
}), n.length && this.entityActions.next({
type: Eo.Add,
ids: n
}), n.length && this.hasUIStore() && this.handleUICreation(!0)
}, yl.prototype.replace = function(e, t) {
var i, r, n = Ro(e);
if (!Uo(n)) {
var s = {};
try {
for (var a = ft(n), o = a.next(); !o.done; o = a.next()) {
var l = o.value;
t[this.idKey] = l, s[l] = t
}
} catch (e) {
i = {
error: e
}
} finally {
try {
o && !o.done && (r = a.return) && r.call(a)
} finally {
if (i) throw i.error
}
}
_o && Mo("Replace Entity", e), this._setState(function(e) {
return ct({}, e, {
entities: ct({}, e.entities, s)
})
})
}
}, yl.prototype.move = function(e, t) {
var i = this.ids.slice();
i.splice(t < 0 ? i.length + t : t, 0, i.splice(e, 1)[0]), _o && Mo("Move Entity"), this._setState(function(e) {
return ct({}, e, {
entities: ct({}, e.entities),
ids: i
})
})
}, yl.prototype.remove = function(t) {
var e, i, r = this;
Uo(this.ids) || (e = Bo(t), i = [], Uo(i = $o(t) ? this.ids.filter(function(e) {
return t(r.entities[e])
}) : e ? Ro(t) : this.ids) || (_o && Mo("Remove Entity", i), this._setState(function(e) {
return function(e) {
var t, i = e.state,
r = e.ids;
if (Po(r)) return ct({}, i, {
entities: {},
ids: [],
active: qo(i.active) ? [] : null
});
var n = i.entities,
s = {};
try {
for (var a = ft(i.ids), o = a.next(); !o.done; o = a.next()) {
var l = o.value;
!1 === r.includes(l) && (s[l] = n[l])
}
} catch (e) {
d = {
error: e
}
} finally {
try {
o && !o.done && (t = a.return) && t.call(a)
} finally {
if (d) throw d.error
}
}
var d = ct({}, i, {
entities: s,
ids: i.ids.filter(function(e) {
return !1 === r.includes(e)
})
});
return Ko(i) && (d.active = Ho(d)), d
}({
state: e,
ids: i
})
}), e || this.setHasCache(!1), this.handleUIRemove(i), this.entityActions.next({
type: Eo.Remove,
ids: i
})))
}, yl.prototype.updateActive = function(e) {
var t = Ro(this.active);
_o && Mo("Update Active", t), this.update(t, e)
}, yl.prototype.setActive = function(e) {
e = function(e, t, i) {
var r;
if (Fo(e)) r = e;
else if (No(e)) {
if (Po(i)) return;
e = Object.assign({
wrap: !0
}, e);
var n = t.indexOf(i);
if (e.prev) {
var s = 0 === n;
if (s && !e.wrap) return;
r = s ? t[t.length - 1] : t[n - 1]
} else if (e.next) {
s = t.length === n + 1;
if (s && !e.wrap) return;
r = s ? t[0] : t[n + 1]
}
} else {
if (e === i) return;
r = e
}
return r
}(e, this.ids, this.active);
void 0 !== e && (_o && Mo("Set Active", e), this._setActive(e))
}, yl.prototype.addActive = function(e) {
var t = this,
i = Ro(e);
Uo(i) || i.every(function(e) {
return -1 < t.active.indexOf(e)
}) || (_o && Mo("Add Active", e), this._setState(function(e) {
var t = Array.from(new Set(gt(e.active, i)));
return ct({}, e, {
active: t
})
}))
}, yl.prototype.removeActive = function(e) {
var t = this,
i = Ro(e);
Uo(i) || i.some(function(e) {
return -1 < t.active.indexOf(e)
}) && (_o && Mo("Remove Active", e), this._setState(function(e) {
return ct({}, e, {
active: Array.isArray(e.active) ? e.active.filter(function(e) {
return -1 === i.indexOf(e)
}) : null
})
}))
}, yl.prototype.toggleActive = function(e) {
var i = this,
t = Ro(e),
r = function(t) {
return function(e) {
return i.active.includes(e) === t
}
},
e = t.filter(r(!0)),
r = t.filter(r(!1));
this.removeActive(e), this.addActive(r), _o && Do("Toggle Active")
}, yl.prototype.createUIStore = function(e, t) {
var i = {
name: "UI/" + this.storeName,
idKey: this.idKey
};
return this.ui = new ml(e = void 0 === e ? {} : e, ct({}, i, t = void 0 === t ? {} : t)), this.ui
}, yl.prototype.destroy = function() {
pl.prototype.destroy.call(this), this.ui instanceof yl && this.ui.destroy(), this.entityActions.complete()
}, yl.prototype.akitaPreUpdateEntity = function(e, t) {
return t
}, yl.prototype.akitaPreAddEntity = function(e) {
return e
}, yl.prototype.akitaPreCheckEntity = function(e) {
return e
}, Object.defineProperty(yl.prototype, "ids", {
get: function() {
return this._value().ids
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(yl.prototype, "entities", {
get: function() {
return this._value().entities
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(yl.prototype, "active", {
get: function() {
return this._value().active
},
enumerable: !0,
configurable: !0
}), yl.prototype._setActive = function(t) {
this._setState(function(e) {
return ct({}, e, {
active: t
})
})
}, yl.prototype.handleUICreation = function(e) {
var r = this,
t = this.ids,
n = $o(this.ui._akitaCreateEntityFn),
i = function(e) {
var t = r.entities[e],
i = n ? r.ui._akitaCreateEntityFn(t) : r.ui._akitaCreateEntityFn;
return ct(((e = {})[r.idKey] = t[r.idKey], e), i)
},
i = ((e = void 0 === e ? !1 : e) ? this.ids.filter(function(e) {
return Vo(r.ui.entities[e])
}) : t).map(i);
e ? this.ui.add(i) : this.ui.set(i)
}, yl.prototype.hasInitialUIState = function() {
return this.hasUIStore() && !1 === Vo(this.ui._akitaCreateEntityFn)
}, yl.prototype.handleUIRemove = function(e) {
this.hasUIStore() && this.ui.remove(e)
}, yl.prototype.hasUIStore = function() {
return this.ui instanceof ml
}, ht([ol(), pt("design:type", Function), pt("design:paramtypes", [Object, Object, Object, Object]), pt("design:returntype", void 0)], yl.prototype, "upsert", null), ht([ol(), pt("design:type", Function), pt("design:paramtypes", ["function" == typeof(w = "undefined" != typeof T && T) ? w : Object]), pt("design:returntype", void 0)], yl.prototype, "toggleActive", null), yl),
ml = (ut(gl, hl = fl), gl.prototype.setInitialEntityState = function(e) {
this._akitaCreateEntityFn = e
}, gl);
function gl(e, t) {
return hl.call(this, e = void 0 === e ? {} : e, t = void 0 === t ? {} : t) || this
}
function yl(e, t) {
void 0 === t && (t = {});
e = pl.call(this, ct({}, {
entities: {},
ids: [],
loading: !0,
error: null
}, e = void 0 === e ? {} : e), t) || this;
return e.options = t, e.entityActions = new Xt, e.entityIdChanges = new Xt, e
}
function vl() {
return Is(function(e, t) {
return e === t || !1 !== Fo(e) && !1 !== Fo(t) && (!(!Uo(e) || !Uo(t)) || !Sl(t, e) && !1 === Sl(e, t))
})
}
function Sl(e, t) {
return t.some(function(t) {
return void 0 === e.find(function(e) {
return e === t
})
})
}
function bl(i, e) {
for (var r, n, s, a = [], o = i.ids, l = i.entities, d = e.filterBy, t = e.limitTo, u = e.sortBy, e = e.sortByOrder, c = 0; c < o.length; c++) ! function(t) {
var i = l[o[t]];
if (!d) return a.push(i);
Ro(d).every(function(e) {
return e(i, t)
}) && a.push(i)
}(c);
u && (s = $o(u) ? u : (r = u, void 0 === (n = e) && (n = cl.ASC), function(e, t) {
if (!e.hasOwnProperty(r) || !t.hasOwnProperty(r)) return 0;
var i = "string" == typeof e[r] ? e[r].toUpperCase() : e[r],
e = "string" == typeof t[r] ? t[r].toUpperCase() : t[r],
t = 0;
return e < i ? t = 1 : i < e && (t = -1), n == cl.DESC ? -1 * t : t
}), a = a.sort(function(e, t) {
return s(e, t, i)
}));
t = Math.min(t || a.length, a.length);
return t === a.length ? a : a.slice(0, t)
}
function Tl(e) {
return "string" == typeof e
}
function El(t, i) {
return function(e) {
e = e[t];
if (!Vo(e)) return i ? Tl(i) ? e[i] : i(e) : e
}
}(vi = cl = cl || {}).ASC = "asc", vi.DESC = "desc";
Il.prototype.select = function(t) {
var e, n;
if ($o(t)) e = t;
else if (Tl(t)) e = function(e) {
return e[t]
};
else {
if (Array.isArray(t)) return this.store._select(function(e) {
return e
}).pipe(Is((n = t, function(t, i) {
var r = $o(n[0]);
return !1 === n.some(function(e) {
return r ? e(t) !== e(i) : t[e] !== i[e]
})
})), hr(function(i) {
return $o(t[0]) ? t.map(function(e) {
return e(i)
}) : t.reduce(function(e, t) {
return e[t] = i[t], e
}, {})
}));
e = function(e) {
return e
}
}
return this.store._select(e)
}, Il.prototype.selectLoading = function() {
return this.select(function(e) {
return e.loading
})
}, Il.prototype.selectError = function() {
return this.select(function(e) {
return e.error
})
}, Il.prototype.getValue = function() {
return this.store._value()
}, Il.prototype.selectHasCache = function() {
return this.store._cache().asObservable()
}, Il.prototype.getHasCache = function() {
return this.store._cache().value
}, Object.defineProperty(Il.prototype, "config", {
get: function() {
return this.constructor.akitaQueryConfig
},
enumerable: !0,
configurable: !0
}), bi = Il;
function Il(e) {
this.store = e, this.__store__ = e, _o && (tl[e.storeName] = this)
}
function wl(e) {
return e.pipe(ln(function(e) {
return null != e
}))
}
var Al, Ol, kl = (ut(Ml, Ol = bi), Ml.prototype.selectAll = function(e) {
var t = this;
return void 0 === e && (e = {
asObject: !1
}), this.select(function(e) {
return e.entities
}).pipe(hr(function() {
return t.getAll(e)
}))
}, Ml.prototype.getAll = function(e) {
return (e = void 0 === e ? {
asObject: !1,
filterBy: void 0,
limitTo: void 0
} : e).asObject ? function(e, t) {
var r = {},
n = t.filterBy,
s = t.limitTo,
a = e.ids,
o = e.entities;
if (!n && !s) return o;
e = !1 === Po(s);
if (n && e)
for (var l = 0, i = 0, d = a.length; i < d && "break" !== function(t) {
if (l === s) return "break";
var e = a[t],
i = o[e];
Ro(n).every(function(e) {
return e(i, t)
}) && (r[e] = i, l++)
}(i); i++);
else
for (var u = Math.min(s || a.length, a.length), i = 0; i < u; i++) ! function(t) {
var e = a[t],
i = o[e];
if (!n) return r[e] = i;
Ro(n).every(function(e) {
return e(i, t)
}) && (r[e] = i)
}(i);
return r
}(this.getValue(), e) : (t = e, i = this.config || this.options, t.sortBy = t.sortBy || i && i.sortBy, t.sortByOrder = t.sortByOrder || i && i.sortByOrder, bl(this.getValue(), e));
var t, i
}, Ml.prototype.selectMany = function(e, i) {
return e && e.length ? this.select(function(e) {
return e.entities
}).pipe(hr(function(t) {
return n = function(e) {
return El(e, i)(t)
}, e.reduce(function(e, t, i, r) {
t = n(t);
return void 0 !== t && e.push(t), e
}, []);
var n
}), vl()) : $i([])
}, Ml.prototype.selectEntity = function(e, t) {
var i = e;
return $o(e) && (i = function(e, t) {
var i, r;
try {
for (var n = ft(Object.keys(t)), s = n.next(); !s.done; s = n.next()) {
var a = s.value;
if (!0 === e(t[a])) return a
}
} catch (e) {
i = {
error: e
}
} finally {
try {
s && !s.done && (r = n.return) && r.call(n)
} finally {
if (i) throw i.error
}
}
}(e, this.getValue().entities)), this.select(function(e) {
return e.entities
}).pipe(hr(El(i, t)), Is())
}, Ml.prototype.getEntity = function(e) {
return this.getValue().entities[e]
}, Ml.prototype.selectActiveId = function() {
return this.select(function(e) {
return e.active
})
}, Ml.prototype.getActiveId = function() {
return this.getValue().active
}, Ml.prototype.selectActive = function(t) {
var i = this;
return Fo(this.getActive()) ? this.selectActiveId().pipe(La(function(e) {
return i.selectMany(e, t)
})) : this.selectActiveId().pipe(La(function(e) {
return i.selectEntity(e, t)
}))
}, Ml.prototype.getActive = function() {
var t = this,
e = this.getActiveId();
return Fo(e) ? e.map(function(e) {
return t.getValue().entities[e]
}) : Jo(e) ? this.getEntity(e) : void 0
}, Ml.prototype.selectCount = function(e) {
var t = this;
return this.select(function(e) {
return e.entities
}).pipe(hr(function() {
return t.getCount(e)
}))
}, Ml.prototype.getCount = function(e) {
return ($o(e) ? this.getAll().filter(e) : this.getValue().ids).length
}, Ml.prototype.selectLast = function(e) {
return this.selectAt(function(e) {
return e[e.length - 1]
}, e)
}, Ml.prototype.selectFirst = function(e) {
return this.selectAt(function(e) {
return e[0]
}, e)
}, Ml.prototype.selectEntityAction = function(e) {
if (Po(e)) return this.store.selectEntityAction$;
var t = Fo(e) ? function(e) {
return e
} : function(e) {
return e.ids
},
i = Ro(e);
return this.store.selectEntityAction$.pipe(ln(function(e) {
e = e.type;
return i.includes(e)
}), hr(function(e) {
return t(e)
}))
}, Ml.prototype.hasEntity = function(e) {
var t = this;
return Po(e) ? 0 < this.getValue().ids.length : $o(e) ? this.getAll().some(e) : Fo(e) ? e.every(function(e) {
return e in t.getValue().entities
}) : e in this.getValue().entities
}, Ml.prototype.hasActive = function(e) {
var t = this.getValue().active,
i = Bo(e);
return Array.isArray(t) ? i ? t.includes(e) : 0 < t.length : i ? t === e : Bo(t)
}, Ml.prototype.createUIQuery = function() {
this.ui = new Cl(this.__store__.ui)
}, Ml.prototype.selectAt = function(e, t) {
var i = this;
return this.select(function(e) {
return e.ids
}).pipe(hr(e), Is(), La(function(e) {
return i.selectEntity(e, t)
}))
}, Ml),
Cl = (ut(Dl, Al = kl), Dl);
function Dl(e) {
return Al.call(this, e) || this
}
function Ml(e, t) {
void 0 === t && (t = {});
var i = Ol.call(this, e) || this;
return i.options = t, i.__store__ = e, i
}
function xl(e, t) {
return 1 === t.split(".").length ? e : t.split(".").slice(1).join(".").split(".").reduce(function(e, t) {
return e && e[t]
}, e)
}
function Pl(e, t, r) {
var i = t.split(".");
if (1 === i.length) return ct({}, e, r);
e = ct({}, e);
var n = i.length - 2;
return t.split(".").slice(1).reduce(function(e, t, i) {
return e[t] = i !== n ? ct({}, e[t]) : Array.isArray(e[t]) || !No(e[t]) ? r : ct({}, e[t], r), e && e[t]
}, e), e
}
new Ji(1);
var Rl, Ll, _l, Nl, A = (Bl.prototype.getQuery = function() {
return this.query
}, Bl.prototype.getStore = function() {
return this.getQuery().__store__
}, Bl.prototype.isEntityBased = Jo, Bl.prototype.selectSource = function(e, t) {
var i = this;
return this.isEntityBased(e) ? this.getQuery().selectEntity(e).pipe(wl) : t ? this.getQuery().select(function(e) {
return xl(e, i.withStoreName(t))
}) : this.getQuery().select()
}, Bl.prototype.getSource = function(e, t) {
if (this.isEntityBased(e)) return this.getQuery().getEntity(e);
e = this.getQuery().getValue();
return t ? xl(e, this.withStoreName(t)) : e
}, Bl.prototype.withStoreName = function(e) {
return this.storeName + "." + e
}, Object.defineProperty(Bl.prototype, "storeName", {
get: function() {
return this.getStore().storeName
},
enumerable: !0,
configurable: !0
}), Bl.prototype.updateStore = function(t, e, i) {
var r = this;
this.isEntityBased(e) ? this.getStore().update(e, t) : i ? this.getStore()._setState(function(e) {
return Pl(e, r.withStoreName(i), t)
}) : this.getStore()._setState(function(e) {
return ct({}, e, t)
})
}, Bl.prototype.onReset = function(i) {
var r = this,
n = this.getStore().reset;
this.getStore().reset = function() {
for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
setTimeout(function() {
n.apply(r.getStore(), e), i()
})
}
}, Bl),
Fl = {
pagesControls: !1,
range: !1,
startWith: 1,
cacheTimeout: void 0,
clearStoreWithCache: !0
};
function Bl(e, t) {
this.query = e
}
function Ul(e, t, i) {
void 0 === i && (i = {});
var r = Rl.call(this, e) || this;
return r.query = e, r.factoryFnOrPath = t, r.params = i, r.params = ct({
debounceTime: 300,
formKey: "akitaForm",
emitEvent: !1,
arrControlFactory: function(e) {
return r.builder.control(e)
}
}, i), r.isRootKeys = !1 === Jo(t), r.isKeyBased = Tl(t) || r.isRootKeys, r
}
function $l(e, t) {
void 0 === t && (t = {});
var i = Ll.call(this, e, {
resetFn: function() {
i.initial = !1, i.destroy({
clearCache: !0,
currentPage: 1
})
}
}) || this;
i.query = e, i.config = t, i.metadata = new Map, i.pages = new Map, i.pagination = {
currentPage: 1,
perPage: 0,
total: 0,
lastPage: 0,
data: []
}, i.initial = !0, i.isLoading$ = i.query.selectLoading().pipe(function(t) {
void 0 === t && (t = ir);
var i = as(0) ? 0 - t.now() : Math.abs(0);
return function(e) {
return e.lift(new ls(i, t))
}
}()), i.config = Object.assign(Fl, t);
e = i.config, t = e.startWith, e = e.cacheTimeout;
return i.page = new yi(t), e && (e instanceof $t || "function" == typeof e.lift && "function" == typeof e.subscribe) && (i.clearCacheSubscription = e.subscribe(function() {
return i.clearCache()
})), i
}
ut($l, Ll = A), Object.defineProperty($l.prototype, "pageChanges", {
get: function() {
return this.page.asObservable()
},
enumerable: !0,
configurable: !0
}), Object.defineProperty($l.prototype, "currentPage", {
get: function() {
return this.pagination.currentPage
},
enumerable: !0,
configurable: !0
}), Object.defineProperty($l.prototype, "isFirst", {
get: function() {
return 1 === this.currentPage
},
enumerable: !0,
configurable: !0
}), Object.defineProperty($l.prototype, "isLast", {
get: function() {
return this.currentPage === this.pagination.lastPage
},
enumerable: !0,
configurable: !0
}), $l.prototype.withControls = function() {
return this.config.pagesControls = !0, this
}, $l.prototype.withRange = function() {
return this.config.range = !0, this
}, $l.prototype.setLoading = function(e) {
void 0 === e && (e = !0), this.getStore().setLoading(e)
}, $l.prototype.update = function(e) {
this.pagination = e, this.addPage(e.data)
}, $l.prototype.addPage = function(e) {
var t = this;
this.pages.set(this.currentPage, {
ids: e.map(function(e) {
return e[t.getStore().idKey]
})
}), this.getStore().upsertMany(e)
}, $l.prototype.clearCache = function(e) {
void 0 === e && (e = {}), this.initial || (Do("@Pagination - Clear Cache"), !1 !== e.clearStore && (this.config.clearStoreWithCache || e.clearStore) && this.getStore().remove(), this.pages = new Map, this.metadata = new Map), this.initial = !1
}, $l.prototype.clearPage = function(e) {
this.pages.delete(e)
}, $l.prototype.destroy = function(e) {
var t = void 0 === e ? {} : e,
e = t.clearCache,
t = t.currentPage;
this.clearCacheSubscription && this.clearCacheSubscription.unsubscribe(), e && this.clearCache(), Vo(t) || this.setPage(t), this.initial = !0
}, $l.prototype.isPageActive = function(e) {
return this.currentPage === e
}, $l.prototype.setPage = function(e) {
e === this.currentPage && this.hasPage(e) || this.page.next(this.pagination.currentPage = e)
}, $l.prototype.nextPage = function() {
this.currentPage !== this.pagination.lastPage && this.setPage(this.pagination.currentPage + 1)
}, $l.prototype.prevPage = function() {
1 < this.pagination.currentPage && this.setPage(this.pagination.currentPage - 1)
}, $l.prototype.setLastPage = function() {
this.setPage(this.pagination.lastPage)
}, $l.prototype.setFirstPage = function() {
this.setPage(1)
}, $l.prototype.hasPage = function(e) {
return this.pages.has(e)
}, $l.prototype.getPage = function(e) {
var t = this,
i = this.pagination.currentPage;
return this.hasPage(i) ? this.selectPage(i) : (this.setLoading(!0), Fr(e()).pipe(La(function(e) {
return i = e.currentPage, al(function() {
t.setLoading(!1), t.update(e)
}), t.selectPage(i)
})))
}, $l.prototype.getQuery = function() {
return this.query
}, $l.prototype.refreshCurrentPage = function() {
!1 === Po(this.currentPage) && (this.clearPage(this.currentPage), this.setPage(this.currentPage))
}, $l.prototype.getFrom = function() {
return this.isFirst ? 1 : (this.currentPage - 1) * this.pagination.perPage + 1
}, $l.prototype.getTo = function() {
return this.isLast ? this.pagination.total : this.currentPage * this.pagination.perPage
}, $l.prototype.selectPage = function(n) {
var s = this;
return this.query.selectAll({
asObject: !0
}).pipe(Ds(1), hr(function(t) {
var e = ct({}, s.pagination, {
data: s.pages.get(n).ids.map(function(e) {
return t[e]
})
}),
i = s.config,
r = i.range,
i = i.pagesControls;
return isNaN(s.pagination.total) && (1 === e.lastPage ? e.total = e.data ? e.data.length : 0 : e.total = e.perPage * e.lastPage, s.pagination.total = e.total), r && (e.from = s.getFrom(), e.to = s.getTo()), i && (e.pageControls = function(e, t) {
for (var i = Math.ceil(e / t), r = [], n = 0; n < i; n++) r.push(n + 1);
return r
}(s.pagination.total, s.pagination.perPage)), e
}))
}, ht([(_l = "@Pagination - New Page", function(e, t, i) {
var r = i.value;
return i.value = function() {
for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
return Do(_l, Nl), r.apply(this, e)
}, i
}), pt("design:type", Function), pt("design:paramtypes", [Object]), pt("design:returntype", void 0)], $l.prototype, "update", null), ut(Ul, Rl = A), Ul.prototype.setForm = function(e, t) {
return this.form = e, this.builder = t, this.activate(), this
}, Ul.prototype.reset = function(e) {
var r = this,
e = e || (this.isKeyBased ? this.initialValue : this.factoryFnOrPath());
this.isKeyBased && Object.keys(this.initialValue).forEach(function(i) {
var e, t = r.initialValue[i];
Array.isArray(t) && r.builder && (e = r.form.controls[i], r.cleanArray(e), t.forEach(function(e, t) {
r.form.get(i).insert(t, r.params.arrControlFactory(e))
}))
}), this.form.patchValue(e, {
emitEvent: this.params.emitEvent
});
var t = this.isKeyBased ? Pl(this.getQuery().getValue(), this.getStore().storeName + "." + this.factoryFnOrPath, e) : ((t = {})[this.params.formKey] = e, t);
this.updateStore(t)
}, Ul.prototype.cleanArray = function(e) {
for (; 0 !== e.length;) e.removeAt(0)
}, Ul.prototype.resolveInitialValue = function(e, n) {
var s = this;
if (e) return Object.keys(e).reduce(function(e, i) {
var r, t = n[i];
return Array.isArray(t) && s.builder && (r = s.params.arrControlFactory, s.cleanArray(s.form.get(i)), t.forEach(function(e, t) {
s.form.get(i).insert(t, r(e))
})), e[i] = n[i], e
}, {})
}, Ul.prototype.activate = function() {
var i, e, t, r = this;
this.isKeyBased ? (this.isRootKeys ? this.initialValue = this.resolveInitialValue(this.form.value, this.getQuery().getValue()) : (i = this.getStore().storeName + "." + this.factoryFnOrPath, e = xl(this.getQuery().getValue(), i), this.initialValue = this.resolveInitialValue(e, e)), this.form.patchValue(this.initialValue, {
emitEvent: this.params.emitEvent
})) : (this.getQuery().getValue()[this.params.formKey] || (Do("@PersistNgFormPlugin activate"), this.updateStore(((t = {})[this.params.formKey] = this.factoryFnOrPath(), t))), t = this.getQuery().getValue()[this.params.formKey], this.form.patchValue(t)), this.formChanges = this.form.valueChanges.pipe(Gn(this.params.debounceTime)).subscribe(function(t) {
var e;
Do("@PersistForm - Update"), e = r.isKeyBased ? r.isRootKeys ? function(e) {
return ct({}, e, t)
} : function(e) {
return Pl(e, i, t)
} : function() {
var e;
return (e = {})[r.params.formKey] = t, e
}, r.updateStore(e(r.getQuery().getValue()))
})
}, Ul.prototype.destroy = function() {
this.formChanges && this.formChanges.unsubscribe(), this.form = null, this.builder = null
};
var Vl, Kl, Vr = (jl.prototype.getEntity = function(e) {
return this.entities.get(e)
}, jl.prototype.hasEntity = function(e) {
return this.entities.has(e)
}, jl.prototype.removeEntity = function(e) {
return this.destroy(e), this.entities.delete(e)
}, jl.prototype.createEntity = function(e, t) {
return this.entities.set(e, t)
}, jl.prototype.getIds = function() {
return Vo(this.entityIds) ? this.query.getValue().ids : Ro(this.entityIds)
}, jl.prototype.resolvedIds = function(e) {
return Vo(e) ? this.getIds() : Ro(e)
}, jl.prototype.rebase = function(i, r) {
var n = this;
if (void 0 === r && (r = {}), Jo(i))
if (Vo(this.entityIds)) {
for (var e = 0, t = i.length; e < t; e++) {
var s, a = i[e];
!1 === this.hasEntity(a) && ($o(r.beforeAdd) && r.beforeAdd(a), s = this.instantiatePlugin(a), this.entities.set(a, s), $o(r.afterAdd) && r.afterAdd(s))
}
this.entities.forEach(function(e, t) {
-1 === i.indexOf(t) && ($o(r.beforeRemove) && r.beforeRemove(e), n.removeEntity(t))
})
} else
for (var o = Ro(this.entityIds), e = 0, t = o.length; e < t; e++) a = o[e], -1 < i.indexOf(a) && !1 === this.hasEntity(a) ? ($o(r.beforeAdd) && r.beforeAdd(a), s = this.instantiatePlugin(a), this.entities.set(a, s), $o(r.afterAdd) && r.afterAdd(s)) : this.entities.forEach(function(e, t) {
-1 === i.indexOf(t) && !0 === n.hasEntity(t) && ($o(r.beforeRemove) && r.beforeRemove(e), n.removeEntity(t))
});
else this.getIds().forEach(function(e) {
n.hasEntity(e) || n.createEntity(e, n.instantiatePlugin(e))
})
}, jl.prototype.selectIds = function() {
return this.query.select(function(e) {
return e.ids
})
}, jl.prototype.activate = function(e) {
this.rebase(e)
}, jl.prototype.forEachId = function(e, t) {
for (var i = this.resolvedIds(e), r = 0, n = i.length; r < n; r++) {
var s = i[r];
this.hasEntity(s) && t(this.getEntity(s))
}
}, jl),
ql = (ut(Hl, Vl = A), Object.defineProperty(Hl.prototype, "hasPast$", {
get: function() {
return this._hasPast$
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(Hl.prototype, "hasFuture$", {
get: function() {
return this._hasFuture$
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(Hl.prototype, "hasPast", {
get: function() {
return 0 < this.history.past.length
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(Hl.prototype, "hasFuture", {
get: function() {
return 0 < this.history.future.length
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(Hl.prototype, "property", {
get: function() {
return this.params.watchProperty
},
enumerable: !0,
configurable: !0
}), Hl.prototype.updateHasHistory = function() {
this.hasFutureSubject.next(this.hasFuture), this.hasPastSubject.next(this.hasPast)
}, Hl.prototype.activate = function() {
var r = this;
this.hasPastSubject = new yi(!1), this._hasPast$ = this.hasPastSubject.asObservable().pipe(Is()), this.hasFutureSubject = new yi(!1), this._hasFuture$ = this.hasFutureSubject.asObservable().pipe(Is()), this.history.present = this.getSource(this._entityId, this.property), this.subscription = this.selectSource(this._entityId, this.property).pipe(ha()).subscribe(function(e) {
var t = mt(e, 2),
i = t[0],
e = t[1];
r.skip ? r.skip = !1 : (t = r.params.comparator(i, e), !r.skipUpdate && t && (r.history.past.length === r.params.maxAge && (r.history.past = r.history.past.slice(1)), r.history.past = gt(r.history.past, [i]), r.history.present = e, r.updateHasHistory()))
})
}, Hl.prototype.undo = function() {
var e, t, i;
0 < this.history.past.length && (e = (i = this.history).past, t = i.present, i = e[e.length - 1], this.history.past = e.slice(0, e.length - 1), this.history.present = i, this.history.future = gt([t], this.history.future), this.update())
}, Hl.prototype.redo = function() {
var e, t, i, r;
0 < this.history.future.length && (e = (r = this.history).past, t = r.present, i = this.history.future[0], r = this.history.future.slice(1), this.history.past = gt(e, [t]), this.history.present = i, this.history.future = r, this.update("Redo"))
}, Hl.prototype.jumpToPast = function(e) {
var t, i, r, n;
e < 0 || e >= this.history.past.length || (t = (r = this.history).past, n = r.future, i = r.present, r = t.slice(0, e), n = gt(t.slice(e + 1), [i], n), e = t[e], this.history.past = r, this.history.present = e, this.history.future = n, this.update())
}, Hl.prototype.jumpToFuture = function(e) {
var t, i, r;
e < 0 || e >= this.history.future.length || (i = (r = this.history).past, t = r.future, i = gt(i, [r.present], t.slice(0, e)), r = t[e], e = t.slice(e + 1), this.history.past = i, this.history.present = r, this.history.future = e, this.update("Redo"))
}, Hl.prototype.jump = function(e) {
return 0 < e ? this.jumpToFuture(e - 1) : e < 0 ? this.jumpToPast(this.history.past.length + e) : void 0
}, Hl.prototype.clear = function(e) {
this.history = $o(e) ? e(this.history) : {
past: [],
present: null,
future: []
}, this.updateHasHistory()
}, Hl.prototype.destroy = function(e) {
(e = void 0 === e ? !1 : e) && this.clear(), this.subscription.unsubscribe()
}, Hl.prototype.ignoreNext = function() {
this.skip = !0
}, Hl.prototype.update = function(e) {
void 0 === e && (e = "Undo"), this.skipUpdate = !0, Do("@StateHistory - " + e), this.updateStore(this.history.present, this._entityId, this.property), this.updateHasHistory(), this.skipUpdate = !1
}, Hl);
function Hl(e, t, i) {
void 0 === t && (t = {});
var r = Vl.call(this, e, {
resetFn: function() {
return r.clear()
}
}) || this;
return r.query = e, r.params = t, r._entityId = i, r.skip = !1, r.history = {
past: [],
present: null,
future: []
}, r.skipUpdate = !1, t.maxAge = t.maxAge || 10, t.comparator = t.comparator || function() {
return !0
}, r.activate(), r
}
function jl(e, t) {
this.query = e, this.entityIds = t, this.entities = new Map
}
function Ql(e, t) {
var i = Kl.call(this, e, (t = void 0 === t ? {} : t).entityIds) || this;
return i.query = e, (i.params = t).maxAge = Jo(t.maxAge) ? t.maxAge : 10, i.activate(), i.selectIds().pipe(ka(1)).subscribe(function(e) {
return i.activate(e)
}), i
}
ut(Ql, Kl = Vr), Ql.prototype.redo = function(e) {
this.forEachId(e, function(e) {
return e.redo()
})
}, Ql.prototype.undo = function(e) {
this.forEachId(e, function(e) {
return e.undo()
})
}, Ql.prototype.hasPast = function(e) {
if (this.hasEntity(e)) return this.getEntity(e).hasPast
}, Ql.prototype.hasFuture = function(e) {
if (this.hasEntity(e)) return this.getEntity(e).hasFuture
}, Ql.prototype.jumpToFuture = function(e, t) {
this.forEachId(e, function(e) {
return e.jumpToFuture(t)
})
}, Ql.prototype.jumpToPast = function(e, t) {
this.forEachId(e, function(e) {
return e.jumpToPast(t)
})
}, Ql.prototype.clear = function(e) {
this.forEachId(e, function(e) {
return e.clear()
})
}, Ql.prototype.destroy = function(e, t) {
void 0 === t && (t = !1), this.forEachId(e, function(e) {
return e.destroy(t)
})
}, Ql.prototype.ignoreNext = function(e) {
this.forEachId(e, function(e) {
return e.ignoreNext()
})
}, Ql.prototype.instantiatePlugin = function(e) {
return new ql(this.query, this.params, e)
};
var Wl = {
comparator: function(e, t) {
return JSON.stringify(e) !== JSON.stringify(t)
}
};
function Gl(e, t) {
return t.split(".").reduce(function(e, t) {
return e && "undefined" !== e[t] ? e[t] : void 0
}, e)
}
var zl, Xl, Yl = (ut(Jl, zl = A), Jl.prototype.reset = function(e) {
var t = this.head;
$o((e = void 0 === e ? {} : e).updateFn) && (t = this.isEntityBased(this._entityId) ? e.updateFn(this.head, this.getQuery().getEntity(this._entityId)) : e.updateFn(this.head, this.getQuery().getValue())), Do("@DirtyCheck - Revert"), this.updateStore(t, this._entityId), this._reset.next()
}, Jl.prototype.setHead = function() {
return this.active ? this.head = this._getHead() : (this.activate(), this.active = !0), this.updateDirtiness(!1), this
}, Jl.prototype.isDirty = function() {
return !!this.dirty.value
}, Jl.prototype.hasHead = function() {
return !!this.getHead()
}, Jl.prototype.destroy = function() {
this.head = null, this.subscription && this.subscription.unsubscribe(), this._reset && this._reset.complete()
}, Jl.prototype.isPathDirty = function(e) {
var t = this.getHead(),
i = Gl(this.getQuery().getValue(), e),
e = Gl(t, e);
return this.params.comparator(i, e)
}, Jl.prototype.getHead = function() {
return this.head
}, Jl.prototype.activate = function() {
var i = this;
this.head = this._getHead();
var e = this.params.watchProperty ? this.params.watchProperty.map(function(t) {
return i.query.select(function(e) {
return e[t]
}).pipe(hr(function(e) {
return {
val: e,
__akitaKey: t
}
}))
}) : [this.selectSource(this._entityId)];
this.subscription = Mr.apply(void 0, gt(e)).pipe(ka(1)).subscribe(function(e) {
Vo(i.head) || (e = e.some(function(e) {
var t = e.__akitaKey ? i.head[e.__akitaKey] : i.head,
e = e.__akitaKey ? e.val : e;
return i.params.comparator(t, e)
}), i.updateDirtiness(e))
})
}, Jl.prototype.updateDirtiness = function(e) {
this.dirty.next(e)
}, Jl.prototype._getHead = function() {
var e = this.getSource(this._entityId);
return e = this.params.watchProperty ? this.getWatchedValues(e) : e
}, Jl.prototype.getWatchedValues = function(i) {
return this.params.watchProperty.reduce(function(e, t) {
return e[t] = i[t], e
}, {})
}, Jl);
function Jl(e, t, i) {
var r = zl.call(this, e) || this;
return r.query = e, r.params = t, r._entityId = i, r.dirty = new yi(!1), r.active = !1, r._reset = new Xt, r.isDirty$ = r.dirty.asObservable().pipe(Is()), r.reset$ = r._reset.asObservable(), r.params = ct({}, Wl, t), r.params.watchProperty && (t = Ro(r.params.watchProperty), e instanceof kl && t.includes("entities") && !t.includes("ids") && t.push("ids"), r.params.watchProperty = t), r
}
function Zl() {
return Math.random().toString(36).slice(2)
}
function ed(e) {
return Mr(e).pipe($n(0))
}
function td(e, t) {
var i = Xl.call(this, e, (t = void 0 === t ? {} : t).entityIds) || this;
return i.query = e, i.params = t, i._someDirty = new Xt, i.someDirty$ = an(i.query.select(function(e) {
return e.entities
}), i._someDirty.asObservable()).pipe($n(0), hr(function() {
return i.checkSomeDirty()
})), i.params = ct({}, Wl, t), i.activate(), i.selectIds().pipe(ka(1)).subscribe(function(e) {
Xl.prototype.rebase.call(i, e, {
afterAdd: function(e) {
return e.setHead()
}
})
}), i
}
ut(td, Xl = Vr), td.prototype.setHead = function(e) {
if (this.params.entityIds && e) {
var t = Ro(e);
if (!1 === Ro(this.params.entityIds).some(function(e) {
return -1 < t.indexOf(e)
})) return this
}
return this.forEachId(e, function(e) {
return e.setHead()
}), this._someDirty.next(), this
}, td.prototype.hasHead = function(e) {
return !!this.entities.has(e) && this.getEntity(e).hasHead()
}, td.prototype.reset = function(e, t) {
void 0 === t && (t = {}), this.forEachId(e, function(e) {
return e.reset(t)
})
}, td.prototype.isDirty = function(e, t) {
if (void 0 === t && (t = !0), this.entities.has(e)) {
e = this.getEntity(e);
return t ? e.isDirty$ : e.isDirty()
}
return !1
}, td.prototype.someDirty = function() {
return this.checkSomeDirty()
}, td.prototype.isPathDirty = function(e, t) {
if (this.entities.has(e)) {
var i = this.getEntity(e).getHead(),
e = Gl(this.query.getEntity(e), t),
t = Gl(i, t);
return this.params.comparator(e, t)
}
return null
}, td.prototype.destroy = function(e) {
this.forEachId(e, function(e) {
return e.destroy()
}), e || this._someDirty.complete()
}, td.prototype.instantiatePlugin = function(e) {
return new Yl(this.query, this.params, e)
}, td.prototype.checkSomeDirty = function() {
var e, t, i = this.resolvedIds();
try {
for (var r = ft(i), n = r.next(); !n.done; n = r.next()) {
var s = n.value;
if (this.getEntity(s).isDirty()) return !0
}
} catch (t) {
e = {
error: t
}
} finally {
try {
n && !n.done && (t = r.return) && t.call(r)
} finally {
if (e) throw e.error
}
}
return !1
}, (tu = tu || {}).Update = "UPDATE", {} [tu.Update] = "update", (vr = ru = ru || {}).Update = "UPDATE", vr.AddEntities = "ADD_ENTITIES", vr.SetEntities = "SET_ENTITIES", vr.UpdateEntities = "UPDATE_ENTITIES", vr.RemoveEntities = "REMOVE_ENTITIES", vr.UpsertEntities = "UPSERT_ENTITIES", vr.UpsertManyEntities = "UPSERT_MANY_ENTITIES", (iu = {})[ru.Update] = "update", iu[ru.AddEntities] = "add", iu[ru.SetEntities] = "set", iu[ru.UpdateEntities] = "update", iu[ru.RemoveEntities] = "remove", iu[ru.UpsertEntities] = "upsert", iu[ru.UpsertManyEntities] = "upsertMany";
w = {};
Object.defineProperty(w, "__esModule", {
value: !0
});
var vi = "undefined" != typeof Symbol && "symbol" == typeof Symbol("x"),
id = "undefined" != typeof Map,
rd = "undefined" != typeof Set,
nd = "undefined" != typeof Proxy && void 0 !== Proxy.revocable && "undefined" != typeof Reflect,
sd = vi ? Symbol.for("immer-nothing") : ((nu = {})["immer-nothing"] = !0, nu),
ad = vi ? Symbol.for("immer-draftable") : "__$immer_draftable",
od = vi ? Symbol.for("immer-state") : "__$immer_state",
ld = "undefined" != typeof Symbol && Symbol.iterator || "@@iterator",
dd = {
0: "Illegal state",
1: "Immer drafts cannot have computed properties",
2: "This object has been frozen and should not be mutated",
3: function(e) {
return "Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? " + e
},
4: "An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.",
5: "Immer forbids circular references",
6: "The first or second argument to `produce` must be a function",
7: "The third argument to `produce` must be a function or undefined",
8: "First argument to `createDraft` must be a plain object, an array, or an immerable object",
9: "First argument to `finishDraft` must be a draft returned by `createDraft`",
10: "The given draft is already finalized",
11: "Object.defineProperty() cannot be used on an Immer draft",
12: "Object.setPrototypeOf() cannot be used on an Immer draft",
13: "Immer only supports deleting array indices",
14: "Immer only supports setting array indices and the 'length' property",
15: function(e) {
return "Cannot apply patch, path doesn't resolve: " + e
},
16: 'Sets cannot have "replace" patches.',
17: function(e) {
return "Unsupported patch operation: " + e
},
18: function(e) {
return "The plugin for '" + e + "' has not been loaded into Immer. To enable the plugin, import and call `enable" + e + "()` when initializing your application."
},
20: "Cannot use proxies if Proxy, Proxy.revocable or Reflect are not available",
21: function(e) {
return "produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '" + e + "'"
},
22: function(e) {
return "'current' expects a draft, got: " + e
},
23: function(e) {
return "'original' expects a draft, got: " + e
}
};
function ud(e) {
for (var t = arguments.length, i = new Array(1 < t ? t - 1 : 0), r = 1; r < t; r++) i[r - 1] = arguments[r];
var n = dd[e],
e = n ? "function" == typeof n ? n.apply(null, i) : n : "unknown error nr: " + e;
throw new Error("[Immer] " + e)
}
function cd(e) {
return !!e && !!e[od]
}
function hd(t) {
return !!t && (function() {
if (!t || "object" != typeof t) return !1;
var e = Object.getPrototypeOf(t);
return !e || e === Object.prototype
}() || Array.isArray(t) || !!t[ad] || !!t.constructor[ad] || Td(t) || Ed(t))
}
var pd = "undefined" != typeof Reflect && Reflect.ownKeys ? Reflect.ownKeys : void 0 !== Object.getOwnPropertySymbols ? function(e) {
return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))
} : Object.getOwnPropertyNames,
fd = Object.getOwnPropertyDescriptors || function(t) {
var i = {};
return pd(t).forEach(function(e) {
i[e] = Object.getOwnPropertyDescriptor(t, e)
}), i
};
function md(i, r, t) {
void 0 === t && (t = !1), 0 === gd(i) ? (t ? Object.keys : pd)(i).forEach(function(e) {
t && "symbol" == typeof e || r(e, i[e], i)
}) : i.forEach(function(e, t) {
return r(t, e, i)
})
}
function gd(e) {
var t = e[od];
return t ? 3 < t.type_ ? t.type_ - 4 : t.type_ : Array.isArray(e) ? 1 : Td(e) ? 2 : Ed(e) ? 3 : 0
}
function yd(e, t) {
return 2 === gd(e) ? e.has(t) : Object.prototype.hasOwnProperty.call(e, t)
}
function vd(e, t) {
return 2 === gd(e) ? e.get(t) : e[t]
}
function Sd(e, t, i) {
var r = gd(e);
2 === r ? e.set(t, i) : 3 === r ? (e.delete(t), e.add(i)) : e[t] = i
}
function bd(e, t) {
return e === t ? 0 !== e || 1 / e == 1 / t : e != e && t != t
}
function Td(e) {
return id && e instanceof Map
}
function Ed(e) {
return rd && e instanceof Set
}
function Id(e) {
return e.copy_ || e.base_
}
function wd(e) {
if (Array.isArray(e)) return Array.prototype.slice.call(e);
var t = fd(e);
delete t[od];
for (var i = pd(t), r = 0; r < i.length; r++) {
var n = i[r],
s = t[n];
!1 === s.writable && (s.writable = !0, s.configurable = !0), (s.get || s.set) && (t[n] = {
configurable: !0,
writable: !0,
enumerable: s.enumerable,
value: e[n]
})
}
return Object.create(Object.getPrototypeOf(e), t)
}
function Ad(e, t) {
kd(e) || cd(e) || !hd(e) || (1 < gd(e) && (e.set = e.add = e.clear = e.delete = Od), Object.freeze(e), t && md(e, function(e, t) {
return Ad(t, !0)
}, !0))
}
function Od() {
ud(2)
}
function kd(e) {
return null == e || "object" != typeof e || Object.isFrozen(e)
}
var Cd, Dd = {};
function Md(e) {
var t = Dd[e];
return t || ud(18, e), t
}
function xd(e, t) {
Dd[e] || (Dd[e] = t)
}
function Pd() {
return Cd || ud(0), Cd
}
function Rd(e, t) {
t && (Md("Patches"), e.patches_ = [], e.inversePatches_ = [], e.patchListener_ = t)
}
function Ld(e) {
_d(e), e.drafts_.forEach(Fd), e.drafts_ = null
}
function _d(e) {
e === Cd && (Cd = e.parent_)
}
function Nd(e) {
return Cd = {
drafts_: [],
parent_: Cd,
immer_: e,
canAutoFreeze_: !0,
unfinalizedDrafts_: 0
}
}
function Fd(e) {
e = e[od];
0 === e.type_ || 1 === e.type_ ? e.revoke_() : e.revoked_ = !0
}
function Bd(e, t) {
t.unfinalizedDrafts_ = t.drafts_.length;
var i = t.drafts_[0],
r = void 0 !== e && e !== i;
return t.immer_.useProxies_ || Md("ES5").willFinalizeES5_(t, e, r), r ? (i[od].modified_ && (Ld(t), ud(4)), hd(e) && (e = Ud(t, e), t.parent_ || Vd(t, e)), t.patches_ && Md("Patches").generateReplacementPatches_(i[od], e, t.patches_, t.inversePatches_)) : e = Ud(t, i, []), Ld(t), t.patches_ && t.patchListener_(t.patches_, t.inversePatches_), e !== sd ? e : void 0
}
function Ud(i, r, n) {
if (kd(r)) return r;
var s, a = r[od];
return a ? a.scope_ !== i ? r : a.modified_ ? (a.finalized_ || (a.finalized_ = !0, a.scope_.unfinalizedDrafts_--, s = 4 === a.type_ || 5 === a.type_ ? a.copy_ = wd(a.draft_) : a.copy_, md(3 === a.type_ ? new Set(s) : s, function(e, t) {
return $d(i, a, s, e, t, n)
}), Vd(i, s, !1), n && i.patches_ && Md("Patches").generatePatches_(a, n, i.patches_, i.inversePatches_)), a.copy_) : (Vd(i, a.base_, !0), a.base_) : (md(r, function(e, t) {
return $d(i, a, r, e, t, n)
}, !0), r)
}
function $d(e, t, i, r, n, s) {
if (n === i && ud(5), cd(n)) {
s = Ud(e, n, s && t && 3 !== t.type_ && !yd(t.assigned_, r) ? s.concat(r) : void 0);
if (Sd(i, r, s), !cd(s)) return;
e.canAutoFreeze_ = !1
}
hd(n) && !kd(n) && (!e.immer_.autoFreeze_ && e.unfinalizedDrafts_ < 1 || (Ud(e, n), t && t.scope_.parent_ || Vd(e, n)))
}
function Vd(e, t, i) {
void 0 === i && (i = !1), e.immer_.autoFreeze_ && e.canAutoFreeze_ && Ad(t, i)
}
var Kd = {
get: function(e, t) {
if (t === od) return e;
var i, r, n = Id(e);
if (!yd(n, t)) return i = e, (r = jd(n, t)) ? "value" in r ? r.value : null === (r = r.get) || void 0 === r ? void 0 : r.call(i.draft_) : void 0;
n = n[t];
return !e.finalized_ && hd(n) && n === Hd(e.base_, t) ? (Wd(e), e.copy_[t] = zd(e.scope_.immer_, n, e)) : n
},
has: function(e, t) {
return t in Id(e)
},
ownKeys: function(e) {
return Reflect.ownKeys(Id(e))
},
set: function(e, t, i) {
var r = jd(Id(e), t);
if (null != r && r.set) return r.set.call(e.draft_, i), !0;
if (!e.modified_) {
var n = Hd(Id(e), t),
r = null == n ? void 0 : n[od];
if (r && r.base_ === i) return e.copy_[t] = i, !(e.assigned_[t] = !1);
if (bd(i, n) && (void 0 !== i || yd(e.base_, t))) return !0;
Wd(e), Qd(e)
}
return e.copy_[t] = i, e.assigned_[t] = !0
},
deleteProperty: function(e, t) {
return void 0 !== Hd(e.base_, t) || t in e.base_ ? (e.assigned_[t] = !1, Wd(e), Qd(e)) : delete e.assigned_[t], e.copy_ && delete e.copy_[t], !0
},
getOwnPropertyDescriptor: function(e, t) {
var i = Id(e),
r = Reflect.getOwnPropertyDescriptor(i, t);
return r && {
writable: !0,
configurable: 1 !== e.type_ || "length" !== t,
enumerable: r.enumerable,
value: i[t]
}
},
defineProperty: function() {
ud(11)
},
getPrototypeOf: function(e) {
return Object.getPrototypeOf(e.base_)
},
setPrototypeOf: function() {
ud(12)
}
},
qd = {};
function Hd(e, t) {
var i = e[od];
return (i ? Id(i) : e)[t]
}
function jd(e, t) {
if (t in e)
for (var i = Object.getPrototypeOf(e); i;) {
var r = Object.getOwnPropertyDescriptor(i, t);
if (r) return r;
i = Object.getPrototypeOf(i)
}
}
function Qd(e) {
e.modified_ || (e.modified_ = !0, e.parent_ && Qd(e.parent_))
}
function Wd(e) {
e.copy_ || (e.copy_ = wd(e.base_))
}
md(Kd, function(e, t) {
qd[e] = function() {
return arguments[0] = arguments[0][0], t.apply(this, arguments)
}
}), qd.deleteProperty = function(e, t) {
return isNaN(parseInt(t)) && ud(13), Kd.deleteProperty.call(this, e[0], t)
}, qd.set = function(e, t, i) {
return "length" !== t && isNaN(parseInt(t)) && ud(14), Kd.set.call(this, e[0], t, i, e[0])
};
(A = Gd.prototype).produce = function(e, s, t) {
if ("function" == typeof e && "function" != typeof s) {
var a = s;
s = e;
var o = this;
return function(e) {
var t = this;
void 0 === e && (e = a);
for (var i = arguments.length, r = new Array(1 < i ? i - 1 : 0), n = 1; n < i; n++) r[n - 1] = arguments[n];
return o.produce(e, function(e) {
return s.call.apply(s, [t, e].concat(r))
})
}
}
var i;
if ("function" != typeof s && ud(6), void 0 !== t && "function" != typeof t && ud(7), hd(e)) {
var r = Nd(this),
n = zd(this, e, void 0),
l = !0;
try {
i = s(n), l = !1
} finally {
(l ? Ld : _d)(r)
}
return "undefined" != typeof Promise && i instanceof Promise ? i.then(function(e) {
return Rd(r, t), Bd(e, r)
}, function(e) {
throw Ld(r), e
}) : (Rd(r, t), Bd(i, r))
}
if (!e || "object" != typeof e) return (i = s(e)) === sd ? void 0 : (void 0 === i && (i = e), this.autoFreeze_ && Ad(i, !0), i);
ud(21, e)
}, A.produceWithPatches = function(n, e, t) {
var i, r, s = this;
return "function" == typeof n ? function(e) {
for (var t = arguments.length, i = new Array(1 < t ? t - 1 : 0), r = 1; r < t; r++) i[r - 1] = arguments[r];
return s.produceWithPatches(e, function(e) {
return n.apply(void 0, [e].concat(i))
})
} : [this.produce(n, e, function(e, t) {
i = e, r = t
}), i, r]
}, A.createDraft = function(e) {
hd(e) || ud(8), cd(e) && (e = Xd(e));
var t = Nd(this),
e = zd(this, e, void 0);
return e[od].isManual_ = !0, _d(t), e
}, A.finishDraft = function(e, t) {
e = e && e[od];
e && e.isManual_ || ud(9), e.finalized_ && ud(10);
e = e.scope_;
return Rd(e, t), Bd(void 0, e)
}, A.setAutoFreeze = function(e) {
this.autoFreeze_ = e
}, A.setUseProxies = function(e) {
e && !nd && ud(20), this.useProxies_ = e
}, A.applyPatches = function(e, t) {
for (var i = t.length - 1; 0 <= i; i--) {
var r = t[i];
if (0 === r.path.length && "replace" === r.op) {
e = r.value;
break
}
}
var n = Md("Patches").applyPatches_;
return cd(e) ? n(e, t) : this.produce(e, function(e) {
return n(e, t.slice(i + 1))
})
}, Vr = Gd;
function Gd(e) {
this.useProxies_ = nd, this.autoFreeze_ = !0, "boolean" == typeof(null == e ? void 0 : e.useProxies) && this.setUseProxies(e.useProxies), "boolean" == typeof(null == e ? void 0 : e.autoFreeze) && this.setAutoFreeze(e.autoFreeze), this.produce = this.produce.bind(this), this.produceWithPatches = this.produceWithPatches.bind(this)
}
function zd(e, t, i) {
t = Td(t) ? Md("MapSet").proxyMap_(t, i) : Ed(t) ? Md("MapSet").proxySet_(t, i) : e.useProxies_ ? function(e, t) {
var i = Array.isArray(e),
r = {
type_: i ? 1 : 0,
scope_: t ? t.scope_ : Pd(),
modified_: !1,
finalized_: !1,
assigned_: {},
parent_: t,
base_: e,
draft_: null,
copy_: null,
revoke_: null,
isManual_: !1
},
t = r,
e = Kd;
i && (t = [r], e = qd);
t = Proxy.revocable(t, e), e = t.revoke, t = t.proxy;
return r.draft_ = t, r.revoke_ = e, t
}(t, i) : Md("ES5").createES5Proxy_(t, i);
return (i ? i.scope_ : Pd()).drafts_.push(t), t
}
function Xd(e) {
return cd(e) || ud(22, e),
function i(e) {
if (!hd(e)) return e;
var r, n = e[od],
t = gd(e);
if (n) {
if (!n.modified_ && (n.type_ < 4 || !Md("ES5").hasChanges_(n))) return n.base_;
n.finalized_ = !0, r = Yd(e, t), n.finalized_ = !1
} else r = Yd(e, t);
return md(r, function(e, t) {
n && vd(n.base_, e) === t || Sd(r, e, i(t))
}), 3 === t ? new Set(r) : r
}(e)
}
function Yd(e, t) {
switch (t) {
case 2:
return new Map(e);
case 3:
return Array.from(e)
}
return wd(e)
}
function Jd() {
var r = {};
function l(i, e) {
var t = r[i];
return t ? t.enumerable = e : r[i] = t = {
configurable: !0,
enumerable: e,
get: function() {
var e = this[od];
return a(e), Kd.get(e, i)
},
set: function(e) {
var t = this[od];
a(t), Kd.set(t, i, e)
}
}, t
}
function n(e) {
for (var t = e.length - 1; 0 <= t; t--) {
var i = e[t][od];
if (!i.modified_) switch (i.type_) {
case 5:
u(i) && Qd(i);
break;
case 4:
s(i) && Qd(i)
}
}
}
function s(e) {
for (var t = e.base_, i = e.draft_, r = pd(i), n = r.length - 1; 0 <= n; n--) {
var s = r[n];
if (s !== od) {
var a = t[s];
if (void 0 === a && !yd(t, s)) return !0;
var o = i[s],
s = o && o[od];
if (s ? s.base_ !== a : !bd(o, a)) return !0
}
}
e = !!t[od];
return r.length !== pd(t).length + (e ? 0 : 1)
}
function u(e) {
var t = e.draft_;
if (t.length !== e.base_.length) return !0;
t = Object.getOwnPropertyDescriptor(t, t.length - 1);
return !(!t || t.get)
}
function a(e) {
e.revoked_ && ud(3, JSON.stringify(Id(e)))
}
xd("ES5", {
createES5Proxy_: function(e, t) {
var i = Array.isArray(e),
r = function(e, t) {
if (e) {
for (var i = new Array(t.length), r = 0; r < t.length; r++) Object.defineProperty(i, "" + r, l(r, !0));
return i
}
var n = fd(t);
delete n[od];
for (var s = pd(n), a = 0; a < s.length; a++) {
var o = s[a];
n[o] = l(o, e || !!n[o].enumerable)
}
return Object.create(Object.getPrototypeOf(t), n)
}(i, e),
e = {
type_: i ? 5 : 4,
scope_: t ? t.scope_ : Pd(),
modified_: !1,
finalized_: !1,
assigned_: {},
parent_: t,
base_: e,
draft_: r,
copy_: null,
revoked_: !1,
isManual_: !1
};
return Object.defineProperty(r, od, {
value: e,
writable: !0
}), r
},
willFinalizeES5_: function(e, t, i) {
i ? cd(t) && t[od].scope_ === e && n(e.drafts_) : (e.patches_ && function t(e) {
if (e && "object" == typeof e) {
var i = e[od];
if (i) {
var r = i.base_,
n = i.draft_,
s = i.assigned_;
if (4 === (e = i.type_)) md(n, function(e) {
e !== od && (void 0 !== r[e] || yd(r, e) ? s[e] || t(n[e]) : (s[e] = !0, Qd(i)))
}), md(r, function(e) {
void 0 !== n[e] || yd(n, e) || (s[e] = !1, Qd(i))
});
else if (5 === e) {
if (u(i) && (Qd(i), s.length = !0), n.length < r.length)
for (var a = n.length; a < r.length; a++) s[a] = !1;
else
for (var o = r.length; o < n.length; o++) s[o] = !0;
for (var l = Math.min(n.length, r.length), d = 0; d < l; d++) void 0 === s[d] && t(n[d])
}
}
}
}(e.drafts_[0]), n(e.drafts_))
},
hasChanges_: function(e) {
return (4 === e.type_ ? s : u)(e)
}
})
}
function Zd() {
var m = "replace",
g = "add",
y = "remove";
function d(e) {
if (!hd(e)) return e;
if (Array.isArray(e)) return e.map(d);
if (Td(e)) return new Map(Array.from(e.entries()).map(function(e) {
return [e[0], d(e[1])]
}));
if (Ed(e)) return new Set(Array.from(e).map(d));
var t, i = Object.create(Object.getPrototypeOf(e));
for (t in e) i[t] = d(e[t]);
return i
}
function v(e) {
return cd(e) ? d(e) : e
}
xd("Patches", {
applyPatches_: function(l, e) {
return e.forEach(function(e) {
for (var t = e.path, i = e.op, r = l, n = 0; n < t.length - 1; n++) "object" != typeof(r = vd(r, t[n])) && ud(15, t.join("/"));
var s = gd(r),
a = d(e.value),
o = t[t.length - 1];
switch (i) {
case m:
switch (s) {
case 2:
return r.set(o, a);
case 3:
ud(16);
default:
return r[o] = a
}
case g:
switch (s) {
case 1:
return r.splice(o, 0, a);
case 2:
return r.set(o, a);
case 3:
return r.add(a);
default:
return r[o] = a
}
case y:
switch (s) {
case 1:
return r.splice(o, 1);
case 2:
return r.delete(o);
case 3:
return r.delete(e.value);
default:
return delete r[o]
}
default:
ud(17, i)
}
}), l
},
generatePatches_: function(c, e, t, i) {
switch (c.type_) {
case 0:
case 4:
case 2:
return d = e, u = t, h = i, p = c.base_, f = c.copy_, void md(c.assigned_, function(e, t) {
var i = vd(p, e),
r = vd(f, e),
t = t ? yd(p, e) ? m : g : y;
i === r && t == m || (e = d.concat(e), u.push(t == y ? {
op: t,
path: e
} : {
op: t,
path: e,
value: r
}), h.push(t == g ? {
op: y,
path: e
} : t == y ? {
op: g,
path: e,
value: v(i)
} : {
op: m,
path: e,
value: v(i)
}))
});
case 5:
case 1:
return function(e, t, i) {
var r, n = c.base_,
s = c.assigned_,
a = c.copy_;
a.length < n.length && (n = (r = [a, n])[0], a = r[1], t = (r = [i, t])[0], i = r[1]);
for (var o, l = 0; l < n.length; l++) s[l] && a[l] !== n[l] && (o = e.concat([l]), t.push({
op: m,
path: o,
value: v(a[l])
}), i.push({
op: m,
path: o,
value: v(n[l])
}));
for (var d = n.length; d < a.length; d++) {
var u = e.concat([d]);
t.push({
op: g,
path: u,
value: v(a[d])
})
}
n.length < a.length && i.push({
op: m,
path: e.concat(["length"]),
value: n.length
})
}(e, t, i);
case 3:
return r = e, n = t, s = i, a = c.base_, o = c.copy_, l = 0, a.forEach(function(e) {
var t;
o.has(e) || (t = r.concat([l]), n.push({
op: y,
path: t,
value: e
}), s.unshift({
op: g,
path: t,
value: e
})), l++
}), l = 0, void o.forEach(function(e) {
var t;
a.has(e) || (t = r.concat([l]), n.push({
op: g,
path: t,
value: e
}), s.unshift({
op: y,
path: t,
value: e
})), l++
})
}
var r, n, s, a, o, l, d, u, h, p, f
},
generateReplacementPatches_: function(e, t, i, r) {
i.push({
op: m,
path: [],
value: t
}), r.push({
op: m,
path: [],
value: e.base_
})
}
})
}
function eu() {
var r = function(e, t) {
return (r = Object.setPrototypeOf || {
__proto__: []
}
instanceof Array && function(e, t) {
e.__proto__ = t
} || function(e, t) {
for (var i in t) t.hasOwnProperty(i) && (e[i] = t[i])
})(e, t)
};
function i(e, t) {
function i() {
this.constructor = e
}
r(e, t), e.prototype = (i.prototype = t.prototype, new i)
}
var n = function() {
function e(e, t) {
return this[od] = {
type_: 2,
parent_: t,
scope_: t ? t.scope_ : Pd(),
modified_: !1,
finalized_: !1,
copy_: void 0,
assigned_: void 0,
base_: e,
draft_: this,
isManual_: !1,
revoked_: !1
}, this
}
i(e, Map);
var t = e.prototype;
return Object.defineProperty(t, "size", {
get: function() {
return Id(this[od]).size
}
}), t.has = function(e) {
return Id(this[od]).has(e)
}, t.set = function(e, t) {
var i = this[od];
return l(i), Id(i).has(e) && Id(i).get(e) === t || (s(i), Qd(i), i.assigned_.set(e, !0), i.copy_.set(e, t), i.assigned_.set(e, !0)), this
}, t.delete = function(e) {
if (!this.has(e)) return !1;
var t = this[od];
return l(t), s(t), Qd(t), t.assigned_.set(e, !1), t.copy_.delete(e), !0
}, t.clear = function() {
var t = this[od];
l(t), Id(t).size && (s(t), Qd(t), t.assigned_ = new Map, md(t.base_, function(e) {
t.assigned_.set(e, !1)
}), t.copy_.clear())
}, t.forEach = function(r, n) {
var s = this;
Id(this[od]).forEach(function(e, t, i) {
r.call(n, s.get(t), t, s)
})
}, t.get = function(e) {
var t = this[od];
l(t);
var i = Id(t).get(e);
if (t.finalized_ || !hd(i)) return i;
if (i !== t.base_.get(e)) return i;
i = zd(t.scope_.immer_, i, t);
return s(t), t.copy_.set(e, i), i
}, t.keys = function() {
return Id(this[od]).keys()
}, t.values = function() {
var e, t = this,
i = this.keys();
return (e = {})[ld] = function() {
return t.values()
}, e.next = function() {
var e = i.next();
return e.done ? e : {
done: !1,
value: t.get(e.value)
}
}, e
}, t.entries = function() {
var e, i = this,
r = this.keys();
return (e = {})[ld] = function() {
return i.entries()
}, e.next = function() {
var e = r.next();
if (e.done) return e;
var t = i.get(e.value);
return {
done: !1,
value: [e.value, t]
}
}, e
}, t[ld] = function() {
return this.entries()
}, e
}();
function s(e) {
e.copy_ || (e.assigned_ = new Map, e.copy_ = new Map(e.base_))
}
var a = function() {
function e(e, t) {
return this[od] = {
type_: 3,
parent_: t,
scope_: t ? t.scope_ : Pd(),
modified_: !1,
finalized_: !1,
copy_: void 0,
base_: e,
draft_: this,
drafts_: new Map,
revoked_: !1,
isManual_: !1
}, this
}
i(e, Set);
var t = e.prototype;
return Object.defineProperty(t, "size", {
get: function() {
return Id(this[od]).size
}
}), t.has = function(e) {
var t = this[od];
return l(t), t.copy_ ? !!t.copy_.has(e) || !(!t.drafts_.has(e) || !t.copy_.has(t.drafts_.get(e))) : t.base_.has(e)
}, t.add = function(e) {
var t = this[od];
return l(t), this.has(e) || (o(t), Qd(t), t.copy_.add(e)), this
}, t.delete = function(e) {
if (!this.has(e)) return !1;
var t = this[od];
return l(t), o(t), Qd(t), t.copy_.delete(e) || !!t.drafts_.has(e) && t.copy_.delete(t.drafts_.get(e))
}, t.clear = function() {
var e = this[od];
l(e), Id(e).size && (o(e), Qd(e), e.copy_.clear())
}, t.values = function() {
var e = this[od];
return l(e), o(e), e.copy_.values()
}, t.entries = function() {
var e = this[od];
return l(e), o(e), e.copy_.entries()
}, t.keys = function() {
return this.values()
}, t[ld] = function() {
return this.values()
}, t.forEach = function(e, t) {
for (var i = this.values(), r = i.next(); !r.done;) e.call(t, r.value, r.value, this), r = i.next()
}, e
}();
function o(i) {
i.copy_ || (i.copy_ = new Set, i.base_.forEach(function(e) {
var t;
hd(e) ? (t = zd(i.scope_.immer_, e, i), i.drafts_.set(e, t), i.copy_.add(t)) : i.copy_.add(e)
}))
}
function l(e) {
e.revoked_ && ud(3, JSON.stringify(Id(e)))
}
xd("MapSet", {
proxyMap_: function(e, t) {
return new n(e, t)
},
proxySet_: function(e, t) {
return new a(e, t)
}
})
}
var tu = new Vr,
vr = tu.produce,
iu = tu.produceWithPatches.bind(tu),
ru = tu.setAutoFreeze.bind(tu),
nu = tu.setUseProxies.bind(tu),
vi = tu.applyPatches.bind(tu),
A = tu.createDraft.bind(tu),
tu = tu.finishDraft.bind(tu);
w.Immer = Vr, w.applyPatches = vi, w.castDraft = function(e) {
return e
}, w.castImmutable = function(e) {
return e
}, w.createDraft = A, w.current = Xd, w.default = vr, w.enableAllPlugins = function() {
Jd(), eu(), Zd()
}, w.enableES5 = Jd;
A = w.enableMapSet = eu;
w.enablePatches = Zd, w.finishDraft = tu, w.immerable = ad, w.isDraft = cd, w.isDraftable = hd, w.nothing = sd, w.original = function(e) {
return cd(e) || ud(23, e), e[od].base_
};
var su = w.produce = vr;
w.produceWithPatches = iu;
var au = w.setAutoFreeze = ru;
w.setUseProxies = nu;
const ou = /^((?:[^\/;?#]+:)?)(\/\/[^\/\;?#]*)?(.*?)??(;.*?)?(\?.*?)?(#.*?)?$/,
lu = /^([^\/;?#]*)(.*)$/,
du = /(?:\/|^)\.(?=\/)/g,
uu = /(?:\/|^)\.\.\/(?!\.\.\/).*?(?=\/)/g,
cu = {
buildAbsoluteURL: function(e, t, i) {
if (i = i || {}, e = e.trim(), !(t = t.trim())) {
if (!i.alwaysNormalize) return e;
const t = cu.parseURL(e);
if (!t) throw new Error("Error trying to parse base URL.");
return t.path = cu.normalizePath(t.path), cu.buildURLFromParts(t)
}
const r = cu.parseURL(t);
if (!r) throw new Error("Error trying to parse relative URL.");
if (r.scheme) return i.alwaysNormalize ? (r.path = cu.normalizePath(r.path), cu.buildURLFromParts(r)) : t;
const n = cu.parseURL(e);
if (!n) throw new Error("Error trying to parse base URL.");
if (!n.netLoc && n.path && "/" !== n.path[0]) {
const e = lu.exec(n.path);
n.netLoc = e[1], n.path = e[2]
}
n.netLoc && !n.path && (n.path = "/");
const s = {
scheme: n.scheme,
netLoc: r.netLoc,
path: null,
params: r.params,
query: r.query,
fragment: r.fragment
};
if (!r.netLoc && (s.netLoc = n.netLoc, "/" !== r.path[0]))
if (r.path) {
i.inheritQuery && (r.query || (s.query = n.query));
const e = n.path,
t = e.substring(0, e.lastIndexOf("/") + 1) + r.path;
s.path = cu.normalizePath(t)
} else s.path = n.path, r.params || (s.params = n.params, r.query || (s.query = n.query));
return null === s.path && (s.path = i.alwaysNormalize ? cu.normalizePath(r.path) : r.path), cu.buildURLFromParts(s)
},
parseURL: function(e) {
e = ou.exec(e);
return e ? {
scheme: e[1] || "",
netLoc: e[2] || "",
path: e[3] || "",
params: e[4] || "",
query: e[5] || "",
fragment: e[6] || ""
} : null
},
normalizePath: function(e) {
for (e = e.split("").reverse().join("").replace(du, ""); e.length !== (e = e.replace(uu, "")).length;);
return e.split("").reverse().join("")
},
buildURLFromParts: function(e) {
return e.scheme + e.netLoc + e.path + e.params + e.query + e.fragment
},
getHostName: function(e) {
let t;
return e && (t = -1 < e.indexOf("://") ? e.split("/")[2] : e.split("/")[0], t = t.split(":")[0], t = t.split("?")[0]), t
}
};
var hu, pu, fu, mu, gu, yu, vu, Su, bu = cu;
function Tu(e) {
return null != e && !e.startsWith("http://") && !e.startsWith("https://")
}
function Eu(e) {
return null == e || Tu(e) ? null : cu.getHostName(e)
}
const Iu = [".*.itunes.apple.com"],
wu = {
deviceName: "&xapdn=",
deviceModel: "&xapdm=",
language: "&xapdl=",
dsid: "&xapdsid=",
subs: "&xapsub="
};
function Au(e, t) {
return !e || e === Eu(t)
}(iu = hu = hu || {})[iu.DOVI = 4] = "DOVI", iu[iu.HEVC = 3] = "HEVC", iu[iu.VP09 = 2] = "VP09", iu[iu.AVC = 1] = "AVC", iu[iu.UNKNOWN = 0] = "UNKNOWN", (ru = pu = pu || {})[ru.PQ = 3] = "PQ", ru[ru.HLG = 2] = "HLG", ru[ru.SDR = 1] = "SDR", ru[ru.UNKNOWN = 0] = "UNKNOWN", (w = fu = fu || {})[w.ALAC = 7] = "ALAC", w[w.FLAC = 6] = "FLAC", w[w.EC3 = 5] = "EC3", w[w.AC3 = 4] = "AC3", w[w.XHEAAC = 3] = "XHEAAC", w[w.AAC = 2] = "AAC", w[w.MP3 = 1] = "MP3", w[w.UNKNOWN = 0] = "UNKNOWN", (nu = mu = mu || {})[nu.VALID = 1] = "VALID", nu[nu.INVALID = 0] = "INVALID";
const Ou = ["via", "x-apple-request-uuid"],
ku = {
maxNumRetry: 4,
retryDelayMs: 0,
maxRetryDelayMs: 0
},
Cu = {
maxNumRetry: 6,
retryDelayMs: 1e3,
maxRetryDelayMs: 8e3
},
Du = {
maxNumRetry: 0,
retryDelayMs: 0,
maxRetryDelayMs: 0
},
Mu = {
default: {
maxTimeToFirstByteMs: 5e3,
maxLoadTimeMs: 2e4,
autoRetry: !1,
timeoutRetry: Du,
errorRetry: Du
},
customURL: {
maxTimeToFirstByteMs: 1e4,
maxLoadTimeMs: 2e4,
autoRetry: !1,
timeoutRetry: Du,
errorRetry: Du
}
},
xu = {
maxNumRetry: 8,
retryDelayMs: 1e3,
maxRetryDelayMs: 2e4,
backoff: "linear"
},
Pu = Object.assign(Object.assign({}, xu), {
maxNumRetry: 1
}),
Ru = {
autoStartLoad: !0,
startPosition: NaN,
defaultAudioCodec: void 0,
defaultVideoCodec: void 0,
debug: !1,
debugLevel: "info",
buildType: void 0,
minFramesBeforeSwitchingLevel: 11,
minTargetDurations: 3,
maxBufferLength: 60,
maxBufferHole: .5,
maxSeekHole: 2,
nudgeFromEventSeek: !0,
jaggedSeekTolerance: 0,
discontinuitySeekTolerance: 2,
bufferedSegmentEjectionToleranceMs: .5,
almostDryBufferSec: .5,
maxTotalDurationTolerance: .1,
lowBufferThreshold: .5,
lowBufferWatchdogPeriod: .5,
highBufferWatchdogPeriod: 3,
seekWatchdogPeriod: 5,
nudgeOffset: .1,
nudgeMaxRetry: 3,
maxFragLookUpTolerance: .2,
initialLiveManifestSize: 1,
liveSyncDurationCount: 3,
liveMaxLatencyDurationCount: 1 / 0,
liveSyncDuration: void 0,
liveMaxLatencyDuration: void 0,
liveFlushExpiredFrags: !0,
liveMaxUnchangedPlaylistRefresh: 3,
liveEdgeForZeroStartPositon: !1,
livePlaylistUpdateStaleness: 2,
livePlaylistDurationNudge: .001,
allowFastSwitchUp: !1,
minMatchGroupDuration: 5,
desiredIframeFPS: 8,
initialIframeFPS: 6,
minRemainingTimeInMediaPipeline: 3,
leftMediaTimeToAutoPause: 10,
startTargetDurationFactor: .9,
minRequiredStartDuration: 4,
maxRequiredStartDuration: 15,
enableWorker: !0,
enableWebCrypto: !0,
keySystemPreference: void 0,
useMultipleKeySessions: !1,
enablePlayReadyKeySystem: !1,
useMediaKeySystemAccessFilter: !1,
playReadyMessageFormat: "utf16",
startLevel: void 0,
livePlaylistRefreshDelay: 2500,
liveMinPlayingBufferLen: 5,
enableIFramePreloading: !0,
useMediaCapabilities: !1,
enableID3Cues: !0,
certLoadPolicy: Mu,
keyLoadPolicy: {
default: {
maxTimeToFirstByteMs: 5e3,
maxLoadTimeMs: 2e4,
autoRetry: !1,
timeoutRetry: Pu,
errorRetry: xu
},
customURL: {
maxTimeToFirstByteMs: 1e4,
maxLoadTimeMs: 2e4,
autoRetry: !1,
timeoutRetry: Pu,
errorRetry: xu
}
},
manifestLoadPolicy: {
default: {
maxTimeToFirstByteMs: 1e4,
maxLoadTimeMs: 2e4,
autoRetry: !1,
timeoutRetry: {
maxNumRetry: 2,
retryDelayMs: 0,
maxRetryDelayMs: 0
},
errorRetry: {
maxNumRetry: 1,
retryDelayMs: 1e3,
maxRetryDelayMs: 8e3
}
},
customURL: {
maxTimeToFirstByteMs: 1e4,
maxLoadTimeMs: 1e4,
autoRetry: !1,
timeoutRetry: {
maxNumRetry: 2,
retryDelayMs: 0,
maxRetryDelayMs: 0
},
errorRetry: {
maxNumRetry: 1,
retryDelayMs: 1e3,
maxRetryDelayMs: 8e3
}
}
},
trickPlaybackConfig: {
enabled: !0,
minIframeDuration: 8
},
playlistLoadPolicy: {
default: {
maxTimeToFirstByteMs: 1e4,
maxLoadTimeMs: 2e4,
autoRetry: !1,
timeoutRetry: {
maxNumRetry: 2,
retryDelayMs: 0,
maxRetryDelayMs: 0
},
errorRetry: {
maxNumRetry: 2,
retryDelayMs: 1e3,
maxRetryDelayMs: 8e3
}
},
customURL: {
maxTimeToFirstByteMs: 1e4,
maxLoadTimeMs: 1e4,
autoRetry: !1,
timeoutRetry: {
maxNumRetry: 2,
retryDelayMs: 0,
maxRetryDelayMs: 0
},
errorRetry: {
maxNumRetry: 2,
retryDelayMs: 1e3,
maxRetryDelayMs: 8e3
}
}
},
fragLoadPolicy: {
default: {
maxTimeToFirstByteMs: 5e3,
maxLoadTimeMs: 2e4,
autoRetry: !1,
timeoutRetry: ku,
errorRetry: Cu,
forceContentLenCheckIfNoHeader: !1,
reportCDNServer: !0
},
customURL: {
maxTimeToFirstByteMs: 1e4,
maxLoadTimeMs: 2e4,
autoRetry: !1,
timeoutRetry: ku,
errorRetry: Cu,
reportCDNServer: !0
}
},
steeringManifestLoadPolicy: {
default: {
maxTimeToFirstByteMs: 1e4,
maxLoadTimeMs: 2e4,
autoRetry: !1,
timeoutRetry: {
maxNumRetry: 2,
retryDelayMs: 0,
maxRetryDelayMs: 0
},
errorRetry: {
maxNumRetry: 1,
retryDelayMs: 1e3,
maxRetryDelayMs: 8e3
}
},
customURL: {
maxTimeToFirstByteMs: 1e4,
maxLoadTimeMs: 1e4,
autoRetry: !1,
timeoutRetry: {
maxNumRetry: 2,
retryDelayMs: 0,
maxRetryDelayMs: 0
},
errorRetry: {
maxNumRetry: 1,
retryDelayMs: 1e3,
maxRetryDelayMs: 8e3
}
}
},
maxNumAddLevelToPenaltyBox: 4,
firstAudioMustOverlapVideoStart: !1,
keyMinHoldTimeBeforeCleanup: 15e3,
startFragPrefetch: !1,
appendErrorMaxRetry: 3,
alwaysResetOnNewCC: !1,
fLoader: void 0,
pLoader: void 0,
xhrSetup: void 0,
iframeMaxExitSeekDuration: 2e3,
iframeStallMaxRetry: 5,
audioPrimingDelay: 0,
enableCEA708Captions: !0,
customTextTrackCueRenderer: !1,
enableWebVTT: !0,
captionsTextTrack1Label: "English",
captionsTextTrack1LanguageCode: "en",
captionsTextTrack2Label: "Spanish",
captionsTextTrack2LanguageCode: "es",
enableDualTrackSelection: !1,
condenseSubtitleTrack: !1,
nativeTextTrackChangeHandling: !0,
earlyFragTolerance: 7,
vttConcurrentLoadCount: 1,
trottleCheckInterval: 2e3,
subtitleLeadTime: 30,
lateTolerance: 2,
stretchShortVideoTrack: !1,
forceKeyFrameOnDiscontinuity: !0,
useFirstLevelAtIncompatDiscontinuity: !0,
abrBandwidthEstimator: "bandwidth-history-controller",
abrEwmaDefaultEstimate: 5e5,
abrDefaultEstimate: 5e5,
abrBandWidthFactor: .95,
abrBandWidthUpFactor: .9,
abrMaxWithRealBitrate: !1,
maxStarvationDelay: 4,
maxLoadingDelay: 4,
minAutoBitrate: 0,
enableRtcReporting: !1,
rtcIntervalTimeout: 3e5,
rtcSender: "HLSJS",
rtcSessionTag: "none",
useHTTPPlaybackSessionId: !1,
warmupCdms: !1,
enablePerformanceLogging: !1,
overridePlaybackRate: !1,
nativeControlsEnabled: !1,
useCustomMediaFunctions: !0,
seekEventThrottleMs: 150,
enableAdaptiveStartup: !0,
bandwidthHistoryWindowSize: 12e4,
bandwidthHistoryTTL: 6e5,
bandwidthHistoryAggregationMethod: "quadratic-time-weighted",
bandwidthHistoryGetEstimateThrottleMs: 1e3,
defaultTargetDuration: 10,
targetStartupMs: 4e3,
adaptiveStartupMetricsOverride: {
maxValidHeight: 1080,
maxValidBitrate: 1 / 0,
maxPreferredBitrate: 1 / 0
},
bandwidthHistoryStorageKey: "AppleHLS-bandwidth-estimation",
storageKeyPrefix: "AppleHLS-",
storage: {
get: "undefined" == typeof localStorage ? void 0 : localStorage.getItem.bind(localStorage),
set: "undefined" == typeof localStorage ? void 0 : localStorage.setItem.bind(localStorage)
},
minFragmentCount: 10,
minPlaylistCount: 5,
enableCDNFallback: !0,
enableQueryParamsForITunes: !1,
gapless: !1,
useViewportSizeForLevelCap: !1,
statDefaults: {
playlistLoadTimeMs: 500,
playlistParseTimeMs: 50,
fragParseTimeMs: 50,
fragBufferCreationDelayMs: 200,
dataFragAppendMs: 50,
initFragAppendMs: 50
},
disableVideoCodecList: new Set([]),
disableAudioCodecList: new Set([fu.ALAC, fu.FLAC, fu.XHEAAC]),
useHighestVideoCodecPrivate: !0,
sessionDataAutoLoad: {
"com.apple.hls.chapters": !0
}
},
Lu = Object.assign(Object.assign({}, {
itemId: "Nah",
mediaOptionId: "Nah"
}), {
mediaOptionType: void 0
}),
_u = e => {
var {
itemId: t,
mediaOptionId: e
} = e;
return "Nah" !== t && "Nah" !== e
};
(iu = gu = gu || {})[iu.Variant = 0] = "Variant", iu[iu.AltAudio = 1] = "AltAudio", iu[iu.Subtitle = 2] = "Subtitle";
const Nu = ["variant", "altAudio", "subtitle"],
Fu = [gu.Variant, gu.AltAudio, gu.Subtitle],
Bu = [gu.Variant, gu.AltAudio];
(ru = yu = yu || {})[ru.Variant = 0] = "Variant", ru[ru.AltAudio = 1] = "AltAudio";
const Uu = ["variant", "altAudio"];
function $u(e) {
switch (e) {
case gu.Variant:
return yu.Variant;
case gu.AltAudio:
return yu.AltAudio;
default:
return null
}
}
function Vu(e) {
return e === yu.Variant ? gu.Variant : gu.AltAudio
}(w = vu = vu || {})[w.NO = 0] = "NO", w[w.YES = 1] = "YES", (nu = Su = Su || {}).UNKNOWN = "unkn", nu.VIDEO = "vide", nu.AUDIO = "soun", nu.SUBTITLE = "sbtl", nu.CLOSEDCAPTION = "clcp";
const Ku = {
search: function(e, t) {
let i, r, n = 0,
s = (null == e ? void 0 : e.length) - 1;
for (; n <= s;) {
var a = t(r = e[i = (n + s) / 2 | 0]);
if (0 < a) n = 1 + i;
else {
if (!(a < 0)) return r;
s = i - 1
}
}
return null
}
};
var qu = Ku,
Hu = {
findFragmentBySNAndBuffer: function(e, t, i = 0, r = 0, n = 0) {
let s;
e = e ? t[e.mediaSeqNum - t[0].mediaSeqNum + 1] : null;
return s = i < r ? (r - n < i && (n = 0), e && !this.fragmentWithinToleranceTest(i, n, e) ? e : Ku.search(t, this.fragmentWithinToleranceTest.bind(null, i, n))) : t[t.length - 1], s
},
fragmentWithinToleranceTest: function(e, t, i) {
t = Math.min(t, i.duration);
return i.start + i.duration - t <= e ? 1 : i.start - t > e && i.start ? -1 : 0
}
};
const ju = {
startFragmentInCC: function(e, t, i) {
let r = t - i.discoSeqNum;
if (0 === r) {
const t = e[i.mediaSeqNum - e[0].mediaSeqNum - 1];
r = t && t.discoSeqNum === i.discoSeqNum ? -1 : 0
}
return r
},
endFragmentInCC: function(e, t, i) {
let r = t - i.discoSeqNum;
if (0 === r) {
const t = e[i.mediaSeqNum - e[0].mediaSeqNum + 1];
r = t && t.discoSeqNum === i.discoSeqNum ? 1 : 0
}
return r
},
findStartEndFragmentsInCC: function(e, t, i) {
let r, n;
return 0 < (null == e ? void 0 : e.length) && ne(t) && (r = Ku.search(e, ju.startFragmentInCC.bind(null, e, t)), n = Ku.search(e, ju.endFragmentInCC.bind(null, e, t))), r && !ne(r.discoSeqNum) && (r = void 0), n && !ne(n.discoSeqNum) && (n = void 0), {
startFrag: r,
endFrag: n
}
},
getTimeRangeDictForCC: function(e, t, i) {
var {
startFrag: t,
endFrag: i
} = ju.findStartEndFragmentsInCC(e, t, i);
return {
start: t.start,
end: i.start + i.duration
}
},
getTimeRangeForCC: function(e, t, i) {
var {
startFrag: t,
endFrag: i
} = ju.findStartEndFragmentsInCC(e, t, i);
let r = [];
return t && i && (r = [t.start, i.start + i.duration]), r
},
snapToCCTimeRange: function(e, t, i, r) {
r = ju.getTimeRangeForCC(t, i, r);
return null != r && r.length ? Math.min(r[1], Math.max(r[0], e)) : e
},
getMinTimeForCC(e, t, i, r) {
if (null == e || !e.length) return 0;
let n = 0;
if (ne(i) && e) {
e = ju.getTimeRangeForCC(e, i, r);
if (e) {
const s = ju.getTimeRangeForCC(t, i, r);
n = null != s && s.length ? Math.max(s[0], e[0]) : e[0]
}
}
return n
},
discoSeqNumForTime(e, t, i = 0) {
i = Ku.search(e, Hu.fragmentWithinToleranceTest.bind(null, t, i));
return null == i ? void 0 : i.discoSeqNum
}
};
var Qu = ju;
const Wu = $i(void 0);
function Gu(e, t, i = 1) {
return e.pipe(ln(t), Ds(i))
}
function zu(e, t) {
var i = e.timeline;
return {
seconds: (e.seconds - i.rootTimeSeconds) / i.rate * t.rate + t.rootTimeSeconds,
timeline: t
}
}
class Xu {
constructor() {
this._timeline = null
}
get forward() {
var e;
return 0 < (null === (e = this.timeline) || void 0 === e ? void 0 : e.rate)
}
get isStarted() {
return Boolean(this.hostClock)
}
start(e) {
this.stopTime = null, this._timeline = Object.assign({}, e);
const t = {
rootTimeSeconds: performance.now() / 1e3,
rate: 1
};
this.hostClock = {
timeline: t,
getCurrentTime: () => ({
seconds: performance.now() / 1e3,
timeline: t
})
}
}
pause() {
this.isStarted && (this.stopTime = this.getCurrentTime())
}
stop() {
this.pause(), this.hostClock = null, this._timeline = null
}
get timeline() {
return this._timeline
}
getCurrentTime() {
return this.stopTime || zu(this.hostClock.getCurrentTime(), this.timeline)
}
}
class Yu {
constructor(e) {
this._timeline = e, this.mediaRootTime = this.lastTimeSeconds = e.rootTimeSeconds
}
get timeline() {
return Object.assign({}, this._timeline)
}
getCurrentTime() {
return {
seconds: this.lastTimeSeconds,
timeline: Object.assign({}, this._timeline)
}
}
}
const Ju = {
name: "ifm"
};
class Zu {
constructor(e, t) {
this.config = e, this.logger = t, this.scaledFragments = [], this.iframeClock = new Xu, this.hasMore$ = new yi(!0), this.logger = t.child(Ju)
}
destroy() {
this.stop()
}
resetScaledSegments() {
this.scaledFragments = []
}
get anchorFrag() {
return this.scaledFragments.length ? this.scaledFragments[0] : null
}
get lastFrag() {
return this.scaledFragments.length ? this.scaledFragments.slice(-1)[0] : null
}
get isStarted() {
return Boolean(this.iframeClock.isStarted)
}
get iframeRate() {
var e;
return null !== (e = null === (e = this.iframeClock.timeline) || void 0 === e ? void 0 : e.rate) && void 0 !== e ? e : 0
}
get iframeClockTimeSeconds() {
return Math.max(0, this.iframeClock.getCurrentTime().seconds)
}
get mediaAppendClockTimeSeconds() {
var e;
return null !== (e = null === (e = this.mediaAppendClock) || void 0 === e ? void 0 : e.getCurrentTime().seconds) && void 0 !== e ? e : 0
}
get mediaRootTime() {
var e;
return null === (e = this.mediaAppendClock) || void 0 === e ? void 0 : e.mediaRootTime
}
pause() {
this.iframeClock.pause()
}
stop() {
this.hasMore$.next(!0), this.iframeClock.stop(), this.mediaAppendClock = null, this.resetScaledSegments()
}
checkHasMore() {
this.hasMore$.next(!0)
}
startClocksAndGetFirstFragment(e, t, i, r, n) {
let s = Ku.search(e, Hu.fragmentWithinToleranceTest.bind(null, r, 1e-4));
if (!s && r >= e[e.length - 1].start && (s = e[e.length - 1]), !s) return this.logger.error(`startClocksAndGetFirstFragment => no anchorFrag for time ${r}`), this.hasMore$.next(!1), null;
var a = ne(n) ? n : s.discoSeqNum,
a = Qu.getMinTimeForCC(e, t, a, this.logger),
r = ne(n) && 1 < i ? a : r,
a = 1 < i ? Math.ceil(r) : Math.ceil(a);
return this.iframeClock.start({
rootTimeSeconds: r,
rate: i
}), this.mediaAppendClock = new Yu({
rootTimeSeconds: a,
rate: 1
}), {
frag: s,
newMediaRootTime: a
}
}
getNextFragment(e, t, i) {
const r = this.lastFrag,
{
iframeClock: n,
mediaAppendClock: s
} = this,
a = n.timeline;
s.lastTimeSeconds = t;
var o = n.forward ? 1 : -1;
let l, d = Math.max(0, Math.min(r.mediaSeqNum - e[0].mediaSeqNum + o, e.length - 1));
if (r.mediaSeqNum !== e[d].mediaSeqNum)
do {
l = e[d];
const i = n.forward ? l.start : l.start + l.duration;
if (zu({
seconds: i,
timeline: a
}, s.timeline).seconds >= t && (n.forward && i >= this.iframeClockTimeSeconds || !n.forward && i <= this.iframeClockTimeSeconds)) break
} while (d += o, 0 < d && d < e.length);
return l || (this.logger.error(`getNextFragment(bufferEnd: ${t}) => no more frags, but we should have found an end fragment, setting hasMore to false`), this.hasMore$.next(!1)), {
frag: l
}
}
nextFragment(e, t, i, r) {
let n, s;
if (this.isStarted && i !== this.iframeRate && (s = this.iframeClockTimeSeconds, this.stop()), this.isStarted) {
if (n = this.getNextFragment(e, r, i), !n.frag) return;
if (n.frag.discoSeqNum !== this.anchorFrag.discoSeqNum) {
const a = this.iframeClockTimeSeconds;
this.stop();
const s = this.startClocksAndGetFirstFragment(e, t, i, a, n.frag.discoSeqNum)["newMediaRootTime"];
n.newMediaRootTime = s
}
} else if (n = this.startClocksAndGetFirstFragment(e, t, i, null != s ? s : r), !n) return;
var r = n["frag"],
r = this.handleNextFrag(e, r);
return Object.assign(Object.assign({}, n), {
frag: r
})
}
handleNextFrag(e, t) {
const i = Object.assign(Object.assign({}, t), {
iframeMediaStart: NaN,
iframeMediaDuration: NaN
}),
{
mediaAppendClock: r,
iframeClock: n
} = this;
this.iframeClockBounds = Qu.getTimeRangeDictForCC(e, i.discoSeqNum, this.logger);
var s = r.getCurrentTime().seconds,
t = n.timeline.rate;
return ne(i.iframeOriginalStart) || (i.iframeOriginalStart = i.start), i.start = i.iframeMediaStart = s, i.iframeMediaDuration = Math.max(i.duration / Math.abs(t), 1 / this.config.minIframeDuration), this.scaledFragments.push(i), this.isEndFrag(e, i) && this.hasMore$.next(!1), i
}
get hasMore() {
return this.hasMore$.value
}
handleWaitForMore() {
return this.isStarted ? (this.iframeClock.getCurrentTime(), Gu(this.hasMore$, e => !0 === e).pipe(Za(() => {}))) : Wu
}
isEndFrag(e, t) {
var i = e[0],
r = e[e.length - 1],
e = this.iframeClock.forward;
return !e && (null == i ? void 0 : i.mediaSeqNum) === t.mediaSeqNum || e && (null == r ? void 0 : r.mediaSeqNum) === t.mediaSeqNum
}
}
function ec(e, t) {
for (var i = 0; i < t.length; i++) {
var r = t[i];
r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r)
}
}
function tc(t) {
return function(e) {
return e.lift(new nc(t))
}
}
var ic, rc, nc = (ec(sc.prototype, [{
key: "call",
value: function(e, t) {
return t.subscribe(e)
}
}]), sc);
function sc(e) {
! function(e) {
if (!(e instanceof sc)) throw new TypeError("Cannot call a class as a function")
}(this), "tag" in this ? Object.defineProperty(this, "tag", {
value: void 0,
enumerable: !0,
configurable: !0,
writable: !0
}) : this.tag = void 0, this.tag = e
}
function ac(e) {
const {
method: t,
isEncrypted: i,
uri: r,
format: n,
formatversions: s
} = e, a = {
method: t,
isEncrypted: i,
uri: r,
format: n,
formatversions: s,
iv: e.ivBuf ? new Uint8Array(e.ivBuf) : null
};
return e.keyIdBuf && (a.keyId = new Uint8Array(e.keyIdBuf)), e.keyBuf && (a.key = new Uint8Array(e.keyBuf)), e.psshBuf && (a.pssh = new Uint8Array(e.psshBuf)), a
}(iu = ic = ic || {}).MustRequestResponse = "MustRequestResponse", iu.WaitingForKeyResponse = "WaitingForKeyResponse", iu.GotKeyResponse = "GotKeyResponse";
class oc extends Error {
constructor(e, t) {
super(e), this.code = t
}
}
class lc extends p {
constructor(e, t, i, r, n, s) {
super(o, e, t, i, n), this.code = r, this.isTimeout = s, this.response = n
}
}
class dc extends lc {
constructor(e, t, i, r, n) {
super(n ? "manifestLoadTimeOut" : "manifestLoadError", e, t, i, r, n)
}
}
class uc extends lc {
constructor(e, t, i, r, n, s, a, o) {
switch (super("", e, t, i, r, n), this.mediaOptionType = s, this.mediaOptionId = a, this.url = o, s) {
case gu.Variant:
this.details = n ? "levelLoadTimeOut" : N;
break;
case gu.AltAudio:
this.details = n ? "audioTrackLoadTimeOut" : "audioTrackLoadError";
break;
case gu.Subtitle:
this.details = n ? "subtitleTrackLoadTimeout" : "subtitleTrackLoadError"
}
}
}
class cc extends lc {
constructor(e, t, i, r) {
super("sessionDataLoadError", e, t, i, r, !1)
}
}
class hc extends lc {
constructor(e, t, i, r, n, s, a) {
super(n ? "fragLoadTimeOut" : "fragLoadError", e, t, i, r, n), this.mediaOptionId = s.mediaOptionId, this.mediaOptionType = s.mediaOptionType, this.stats = a
}
}
class pc extends dr {
constructor(e, t, i) {
super(), this.message = e, this.code = t, this.stats = i
}
}
class fc extends lc {
constructor(e, t, i) {
super("fragAbortError", !1, "Fragment abort", 0, i, !1), this.candidateMediaOptionId = t, this.mediaOptionId = e.mediaOptionId, this.mediaOptionType = e.mediaOptionType
}
}
class mc extends lc {
constructor(e, t, i, r = []) {
super("keyLoadTimeOut", !1, e, i.code, i, !0), this.keyuri = t, this.response = i, this.mediaOptionIds = r
}
}(ru = rc = rc || {})[ru.InvalidState = 0] = "InvalidState", ru[ru.Abort = 1] = "Abort", ru[ru.OutputRestricted = 2] = "OutputRestricted", ru[ru.AlreadyFailedKey = 3] = "AlreadyFailedKey", ru[ru.HttpError = 4] = "HttpError", ru[ru.InternalError = 5] = "InternalError", ru[ru.LicenseServerError = 6] = "LicenseServerError", ru[ru.InsufficientCPC = 7] = "InsufficientCPC";
class gc extends lc {
constructor(e, t, i, r, n, s, a = !1, o = []) {
super("keyLoadError", a, e, i, r, !1), this.keyuri = t, this.isOkToRetry = n, this.keyErrorReason = s, this.mediaOptionIds = o
}
}
class yc extends p {
constructor(e, t, i, r, n) {
super(s, "keySystemGenericError", !0, e, r), this.keyuri = t, this.code = i, this.response = r, this.keysystemstring = n
}
}
function vc(e, t) {
return e instanceof gc ? new gc(e.message, e.keyuri, e.code, e.response, e.isOkToRetry, e.keyErrorReason, e.fatal, t) : e instanceof mc ? new mc(e.message, e.keyuri, $.CryptResponseReceivedSlowly, t) : e ? new V(e.fatal, e.reason, $.InternalError) : null
}
const Sc = {
id: "fairplaystreaming",
systemStringPrefix: "com.apple.fps",
keyFormatString: "com.apple.streamingkeydelivery",
securityLevels: {
AppleBaseline: 0,
AppleMain: 1,
Main: 1,
Baseline: 0
}
};
class bc extends kl {
constructor(e) {
super(e), this.store = e
}
get unresolvedUriLoading$() {
return this.selectEntityAction(Eo.Add).pipe(hr(e => e.map(e => this.getEntity(e))))
}
}
class Tc {
constructor(e) {
this.store = e
}
createUnresolvedUriLoading(e, t, i) {
Do("loader.create.unresolvedUriLoading"), this.store.add({
uri: e,
responseType: t,
userAgent: i
})
}
removeUnresolvedUriLoading(e) {
Do("loader.remove.unresolvedUriLoading"), this.store.remove(e)
}
}
const Ec = new class extends fl {
constructor() {
super({}, {
name: "loader",
producerFn: su,
idKey: "uri"
})
}
};
let Ic = null;
class wc extends t {
trigger(e, t) {
try {
this.emit(e, e, t), "hlsFragLoadProgress" !== e.toString() && ("hlsInternalError" !== e && "hlsError" !== e || !t.length || JSON.stringify(t[0], ["fatal", "details", "reason"]), e.toString())
} catch (t) {
Qe().warn(`error in event listener for ${e}: ${t.message}`)
}
}
}
class Ac {
constructor(e, t) {
this.target = e, this._this = t
}
eventWithOptions(e, t, i, r = this._this) {
let n = rn(this.target, e, t);
return this.target instanceof wc && (n = n.pipe(hr(([, e]) => e))), i && (r && (i = i.bind(r)), n = n.pipe(Za(i))), n
}
event(e, t, i = this._this) {
return this.eventWithOptions(e, void 0, t, i)
}
listen(e, t, i, r = this._this) {
return this.event(e, i, r).pipe(Va(t)).subscribe()
}
}
function Oc(e, t) {
return new Ac(e, t)
}
function kc(e, t, i) {
var r;
return {
currentTarget: null !== (r = null == i ? void 0 : i.currentTarget) && void 0 !== r ? r : e,
target: null !== (i = null == i ? void 0 : i.target) && void 0 !== i ? i : e,
type: t
}
}
function Cc(y, v) {
return new $t(e => {
const {
maxTimeToFirstByteMs: t,
maxLoadTimeMs: i
} = v, r = new XMLHttpRequest, n = {
trequest: performance.now(),
tfirst: NaN,
tload: NaN,
loaded: 0,
total: NaN,
complete: !1
}, s = Oc(r), a = s.event("progress").pipe(Aa(), ao(300, Ti, {
leading: !0,
trailing: !0
}), hr(e => (isNaN(n.tfirst) && (n.tfirst = performance.now()), n.loaded = e.loaded, e.lengthComputable && (n.total = e.total), e.target)), ln(e => 3 <= e.readyState)), o = s.event("readystatechange").pipe(Aa(), hr(e => e.target), ln(e => 2 <= e.readyState), Za(e => {
isNaN(n.tfirst) && 3 <= e.readyState && (n.tfirst = performance.now())
}));
let l = Ii;
isFinite(t) && 0 < t && (l = an(a, o).pipe(Ds(1), So(0 < y.extendMaxTTFB ? y.extendMaxTTFB : t), La(() => Ii)));
let d = Ii;
isFinite(i) && 0 < i && (d = o.pipe(ln(e => 4 <= e.readyState), Ds(1), So(i), La(() => Ii)));
let u = Ii;
y.onProgress && (u = an($i(r), a).pipe(hr(e => {
const {
getData: t,
cb: i
} = y.onProgress;
return i(y.url, e.status, n, t ? e.response : void 0)
}), Wa(e => !e, !0)).pipe($a(Ii)));
const c = an(a.pipe(La(() => Ii)), o, l, d, u).pipe(ln(e => 4 <= e.readyState), Ds(1), La(e => {
if (n.complete = !0, 200 <= e.status && e.status < 300) {
if (n.tload = performance.now(), n.contentType = e.getResponseHeader("Content-Type"), v.reportCDNServer && (n.cdnServer = e.getResponseHeader("CDN-Server")), n.contentLength = v.forceContentLenCheckIfNoHeader ? function(e) {
let t;
const i = e.getResponseHeader("Content-Encoding"),
r = e.getResponseHeader("Transfer-Encoding"),
n = !i || i && "identity" === i.toLowerCase(),
s = !r || r && "identity" === r.toLowerCase();
return n && s && (t = function(e) {
e = /([0-9]+)\-([0-9]+)\/([0-9]+)/.exec(e);
return e ? parseInt(e[2]) - parseInt(e[1]) + 1 : void 0
}(e.getResponseHeader("Content-Range")), ne(t) || (t = parseInt(e.getResponseHeader("Content-Length")))), t
}(e) : null, i = e, (r = y).collectServerInstanceInfo && (r.serverInstanceInfo = {}, r.collectServerInstanceInfo.forEach(e => {
var t = i.getResponseHeader(e);
t && (r.serverInstanceInfo[e] = t)
})), "arraybuffer" === y.responseType ? n.loaded = e.response.byteLength : n.loaded = e.responseText.length, n.total = n.loaded, y.checkContentLength && (0 === n.total || ne(n.contentLength) && n.total != n.contentLength)) throw new oc("Network error", e.status);
return Nr($i([e, n]), Ti)
}
var i, r;
throw new oc("Network error", e.status)
}), Vn(e => {
if (e instanceof dr) throw new pc(e.message, 0, n);
if (!(e instanceof oc)) throw new oc(e.message, 0);
throw e
})).subscribe(e),
{
url: h,
method: p,
byteRangeOffset: f,
responseType: m,
body: g
} = y;
y.mimeType && r.overrideMimeType(y.mimeType);
try {
const v = y.xhrSetup;
if (v) try {
v(r, h)
} catch (e) {
r.open(p, y.url, !0), v(r, y.url)
}
r.readyState || r.open(p, y.url, !0)
} catch (e) {
throw new oc(e.message, r.status)
}
if (r.responseType = m, f && ne(f.start) && ne(f.end) && 0 <= f.start && f.end > f.start) {
const {
start: y,
end: v
} = f;
r.setRequestHeader("Range", `bytes=${y}-${v-1}`)
}
if (y.headers)
for (const [v, e] of Object.entries(y.headers)) r.setRequestHeader(v, e);
return "POST" === p && g ? r.send(g) : r.send(), () => {
r.abort(), c.unsubscribe()
}
})
}
const Dc = {
name: "CustomUrlLoader"
};
class Mc {
constructor(e) {
this.loaderService = e, this.requestMap = {}, this.logger = Qe()
}
load(a, o) {
return new $t(e => {
const t = a.url,
i = o["maxTimeToFirstByteMs"],
r = {
trequest: performance.now(),
tfirst: NaN,
tload: NaN,
loaded: 0,
total: NaN,
complete: !1
},
n = (this.requestMap[t] = new er).pipe(So(0 < a.extendMaxTTFB ? a.extendMaxTTFB : i), La(e => (r.tfirst = performance.now(), this.handleExternalResponse(e, a, o, r))), Vn(e => {
if (e instanceof dr) throw new pc(e.message, 0, r);
throw e
}), Vs(() => {
this.requestMap[t] = void 0, this.loaderService.removeUnresolvedUriLoading(t)
}));
a.onProgress && a.onProgress.cb(t, 0, r, void 0);
const s = n.subscribe(e);
return this.loaderService.createUnresolvedUriLoading(t, a.responseType, navigator.userAgent), () => {
s.unsubscribe(), this.requestMap[t] = void 0
}
})
}
setCustomUrlResponse(e, t) {
const i = this.requestMap[e];
i && (i.next(t), i.complete(), this.requestMap[e] = void 0)
}
handleExternalResponse(e, t, i, r) {
r.tload = performance.now();
var n = e.response.status || 200;
return 200 <= n && n < 300 ? ("arraybuffer" === t.responseType && e.response.data instanceof ArrayBuffer ? r.loaded = e.response.data.byteLength : r.loaded = e.response.data.toString().length, r.total = r.loaded, r.complete = !0, Nr($i({
status: n,
data: e,
stats: r
}), Ti)) : 300 === n || 302 === n || 303 === n || 305 === n ? this.redirectRequest(e.response.uri, t, i, r) : (this.logger.warn(Dc, `unable to load custom url > uri=${le(e.response.uri)}, status=${n}`), Vi(new oc("Unable to load custom url", n)))
}
redirectRequest(e, t, i, n) {
var {
maxLoadTimeMs: r,
maxTimeToFirstByteMs: s
} = i, r = r - (performance.now() - n.trequest), s = 0 < t.extendMaxTTFB ? t.extendMaxTTFB : s - (performance.now() - n.trequest), i = Object.assign(Object.assign({}, i), {
maxLoadTimeMs: r,
maxTimeToFirstByteMs: s
}), e = Object.assign(Object.assign({}, t), {
url: e
});
return r <= 0 || s <= 0 ? Vi(new dr) : Cc(e, i).pipe(hr(([e, t]) => {
var {
responseURL: i,
status: r
} = e, i = i || "", i = {
uri: i,
response: {
status: r,
uri: i,
data: e.response
}
};
return n.loaded = n.total = t.loaded, n.tload = performance.now(), n.complete = !0, {
status: e.status,
data: i,
stats: n
}
}))
}
}
let xc;
function Pc(e) {
return xc || (e = e || (Ic = Ic || new Tc(Ec), Ic), xc = new Mc(e)), xc
}
function Rc(e, t) {
const i = Object.assign(Object.assign({}, e), {
method: "GET",
responseType: "arraybuffer"
}),
r = Pc();
return Tu(i.url) ? r.load(i, t).pipe(hr(e => [e.data.response.data, e.stats, i.serverInstanceInfo])) : Cc(i, t).pipe(hr(([e, t]) => [e.response, t, i.serverInstanceInfo]))
}
function Lc(e, t) {
return !e.url || Tu(e.url) ? t.customURL : t.default
}
function _c(e, t) {
return e instanceof lc ? e.isTimeout ? t.timeoutRetry : t.errorRetry : null
}
function Nc(e) {
var t = e.type,
i = e.liveOrEvent;
let r = "VOD";
"EVENT" === t && i ? r = "EVENT" : t && 0 !== t.length && "LIVE" !== t || !i || (r = "LIVE"), e.type !== r && (e.type = r)
}
const Fc = {
id: "playready",
systemStringPrefix: "com.microsoft.playready",
keyFormatString: "com.microsoft.playready",
securityLevels: {
SL2000: 0,
SL3000: 1
}
},
Bc = {
id: "widevine",
systemStringPrefix: "com.widevine.alpha",
keyFormatString: "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",
securityLevels: {
WIDEVINE_SOFTWARE: 0,
WIDEVINE_HARDWARE: 1
}
};
function Uc(e) {
return e.replace(/\+/g, "-").replace(/\//g, "_").replace(/\=+$/, "")
}
class $c {
static strToBase64Encode(e) {
return btoa(e)
}
static base64DecodeToStr(e) {
return atob(e)
}
static base64Encode(e) {
return btoa(String.fromCharCode(...e))
}
static base64UrlEncode(e) {
return Uc($c.base64Encode(e))
}
static base64Decode(e) {
return Uint8Array.from(atob(e), e => e.charCodeAt(0))
}
}
class Vc {
static strToBase64Encode(e) {
return l.Buffer.from(e).toString("base64")
}
static base64DecodeToStr(e) {
return l.Buffer.from(e, "base64").toString()
}
static base64Encode(e) {
return l.Buffer.from(e).toString("base64")
}
static base64UrlEncode(e) {
return Uc(Vc.base64Encode(e))
}
static base64Decode(e) {
e = l.Buffer.from(e, "base64");
return new Uint8Array(e.buffer, e.byteOffset, e.byteLength)
}
}
var Kc, qc = void 0 !== l.Buffer ? Vc : $c;
const Hc = {
avc1: "video/mp4",
avc3: "video/mp4",
dvav: "video/mp4",
dva1: "video/mp4",
hev1: "video/mp4",
hvc1: "video/mp4",
dvh1: "video/mp4",
dvhe: "video/mp4"
},
jc = {
mp4a: "audio/mp4",
"ac-3": "audio/mp4",
"ec-3": "audio/mp4"
};
function Qc(e) {
const t = O.strToUtf8array(e).subarray(0, 16),
i = new Uint8Array(16);
return i.set(t, 16 - t.length), i
}
const Wc = {
getCapabilities: function(e, t) {
const i = {
videoCapabilities: [],
audioCapabilities: []
};
return e && e.forEach(e => {
var t = e.split(".")[0].trim();
t in Hc && i.videoCapabilities.push({
contentType: Hc[t] + ";codecs=" + e,
robustness: ""
})
}), t && t.forEach(e => {
var t = e.split(".")[0].trim();
t in jc && i.audioCapabilities.push({
contentType: jc[t] + ";codecs=" + e,
robustness: ""
})
}), i
},
changeEndianness: function(e) {
function t(e, t, i) {
var r = e[t];
e[t] = e[i], e[i] = r
}
t(e, 0, 3), t(e, 1, 2), t(e, 4, 5), t(e, 6, 7)
},
getKeyIdBytes: Qc,
convertDataUriToArrayBytes: function(e) {
const t = e.split(":");
let i = null;
if ("data" === t[0] && 2 === t.length) {
const e = t[1].split(";"),
r = e[e.length - 1].split(",");
if (2 === r.length) {
const t = "base64" === r[0],
n = r[1];
i = t ? (e.splice(-1, 1), qc.base64Decode(n)) : Qc(n)
}
}
return i
},
makeKeyIdsInitData: function(e) {
e = {
kids: e.map(qc.base64UrlEncode)
};
return O.strToUtf8array(JSON.stringify(e))
},
parsePSSHList: function(e) {
const i = new DataView(e);
let r = 0;
const n = {};
for (; r < i.buffer.byteLength;) {
const e = r,
t = i.getUint32(r);
r += 4;
var s = e + t;
if (1886614376 === i.getUint32(r)) {
switch (r += 4, i.getUint8(r)) {
case 0:
case 1:
r += 1;
break;
default:
r = s
}
r += 3;
let t = "";
for (let e = 0; e < 16; ++e, ++r) switch (t += i.getUint8(r).toString(16), e) {
case 4:
case 6:
case 8:
case 10:
t += "-"
}
r += 4, n[t] = i.buffer.slice(e, s)
} else r = s
}
return n
}
};
let Gc = {};
class zc {
constructor(e, t, i, r, n) {
if (this.method = e, this.uri = t, this.iv = i, this.format = r, this.formatversions = n, this.isEncrypted = this.method && "NONE" !== this.method, this.formatversions && 0 !== this.formatversions.length || (this.formatversions = [1]), this.key = void 0, this.keyId = void 0, this.isEncrypted) {
const a = Wc.convertDataUriToArrayBytes(this.uri);
if (a) switch (r) {
case Fc.keyFormatString: {
this.pssh = a;
const e = new Uint16Array(a.buffer, a.byteOffset, a.byteLength / 2),
t = String.fromCharCode.apply(null, Array.from(e)),
i = t.substring(t.indexOf("<"), t.length),
r = (new DOMParser).parseFromString(i, "text/xml").getElementsByTagName("KID")[0];
if (r) {
var s = null;
if (s = r.childNodes[0] ? r.childNodes[0].nodeValue : r.getAttribute("VALUE")) {
const t = qc.base64Decode(s).subarray(0, 16);
Wc.changeEndianness(t), this.keyId = t
}
}
break
}
case Bc.keyFormatString:
this.pssh = a, 22 <= a.length && (this.keyId = a.subarray(a.length - 22, a.length - 6));
break;
default: {
let e = a.subarray(0, 16);
if (16 !== e.length) {
const t = new Uint8Array(16);
t.set(e, 16 - e.length), e = t
}
this.keyId = e;
break
}
}
if (!this.keyId || 16 !== this.keyId.byteLength) {
let e = Gc[this.uri];
if (!e) {
const t = Object.keys(Gc).length % Number.MAX_SAFE_INTEGER;
e = new Uint8Array(16), new DataView(e.buffer, 12, 4).setUint32(0, t), Gc[this.uri] = e
}
this.keyId = e
}
}
}
get keyTagInfo() {
var {
method: e,
isEncrypted: t,
uri: i,
iv: r,
keyId: n,
key: s,
format: a,
formatversions: o
} = this;
return {
method: e,
isEncrypted: t,
uri: i,
iv: r,
keyId: n,
key: s,
format: a,
formatversions: o
}
}
static clearKeyUriToKeyIdMap() {
Gc = {}
}
}(w = Kc = Kc || {}).NONE = "NONE", w.GET_REQUEST_INFO = "GET_REQUEST_INFO", w.GET_CHALLENGE = "GET_CHALLENGE", w.GET_KEY_RESPONSE = "GET_KEY_RESPONSE", w.PROCESS_LICENSE = "PROCESS_LICENSE";
class Xc {
constructor(e, t, i, r) {
this.session = e, this.onkeystatuseschange = t, this.onkeymessage = i, this.logger = r, this.isClosing$ = new yi(!1), this.closed$ = new yi(!1);
const n = Oc(this.session);
n.listen("keystatuseschange", this.isClosing$.pipe(ln(e => !0 === e)), this.onkeystatuseschange), n.listen("message", this.closed$.pipe(ln(e => !0 === e)), this.onkeymessage)
}
get isClosing() {
return this.isClosing$.value
}
get isClosed() {
return this.closed$.value
}
destroy() {
this.isClosing$.next(!0);
const e = this.session;
return Fr(e.remove().catch(e => {}).then(() => e.close()).catch(e => {})).pipe(Za(() => {
this.isClosing$.next(!1), this.closed$.next(!0)
}), Vs(() => {
this.isClosing$.next(!1), this.closed$.next(!0)
}))
}
}
class Yc {
constructor(e, t = null) {
this.decryptdata = e, this._requestState$ = new yi(Kc.NONE), this.destroy$ = new Xt, this.currentObservable = null, this.session = null, this.oldSessions = [], this.session = t
}
get requestState() {
return this._requestState$.value
}
get onKeyRequestState$() {
return this._requestState$
}
destroy() {
this.destroy$.next()
}
abort() {
var e;
this.requestState !== Kc.NONE && (e = new gc("Aborted", this.decryptdata.uri, 0, $.KeySystemAbort, !0, rc.Abort), this.error(e))
}
setKeyRequestState(e) {
if (this.currentObservable) {
const t = new gc(`Unexpected state transition ${this.requestState}->${e}`, this.decryptdata.uri, 0, $.KeySystemUnexpectedStateTransition, !0, rc.InvalidState);
this.error(t)
}
this._requestState$.next(e);
const t = new er;
return e === Kc.NONE ? (t.complete(), this.currentObservable = null) : this.currentObservable = t, t
}
resolveState(e, t) {
if (this.currentObservable)
if (e === this.requestState)
if (t instanceof Error) this.error(t);
else {
const e = this.currentObservable;
this.currentObservable = null, e.next(t), e.complete()
}
else {
const t = new gc(`Unexpected state ${this.requestState} != ${e}`, this.decryptdata.uri, 0, $.KeySystemUnexpectedState, !0, rc.InvalidState);
this.error(t)
}
}
error(e) {
if (this.currentObservable) {
const t = this.currentObservable;
this.currentObservable = null, t.error(e)
}
this.setKeyRequestState(Kc.NONE)
}
}
function Jc(e) {
return `uri=${le(e.uri)} keyId=${je(e.keyId)}`
}
class Zc {
constructor(e, t, i, r, n, s, a) {
this.mediaKeys = e, this.systemString = t, this.config = i, this.eventEmitter = r, this.useSingleKeySession = n, this.sessionHandler = s, this.logger = a, this.destroy$ = new Xt, this.setCert = !1, this.certificate$ = new yi(null), this._keyStatusChange$ = new Xt, this.shouldDestroyMediaKeys = !1, this.itemId = "", this.sessions = [], this.keyIdToKeyInfo = {}, this.keyUriToKeyInfo = {}, this.sessionIdToKeyUri = {}, this.onkeystatuseschange = this.handleKeyStatusesChange.bind(this), this.onkeymessage = this.handleKeyMessage.bind(this)
}
get keyStatusChange$() {
return this._keyStatusChange$
}
destroy() {
this.isDestroying = !0, this.destroy$.next();
for (const e of Object.values(this.keyIdToKeyInfo)) this._abortKeyRequest(e);
const e = this.sessions.map(e => e.destroy()),
t = nn(() => 0 === e.length, Wu, en(e)).pipe(Zs(void 0), Vs(() => {
this.mediaKeys = void 0, this.keyIdToKeyInfo = {}, this.keyUriToKeyInfo = {}, this.sessionIdToKeyUri = {}
}));
return zc.clearKeyUriToKeyIdMap(), t
}
setServerCertificate(e = null) {
return this.needsCert ? (e && this.certificate$.next(e), Gu(this.certificate$, e => null != e).pipe(So(1e4)).pipe(La(e => this.setCert ? $i(!0) : !this.setCertSubject || this.setCertSubject.isStopped ? (this.setCertSubject = new er, Fr(this.mediaKeys.setServerCertificate(e)).pipe(Za(e => {
e = void 0 === e || e;
this.setCert = e, this.setCertSubject.next(e), this.setCertSubject.complete()
}), Vn(e => (this.setCert = !1, this.setCertSubject.error(e), Wu)), La(() => this.setCertSubject))) : this.setCertSubject), Vn(e => {
throw e
}))) : $i(!0)
}
ensureKeyContext(e) {
var t = e.uri;
this.keyUriToKeyInfo[t] || (this.keyUriToKeyInfo[t] = new Yc(e));
const i = this.keyUriToKeyInfo[t];
if (i.session) return i;
if (this.useSingleKeySession && 0 < this.sessions.length) return i.session = this.sessions[0].session, i;
t = this.mediaKeys.createSession();
return t && this.sessions.push(new Xc(t, this.onkeystatuseschange, this.onkeymessage, this.logger)), i.session = t, i
}
startKeyRequest(t) {
const i = t.uri,
r = this.ensureKeyContext(t);
if (null == r || !r.session) return Vi(new yc("Could not create key session", t.uri, 0, $.KeySystemFailedToCreateSession, this.systemString));
var e = O.utf8arrayToStr(t.keyId);
return this.keyIdToKeyInfo[e] = r, en([this.getKeyRequestInfo(r), this.setServerCertificate()]).pipe(hr(e => e[0]), La(e => {
var t;
return null === (t = this.sessionHandler) || void 0 === t || t.licenseChallengeSubmitted({
keyuri: i,
keyFormat: this.systemString
}), this.generateLicenseChallenge(r, e).pipe(Vn(e => {
var t;
throw null === (t = this.sessionHandler) || void 0 === t || t.licenseChallengeError({
keyuri: i
}), e
}))
}), La(e => {
var t;
return null === (t = this.sessionHandler) || void 0 === t || t.licenseChallengeCreated({
keyuri: i,
cdmVersion: this.cdmVersion
}), this.getKeyRequestResponse(r, e)
}), La(e => {
var t;
return null === (t = this.sessionHandler) || void 0 === t || t.licenseResponseSubmitted({
keyuri: i
}), this.handleParsedKeyResponse(r, e).pipe(Vn(e => {
var t;
throw null === (t = this.sessionHandler) || void 0 === t || t.licenseResponseError({
keyuri: i
}), e
}))
}), hr(() => {
var e;
return null === (e = this.sessionHandler) || void 0 === e || e.licenseResponseProcessed({
keyuri: i
}), r.setKeyRequestState(Kc.NONE), this.removeSessions(r.decryptdata, !1).subscribe(), t
}), Vn(e => {
throw this.handleKeyExchangeError(r, e), e
}), Vs(() => {
this._abortKeyRequest(r)
}))
}
_abortKeyRequest(e) {
var t, i;
e && (i = e.decryptdata.uri, O.utf8arrayToStr(e.decryptdata.keyId), e.requestState !== Kc.NONE && (null === (t = this.sessionHandler) || void 0 === t || t.keyAborted({
keyuri: i
})), e.abort())
}
handleKeyExchangeError(e, t) {
e.error(t), O.utf8arrayToStr(e.decryptdata.keyId)
}
updateItemId(e) {
this.itemId = e
}
removeKey(e) {
return this.removeKeyInternal(e)
}
removeKeyInternal(e) {
const t = this.keyUriToKeyInfo[e.uri];
if (t && t.session) {
var i = t.session;
t.abort(), t.destroy();
var r = O.utf8arrayToStr(e.keyId);
return this.keyIdToKeyInfo[r] = void 0, this.keyUriToKeyInfo[e.uri] = void 0, this.removeSession(i)
}
}
removeSessions(e, t) {
const i = this.keyUriToKeyInfo[e.uri];
if (i) {
const r = i.oldSessions.map(e => this.removeSession(e));
return i.oldSessions = [], nn(() => 0 === r.length, Wu, en(r)).pipe(La(() => t ? this.removeKeyInternal(e) : Wu))
}
return Wu
}
removeSession(t) {
const e = this.sessions.findIndex(e => e.session === t),
i = this.sessions[e];
return -1 < e && this.sessions.splice(e, 1), this.sessionIdToKeyUri[t.sessionId] = void 0, i ? i.destroy() : Wu
}
getKeyRequestInfo(e) {
var t = e.decryptdata,
i = t.uri,
e = e.setKeyRequestState(Kc.GET_REQUEST_INFO);
return this.eventEmitter.trigger(x.KEY_REQUEST_STARTED, {
keyuri: i,
decryptdata: t,
timestamp: Date.now()
}), e
}
setKeyRequestInfo(e, t) {
const i = this.keyUriToKeyInfo[e];
i && i.resolveState(Kc.GET_REQUEST_INFO, t)
}
sanitizeRequest(e) {
return e
}
generateLicenseChallengeInternal(t, e, i) {
const r = t.decryptdata,
n = t.session,
s = r.uri,
a = r.keyId;
let o;
var l = t.setKeyRequestState(Kc.GET_CHALLENGE);
if (n.generateRequestPromise) o = Nr(n.generateRequestPromise, Ti).pipe(La(() => this.generateRequestInitialized(t, "usable" === i)));
else {
const i = this.generateInitData(a, r, e);
n.generateRequestPromise = n.generateRequest(i.initDataType, i.initData), o = Nr(n.generateRequestPromise, Ti).pipe(Za(() => {
this.sessionIdToKeyUri[n.sessionId] = s
}), Vn(e => {
throw new yc(e.message, t.decryptdata.uri, 0, $.KeySystemFailedToGenerateLicenseRequest, this.systemString)
}))
}
return en([l, o]).pipe(hr(e => new Uint8Array(e[0])))
}
generateLicenseChallenge(e, t) {
const i = e.decryptdata,
r = e.session,
n = i.uri,
s = i.keyId;
let a, o;
if (O.utf8arrayToStr(i.keyId), e.licenseChallenge && e.resolveState(Kc.GET_CHALLENGE, e.licenseChallenge), t = this.sanitizeRequest(t), e.requestInfo = t, this.sessionId = this.sessionId || t && t.sessionId || this.itemId, this.systemString === Fc.systemStringPrefix) {
const e = new Uint8Array(s);
Wc.changeEndianness(e), a = r.keyStatuses.get(e)
} else a = r.keyStatuses.get(s);
switch (a) {
case "status-pending":
case "usable":
case "expired":
case void 0:
o = this.generateLicenseChallengeInternal(e, t, a);
break;
default:
o = Vi(new yc(`Bad internal state state=${a}`, n, 0, $.KeySystemUnexpectedState, this.systemString))
}
return o
}
setParsedResponse(e, t) {
const i = this.keyUriToKeyInfo[e];
i && i.resolveState(Kc.GET_KEY_RESPONSE, t)
}
handleKeyStatusesChange(e) {
e.target.keyStatuses.forEach((e, t, i) => {
t = new Uint8Array(t);
this.systemString === Fc.systemStringPrefix && Wc.changeEndianness(t);
t = O.utf8arrayToStr(t), t = this.keyIdToKeyInfo[t];
t && this.handleKeyStatusForKey(e, t)
})
}
handleKeyStatusForKey(e, t) {
if (t) {
var i = t.decryptdata,
r = i.uri;
switch (e) {
case "internal-error":
this.logger.error(`${this.systemString} internal-error for key ${Jc(i)}`), this._signalError(t, new gc("Got internal error from key system", r, 0, $.KeySystemInternalError, !1, rc.InternalError));
break;
case "usable":
t.requestState === Kc.PROCESS_LICENSE && t.resolveState(Kc.PROCESS_LICENSE, void 0);
break;
case "output-restricted":
this.logger.warn(`${this.systemString} output-restricted for key ${Jc(i)}`), t.session && this.removeSession(t.session).pipe(Va(this.destroy$)).subscribe(), this._signalError(t, new gc("output-restricted", r, 0, $.KeySystemOutputRestricted, !1, rc.OutputRestricted));
break;
case "expired":
this.logger.warn(`${this.systemString} expired for key ${Jc(i)}. Attempting renewal`), this._signalRenewal(t)
}
}
}
_scheduleRenewal(e, t) {
bn(t).pipe(Za(() => this._signalRenewal(e)), Va(fn(e.destroy$, this.destroy$, Gu(e.onKeyRequestState$, e => e === Kc.GET_REQUEST_INFO)))).subscribe()
}
_signalRenewal(e) {
this._keyStatusChange$.next({
decryptdata: e.decryptdata,
status: "needs-renewal"
})
}
_signalError(e, t) {
this._keyStatusChange$.next({
decryptdata: e.decryptdata,
status: "error",
error: t
}), e.error(t)
}
}
const eh = "org.w3.clearkey",
th = {
id: "clearkey",
systemStringPrefix: eh,
keyFormatString: eh,
securityLevels: {
NONE: 0
}
},
ih = ["clearkey", "fairplaystreaming", "playready", "widevine"],
rh = {
initDataTypes: ["keyids", "cenc"]
};
var nh, nu = class extends Zc {
constructor(e, t, i, r, n, s) {
super(e, t, i, r, !1, n, s)
}
static get requestAccessConfig() {
return rh
}
get needsCert() {
return !1
}
getKeyRequestResponse(e, t) {
return Rc({
url: e.decryptdata.uri,
xhrSetup: this.config.xhrSetup
}, {
maxLoadTimeMs: 0,
maxTimeToFirstByteMs: 0,
autoRetry: !1,
timeoutRetry: null,
errorRetry: null
}).pipe(hr(([e]) => {
e = new Uint8Array(e);
return {
response: this.parseResponse(t, e)
}
}))
}
parseResponse(e, t) {
t = {
kty: "oct",
kid: qc.base64UrlEncode(e),
k: qc.base64UrlEncode(t)
};
return O.strToUtf8array(JSON.stringify({
keys: [t]
}))
}
handleParsedKeyResponse(i, e) {
e = e.response;
return en([i.setKeyRequestState(Kc.PROCESS_LICENSE), Fr(i.session.update(e)).pipe(Za(() => {
var e = i.decryptdata.keyId,
e = i.session.keyStatuses.get(e);
this.handleKeyStatusForKey(e, i)
}), Vn(e => {
var t = {
code: e.code,
text: "Failed to update with key response"
};
throw new yc(e.message, i.decryptdata.uri, e.code, t, this.systemString)
}))]).pipe(Zs(void 0))
}
generateInitData(e) {
return {
initData: Wc.makeKeyIdsInitData([e]),
initDataType: "keyids"
}
}
generateRequestInitialized() {
return Wu
}
sanitizeRequest(e) {
return e
}
handleKeyMessage(e) {
if (!this.isDestroying && "license-request" === e.messageType) {
e = new Uint8Array(e.message), e = JSON.parse(O.utf8arrayToStr(e).trim());
if (1 === e.kids.length) {
const t = qc.base64Decode(e.kids[0]),
i = O.utf8arrayToStr(t),
r = this.keyIdToKeyInfo[i];
r && r.resolveState(Kc.GET_CHALLENGE, t)
}
}
}
};
const sh = {
initDataTypes: ["cenc"]
},
ah = new Uint8Array([148, 206, 134, 251, 7, 255, 79, 67, 173, 184, 147, 210, 250, 150, 140, 162]);
(iu = nh = nh || {})[iu.CENC = 1667591779] = "CENC", iu[iu.CBCS = 1667392371] = "CBCS";
class oh extends Zc {
constructor(e, t, i, r, n, s, a) {
super(e, t, i, r, n, s, a), this._hasSetRenewal = !1
}
static get systemId() {
return ah
}
static get requestAccessConfig() {
return sh
}
get needsCert() {
return !0
}
sanitizeRequest(e) {
return {
assetId: e && e.assetId ? new Uint8Array(e.assetId) : void 0,
ssc: e && e.ssc ? new Uint8Array(e.ssc) : void 0,
sessionId: e && e.sessionId ? e.sessionId : void 0
}
}
_scheduleRenewal(e, t) {
this.useSingleKeySession ? this._hasSetRenewal || (this._hasSetRenewal = !0, bn(t).pipe(Za(() => {
var e = Object.values(this.keyUriToKeyInfo)[0];
e && this._signalRenewal(e)
}), Vs(() => {
this._hasSetRenewal = !1
}), Va(this.destroy$)).subscribe()) : super._scheduleRenewal(e, t)
}
handleParsedKeyResponse(t, e) {
var i = t.decryptdata.uri,
r = e.statusCode,
n = e.ckc && 0 !== e.ckc.byteLength ? e.ckc : e.license && 0 !== e.license.byteLength ? e.license : void 0;
if (0 === r && !n) return Vi(new gc("License request resulted in HTTP Error", i, r, {
code: r,
text: "HTTP Error"
}, !0, rc.HttpError));
if (0 !== r) return Vi(new gc("License server responded with error", i, r, {
code: r,
text: "Server Error"
}, !1, rc.LicenseServerError));
if (!n) return Vi(new gc("License server responded with invalid license", i, r, {
code: r,
text: "Invalid license"
}, !1, rc.LicenseServerError));
const s = e.renewalDate,
a = new Date,
o = s > a ? s.getTime() - a.getTime() : 0;
0 < o && this._scheduleRenewal(t, o);
const l = this.makeProcessLicenseRequestMessage(t, n, o),
d = t.session,
u = Fr(d.update(l)).pipe(Za(() => {
var e = t.decryptdata.keyId,
e = d.keyStatuses.get(e);
this.handleKeyStatusForKey(e, t)
}), Vn(e => {
throw new yc(e.message, t.decryptdata.uri, 0, $.KeySystemFailedToUpdateSession, this.systemString)
}));
return en([t.setKeyRequestState(Kc.PROCESS_LICENSE), u]).pipe(Zs(void 0))
}
makeKeyRequests(e) {
const t = [];
for (const i of e) {
const e = i.decryptdata,
r = i.requestInfo,
n = e.keyId;
t.push({
keyId: n,
assetId: r ? r.assetId : void 0,
ssc: r ? r.ssc : void 0,
versionList: e.formatversions
})
}
return t
}
getSchemeAndFlags(e) {
return {
scheme: "ISO-23001-7" === e.method ? nh.CENC : nh.CBCS,
flags: 0
}
}
generateInitData(e, t, i) {
var {
scheme: r,
flags: n
} = this.getSchemeAndFlags(t), i = this.makeKeyRequests([{
decryptdata: t,
requestInfo: i
}]);
return {
initData: this.makeFpsKeySystemInitData(r, n, i),
initDataType: "cenc"
}
}
generateRequestInitialized(t, e) {
tc(`[Keys] challenge create start uri=${le(t.decryptdata.uri)} versions=${JSON.stringify(t.decryptdata.formatversions)}`);
e = this.makeKeyRequestMessage(t, e);
return e ? Fr(t.session.update(e)).pipe(Za(() => {
t.requestInfo = void 0
}), Vn(e => {
throw tc(`[Keys] ${this.systemString} FAIL: generateRequestInitialized keyuri=${le(t.decryptdata.uri)} message=${e.message}`), new yc(e.message, t.decryptdata.uri, 0, $.KeySystemFailedToGenerateLicenseRenewal, this.systemString)
})) : Vi(new gc("Unable to generate request using existing keySession", t.decryptdata.uri, 0, $.KeySystemFailedToGenerateLicenseRequest, !0, rc.InvalidState))
}
getKeyRequestResponse(e, t) {
var i = e.decryptdata.uri,
e = e.setKeyRequestState(Kc.GET_KEY_RESPONSE);
return this.eventEmitter.trigger(x.LICENSE_CHALLENGE_CREATED, {
keyuri: i,
licenseChallenge: t,
keysystem: this.systemString
}), e
}
resolveSPCPromise(e, t) {
e.resolveState(Kc.GET_CHALLENGE, t)
}
}
const lh = {},
dh = 1919710053;
function uh(e, t, i) {
if (!(i + 4 > e.byteLength)) {
t = t.getUint32(i);
if (!((i += 4) + t > e.byteLength)) {
e = e.slice(i, i + t);
return {
pos: i += t,
data: e
}
}
}
}
function ch(t) {
const i = {},
r = new DataView(t.buffer);
let n = 4;
const s = r.getUint32(n);
n += 4;
for (let e = 0; e < s && n < t.byteLength && !(n + 16 > t.byteLength); ++e) {
const s = t.slice(n, n + 16);
if (n += 16, n + 4 > t.byteLength) break;
var a = uh(t, r, n);
if (!a) break;
n = a.pos, i[O.utf8arrayToStr(s)] = a.data
}
return i
}
function hh(e, t, i, r) {
var n = r ? r.byteLength : 0;
return t.setUint32(i, n), n && e.set(r, i + 4), i + (4 + n)
}
function ph(e) {
let t = 4;
for (const i of e) t += 28 + (i.assetId ? i.assetId.byteLength : 0) + (i.ssc ? i.ssc.byteLength : 0) + (i.versionList ? 4 * i.versionList.length : 0);
return t
}
function fh(e, t, i, r) {
t.setUint32(i, r.length), i += 4;
for (const n of r)
if (e.set(n.keyId, i), i = hh(e, t, i += 16, n.assetId), i = hh(e, t, i, n.ssc), t.setUint32(i, n.versionList ? n.versionList.length : 0), i += 4, n.versionList)
for (const e of n.versionList) t.setUint32(i, e), i += 4;
return i
}
class mh extends oh {
constructor(e, t, i, r, n, s) {
super(e, t, i, r, void 0 === i.useMultipleKeySessions || !i.useMultipleKeySessions, n, s)
}
makeProcessLicenseRequestMessage(e, t, i) {
t = new Uint8Array(t);
return function(e) {
let t = 0;
for (const i of e) t += 24 + i.ckc.byteLength;
let i = 0;
const r = new Uint8Array(8 + t),
n = new DataView(r.buffer);
n.setUint32(0, 1667982195), n.setUint32(4, e.length), i += 8;
for (const t of e) r.set(t.keyId, i), i += 16, n.setUint32(i, t.expirySec), i += 4, i = hh(r, n, i, t.ckc);
return r
}([{
keyId: e.decryptdata.keyId,
expirySec: i / 1e3,
ckc: t
}])
}
makeFpsKeySystemInitData(e, t, i) {
i = function(e, t, i) {
var r = ph(i);
const n = new Uint8Array(8 + r),
s = new DataView(n.buffer);
return s.setUint32(0, e), s.setUint32(4, 1 << 24 | 16777215 & t), fh(n, s, 8, i), n
}(e, t, i);
return ge.pssh(mh.systemId, [], i)
}
makeKeyRequestMessage(e) {
return function(e) {
var t = ph(e);
const i = new Uint8Array(4 + t),
r = new DataView(i.buffer);
return r.setUint32(0, 1668442994), fh(i, r, 4, e), i
}([{
keyId: e.decryptdata.keyId,
assetId: e.requestInfo ? e.requestInfo.assetId : void 0,
ssc: e.requestInfo ? e.requestInfo.ssc : void 0,
versionList: e.decryptdata.formatversions
}])
}
handleKeyMessage(e) {
if (e.message.byteLength < 4) this.logger.warn("Unexpected message");
else {
const t = new Uint8Array(e.message),
i = new DataView(e.message),
r = i.getUint32(0);
if (this.isDestroying && r !== dh) this.logger.warn(`In the middle of destroying, ignore command: ${r.toString(16)}`);
else switch (r) {
case 1667592820:
this.logger.warn("Certificate not set!");
break;
case 1919837559: {
const e = ch(t);
for (const t in e)
if (Object.prototype.hasOwnProperty.call(e, t)) {
const e = this.keyIdToKeyInfo[t];
e && this._signalRenewal(e)
} break
}
case 1936745331: {
const e = ch(t);
for (const t in e)
if (Object.prototype.hasOwnProperty.call(e, t)) {
const i = this.keyIdToKeyInfo[t],
r = e[t];
i && r && this.resolveSPCPromise(i, r)
} break
}
case dh:
this._handleLicenseRelease(t);
break;
case 1667525993: {
const e = uh(t, i, 4);
e && (this.cdmVersion = O.utf8arrayToStr(e.data));
break
}
default:
this.logger.warn(`Unrecognized command:'0x${r.toString(16)}'`)
}
}
}
_handleLicenseRelease(e) {
const t = {},
i = new DataView(e.buffer);
switch (i.getUint32(4)) {
case 1936946288:
lh, 0, t[lh.SessionId] = this.sessionId;
var r;
if (e.byteLength < 12) break;
t[lh.APIProvider] = i.getUint32(8) === nh.CENC ? "EC396D13-FB13-4993-9D0D-71518ACF3D6F" : "F19BF03B-7470-41A4-9655-86D078307D59", 0;
var n = uh(e, i, 12);
if (!n) break;
if (r = n.pos, t[lh.MovieID] = O.utf8arrayToStr(n.data), !(n = uh(e, i, r))) break;
if (r = n.pos, t[lh.SecureStopSPC] = n.data, !(n = uh(e, i, r))) break;
n.pos, t[lh.SessionLifespanSPC] = n.data
}
this.eventEmitter.trigger(x.LICENSE_RELEASED, {
keysystem: this.systemString,
itemId: this.itemId,
releaseRecord: t
})
}
}
ru = mh;
const gh = {
fpsd: O.strToUtf8array("fpsd"),
fpsi: O.strToUtf8array("fpsi"),
fpsk: O.strToUtf8array("fpsk"),
fkri: O.strToUtf8array("fkri"),
fkai: O.strToUtf8array("fkai"),
fkcx: O.strToUtf8array("fkcx"),
fkvl: O.strToUtf8array("fkvl")
};
t = class extends oh {
constructor(e, t, i, r, n, s) {
super(e, t, i, r, !1, n, s), this.sessions = [], this.keyIdToKeyInfo = {}, this.keyUriToKeyInfo = {}, this.sessionIdToKeyUri = {}
}
static get needsCert() {
return !0
}
handleKeyExchangeError(e, t) {
this.removeKey(e.decryptdata).subscribe(), super.handleKeyExchangeError(e, t)
}
_abortKeyRequest(e) {
return !this.isDestroying && e && e.requestState !== Kc.NONE && this.removeKey(e.decryptdata).subscribe(), super._abortKeyRequest(e)
}
makeFpsKeySystemInitData(e, t, i) {
const r = [gh.fpsd, (n = e, e = t, t = new Uint8Array(4), ge.set32(n, t, 0), ge.box(gh.fpsi, new Uint8Array([0, e >> 16 & 255, e >> 8 & 255, 255 & e]), t))];
var n;
for (const s of i) r.push(function(t, e, i, r) {
const n = [gh.fpsk],
s = ge.box(gh.fkri, new Uint8Array([0, 0, 0, 0]), t);
if (n.push(s), e && e.byteLength && n.push(ge.box(gh.fkai, e)), i && i.byteLength && n.push(ge.box(gh.fkcx, i)), r && r.length) {
const t = new Uint8Array(4 * r.length);
let e = 0;
for (const i of r) ge.set32(i, t, e), e += 4;
n.push(ge.box(gh.fkvl, t))
}
return ge.box.apply(null, n)
}(s.keyId, s.assetId, s.ssc, s.versionList));
i = ge.box.apply(null, r);
return ge.pssh(oh.systemId, null, i)
}
makeKeyRequestMessage(e, t) {
if (t) return O.strToUtf8array("renew")
}
makeProcessLicenseRequestMessage(e, t, i) {
t = JSON.stringify([{
keyID: qc.base64Encode(e.decryptdata.keyId),
payload: qc.base64Encode(new Uint8Array(t))
}]);
return O.strToUtf8array(t)
}
handleKeyMessage(e) {
const t = e.target,
i = t.sessionId,
r = e.messageType,
n = this.sessionIdToKeyUri[i];
let s;
if (n) s = this.keyUriToKeyInfo[n];
else
for (const e of Object.values(this.keyUriToKeyInfo)) e && e.session === t && (s = e);
if (s) switch (r) {
case "license-request": {
const t = new Uint8Array(e.message),
i = O.utf8arrayToStr(t);
try {
JSON.parse(i).forEach(e => {
var t = qc.base64DecodeToStr(e.keyID),
e = qc.base64Decode(e.payload),
t = this.keyIdToKeyInfo[t];
t && this.resolveSPCPromise(t, e)
})
} catch (e) {
this.logger.warn("[Keys] got unexpected license-request format"), this.resolveSPCPromise(s, t)
}
break
}
case "license-renewal": {
const t = new Uint8Array(e.message);
this.resolveSPCPromise(s, t);
break
}
case "license-release":
this._handleLicenseRelease(t);
break;
default:
this.logger.warn(`[Keys] Unexpected messageType ${r}`)
} else this.logger.warn("[Keys] No key associated with session")
}
_handleLicenseRelease(e) {
e.update(O.strToUtf8array("acknowledged")).catch(e => {
this.logger.error(`Promise error: ${e.message}`)
})
}
};
const yh = {
initDataTypes: ["cenc"]
},
vh = new Uint8Array([154, 4, 240, 121, 152, 64, 66, 134, 171, 146, 230, 91, 224, 136, 95, 149]);
class Sh extends Zc {
constructor(e, t, i, r, n, s) {
super(e, t, i, r, !1, n, s), this.shouldDestroyMediaKeys = !0
}
static get systemId() {
return vh
}
static get requestAccessConfig() {
return yh
}
get needsCert() {
return !1
}
generateInitData(e, t) {
t = t.pssh;
return {
initData: ge.pssh(Sh.systemId, [], t),
initDataType: "cenc"
}
}
removeKey(e) {
return super.removeSessions(e, !0)
}
ensureKeyContext(e) {
const t = e.uri,
i = this.keyUriToKeyInfo[t];
return null != i && i.session && (i.oldSessions.push(i.session), i.session = null), super.ensureKeyContext(e)
}
getKeyRequestResponse(e, t) {
var i = e.decryptdata.uri,
r = e.setKeyRequestState(Kc.GET_KEY_RESPONSE);
return this.eventEmitter.trigger(x.LICENSE_CHALLENGE_CREATED, {
keyuri: i,
licenseChallenge: t,
keysystem: this.systemString,
keyId: e.decryptdata.keyId
}), r
}
generateRequestInitialized(e) {
var t = e.licenseChallenge;
return e.requestInfo = void 0, e.resolveState(Kc.GET_CHALLENGE, t), Wu
}
handleParsedKeyResponse(t, e) {
const i = t.decryptdata.uri,
r = e.statusCode;
if (0 !== r) return Vi(new gc("License server responded with error", i, r, {
code: r,
text: "Server error"
}, !1, rc.LicenseServerError));
if (!e.license || !e.license.byteLength) return Vi(new gc("License server responded with invalid license", i, r, {
code: r,
text: "Invalid license"
}, !1, rc.LicenseServerError));
if (e.renewalDate) {
const i = e.renewalDate,
r = new Date,
n = i > r ? i.getTime() - r.getTime() : 0;
0 < n && this._scheduleRenewal(t, n)
}
return en([t.setKeyRequestState(Kc.PROCESS_LICENSE), Fr(t.session.update(e.license)).pipe(Za(() => {
t.resolveState(Kc.PROCESS_LICENSE, void 0)
}), Vn(e => {
throw this.logger.error(`${this.systemString} FAIL: Failed to update with key response message=${e.message}`), new yc(e.message, t.decryptdata.uri, 0, $.KeySystemFailedToUpdateSession, this.systemString)
}))]).pipe(Zs(void 0))
}
handleKeyMessage(e) {
if (this.isDestroying) this.logger.warn("In the middle of destroying, ignore key message");
else {
const t = new DOMParser,
i = new("utf16" === this.config.playReadyMessageFormat ? Uint16Array : Uint8Array)(e.message.buffer || e.message),
r = String.fromCharCode.apply(null, Array.from(i)),
n = t.parseFromString(r, "application/xml").getElementsByTagName("PlayReadyKeyMessage")[0];
if (n && "LicenseAcquisition" === n.getAttribute("type")) {
const s = t.parseFromString(r, "application/xml").getElementsByTagName("Challenge")[0];
if (s && "base64encoded" === s.getAttribute("encoding") && 0 !== s.childNodes.length) {
const a = qc.base64Decode(s.childNodes[0].nodeValue),
o = O.utf8arrayToStr(a),
l = t.parseFromString(o, "application/xml").getElementsByTagName("KID")[0];
e = null, e = l.childNodes[0] ? l.childNodes[0].nodeValue : l.getAttribute("VALUE"), e = qc.base64Decode(e).subarray(0, 16);
Wc.changeEndianness(e);
const d = this.keyIdToKeyInfo[O.utf8arrayToStr(e)];
d && (d.licenseChallenge = a, d.resolveState(Kc.GET_CHALLENGE, a))
} else this.logger.warn(`${this.systemString} wrong challenge format or empty challenge`)
} else this.logger.warn(`${this.systemString} unrecognized message ignore it`)
}
}
}
w = Sh;
const bh = {
initDataTypes: ["cenc", "keyids"]
},
Th = new Uint8Array([237, 239, 139, 169, 121, 214, 74, 206, 163, 200, 39, 220, 213, 29, 33, 237]),
Eh = {
clearkey: th,
fairplaystreaming: Sc,
playready: Fc,
widevine: Bc
},
Ih = {
clearkey: [
["org.w3.clearkey", nu]
],
fairplaystreaming: [
["com.apple.fps.3_0", t],
["com.apple.fps", ru]
],
playready: [
["com.microsoft.playready.recommendation", w]
],
widevine: [
["com.widevine.alpha", class extends Zc {
constructor(e, t, i, r, n, s) {
super(e, t, i, r, !1, n, s), this.shouldDestroyMediaKeys = !0
}
static get systemId() {
return Th
}
static get requestAccessConfig() {
return bh
}
get needsCert() {
return !0
}
removeKey(e) {
return super.removeSessions(e, !0)
}
ensureKeyContext(e) {
const t = e.uri,
i = this.keyUriToKeyInfo[t];
return null != i && i.session && (i.oldSessions.push(i.session), i.session = null), super.ensureKeyContext(e)
}
getKeyRequestResponse(e, t) {
var i = e.decryptdata.uri,
r = e.setKeyRequestState(Kc.GET_KEY_RESPONSE);
return this.eventEmitter.trigger(x.LICENSE_CHALLENGE_CREATED, {
keyuri: i,
licenseChallenge: t,
keysystem: this.systemString,
keyId: e.decryptdata.keyId
}), r
}
handleParsedKeyResponse(t, e) {
t.licenseChallenge = void 0;
const i = t.decryptdata.uri,
r = e.statusCode;
if (0 !== r) return Vi(new gc("License server responded with error", i, r, {
code: r,
text: "Server error"
}, !1, rc.LicenseServerError));
if (!e.license || !e.license.byteLength) return Vi(new gc("License server responded with invalid license", i, r, {
code: r,
text: "Invalid license"
}, !1, rc.LicenseServerError));
if (e.renewalDate) {
const i = e.renewalDate,
r = new Date,
n = i > r ? i.getTime() - r.getTime() : 0;
0 < n && this._scheduleRenewal(t, n)
}
return en([t.setKeyRequestState(Kc.PROCESS_LICENSE), Fr(t.session.update(e.license)).pipe(Za(() => {
var e = t.decryptdata.keyId,
e = t.session.keyStatuses.get(e);
this.handleKeyStatusForKey(e, t)
}), Vn(e => {
throw this.logger.error(`${this.systemString} FAIL: Failed to update with key response code=${e.code} message=${e.message}`), new yc(e.message, t.decryptdata.uri, e.code, {
code: e.code,
text: "Failed to update with key response"
}, this.systemString)
}))]).pipe(Zs(void 0))
}
generateInitData(e, t) {
return {
initData: t.pssh,
initDataType: "cenc"
}
}
generateRequestInitialized(e) {
var t = e.licenseChallenge;
return e.requestInfo = void 0, e.resolveState(Kc.GET_CHALLENGE, t), Wu
}
handleKeyMessage(i) {
if (this.isDestroying) this.logger.warn("In the middle of destroying, ignore key message");
else {
const r = i.target;
let e = null,
t = null;
if (r.sessionId in this.sessionIdToKeyUri) e = this.sessionIdToKeyUri[r.sessionId], t = this.keyUriToKeyInfo[e];
else
for (const [i, n] of Object.entries(this.keyUriToKeyInfo))
if (n.session === r) {
e = i, t = n;
break
} if (t) switch (i.messageType) {
case "license-request": {
const r = new Uint8Array(i.message);
t.resolveState(Kc.GET_CHALLENGE, r);
break
}
} else this.logger.warn(`${this.systemString} empty keyuri and keyInfo`)
}
}
}]
]
},
wh = th.id;
class Ah {
createMediaKeys(t, e, i, r, n) {
let s = Ah.idToMediaKeysInfoMap[t];
if (!s) {
const a = Wc.getCapabilities(e, i),
o = new er;
Ah.requestKeySystemAccess(t, a, n, r).pipe(La(function(e) {
return Fr((Ah.idToMediaKeysInfoMap[t].keySystemAccess = e).createMediaKeys())
}), Za(e => {
o.next(e), o.complete()
}), Vn(e => (o.error(new yc(`could not initialize key system: ${e.message}`, void 0, 0, $.KeySystemFailedToInitialize, t)), Ii)), Va(Ah.destroy$)).subscribe(), s = Ah.idToMediaKeysInfoMap[t] = {
mediaKeys$: o,
keySystemAccess: null
}
}
return s.mediaKeys$
}
destroyMediaKeys() {
Ah.destroy$.next(), Ah.idToMediaKeysInfoMap = {}
}
static getKeySystemIdForDecryptData(e) {
let t;
if (e) {
t = wh;
var i = e.format;
for (const e of ih) {
var r = Eh[e];
if ((null == r ? void 0 : r.keyFormatString) === i) {
t = e;
break
}
}
}
if (!t) throw Error("No matching key system");
return t
}
static requestKeySystemAccess(e, t, i, r) {
if ("undefined" == typeof navigator || void 0 === navigator.requestMediaKeySystemAccess) return Vi(new yc("navigator undefined", void 0, 0, $.KeySystemUndefinedNavigator, e));
const n = Ih[e];
let s = Vi(new yc("no key systems to try", void 0, 0, $.KeySystemNoKeySystemsToTry, e));
for (const e of n) {
const n = e[0],
o = e[1],
l = (a = i) && "object" == typeof a ? i : o.requestAccessConfig,
d = [Object.assign({}, l, t)];
s = s.pipe(Vn(() => Ah.requestKeySystemInternal(n, d, r)))
}
var a;
return s
}
static requestKeySystemInternal(e, t, i) {
return Zr(() => Fr(navigator.requestMediaKeySystemAccess(e, t)))
}
make(e, t, i, r, n, s) {
var a = null === (l = Ah.idToMediaKeysInfoMap[e]) || void 0 === l ? void 0 : l.keySystemAccess;
if (!a) throw new yc(`No keySystemAccess for ${e}`, void 0, 0, $.KeySystemNoKeySystemAccess, e);
let o;
var l = Eh[e].systemStringPrefix;
for (const t of Ih[e])
if (t[0] === a.keySystem) {
o = t[1];
break
} if (!o) throw new yc(`No constructor associated with ${e}`, void 0, 0, $.KeySystemNoConstructor, l);
return new o(t, l, i, r, n, s)
}
static get availableKeySystems() {
return Object.keys(Eh)
}
static getKeySystemFormat(e) {
e = Eh[e];
return e ? e.keyFormatString : ""
}
static getKeySystemSecurityLevel(e) {
e = Eh[e];
return e ? e.securityLevels : void 0
}
}
Ah.idToMediaKeysInfoMap = {}, Ah.destroy$ = new Xt;
const Oh = ["avc1.42E01E"],
kh = ["mp4a.40.2"];
function Ch(e, t, i) {
if (t) {
if (t instanceof dr) t = new mc("Key request timed out", e, $.KeySystemRequestTimedOut);
else if (t instanceof yc) {
const i = (null == t ? void 0 : t.response) || $.InternalError;
t = new gc(t.message, e, 0, i, !1, rc.InternalError, !0)
}
} else t = new gc("Unknown error from CDM", e, 0, $.KeySystemCDMUnknownError, !1, rc.InternalError);
return (t instanceof gc || t instanceof mc) && (t.mediaOptionIds = [...i]), t
}
class Dh {
constructor(e, t, i, r, n, s, a, o = new Ah) {
this.ksService = e, this.mediaSink = t, this.config = i, this.platformQuery = r, this.eventEmitter = n, this.sessionHandler = s, this.keySystemFactory = o, this.reset$ = new Xt, this.keyRequest$ = new Xt, this.abort$ = new Xt, this.keySystem$ = new yi(null), this._keyStatusChange$ = new Xt, this.protectionData = {}, this.keySystemId = null, this.keyUriToRequest = {}, this.ksQuery = e.getQuery(), this.logger = a.child({
name: "eme"
}), this.config.warmupCdms && this.keySystemFactory.createMediaKeys(Sc.id, Oh, kh, this.logger, void 0).subscribe(), an(r.platformInfo$.pipe(Is((e, t) => e && t && e.requiresCDMAttachOnStart === t.requiresCDMAttachOnStart), La(e => null != e && e.requiresCDMAttachOnStart ? this.attachMediaKeys().pipe(Vn(e => (this.handleKeySystemError(e), Ii))) : Wu), $a(Ii)), this.keyRequest$.pipe(jr(e => e.pipe(Vn(() => Ii)))), this.keySystem$.pipe(La(e => e ? e.keyStatusChange$.pipe(Za(e => {
var t = e.decryptdata.uri,
i = this.ksQuery.getKeyInfo(t);
"needs-renewal" === e.status ? this.ksService.updateKeyRequestState(t, ic.MustRequestResponse, e => e === ic.GotKeyResponse) : (i = Ch(t, e.error, null !== (i = null == i ? void 0 : i.mediaOptionIds) && void 0 !== i ? i : []), this.ksService.setError(t, i)), this._keyStatusChange$.next(e)
})) : Ii)), this.isKeyCleanupSupported() ? this.mediaSink.mediaQuery.bufferedSegmentsTuple$.pipe(jr(e => {
const [t, i] = e, r = new Set;
return t.forEach(e => {
e = null === (e = null === (e = e.frag) || void 0 === e ? void 0 : e.keyTagInfo) || void 0 === e ? void 0 : e.uri;
e && r.add(e)
}), i.forEach(e => {
e = null === (e = null === (e = e.frag) || void 0 === e ? void 0 : e.keyTagInfo) || void 0 === e ? void 0 : e.uri;
e && r.add(e)
}), this.handleKeyCleanup(r)
})) : Wu).pipe(Va(this.reset$)).subscribe()
}
get keyStatusChange$() {
return this._keyStatusChange$
}
get keySystem() {
return this.keySystem$.value
}
destroy() {
this.reset$.next(), this.ksService.removeAll(), this.keySystemId = null;
const e = this.keySystem;
let t = Wu;
return e && (this.keySystem$.next(null), e.shouldDestroyMediaKeys && this.keySystemFactory.destroyMediaKeys(), t = e.destroy()), Mr([t, this.mediaSink.clearMediaKeys()]).pipe(Zs(void 0))
}
attachMediaKeys() {
if (this.keySystem) return Wu;
var e = this.config.keySystemPreference ? Ah.getKeySystemFormat(this.config.keySystemPreference) : Sc.keyFormatString;
return this.makeKeySystem(new zc("NONE", null, null, e, [1])).pipe(Zs(void 0))
}
isKeyCleanupSupported() {
return !0 === this.config.useMultipleKeySessions || "widevine" === this.config.keySystemPreference || "playready" === this.config.keySystemPreference
}
handleKeyCleanup(i) {
if (this.ksQuery.getCount() < 6) return Wu;
const r = performance.now(),
e = this.ksQuery.getAll().map(e => {
var t = e.keyUri;
if (!i.has(t)) {
const i = ac(e.decryptdata);
if ("AES-128" !== i.method && r > e.minHoldTime) return this._removeKey(t, i)
}
return Wu
});
return e.length ? en(e).pipe($a(Wu)) : Wu
}
_removeKey(e, t) {
return this.abort$.next(e), this.ksService.removeKey(e), this.keySystem.removeKey(t)
}
removeKeysForItems(i) {
const r = [];
return al(() => {
for (const e of i) {
this.ksService.removeAllKeysForItem(e);
const i = this.ksQuery.getAll({
filterBy: e => 0 === e.itemIds.length
});
for (const t of i) r.push(this._removeKey(t.keyUri, ac(t.decryptdata)))
}
}), r.length ? en(r).pipe(La(() => Wu)) : Wu
}
get availableKeySystems() {
return Ah.availableKeySystems
}
initialize(e) {
var t = this.protectionData;
this.protectionData = {};
var i = this.config.keySystemPreference;
for (const a of Ah.availableKeySystems) {
var r = e[a];
if (r)
if (i === a) {
var n, s = r.certificate,
r = r.serverCertUrl ? bu.buildAbsoluteURL(window.location.href, r.serverCertUrl) : void 0;
let e;
this.protectionData[a] = {
serverCertUrl: r,
certificate: s
}, s ? e = $i({
keysystem: a,
certificate: s
}) : r && (null === (n = null == t ? void 0 : t[a]) || void 0 === n ? void 0 : n.serverCertUrl) !== r && (n = Tu(r) ? this.config.certLoadPolicy.customURL : this.config.certLoadPolicy.default, e = Rc({
url: r,
xhrSetup: this.config.xhrSetup
}, n).pipe(hr(([e]) => ({
keysystem: a,
certificate: new Uint8Array(e)
})))), e && e.pipe(La(e => this.onServerCertificateLoaded(e)), Vn(e => {
throw this.logger.error(`Error loading cert: ${e.message}`), this.eventEmitter.trigger(x.INTERNAL_ERROR, {
type: o,
details: "certificateLoadError",
fatal: !1,
handled: !0,
reason: "Error handling cert",
response: $.KeySystemCertificateLoadError,
message: e.message,
name: "certificateLoadError"
}), e
}), Va(this.reset$)).subscribe()
} else this.logger.warn(`Key system ${a} does not match preference ${i}, ignoring`)
}
}
generateRequest(e, t) {
this.keySystem && this.keySystem.setKeyRequestInfo(e, t)
}
setLicenseResponse(e, t) {
this.keySystem && this.keySystem.setParsedResponse(e, t)
}
getKeyFromDecryptData(e, t) {
if (!e || !e.isEncrypted) return $i(e);
let i;
return al(() => {
i = this._getKeyFromDecryptData(e, t)
}), i
}
_getKeyFromDecryptData(t, i) {
let r = null,
n = null;
i && (r = i.itemId, n = i.mediaOptionId);
const s = t.uri,
e = this.ksQuery.getKeyInfo(s);
if (e && null != i && this.ksService.addMediaOption(s, i), (null == e ? void 0 : e.error) instanceof gc && !1 === e.error.isOkToRetry) return Vi(e.error);
if (e && e.requestState !== ic.MustRequestResponse) return e.requestState === ic.GotKeyResponse ? $i(ac(e.decryptdata)) : this.keyUriToRequest[s]; {
const o = performance.now() + this.config.keyMinHoldTimeBeforeCleanup;
let e;
this.abort$.next(s), this.ksService.upsertKey({
keyUri: s,
decryptdata: function(e) {
var {
method: t,
isEncrypted: i,
uri: r,
format: n,
formatversions: s
} = e;
return {
method: t,
isEncrypted: i,
uri: r,
format: n,
formatversions: s,
ivBuf: null !== (s = null === (s = e.iv) || void 0 === s ? void 0 : s.buffer) && void 0 !== s ? s : null,
keyIdBuf: null === (s = e.keyId) || void 0 === s ? void 0 : s.buffer,
keyBuf: null === (s = e.key) || void 0 === s ? void 0 : s.buffer,
psshBuf: null === (e = e.key) || void 0 === e ? void 0 : e.buffer
}
}(t),
minHoldTime: o,
mediaOptionIds: [n],
requestState: ic.WaitingForKeyResponse,
itemIds: [r]
});
var a = t.method;
switch (a) {
case "SAMPLE-AES":
case "ISO-23001-7":
case "SAMPLE-AES-CTR": {
const o = this.config.keyLoadPolicy.customURL;
e = this.fetchKeyEME(t).pipe(So(o.maxLoadTimeMs));
break
}
case "AES-128":
e = this.fetchKeyHTTP(t.uri, t, this.config.keyLoadPolicy);
break;
default:
return Vi(new V(!1, `Unexpected METHOD attribute ${a}`, $.KeySystemUnexpectedMETHOD))
}
i = this.keyUriToRequest[s] = e.pipe(hr(e => {
var t = e.decryptdata;
return this.ksService.updateKeyValue(s, t.key), this.eventEmitter.trigger(x.KEY_LOADED, e), e.decryptdata
}), Vn(e => {
var t = this.ksQuery.getKeyInfo(s);
return e = Ch(s, e, null !== (t = null == t ? void 0 : t.mediaOptionIds) && void 0 !== t ? t : []), this.ksService.setError(s, e), Vi(e)
}), Vs(() => {
this.ksService.updateKeyRequestState(s, ic.MustRequestResponse, e => e === ic.WaitingForKeyResponse), this.keyUriToRequest[s] = null
}), Aa(), Va(fn(this.abort$.pipe(ln(e => e === s)), this.reset$).pipe(Za(e => this.logger.warn(e ? `aborted ${le(e)}` : "got reset")))));
return this.keyRequest$.next(i), i
}
}
fetchKeyEME(e) {
return this.requestKey(e).pipe(hr(e => ({
timestamp: performance.now(),
keyuri: e.uri,
decryptdata: e
})))
}
fetchKeyHTTP(e, t, i) {
return Dh.fetchKeyHTTP(e, this.config, t, i)
}
static fetchKeyHTTP(t, e, i, r) {
e = {
url: t,
xhrSetup: e.xhrSetup
};
return Rc(e, Lc(e, r)).pipe(hr(([e]) => (i.key = new Uint8Array(e), {
decryptdata: i,
keyuri: t,
timestamp: performance.now()
})))
}
requestKey(t) {
return this.makeKeySystem(t).pipe(La(e => e.startKeyRequest(t)))
}
ensureKeySystem(t) {
return Zr(() => {
if (!this.keySystem && this.keySystemId) {
this.keySystem$.next(this.keySystemFactory.make(this.keySystemId, t, this.config, this.eventEmitter, this.sessionHandler, this.logger));
var e = this.protectionData && this.protectionData[this.keySystemId];
if (e) return this.keySystem.setServerCertificate(e.certificate).pipe(Zs(this.keySystem))
}
return $i(this.keySystem)
})
}
makeKeySystem(e) {
return this.ensureMediaKeys(e).pipe(La(e => this.mediaSink.setMediaKeys(e).pipe(La(() => this.ensureKeySystem(e)))))
}
ensureMediaKeys(e) {
var t = Ah.getKeySystemIdForDecryptData(e);
if (null == this.keySystemId) this.keySystemId = t;
else if (this.keySystemId !== t) return Vi(new gc(`New key system string does not match existing ${t} !== ${this.keySystemId}`, e.uri, 0, $.KeySystemUnmatchedString, !1, rc.InternalError));
return this.keySystemFactory.createMediaKeys(this.keySystemId, Oh, kh, this.logger, null === (e = this.platformQuery.platformInfo) || void 0 === e ? void 0 : e.keySystemConfig)
}
onServerCertificateLoaded(e) {
var t = e.keysystem,
e = e.certificate;
return this.protectionData[t].certificate = e, this.keySystem && this.keySystemId === t ? this.keySystem.setServerCertificate(e).pipe(Zs(void 0)) : Wu
}
handleKeySystemError(e) {
e = new yc(e.message, void 0, void 0, $.KeySystemSetupError, void 0);
this.eventEmitter.trigger(x.INTERNAL_ERROR, e)
}
}
class Mh extends kl {
constructor(e) {
super(e)
}
getKeyInfo(e) {
e = this.getEntity(e);
return e ? Object.assign(Object.assign({}, e), {
error: vc(e.error, e.mediaOptionIds)
}) : null
}
getKeyInfo$(e) {
return this.selectEntity(e).pipe(hr(e => e ? Object.assign(Object.assign({}, e), {
error: vc(e.error, e.mediaOptionIds)
}) : null))
}
getKeyRequestState$(e) {
return this.selectEntity(e, e => null == e ? void 0 : e.requestState)
}
getKeyStatus$(e) {
return this.selectEntity(e, e => null == e ? void 0 : e.status)
}
getKeyError$(e) {
return this.selectEntity(e, e => vc(null == e ? void 0 : e.error, null == e ? void 0 : e.mediaOptionIds)).pipe(wl)
}
}
class xh {
constructor(e) {
this.store = e
}
getQuery() {
return new Mh(this.store)
}
upsertKey(i) {
Do("keys.upsert", i.keyUri);
const r = new Set(i.itemIds.filter(e => null != e)),
n = new Set(i.mediaOptionIds.filter(e => null != e));
this.store.upsert(i.keyUri, e => {
const t = Object.assign(Object.assign({}, e), i);
if ("itemIds" in e)
for (const i of e.itemIds) r.add(i);
if (t.itemIds = Array.from(r), "mediaOptionIds" in e)
for (const i of e.mediaOptionIds) n.add(i);
return t.mediaOptionIds = Array.from(n), t
}, () => Object.assign(Object.assign({}, i), {
itemIds: Array.from(r),
mediaOptionIds: Array.from(n)
}))
}
removeKey(e) {
Do("keys.removeKey", e), this.store.remove(e)
}
removeAllKeysForItem(i) {
Do(`keys.removeAllKeysForItem ${i}`), this.store.update(null, e => {
var t = e.itemIds.findIndex(e => e === i);
0 <= t && e.itemIds.splice(t, 1)
})
}
removeAll() {
Do("keys.remove"), this.store.remove()
}
updateKeyValue(e, t) {
Do("keys.updateKeyValue", e), this.store.update(e, e => {
null == e.decryptdata.keyBuf && null != t && (e.decryptdata.keyBuf = t.buffer), e.requestState = ic.GotKeyResponse
})
}
updateKeyStatus(e, t) {
Do(`keys.updateKeyStatus ${t}`, e), this.store.update(e, e => {
e.status = t
})
}
updateKeyRequestState(e, t, i) {
Do(`keys.updateKeyRequestState ${t}`, e), this.store.update(e, e => {
i && !i(e.requestState) || (e.requestState = t)
})
}
addMediaOption(e, t) {
const {
itemId: i,
mediaOptionId: r
} = t;
Do(`keys.addMediaOption itemId: ${i}, mediaOptionId: ${r}`, e), this.store.update(e, e => {
null != r && e.mediaOptionIds.every(e => e !== r) && e.mediaOptionIds.push(r), null != i && e.itemIds.every(e => e !== i) && e.itemIds.push(i)
})
}
setError(e, t) {
var i;
Do(`keys.setError ${null===(i=null==t?void 0:t.constructor)||void 0===i?void 0:i.name}`, e), this.store.update(e, e => {
e.error = vc(t), e.requestState = ic.MustRequestResponse
})
}
}
const Ph = new class extends fl {
constructor() {
super({}, {
name: "key-system-store",
idKey: "keyUri",
producerFn: su
})
}
};
let Rh = null;
function Lh(e) {
let t = e;
return Nh.hasOwnProperty(e) && (t = Nh[e]), String.fromCharCode(t)
}
function _h(t) {
const i = [];
for (let e = 0; e < t.length; e++) i.push(t[e].toString(16));
return i
}
const Nh = {
42: 225,
92: 233,
94: 237,
95: 243,
96: 250,
123: 231,
124: 247,
125: 209,
126: 241,
127: 9608,
128: 174,
129: 176,
130: 189,
131: 191,
132: 8482,
133: 162,
134: 163,
135: 9834,
136: 224,
137: 32,
138: 232,
139: 226,
140: 234,
141: 238,
142: 244,
143: 251,
144: 193,
145: 201,
146: 211,
147: 218,
148: 220,
149: 252,
150: 8216,
151: 161,
152: 42,
153: 8217,
154: 9473,
155: 169,
156: 8480,
157: 8226,
158: 8220,
159: 8221,
160: 192,
161: 194,
162: 199,
163: 200,
164: 202,
165: 203,
166: 235,
167: 206,
168: 207,
169: 239,
170: 212,
171: 217,
172: 249,
173: 219,
174: 171,
175: 187,
176: 195,
177: 227,
178: 205,
179: 204,
180: 236,
181: 210,
182: 242,
183: 213,
184: 245,
185: 123,
186: 125,
187: 92,
188: 94,
189: 95,
190: 124,
191: 8764,
192: 196,
193: 228,
194: 214,
195: 246,
196: 223,
197: 165,
198: 164,
199: 9475,
200: 197,
201: 229,
202: 216,
203: 248,
204: 9487,
205: 9491,
206: 9495,
207: 9499
},
Fh = 100,
Bh = {
17: 1,
18: 3,
21: 5,
22: 7,
23: 9,
16: 11,
19: 12,
20: 14
},
Uh = {
17: 2,
18: 4,
21: 6,
22: 8,
23: 10,
19: 13,
20: 15
},
$h = {
25: 1,
26: 3,
29: 5,
30: 7,
31: 9,
24: 11,
27: 12,
28: 14
},
Vh = {
25: 2,
26: 4,
29: 6,
30: 8,
31: 10,
27: 13,
28: 15
},
Kh = ["white", "green", "blue", "cyan", "red", "yellow", "magenta", "black", "transparent"],
qh = {
verboseFilter: {
DATA: 3,
DEBUG: 3,
INFO: 2,
WARNING: 2,
TEXT: 1,
ERROR: 0
},
time: null,
verboseLevel: 0,
setTime: function(e) {
this.time = e
},
log: function(e, t) {
var i = this.verboseFilter[e];
this.verboseLevel >= i && console.log(this.time + " [" + e + "] " + t)
}
};
class Hh {
constructor(e, t, i, r, n) {
this.foreground = e || "white", this.underline = t || !1, this.italics = i || !1, this.background = r || "black", this.flash = n || !1
}
reset() {
this.foreground = "white", this.underline = !1, this.italics = !1, this.background = "black", this.flash = !1
}
setStyles(e) {
Object.assign(this, e)
}
isDefault() {
return "white" === this.foreground && !this.underline && !this.italics && "black" === this.background && !this.flash
}
equals(e) {
return this.foreground === e.foreground && this.underline === e.underline && this.italics === e.italics && this.background === e.background && this.flash === e.flash
}
copy(e) {
this.foreground = e.foreground, this.underline = e.underline, this.italics = e.italics, this.background = e.background, this.flash = e.flash
}
toString() {
return "color=" + this.foreground + ", underline=" + this.underline + ", italics=" + this.italics + ", background=" + this.background + ", flash=" + this.flash
}
}
class jh {
constructor(e, t, i, r, n, s) {
this.uchar = e || " ", this.penState = new Hh(t, i, r, n, s)
}
reset() {
this.uchar = " ", this.penState.reset()
}
setChar(e, t) {
this.uchar = e, this.penState.copy(t)
}
setPenState(e) {
this.penState.copy(e)
}
equals(e) {
return this.uchar === e.uchar && this.penState.equals(e.penState)
}
copy(e) {
this.uchar = e.uchar, this.penState.copy(e.penState)
}
isEmpty() {
return " " === this.uchar && this.penState.isDefault()
}
}
class Qh {
constructor() {
this.chars = [];
for (let e = 0; e < Fh; e++) this.chars.push(new jh);
this.pos = 0, this.currPenState = new Hh
}
equals(t) {
let i = !0;
for (let e = 0; e < Fh; e++)
if (!this.chars[e].equals(t.chars[e])) {
i = !1;
break
} return i
}
copy(t) {
for (let e = 0; e < Fh; e++) this.chars[e].copy(t.chars[e])
}
isEmpty() {
let t = !0;
for (let e = 0; e < Fh; e++)
if (!this.chars[e].isEmpty()) {
t = !1;
break
} return t
}
setCursor(e) {
this.pos !== e && (this.pos = e), this.pos < 0 ? (qh.log("ERROR", "Negative cursor position " + this.pos), this.pos = 0) : this.pos > Fh && (qh.log("ERROR", "Too large cursor position " + this.pos), this.pos = Fh)
}
moveCursor(e) {
var t = this.pos + e;
if (1 < e)
for (let e = this.pos + 1; e < t + 1; e++) this.chars[e].setPenState(this.currPenState);
this.setCursor(t)
}
backSpace() {
this.moveCursor(-1), this.chars[this.pos].setChar(" ", this.currPenState)
}
insertChar(e) {
144 <= e && this.backSpace();
var t = Lh(e);
this.pos >= Fh ? qh.log("ERROR", "Cannot insert " + e.toString(16) + " (" + t + ") at position " + this.pos + ". Skipping it!") : (this.chars[this.pos].setChar(t, this.currPenState), this.moveCursor(1))
}
clearFromPos(e) {
let t;
for (t = e; t < Fh; t++) this.chars[t].reset()
}
clear() {
this.clearFromPos(0), this.pos = 0, this.currPenState.reset()
}
clearToEndOfRow() {
this.clearFromPos(this.pos)
}
getTextString() {
const t = [];
let i = !0;
for (let e = 0; e < Fh; e++) {
var r = this.chars[e].uchar;
" " !== r && (i = !1), t.push(r)
}
return i ? "" : t.join("")
}
setPenStyles(e) {
this.currPenState.setStyles(e), this.chars[this.pos].setPenState(this.currPenState)
}
}
class Wh {
constructor() {
this.rows = [];
for (let e = 0; e < 15; e++) this.rows.push(new Qh);
this.currRow = 14, this.nrRollUpRows = null, this.reset()
}
reset() {
for (let e = 0; e < 15; e++) this.rows[e].clear();
this.currRow = 14
}
equals(t) {
let i = !0;
for (let e = 0; e < 15; e++)
if (!this.rows[e].equals(t.rows[e])) {
i = !1;
break
} return i
}
copy(t) {
for (let e = 0; e < 15; e++) this.rows[e].copy(t.rows[e])
}
isEmpty() {
let t = !0;
for (let e = 0; e < 15; e++)
if (!this.rows[e].isEmpty()) {
t = !1;
break
} return t
}
backSpace() {
this.rows[this.currRow].backSpace()
}
clearToEndOfRow() {
this.rows[this.currRow].clearToEndOfRow()
}
insertChar(e) {
this.rows[this.currRow].insertChar(e)
}
setPen(e) {
this.rows[this.currRow].setPenStyles(e)
}
moveCursor(e) {
this.rows[this.currRow].moveCursor(e)
}
setCursor(e) {
qh.log("INFO", "setCursor: " + e), this.rows[this.currRow].setCursor(e)
}
setPAC(t) {
qh.log("INFO", "pacData = " + JSON.stringify(t));
let i = t.row - 1;
if (this.nrRollUpRows && i < this.nrRollUpRows - 1 && (i = this.nrRollUpRows - 1), this.nrRollUpRows && this.currRow !== i) {
for (let e = 0; e < 15; e++) this.rows[e].clear();
const t = this.currRow + 1 - this.nrRollUpRows,
r = this.lastOutputScreen;
if (r) {
const e = r.rows[t].cueStartTime;
if (e && e < qh.time)
for (let e = 0; e < this.nrRollUpRows; e++) this.rows[i - this.nrRollUpRows + e + 1].copy(r.rows[t + e])
}
}
this.currRow = i;
const r = this.rows[this.currRow];
if (null !== t.indent) {
const i = t.indent,
e = Math.max(i - 1, 0);
r.setCursor(t.indent), t.color = r.chars[e].penState.foreground
}
const e = {
foreground: t.color,
underline: t.underline,
italics: t.italics,
background: "black",
flash: !1
};
this.setPen(e)
}
setBkgData(e) {
qh.log("INFO", "bkgData = " + JSON.stringify(e)), this.backSpace(), this.setPen(e), this.insertChar(32)
}
setRollUpRows(e) {
this.nrRollUpRows = e
}
rollUp() {
if (null !== this.nrRollUpRows) {
qh.log("INFO", "TEXT " + this.getDisplayText());
const e = this.currRow + 1 - this.nrRollUpRows,
t = this.rows.splice(e, 1)[0];
t.clear(), this.rows.splice(this.currRow, 0, t), qh.log("INFO", "Rolling up")
} else qh.log("DEBUG", "roll_up but nrRollUpRows not set yet")
}
getDisplayText(t) {
t = t || !1;
const i = [];
let e = "",
r;
for (let e = 0; e < 15; e++) {
const n = this.rows[e].getTextString();
n && (r = e + 1, t ? i.push("Row " + r + ": '" + n + "'") : i.push(n.trim()))
}
return 0 < i.length && (e = t ? "[" + i.join(" | ") + "]" : i.join("\n")), e
}
getTextAndFormat() {
return this.rows
}
}
class Gh {
constructor(e, t) {
this.chNr = e, this.outputFilter = t, this.mode = null, this.verbose = 0, this.displayedMemory = new Wh, this.nonDisplayedMemory = new Wh, this.lastOutputScreen = new Wh, this.currRollUpRow = this.displayedMemory.rows[14], this.writeScreen = this.displayedMemory, this.mode = null, this.cueStartTime = null
}
reset() {
this.mode = null, this.displayedMemory.reset(), this.nonDisplayedMemory.reset(), this.lastOutputScreen.reset(), this.currRollUpRow = this.displayedMemory.rows[14], this.writeScreen = this.displayedMemory, this.mode = null, this.cueStartTime = null, this.lastCueEndTime = null
}
getHandler() {
return this.outputFilter
}
setHandler(e) {
this.outputFilter = e
}
setPAC(e) {
this.writeScreen.setPAC(e)
}
setBkgData(e) {
this.writeScreen.setBkgData(e)
}
setMode(e) {
e !== this.mode && (this.mode = e, qh.log("INFO", "MODE=" + e), "MODE_POP-ON" === this.mode ? this.writeScreen = this.nonDisplayedMemory : (this.writeScreen = this.displayedMemory, this.writeScreen.reset()), "MODE_ROLL-UP" !== this.mode && (this.displayedMemory.nrRollUpRows = null, this.nonDisplayedMemory.nrRollUpRows = null), this.mode = e)
}
insertChars(t) {
for (let e = 0; e < t.length; e++) this.writeScreen.insertChar(t[e]);
var e = this.writeScreen === this.displayedMemory ? "DISP" : "NON_DISP";
qh.log("INFO", e + ": " + this.writeScreen.getDisplayText(!0)), "MODE_PAINT-ON" !== this.mode && "MODE_ROLL-UP" !== this.mode || (qh.log("TEXT", "DISPLAYED: " + this.displayedMemory.getDisplayText(!0)), this.outputDataUpdate())
}
ccRCL() {
qh.log("INFO", "RCL - Resume Caption Loading"), this.setMode("MODE_POP-ON")
}
ccBS() {
qh.log("INFO", "BS - BackSpace"), "MODE_TEXT" !== this.mode && (this.writeScreen.backSpace(), this.writeScreen === this.displayedMemory && this.outputDataUpdate())
}
ccAOF() {}
ccAON() {}
ccDER() {
qh.log("INFO", "DER- Delete to End of Row"), this.writeScreen.clearToEndOfRow(), this.outputDataUpdate()
}
ccRU(e) {
qh.log("INFO", "RU(" + e + ") - Roll Up"), this.writeScreen = this.displayedMemory, this.setMode("MODE_ROLL-UP"), this.writeScreen.setRollUpRows(e)
}
ccFON() {
qh.log("INFO", "FON - Flash On"), this.writeScreen.setPen({
flash: !0
})
}
ccRDC() {
qh.log("INFO", "RDC - Resume Direct Captioning"), this.setMode("MODE_PAINT-ON")
}
ccTR() {
qh.log("INFO", "TR"), this.setMode("MODE_TEXT")
}
ccRTD() {
qh.log("INFO", "RTD"), this.setMode("MODE_TEXT")
}
ccEDM() {
qh.log("INFO", "EDM - Erase Displayed Memory"), this.displayedMemory.reset(), this.outputDataUpdate(!0)
}
ccCR() {
qh.log("INFO", "CR - Carriage Return"), this.writeScreen.rollUp(), this.outputDataUpdate(!0)
}
ccENM() {
qh.log("INFO", "ENM - Erase Non-displayed Memory"), this.nonDisplayedMemory.reset()
}
ccEOC() {
var e;
qh.log("INFO", "EOC - End Of Caption"), "MODE_POP-ON" === this.mode && (e = this.displayedMemory, this.displayedMemory = this.nonDisplayedMemory, this.nonDisplayedMemory = e, this.writeScreen = this.nonDisplayedMemory, qh.log("TEXT", "DISP: " + this.displayedMemory.getDisplayText())), this.outputDataUpdate(!0)
}
ccTO(e) {
qh.log("INFO", "TO(" + e + ") - Tab Offset"), this.writeScreen.moveCursor(e)
}
ccMIDROW(e) {
const t = {
flash: !1,
underline: !1,
italics: !1
};
t.underline = e % 2 == 1, t.italics = 46 <= e, t.italics ? t.foreground = "white" : (e = Math.floor(e / 2) - 16, t.foreground = ["white", "green", "blue", "cyan", "red", "yellow", "magenta"][e]), qh.log("INFO", "MIDROW: " + JSON.stringify(t)), this.writeScreen.setPen(t)
}
outputDataUpdate(e = !1) {
var t = qh.time;
null !== t && this.outputFilter && (this.outputFilter.updateData && this.outputFilter.updateData(t, this.displayedMemory), null !== this.cueStartTime || this.displayedMemory.isEmpty() ? this.displayedMemory.equals(this.lastOutputScreen) || (this.outputFilter.newCue && (this.outputFilter.newCue(this.cueStartTime, t, this.lastOutputScreen), !0 === e && this.outputFilter.dispatchCue && this.outputFilter.dispatchCue()), this.cueStartTime = this.displayedMemory.isEmpty() ? null : t) : this.cueStartTime = t, this.lastOutputScreen.copy(this.displayedMemory))
}
cueSplitAtTime(e) {
this.outputFilter && (this.displayedMemory.isEmpty() || (this.outputFilter.newCue && this.outputFilter.newCue(this.cueStartTime, e, this.displayedMemory), this.cueStartTime = e))
}
}
var zh = class {
constructor(e = 1, t, i) {
this.field = e, this.currChNr = -1, this.lastCmdA = null, this.lastCmdB = null, this.channels = [new Gh(1, t), new Gh(2, i)], this.dataCounters = {
padding: 0,
char: 0,
cmd: 0,
other: 0
}
}
getHandler(e) {
return this.channels[e].getHandler()
}
setHandler(e, t) {
this.channels[e].setHandler(t)
}
addData(e, t) {
let i, r, n, s = null;
qh.setTime(e);
for (let e = 0; e < t.length; e += 2) r = 127 & t[e], n = 127 & t[e + 1], 16 <= r && r <= 31 && r === this.lastCmdA && n === this.lastCmdB ? (this.lastCmdA = null, this.lastCmdB = null, qh.log("DEBUG", "Repeated command (" + _h([r, n]) + ") is dropped")) : 0 != r || 0 != n ? (qh.log("DATA", "[" + _h([t[e], t[e + 1]]) + "] -> (" + _h([r, n]) + ")"), i = this.parseCmd(r, n), i = i || this.parseMidrow(r, n), i = i || this.parsePAC(r, n), i = i || this.parseBackgroundAttributes(r, n), !i && (s = this.parseChars(r, n), s) && (this.currChNr && 0 <= this.currChNr ? this.channels[this.currChNr - 1].insertChars(s) : qh.log("WARNING", "No channel found yet. TEXT-MODE?")), i ? this.dataCounters.cmd += 2 : s ? this.dataCounters.char += 2 : (this.dataCounters.other += 2, qh.log("WARNING", "Couldn't parse cleaned data " + _h([r, n]) + " orig: " + _h([t[e], t[e + 1]])))) : this.dataCounters.padding += 2
}
parseCmd(e, t) {
var i;
if (!((20 === e || 21 === e || 28 === e || 29 === e) && 32 <= t && t <= 47 || (23 === e || 31 === e) && 33 <= t && t <= 35)) return !1;
const r = this.channels[(i = 20 === e || 23 === e ? 1 : 2) - 1];
return 20 === e || 21 === e || 28 === e || 29 === e ? 32 === t ? r.ccRCL() : 33 === t ? r.ccBS() : 34 === t ? r.ccAOF() : 35 === t ? r.ccAON() : 36 === t ? r.ccDER() : 37 === t ? r.ccRU(2) : 38 === t ? r.ccRU(3) : 39 === t ? r.ccRU(4) : 40 === t ? r.ccFON() : 41 === t ? r.ccRDC() : 42 === t ? r.ccTR() : 43 === t ? r.ccRTD() : 44 === t ? r.ccEDM() : 45 === t ? r.ccCR() : 46 === t ? r.ccENM() : 47 === t && r.ccEOC() : r.ccTO(t - 32), this.lastCmdA = e, this.lastCmdB = t, this.currChNr = i, !0
}
parseMidrow(e, t) {
var i;
if ((17 === e || 25 === e) && 32 <= t && t <= 47) {
if ((i = 17 === e ? 1 : 2) !== this.currChNr) return qh.log("ERROR", "Mismatch channel in midrow parsing"), !1;
const r = this.channels[i - 1];
return r.insertChars([32]), r.ccMIDROW(t), qh.log("DEBUG", "MIDROW (" + _h([e, t]) + ")"), this.lastCmdA = e, this.lastCmdB = t, !0
}
return !1
}
parsePAC(e, t) {
if (!((17 <= e && e <= 23 || 25 <= e && e <= 31) && 64 <= t && t <= 127 || (16 === e || 24 === e) && 64 <= t && t <= 95)) return !1;
var i = e <= 23 ? 1 : 2,
r = (64 <= t && t <= 95 ? 1 == i ? Bh : $h : 1 == i ? Uh : Vh)[e],
r = this.interpretPAC(r, t);
return this.channels[i - 1].setPAC(r), this.lastCmdA = e, this.lastCmdB = t, this.currChNr = i, !0
}
interpretPAC(e, t) {
var i;
const r = {
color: null,
italics: !1,
indent: null,
underline: !1,
row: e
};
return i = 95 < t ? t - 96 : t - 64, r.underline = 1 == (1 & i), i <= 13 ? r.color = ["white", "green", "blue", "cyan", "red", "yellow", "magenta", "white"][Math.floor(i / 2)] : i <= 15 ? (r.italics = !0, r.color = "white") : r.indent = 4 * Math.floor((i - 16) / 2), r
}
parseChars(e, t) {
let i = null,
r = null,
n = null;
var s;
if (n = 25 <= e ? (i = 2, e - 8) : (i = 1, e), 17 <= n && n <= 19 ? (s = t, s = 17 === n ? t + 80 : 18 === n ? t + 112 : t + 144, qh.log("INFO", "Special char '" + Lh(s) + "' in channel " + i), r = [s], this.lastCmdA = e, this.lastCmdB = t) : 32 <= e && e <= 127 && (r = 0 === t ? [e] : [e, t], this.lastCmdA = null, this.lastCmdB = null), r) {
const e = _h(r);
qh.log("DEBUG", `Char codes = ${e.join(",")}`)
}
return r
}
parseBackgroundAttributes(e, t) {
let i, r, n;
return ((16 === e || 24 === e) && 32 <= t && t <= 47 || (23 === e || 31 === e) && 45 <= t && t <= 47) && (i = {
underline: !1
}, 16 === e || 24 === e ? (r = Math.floor((t - 32) / 2), i.background = Kh[r], t % 2 == 1 && (i.background = i.background + "_semi")) : 45 === t ? i.background = "transparent" : (i.foreground = "black", 47 === t && (i.underline = !0)), n = this.channels[(e < 24 ? 1 : 2) - 1], n.setBkgData(i), this.lastCmdA = null, !(this.lastCmdB = null))
}
reset() {
for (let e = 0; e < this.channels.length; e++) this.channels[e] && this.channels[e].reset();
this.lastCmdA = null, this.lastCmdB = null
}
cueSplitAtTime(t) {
for (let e = 0; e < this.channels.length; e++) this.channels[e] && this.channels[e].cueSplitAtTime(t)
}
};
class Xh {
constructor(e, t) {
this.handler = e, this.track = t, this.startTime = null, this.endTime = null, this.screen = null
}
dispatchCue() {
null !== this.startTime && (this.handler.addCues("cc" + this.track, this.startTime, this.endTime, this.screen), this.startTime = null)
}
newCue(e, t, i) {
(null === this.startTime || this.startTime > e) && (this.startTime = e), this.endTime = t, this.screen = i, this.handler.createHTMLCaptionsTrack(this.track)
}
}
var Yh = {},
iu = {},
nu = {},
t = {};
Object.defineProperty(t, "__esModule", {
value: !0
}), t.isValidPercentValue = function(e) {
return "number" == typeof e && 0 <= e && e <= 100
}, t.isValidAlignSetting = function(e) {
return "string" == typeof e && ["start", "center", "end", "left", "right", "middle"].includes(e)
}, t.isValidDirectionSetting = function(e) {
return "string" == typeof e && ["", "rl", "lr"].includes(e)
}, t.isValidLineAndPositionSetting = function(e) {
return "number" == typeof e || "auto" === e
}, t.isValidLineAlignSetting = function(e) {
return "string" == typeof e && ["start", "center", "end"].includes(e)
}, t.isValidPositionAlignSetting = function(e) {
return "string" == typeof e && ["line-left", "center", "line-right", "auto", "left", "start", "middle", "end", "right"].includes(e)
}, t.isValidScrollSetting = function(e) {
return ["", "up"].includes(e)
};
ru = {};
Object.defineProperty(ru, "__esModule", {
value: !0
});
const Jh = {
"&amp;": "&",
"&lt;": "<",
"&gt;": ">",
"&lrm;": "‎",
"&rlm;": "‏",
"&nbsp;": "Â "
},
Zh = {
c: "span",
i: "i",
b: "b",
u: "u",
ruby: "ruby",
rt: "rt",
v: "span",
lang: "span"
},
ep = {
v: "title",
lang: "lang"
},
tp = {
rt: "ruby"
},
ip = {
"text-combine-upright": "-webkit-text-combine:horizontal; text-orientation: mixed;"
};
class rp {
static parseTimeStamp(e) {
function t(e) {
var [t, i, r, e] = e.map(e => e ? parseInt("" + e) : 0);
return 3600 * t + 60 * i + r + e / 1e3
}
const i = /^(\d+):(\d{2})(:\d{2})?\.(\d{3})/.exec(e);
return i ? i[3] ? t([i[1], i[2], i[3].substring(1), i[4]]) : 59 < parseInt(i[1]) ? t([i[1], i[2], null, i[4]]) : t([null, i[1], i[2], i[4]]) : null
}
static parseContent(s, t, a) {
let i = t.text;
function e(e) {
return Jh[e]
}
const r = s.document.createElement("div"),
n = [];
let o, l, d = r;
for (; null !== (o = function() {
if (!i) return null;
var e = (e = /^([^<]*)(<[^>]+>?)?/.exec(i))[1] || e[2];
return i = i.substr(e.length), e
}());)
if ("<" !== o[0]) d.appendChild(s.document.createTextNode(o.replace(/&(amp|lt|gt|lrm|rlm|nbsp);/g, e)));
else {
if ("/" === o[1]) {
n.length && n[n.length - 1] === o.substr(2).replace(">", "") && (n.pop(), d = d.parentNode);
continue
}
const t = rp.parseTimeStamp(o.substr(1, o.length - 2));
let e;
if (t) {
e = s.document.createProcessingInstruction("timestamp", t.toString()), d.appendChild(e);
continue
}
if (!(l = /^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/.exec(o))) continue;
if (e = function(e, t, i) {
var r = Zh[e];
if (!r) return null;
const n = s.document.createElement(r);
if (n.dataset.localName = r, (e = ep[e]) && i && (n[e] = i.trim()), t)
if (a[t]) {
const s = function(e) {
let t = "";
for (const i in e) t += ip[i] || i + ":" + e[i] + ";";
return t
}(a[t]);
n.setAttribute("style", s)
} else console.info(`WebVTT: parseContent: Style referenced, but no style defined for '${t}'!`);
return n
}(l[1], l[2], l[3]), !e) continue;
if (u = d, c = e, tp[c.dataset.localName] && tp[c.dataset.localName] !== u.dataset.localName) continue;
n.push(l[1]), d.appendChild(e), d = e
} var u, c;
return r
}
}
ru.default = rp;
w = e && e.__decorate || function(e, t, i, r) {
var n, s = arguments.length,
a = s < 3 ? t : null === r ? r = Object.getOwnPropertyDescriptor(t, i) : r;
if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) a = Reflect.decorate(e, t, i, r);
else
for (var o = e.length - 1; 0 <= o; o--)(n = e[o]) && (a = (s < 3 ? n(a) : 3 < s ? n(t, i, a) : n(t, i)) || a);
return 3 < s && a && Object.defineProperty(t, i, a), a
};
Object.defineProperty(nu, "__esModule", {
value: !0
});
const np = t,
sp = ru;
w = w([function(e) {
let t = e;
return "undefined" != typeof window && null != window.VTTCue && (t = window.VTTCue, t.create = e.create, t.fromJSON = e.fromJSON, t.prototype.toJSON = e.prototype.toJSON), t
}], w = class {
constructor(e, t, i) {
this._id = "", this._pauseOnExit = !1, this._region = null, this._vertical = "", this._snapToLines = !0, this._line = "auto", this._lineAlign = "start", this._position = "auto", this._positionAlign = "auto", this._size = 100, this._align = "center", this.hasBeenReset = !1, this._startTime = e, this._endTime = t, this._text = i
}
get id() {
return this._id
}
set id(e) {
this._id = "" + e
}
get pauseOnExit() {
return this._pauseOnExit
}
set pauseOnExit(e) {
this._pauseOnExit = !!e
}
get startTime() {
return this._startTime
}
set startTime(e) {
if ("number" != typeof e) throw new TypeError(`Start time must be set to a number: ${e}`);
this._startTime = e, this.hasBeenReset = !0
}
get endTime() {
return this._endTime
}
set endTime(e) {
if ("number" != typeof e) throw new TypeError(`End time must be set to a number: ${e}`);
this._endTime = e, this.hasBeenReset = !0
}
get text() {
return this._text
}
set text(e) {
this._text = "" + e, this.hasBeenReset = !0
}
get region() {
return this._region
}
set region(e) {
this._region = e, this.hasBeenReset = !0
}
get vertical() {
return this._vertical
}
set vertical(e) {
if (!np.isValidDirectionSetting(e)) throw new SyntaxError(`An invalid or illegal string was specified for vertical: ${e}`);
this._vertical = e, this.hasBeenReset = !0
}
get snapToLines() {
return this._snapToLines
}
set snapToLines(e) {
this._snapToLines = !!e, this.hasBeenReset = !0
}
get line() {
return this._line
}
set line(e) {
if (!np.isValidLineAndPositionSetting(e)) throw new SyntaxError(`An invalid number or illegal string was specified for line: ${e}`);
this._line = e, this.hasBeenReset = !0
}
get lineAlign() {
return this._lineAlign
}
set lineAlign(e) {
if (!np.isValidLineAlignSetting(e)) throw new SyntaxError(`An invalid or illegal string was specified for lineAlign: ${e}`);
this._lineAlign = e, this.hasBeenReset = !0
}
get position() {
return this._position
}
set position(e) {
if (!np.isValidLineAndPositionSetting(e)) throw new Error(`Position must be between 0 and 100 or auto: ${e}`);
this._position = e, this.hasBeenReset = !0
}
get positionAlign() {
return this._positionAlign
}
set positionAlign(e) {
if (!np.isValidPositionAlignSetting(e)) throw new SyntaxError(`An invalid or illegal string was specified for positionAlign: ${e}`);
this._positionAlign = e, this.hasBeenReset = !0
}
get size() {
return this._size
}
set size(e) {
if (e < 0 || 100 < e) throw new Error(`Size must be between 0 and 100: ${e}`);
this._size = e, this.hasBeenReset = !0
}
get align() {
return this._align
}
set align(e) {
if (!np.isValidAlignSetting(e)) throw new SyntaxError(`An invalid or illegal string was specified for align: ${e}`);
this._align = e, this.hasBeenReset = !0
}
getCueAsHTML() {
return sp.default.parseContent(window, this, {})
}
static create(t) {
if (!t.hasOwnProperty("startTime") || !t.hasOwnProperty("endTime") || !t.hasOwnProperty("text")) throw new Error("You must at least have start time, end time, and text.");
const i = new this(t.startTime, t.endTime, t.text);
return Object.keys(t).forEach(e => {
i.hasOwnProperty(e) && (i[e] = t[e])
}), i
}
static fromJSON(e) {
return this.create(JSON.parse(e))
}
toJSON() {
const t = {};
return Object.keys(this).forEach(e => {
this.hasOwnProperty(e) && "getCueAsHTML" !== e && "hasBeenReset" !== e && "displayState" !== e && (t[e] = this[e])
}), t
}
});
nu.VTTCue = w;
w = {}, e = e && e.__decorate || function(e, t, i, r) {
var n, s = arguments.length,
a = s < 3 ? t : null === r ? r = Object.getOwnPropertyDescriptor(t, i) : r;
if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) a = Reflect.decorate(e, t, i, r);
else
for (var o = e.length - 1; 0 <= o; o--)(n = e[o]) && (a = (s < 3 ? n(a) : 3 < s ? n(t, i, a) : n(t, i)) || a);
return 3 < s && a && Object.defineProperty(t, i, a), a
};
Object.defineProperty(w, "__esModule", {
value: !0
});
const ap = t;
e = e([function(e) {
let t = e;
return "undefined" != typeof window && null != window.VTTRegion && (t = window.VTTRegion, t.create = e.create, t.fromJSON = e.fromJSON, t.prototype.toJSON = e.prototype.toJSON), t
}], e = class {
constructor() {
this._id = "", this._lines = 3, this._regionAnchorX = 0, this._regionAnchorY = 100, this._scroll = "", this._viewportAnchorX = 0, this._viewportAnchorY = 100, this._width = 100
}
get id() {
return this._id
}
set id(e) {
if ("string" != typeof e) throw new Error("ID must be a string.");
this._id = e
}
get lines() {
return this._lines
}
set lines(e) {
if ("number" != typeof e) throw new TypeError("Lines must be set to a number.");
this._lines = e
}
get regionAnchorX() {
return this._regionAnchorX
}
set regionAnchorX(e) {
if (!ap.isValidPercentValue(e)) throw new TypeError("RegionAnchorX must be between 0 and 100.");
this._regionAnchorX = e
}
get regionAnchorY() {
return this._regionAnchorY
}
set regionAnchorY(e) {
if (!ap.isValidPercentValue(e)) throw new TypeError("RegionAnchorY must be between 0 and 100.");
this._regionAnchorY = e
}
get scroll() {
return this._scroll
}
set scroll(e) {
if ("string" == typeof e) {
e = e.toLowerCase();
if (ap.isValidScrollSetting(e)) return void(this._scroll = e)
}
throw new SyntaxError("An invalid or illegal string was specified.")
}
get viewportAnchorX() {
return this._viewportAnchorX
}
set viewportAnchorX(e) {
if (!ap.isValidPercentValue(e)) throw new TypeError("ViewportAnchorX must be between 0 and 100.");
this._viewportAnchorX = e
}
get viewportAnchorY() {
return this._viewportAnchorY
}
set viewportAnchorY(e) {
if (!ap.isValidPercentValue(e)) throw new TypeError("ViewportAnchorY must be between 0 and 100.");
this._viewportAnchorY = e
}
get width() {
return this._width
}
set width(e) {
if (!ap.isValidPercentValue(e)) throw new TypeError("Width must be between 0 and 100.");
this._lines = e
}
toJSON() {
const t = {};
return Object.keys(this).forEach(e => {
this.hasOwnProperty(e) && (t[e] = this[e])
}), t
}
static create(t) {
const i = new this;
return Object.keys(t).forEach(e => {
i.hasOwnProperty(e) && (i[e] = t[e])
}), i
}
static fromJSON(e) {
return this.create(JSON.parse(e))
}
});
w.VTTRegion = e, Object.defineProperty(iu, "__esModule", {
value: !0
});
const op = nu;
iu.VTTCue = op.VTTCue;
const lp = w;
iu.VTTRegion = lp.VTTRegion;
const dp = ru;
class up extends Error {
constructor(e, t) {
super(), this.name = "ParsingError", this.code = "number" == typeof e ? e : e.code, t ? this.message = t : e instanceof up && (this.message = e.message)
}
}(iu.ParsingError = up).Errors = {
BadSignature: new up(0, "Malformed WebVTT signature."),
BadTimeStamp: new up(1, "Malformed time stamp.")
};
class cp {
constructor() {
this.values = {}
}
set(e, t) {
this.get(e) || "" === t || (this.values[e] = t)
}
get(e, t, i) {
return "object" == typeof t && "string" == typeof i ? this.has(e) ? this.values[e] : t[i] : this.has(e) ? this.values[e] : t
}
has(e) {
return e in this.values
}
alt(t, i, r) {
for (let e = 0; e < r.length; ++e)
if (i === r[e]) {
this.set(t, i);
break
}
}
integer(e, t) {
/^-?\d+$/.test(t) && this.set(e, parseInt(t, 10))
}
percent(e, t) {
if (t.match(/^([\d]{1,3})(\.[\d]*)?%$/)) try {
var i = parseFloat(t);
if (0 <= i && i <= 100) return this.set(e, i), !0
} catch (e) {
return !1
}
return !1
}
}
class hp {
constructor(e, t, i) {
this.window = e, this.state = "INITIAL", this.styleCollector = "", this.buffer = "", this.decoder = t || new TextDecoder("utf8"), this.regionList = [], this.onStylesParsedCallback = i, this._styles = {}
}
static StringDecoder() {
return {
decode: e => {
if (!e) return "";
if ("string" != typeof e) throw new Error("Error - expected string data.");
return decodeURIComponent(encodeURIComponent(e))
}
}
}
reportOrThrowError(e) {
if (!(e instanceof up && "function" == typeof this.onparsingerror)) throw e;
this.onparsingerror(e)
}
parseOptions(e, t, i, r) {
e = r ? e.split(r) : [e];
for (const n of e)
if ("string" == typeof n) {
const r = n.split(i);
2 === r.length && t(r[0], r[1])
}
}
parseCue(t, e, a) {
const i = t,
r = () => {
var e = dp.default.parseTimeStamp(t);
if (null === e) throw new up(up.Errors.BadTimeStamp, "Malformed timestamp: " + i);
return t = t.replace(/^[^\sa-zA-Z-]+/, ""), e
},
n = () => {
t = t.replace(/^\s+/, "")
};
if (n(), e.startTime = r(), n(), "--\x3e" !== t.substr(0, 3)) throw new up(up.Errors.BadTimeStamp, `Malformed time stamp (time stamps must be separated by '--\x3e'): ${i}`);
t = t.substr(3), n(), e.endTime = r(), n(), ((e, t) => {
const s = new cp;
this.parseOptions(e, (t, i) => {
let e, r;
switch (t) {
case "region":
for (let e = a.length - 1; 0 <= e; e--)
if (a[e].id === i) {
s.set(t, a[e].region);
break
} break;
case "vertical":
s.alt(t, i, ["rl", "lr"]);
break;
case "line":
e = i.split(","), r = e[0], s.integer(t, r), s.percent(t, r) && s.set("snapToLines", !1), s.alt(t, r, ["auto"]), 2 === e.length && s.alt("lineAlign", e[1], ["start", "center", "end"]);
break;
case "position":
e = i.split(","), s.percent(t, e[0]), 2 === e.length && (n = ["line-left", "line-right", "center", "auto", "left", "start", "middle", "end", "right"], s.alt("positionAlign", e[1], n));
break;
case "size":
s.percent(t, i);
break;
case "align":
var n = ["start", "center", "end", "left", "right", "middle"];
s.alt(t, i, n)
}
}, /:/, /\s/), t.region = s.get("region", null), t.vertical = s.get("vertical", ""), t.line = s.get("line", void 0 === t.line ? "auto" : t.line), t.lineAlign = s.get("lineAlign", "start"), t.snapToLines = s.get("snapToLines", !0), t.size = s.get("size", 100);
e = s.get("align", "center");
t.align = "middle" === e ? "center" : e, t.position = s.get("position", "auto");
e = s.get("positionAlign", {
start: "start",
left: "start",
center: "center",
right: "end",
end: "end"
}, t.align);
t.positionAlign = {
start: "start",
"line-left": "start",
left: "start",
center: "center",
middle: "center",
"line-right": "end",
right: "end",
end: "end"
} [e]
})(t, e)
}
parseRegion(e) {
const n = new cp;
if (this.parseOptions(e, (e, t) => {
switch (e) {
case "id":
n.set(e, t);
break;
case "width":
n.percent(e, t);
break;
case "lines":
n.integer(e, t);
break;
case "regionanchor":
case "viewportanchor": {
var i = t.split(",");
if (2 !== i.length) break;
const r = new cp;
if (r.percent("x", i[0]), r.percent("y", i[1]), !r.has("x") || !r.has("y")) break;
n.set(e + "X", r.get("x")), n.set(e + "Y", r.get("y"));
break
}
case "scroll":
n.alt(e, t, ["up"])
}
}, /=/, /\s/), n.has("id")) {
const e = new lp.VTTRegion;
e.width = n.get("width", 100), e.lines = n.get("lines", 3), e.regionAnchorX = n.get("regionanchorX", 0), e.regionAnchorY = n.get("regionanchorY", 100), e.viewportAnchorX = n.get("viewportanchorX", 0), e.viewportAnchorY = n.get("viewportanchorY", 100), e.scroll = n.get("scroll", ""), this.onregion && this.onregion(e), this.regionList.push({
id: n.get("id"),
region: e
})
}
}
parseStyle(i) {
const e = i.split("}");
e.pop();
for (const i of e) {
let e = null,
t = null;
const r = i.split("{");
r[0] && (e = r[0].trim()), r[1] && (t = (e => {
const t = {},
i = e.split(";");
for (let e = 0; e < i.length; e++)
if (i[e].includes(":")) {
const r = i[e].split(":", 2),
n = r[0].trim(),
s = r[1].trim();
"" !== n && "" !== s && (t[n] = s)
} return t
})(r[1])), e && t && (this._styles[e] = t)
}
this.onStylesParsedCallback && this.onStylesParsedCallback(this._styles)
}
parseHeader(e) {
this.parseOptions(e, function(e, t) {
"Region" === e && this.parseRegion(t)
}, /:/)
}
parse(i) {
i && (this.buffer += this.decoder.decode(i, {
stream: !0
}));
const r = () => {
const e = this.buffer;
let t = 0;
let i = {
start: e.length,
length: 0
};
for (; t < e.length;) {
const r = ((t, i) => {
const r = {
start: -1,
length: -1
};
if ("\r" === t[i]) r.start = i, r.length = 1;
else if ("\n" === t[i]) r.start = i, r.length = 1;
else if ("<" === t[i] && i + 1 < t.length && "b" === t[i + 1] && i + 2 < t.length && "r" === t[i + 2]) {
let e = i + 2;
for (; e < t.length && ">" !== t[e++];);
r.start = i, r.length = e - i
}
return r
})(e, t);
if (0 < r.length) {
i = r;
break
}++t
}
const r = e.substr(0, i.start);
return this.buffer = e.substr(i.start + i.length), r
};
try {
let e;
if ("INITIAL" === this.state) {
if (!/\r\n|\n/.test(this.buffer)) return this;
e = r();
var n = /^()?WEBVTT([ \t].*)?$/.exec(e);
if (!n || !n[0]) throw new up(up.Errors.BadSignature);
this.state = "HEADER"
}
let t = !1;
for (; this.buffer;) {
if (!/\r\n|\n/.test(this.buffer)) return this;
switch (t ? t = !1 : e = r(), this.state) {
case "HEADER":
e.includes(":") ? this.parseHeader(e) : e || (this.state = "ID");
continue;
case "NOTE":
e || (this.state = "ID");
continue;
case "STYLE":
e ? this.styleCollector += e : (this.parseStyle(this.styleCollector), this.state = "ID", this.styleCollector = "");
continue;
case "ID":
if (/^NOTE($|[ \t])/.test(e)) {
this.state = "NOTE";
break
}
if (/^STYLE($|[ \t])/.test(e)) {
this.state = "STYLE";
break
}
if (!e) continue;
if (this.cue = new op.VTTCue(0, 0, ""), this.state = "CUE", !e.includes("--\x3e")) {
this.cue.id = e;
continue
}
case "CUE":
try {
this.parseCue(e, this.cue, this.regionList)
} catch (i) {
this.reportOrThrowError(i), this.cue = null, this.state = "BADCUE";
continue
}
this.state = "CUETEXT";
continue;
case "CUETEXT": {
const r = e.includes("--\x3e");
if (!e || r) {
t = !0, this.oncue && this.oncue(this.cue), this.cue = null, this.state = "ID";
continue
}
this.cue.text && (this.cue.text += "\n"), this.cue.text += e;
continue
}
case "BADCUE":
e || (this.state = "ID");
continue
}
}
} catch (i) {
this.reportOrThrowError(i), "CUETEXT" === this.state && this.cue && this.oncue && this.oncue(this.cue), this.cue = null, this.state = "INITIAL" === this.state ? "BADWEBVTT" : "BADCUE"
}
return this
}
flush() {
try {
if (this.buffer += this.decoder.decode(), !this.cue && "HEADER" !== this.state || (this.buffer += "\n\n", this.parse()), "INITIAL" === this.state) throw new up(up.Errors.BadSignature)
} catch (e) {
this.reportOrThrowError(e)
}
return this.onflush && this.onflush(), this
}
styles() {
return this._styles
}
}
iu.default = hp, iu.WebVTTParser = hp;
var pp, w = {};
Object.defineProperty(w, "__esModule", {
value: !0
});
const fp = nu;
w.VTTCue = fp.VTTCue;
const mp = ru,
gp = [/^(::cue\()(\..*)(\))/, /^(::cue\()(#.*)(\))/, /^(::cue\()(c|i|b|u|ruby|rt|v|lang)(\))/],
yp = [
[1470, 1470],
[1472, 1472],
[1475, 1475],
[1478, 1478],
[1488, 1514],
[1520, 1524],
[1544, 1544],
[1547, 1547],
[1549, 1549],
[1563, 1563],
[1566, 1610],
[1645, 1647],
[1649, 1749],
[1765, 1766],
[1774, 1775],
[1786, 1805],
[1807, 1808],
[1810, 1839],
[1869, 1957],
[1969, 1969],
[1984, 2026],
[2036, 2037],
[2042, 2042],
[2048, 2069],
[2074, 2074],
[2084, 2084],
[2088, 2088],
[2096, 2110],
[2112, 2136],
[2142, 2142],
[2208, 2208],
[2210, 2220],
[8207, 8207],
[64285, 64285],
[64287, 64296],
[64298, 64310],
[64312, 64316],
[64318, 64318],
[64320, 64321],
[64323, 64324],
[64326, 64449],
[64467, 64829],
[64848, 64911],
[64914, 64967],
[65008, 65020],
[65136, 65140],
[65142, 65276],
[67584, 67589],
[67592, 67592],
[67594, 67637],
[67639, 67640],
[67644, 67644],
[67647, 67669],
[67671, 67679],
[67840, 67867],
[67872, 67897],
[67903, 67903],
[67968, 68023],
[68030, 68031],
[68096, 68096],
[68112, 68115],
[68117, 68119],
[68121, 68147],
[68160, 68167],
[68176, 68184],
[68192, 68223],
[68352, 68405],
[68416, 68437],
[68440, 68466],
[68472, 68479],
[68608, 68680],
[126464, 126467],
[126469, 126495],
[126497, 126498],
[126500, 126500],
[126503, 126503],
[126505, 126514],
[126516, 126519],
[126521, 126521],
[126523, 126523],
[126530, 126530],
[126535, 126535],
[126537, 126537],
[126539, 126539],
[126541, 126543],
[126545, 126546],
[126548, 126548],
[126551, 126551],
[126553, 126553],
[126555, 126555],
[126557, 126557],
[126559, 126559],
[126561, 126562],
[126564, 126564],
[126567, 126570],
[126572, 126578],
[126580, 126583],
[126585, 126588],
[126590, 126590],
[126592, 126601],
[126603, 126619],
[126625, 126627],
[126629, 126633],
[126635, 126651],
[1114109, 1114109]
];
class vp {
applyStyles(e, t) {
t = t || this.div;
for (const i in e) e.hasOwnProperty(i) && (t.style[i] = e[i])
}
formatStyle(e, t) {
return 0 === e ? "0" : e + t
}
}
w.StyleBox = vp;
class Sp extends vp {
constructor(e, t, i, r, n) {
super();
let s = {
textAlign: {
start: "left",
"line-left": "left",
left: "left",
center: "center",
middle: "center",
"line-right": "right",
right: "right",
end: "right"
} [(this.cue = t).positionAlign] || t.align,
whiteSpace: "pre-line",
position: "absolute"
};
s.direction = this.determineBidi(this.cueDiv), s.writingMode = this.directionSettingToWritingMode(t.vertical), s.unicodeBidi = "plaintext", this.div = e.document.createElement("div"), this.applyStyles(s), s = {
backgroundColor: r.backgroundColor,
display: "inline-block"
}, this.parseOpacity(s.backgroundColor) && (s.padding = "5px", s.borderRadius = "5px"), this.backgroundDiv = e.document.createElement("div"), this.applyStyles(s, this.backgroundDiv), s = {
color: i.color,
backgroundColor: i.backgroundColor,
textShadow: i.textShadow,
fontSize: i.fontSize,
fontFamily: i.fontFamily,
position: "relative",
left: "0",
right: "0",
top: "0",
bottom: "0",
display: "inline-block",
textOrientation: "upright"
}, s.writingMode = this.directionSettingToWritingMode(t.vertical), s.unicodeBidi = "plaintext", this.cueDiv = mp.default.parseContent(e, t, n), this.applyStyles(s, this.cueDiv), this.backgroundDiv.appendChild(this.cueDiv), this.div.appendChild(this.backgroundDiv);
let a = 0;
if ("number" == typeof t.position) {
n = t.positionAlign || t.align;
if (n) switch (n) {
case "start":
case "left":
a = t.position;
break;
case "center":
case "middle":
a = t.position - t.size / 2;
break;
case "end":
case "right":
a = t.position - t.size
}
}
"" === t.vertical ? this.applyStyles({
left: this.formatStyle(a, "%"),
width: this.formatStyle(t.size, "%")
}) : this.applyStyles({
top: this.formatStyle(a, "%"),
height: this.formatStyle(t.size, "%")
})
}
determineBidi(e) {
let t = [],
i = "";
if (!e || !e.childNodes) return "ltr";
function n(t, i) {
for (let e = i.childNodes.length - 1; 0 <= e; e--) t.push(i.childNodes[e])
}
for (n(t, e); i = function e(t) {
if (!t || !t.length) return null;
let i = t.pop(),
r = i.textContent || i.innerText;
if (r) {
const i = /^.*(\n|\r)/.exec(r);
return i ? i[t.length = 0] : r
}
return "ruby" === i.tagName ? e(t) : i.childNodes ? (n(t, i), e(t)) : void 0
}(t);)
for (let e = 0; e < i.length; e++)
if (function(e, t) {
for (const i of t)
if (e >= i[0] && e <= i[1]) return 1
}(i.charCodeAt(e), yp)) return "rtl";
return "ltr"
}
parseOpacity(e) {
if (!e || "string" != typeof e) return null;
e = (e = e.replace(/ /g, "").replace("rgba(", "").replace(")", "")).split(",");
return e && 4 <= e.length ? e[3] : null
}
directionSettingToWritingMode(e) {
return "" === e ? "horizontal-tb" : "lr" === e ? "vertical-lr" : "vertical-rl"
}
move(e) {
this.applyStyles({
top: this.formatStyle(e.top, "px"),
bottom: this.formatStyle(e.bottom, "px"),
left: this.formatStyle(e.left, "px"),
right: this.formatStyle(e.right, "px"),
height: this.formatStyle(e.height, "px"),
width: this.formatStyle(e.width, "px")
})
}
}
w.CueStyleBox = Sp;
class bp {
constructor(e) {
var t;
let i, r, n, s, a, o;
if (e instanceof Sp && e.cue ? (t = e.cue) && "" !== t.vertical ? this.property = "width" : this.property = "height" : e instanceof bp && (this.property = e.property || "height"), e instanceof Sp && e.div) {
n = e.div.offsetHeight, s = e.div.offsetWidth, a = e.div.offsetTop;
const t = e.div.firstChild;
if (o = (t || e.div).getBoundingClientRect(), i = o && o[this.property] || null, t && t.firstChild) {
const e = t.firstChild;
e && "string" == typeof e.textContent && (r = i / this.calculateNewLines(e.textContent))
}
} else e instanceof bp && (o = e);
this.left = o.left, this.right = o.right, this.top = o.top || a, this.height = o.height || n, this.bottom = o.bottom || a + (o.height || n), this.width = o.width || s, this.lineHeight = null !== i ? i : o.lineHeight, this.singleLineHeight = null !== r ? r : o.singleLineHeight, this.singleLineHeight || (this.singleLineHeight = 41)
}
calculateNewLines(t) {
let i = 1;
for (let e = 0; e < t.length; e++) "\n" === t[e] && i++;
return i
}
move(e, t) {
switch (t = void 0 !== t ? t : this.singleLineHeight, e) {
case "+x":
this.left += t, this.right += t;
break;
case "-x":
this.left -= t, this.right -= t;
break;
case "+y":
this.top += t, this.bottom += t;
break;
case "-y":
this.top -= t, this.bottom -= t
}
}
overlaps(e) {
return this.left < e.right && this.right > e.left && this.top < e.bottom && this.bottom > e.top
}
overlapsAny(e) {
for (const t of e)
if (this.overlaps(t)) return !0;
return !1
}
within(e) {
return this.top >= e.top && this.bottom <= e.bottom && this.left >= e.left && this.right <= e.right
}
moveIfOutOfBounds(e, t) {
switch (t) {
case "+x":
this.left < e.left && (this.left = e.left, this.right = this.left + this.width);
break;
case "-x":
this.right > e.right && (this.right = e.right, this.left = this.right - this.width);
break;
case "+y":
this.top < e.top && (this.top = e.top, this.bottom = this.top + this.height);
break;
case "-y":
this.bottom > e.bottom && (this.bottom = e.bottom, this.top = this.bottom - this.height)
}
}
toCSSCompatValues(e) {
return {
top: this.top - e.top,
bottom: e.bottom - this.bottom,
left: this.left - e.left,
right: e.right - this.right,
height: this.height,
width: this.width
}
}
static getSimpleBoxPosition(e) {
let t = null;
e instanceof vp && e.div ? t = e.div : e instanceof HTMLElement && (t = e);
let i = t.offsetHeight || 0,
r = t.offsetWidth || 0,
n = t.offsetTop || 0,
s = n + i,
a = t.getBoundingClientRect();
var {
left: o,
right: e
} = a;
return a.top && (n = a.top), a.height && (i = a.height), a.width && (r = a.width), a.bottom && (s = a.bottom), {
left: o,
right: e,
top: n,
height: i,
bottom: s,
width: r
}
}
static getBoxPosition(r, n) {
if (r && 0 < r.length) {
let t = 0,
i = r[0][n];
for (let e = 0; e < r.length; e++) n in ["top", "right"] ? r[e][n] > i && (t = e, i = r[e][n]) : n in ["bottom", "left"] && r[e][n] < i && (t = e, i = r[e][n]);
return r[t]
}
return null
}
static moveToMinimumDistancePlacement(e, t, i) {
"height" === e.property ? "+y" === t ? (e.top = i.topMostBoxPosition.bottom + 0, e.bottom = e.top + e.height) : "-y" === t && (e.bottom = +i.bottomMostBoxPosition.top, e.top = e.bottom - e.height) : "width" === e.property && ("+x" === t ? (e.left = i.rightMostBoxPosition.right + 0, e.right = e.left + e.width) : "-x" === t && (e.right = +i.leftMostBoxPosition.left, e.left = e.right - e.width))
}
static moveBoxToLinePosition(e, a, o) {
var n = e.cue;
let i, r = new bp(e),
s = function() {
if ("number" == typeof n.line && (n.snapToLines || 0 <= n.line && n.line <= 100)) return n.line;
if (!n.track || !n.track.textTrackList || !n.track.textTrackList.mediaElement) return -1;
let t = 0;
var i = n.track,
r = i.textTrackList;
for (let e = 0; e < r.length && r[e] !== i; e++) "showing" === r[e].mode && t++;
return -1 * ++t
}(),
l = [];
if (n.snapToLines) {
let t = 0;
switch (n.vertical) {
case "":
l = ["+y", "-y"], i = "height";
break;
case "rl":
l = ["+x", "-x"], i = "width";
break;
case "lr":
l = ["-x", "+x"], i = "width"
}
const o = r.lineHeight,
d = a[i] + o,
u = l[0];
if (s < 0) {
let e = 0;
switch (n.vertical) {
case "":
e = a.height - o - .05 * a.height;
break;
case "rl":
case "lr":
e = -a.width + o + .05 * a.width
}
t = e, l = l.reverse()
} else {
switch (n.vertical) {
case "":
t = o * Math.round(s);
break;
case "rl":
t = a.width - o * Math.round(s);
break;
case "lr":
t = o * Math.round(s)
}
Math.abs(t) > d && (t = t < 0 ? -1 : 1, t *= Math.ceil(d / o) * o)
}
r.move(u, t)
} else {
const o = "" === n.vertical ? a.height : a.width,
i = r.lineHeight / o * 100;
switch (n.lineAlign) {
case "center":
s -= i / 2;
break;
case "end":
s -= i
}
switch (n.vertical) {
case "":
e.applyStyles({
top: e.formatStyle(s, "%")
});
break;
case "rl":
e.applyStyles({
right: e.formatStyle(s, "%")
});
break;
case "lr":
e.applyStyles({
left: e.formatStyle(s, "%")
})
}
l = ["+y", "-y", "+x", "-x"], "+y" === n.axis ? l = ["+y", "-y", "+x", "-x"] : "-y" === n.axis && (l = ["-y", "+y", "+x", "-x"]), r = new bp(e)
}
const d = function(r, n) {
let s;
for (let i = 0; i < n.length; i++) {
r.moveIfOutOfBounds(a, n[i]);
let e = 0,
t = !1;
for (; r.overlapsAny(o) && !(9 < e);) t ? r.move(n[i]) : (o && 0 < o.length && (s = s || {
topMostBoxPosition: bp.getBoxPosition(o, "top"),
bottomMostBoxPosition: bp.getBoxPosition(o, "bottom"),
leftMostBoxPosition: bp.getBoxPosition(o, "left"),
rightMostBoxPosition: bp.getBoxPosition(o, "right")
}, bp.moveToMinimumDistancePlacement(r, n[i], s)), t = !0), e++
}
return r
}(r, l);
e.move(d.toCSSCompatValues(a))
}
}
w.BoxPosition = bp;
class Tp {
constructor(e, t, i = !0) {
if (!e) return null;
this.window = e, this.overlay = t, this.loggingEnabled = i, this.foregroundStyleOptions = {
fontFamily: "Helvetica",
fontSize: "36px",
color: "rgba(255, 255, 255, 1)",
textShadow: "",
backgroundColor: "rgba(0, 0, 0, 0)"
}, this.backgroundStyleOptions = {
backgroundColor: "rgba(0, 0, 0, 0.5)"
}, this.globalStyleCollection = {};
const r = e.document.createElement("div");
r.style.position = "absolute", r.style.left = "0", r.style.right = "0", r.style.top = "0", r.style.bottom = "0", r.style.margin = "1.5%", this.paddedOverlay = r, t.appendChild(this.paddedOverlay), this.initSubtitleCSS()
}
initSubtitleCSS() {
var e = [new fp.VTTCue(0, 0, "String to init CSS - Won't be visible to user")];
this.paddedOverlay.style.opacity = "0", this.processCues(e), this.processCues([]), this.paddedOverlay.style.opacity = "1"
}
convertCueToDOMTree(e) {
return e ? mp.default.parseContent(this.window, e, this.globalStyleCollection) : null
}
setStyles(i) {
function r(e, t, i) {
for (const r in t) t.hasOwnProperty(r) && (!0 === i && void 0 !== e[r] || !1 === i) && (e[r] = t[r])
}
for (const a in i) {
let t = !1,
e = null;
"::cue" === a ? (e = this.foregroundStyleOptions, t = !0) : "::-webkit-media-text-track-display" === a && (e = this.backgroundStyleOptions, t = !0);
var n = i[a];
if (!0 === t) r(e, n, t);
else
for (let e = 0; e < gp.length; e++) {
var s = gp[e].exec(a);
if (s && 4 === s.length) {
const i = s[2],
o = {};
r(o, n, t), this.globalStyleCollection[i] = o
}
}
}
this.initSubtitleCSS(), this.loggingEnabled && (console.log("WebVTTRenderer setStyles foregroundStyleOptions: " + JSON.stringify(this.foregroundStyleOptions)), console.log("WebVTTRenderer setStyles backgroundStyleOptions: " + JSON.stringify(this.backgroundStyleOptions)), console.log("WebVTTRenderer setStyles globalStyleCollection: " + JSON.stringify(this.globalStyleCollection)))
}
processCues(r) {
if (r) {
for (; this.paddedOverlay.firstChild;) this.paddedOverlay.removeChild(this.paddedOverlay.firstChild);
if (function(t) {
for (let e = 0; e < t.length; e++)
if (t[e].hasBeenReset || !t[e].displayState) return 1
}(r)) {
const n = [],
s = bp.getSimpleBoxPosition(this.paddedOverlay);
1 < r.length && (r = function(t) {
const i = [];
let r = 0;
for (let e = 0; e < t.length; e++) {
var n = t[e];
if ("number" != typeof n.line) return t;
r += n.line, i.push(n)
}
return r /= t.length, 50 < r ? (i.forEach(function(e) {
e.axis = "-y"
}), i.sort((e, t) => t.line - e.line)) : (i.forEach(function(e) {
e.axis = "+y"
}), i.sort((e, t) => e.line - t.line)), i
}(r));
for (let i = 0; i < r.length; i++) {
let e = r[i],
t = new Sp(this.window, e, this.foregroundStyleOptions, this.backgroundStyleOptions, this.globalStyleCollection);
this.paddedOverlay.appendChild(t.div), bp.moveBoxToLinePosition(t, s, n), e.displayState = t.div, n.push(bp.getSimpleBoxPosition(t))
}
} else
for (let e = 0; e < r.length; e++) this.paddedOverlay.appendChild(r[e].displayState)
}
}
setSize(e, t) {
e && (this.overlay.style.width = e + "px"), t && (this.overlay.style.height = t + "px")
}
getOverlay() {
return this.overlay
}
}
function Ep(e) {
for (var t in e) pp.hasOwnProperty(t) || (pp[t] = e[t])
}
w.default = Tp, w.WebVTTRenderer = Tp, pp = Yh, Object.defineProperty(pp, "__esModule", {
value: !0
}), Ep(iu), Ep(w);
function Ip(e, t, i) {
return e.substr(i || 0, t.length) === t
}
function wp(e) {
let t = 5381,
i = e.length;
for (; i;) t = 33 * t ^ e.charCodeAt(--i);
return (t >>> 0).toString()
}
function Ap(e) {
var t = Math.floor(e),
i = t + .5,
r = t + 1;
return i <= e ? r - e <= e - i ? r : i : i - e <= e - t ? i : t
}
function Op(e, t = 0, i = 8589934592) {
if (!Number.isFinite(t)) return e;
var r = i / 2,
n = Math.abs(e - t) % i;
return t + (t < e ? -1 : 1) * (r < n ? i - n : -n)
}
var kp, Cp, Dp, Mp = function(e, t, i, r, n, s, a, o) {
const l = O.utf8arrayToStr(new Uint8Array(e)).trim().replace(/\r\n|\n\r|\n|\r/g, "\n").split("\n"),
d = {
baseTime: Math.floor(9e4 * t.baseTime / t.timescale),
timescale: 9e4
};
let u = 0,
c = 0;
const h = [];
let p = null,
f = !0;
const m = new Yh.WebVTTParser(window, Yh.WebVTTParser.StringDecoder(), a);
m.oncue = function(e) {
var t = S({
baseTime: Op(Op(u) - d.baseTime, 9e4 * i),
timescale: 9e4
});
e.startTime = Op(e.startTime + t - c, 0, 95443.7176888889), e.endTime = Op(e.endTime + t - c, 0, 95443.7176888889), e.id = wp(Ap(e.startTime).toString()) + wp(Ap(e.endTime - e.startTime).toString()) + wp(e.text), e.text = decodeURIComponent(encodeURIComponent(e.text)), 0 < e.endTime && h.push(e)
}, m.onparsingerror = function(e) {
p = e
}, m.onflush = function() {
p && s ? s(p) : n(h)
}, l.forEach(a => f && Ip(a, "X-TIMESTAMP-MAP=") ? (f = !1, void a.substr(16).split(",").forEach(e => {
if (Ip(e, "LOCAL:")) {
let t;
try {
t = (i = e.substr(6), r = parseInt(i.substr(-3)), n = parseInt(i.substr(-6, 2)), s = parseInt(i.substr(-9, 2)), i = 9 < i.length ? parseInt(i.substr(0, i.indexOf(":"))) : 0, ne(r) && ne(n) && ne(s) && ne(i) ? (r += 1e3 * n, r += 6e4 * s, r += 36e5 * i) : -1)
} catch (e) {
t = -1
} - 1 !== t ? c = t / 1e3 : p = new Error(`Malformed X-TIMESTAMP-MAP: ${a}`)
} else Ip(e, "MPEGTS:") && (u = parseInt(e.substr(7)));
var i, r, n, s
})) : void m.parse(a + "\n")), m.flush()
},
xp = {
newCue: function(e, t, i, r, n) {
let s, a, o, l, d;
var u, c, h = {
foreground: !1,
background: !1,
italics: !1,
underline: !1,
flash: !1,
styleStack: []
};
for ([u, c] of r.rows.entries())
if (a = !0, o = 0, l = "", !c.isEmpty()) {
for (let e = 0; e < c.chars.length; e++) c.chars[e].uchar.match(/\s/) && a ? o++ : (l += this.getFormattedChar(c.chars[e], h), a = !1);
(c.cueStartTime = t) === i && (i += 1e-4), l = l.trim().replace(/<br(?: \/)?>/gi, "\n"), l += this.closeStyles(h), s = new Yh.VTTCue(t, i, l), 16 <= o ? o-- : o++, d = !navigator.userAgent.match(/Firefox\//) && 7 < u ? u : u + 1, s.snapToLines = !1, s.line = 10 + 5.33 * d, s.align = "left", s.position = this.getPosition(o, n), e.addCue(s)
}
},
getPosition: function(e, t) {
let i = 1.3333333333333333;
t && t.offsetWidth && t.offsetHeight && 1.6 <= t.offsetWidth / t.offsetHeight && (i = 1.7777777777777777);
let r = 10 + e / 32 * 80,
n = 10,
s = 90;
return 1.7777777777777777 === i && (r = 12.5 + .75 * r, n = 20, s = 80), Math.max(n, Math.min(s, r + (navigator.userAgent.match(/Firefox\//) ? 50 : 0)))
},
getRootStyleTag: function(e) {
var t = e[0];
return "c" === t ? t : e
},
closeStyles: function(t) {
let i = "";
for (let e = t.styleStack.length - 1; 0 <= e; --e) i += "</" + this.getRootStyleTag(t.styleStack[e]) + ">", t.styleStack.pop();
return i
},
beginStyleAndBalance: function(e, t) {
let i = "";
return "c" === t[0] && (i += this.closeStyleAndBalance(e, "c")), i += "<" + t + ">", e.styleStack.push(t), i
},
closeStyleAndBalance: function(t, i) {
var r = t.styleStack.length;
let n = 0,
s = "";
for (let e = r - 1; 0 <= e; --e) {
var a = t.styleStack[e],
o = this.getRootStyleTag(a);
if (i[0] === a[0]) {
s += "</" + o + ">", t.styleStack.splice(r - 1 - n);
break
}
"c" === o[0] ? (t.background = "", t.foreground = "", t.flash = !1, s += "</c>") : "u" === o[0] ? (t.underline = !1, s += "</u>") : "i" === o[0] && (t.italics = !1, s += "</i>"), n++
}
return s
},
getFormattedChar: function(e, t) {
let i = "",
r = e.uchar,
n = "";
var s = e.penState.foreground !== t.foreground,
a = e.penState.background !== t.background,
o = e.penState.flash !== t.flash;
return (s || a || o) && (n = "." + e.penState.foreground, n += ".bg_" + e.penState.background, e.penState.flash && o && (n += ".blink"), e.penState.foreground || e.penState.background || e.penState.blink ? i += this.beginStyleAndBalance(t, "c" + n) : i += this.closeStyleAndBalance(t, "c"), s && (t.foreground = e.penState.foreground), a && (t.background = e.penState.background), o && (t.flash = e.penState.flash)), e.penState.underline !== t.underline && (i += e.penState.underline ? this.beginStyleAndBalance(t, "u") : this.closeStyleAndBalance(t, "u"), t.underline = e.penState.underline), e.penState.italics !== t.italics && (i += e.penState.italics ? this.beginStyleAndBalance(t, "i") : this.closeStyleAndBalance(t, "i"), t.italics = e.penState.italics), i + r
}
};
(w = kp = kp || {}).CloseEnough = "CloseEnough", w.TooFar = "TooFar", w.Unknown = "Unknown";
const Pp = e => "cc1" === e || "cc2" === e;
function Rp(t) {
const i = [];
for (let e = 0; e < t.length; e++) {
var r = t[e];
("captions" === r.kind || "subtitles" === r.kind || "metadata" === r.kind && r.customTextTrackCueRenderer) && i.push(r)
}
return i
}
function Lp(e) {
if (e && e.cues)
for (; 0 < e.cues.length;) e.removeCue(e.cues[0])
}
class _p extends $t {
constructor(e, t, i, r) {
super(e => {
const t = Oc(this.hls, this);
if (e.add(t.event(x.INLINE_STYLES_PARSED, this.onInlineStylesParsed).pipe(Vs(() => this.destroy())).subscribe()), e.add(bn(0, this.config.trottleCheckInterval).pipe(La(() => (this.checkReadyToLoadNextSubtitleFragment(), Wu))).subscribe()), this.config.nativeTextTrackChangeHandling)
if (this.mediaSink.textTracks && "onchange" in this.mediaSink.textTracks) {
const t = Oc(this.mediaSink.textTracks, this);
e.add(t.event("change", this._onTextTracksChanged).subscribe())
} else e.add(bn(0, 500).pipe(La(() => (this._onTextTracksChanged(), Wu))).subscribe())
}), this.config = t, this.hls = i, this.logger = r.child({
name: "legible"
}), this.mediaSink = e, this.id3Track = e.id3TextTrack, this.enableCaption = !0, this.Cues = xp, this.tracks = [], this.cueRanges = [], this.channelToTrackMap = {}, this.htmlTextTrackMap = new Map, this.lastCueEndTime = 0, this.gotTracks = !1, this.tryAgain$ = new yi(!0), this.needNextSubtitle$ = new yi(!0)
}
destroy() {
Lp(this.textTrack1), Lp(this.textTrack2), this.mediaSink = void 0, this.nativeSubtitleTrackChange$ = void 0
}
convertCuesIntoSubtitleFragInfo(t) {
const i = {};
if (null != t && 0 < t.length)
for (let e = 0; e < t.length; e++) {
var r = t[e];
if (ne(r.fragSN)) {
const n = i[r.fragSN];
n ? (n.count++, n.startTime = Math.min(r.startTime, n.startTime), n.endTime = Math.max(r.endTime, n.endTime)) : i[r.fragSN] = {
count: 1,
startTime: r.startTime,
endTime: r.endTime
}
}
}
return i
}
checkReadyToLoadNextSubtitleFragment() {
let e = !1;
this.mediaSink.mediaQuery.currentTime >= this.lastCueEndTime - this.config.subtitleLeadTime && (e = !0), this.needNextSubtitle$.next(e)
}
checkReadyToLoadNextSubtitleFragment$(e, t) {
return e.mediaSeqNum === (null === (t = t[0]) || void 0 === t ? void 0 : t.mediaSeqNum) ? $i(!0) : (this.checkReadyToLoadNextSubtitleFragment(), this.needNextSubtitle$)
}
getNextFragment(e, t) {
t = t.mediaSeqNum + 1;
return t < e.fragments.length ? e.fragments[t - e.startSN] : null
}
calculateFragInfoMap(e, t, i, r) {
var n = this.convertCuesIntoSubtitleFragInfo(t);
let s = {
len: 0,
start: e,
end: e
},
a = e,
o = e,
l = null,
d = null;
for (const t in n)
if (Object.prototype.hasOwnProperty.call(n, t)) {
var u = Number(t);
if (ne(u)) {
var c = n[u];
if (this.isFragmentCompleteOrEmpty(u, c.count, i))
if (u === r.startSN && e < c.startTime && (a = o = s.start = s.end = e = c.startTime), e >= c.startTime && (a === e || ne(l) && 1 < u - l) && (a = o = c.startTime), e >= c.startTime) o = c.endTime, l = u;
else {
if (!ne(l) || u - l != 1) {
d = u;
break
}
o = c.endTime, l = u
}
} else this.logger.warn(`$fragInfoMap has invalid key ${u}`)
} return s = {
len: o - a,
start: a,
end: o
}, {
fragInfoMap: n,
bufferInfo: s,
prevFragSN: l,
nextFragSN: d
}
}
findFrags$(t, i) {
return this.tryAgain$.pipe(ji(tr), La(() => {
var e = this.findFragmentsForPosition(this.mediaSink.mediaQuery.currentTime, i, t);
return e.foundFrags ? (this.lastCueEndTime = 0, this.needNextSubtitle$.next(!0), $i(e)) : Ii
}))
}
reviewParsedFrag(e, i, r) {
var n = e.frag,
s = e.cueRange,
t = i.subtitleBufferInfo,
a = i.subtitleParsedInfo,
o = this.mediaSink.mediaQuery.currentTime,
e = i.foundFrags;
let l = !0;
if (n.mediaSeqNum === e[0].mediaSeqNum) {
if (!i.timelineEstablished) return kp.TooFar;
if (!s) return this.logger.warn(`[subtitle] 1st frag sn ${n.mediaSeqNum} has no cue; details ${r.fragments.length} frags`), kp.Unknown;
if (s.startTime < o) {
const d = r.fragments,
i = n.mediaSeqNum - r.startSN;
let e = i,
t = s.startTime;
for (; e < d.length && (t += d[e].duration, !(t >= o)); ++e);
l = e - i + 1 <= this.config.earlyFragTolerance
} else if (s.startTime > o && n.mediaSeqNum !== r.startSN) {
const d = s.startTime - o,
i = t.prevFragSN;
l = n.mediaSeqNum === i + 1 && (null === (t = t.fragInfoMap[i]) || void 0 === t ? void 0 : t.count) === (null === (a = a[i]) || void 0 === a ? void 0 : a.count) || d <= this.config.lateTolerance
}
}
return l ? kp.CloseEnough : kp.TooFar
}
isFragmentEmpty(e) {
return e && !ne(e.startTime) && 0 === e.count
}
isFragmentCompleteOrEmpty(e, t, i) {
e = i ? i[e] : null;
return (null == e ? void 0 : e.count) === t || this.isFragmentEmpty(e)
}
getEarlierFragmentInSameDisco(e, t, i) {
var r = t.mediaSeqNum - e.startSN - 1;
if (r < 0 || r > e.fragments.length - 1) return this.logger.error(`[subtitle] getEarlierFragmentInSameDisco index ${r} out of range`), t;
r = e.fragments[r];
return r && r.discoSeqNum === t.discoSeqNum && !i[t.mediaSeqNum] ? r : t
}
inferSubtitleFragmentForPosition(i, r, t, n, s) {
let a, o, e, l, d;
if (ne(n.prevFragSN) && (o = n.prevFragSN - s.startSN, e = t[n.prevFragSN]), ne(n.nextFragSN) && (l = n.nextFragSN - s.startSN, d = t[n.nextFragSN]), ne(o) && 0 <= o && o < s.fragments.length && e) {
let t = e.startTime;
const n = ne(l) ? l : s.fragments.length;
for (let e = o; e < n; ++e) {
const l = s.fragments[e];
if (!ne(r) || l.discoSeqNum === r) {
if (e === n - 1) {
a = {
foundFrag: l,
timelineEstablished: !0
};
break
}
if (t + l.duration > i && e > o) {
a = {
foundFrag: l,
timelineEstablished: !0
};
break
}
t += l.duration
}
}
} else if (ne(l) && 0 <= l && l < s.fragments.length && d) {
let t = d.startTime;
for (let e = l - 1; 0 <= e; --e) {
const o = s.fragments[e];
if (!ne(r) || o.discoSeqNum === r) {
if (t <= i) {
a = {
foundFrag: o,
timelineEstablished: !0
};
break
}
t -= o.duration
}
}
} else
for (let e = 0; e < s.fragments.length; ++e) {
const t = s.fragments[e];
if (ne(r) && t.discoSeqNum === r) {
a = {
foundFrag: t,
timelineEstablished: !1
};
break
}
}
return a
}
generateFragmentBatch(t, i, e, r, n, s) {
var a;
const o = [],
l = null == e ? void 0 : e.foundFrag;
if (!l) return {
foundFrags: void 0,
subtitleParsedInfo: void 0,
subtitleBufferInfo: void 0,
timelineEstablished: null == e ? void 0 : e.timelineEstablished
};
for (let e = l ? l.mediaSeqNum - s.startSN : s.fragments.length; e < s.fragments.length && o.length < t; ++e) {
const t = s.fragments[e];
if (t.discoSeqNum === i) {
const l = null === (a = n.fragInfoMap[t.mediaSeqNum]) || void 0 === a ? void 0 : a.count;
this.isFragmentCompleteOrEmpty(t.mediaSeqNum, null != l ? l : 0, r) || o.push(t)
}
}
return {
foundFrags: o,
subtitleParsedInfo: r,
subtitleBufferInfo: n,
timelineEstablished: null == e ? void 0 : e.timelineEstablished
}
}
findFragmentsForPosition(e, t, i) {
var r = this.mediaSink.mediaQuery.getParsedSubtitleRecordsForMediaOption(this.selectedTrack.persistentID),
n = this.getCuesOfEnabledTrack(this.selectedMediaOption.mediaOptionId, !1),
s = this.calculateFragInfoMap(e, n, r, i),
n = s.bufferInfo,
n = Math.max(e, n.end),
n = this.inferSubtitleFragmentForPosition(n, t, r, s, i);
return this.generateFragmentBatch(1 / 0, t, n, r, s, i)
}
get selectedMediaOption() {
return this.selectedTrack || this._disabledMediaOption
}
set selectedMediaOption(e) {
this.selectedTrack = "groupId" in e ? e : void 0
}
get selectedTrack() {
return this._selectedMediaOption
}
set selectedTrack(e) {
e !== this._selectedMediaOption && (this._selectedMediaOption = e, this.updateTextTrackState())
}
getTrack(t) {
return this._availableMediaOptions.find(e => e.mediaOptionId === t)
}
updateTextTrackState() {
if (this.mediaSink.textTracks) {
const i = this.selectedTrack ? this.getExistingHTMLTextTrack(this.selectedTrack) : void 0,
r = Rp(this.mediaSink.textTracks);
for (let e = 0; e < r.length; e++) {
var t = r[e];
t === i && "showing" !== r[e].mode ? r[e].mode = "showing" : t !== i && "hidden" !== r[e].mode && (r[e].mode = "hidden")
}
}
}
mapHTMLTextTrackIndexToMediaOptionId(e) {
const i = this.mediaSink.textTracks[e];
let r;
return this.htmlTextTrackMap.forEach((e, t) => {
i === e && (r = t)
}), r
}
get mediaSelectionOptions() {
return this._availableMediaOptions
}
_makeDisableOption(e) {
return {
itemId: e.itemId,
mediaOptionType: e.mediaOptionType,
mediaOptionId: "Nah"
}
}
_onTextTracksChanged() {
if (this.mediaSink) {
let t, i = !1;
const r = Rp(this.mediaSink.textTracks);
for (let e = 0; e < r.length; e++) r[e].seen ? "showing" === r[e].mode && (t = r[e].persistentId) : (r[e].seen = !0, i = !0);
if (!i) {
const e = this.selectedTrack;
if ((null == e ? void 0 : e.persistentID) !== t) {
const e = this.mediaSelectionOptions.find(function(e) {
return e.persistentID === t
});
this.nativeSubtitleTrackChange$.next(e || this._disabledMediaOption)
}
}
}
}
addCues(e, t, i, r) {
const n = this.cueRanges;
let s = !1;
for (let e = n.length; e--;) {
const r = n[e],
d = (a = r[0], o = r[1], l = t, Math.min(o, i) - Math.max(a, l));
if (0 <= d && (r[0] = Math.min(r[0], t), r[1] = Math.max(r[1], i), s = !0, .5 < d / (i - t))) return
}
var a, o, l;
s || n.push([t, i]), this.Cues.newCue(this.channelToTrackMap[e], t, i, r, this.mediaSink)
}
getExistingHTMLTextTrackWithChannelNumber(t) {
var i = this.mediaSink;
if (i)
for (let e = 0; e < i.textTracks.length; e++) {
var r = i.textTracks[e],
n = "cc" + t;
if (Pp(n) && !0 === r[n]) return r
}
return null
}
sendAddTrackEvent(e, t) {
let i = null;
try {
i = new window.Event("addtrack")
} catch (e) {
i = document.createEvent("Event"), i.initEvent("addtrack", !1, !1)
}
i.track = e, t.dispatchEvent(i)
}
createHTMLCaptionsTrackGuts(e, t, i, r) {
var n = "cc" + e;
if (!this.channelToTrackMap[n]) {
e = this.getExistingHTMLTextTrackWithChannelNumber(e);
if (e) this.channelToTrackMap[n] = e, Lp(this.channelToTrackMap[n]), this.sendAddTrackEvent(this.channelToTrackMap[n], this.mediaSink);
else {
const s = this.createHTMLTextTrackGuts("captions", t, i, r);
s && Pp(n) && (s[n] = !0, this.channelToTrackMap[n] = s)
}
}
return this.channelToTrackMap[n]
}
createHTMLCaptionsTrack(e) {
return this.createHTMLCaptionsTrackGuts(e, this.config[1 === e ? "captionsTextTrack1Label" : "captionsTextTrack2Label"], this.config.captionsTextTrack1LanguageCode, !1)
}
getExistingHTMLTextTrack(e) {
return this.config.condenseSubtitleTrack ? this.htmlTextTrackMap.get(e.persistentID) : this.htmlTextTrackMap.get(e.id)
}
getExistingHTMLTextTrackWithSubtitleTrackId(t) {
var e = this._availableMediaOptions.find(e => e.id === t);
return e ? this.getExistingHTMLTextTrack(e) : void 0
}
getExistingHTMLTextTrackIndex(e) {
var t = this.getExistingHTMLTextTrack(e),
i = this.mediaSink.textTracks;
let r = -1;
for (let e = 0; e < i.length; ++e)
if (i[e] === t) {
r = e;
break
} return r
}
setExistingHTMLTextTrack(e, t) {
return t.persistentId = e.persistentID, this.config.condenseSubtitleTrack ? this.htmlTextTrackMap.set(e.persistentID, t) : this.htmlTextTrackMap.set(e.id, t)
}
createHTMLTextTrack(t) {
let i = this.getExistingHTMLTextTrack(t);
if (i) this.tracksReused += 1;
else {
if ("sbtl" === t.mediaType) this.subtitleTracksCreated += 1, i = this.createHTMLTextTrackGuts("subtitles", t.name, t.lang, t.forced);
else {
let e = 1;
t.inStreamID && (e = Number(t.inStreamID.substring(2))), this.captionTracksCreated += 1, i = this.createHTMLCaptionsTrackGuts(e, t.name, t.lang, !1)
}
i ? this.setExistingHTMLTextTrack(t, i) : (this.logger.error(`failed to create HTML text track for track ${t.id}: persistent id ${t.persistentID} name ${t.name} lang ${t.lang} inStreamID ${t.inStreamID}`), this.tracksFailed += 1)
}
return i
}
createHTMLTextTrackGuts(t, i, r, e) {
const n = this.mediaSink;
if (n) {
let e = !1;
"metadata" !== t && this.config.customTextTrackCueRenderer && (e = !0, t = "metadata");
const s = n.addTextTrack(t, i, r);
return e && (s.customTextTrackCueRenderer = !0), s
}
}
resetLoadSource() {
this.resetTracks()
}
resetTracks() {
this._cleanTracks(), this.cueRanges = []
}
_cleanTracks() {
var e = this.mediaSink;
if (e) {
var t = e.textTracks;
if (t)
for (let e = 0; e < t.length; e++) Lp(t[e])
}
}
getCuesOfEnabledTrack(e, t = !1) {
let i = [];
if (t) {
const t = this._getCuesOfEnabledTrack(e);
for (let e = 0; e < t.length; e++) {
var r = t[e];
Boolean(r.webVTTCue) && i.push(r)
}
} else i = this._getCuesOfEnabledTrack(e);
return i
}
_getCuesOfEnabledTrack(e) {
e = this.getTrack(e), e = this.config.condenseSubtitleTrack ? null == e ? void 0 : e.persistentID : null == e ? void 0 : e.id, e = this.htmlTextTrackMap.get(e);
return e && e.cues ? Array.from(e.cues) : []
}
attachSubtitleTracks() {
this.gotTracks && (this.subtitleTracksCreated = 0, this.captionTracksCreated = 0, this.tracksReused = 0, this.tracksFailed = 0, this.tracks.forEach(e => {
this.createHTMLTextTrack(e)
}))
}
setTracks(e, t, i) {
this._cleanTracks(), this.htmlTextTrackMap = new Map, this.cueRanges = [], this.config.enableWebVTT && (this.tracks = e || []), this.gotTracks = !0, this._availableMediaOptions = e, this._disabledMediaOption = i, this.attachSubtitleTracks(), this.selectedTrack = t, this.nativeSubtitleTrackChange$ = new Xt, this.mediaSink.textTracksCreated = !0
}
onInlineStylesParsed(e) {}
processSubtitleFrag(e, t, i, r) {
var n = new Uint8Array(r),
e = this.getExistingHTMLTextTrackIndex(e);
if (t && r.byteLength) {
const s = this._parseVTTs(e, t, i, n);
return s && ne(s.startTime) && (this.lastCueEndTime = Math.max(this.lastCueEndTime, s.endTime)), s
}
}
_parseVTTs(r, n, e, t) {
let s;
return Mp(t, e, n.start, n.discoSeqNum, e => {
const t = this.mediaSink.textTracks[r],
i = {
count: 0,
startTime: Number.POSITIVE_INFINITY,
endTime: 0
};
e.map(e => {
!t || t.cues && t.cues.getCueById(e.id) || (e.fragSN = n.mediaSeqNum, e.webVTTCue = !0, t.addCue(e), i.count++), i.startTime = Math.min(e.startTime, i.startTime), i.endTime = Math.max(e.endTime, i.endTime)
}), s = i, this.mediaSink.archiveParsedSubtitleFragmentRecord(this.selectedTrack.persistentID, n.mediaSeqNum, i)
}, e => {}, e => {
this.hls.trigger(x.INLINE_STYLES_PARSED, {
styles: e
})
}, this.logger), s
}
_ensureParser() {
var e, t;
this.cea608Parser || (e = new Xh(this, 1), t = new Xh(this, 2), this.cea608Parser = new zh(0, e, t))
}
setupForFrag(e) {
e && e.mediaOptionType === gu.Variant && !e.iframe && ((e = e.mediaSeqNum) !== this.lastVariantSeqNum + 1 && this.resetClosedCaptionParser(), this.lastVariantSeqNum = e)
}
resetClosedCaptionParser() {
var e;
null === (e = this.cea608Parser) || void 0 === e || e.reset()
}
addLegibleSamples(e, t, i, r) {
t && this.addClosedCaptionSamples(e, t), i && 0 < i.length && this.addId3Samples(e, i, S(r))
}
addClosedCaptionSamples(e, t) {
t.mp4 ? this.addMP4CaptionSamples(e, t.mp4) : t.ts && this.addTSCaptionSamples(e, t.ts)
}
addMP4CaptionSamples(e, i) {
if (this.enableCaption && this.config.enableCEA708Captions) {
var r = S(e);
this._ensureParser();
for (let e = 0; e < i.length; e++) {
let t = i[e].pts - r;
var n = i[e].bytes;
for (let e = 0; e < n.length; e += 2) {
const i = [];
i.push(n[e]), e + 1 < n.length ? i.push(n[e + 1]) : i.push(80), this.cea608Parser.addData(t, i), t += .03336666666666667
}
}
}
}
addTSCaptionSamples(e, t) {
if (this.enableCaption && this.config.enableCEA708Captions) {
var i = S(e);
this._ensureParser();
for (let e = 0; e < t.length; e++) {
var r = t[e].pts - i,
n = _p.extractCea608Data(t[e].bytes);
this.cea608Parser.addData(r, n)
}
}
}
addId3Samples(e, t, r) {
if (this.config.enableID3Cues) {
const n = window.WebKitDataCue || window.VTTCue || window.TextTrackCue,
s = S(e);
for (let e = 0; e < t.length; e++) {
const a = t[e].pts - s;
let i = (e < t.length - 1 ? t[e + 1].pts : r) - s;
a === i && (i += 1e-4), t[e].frames && t[e].frames.forEach(e => {
if (e && !this.id3shouldIgnore(e)) {
const t = new n(a, i, "");
t.value = e, this.id3Track.addCue(t)
}
})
}
}
}
id3shouldIgnore(e) {
return "PRIV" === e.key && ("com.apple.streaming.transportStreamTimestamp" === e.info || "com.apple.streaming.audioDescription" === e.info)
}
static extractCea608Data(t) {
var i = 31 & t[0];
let r, n, s, a = 2;
const o = [];
for (let e = 0; e < i; e++) r = t[a++], n = 127 & t[a++], s = 127 & t[a++], 0 == n && 0 == s || 0 != (4 & r) && 0 == (3 & r) && (o.push(n), o.push(s));
return o
}
}
const Np = {
name: "plist"
};
class Fp {
constructor(e, t, i, r) {
this.config = e, this.xhrLoader = t, this.customUrlLoader = i, this.sessionDataCheckForCompleteness = e => {
const t = this.config["sessionDataAutoLoad"],
i = Object.assign({}, e);
return e.complete || (e.itemList ? i.complete = e.itemList.every(e => t[e["DATA-ID"]] && !e.VALUE && !e._STATUS && e.URI ? (this.logger.warn(`Incomplete because ${e["DATA-ID"]} was autoloaded but no response yet`), !1) : (t[e["DATA-ID"]] && !e.URI && this.logger.warn(`id=${e["DATA-ID"]} missing uri`), !0)) : this.logger.warn("Uninitialized SessionData")), i
}, this.logger = r.child({
name: "SessionDataLoader"
})
}
loadSessionData(r) {
const n = this.config["sessionDataAutoLoad"],
t = r.itemList || [];
let s = $i(r);
return t.forEach(e => {
const i = e["DATA-ID"],
t = e.URI;
if (t && n[i]) {
const n = bu.buildAbsoluteURL(r.baseUrl, t, {
alwaysNormalize: !0
}),
e = "";
s = s.pipe(La(t => this.loadSessionDataItemWithUrl(n, i, "", this.config, t, this.xhrLoader, this.customUrlLoader).pipe(Vn(e => (this.logger.error(`Error loading SessionData > url=${n}, id=${i}, err=${e}`), $i(t))))))
}
}), s.pipe(hr(e => {
if (t.length < 1) return e;
e = this.sessionDataCheckForCompleteness(e);
if (e.complete) return e;
throw new V(!1, "Session data not complete after loading all items", $.IncompleteSessionData)
}), Vs(() => {}))
}
loadSessionDataItemWithUrl(e, t, i, r, n, s, a) {
const o = Qe(),
l = {
url: e,
method: "GET",
responseType: i,
xhrSetup: r.xhrSetup,
mimeType: "application/xml"
},
d = Lc({
url: e
}, r.fragLoadPolicy);
let u;
return u = Tu(e) ? a(l, d).pipe(hr(e => this.onLoadSuccess(n, t, e.data.response.data.toString(), e.data.response.data))) : s(l, d).pipe(hr(([e]) => this.onLoadSuccess(n, t, e.response, e.responseXML))), u.pipe(Vn(e => (e instanceof dr ? e = new cc(!1, e.message, 0, $.SessionDataLoadTimeout) : e instanceof oc && (e = new cc(!1, e.message, e.code, {
code: e.code,
text: "Failed to load SessionData"
})), o.error(`Unable to load SessionData > err=${e}`), $i(this.onLoadError(n, t, e)))))
}
onLoadSuccess(e, t, i, r) {
let n = null,
s = e;
if (function(e) {
const t = /[\s]*<\?xml/i;
t.lastIndex = 0;
var i = t.exec(e);
return i || /[\s]*<plist/i.exec(e)
}(i) && (n = r)) {
const i = function n(e) {
if (!e) return null;
const t = Qe();
let s = null;
var a = e.childNodes;
if (a)
if (e.tagName) {
var i = null === (i = e.tagName) || void 0 === i ? void 0 : i.toLowerCase();
if ("plist" === i) {
s = [];
for (let e = 0; e < a.length; ++e) {
const r = a[e];
r.tagName && s.push(n(r))
}
1 === s.length && (s = s[0])
}
if ("array" === i) {
s = [];
for (let e = 0; e < a.length; ++e) {
const r = a[e];
r.tagName && s.push(n(r))
}
}
if ("dict" === i) {
let t, i, r = 0;
s = {};
for (let e = 0; e < a.length; e++) {
var o = a[e],
l = null === (l = o.tagName) || void 0 === l ? void 0 : l.toLowerCase();
l && (r % 2 == 0 ? "key" === l && (t = n(o), r++) : (i = n(o), s[t] = i, t = null, i = null, r++))
}
t && (s[t] = i, t = null, i = null)
} else if ("key" === i) {
const e = a[0];
s = e ? e.nodeValue : (t.warn(Np, "Invalid dict key: Key is null, probably like this: <key/>"), null)
} else if ("string" === i) {
const e = a[0];
s = e ? e.nodeValue : null
} else if ("integer" === i) {
const e = a[0];
s = e ? parseInt(e.nodeValue) : 0
} else if ("float" === i) {
const e = a[0];
s = e ? parseFloat(e.nodeValue) : 0
} else if ("date" === i) {
const e = a[0];
s = e ? new Date(e.nodeValue) : null
} else if ("data" === i) {
const e = a[0];
s = e ? atob(e.nodeValue) : null
} else "true" === i ? s = !0 : "false" === i && (s = !1)
} else if (a.length < 1) t.warn(Np, `unknown node with unknown value > nodeType=${e.nodeType} tagName=${e.tagName} nodeName=${e.nodeName} value=${e.nodeValue}`);
else {
s = [];
for (let e = 0; e < a.length; ++e) {
const r = a[e];
r.tagName && s.push(n(r))
}
1 === s.length && (s = s[0])
}
return s
}(n);
s = this.setSessionData(e, t, "VALUE", i)
} else if (function(e) {
const t = /[\s]*[\{\[]/;
return t.lastIndex = 0, t.exec(e)
}(i)) try {
const r = JSON.parse(i);
s = this.setSessionData(e, t, "VALUE", r)
} catch (r) {
this.logger.error(`JSON parser error: ${r}`), s = this.setSessionData(e, t, "VALUE", i), s = this.setSessionData(s, t, "_STATUS", -1)
} else s = this.setSessionData(e, t, "VALUE", i);
return s
}
setSessionData(t, i, r, n) {
let s = t;
if (t.itemList) {
let e;
const a = [...t.itemList];
for (e = 0; e < t.itemList.length; ++e) {
const t = Object.assign({}, a[e]);
if (t["DATA-ID"] === i) {
t[r] = n, a[e] = t;
break
}
}
e === t.itemList.length && this.logger.error(`Can't set ${r} of session data ${i}`), s = Object.assign(Object.assign({}, t), {
itemList: a
})
} else this.logger.error(`Can't set ${r} on uninitialized session data`);
return s
}
onLoadError(e, t, i) {
return this.setSessionData(e, t, "_STATUS", null === (i = i.response) || void 0 === i ? void 0 : i.code)
}
}
function Bp(e, t) {
let i, r = 0;
for (const a of e)
if (a.start <= t.endPTS && a.end > t.startPTS) {
const e = (n = t, s = a, Math.min(n.endPTS, s.end) - Math.max(n.startPTS, s.start));
e > r && (i = a, r = e)
} else if (0 < r) break;
var n, s;
return i
}
function Up(e) {
return null != e && "iframeMediaDuration" in e && "iframeMediaStart" in e
}
function $p(e, t) {
return e === t || e && t && e.itemId === t.itemId && e.mediaOptionId === t.mediaOptionId && e.mediaSeqNum === t.mediaSeqNum && e.discoSeqNum === t.discoSeqNum
}
function Vp(e) {
return JSON.stringify(e, ["mediaOptionId", "mediaSeqNum", "discoSeqNum", "start", "duration"])
}
function Kp() {
return e => e.pipe(ln(e => null != e), hr(e => e))
}
function qp(e) {
return be.isDolby(e) ? hu.DOVI : be.isHEVC(e) ? hu.HEVC : be.isVP09(e) ? hu.VP09 : be.isAVC(e) ? hu.AVC : hu.UNKNOWN
}
function Hp(e) {
return null == e ? void 0 : e.split(".")[0]
}
function jp(e) {
return be.isALAC(e) ? fu.ALAC : be.isFLAC(e) ? fu.FLAC : be.isEC3(e) ? fu.EC3 : be.isAC3(e) ? fu.AC3 : be.isXHEAAC(e) ? fu.XHEAAC : be.isAAC(e) ? fu.AAC : be.isMP3(e) ? fu.MP3 : fu.UNKNOWN
}
class Qp {
constructor(...e) {
this.identifier = e
}
ensureSameIdentifierLength(e) {
if (this.identifier.length !== e.identifier.length) throw new Error(`Identifiers have non-matching lengths! (${this.identifier.length} vs ${e.identifier.length})`)
}
isGreaterThan(t) {
this.ensureSameIdentifierLength(t);
for (let e = 0; e < this.identifier.length; ++e) {
if (this.identifier[e] < t.identifier[e]) return !1;
if (this.identifier[e] > t.identifier[e]) return !0
}
return !1
}
isEqualTo(i) {
return this.ensureSameIdentifierLength(i), this.identifier.every((e, t) => e === i.identifier[t])
}
}
function Wp(e) {
return ne(e) && 0 !== e && 1 !== e
}
class Gp extends Error {}
class zp {
constructor(e) {
this.value = e, this.waiters = [], this.wcounter = 0, this.rcounter = 0
}
lock(e, t = !1) {
return this._lock(!0, e, t)
}
unlock() {
this._unlock(!0)
}
readLock(e, t = !1) {
return this._lock(!1, e, t)
}
readUnlock() {
this._unlock(!1)
}
_schedule() {
const t = [];
this.waiters = this.waiters.filter(e => !this._canLock(e.rw) || (e.rw ? ++this.wcounter : ++this.rcounter, t.push(e), !1));
for (const e of t) e.observer.next(this.value), e.observer.complete()
}
_canLock(e) {
return e && 0 === this.wcounter && 0 === this.rcounter || !e && 0 === this.wcounter
}
_lock(i, e, r = !1) {
"boolean" == typeof e && ([r, e] = [e, void 0]);
const t = new $t(e => {
var t = this._canLock(i);
if (r && !t) throw new Gp;
t ? (i ? ++this.wcounter : ++this.rcounter, e.next(), e.complete()) : this.waiters.push({
rw: i,
observer: e
})
});
return e ? t.pipe(jr(() => ((e, t, i, r) => {
if (!r) return $i(e);
let n, s;
try {
n = r(e, t)
} catch (e) {
s = Vi(() => e)
}
return s = s || (void 0 === n ? $i(e) : Fr(n)), s.pipe(Vs(i))
})(this.value, e => {
this.value = e
}, () => this._unlock(i), e))) : t
}
_unlock(e) {
e ? this.wcounter = Math.max(this.wcounter - 1, 0) : this.rcounter = Math.max(this.rcounter - 1, 0), this._schedule()
}
}
class Xp extends $t {
constructor() {
super(e => this._count$.pipe(ln(e => 0 === e), Ds(1), Zs(void 0)).subscribe(e)), this._count$ = new yi(0)
}
wrap(e) {
return Zr(() => (this.add(), Fr(e))).pipe(Za({
error: e => this._count$.error(e)
}), Vs(() => this.done()))
}
add(e = 1) {
this._count$.next(this._count$.value + e)
}
done(e = 1) {
this._count$.next(this._count$.value - e)
}
}
const Yp = {
isBuffered(t, i) {
for (let e = 0; t && e < t.length; e++)
if (i >= t.start(e) && i <= t.end(e)) return !0;
return !1
},
timeRangesToBufferedRange(t) {
const i = [];
for (let e = 0; t && e < t.length; e++) i.push({
start: t.start(e),
end: t.end(e)
});
return i
},
subtitleBufferInfo(e, t, i) {
if (e) {
e = this.bufferedCues(e);
return this.getBufferedInfo(e, t, i)
}
return {
len: 0,
start: t,
end: t,
nextStart: void 0
}
},
fragmentsBufferedInfo(e, t, i) {
const r = [];
for (const t of e) r.push({
start: t.start,
end: t.start + t.duration
});
return this.getBufferedInfo(r, t, i)
},
bufferedCues(t) {
const i = [];
if (t)
for (let e = 0; e < t.length; e++) i.push({
start: t[e].startTime,
end: t[e].endTime
});
return i
},
bufferedInfoFromMedia: (e, t, i) => Yp.getBufferedInfo(Yp.timeRangesToBufferedRange(e.buffered), t, i),
getBufferedInfo(e, t, i) {
const r = [];
let n, s, a, o, l;
const d = e.map(({
start: e,
end: t
}) => ({
start: e,
end: t
}));
for (d.sort((e, t) => {
return e.start - t.start || t.end - e.end
}), l = 0; l < d.length; l++) {
const e = r.length;
if (e) {
const t = r[e - 1].end;
d[l].start - t < i ? d[l].end > t && (r[e - 1].end = d[l].end) : r.push(d[l])
} else r.push(d[l])
}
for (l = 0, n = 0, s = a = t; l < r.length; l++) {
const e = r[l]["start"],
d = r[l]["end"];
if (t + i >= e && t < d) s = e, a = d, n = a - t;
else if (t + i < e) {
o = e;
break
}
}
return {
len: n,
start: s,
end: a,
nextStart: o
}
},
toRangeString: e => `[${e.start.toFixed(3)},${e.end.toFixed(3)}]`
};
(w = Cp = Cp || {}).Seek = "Seek", w.HighBuffer = "HighBuffer", w.LowBuffer = "LowBuffer", (w = Dp = Dp || {}).AlmostDry = "AlmostDry", w.LowWater = "LowWater", w.HighWater = "HighWater", w.AboveHighWater = "AboveHighWater";
const Jp = {
[Dp.AlmostDry]: 0,
[Dp.LowWater]: 1,
[Dp.HighWater]: 2,
[Dp.AboveHighWater]: 3
};
function Zp(t, e) {
return [{
threshold: e.highWaterLevelSeconds,
level: Dp.HighWater
}, {
threshold: e.lowWaterLevelSeconds,
level: Dp.LowWater
}, {
threshold: e.almostDryWaterLevelSeconds,
level: Dp.AlmostDry
}].find(({
threshold: e
}) => e < t)
}
function ef(t, e) {
return [{
threshold: e.almostDryWaterLevelSeconds,
level: Dp.AlmostDry
}, {
threshold: e.lowWaterLevelSeconds,
level: Dp.LowWater
}, {
threshold: e.highWaterLevelSeconds,
level: Dp.HighWater
}, {
threshold: 1 / 0,
level: Dp.AboveHighWater
}].find(({
threshold: e
}) => t <= e)
}
function tf(t, i) {
const e = ef(t.getCurrentWaterLevel(i), t.bufferMonitorInfo).level,
r = [null, null];
return [yu.Variant, yu.AltAudio].forEach(e => {
null != t.sourceBufferEntityByType(e) && (r[e] = ef(t.getCurrentWaterLevelByType(e, i), t.bufferMonitorInfo).level)
}), {
combined: e,
sbTuple: r
}
}
function rf(s, a) {
return ed([s.combinedBuffer$, s.gotPlaying$, s.seeking$, s.waterLevelChangedForType$(null), s.stallInfo$]).pipe(La(([e, t, i, r, n]) => 0 === e.length || !t || i || null == r || null != n ? Ii : function t(i, r, e) {
const n = i.getCurrentWaterLevel(r),
s = Zp(n, i.bufferMonitorInfo);
if (s) {
const e = s["threshold"];
return bn(Math.ceil(1e3 * (n - e))).pipe(La(() => {
const e = Zp(i.getCurrentWaterLevel(r), i.bufferMonitorInfo);
return (null == e ? void 0 : e.level) === s.level ? t(i, r) : Wu
}), hr(() => tf(i, r)))
}
return Ii
}(s, a)))
}
class nf extends kl {
constructor(e, t) {
super(t), this.mediaElement = e
}
get mediaElementDuration$() {
return this.selectActive(({
mediaElementDuration: e
}) => e)
}
get mediaElementDuration() {
var e;
return null !== (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.mediaElementDuration) && void 0 !== e ? e : 1 / 0
}
get msDuration() {
var e;
return null !== (e = null === (e = this.mediaSourceEntity) || void 0 === e ? void 0 : e.duration) && void 0 !== e ? e : 1 / 0
}
get minSBDuration() {
var e;
let i = Number.POSITIVE_INFINITY;
return null === (e = null === (e = this.mediaSourceEntity) || void 0 === e ? void 0 : e.sourceBufferEntities) || void 0 === e || e.forEach((e, t) => {
e && (i = ne(e.totalDuration) ? Math.min(i, e.totalDuration) : Number.NEGATIVE_INFINITY)
}), ne(i) ? i : 1 / 0
}
get currentTime() {
return this.mediaElement.currentTime
}
get clientWidth() {
return this.mediaElement.clientWidth
}
get clientHeight() {
return this.mediaElement.clientHeight
}
getBufferedDuration(e = .5) {
var t = Yp.timeRangesToBufferedRange(this.mediaElement.buffered),
e = Yp.getBufferedInfo(t, this.currentTime, e);
return e.end - e.start
}
get mediaSourceEntity() {
var e;
return null === (e = this.getActive()) || void 0 === e ? void 0 : e.mediaSourceEntity
}
get msReadyState() {
var e;
return null === (e = this.mediaSourceEntity) || void 0 === e ? void 0 : e.readyState
}
get sourceBufferEntities() {
var e;
return null === (e = this.mediaSourceEntity) || void 0 === e ? void 0 : e.sourceBufferEntities
}
sourceBufferEntityByType(e) {
var t;
return null === (t = this.sourceBufferEntities) || void 0 === t ? void 0 : t[e]
}
initSegmentEntityByType(e) {
return null === (e = this.sourceBufferEntityByType(e)) || void 0 === e ? void 0 : e.initSegmentInfo
}
get maxBufferSize() {
var e = null === (e = this.sourceBufferEntities) || void 0 === e ? void 0 : e[yu.Variant];
let t = 1 / 0;
return null != e && e.gotQuotaExceeded && (t = null !== (e = e.maxTotalBytes) && void 0 !== e ? e : 1 / 0), t
}
get postFlushSeek() {
var e;
return null === (e = this.getActive()) || void 0 === e ? void 0 : e.postFlushSeek
}
get seekable() {
return this.mediaElement.seekable
}
get desiredRate() {
var e;
return (null === (e = this.getActive()) || void 0 === e ? void 0 : e.desiredRate) || 0
}
get desiredRate$() {
return this.selectActive(({
desiredRate: e
}) => null != e ? e : 0)
}
get effectiveRate() {
return this.isIframeRate ? this.desiredRate : this.paused ? 0 : 1
}
get playbackRate() {
return this.mediaElement.playbackRate
}
get isIframeRate() {
return Wp(this.desiredRate)
}
get isIframeRate$() {
return this.desiredRate$.pipe(hr(Wp))
}
get msObjectUrl$() {
return this.selectActive(({
mediaSourceEntity: e
}) => null == e ? void 0 : e.objectUrl).pipe(Is())
}
get msReadyState$() {
return this.selectActive(({
mediaSourceEntity: e
}) => {
return null !== (e = null == e ? void 0 : e.readyState) && void 0 !== e ? e : null
})
}
get readyState() {
var e;
return null !== (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.readyState) && void 0 !== e ? e : 0
}
get readyState$() {
return this.selectActive(({
readyState: e
}) => null != e ? e : 0)
}
get mediaSourceEntity$() {
return this.selectActive(({
mediaSourceEntity: e
}) => e)
}
get expectedSbCount$() {
return this.selectActive(({
expectedSbCount: e
}) => e)
}
get expectedSbCount() {
var e;
return null === (e = this.getActive()) || void 0 === e ? void 0 : e.expectedSbCount
}
get paused$() {
return this.selectActive(({
paused: e
}) => e)
}
get paused() {
var e;
return null === (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.paused) || void 0 === e || e
}
get playbackStarted() {
var e;
return ne(null === (e = this.getActive()) || void 0 === e ? void 0 : e.firstPlayTime)
}
get flushing$() {
return this.selectActive(({
flushing: e
}) => e)
}
get flushing() {
var e;
return null !== (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.flushing) && void 0 !== e && e
}
get waitingForDisco$() {
return this.selectActive(({
waitingForDisco: e
}) => e)
}
get waitingForDisco() {
var e;
return null !== (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.waitingForDisco) && void 0 !== e && e
}
get gotPlaying() {
var e;
return null !== (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.gotPlaying) && void 0 !== e && e
}
get gotPlaying$() {
return this.selectActive(({
gotPlaying: e
}) => e)
}
get gotLoadStart$() {
return this.selectActive(({
gotLoadStart: e
}) => e)
}
get seekTo() {
var e;
return null === (e = this.getActive()) || void 0 === e ? void 0 : e.seekTo
}
get seekTo$() {
return this.selectActive(({
seekTo: e
}) => e)
}
get seeking() {
var e;
return null !== (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.seeking) && void 0 !== e && e
}
get seeking$() {
return this.selectActive(({
seeking: e
}) => e)
}
get nudgeTarget$() {
return this.selectActive(({
nudgeInfo: e
}) => null == e ? void 0 : e.nudgeTarget)
}
get nudgeCount() {
var e;
return null !== (e = null === (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.nudgeInfo) || void 0 === e ? void 0 : e.nudgeCount) && void 0 !== e ? e : 0
}
get sourceBufferEntities$() {
return this.selectActive(({
mediaSourceEntity: e
}) => null == e ? void 0 : e.sourceBufferEntities)
}
sourceBufferEntityByType$(t) {
return this.selectActive(({
mediaSourceEntity: e
}) => {
return null === (e = null == e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[t]
})
}
bufferedSegmentsByType$(t) {
return this.selectActive(({
mediaSourceEntity: e
}) => {
return null !== (e = null === (e = null === (e = null == e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[t]) || void 0 === e ? void 0 : e.bufferedSegments) && void 0 !== e ? e : []
})
}
getBufferedSegmentsByType(e) {
return null !== (e = null === (e = this.sourceBufferEntityByType(e)) || void 0 === e ? void 0 : e.bufferedSegments) && void 0 !== e ? e : []
}
get bufferedSegmentsTuple$() {
return ed([this.bufferedSegmentsByType$(yu.Variant), this.bufferedSegmentsByType$(yu.AltAudio)]).pipe(Gn(10))
}
get timeupdate$() {
return Oc(this.mediaElement).event("timeupdate").pipe(ji(tr), Aa(), ao(125, void 0, {
leading: !0,
trailing: !0
}), hr(e => this.currentTime), ln(e => ne(e)))
}
get playingEvent$() {
return Oc(this.mediaElement).event("playing").pipe(hr(() => {}))
}
get mediaElementEntity$() {
return this.selectActive(e => Boolean(e))
}
get ended$() {
return this.selectActive(e => {
return null !== (e = null == e ? void 0 : e.ended) && void 0 !== e && e
})
}
sbUpdating$(t) {
return this.selectActive(e => {
return null !== (e = null === (e = null === (e = null === (e = null == e ? void 0 : e.mediaSourceEntity) || void 0 === e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[t]) || void 0 === e ? void 0 : e.updating) && void 0 !== e && e
})
}
sbUpdating(e) {
var t;
return null !== (e = null === (e = null === (t = null === (t = null === (t = this.getActive()) || void 0 === t ? void 0 : t.mediaSourceEntity) || void 0 === t ? void 0 : t.sourceBufferEntities) || void 0 === t ? void 0 : t[e]) || void 0 === e ? void 0 : e.updating) && void 0 !== e && e
}
sbError$(t) {
return this.selectActive(e => {
return null === (e = null === (e = null === (e = null == e ? void 0 : e.mediaSourceEntity) || void 0 === e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[t]) || void 0 === e ? void 0 : e.error
})
}
get updating$() {
return ed([this.sbUpdating$(yu.Variant), this.sbUpdating$(yu.AltAudio)]).pipe(hr(e => e.some(e => e)))
}
get bufferedRangeTuple$() {
return ed([this.selectActive(e => {
return null !== (e = null === (e = null === (e = null === (e = null == e ? void 0 : e.mediaSourceEntity) || void 0 === e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[gu.Variant]) || void 0 === e ? void 0 : e.bufferedRanges) && void 0 !== e ? e : null
}), this.selectActive(e => {
return null !== (e = null === (e = null === (e = null === (e = null == e ? void 0 : e.mediaSourceEntity) || void 0 === e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[gu.AltAudio]) || void 0 === e ? void 0 : e.bufferedRanges) && void 0 !== e ? e : null
})])
}
getBufferedRangeByType(e) {
return null !== (e = null === (e = this.sourceBufferEntities[e]) || void 0 === e ? void 0 : e.bufferedRanges) && void 0 !== e ? e : []
}
get combinedBuffer$() {
return this.selectActive(e => {
return null !== (e = null == e ? void 0 : e.bufferedRanges) && void 0 !== e ? e : []
})
}
getBufferInfo(n, s) {
var e;
const t = null === (e = this.sourceBufferEntities) || void 0 === e ? void 0 : e.map(e => null == e ? void 0 : e.bufferedRanges),
i = {
buffered: {
start: n,
end: n,
len: 0
},
bufferedSegments: []
},
a = [i, i];
return t && t.forEach((e, t) => {
if (e) {
const i = Yp.getBufferedInfo(e, n, s),
r = (null !== (e = this.sourceBufferEntities[t].bufferedSegments) && void 0 !== e ? e : []).filter(e => !(e.endPTS < i.start || e.startPTS > i.end));
a[t] = {
buffered: i,
bufferedSegments: r
}
}
}), a
}
getCombinedBufferInfo(e, t) {
var i = this.getActive();
return i ? Yp.getBufferedInfo(i.bufferedRanges, e, t) : null
}
get bufferMonitorInfo() {
var e;
return null !== (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.bufferMonitorInfo) && void 0 !== e ? e : null
}
get bufferMonitorThresholds$() {
return this.selectActive(e => {
var t = null == e ? void 0 : e.bufferMonitorInfo;
if (!t) return null;
var {
almostDryWaterLevelSeconds: i,
lowWaterLevelSeconds: r,
highWaterLevelSeconds: e,
maxBufferSeconds: t
} = t;
return {
almostDryWaterLevelSeconds: i,
lowWaterLevelSeconds: r,
highWaterLevelSeconds: e,
maxBufferSeconds: t
}
}).pipe(Is((e, t) => (null == e ? void 0 : e.lowWaterLevelSeconds) === (null == t ? void 0 : t.lowWaterLevelSeconds)))
}
get waterLevelType$() {
return this.selectActive(e => {
return null !== (e = null == e ? void 0 : e.bufferMonitorInfo.waterLevelType) && void 0 !== e ? e : null
})
}
waterLevelForType(e) {
var t;
return null !== (e = null === (t = null === (t = this.getActive()) || void 0 === t ? void 0 : t.bufferMonitorInfo.waterLevelType) || void 0 === t ? void 0 : t.sbTuple[e]) && void 0 !== e ? e : null
}
waterLevelChangedForType$(t) {
return this.waterLevelType$.pipe(hr(e => null == e ? null : null == t ? e.combined : e.sbTuple[t]))
}
get fellBelowLowWater$() {
return this.waterLevelChangedForType$(yu.Variant).pipe(ha(), hr(([e, t]) => function(e, t) {
return Jp[e] > Jp[t]
}(e, t) && (t === Dp.LowWater || t === Dp.AlmostDry)), bo(this.seekTo$, this.waitingForDisco$), hr(([e, t, i]) => e && !ne(null == t ? void 0 : t.pos) && !i), Ra(!1))
}
isBufferedToEnd$(s, a = !0) {
return ed([this.combinedBuffer$, this.selectActive(e => e.bufferMonitorInfo).pipe(Kp(), hr(e => a ? e.almostDryWaterLevelSeconds : Math.max(e.almostDryWaterLevelSeconds, e.lowWaterLevelSeconds / 2))), this.seeking$]).pipe(hr(([e, t]) => {
var i = this.minSBDuration;
if (!e || !ne(i) && a) return !1;
e = Yp.getBufferedInfo(e, this.currentTime, s).end;
let r, n;
return n = a ? (r = i, Math.abs(r - e) <= t) : (r = this.mediaElementDuration, r - e <= t), n
}), Is())
}
needData$(e, n = !1) {
var t = !n;
return ed([this.msReadyState$, this.waterLevelChangedForType$(null), this.isBufferedToEnd$(e, t), this.bufferedRangeTuple$, this.seekTo$, this.mediaElementDuration$]).pipe(Gn(10), hr(([e, t, i, , r]) => {
if ("closed" === e) return !1;
if (n) return !0;
i = null == t || !i && t !== Dp.AboveHighWater, r = this.isIframeRate || !!r;
return i || t !== Dp.AboveHighWater && r
}), tc("needData"))
}
getSourceBufferInfoAction(e, t, i, r) {
var {
currentTime: n,
sourceBufferEntities: s,
msReadyState: a
} = this;
let o = [null, null];
return !e && i.every(e => !(null != e && e.userInitiated)) ? null : "open" === a && s && null != s[0] ? (o = this.getBufferInfo(n, r), {
position: n,
discoSeqNum: null == t ? void 0 : t.discoSeqNum,
bufferInfoTuple: o,
switchContexts: i
}) : {
position: null == t ? void 0 : t.pos,
discoSeqNum: null == t ? void 0 : t.discoSeqNum,
bufferInfoTuple: o,
switchContexts: i
}
}
get haveEnough() {
var e;
return null !== (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.haveEnough) && void 0 !== e && e
}
get haveEnough$() {
return this.selectActive(({
haveEnough: e
}) => e)
}
static likelyToKeepUp(e, t, i) {
return t && i >= e.HAVE_FUTURE_DATA
}
get playbackLikelyToKeepUp() {
return nf.likelyToKeepUp(this.mediaElement, this.haveEnough, this.readyState)
}
get playbackLikelyToKeepUp$() {
return ed([this.haveEnough$, this.readyState$]).pipe(hr(([e, t]) => nf.likelyToKeepUp(this.mediaElement, e, t)))
}
getCurrentWaterLevel(e) {
var t = this.currentTime,
i = null !== (i = null === (i = this.getActive()) || void 0 === i ? void 0 : i.bufferedRanges) && void 0 !== i ? i : [];
return Yp.getBufferedInfo(i, t, e).len
}
getCombinedMediaSourceBufferInfo(e) {
var t = this.currentTime,
[i, r] = null === (r = null === (i = this.getActive()) || void 0 === i ? void 0 : i.mediaSourceEntity) || void 0 === r ? void 0 : r.sourceBufferEntities;
return [Yp.getBufferedInfo(null !== (i = null == i ? void 0 : i.bufferedRanges) && void 0 !== i ? i : [], t, e), Yp.getBufferedInfo(null !== (r = null == r ? void 0 : r.bufferedRanges) && void 0 !== r ? r : [], t, e)]
}
getCurrentWaterLevelByType(e, t) {
var i = this.currentTime,
e = this.sourceBufferEntityByType(e),
e = null !== (e = null == e ? void 0 : e.bufferedRanges) && void 0 !== e ? e : [];
return Yp.getBufferedInfo(e, i, t).len
}
canContinuePlaybackWithoutGap(e, t, i, r) {
if ("LIVE" !== e.type) return !0;
if (!e.ptsKnown) return !1;
var n = this.currentTime,
i = performance.now() + i.avgPlaylistLoadTimeMs + 1e3 * e.targetduration,
t = e.fragments[0].start + (i - t) / 1e3;
let s = this.getCombinedBufferInfo(n, r).end;
return s >= e.fragments[0].start - r && s <= e.fragments[0].start + e.totalduration && (s = e.fragments[0].start + e.totalduration), t <= s
}
get stallInfo$() {
return this.selectActive(e => {
return null !== (e = null == e ? void 0 : e.stallInfo) && void 0 !== e ? e : null
})
}
get textTracks() {
return this.mediaElement.textTracks
}
get textTracksCreated$() {
return this.selectActive(e => null == e ? void 0 : e.textTracksCreated)
}
get mediaOptionParsedSubtitleRecord() {
var e;
return null === (e = this.getActive()) || void 0 === e ? void 0 : e.mediaOptionParsedSubtitleRecord
}
getParsedSubtitleRecordsForMediaOption(e) {
return this.mediaOptionParsedSubtitleRecord ? this.mediaOptionParsedSubtitleRecord[e] || {} : null
}
}
class sf {
constructor(e, t, i, r) {
this.mediaSink = e, this.media = t, this.logger = r, this.useCustomMediaFunctions = i.useCustomMediaFunctions, this.overridePlaybackRate = i.overridePlaybackRate
}
install() {
const e = this.media;
e && (this.useCustomMediaFunctions && e && e.play && e.pause && (e.originalPlay || (e.originalPlay = e.play.bind(e)), e.originalPause || (e.originalPause = e.pause.bind(e)), e.play = () => (this.mediaSink.checkForReplay(), this.mediaSink.desiredRate = 1, 0 < e.currentTime && !e.paused && !e.ended && 2 < e.readyState ? Promise.resolve() : new Promise((e, t) => {
this.pendingPlayPromises || (this.pendingPlayPromises = []), this.pendingPlayPromises.push({
resolve: e,
reject: t
})
})), e.pause = () => {
this.mediaSink.desiredRate = 0
}), "function" == typeof HTMLMediaElement && this.overridePlaybackRate && Object.defineProperty(e, "playbackRate", {
enumerable: !0,
configurable: !0,
get: function() {
return 1
},
set: function(e) {
Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype, "playbackRate").set.call(this, e)
}
}), this.playPromise = null, this.expectPauseEvent = this.expectPlayEvent = !1)
}
uninstall() {
const e = this.media;
e && (e.originalPlay && (e.play = e.originalPlay, delete e.originalPlay), e.originalPause && (e.pause = e.originalPause, delete e.originalPause), this.overridePlaybackRate && (e.playbackRate = 1, delete e.playbackRate)), this.playPromise = null, this.expectPauseEvent = this.expectPlayEvent = !1
}
play() {
var e;
this.media && (e = this.mediaSink.flushing, this.playPromise || e ? this.logger.warn(`Ignoring play command playPromise/flushing ${Boolean(this.playPromise)}/${e}`) : (this.expectPlayEvent = this.expectPlayEvent || this.media.paused, this.playPromise = this._mediaPlayInternal(), this.playPromise && this.playPromise.then(function() {
this.playPromise = null, this._handlePendingPlayPromises(null)
}.bind(this)).catch(function(e) {
this.playPromise = null, this.expectPlayEvent = !1, this._handlePendingPlayPromises(e || new Error("Play rejected for unknown reason")), "NotAllowedError" === (null == e ? void 0 : e.name) ? (this.logger.warn("play() not allowed, going back to rate 0"), this.mediaSink.desiredRate = 0) : this.logger.error(`play() error: ${null==e?void 0:e.message}`)
}.bind(this))))
}
pause() {
this.media && (this.playPromise ? this.playPromise.then(() => {
var e = this.mediaSink.mediaQuery;
(0 === this.mediaSink.desiredRate || e.seeking && !e.playbackLikelyToKeepUp) && this._mediaPauseInternal()
}).catch(e => {
this.logger.error(`Promise error in pause(): ${e.message}`)
}) : this._mediaPauseInternal())
}
_handlePendingPlayPromises(t) {
var e, i = null === (e = this.pendingPlayPromises) || void 0 === e ? void 0 : e.length;
if (t)
for (let e = 0; e < i; e++) this.pendingPlayPromises[e].reject(t);
else
for (let e = 0; e < i; e++) this.pendingPlayPromises[e].resolve();
this.pendingPlayPromises = []
}
_mediaPlayInternal() {
return (this.media.originalPlay || this.media.play.bind(this.media))()
}
_mediaPauseInternal() {
return this.expectPauseEvent = this.expectPauseEvent || !this.media.paused, (this.media.originalPause || this.media.pause.bind(this.media))()
}
}
class af extends Error {}
class of extends p {
constructor(e, t, i, r, n) {
super(L, e, t, i, r), this.sbType = n, this.response = r
}
}
class lf extends of {
constructor(e, t, i, r) {
super("bufferAddCodecError", !1, e, t, i), this.mediaOptionId = r, this.mediaOptionType = Vu(this.sbType)
}
}
class df extends of {
constructor(e, t, i, r, n, s) {
super(e, t, i, r, n), this.isTimeout = s, this.mediaOptionType = Vu(this.sbType)
}
}
class uf extends df {
constructor(e, t, i, r) {
super("bufferFullError", !1, e, t, i, !1), this.maxTotalBytes = r
}
}
class cf extends df {
constructor(e, t, i) {
super(n, !1, e, t, i, !0)
}
}
class hf extends df {
constructor(e, t, i, r) {
super(n, !1, e, t, i, !1), this.mediaOptionId = r, this.mediaOptionType = Vu(this.sbType)
}
}
class pf extends p {
constructor(e, t, i, r, n, s, a = NaN) {
super(L, e, t, i, r), this.stallType = n, this.bufferLen = s, this.nudgePosition = a, this.response = r
}
}
class ff extends $t {
constructor(n, e, s, a, o, l, d, u, c) {
super(e => {
const t = Oc(l),
i = u.child({
sb: o
});
n.setSourceBufferEntity(o, d), d.mimeType.includes("audio/mpeg") && (this.updateMp3Timestamps = !0);
const r = an(t.event("updatestart").pipe(Za(() => {
n.setSourceBufferUpdating(o)
})), t.event("updateend").pipe(ji(tr), Za(() => {
var e = Yp.timeRangesToBufferedRange(l.buffered),
t = Yp.timeRangesToBufferedRange(s.buffered);
n.setBufferedRangesUpdated(o, e, t, !1, c)
})), t.event("error").pipe(Za(() => {
n.setSourceBufferError(o, "Got source buffer error")
}))).pipe(La(() => Ii)).subscribe(e);
return () => {
r.unsubscribe();
try {
"open" === a.readyState && l.abort(), a.removeSourceBuffer(l)
} catch (e) {
i.error(`Error aborting SourceBuffer on unsubscribe: ${e.message}`)
}
}
}), this.mediaElementStore = n, this.mediaElementQuery = e, this.mediaElement = s, this.type = o, this.sourceBuffer = l, this.config = c, this.updateMp3Timestamps = !1
}
get buffered() {
return this.sourceBuffer.buffered
}
appendBuffer(e, t) {
return Zr(() => this.sourceBuffer.updating ? this._waitForUpdateEndOrError().pipe(La(() => this.appendBuffer(e, t))) : this._appendBufferAsync(e, t))
}
_appendBufferAsync(e, t) {
let i = NaN,
r = null;
const n = ("startPTS" in t ? t.frag : t).mediaOptionId;
try {
"startPTS" in t && (r = {
startPTS: t.startPTS,
endPTS: t.endPTS,
bytes: t.bytes,
frag: Object.assign({}, t.frag)
}), this.mediaElementStore.setInflightSegment(this.type, r), i = performance.now(), this.sourceBuffer.appendBuffer(e)
} catch (e) {
return 22 !== e.code ? (this.mediaElementStore.setInflightSegment(this.type, null), this.mediaElement.error ? Vi(new hf(e.message, $.VideoDecoderBadDataErr, this.type, n)) : Vi(e)) : (this.mediaElementStore.setBufferedRangesUpdated(this.type, Yp.timeRangesToBufferedRange(this.sourceBuffer.buffered), Yp.timeRangesToBufferedRange(this.mediaElement.buffered), !0, this.config), Vi(new uf(e.message, $.AllocationFailed, this.type, this.maxTotalBytes)))
}
return this._waitForUpdateEndOrError().pipe(hr(() => ({
startAppend: i,
endAppend: performance.now(),
bytesAppend: e.byteLength
})), So(1e4), Vn(e => {
throw e instanceof dr ? (this.sourceBuffer.abort(), e = new cf("Append took longer than 10000ms", $.InternalError, this.type)) : e instanceof of && (e = new hf("Decode error", $.VideoDecoderBadDataErr, this.type, n)), e
}))
}
remove(e, t) {
return this._waitForUpdateEndOrError().pipe(La(this._removeAsync.bind(this, e, t)))
}
_removeAsync(e, t) {
try {
this.sourceBuffer.remove(e, t)
} catch (e) {
return Vi(new of (r, !1, e.message, $.InternalError, this.type))
}
return this._waitForUpdateEndOrError()
}
abort() {
try {
this.sourceBuffer.abort()
} catch (e) {
return Vi(new of (r, !1, e.message, $.InternalError, this.type))
}
return this._waitForUpdateEndOrError()
}
get updating() {
return this.sourceBuffer.updating
}
get timestampOffset() {
return this.sourceBuffer.timestampOffset
}
set timestampOffset(e) {
this.sourceBuffer.timestampOffset = e
}
get gotQuotaExceeded() {
var e;
return null !== (e = null === (e = this.mediaElementQuery.sourceBufferEntityByType(this.type)) || void 0 === e ? void 0 : e.gotQuotaExceeded) && void 0 !== e && e
}
get bufferedSegments() {
var e;
return null !== (e = null === (e = this.mediaElementQuery.sourceBufferEntityByType(this.type)) || void 0 === e ? void 0 : e.bufferedSegments) && void 0 !== e ? e : []
}
get totalBytes() {
var e;
return null !== (e = null === (e = this.mediaElementQuery.sourceBufferEntityByType(this.type)) || void 0 === e ? void 0 : e.totalBytes) && void 0 !== e ? e : 0
}
get maxTotalBytes() {
var e = null !== (e = null === (e = this.mediaElementQuery.sourceBufferEntityByType(this.type)) || void 0 === e ? void 0 : e.maxTotalBytes) && void 0 !== e ? e : 1 / 0;
return this.gotQuotaExceeded ? e : 1 / 0
}
_waitForUpdateEndOrError() {
return this.sourceBuffer.updating && this.mediaElementStore.setSourceBufferUpdating(this.type), this.mediaElementQuery.sbUpdating$(this.type).pipe(ln(e => !1 === e), bo(this.mediaElementQuery.sbError$(this.type)), hr(([, e]) => {
if (e) throw new of (r, !1, "Got error during sourceBuffer operation", $.InternalError, this.type)
}), Ds(1))
}
}
class mf extends $t {
constructor(a, o, e, l, t) {
super(e => {
const t = Oc(l),
i = an(t.event("sourceopen"), t.event("sourceclose"), t.event("sourceended")).pipe(Za(e => {
e = (null !== (e = null == e ? void 0 : e.target) && void 0 !== e ? e : l).readyState;
o.msReadyState = e
})),
r = this.sourceBuffers$.pipe(La(e => e ? an(...e.filter(e => null != e)) : Ii)),
n = an(i, r).pipe(La(() => Ii)).subscribe(e),
s = URL.createObjectURL(l);
return a.src = s, o.setMediaSourceEntity(s, l.readyState), () => {
n.unsubscribe(), URL.revokeObjectURL(s), a.src === s && (a.removeAttribute("src"), a.load(), o.setMediaSourceEntity(null)), this.sourceBuffers$.next(null)
}
}), this.mediaElement = a, this.mediaElementStore = o, this.mediaElementQuery = e, this.mediaSource = l, this.logger = t, this.sourceBuffers$ = new yi(null)
}
get readyState() {
return this.mediaSource.readyState
}
set duration(e) {
this.mediaSource.duration = e
}
get duration() {
return this.mediaSource.duration
}
endOfStream(e) {
this.mediaSource.endOfStream(e)
}
createSourceBuffers(e, a) {
const o = this.mediaSource;
al(() => {
try {
const s = [null, null];
e.forEach((t, i) => {
if (t) {
var {
mimeType: r,
mediaOptionId: n
} = t;
let e;
try {
e = o.addSourceBuffer(r)
} catch (t) {
throw new lf(t.message, $.IncompatibleAsset, i, n)
}
s[i] = new ff(this.mediaElementStore, this.mediaElementQuery, this.mediaElement, this.mediaSource, i, e, t, this.logger, a)
}
}), this.sourceBuffers$.next(s)
} catch (e) {
if (!(e instanceof p)) throw new af(`error initializing sourcebuffers ${e.message} readyState=${o.readyState}`);
throw e
}
})
}
get needSourceBuffers() {
return null == this.sourceBuffers$.value || null == this.sourceBuffers$.value[0]
}
get sourceBuffers() {
return this.sourceBuffers$.value
}
getSourceBufferByType(e) {
var t = this.sourceBuffers$.value;
return t ? t[e] : null
}
updateLiveSeekableRange(e, t) {
const i = this.mediaSource;
null != i && i.setLiveSeekableRange && "open" === (null == i ? void 0 : i.readyState) && i.setLiveSeekableRange(e, t)
}
clearLiveSeekableRange() {
const e = this.mediaSource;
null != e && e.clearLiveSeekableRange && "open" === (null == e ? void 0 : e.readyState) && e.clearLiveSeekableRange()
}
}
function gf(e, c, t) {
const {
lowBufferThreshold: h,
lowBufferWatchdogPeriod: p,
highBufferWatchdogPeriod: f,
seekWatchdogPeriod: m
} = t, i = ed([c.desiredRate$, c.ended$, c.combinedBuffer$, c.seekTo$]).pipe(hr(e => {
var t, [i, r, n, s] = e;
return t = c.currentTime, e = i, i = r, r = n, n = isFinite(null == s ? void 0 : s.pos), s = r.some(e => e.start <= t && e.end > t), !(1 !== e || i || 0 === r.length || n && !s)
}), Is()), r = c.combinedBuffer$.pipe(hr(() => c.getCurrentWaterLevel(0) <= t.lowBufferThreshold || !c.haveEnough ? Cp.LowBuffer : Cp.HighBuffer), Is()), n = ed([i, c.seekTo$, c.gotPlaying$, r]).pipe(La(e => {
var [t, i, r] = e;
if (!t) return $i(null);
var n, s, a, o, l, d, u, e = c.nudgeCount,
t = m + +e;
return isFinite(null == i ? void 0 : i.pos) || !r ? (n = c, s = performance.now(), t = t, a = h, bn(1e3 * t).pipe(hr(() => {
var e = n.currentTime,
t = n.getCombinedBufferInfo(e, 0);
return yf(Cp.Seek, e, s, t, a, n.haveEnough)
}))) : (o = c, l = p, d = f + +e, u = h, an($i(o.currentTime), o.timeupdate$).pipe(La(e => {
const t = performance.now(),
i = o.getCombinedBufferInfo(e, 0);
let r, n;
return r = i.len <= u || !o.haveEnough ? (n = l, Cp.LowBuffer) : (n = d, Cp.HighBuffer), bn(Math.max(100, 1e3 * n)).pipe(hr(() => e < o.currentTime ? null : yf(r, e, t, i, u, o.haveEnough)))
})))
})), s = n.pipe(Kp(), bo(c.combinedBuffer$), La(([]) => ed([c.seeking$, c.paused$])), La(([e, t]) => e || t ? Ii : c.timeupdate$.pipe(ha(), ln(([e, t]) => ne(e) && ne(t) && e < t), Ds(1))), hr(() => null));
return an(n, s)
}
function yf(e, t, i, r, n, s) {
var a = performance.now() - i;
return {
type: e,
isLowBufferStall: r.len <= n || !s,
tstalled: i,
stallDurationMs: a,
currentTime: t
}
}
class vf extends $t {
constructor(w, A, e, t, i, r, n) {
super(e => {
const t = this.config,
i = A.startMediaSession(w, t.maxBufferLength, t.almostDryBufferSec, t.defaultTargetDuration),
r = Sf(w, A, this._mediaQuery, this, this.hlsGapless, t, this.logger, this.rtcService),
n = this.mediaSource$.pipe(La(e => e || Ii)),
s = this._mediaQuery.seekTo$.pipe((u = w, c = this._mediaQuery, p = (h = this).config, f = (f = this.logger).child({
name: "seek"
}), e => e.pipe(Za(e => {}), ln(e => e && ne(e.pos)), La(e => c.readyState$.pipe(ln(e => e >= u.HAVE_METADATA), Ds(1), Zs(e), La(({
pos: e,
fromEvent: t
}) => (h.checkForInconsistentStoreBufferRangesAndUpdate(), u.paused || h.pause(), t || (u.currentTime = e), Gu(c.haveEnough$, e => e).pipe(Zs({
pos: e,
fromEvent: t
})))), La(({
pos: e,
fromEvent: t
}) => {
var i = c.getCombinedBufferInfo(e, 0),
r = i.nextStart;
return (!t || p.nudgeFromEventSeek) && 0 === i.len && ne(r) && e < r && r - e <= p.maxSeekHole ? (h.seekTo = r, Ii) : $i(e)
}), bo(c.desiredRate$), hr(([, e]) => {
u.paused && 0 !== e && h.play()
}), $a(Ii), Vn(e => (f.error(`error during seek ${e.message}`), Ii))))))),
a = this._mediaQuery.desiredRate$.pipe((o = w, l = this._mediaQuery, d = this, e => e.pipe(bo(l.seekTo$), La(([e, t]) => ne(null == t ? void 0 : t.pos) ? Ii : 0 === e ? (o.paused || d.pause(), Ii) : Gu(l.haveEnough$, e => e).pipe(Za(() => {
o.paused && d.play()
}))), $a(Ii))));
var o, l, d, u, c, h, p, f;
this.liveSeekableWindow = {
start: NaN,
end: NaN
}, this.mediaFunctions = this.mediaFunctions || new sf(this, w, t, this.logger), this.mediaFunctions.install();
var m, g, y, v, S, b, T, E, I = an(gf(this.logger, this._mediaQuery, this.config).pipe(Za(e => {
A.setStallInfo(e)
})), this.mediaQuery.stallInfo$.pipe((g = A, y = (m = this).config, v = this.logger, e => e.pipe(_s(e => e ? function(i, e, r, n) {
const s = i.mediaQuery;
return an(ed([s.seekTo$, s.nudgeTarget$]).pipe(ln(([e, t]) => e && ne(e.pos) && ne(t) && (e.pos < t || e.pos - t > r.maxSeekHole)), Zs(null)), s.stallInfo$).pipe(bo(s.desiredRate$), ji(tr), hr(([c, e], t) => {
if (!c) return NaN;
var h = s.getCombinedBufferInfo(c.currentTime, 0),
e = Wp(e);
return function(e, t, i, r, n) {
var {
type: s,
isLowBufferStall: a,
currentTime: o
} = c, l = h.len, d = t.maxSeekHole;
let u = NaN;
if (a) {
const t = h.nextStart - o <= d ? h.nextStart : 1 / 0;
ne(t) ? u = t : e.mediaQuery.msDuration - o < .1 && (u = o + .1)
} else if (n < t.nudgeMaxRetry) u = o + t.nudgeOffset;
else {
if (!r) throw i.error(`still stuck in high buffer @${o} after ${t.nudgeMaxRetry}, raise fatal error`), new pf("bufferStalledError", !0, "got fatal buffer error", $.VideoDecoderBadDataErr, s, l);
i.error(`still stuck in high buffer @${o} after ${t.nudgeMaxRetry}, non fatal in iframeMode`)
}
return ne(u) && e.nudgeSeek(u, n + 1), u
}(i, r, n, e, t)
}), Wa(e => ne(e)), Vs(() => {
e.setNudgeInfo(null)
}))
}(m, g, y, v) : $i(NaN))))));
an(r, n, s, a, I, (S = this.mediaQuery, b = A, I = t.maxBufferHole, an((E = I, ed([(T = S).bufferMonitorThresholds$, T.combinedBuffer$, T.seeking$]).pipe(hr(([e]) => null == e ? null : tf(T, E)))), rf(S, I)).pipe(ji(tr), Za(({
combined: e,
sbTuple: t
}) => {
b.updateWaterLevels(e, t)
})))).pipe($a(Ii), Vs(() => {
A.remove(i), this.mediaFunctions.uninstall(), this.mediaFunctions = void 0
})).subscribe(e)
}), this.mediaElement = w, this.mediaElementStore = A, this.config = e, this.hlsGapless = t, this.logger = i, this.teardownWG$ = r, this.rtcService = n, this.mediaSource$ = new yi(null), this.mediaKeysMutex = new zp, this._mediaQuery = new nf(w, A), this.logger = i.child({
name: "mse"
}), this.createId3Track(w), this.mediaFunctions = new sf(this, w, e, this.logger)
}
get mediaSourceAdapter() {
return this.mediaSource$.value
}
get sourceBuffers() {
var e;
return null !== (e = null === (e = this.mediaSourceAdapter) || void 0 === e ? void 0 : e.sourceBuffers) && void 0 !== e ? e : []
}
get needSourceBuffers() {
return !this.sourceBuffers[0]
}
get mediaQuery() {
return this._mediaQuery
}
sourceBuffersBufferedRangeByType(e) {
var t, e = null === (t = null === (t = this.mediaSourceAdapter) || void 0 === t ? void 0 : t.sourceBuffers) || void 0 === t ? void 0 : t[e];
return e ? Yp.timeRangesToBufferedRange(e.sourceBuffer.buffered) : null
}
createId3Track(e) {
this.id3Track = e.addTextTrack("metadata", "id3"), this.id3Track.mode = "hidden"
}
checkForInconsistentStoreBufferRangesAndUpdate() {
var e = Yp.timeRangesToBufferedRange(this.mediaElement.buffered),
t = this.sourceBuffersBufferedRangeByType(yu.Variant),
i = this.sourceBuffersBufferedRangeByType(yu.AltAudio),
r = null !== (n = null === (r = this.mediaQuery.sourceBufferEntityByType(yu.Variant)) || void 0 === r ? void 0 : r.bufferedRanges) && void 0 !== n ? n : null,
n = null !== (n = null === (n = this.mediaQuery.sourceBufferEntityByType(yu.AltAudio)) || void 0 === n ? void 0 : n.bufferedRanges) && void 0 !== n ? n : null;
this.shouldUpdateStoreValues(t, r) && (this.logger.warn(`[${Uu[yu.Variant]}] SourceBuffer's loaded bufferedRanges ${JSON.stringify(t)} & mediaElementStore's bufferedRanges ${JSON.stringify(r)} are out of sync!`), this.updateMediaElementStoreBufferedRanges(e, yu.Variant)), this.shouldUpdateStoreValues(i, n) && (this.logger.warn(`[${Uu[yu.AltAudio]}] SourceBuffer's loaded bufferedRanges ${JSON.stringify(i)} & mediaElementStore's bufferedRanges ${JSON.stringify(n)} are out of sync!`), this.updateMediaElementStoreBufferedRanges(e, yu.AltAudio))
}
shouldUpdateStoreValues(e, i) {
return !(null == e && null == i || (null == e ? void 0 : e.length) == (null == i ? void 0 : i.length) && !e.find(t => {
var e = Ku.search(i, e => t.start >= e.start && t.end <= e.end ? 0 : t.end < e.start ? -1 : 1);
return null == e || e.start != t.start || e.end != t.end || void 0
}))
}
updateMediaElementStoreBufferedRanges(e, t) {
var i = this.sourceBuffersBufferedRangeByType(t);
i && !this.mediaQuery.sbUpdating(t) && this.mediaElementStore.setBufferedRangesUpdated(t, i, e, !1, this.config)
}
destroyMediaSource() {
this.mediaSource$.next(null)
}
makeMediaSource() {
return new MediaSource
}
openMediaSource(t) {
al(() => {
var e;
t ? (e = new mf(this.mediaElement, this.mediaElementStore, this.mediaQuery, t, this.logger), this.mediaSource$.next(e)) : this.mediaSource$.next(null)
})
}
createSourceBuffers(e) {
const t = this.mediaSource$.value;
if (!t) throw new Error("createSourceBuffers empty mediaSource");
t.createSourceBuffers(e, this.config)
}
_waitForMediaSourceOpen(i) {
const r = this.mediaQuery.mediaSourceEntity.objectUrl;
return ed([this.mediaQuery.msReadyState$, this.mediaQuery.msObjectUrl$]).pipe(La(([e, t]) => t !== r ? $i(null) : "open" === e || "ended" === e ? $i(i) : Ii))
}
get appendOrder() {
return this.mediaQuery.isIframeRate ? [yu.Variant, yu.AltAudio] : [yu.AltAudio, yu.Variant]
}
clearFlush(e) {
e.forEach(e => {
e && (e.dataSeg.flushBeforeAppend = {
start: 0,
end: 0
})
})
}
getSwitchPosition(e) {
return e.reduce((e, t) => {
t = t ? t.dataSeg.switchPosition : void 0;
return ne(t) ? ne(e) ? Math.min(e, t) : t : e
}, void 0)
}
checkForReplay() {
var e = this.mediaElement;
e.paused && !e.seeking && e.duration && e.currentTime && e.currentTime >= e.duration - this.config.maxTotalDurationTolerance && (this.seekTo = 0)
}
resetMediaSourceIfNeeded(r) {
const n = this["mediaQuery"],
e = n["sourceBufferEntities"],
t = n.getActive()["expectedSbCount"];
if (!e || this.needSourceBuffers) return this._waitForMediaSourceOpen(r);
const s = function(e, s, t, i) {
const r = s.filter(e => Boolean(e)).length,
n = e.filter(e => Boolean(e)).length,
l = [null, null];
e.forEach((e, t) => {
var i, r, n, s, a, o;
e && (s = e["offsetTimestamp"], a = S(s), i = e.initSeg.mimeType, {
audioCodec: r,
videoCodec: n
} = e.initSeg.initParsedData, o = e["dataSeg"], s = S(o.startPts) - a, a = S(o.endPts) - a, o = o.discoSeqNum, l[t] = {
audioCodec: r,
videoCodec: n,
mimeType: i,
startPTSSec: s,
endPTSSec: a,
discoSeqNum: o,
mediaOptionId: e.initSeg.mediaOptionId
})
});
let a = r === t,
o = n === t;
if (1 === n && n < t && 0 !== r) {
const t = e[gu.Variant] ? gu.Variant : gu.AltAudio,
h = 1 - t,
r = l[t],
n = l[h] = function(e, i, r, n, t, s) {
const a = null == e ? void 0 : e.bufferedSegments;
if (!a) return s.warn("getMatchingInfo trying to query null sbEntity"), null;
s = a.find(e => {
var t = e.frag.discoSeqNum === n,
e = Math.max(i, e.startPTS) < Math.min(r, e.endPTS);
return t && e
});
if (null == s) return null; {
const {
audioCodec: i,
videoCodec: r,
mimeType: o
} = e;
return {
mimeType: o,
audioCodec: i,
videoCodec: r,
startPTSSec: s.startPTS,
endPTSSec: s.endPTS,
discoSeqNum: n,
mediaOptionId: t
}
}
}(s[h], r.startPTSSec, r.endPTSSec, r.discoSeqNum, r.mediaOptionId, i);
if (!n)
if (null !== (e = null === (e = e[gu.Variant]) || void 0 === e ? void 0 : e.dataSeg) && void 0 !== e && e.iframe && t === gu.Variant && l[t]) {
const p = s[t].videoCodec,
h = l[t].videoCodec;
if (a = a && (p === h || be.isCompatibleVideoCodec(p, h)), a) return {
compatible: a,
boundary: NaN,
allowance: NaN,
discoSeqNum: l[t].discoSeqNum
}
} else i.warn(`${Nu[t]} No matching frag found ${ae(r)} buffered=${ae(s[h].bufferedSegments.map(e=>{var{mediaSeqNum:t,discoSeqNum:i}=e.frag;return{mediaSeqNum:t,discoSeqNum:i,startPTS:e.startPTS,endPTS:e.endPTS}}))}`);
o = null != n
}
let d = NaN,
u = NaN,
c = NaN;
return o && l.forEach((e, t) => {
if (!e) return null;
ne(c) ? c !== e.discoSeqNum && (c = NaN) : c = e.discoSeqNum;
t = s[t];
if (t) {
const s = t.audioCodec,
i = t.videoCodec,
{
audioCodec: r,
videoCodec: n
} = e;
a = a && (i === n || be.isCompatibleVideoCodec(i, n)), a = a && (s === r || be.isCompatibleAudioCodec(s, r))
} else a = !1;
d = ne(d) ? (u = Math.abs(e.startPTSSec - d), Math.max(e.startPTSSec, d)) : (u = 0, e.startPTSSec)
}), {
compatible: a && o,
boundary: d,
allowance: u,
discoSeqNum: c
}
}(r, e, t, (this.config.maxBufferHole, this.logger));
if (s.compatible) return this._waitForMediaSourceOpen(r);
let i = s.boundary;
const a = s.allowance,
o = this.getSwitchPosition(r);
if (ne(o) && (i = o), !ne(i)) return this.logger.warn("not enough info #disco"), $i(null);
const l = fn(Gu(an($i(n.currentTime), n.timeupdate$), e => e >= i), Gu(n.stallInfo$.pipe(hr(e => {
return null !== (e = null == e ? void 0 : e.currentTime) && void 0 !== e ? e : NaN
})), e => e >= i - a - this.config.discontinuitySeekTolerance));
return this.mediaElementStore.waitingForDisco = !0, l.pipe(Zs(i), La(e => {
performance.now();
const t = n.currentTime,
i = this.msDuration;
return this.resetMediaSource(Math.max(t, e), s.discoSeqNum), this._waitForMediaSourceOpen(r).pipe(Za(() => {
performance.now(), this.msDuration = i
}))
}), Vs(() => {
this.mediaElementStore.waitingForDisco = !1
}))
}
resetMediaSource(e = NaN, t) {
var i;
ne(e) || (e = null !== (i = null === (i = this.mediaQuery.seekTo) || void 0 === i ? void 0 : i.pos) && void 0 !== i ? i : this.mediaQuery.currentTime), ne(t) || (t = null === (i = this.mediaQuery.seekTo) || void 0 === i ? void 0 : i.discoSeqNum), 0 < this.sourceBuffers.length && (this.openMediaSource(this.makeMediaSource()), this.setSeekToWithDiscontinuity(e, t))
}
setExpectedSbCount(e) {
this.mediaElementStore.expectedSbCount = e
}
appendInitSegments(l, d) {
const {
mediaQuery: e,
mediaElementStore: u,
sourceBuffers: c
} = this, h = e["sourceBufferEntities"];
if (!c) throw new Error("appendInitSegments: null sourceBuffers");
if (!h) throw new Error("appendInitSegments: null sourceBufferEntities");
var t = this.appendOrder.map(t => {
if (l[t]) {
const i = c[t],
r = l[t],
n = h[t],
s = r["initSeg"];
if (!n) throw new Error(`appendInitSegments: sb[${Uu[t]}] null currentSbEntity`);
if (!i) throw new Error(`appendInitSegments: sb[${Uu[t]}] null source buffer`);
const a = n.initSegmentInfo,
o = function() {
var {
itemId: e,
mediaOptionId: t,
discoSeqNum: i,
keyTagInfo: r
} = s;
return {
itemId: e,
mediaOptionId: t,
discoSeqNum: i,
keyId: je(null == r ? void 0 : r.keyId)
}
}();
if ((e = o) && a && e.itemId === a.itemId && e.mediaOptionId === a.mediaOptionId && e.discoSeqNum === a.discoSeqNum && e.keyId === a.keyId) return $i(null);
var e = Vu(t);
return i.appendBuffer(s.data, s).pipe(Za(e => {
u.setInitSegmentEntity(t, o)
}), d(i, e, s.mediaOptionId, this.config, this.mediaQuery))
}
}).filter(e => Boolean(e));
return 0 === t.length ? $i(null) : en(t)
}
appendDataSegments(m, g) {
var e = this.appendOrder.map(e => {
const t = m[e],
{
mediaQuery: i,
sourceBuffers: r
} = this,
n = i["sourceBufferEntities"];
if (!r) throw new Error("appendDataSegments: null sourceBuffers");
if (!n) throw new Error("appendDataSegments: null sourceBufferEntities");
if (!t) return null;
const s = r[e],
a = m[e],
o = n[e];
if (!o) throw new Error("appendDataSegments: null currentSbEntity");
const l = o.initSegmentInfo,
d = a["dataSeg"];
if (!l) throw new Error(`appendDataSegments: sb[${Uu[e]}] null currentInitSegmentInfo`);
if (!o) throw new Error(`appendDataSegments: sb[${Uu[e]}] null currentSbEntity`);
if (!s) throw new Error(`appendDataSegments: sb[${Uu[e]}] null source buffer`);
const u = s.timestampOffset,
c = {
startPTS: S(d.startPts) + u,
endPTS: S(d.endPts) + u,
firstKeyframePts: d.firstKeyframePts ? S(d.firstKeyframePts) + u : void 0,
bytes: d.data2 ? d.data1.byteLength + d.data2.byteLength : d.data1.byteLength,
frag: {
itemId: d.itemId,
mediaOptionId: d.mediaOptionId,
mediaSeqNum: d.mediaSeqNum,
discoSeqNum: d.discoSeqNum,
keyTagInfo: d.keyTagInfo,
isLastFragment: d.isLastFragment,
iframe: d.iframe,
framesWithoutIDR: d.framesWithoutIDR,
dropped: d.dropped
}
},
h = Vu(e);
let p = Wu;
var f = t.dataSeg.flushBeforeAppend;
return f && f.start !== f.end && (p = this.flushData(e, f.start, f.end)), p.pipe(La(() => $i(d.data1, d.data2).pipe(Kp()).pipe(Wn(e => s.appendBuffer(e, c).pipe(g(s, h, d.mediaOptionId, this.config, this.mediaQuery))))), Za(() => {
i.getBufferedRangeByType(e)
}))
}).filter(e => Boolean(e));
return 0 === e.length ? $i(null) : en(e)
}
setStoreSbTimeoffsets(s) {
const {
mediaElementStore: a,
sourceBuffers: e
} = this;
e.forEach((t, i) => {
if (t && s[i]) {
var {
offsetTimestamp: r,
dataSeg: n
} = s[i], n = S(n.startPts);
let e = -1 * S(r);
t.updateMp3Timestamps && .1 < Math.abs(t.timestampOffset - n) && (e = n + e), t.timestampOffset !== e && (t.timestampOffset = e, a.setTimestampOffset(i, t.timestampOffset))
}
})
}
adjustJaggedStart(e) {
const {
mediaQuery: t,
logger: n
} = this, {
sourceBufferEntities: i,
currentTime: r,
seekTo: s
} = t, a = e.reduce((e, t) => null != t && t.dataSeg.endPts ? Math.min(b(t.dataSeg.endPts, t.offsetTimestamp), e) : e, Number.POSITIVE_INFINITY);
if (!i) throw new Error("appendSourceBufferData null currentSbEntity");
const o = (null == s ? void 0 : s.pos) || r;
let l = NaN;
i.forEach((e, t) => {
if (e) {
e = Yp.getBufferedInfo(e.bufferedRanges, o, 0);
if (0 === e.len) {
const i = e["nextStart"],
r = ne(this.config.jaggedSeekTolerance) ? this.config.jaggedSeekTolerance : 0;
n.warn(`sb[${Uu[t]}] jagged start: ${i} appendEndTime=${a} current=${l} tolerance=${r}`), ne(i) && (!ne(l) || i - l > r) && (l = i)
}
}
}), ne(l) && a > l && (n.warn(`[seek] jagged start, adjusting currentTime:${r.toFixed(3)} seekTo=${null===(e=null==s?void 0:s.pos)||void 0===e?void 0:e.toFixed(3)}->${l} appendEndTime=${a}`), this.seekTo = l)
}
addCues(e, t) {
const i = this.mediaElement.textTracks[e];
i && t.forEach(e => {
i.addCue(e)
})
}
_flushInternal(e, t, i) {
return Zr(() => e.remove(t, i)).pipe(Za(() => {}))
}
flushAll(i, r, n = !1) {
return 0 === this.sourceBuffers.length ? Wu : en(this.sourceBuffers.map((e, t) => e ? this.flushData(t, i, r, n) : Wu)).pipe(Zs(void 0))
}
flushData(o, l, d, u = !1) {
const {
mediaQuery: t,
logger: c
} = this;
return Gu(t.updating$, e => !1 === e).pipe(La(() => {
var e = t["sourceBufferEntities"],
e = e[o];
null != e && e.updating && this.logger.warn(`trying to flush while updating ${o}`);
const r = this.sourceBuffers[o];
if (!r) return Wu;
let n, s, a = Wu;
e = -1 === navigator.userAgent.toLowerCase().indexOf("firefox");
if (this.flushing = !0, e) return this._flushInternal(r, l, d);
for (let i = 0; i < r.buffered.length; i++) {
let e, t;
n = r.buffered.start(i), s = r.buffered.end(i), t = d === 1 / 0 ? (e = l, d) : (e = Math.max(n, l), Math.min(s, d)), Math.min(t, s) > e && (u || .5 < Math.min(t, s) - e) ? a = a.pipe($a(this._flushInternal(r, e, t))) : c.warn(`ignoring sb[${Uu[o]}] flush ${e},${t}`)
}
return a
}), Vs(() => {
this.flushing = !1
}))
}
static convertInitSegToCompatInfo(e) {
return {
mimeType: e.mimeType,
audioCodec: e.initParsedData.audioCodec,
videoCodec: e.initParsedData.videoCodec,
startPTSSec: void 0,
endPTSSec: void 0,
discoSeqNum: e.discoSeqNum,
mediaOptionId: e.mediaOptionId
}
}
static combineAppendDataInfoWithCompatInfo(e, t, i, r = 0) {
const n = [...t];
e.forEach((e, t) => null != e && e.initSeg ? n[t] = vf.convertInitSegToCompatInfo(e.initSeg) : null);
t = n[yu.Variant].videoCodec, e = Hp(t);
if (i && i.has(e)) {
const s = i.get(e);
n[yu.Variant].mimeType = n[yu.Variant].mimeType.replace(t, s), n[yu.Variant].videoCodec = s
}
return n
}
convertSourceBufferEntitiesToCompatInfo(e) {
const t = e.sourceBufferEntities,
i = [null, null];
return t.forEach((e, t) => {
e && (i[t] = {
mimeType: e.mimeType,
audioCodec: e.audioCodec,
videoCodec: e.videoCodec,
startPTSSec: void 0,
endPTSSec: void 0,
discoSeqNum: void 0,
mediaOptionId: null === (e = e.initSegmentInfo) || void 0 === e ? void 0 : e.mediaOptionId
})
}), i
}
appendData(e, i, r) {
const {
mediaQuery: t,
logger: n
} = this, o = this.convertSourceBufferEntitiesToCompatInfo(t);
return e.every(e => null == e) ? $i([]) : this.resetMediaSourceIfNeeded(e).pipe(La(e => e ? t.updating$.pipe(ln(e => !1 === e), Ds(1), Zs(e)) : $i(null)), La(t => {
if (!t) return $i([]);
let s = NaN,
a = NaN;
if (this.needSourceBuffers) {
s = performance.now();
const i = vf.combineAppendDataInfoWithCompatInfo(t, o, r, n);
this.createSourceBuffers(i), a = performance.now(), this.clearFlush(t)
}
return t.forEach(e => {
e = null == e ? void 0 : e.dataSeg;
null != e && e.cues && ne(null == e ? void 0 : e.texttrackIdx) && this.addCues(e.texttrackIdx, e.cues)
}), this.setStoreSbTimeoffsets(t), Jr(Zr(() => this.appendInitSegments(t, i)), Zr(() => this.appendDataSegments(t, i))).pipe(function(r, i) {
return 2 <= arguments.length ? function(e) {
return Bt(sa(r, i), Ws(1), (void 0 === (t = i) && (t = null), function(e) {
return e.lift(new is(t))
}))(e);
var t
} : function(e) {
return Bt(sa(function(e, t, i) {
return r(e, t)
}), Ws(1))(e)
}
}((e, t) => (e.push(t), e), new Array), hr(([i, r]) => {
const n = [null, null];
return [yu.Variant, yu.AltAudio].forEach(e => {
var t;
null != (null == i ? void 0 : i[e]) && (t = {
fragmentType: Vu(e),
bufferCreationStart: s,
bufferCreationEnd: a,
startInitAppend: i[e].startAppend,
endInitAppend: i[e].endAppend,
initBytesAppend: i[e].bytesAppend,
startDataAppend: r[e].startAppend,
endDataAppend: r[e].endAppend,
dataBytesAppend: r[e].bytesAppend
}, n[e] = t)
}), n
}), Za(e => {
this.adjustJaggedStart(t)
}))
}), Ds(1))
}
endStream() {
try {
this.mediaSourceAdapter.endOfStream()
} catch (e) {
this.logger.warn(`endOfStream failed: ${e.message}`)
}
}
setMediaKeys(e) {
return this.teardownWG$.wrap(this.mediaKeysMutex.lock(() => Fr(this.mediaElement.setMediaKeys(e))).pipe(Za(() => {}), va(e => e.pipe(jr((e, t) => {
if (t < 3) return bn(100 * t);
throw e
})))))
}
clearMediaKeys() {
return Zr(() => {
if (!this.mediaElement) return Wu;
const e = -1 < navigator.userAgent.toLowerCase().indexOf("chrome"),
t = this.mediaElement.src;
return e && (this.mediaElement.src = ""), this.setMediaKeys(null).pipe(Za(() => this.mediaElement.src = t))
})
}
set postFlushSeek(e) {
this.mediaElementStore.postFlushSeek = e
}
schedulePostFlushSeek(e) {
al(() => {
this.mediaQuery.seekTo && (this.seekTo = null), this.postFlushSeek = e
})
}
set seekTo(e) {
this.mediaElementStore.setSeekToPos(e, !1)
}
setSeekToWithDiscontinuity(e, t) {
this.mediaElementStore.setSeekToPos(e, !1, t)
}
nudgeSeek(e, t) {
al(() => {
this.mediaElementStore.setSeekToPos(e, !1), this.mediaElementStore.setNudgeInfo({
nudgeTarget: e,
nudgeCount: t
})
})
}
set desiredRate(e) {
this.mediaElementStore.desiredRate = e
}
toggleTrickPlaybackMode(e) {
if (this.config.overridePlaybackRate) {
const t = e ? 2 : 1;
try {
this.mediaElement.playbackRate = t
} catch (e) {
this.logger.error({
name: "iframes"
}, `Exception when setting playbackRate=${t}: ${e.message}`)
}
}
const t = this.muteValueOnTrickPlaybackToggle;
e && void 0 === t ? (this.muteValueOnTrickPlaybackToggle = this.mediaElement.muted, this.mediaElement.muted = e) : e || void 0 === t || (this.mediaElement.muted = t, this.muteValueOnTrickPlaybackToggle = void 0)
}
play() {
this.mediaFunctions.play()
}
pause() {
this.mediaFunctions.pause()
}
get expectPlayEvent() {
return this.mediaFunctions.expectPlayEvent
}
set expectPlayEvent(e) {
this.mediaFunctions.expectPlayEvent = e
}
get expectPauseEvent() {
return this.mediaFunctions.expectPauseEvent
}
set expectPauseEvent(e) {
this.mediaFunctions.expectPauseEvent = e
}
set textTracksCreated(e) {
const t = this["mediaElementStore"];
t.textTracksCreated = e
}
get msDuration() {
return this._mediaQuery.msDuration
}
set msDuration(e) {
try {
const t = this["mediaElementStore"],
i = this.mediaSource$.value;
i.duration !== e && (i.duration = e, t.msDuration = e)
} catch (e) {
this.logger.warn(`Error setting duration ${e.message}`)
}
}
set haveEnough(e) {
this.mediaElementStore.haveEnough = e
}
set flushing(e) {
this.mediaElementStore.flushing = e
}
set bufferMonitorTargetDuration(e) {
this.mediaElementStore.bufferMonitorTargetDuration = e
}
get textTracks() {
return this.mediaElement.textTracks
}
get id3TextTrack() {
return this.id3Track
}
addTextTrack(e, t, i) {
return this.mediaElement.addTextTrack(e, t, i)
}
dispatchEvent(e) {
return this.mediaElement.dispatchEvent(e)
}
get offsetWidth() {
return this.mediaElement.offsetWidth
}
get offsetHeight() {
return this.mediaElement.offsetHeight
}
getliveSeekableWindow() {
return this.liveSeekableWindow
}
archiveParsedSubtitleFragmentRecord(e, t, i) {
return this.mediaElementStore.archiveParsedSubtitleFragmentRecord(e, t, i)
}
updateLiveSeekableRange(e) {
var t = e.fragments,
e = t.length;
if (1 < e) {
const i = Math.max(t[0].start, 0),
r = t[e - 1].start + t[e - 1].duration;
this.mediaSource$.value.updateLiveSeekableRange(i, r), this.liveSeekableWindow.start = i, this.liveSeekableWindow.end = r
}
}
clearLiveSeekableRange() {
this.mediaSource$.value.clearLiveSeekableRange(), this.liveSeekableWindow.start = NaN, this.liveSeekableWindow.end = NaN
}
}
const Sf = (t, r, n, s, a, o, l, i) => {
if (!t) return Ii;
const e = Oc(t);
return an(e.event("durationchange").pipe(hr(e => kc(t, "durationchange", e)), Za(e => {
e = e.currentTarget;
r.mediaElementDuration = e.duration
})), e.event("seeking").pipe(ao(o.seekEventThrottleMs), hr(e => kc(t, "seeking", e)), Za(e => {
var t = e.currentTarget,
e = t.currentTime;
if (t.readyState >= t.HAVE_METADATA) {
const i = n.seekTo;
!i || !i.fromEvent && 1e-5 < Math.abs(i.pos - e) ? a.inGaplessMode ? function(e, t, i, r, n) {
let s = !1;
e < t.playingItem.itemStartOffset && (n.warn(`[Gapless] Seeking past track boundary oldSeek=${e}, adjustedSeek=${t.playingItem.itemStartOffset}`), e = t.playingItem.itemStartOffset, s = !0), t.isPreloading && (e > t.loadingItem.itemStartOffset && (n.warn(`[Gapless] Seeking past track boundary oldSeek=${e}, adjustedSeek=${t.loadingItem.itemStartOffset}`), e = t.loadingItem.itemStartOffset, s = !0), t.dequeueSource("SeekToUnbufferedTimeRanges")), s ? i.resetMediaSource(e) : r.setSeekToPos(e, !0)
}(e, a, s, r, l) : s && s.hasOwnProperty("liveSeekableWindow") && ne(s.getliveSeekableWindow().start) && ne(s.getliveSeekableWindow().end) && (e < s.getliveSeekableWindow().start || e > s.getliveSeekableWindow().end) ? function(e, t, i, r, n, s) {
let a = e;
if (e < t) a = t;
else if (i < e) {
let e = r.defaultTargetDuration;
ne(r.liveSyncDuration) ? e = r.liveSyncDuration : ne(r.liveSyncDurationCount) && (e = r.liveSyncDurationCount * r.defaultTargetDuration), a = Math.max(0, i - e)
}
s.warn(`[live] liveAdjustedSeek seekTo:${se(e,3)}, adjustedSeek:${se(a,3)}, liveWindowStart:${se(t,3)}, liveWindowEnd:${se(i,3)}`), n.setSeekToPos(a, !0)
}(e, s.getliveSeekableWindow().start, s.getliveSeekableWindow().end, o, r, l) : r.setSeekToPos(e, !0) : r.seeking = !0
}
})), e.event("seeked").pipe(hr(e => kc(t, "seeked", e)), Za(() => {
r.setSeekToPos(null, !0)
})), e.event("play").pipe(hr(e => kc(t, "play", e)), bo(n.desiredRate$), hr(([e]) => {
var t = e.currentTarget;
r.paused = t.paused;
var i = s.expectPlayEvent,
t = t.controls || o.nativeControlsEnabled;
return !i && t && (s.checkForReplay(), r.desiredRate = 1), s.expectPlayEvent = !1, e
})), e.event("playing").pipe(hr(e => kc(t, "playing", e)), Za(e => {
e = e.currentTarget;
r.paused = e.paused, r.gotPlayingEvent()
})), e.event("loadstart").pipe(hr(e => kc(t, "loadstart", e)), Za(() => {
r.gotLoadStartEvent()
})), e.event("pause").pipe(hr(e => kc(t, "pause", e)), Za(e => {
var t = e.currentTarget;
r.paused = t.paused;
e = s.expectPauseEvent, t = t.controls || o.nativeControlsEnabled;
!e && t && (r.desiredRate = 0), s.expectPauseEvent = !1
})), e.event("loadedmetadata").pipe(hr(e => kc(t, "loadedmetadata", e))), e.event("loadeddata").pipe(hr(e => kc(t, "loadeddata", e))), e.event("canplay").pipe(hr(e => kc(t, "canplay", e))), e.event("canplaythrough").pipe(hr(e => kc(t, "canplaythrough", e))), e.event("waiting").pipe(hr(e => kc(t, "waiting", e))), e.event("emptied").pipe(hr(e => kc(t, "emptied", e))), e.event("error").pipe(hr(e => kc(t, "error", e)), Wn(e => Vi(t.error))), e.event("ended").pipe(hr(e => kc(t, "ended", e)))).pipe(bo(n.bufferedRangeTuple$), ll(([e]) => {
var t = e.currentTarget,
e = t.readyState;
r.readyState = e, r.ended = t.ended
}), Vn(e => (e instanceof MediaError ? (l.warn(`mediaElementError, code: ${e.code}, message: ${e.message}`), null == i || i.handleMediaElementError(e)) : l.error(`media event error: ${e.message}`), Ii)), $a(on), Vn(e => e instanceof MediaError ? (l.warn(`mediaElementError, code: ${e.code}, message: ${e.message}`), Vi(e)) : (l.error(`media event error: ${e.message}`), Ii)))
},
bf = new class extends fl {
constructor() {
super({}, {
name: "media-element-store",
producerFn: su
}), this._activeId = ""
}
get activeId() {
return this._activeId
}
startMediaSession(i, r, n, s) {
return Do("playback.session.start"), this._activeId = `media session: ${(new Date).toISOString()}`, al(() => {
var e = s,
t = Math.max(e, r - e),
t = {
id: this.activeId,
desiredRate: !i.autoplay && i.paused ? 0 : 1,
paused: i.paused,
gotPlaying: !1,
gotLoadStart: !1,
firstPlayTime: void 0,
seeking: i.seeking,
flushing: !1,
readyState: i.readyState,
ended: i.ended,
bufferedRanges: [],
haveEnough: !1,
mediaSourceEntity: null,
expectedSbCount: NaN,
bufferMonitorInfo: {
waterLevelType: null,
almostDryWaterLevelSeconds: n,
lowWaterLevelSeconds: e,
highWaterLevelSeconds: t,
maxBufferSeconds: r
},
mediaOptionParsedSubtitleRecord: [],
textTracksCreated: !1,
waitingForDisco: !1
};
this.add(t), this.setActive(this.activeId)
}), this.logger = Qe().child({
name: "UpdateBufferedSegments"
}), this.activeId
}
setMediaSourceEntity(t, i) {
Do("playback.set.msObjectUrl"), this.updateActive(e => {
e.mediaSourceEntity = null != t && null != i ? {
objectUrl: t,
readyState: i,
duration: NaN,
sourceBufferEntities: [null, null]
} : null, e.bufferedRanges = [], e.haveEnough = !1, e.readyState = 0, e.bufferMonitorInfo.waterLevelType = null
})
}
set mediaElementDuration(t) {
Do("playback.set.mediaElementDuration"), this.updateActive(e => {
e && (e.mediaElementDuration = t)
})
}
set msReadyState(t) {
Do("playback.set.msReadyState"), this.updateActive(({
mediaSourceEntity: e
}) => {
e && (e.readyState = t)
})
}
set readyState(t) {
Do(`playback.set.readyState ${t}`), this.updateActive(e => {
e.readyState = t
})
}
set ended(t) {
Do(`playback.set.ended ${t}`), this.updateActive(e => {
e.ended = t
})
}
set msDuration(t) {
Do("playback.set.msDuration"), this.updateActive(e => {
e.mediaSourceEntity.duration = t
})
}
set textTracksCreated(t) {
Do("playback.set.textTracksCreated ${created}"), this.updateActive(e => {
e.textTracksCreated = t
})
}
set expectedSbCount(t) {
Do("playback.set.expectedSbCount"), this.updateActive(e => {
e.expectedSbCount = t
})
}
set postFlushSeek(e) {
this.updateActive({
postFlushSeek: e
})
}
setSeekToPos(t, i, r) {
Do(`playback.set.seekToPos: ${null==t?void 0:t.toFixed(3)} cc: ${r}`), this.updateActive(e => {
ne(t) ? (e.seekTo = {
pos: t,
fromEvent: i,
discoSeqNum: r
}, e.gotPlaying = !1, e.haveEnough = !1) : (e.seekTo = null, e.postFlushSeek = void 0), i && (e.seeking = ne(t))
})
}
set seeking(t) {
Do(`playback.set.seeking: ${t}`), this.updateActive(e => {
e.seeking = t
})
}
set paused(t) {
Do(`playback.set.paused: ${t}`), this.updateActive(e => {
(e.paused = t) && (e.gotPlaying = !1)
})
}
gotPlayingEvent() {
Do("playback.set.playing"), this.updateActive(e => {
e.paused || (e.gotPlaying = !0, e.firstPlayTime = e.firstPlayTime || performance.now())
})
}
gotLoadStartEvent() {
Do("playback.set.loadstart"), this.updateActive(e => {
e.gotLoadStart = !0
})
}
set desiredRate(t) {
Do(`playback.set.desiredRate: ${t}`), this.updateActive(e => {
e.desiredRate = t
})
}
set haveEnough(t) {
Do(`playback.set.haveEnough: ${t}`), this.updateActive(e => {
e.haveEnough = t
})
}
set flushing(e) {
Do(`playback.set.flushing: ${e}`), this.updateActive({
flushing: e
})
}
set waitingForDisco(t) {
Do(`playback.set.waitingForDisco: ${t}`), this.updateActive(e => {
e && (e.waitingForDisco = t)
})
}
setSourceBufferUpdating(i) {
Do(`playback.set.sourcebuffers[${Uu[i]}].updating`), this.updateActive(({
mediaSourceEntity: e
}) => {
const t = null === (e = null == e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[i];
t && (t.updating = !0, t.error = void 0)
})
}
setTimestampOffset(i, r) {
Do(`playback.set.sourcebuffers[${Uu[i]}].timestampOffset`), this.updateActive(({
mediaSourceEntity: e
}) => {
const t = null === (e = null == e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[i];
t && (t.timestampOffset = r)
})
}
setBufferedRangesUpdated(a, o, l, d, u) {
Do(`playback.set.sourcebuffers[${Uu[a]}].bufferupdated`), this.updateActive(e => {
var t, i, r;
const n = null == e ? void 0 : e.mediaSourceEntity,
s = null === (r = null == n ? void 0 : n.sourceBufferEntities) || void 0 === r ? void 0 : r[a];
if (s) {
const a = null == n ? void 0 : n.duration;
s.updating = !1, s.bufferedRanges = [...o], t = s, i = t.inFlight, r = t.bufferedSegments, i && ne(i.startPTS) && ne(i.endPTS) && function(t, i) {
let r = !1;
for (let e = t.length - 1; - 1 < e; e--) {
const s = t[e],
a = Math.max(i.startPTS, s.startPTS),
o = Math.min(i.endPTS, s.endPTS);
var n;
o <= a || ((n = (1 - (o - a) / (s.endPTS - s.startPTS)) * s.bytes) <= 0 ? t.splice(e, 1) : (s.bytes = n, s.startPTS < i.startPTS ? s.endPTS = a : (s.startPTS = o, r || (t.splice(e, 0, i), r = !0))))
}
r || t.push(i)
}(r, i), t.inFlight = null,
function(e, t, i, r, n) {
const {
maxBufferHole: s,
bufferedSegmentEjectionToleranceMs: a
} = r, o = e.bufferedSegments, l = e.bufferedRanges;
let d, u = 0,
c = !1;
if (l.length)
for (let e = o.length - 1; - 1 < e; e--) {
const t = o[e],
r = !t.frag.iframe;
r && t.frag.isLastFragment && (d = t.frag);
var h = t.endPTS - t.startPTS;
if (h <= 0) o.splice(e, 1), null == n || n.warn(`Ejecting segment from bufferedSegments due to segmentDuration <= 0 > segment=${ae(t)}`), c = t.frag === d;
else {
var p = Bp(l, t);
if (p) {
var f = Math.max(p.start, t.startPTS),
p = Math.min(p.end, t.endPTS),
f = p - f;
if (u += t.bytes * f / h, r)
if (f < Math.min(h, s)) o.splice(e, 1), null == n || n.warn(`Ejecting segment from bufferedSegments due to tiny overlaps > segment=${ae(t)}, bufferedRanges=${ae(l)}`), c = t.frag === d;
else {
const r = t.appendedDuration,
u = (r || 0) - f,
m = Math.min(.001 * a, h);
r ? !(u > m && f != h) || t.frag.isLastFragment && p === i || (o.splice(e, 1), null == n || n.warn(`Ejecting segment from bufferedSegments due to change in current overlap > segment=${ae(t)}, delta=${u}, bufferedRanges=${ae(l)}`), c = t.frag === d) : t.appendedDuration = f
}
} else null == n || n.warn(`Ejecting segment from bufferedSegments due to no overlap > segment=${ae(t)}, bufferedRanges=${ae(l)}`), o.splice(e, 1), c = t.frag === d
}
} else o.length && o.splice(0, o.length);
e.totalDuration = d && !c && 0 < l.length ? l[l.length - 1].end : 1 / 0, e.gotQuotaExceeded = e.gotQuotaExceeded || t, e.totalBytes = u, e.maxTotalBytes = Math.max(e.totalBytes, e.maxTotalBytes)
}(s, d, a, u, this.logger)
}
e.bufferedRanges = [...l]
})
}
setSourceBufferEntity(n, s) {
Do(`playback.set.sourcebuffers[${Uu[n]}].setSourceBufferEntity`), this.updateActive(({
mediaSourceEntity: e
}) => {
var t, i, r;
e && ({
mimeType: t,
audioCodec: i,
videoCodec: r
} = s, e.sourceBufferEntities[n] = {
mimeType: t,
audioCodec: i,
videoCodec: r,
updating: !1,
bufferedRanges: [],
timestampOffset: 0,
inFlight: null,
bufferedSegments: [],
totalBytes: 0,
maxTotalBytes: 0,
gotQuotaExceeded: !1,
totalDuration: 1 / 0
})
})
}
setInflightSegment(i, r) {
Do(`playback.set.sourcebuffers[${Uu[i]}].setInflightSegment`), this.updateActive(({
mediaSourceEntity: e
}) => {
const t = null === (e = null == e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[i];
t && (t.inFlight = r)
})
}
setInitSegmentEntity(i, r) {
Do(`playback.set.sourcebuffers[${Uu[i]}].setInitSegmentEntity`), this.updateActive(({
mediaSourceEntity: e
}) => {
const t = null === (e = null == e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[i];
t && (t.initSegmentInfo = r)
})
}
setSourceBufferError(i, r) {
Do(`playback.set.sourcebuffers[${i}].error: ${r}`), this.updateActive(({
mediaSourceEntity: e
}) => {
const t = null === (e = null == e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[i];
t && (t.inFlight = null, t.updating = !1, t.error = r)
})
}
setStallInfo(t) {
Do(`playback.set.stallInfo stalled=${null!=t}`), this.updateActive(e => {
e.stallInfo = t
})
}
setNudgeInfo(t) {
Do(`playback.set.nudgeInfo ${ae(t)}`), this.updateActive(e => {
e.nudgeInfo = t
})
}
updateWaterLevels(t, i) {
Do("playback.set.updateWaterLevels"), this.updateActive(e => {
e.bufferMonitorInfo.waterLevelType = {
combined: t,
sbTuple: [...i]
}
})
}
set bufferMonitorTargetDuration(i) {
Do(`playback.set.targetDuration: ${i}`), this.updateActive(e => {
if (ne(i) && 0 < i) {
const t = e.bufferMonitorInfo;
t.lowWaterLevelSeconds = Math.min(i, t.maxBufferSeconds), t.highWaterLevelSeconds = Math.max(t.lowWaterLevelSeconds, t.maxBufferSeconds - i)
}
})
}
archiveParsedSubtitleFragmentRecord(i, r, n) {
Do(`playback.cues.set persistentId ${i} mediaSeqNum ${r}: parsed ${n.count} time-range ${n.startTime}:${n.endTime}`), this.updateActive(e => {
let t = e.mediaOptionParsedSubtitleRecord[i];
t || (t = {}, e.mediaOptionParsedSubtitleRecord[i] = t), t[r] = n
})
}
};
class Tf extends bi {
constructor(e) {
super(e), this.store = e, this.displaySupportsHdr$ = this.select("supportsHdr"), this.platformInfo$ = this.select("platformInfo"), this.viewportInfo$ = this.select("viewportInfo")
}
get platformInfo() {
return this.getValue().platformInfo
}
get displaySupportsHdr() {
return this.getValue().supportsHdr
}
get viewportInfo() {
return this.getValue().viewportInfo
}
}
class Ef {
constructor(e) {
this.store = e
}
getQuery() {
return new Tf(this.store)
}
updateSupportsHdr(t) {
this.store.update(e => {
e.supportsHdr = t
})
}
updatePlatformInfo(e) {
this.store.update({
platformInfo: e
})
}
updateViewportInfo(t) {
this.store.update(e => {
e.viewportInfo = t
})
}
}
const If = new class extends dl {
constructor() {
super({
supportsHdr: !0
}, {
name: "platform",
producerFn: su
})
}
};
let wf = null;
function Af() {
return wf = wf || new Ef(If), wf
}
class Of extends $t {
constructor(e, t) {
super(e => {
null == t || t.add(), e.add(this._handler$.pipe(jr(([e, t, i]) => e(...t).pipe(Za({
next(e) {
i(e, null)
},
error(e) {
i(null, e)
}
})))).subscribe())
}), this._vanillaRPC = e, this.teardownWG$ = t, this._handler$ = new Xt
}
register(e, i) {
return this._vanillaRPC.register(e, (...t) => e => {
this._handler$.next([i, t, e])
})
}
invoke(e, t, r) {
return new $t(i => {
this._vanillaRPC.invoke(e, t, r)((e, t) => {
null != t ? i.error(t) : (i.next(e), i.complete())
})
})
}
}
class kf extends Of {
constructor(e) {
super(e)
}
decrypt(e, t, i, r, n) {
return this.invoke("decrypt", [e, t, i, r, n], [e, t, r])
}
}
class Cf extends Of {
constructor(e) {
super(e), this.rpcService = e, this.sessions = {}, this._onEvent = (e, t, i) => () => {
null != this.sessions[e] && this.sessions[e].observer.trigger(t, i)
}, this.rpcService.register("demuxer.event", this._onEvent)
}
init(e, t, i) {
return [{
maxSeekHole: r,
maxBufferHole: n,
audioPrimingDelay: s,
stretchShortVideoTrack: a,
forceKeyFrameOnDiscontinuity: o
}] = [t], this.invoke("demuxer.init", [e, t = {
maxSeekHole: r,
maxBufferHole: n,
audioPrimingDelay: s,
stretchShortVideoTrack: a,
forceKeyFrameOnDiscontinuity: o
}, i], []).pipe(hr(e => {
var t = new Df(this, e);
return this.sessions[e] = t
}));
var r, n, s, a, o
}
}
class Df {
constructor(e, t) {
this.rpc = e, this.demuxSessionID = t, this.observer = new a
}
push(e, t, i, r, n, s, a, o, l, d, u, c, h) {
return this.rpc.invoke("demuxer.push", [this.demuxSessionID, e, t, i, r, n, s, a, o, l, d, u, c], null != h ? h : [e])
}
pushWithoutTransfer(e, t, i, r, n, s, a, o, l, d, u, c) {
return this.push(e, t, i, r, n, s, a, o, l, d, u, c, [])
}
destroy() {
this.observer.removeAllListeners(), this.rpc.invoke("demuxer.destroy", [this.demuxSessionID], []).subscribe()
}
}
class Mf {
constructor() {
this.handlers = {}
}
register(e, t) {
if (null != this.handlers[e]) return !1;
this.handlers[e] = t
}
unregister(e) {
if (null != this.handlers[e]) return !1;
delete this.handlers[e]
}
invoke(e, i) {
return (t = Mf._fallbackCallback) => {
try {
if (null == this.handlers[e]) throw new Error(`command ${e} not found`);
this.handlers[e](...i)(t)
} catch (e) {
t(void 0, e)
}
}
}
teardown(e) {
this.handlers = null, e()
}
}
Mf._fallbackCallback = (e, t) => {
if (null != t) throw t
};
const xf = e => {
e = e.child({
name: "InlineRPCService"
});
var t = new Mf;
return new i(t, e), new ot(t, e), t
};
let Pf;
const Rf = e => {
try {
if (null == Pf) {
const e = new Blob(["var exports = {};var module = { exports: exports };function define(f){f()};define.amd = true;(" + Xy.toString() + ")(true);"], {
type: "text/javascript"
}),
r = URL.createObjectURL(e);
Pf = new Worker(r)
}
var t = new lt(Pf);
return i = t, n = e.child({
name: "WorkerRPCService"
}), i.register("logger.log", (e, i, ...r) => t => {
try {
for (const i of e) n = n.child(i);
"function" == typeof n[i] && n[i](...r), t()
} catch (e) {
t(void 0, e)
}
}), t
} catch (e) {
throw new Error("Failed to create WebWorker")
}
var i, n
},
Lf = (...r) => i => {
for (let t = 0; t < r.length; t++) {
const e = r[t];
try {
return e(i)
} catch (e) {
if (t === r.length - 1) throw e;
i.warn(e)
}
}
},
_f = e => Lf(Rf, xf)(e);
class Nf {}
Nf.PlayEnded = 6101, Nf.Periodic = 6110, Nf.PlayStalled = 6103, Nf.KeySessionComplete = 6104, Nf.PlayLikelyToKeepUp = 6105, Nf.PlayRateChanged = 6106, Nf.PlayError = 6107, Nf.MediaEngineStalled = 6108, Nf.SwitchComplete = 6109, Nf.VariantEnded = 6111, Nf.NwError = 6202;
const Ff = {
avc1: 1,
avc3: 1,
hvc1: {
SDR: 2,
HLG: 10,
PQ: 11
},
hev1: {
SDR: 2,
HLG: 10,
PQ: 11
},
vp09: {
SDR: 3,
HLG: 14,
PQ: 13
},
dvh1: {
PQ: 12
}
};
class Bf {
constructor(e, t) {
this.query = e, this.logger = t
}
setReportingAgent(e) {
this.reportingAgent = e
}
sendPlayEnded(e) {
var t = Nf.PlayEnded;
this.fillAndFire(t, this.query.playEnded(e))
}
sendPlayStalled(e) {
var t = Nf.PlayStalled;
this.fillAndFire(t, this.query.playStalled(e))
}
sendMediaEngineStalled(e) {
var t = Nf.MediaEngineStalled;
this.fillAndFire(t, this.query.mediaEngineStalled(e))
}
sendKeySessionComplete(e) {
var t = Nf.KeySessionComplete;
this.fillAndFire(t, this.query.keySessionComplete(e))
}
sendPlayLikelyToKeepUp(e) {
var t = Nf.PlayLikelyToKeepUp;
this.fillAndFire(t, this.query.playLikelyToKeepUp(e))
}
sendPlayRateChange(e) {
var t = Nf.PlayRateChanged;
this.fillAndFire(t, this.query.playRateChanged(e))
}
sendSwitchComplete(e) {
var t = Nf.SwitchComplete;
this.fillAndFire(t, this.query.switchComplete(e))
}
sendVariantEnded(e) {
var t = Nf.VariantEnded;
this.fillAndFire(t, this.query.variantEnded(e))
}
sendPlayError(e) {
var t = Nf.PlayError;
this.fillAndFire(t, this.query.playError(e))
}
sendNwError(e) {
var t = Nf.NwError;
this.fillAndFire(t, this.query.nwError(e))
}
sendPeriodic(e) {
var t = Nf.Periodic;
this.fillAndFire(t, this.query.periodic(e))
}
fillAndFire(e, t) {
if (e !== Nf.Periodic || t.PlayTimeWC || t.ADT) {
var r = e === Nf.PlayEnded || e === Nf.Periodic ? 1 : 0;
if (this.reportingAgent) {
let i = {};
Object.entries(t).forEach(([e, t]) => {
"object" == typeof(t = ne(t) ? Number(Number(t).toFixed(2)) : t) ? "ServerInfo" === e && Object.entries(t).forEach(([e, t]) => {
i[e] = t
}): i[e] = t
}), i = JSON.parse(JSON.stringify(i));
try {
this.reportingAgent.issueReportingEvent(e, i, r)
} catch (e) {}
}
}
}
}
class Uf extends kl {
constructor(e, t) {
super(e), this.logger = t
}
get activeEntity() {
return this.getActive()
}
entity(e) {
return this.getEntity(e)
}
playEnded(e) {
return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.playEndedRecord
}
periodic(e) {
return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.periodicRecord
}
playStalled(e) {
return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.playStalledRecord
}
mediaEngineStalled(e) {
return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.mediaEngineStalledRecord
}
keySessionComplete(e) {
return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.keySessionCompleteRecord
}
playLikelyToKeepUp(e) {
return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.playLikelyToKeepUpRecord
}
playRateChanged(e) {
return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.playRateChangedRecord
}
switchComplete(e) {
return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.switchCompleteRecord
}
variantEnded(e) {
return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.variantEndedRecord
}
playError(e) {
return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.playErrorRecord
}
nwError(e) {
return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.nwErrorRecord
}
}
class $f extends fl {
constructor(e) {
super({}, {
name: "rtc-store",
idKey: "itemId",
producerFn: su,
resettable: !0
}), this.logger = e
}
createEntity(e) {
e = {
itemId: e,
sessionControlRecord: {
state: "RTC_STATE_INIT",
rate: 0,
oldRate: 0,
eventStartTime: Date.now(),
sessionStartTime: Date.now(),
lastLikelyToKeepUpTime: Date.now(),
lastPeriodicTime: Date.now(),
playLikelyToKeepUpEventCounter: 1,
periodicEventCounter: 1,
activeKeySessions: {},
intervalVariantList: {},
sessionVariantList: {}
},
playEndedRecord: {},
periodicRecord: {},
playStalledRecord: {},
keySessionCompleteRecord: {},
playLikelyToKeepUpRecord: {},
playRateChangedRecord: {},
playErrorRecord: {},
mediaEngineStalledRecord: {},
switchCompleteRecord: {},
variantEndedRecord: {},
nwErrorRecord: {}
};
this.add(e)
}
updateEnded(e) {
this._prepareEventPlayEnded(e)
}
updatePeriodic(e, t) {
this._prepareEventPeriodic(e, {
isFinal: t
})
}
updateBufferStalled(e, t) {
this.update(e, ({
sessionControlRecord: e,
variantEndedRecord: t,
periodicRecord: i,
playEndedRecord: r
}) => {
e.rate = 0, t.StallCount = (t.StallCount || 0) + 1, i.StallCount = (i.StallCount || 0) + 1, r.StallCount = (r.StallCount || 0) + 1
}), this._prepareEventPlayStalled(e, t)
}
updateSegmentKeyLoaded(e, r) {
this.update(e, ({
sessionControlRecord: e
}) => {
const t = {},
i = r.timestamp;
t.keyFormat = "identity", t.keyDeliveryTime = r.adt, t.currentMediaTime = r.currentTime, "RTC_STATE_INIT" === e.state && (t.keyInitTime = i - e.sessionStartTime), e.activeKeySessions[r.keyuri] = t
}), this._prepareEventKeySessionComplete(e, r)
}
updateLicenseResponseProcessed(e, i) {
this.update(e, ({
sessionControlRecord: e
}) => {
const t = e.activeKeySessions[i.keyuri];
t.licenseResponseProcessTime = i.timestamp - t.licenseResponseSubmitTime, e.lastKeyDeliveryTime = t.keyDeliveryTime = i.timestamp - t.licenseChallengeStartTime, t.currentMediaTime = i.currentTime, e.finishedKeyUri = i.keyuri
}), this._prepareEventKeySessionComplete(e, i)
}
updateLicenseChallengeError(e, i) {
this.update(e, ({
sessionControlRecord: e
}) => {
const t = e.activeKeySessions[i.keyuri];
e.lastKeyErrorType = t.keyErrorType = "licenseChallengeError", e.finishedKeyUri = i.keyuri
}), this._prepareEventKeySessionComplete(e, i)
}
updateLicenseResponseError(e, i) {
this.update(e, ({
sessionControlRecord: e
}) => {
const t = e.activeKeySessions[i.keyuri];
e.lastKeyErrorType = t.keyErrorType = "licenseResponseError", e.finishedKeyUri = i.keyuri
}), this._prepareEventKeySessionComplete(e, i)
}
updateKeyAborted(e, t) {
this.update(e, ({
sessionControlRecord: e
}) => {
e.activeKeySessions[t.keyuri].keyErrorType = "keyAborted", e.finishedKeyUri = t.keyuri
}), this._prepareEventKeySessionComplete(e, t)
}
updateCanPlay(e, t) {
this.update(e, ({}) => {}), this._prepareEventPlayLikelyToKeepUp(e, t)
}
updateRateChanged(e, t) {
this.update(e, ({
sessionControlRecord: e
}) => {
e.rate = 100 * t.rate, 0 < t.rate && 0 === e.oldRate && (e.playInfo || (e.playInfo = []), e.playInfo.push({
latency: t.latency
}), e.curLevelUrl || (e.curLevelUrl = t.url))
}), this._prepareEventPlayRateChanged(e, t)
}
updateMediaError(e, r) {
this.update(e, ({
sessionControlRecord: e,
periodicRecord: t,
playEndedRecord: i
}) => {
t.PlayerErrCount = (t.PlayerErrCount || 0) + 1, i.PlayerErrCount = (i.PlayerErrCount || 0) + 1, r.fatal && (e.rate = 0, t.FatalPlayerErrCount = (t.FatalPlayerErrCount || 0) + 1, i.FatalPlayerErrCount = (i.FatalPlayerErrCount || 0) + 1, i.ErrCode = r.details, i.ErrReason = r.code, i.ErrIsFatal = !0, i.ErrDomain = "mediaError")
}), r.fatal ? this._prepareEventPlayError(e, r) : this.update(e, ({
sessionControlRecord: e
}) => {
var t = r.details + "/" + r.code;
e.nonFatalPlayErrList[t] = (e.nonFatalPlayErrList[t] || 0) + 1
})
}
updateMediaElementError(e, t) {
let i;
try {
i = JSON.parse(t.message)
} catch (e) {
this.logger.warn(`message is not JSON, ignoring; ${t.message}`)
}
var r = i ? parseInt(i.ErrReason) : null,
n = i ? parseInt(i.ErrDetail) : null;
this._prepareEventPlayError(e, {
domain: "mediaElementError",
mediaElemCode: t.code,
mediaElemReason: r,
mediaElemDetail: n,
code: null,
details: null,
fatal: null
})
}
updateMediaEngineStalled(e, t) {
this.update(e, ({
sessionControlRecord: e,
variantEndedRecord: t,
periodicRecord: i,
playEndedRecord: r
}) => {
e.rate = 0, t.MediaEngineStallCount = (t.MediaEngineStallCount || 0) + 1, i.MediaEngineStallCount = (i.MediaEngineStallCount || 0) + 1, r.MediaEngineStallCount = (r.MediaEngineStallCount || 0) + 1
}), this._prepareEventMediaEngineStalled(e, t)
}
updateLevelSwitched(e, d) {
this.update(e, ({
sessionControlRecord: e,
switchCompleteRecord: t,
periodicRecord: i,
playEndedRecord: r
}) => {
i.SwCnt = (i.SwCnt || 0) + 1, r.SwCnt = (r.SwCnt || 0) + 1;
var n = Date.now(),
s = e.curLevelUrl,
a = d.url,
i = this._getVariantInfo(s, e),
r = this._getVariantInfo(a, e);
let o, l = !1;
s && (o = r.bandwidth < i.bandwidth ? "Down" : "Up", l = r.iframes), t.BadSw = this._isBadSw(o, e.lastSwitchDir || o, l, e.lastLevelIsIframe || l, n, e.lastSwitchTime || n, d.isSeeking), e.lastSwitchDir = o, e.lastSwitchTime = n, e.lastLevelIsIframe = l, e.curLevelUrl = a, e.variantStartTimeMedia = d.currentTime
}), this._prepareEventSwitchComplete(e, d)
}
updateLevelLoadError(e, o) {
this.update(e, ({
sessionControlRecord: e,
switchCompleteRecord: t,
periodicRecord: i,
playEndedRecord: r
}) => {
var n = Date.now();
let s, a = !1;
if (e.curLevelUrl) {
const t = this._getVariantInfo(e.curLevelUrl, e),
i = this._getVariantInfo(o.url, e);
s = i.bandwidth < t.bandwidth ? "Down" : "Up", a = i.iframes
}
i.SwCnt = (i.SwCnt || 0) + 1, r.SwCnt = (r.SwCnt || 0) + 1, t.BadSw = this._isBadSw(s, e.lastSwitchDir || s, a, e.lastLevelIsIframe || a, n, e.lastSwitchTime || n, o.isSeeking), t.SwFail = !0
}), this._prepareEventSwitchComplete(e, o)
}
updateVariantEnd(e, t) {
this._prepareEventVariantEnded(e, t)
}
updateNwError(e, r) {
this.update(e, ({
sessionControlRecord: e,
periodicRecord: t,
playEndedRecord: i
}) => {
t.NwErrCount = (t.NwErrCount || 0) + 1, i.NwErrCount = (i.NwErrCount || 0) + 1, r.fatal && (e.rate = 0, t.FatalNwErrCount = (t.FatalNwErrCount || 0) + 1, i.FatalNwErrCount = (i.FatalNwErrCount || 0) + 1, i.ErrCode = r.details, i.ErrReason = r.code, i.ErrIsFatal = !0, i.ErrDomain = "networkError")
}), r.fatal ? this._prepareEventNwError(e, r) : this.update(e, ({
sessionControlRecord: e
}) => {
var t = r.details + "/" + r.code;
e.nonFatalNwErrList[t] = (e.nonFatalNwErrList[t] || 0) + 1
})
}
finalize(e, t) {
switch (t) {
case Nf.PlayEnded:
this.update(e, ({
sessionControlRecord: e
}) => {
e.state = "RTC_STATE_STOP", e.oldRate = 0
}), this.update(e, e => {
e.playEndedRecord = {}
});
break;
case Nf.Periodic:
this.update(e, ({
sessionControlRecord: t
}) => {
t.lastPeriodicTime = Date.now(), t.periodicEventCounter += 1, Object.keys(t.intervalVariantList).forEach(e => {
t.intervalVariantList[e].playTime = 0
})
}), this.update(e, e => {
e.periodicRecord = {}
});
break;
case Nf.PlayStalled:
this.update(e, ({
sessionControlRecord: e
}) => {
e.state = "RTC_STATE_STALL", e.oldRate = 0
}), this.update(e, e => {
e.playStalledRecord = {}
});
break;
case Nf.KeySessionComplete:
this.update(e, ({
sessionControlRecord: e
}) => {
delete e.activeKeySessions[e.finishedKeyUri]
}), this.update(e, e => {
e.keySessionCompleteRecord = {}
});
break;
case Nf.PlayLikelyToKeepUp:
this.update(e, ({
sessionControlRecord: e
}) => {
"RTC_STATE_PLAY" !== e.state && (e.state = "RTC_STATE_CANPLAY", e.lastLikelyToKeepUpTime = Date.now(), e.playLikelyToKeepUpEventCounter += 1)
}), this.update(e, e => {
e.playLikelyToKeepUpRecord = {}
});
break;
case Nf.PlayRateChanged:
this.update(e, ({
sessionControlRecord: e,
playEndedRecord: t,
playStalledRecord: i,
mediaEngineStalledRecord: r,
playErrorRecord: n,
nwErrorRecord: s
}) => {
0 !== e.rate ? (e.state = "RTC_STATE_PLAY", delete t.LastStall, delete t.LastMediaEngineStall, delete t.LastPause, delete n.LastPause, delete s.LastPause) : (e.state = "RTC_STATE_PAUSE", delete i.LastResume, delete r.LastResume, delete n.LastResume, delete s.LastResume), e.oldRate = e.rate
}), this.update(e, e => {
e.playRateChangedRecord = {}
});
break;
case Nf.PlayError:
this.update(e, ({
sessionControlRecord: e
}) => {
e.state = "RTC_STATE_PLAYERROR"
}), this.update(e, e => {
e.playErrorRecord = {}
});
break;
case Nf.MediaEngineStalled:
this.update(e, ({
sessionControlRecord: e
}) => {
e.state = "RTC_STATE_MEDIAENGINESTALL", e.oldRate = 0
}), this.update(e, e => {
e.mediaEngineStalledRecord = {}
});
break;
case Nf.SwitchComplete:
this.update(e, e => {
e.switchCompleteRecord = {}, e.sessionControlRecord.prevLevelUrl = e.sessionControlRecord.curLevelUrl
});
break;
case Nf.VariantEnded:
this.update(e, ({
sessionControlRecord: e
}) => {
e.decodedFramesForVariant = 0, e.decodedFramesForVariantSampleCount = 0
}), this.update(e, e => {
e.variantEndedRecord = {}
});
break;
case Nf.NwError:
this.update(e, ({
sessionControlRecord: e
}) => {
e.state = "RTC_STATE_NWERROR"
}), this.update(e, e => {
e.nwErrorRecord = {}
})
}
this.update(e, ({
sessionControlRecord: e
}) => {
e.eventStartTime = Date.now()
})
}
updatePlaybackInfo(e, s) {
this.update(e, ({
sessionControlRecord: e,
periodicRecord: t,
playEndedRecord: i
}) => {
s.droppedVideoFrames < e.droppedVideoFrames && (e.droppedVideoFrames = 0), s.decodedFrameCount < e.decodedFrameCount && (e.decodedFrameCount = 0);
var r = s.droppedVideoFrames - (e.droppedVideoFrames || 0),
n = s.decodedFrameCount - (e.decodedFrameCount || 0);
e.droppedVideoFrames = s.droppedVideoFrames, e.decodedFrameCount = s.decodedFrameCount, e.decodedFramesForVariant += n, e.decodedFramesForVariantSampleCount += 1, r && (3 <= r ? (t.GroupViFrDr = (t.GroupViFrDr || 0) + r, t.GroupViFrDrEvtCount = (t.GroupViFrDrEvtCount || 0) + 1, i.GroupViFrDr = (i.GroupViFrDr || 0) + r, i.GroupViFrDrEvtCount = (i.GroupViFrDrEvtCount || 0) + 1) : (t.SparseViFrDr = (t.SparseViFrDr || 0) + r, t.SparseViFrDrEvtCount = (t.SparseViFrDrEvtCount || 0) + 1, i.SparseViFrDr = (i.SparseViFrDr || 0) + r, i.SparseViFrDrEvtCount = (i.SparseViFrDrEvtCount || 0) + 1))
})
}
updateBufferAppended(e, t) {
this.update(e, ({
sessionControlRecord: e
}) => {
e.bufferAppendInfo || (e.bufferAppendInfo = []), e.bufferAppendInfo.push(t)
})
}
updateSeeked(e, t) {
this.update(e, ({
sessionControlRecord: e
}) => {
e.seekInfo || (e.seekInfo = []), e.seekInfo.push(t)
})
}
updateManifestParsed(e, r) {
this.update(e, ({
sessionControlRecord: e,
periodicRecord: t,
playEndedRecord: i
}) => {
t.MasterPlaylistADT = (t.MasterPlaylistADT || 0) + r.adt, i.MasterPlaylistADT = (i.MasterPlaylistADT || 0) + r.adt;
t = this._computeVariantInfo(r.levels);
i.IsAudioOnly = r.isAudioOnly, i.IsGapless = r.isGapless, i.IsFirstItem = r.isFirstItem, i.ItemID = r.itemID, i.MaxVideoQltyIndex = t.maxVideoQltyIndex, i.MaxReWd = t.maxWidth, i.MaxReHt = t.maxHeight, e.manifestData = {
variantList: t.variantList,
varListString: t.varListString
}
})
}
updateFragLoaded(e, r) {
this.update(e, ({
sessionControlRecord: e,
periodicRecord: t,
playEndedRecord: i
}) => {
if (t.MediaRequestsSent = (t.MediaRequestsSent || 0) + 1, i.MediaRequestsSent = (i.MediaRequestsSent || 0) + 1, r.cdnServer) {
const e = r.cdnServer.toLowerCase();
"aapl" !== e && "akam" !== e && "llnw" !== e || (i.LastMediaCDNServer = e)
}
r.serverInfo && (i.ServerInfo = r.serverInfo), e.segmentMimeTypes || (e.segmentMimeTypes = []), void 0 === e.segmentMimeTypes.find(e => e == r.contentType) && e.segmentMimeTypes.push(r.contentType), r.fragType === gu.Variant ? (e.variantVideoBytes = (e.variantVideoBytes || 0) + r.bytes, e.variantVideoDuration = (e.variantVideoDuration || 0) + r.duration, e.intervalVideoBytes = (e.intervalVideoBytes || 0) + r.bytes, e.intervalVideoDuration = (e.intervalVideoDuration || 0) + r.duration, e.sessionVideoBytes = (e.sessionVideoBytes || 0) + r.bytes, e.sessionVideoDuration = (e.sessionVideoDuration || 0) + r.duration, e.obrLast = 8 * r.bytes / (r.duration / 1e3), t.NetBytes = (t.NetBytes || 0) + r.bytes, t.ADT = (t.ADT || 0) + r.adt, t.SegmentProcessTime = (t.SegmentProcessTime || 0) + r.processTime, i.ADT = (i.ADT || 0) + r.adt, i.NetBytes = (i.NetBytes || 0) + r.bytes, i.SegmentProcessTime = (i.SegmentProcessTime || 0) + r.processTime) : r.fragType === gu.AltAudio && (e.variantAudioBytes = (e.variantAudioBytes || 0) + r.bytes, e.variantAudioDuration = (e.variantAudioDuration || 0) + r.duration, e.intervalAudioBytes = (e.intervalAudioBytes || 0) + r.bytes, e.intervalAudioDuration = (e.intervalAudioDuration || 0) + r.duration, e.sessionAudioBytes = (e.sessionAudioBytes || 0) + r.bytes, e.sessionAudioDuration = (e.sessionAudioDuration || 0) + r.duration)
})
}
updateFragBuffered(e, i) {
this.update(e, ({
periodicRecord: e,
playEndedRecord: t
}) => {
i.fragType === gu.Variant && (e.SegmentParseTime = (e.SegmentParseTime || 0) + i.parseTime, t.SegmentParseTime = (t.SegmentParseTime || 0) + i.parseTime)
})
}
updateLevelLoaded(e, n) {
this.update(e, ({
sessionControlRecord: e,
playLikelyToKeepUpRecord: t,
periodicRecord: i,
playEndedRecord: r
}) => {
t.PlaylistADT = (t.PlaylistADT || 0) + n.adt, i.PlaylistADT = (i.PlaylistADT || 0) + n.adt, r.PlaylistADT = (r.PlaylistADT || 0) + n.adt, i.MaxPlaylistDT = n.adt > i.MaxPlaylistDT ? n.adt : i.MaxPlaylistDT, r.MaxPlaylistDT = n.adt > r.MaxPlaylistDT ? n.adt : r.MaxPlaylistDT, r.PlayType = n.playType, this._setTargetDuration(n.url, n.targetduration, e), e.playlistMimeTypes || (e.playlistMimeTypes = []), void 0 === e.playlistMimeTypes.find(e => e == n.contentType) && e.playlistMimeTypes.push(n.contentType);
i = n.url, r = this._getVariantInfo(i, e);
e.intervalVariantList[i] || (e.intervalVariantList[i] = Object.assign({}, r)), e.sessionVariantList[i] || (e.sessionVariantList[i] = Object.assign({}, r))
})
}
updateLevelsChanged(e, r) {
this.update(e, ({
sessionControlRecord: t,
playEndedRecord: e
}) => {
const i = this._computeVariantInfo(r.levels);
e.MaxVideoQltyIndex = i.maxVideoQltyIndex, e.MaxReWd = i.maxWidth, e.MaxReHt = i.maxHeight, t.manifestData = {
variantList: i.variantList,
varListString: i.varListString
}, Object.keys(i.variantList).forEach(e => {
t.intervalVariantList[e] && (t.intervalVariantList[e].brRnk = i.variantList[e].brRnk), t.sessionVariantList[e] && (t.sessionVariantList[e].brRnk = i.variantList[e].brRnk)
})
})
}
updateLicenseChallengeRequested(e, r) {
this.update(e, ({
sessionControlRecord: e
}) => {
const t = {},
i = r.timestamp;
t.licenseChallengeStartTime = i, "RTC_STATE_INIT" === e.state && (t.keyInitTime = i - e.sessionStartTime), e.activeKeySessions[r.keyuri] = t
})
}
updateLicenseChallengeReceived(e, i) {
this.update(e, ({
sessionControlRecord: e
}) => {
const t = e.activeKeySessions[i.keyuri];
t.licenseChallengeRequestTime = i.timestamp - t.licenseChallengeStartTime
})
}
updateLicenseChallengeSubmitted(e, i) {
this.update(e, ({
sessionControlRecord: e
}) => {
const t = e.activeKeySessions[i.keyuri];
t.keyFormat = i.keyFormat, t.licenseChallengeSubmitTime = i.timestamp
})
}
updateLicenseChallengeCreated(e, i) {
this.update(e, ({
sessionControlRecord: e
}) => {
const t = e.activeKeySessions[i.keyuri];
t.cdmVersion = i.cdmVersion, t.licenseChallengeCreationTime = i.timestamp - t.licenseChallengeSubmitTime
})
}
updateLicenseResponseRequested(e, t) {
this.update(e, ({
sessionControlRecord: e
}) => {
e.activeKeySessions[t.keyuri].licenseResponseRequestTime = t.timestamp
})
}
updateLicenseResponseReceived(e, i) {
this.update(e, ({
sessionControlRecord: e
}) => {
const t = e.activeKeySessions[i.keyuri];
t.licenseResponseReceiveTime = i.timestamp - t.licenseResponseRequestTime
})
}
updateLicenseResponseSubmitted(e, t) {
this.update(e, ({
sessionControlRecord: e
}) => {
e.activeKeySessions[t.keyuri].licenseResponseSubmitTime = t.timestamp
})
}
_prepareEventPlayEnded(e) {
this.update(e, ({
sessionControlRecord: e,
playEndedRecord: t
}) => {
t.AvgVideoBitrate = 8 * (e.sessionVideoBytes || 0) / (e.sessionVideoDuration || 1), t.AvgAudioBitrate = 8 * (e.sessionAudioBytes || 0) / (e.sessionAudioDuration || 1);
var i = 1e3 * Math.round((t.NetBytes || 0) / 1e3);
t.NetBytes = i;
var r = t.ADT || 1,
n = t.ADT + t.SegmentProcessTime || 1,
s = t.ADT + t.SegmentProcessTime + t.SegmentParseTime || 1;
t.TWOBR = 8 * i / (r / 1e3), t.PerceivedTWOBR = 8 * i / (n / 1e3), t.NetTWOBR = 8 * i / (s / 1e3);
var s = this._findTimeWeightedValues("RTC_STATE_PLAY" === e.state ? Date.now() - e.eventStartTime : 0, e.sessionVariantList, e.curLevelUrl);
t.PlayerTWIBR = s.twIBR, t.PlayerTWIABR = s.twIABR, t.TWBitRk = s.twBRnk;
s = this._getVariantInfo(e.curLevelUrl, e);
t.TargetDur = s.targetduration, t.ReWd = s.width, t.ReHt = s.height, t.VariantList = null === (s = e.manifestData) || void 0 === s ? void 0 : s.varListString;
let a = "";
e.playlistMimeTypes && (e.playlistMimeTypes.forEach(e => {
a += e + ","
}), a = a.slice(0, -1));
let o = "";
e.segmentMimeTypes && (e.segmentMimeTypes.forEach(e => {
o += e + ","
}), o = o.slice(0, -1)), t.PlaylistMimeType = a, t.SegmentMimeType = o, t.Rate = e.rate
}), this._aggregateTimes(e)
}
_prepareEventPeriodic(e, o) {
this.update(e, ({
sessionControlRecord: e,
periodicRecord: t,
playEndedRecord: i
}) => {
t.EventCounter = e.periodicEventCounter, t.PInterval = Date.now() - e.lastPeriodicTime, t.AvgVideoBitrate = 8 * (e.intervalVideoBytes || 0) / (e.intervalVideoDuration || 1), t.AvgAudioBitrate = 8 * (e.intervalAudioBytes || 0) / (e.intervalAudioDuration || 1);
let r = t.NetBytes || 0;
o.isFinal && (t.NetBytes = r = 1e3 * Math.round(r / 1e3));
var n = t.ADT || 1,
s = t.ADT + t.SegmentProcessTime || 1,
a = t.ADT + t.SegmentProcessTime + t.SegmentParseTime || 1;
t.TWOBR = 8 * r / (n / 1e3), t.PerceivedTWOBR = 8 * r / (s / 1e3), t.NetTWOBR = 8 * r / (a / 1e3);
var a = this._findTimeWeightedValues("RTC_STATE_PLAY" === e.state ? Date.now() - e.eventStartTime : 0, e.intervalVariantList, e.curLevelUrl);
t.PlayerTWIBR = a.twIBR, t.PlayerTWIABR = a.twIABR, t.TWBitRk = a.twBRnk;
a = this._getVariantInfo(e.curLevelUrl, e);
t.TargetDur = a.targetduration, t.ReWd = a.width, t.ReHt = a.height, t.VariantList = null === (a = e.manifestData) || void 0 === a ? void 0 : a.varListString, t.Rate = e.rate;
e = this._computeMediaStats(e);
e && (t.MedianBufferAppendLatency = e.bufLatencyInfo.median, t.MaxBufferAppendLatency = e.bufLatencyInfo.max, t.MedianBufferAppendSize = e.bufSizeInfo.median, t.MaxBufferAppendSize = e.bufSizeInfo.max, t.MedianSeekLatency = e.seekLatencyInfo.median, t.MaxSeekLatency = e.seekLatencyInfo.max, t.MedianPlayLatency = e.playLatencyInfo.median, t.MaxPlayLatency = e.playLatencyInfo.max), this._copyCommonKeys(t, i)
}), this._aggregateTimes(e)
}
_prepareEventPlayStalled(e, s) {
this.update(e, ({
sessionControlRecord: e,
playStalledRecord: t,
playEndedRecord: i
}) => {
var r = this._getVariantInfo(e.curLevelUrl, e),
n = Date.now();
t.MediaDur = s.mediaDur, t.BitRnk = r.brRnk, t.Codecs = r.codecs, t.LastLikelyToKeepUp = n - e.lastLikelyToKeepUpTime, t.LastSwitch = n - e.lastSwitchTime, t.StallDetectionTime = s.stallDurationMs, t.StallType = s.type, t.BufferLength = s.bufferLen, "networkError" === i.ErrDomain && (t.NwErrTime = i.NwErrTime, t.NwErrCode = i.ErrCode), t.LaSwDir = e.lastSwitchDir, t.TargetDur = r.targetduration, t.PlayerIABR = r.avgBandwidth, t.PlayerIBR = r.bandwidth, t.Rate = e.rate, t.OBRLast = e.obrLast, t.OBRMean = 8 * i.NetBytes / (i.ADT / 1e3), this._copyCommonKeys(t, i)
}), this._aggregateTimes(e)
}
_prepareEventKeySessionComplete(e, r) {
this.update(e, ({
sessionControlRecord: e,
keySessionCompleteRecord: t,
playEndedRecord: i
}) => {
e = e.activeKeySessions[r.keyuri];
e ? (t.KeyFormat = e.keyFormat, t.CDMVersion = e.cdmVersion, t.LicenseChallengeRequestTime = e.licenseChallengeRequestTime, t.LicenseChallengeCreationTime = e.licenseChallengeCreationTime, t.LicenseResponseReceiveTime = e.licenseResponseReceiveTime, t.LicenseResponseProcessTime = e.licenseResponseProcessTime, t.KeyDeliveryTime = e.keyDeliveryTime, t.CurrentMediaTime = 1e3 * e.currentMediaTime, t.KeyInitTime = e.keyInitTime, t.KeyErrorType = e.keyErrorType, this._copyCommonKeys(t, i)) : this.logger.warn(`_prepareEventKeySessionComplete no keySessionInfo for ${le(r.keyuri)}`)
}), this._aggregateTimes(e)
}
_prepareEventPlayLikelyToKeepUp(e, n) {
this.update(e, ({
sessionControlRecord: e,
playLikelyToKeepUpRecord: t,
playEndedRecord: i
}) => {
var r = this._getVariantInfo(e.curLevelUrl, e);
t.EventCounter = e.playLikelyToKeepUpEventCounter, t.PlayerIABR = r.avgBandwidth, t.PlayerIBR = r.bandwidth, t.MediaDur = n.mediaDur, t.BitRnk = r.brRnk, t.Codecs = r.codecs, t.TargetDur = r.targetduration, this._copyCommonKeys(t, i)
}), this._aggregateTimes(e)
}
_prepareEventPlayRateChanged(e, n) {
this.update(e, ({
sessionControlRecord: e,
playRateChangedRecord: t,
playEndedRecord: i
}) => {
var r = this._getVariantInfo(e.curLevelUrl, e);
t.Rate = e.rate, t.StNPT = n.currentTime, t.PlayerIABR = r.avgBandwidth, t.PlayerIBR = r.bandwidth, t.BitRnk = r.brRnk, t.MediaDur = n.mediaDur, t.Codecs = r.codecs, this._copyCommonKeys(t, i)
}), this._aggregateTimes(e)
}
_prepareEventPlayError(e, s) {
this.update(e, ({
sessionControlRecord: e,
playErrorRecord: t,
playEndedRecord: i
}) => {
var r = this._getVariantInfo(e.curLevelUrl, e),
n = Date.now();
"mediaElementError" == s.domain ? (t.ErrDomain = t.ErrCode = "mediaElementError", t.ErrIsFatal = !0, t.ErrCodeMediaElement = s.mediaElemCode, t.ErrReason = s.mediaElemReason, t.ErrDetail = s.mediaElemDetail) : (t.ErrCode = s.details, t.ErrReason = s.code, t.ErrIsFatal = s.fatal, t.ErrDomain = "mediaError"), t.PlayerErrCount = s.count || 1, t.BitRnk = r.brRnk, t.MediaDur = s.mediaDur, t.PlayTime = i.PlayTime, t.PlayTimeWC = i.PlayTimeWC, t.PlayerIABR = r.avgBandwidth, t.PlayerIBR = r.bandwidth, t.LastLikelyToKeepUp = n - e.lastLikelyToKeepUpTime, t.LastSwitch = n - e.lastSwitchTime, t.VideoQltyIndex = r.qltyIndex, t.Rate = e.rate, t.KeyErrorType = e.lastKeyErrorType, t.KeyDeliveryTime = e.lastKeyDeliveryTime, this._copyCommonKeys(t, i)
}), this._aggregateTimes(e)
}
_prepareEventMediaEngineStalled(e, s) {
this.update(e, ({
sessionControlRecord: e,
mediaEngineStalledRecord: t,
playEndedRecord: i
}) => {
var r = Date.now(),
n = this._getVariantInfo(e.curLevelUrl, e);
t.MediaDur = s.mediaDur, t.BitRnk = n.brRnk, t.Codecs = n.codecs, t.LastLikelyToKeepUp = r - e.lastLikelyToKeepUpTime, t.LastSwitch = r - e.lastSwitchTime, t.StallDetectionTime = s.stallDurationMs, t.StallType = s.type, t.BufferLength = s.bufferLen, t.LaSwDir = e.lastSwitchDir, t.TargetDur = n.targetduration, t.PlayerIABR = n.avgBandwidth, t.PlayerIBR = n.bandwidth, t.Rate = e.rate, t.OBRLast = e.obrLast, t.OBRMean = 8 * i.NetBytes / (i.ADT / 1e3), this._copyCommonKeys(t, i)
}), this._aggregateTimes(e)
}
_prepareEventSwitchComplete(e, s) {
this.update(e, ({
sessionControlRecord: e,
switchCompleteRecord: t,
playEndedRecord: i
}) => {
var r = this._getVariantInfo(e.prevLevelUrl, e),
n = this._getVariantInfo(e.curLevelUrl, e);
t.FrBitRnk = r.brRnk, t.ToBitRnk = n.brRnk, t.TimeToBitrate = Date.now() - e.sessionStartTime, t.MediaDur = s.mediaDur, t.Rate = e.rate, t.PlayerIBR = n.bandwidth, t.PlayerIABR = n.avgBandwidth, t.LastPlayerIBR = r.bandwidth, t.LastPlayerIABR = r.avgBandwidth, t.ReWd = n.width, t.ReHt = n.height, this._copyCommonKeys(t, i)
}), this._aggregateTimes(e)
}
_prepareEventVariantEnded(e, n) {
this.update(e, ({
sessionControlRecord: e,
variantEndedRecord: t,
playEndedRecord: i
}) => {
var r = this._getVariantInfo(e.curLevelUrl, e);
t.Rate = e.rate, t.VarAvgBitrate = r.avgBandwidth, t.VarPeakBitrate = r.bandwidth, t.VarBitRk = r.brRnk, t.VarSTTime = e.variantStartTimeMedia, t.VarEndTime = 1e3 * n.currentTime, t.IFR = r.framerate, t.ODR = e.decodedFramesForVariant / e.decodedFramesForVariantSampleCount, t.ReWd = r.width, t.ReHt = r.height, t.Codecs = r.codecs, t.AvgVideoBitrate = 8 * (e.variantVideoBytes || 0) / (e.variantVideoDuration || 1), t.AvgAudioBitrate = 8 * (e.variantAudioBytes || 0) / (e.variantAudioDuration || 1), this._copyCommonKeys(t, i)
}), this._aggregateTimes(e)
}
_prepareEventNwError(e, n) {
this.update(e, ({
sessionControlRecord: e,
nwErrorRecord: t,
playEndedRecord: i
}) => {
var r = this._getVariantInfo(e.curLevelUrl, e);
t.ErrCode = n.details, t.ErrReason = n.code, t.ErrIsFatal = n.fatal, t.NwErrCount = n.count || 1, t.ErrDomain = "networkError", t.PlayTime = i.PlayTime, t.PlayTimeWC = i.PlayTimeWC, t.BitRnk = r.brRnk, t.Rate = e.rate, t.KeyErrorType = e.lastKeyErrorType, t.KeyDeliveryTime = e.lastKeyDeliveryTime, this._copyCommonKeys(t, i)
}), this._aggregateTimes(e)
}
_copyCommonKeys(e, t) {
e.PlayType = t.PlayType, e.LastMediaCDNServer = t.LastMediaCDNServer, e.MaxVideoQltyIndex = t.MaxVideoQltyIndex, e.MaxReWd = t.MaxReWd, e.MaxReHt = t.MaxReHt, e.IsGapless = t.IsGapless, e.IsAudioOnly = t.IsAudioOnly, e.IsFirstItem = t.IsFirstItem, e.ItemID = t.ItemID, e.ServerInfo = t.ServerInfo
}
_computeVariantInfo(e) {
const i = {};
let r = 0,
n = 0,
s = 0,
a = 0;
const o = this._getMaxNormalizedPeak(e);
e.forEach(e => {
if (e.attrs) {
const r = this._getVideoFourCC(e.attrs.CODECS),
n = this._getVideoQualityIndex(r, e.attrs["VIDEO-RANGE"]) || 0,
s = {
codecs: e.attrs.CODECS,
width: e.width,
height: e.height,
bandwidth: e.attrs.BANDWIDTH,
avgBandwidth: e.attrs["AVERAGE-BANDWIDTH"],
framerate: e.attrs["FRAME-RATE"],
iframes: e.iframes,
brRnk: this._getBitrateRank(e.attrs.BANDWIDTH, r, o),
qltyIndex: n,
targetduration: 0,
playTime: 0
};
a = n > a ? n : a, i[e.url] = s
}
var t = e.width * e.height;
t > s && (s = t, r = e.width, n = e.height)
});
e = 0 < Object.keys(i).length ? Object.values(i).map(e => e.bandwidth + ":" + e.avgBandwidth).join(",") : void 0;
return {
variantList: i,
varListString: e,
maxVideoQltyIndex: a,
maxWidth: r,
maxHeight: n
}
}
_getMaxNormalizedPeak(e) {
let n = 0;
return e.forEach(e => {
e = e.attrs;
if (e) {
const t = e.BANDWIDTH || 0,
i = this._getNormalizedPeak(t, this._getVideoFourCC(e.CODECS)),
r = Math.max(t, i);
n = r > n ? r : n
}
}), n
}
_getNormalizedPeak(e, t) {
return "object" == typeof Ff[t] ? 1.5 * e : +e
}
_getVideoFourCC(e) {
return e && e.split(",").map(e => e.split(".")[0].trim()).find(e => !!Ff[e])
}
_getVideoQualityIndex(e, t) {
return "object" == typeof Ff[e] ? Ff[e][t] : Ff[e]
}
_getBitrateRank(e, t, i) {
t = Math.max(1, this._getNormalizedPeak(e, t));
return Math.ceil(100 * t / i)
}
_findTimeWeightedValues(o, l, d) {
const e = {
twBRnk: 0,
twIBR: 0,
twIABR: 0
};
if (l) {
let i = 0,
r = 0,
n = 0,
s = 0,
a = 0;
Object.values(l).forEach(e => {
let t = e.playTime;
e === l[d] && (t += o || 0), t && (r += e.bandwidth * t, i += e.brRnk * t, n += t, e.avgBandwidth && (s += e.avgBandwidth * t, a += t))
}), n && (e.twBRnk = i / n, e.twIBR = r / n), s && a && (e.twIABR = s / a)
}
return e
}
_computeMediaStats(e) {
const t = e.bufferAppendInfo;
let i = [];
const r = [];
t && t.forEach && t.forEach(e => {
i.push(e.latency), r.push(e.size)
});
var n = this._computeStats(i),
s = this._computeStats(r),
a = e.seekInfo;
i = [], a && a.forEach && e.seekInfo.forEach(e => i.push(e.latency));
var o = this._computeStats(i),
a = e.playInfo;
return i = [], a && a.forEach && e.playInfo.forEach(e => i.push(e.latency)), {
bufLatencyInfo: n,
bufSizeInfo: s,
seekLatencyInfo: o,
playLatencyInfo: this._computeStats(i)
}
}
_computeStats(e) {
let t, i;
if (e) {
const r = e.filter(e => 0 < e);
if (0 < r.length) {
t = r.reduce((e, t) => Math.max(e, t));
const e = r.length,
n = r.sort((e, t) => e - t),
s = Math.ceil(e / 2);
i = e % 2 == 0 ? (n[s] + n[s - 1]) / 2 : n[s - 1]
}
}
return {
max: t,
median: i
}
}
_getVariantInfo(e, t) {
return e && t.manifestData && t.manifestData.variantList && t.manifestData.variantList[e] ? t.manifestData.variantList[e] : {}
}
_setTargetDuration(e, t, i) {
e && i.manifestData && i.manifestData.variantList && i.manifestData.variantList[e] && (i.manifestData.variantList[e].targetduration = t)
}
_isBadSw(e, t, i, r, n, s, a) {
let o = n - s < 1e4 && t !== e && r === i && !a ? !0 : !1;
return o
}
_aggregateTimes(e) {
this.update(e, ({
sessionControlRecord: t,
playLikelyToKeepUpRecord: i,
playStalledRecord: r,
mediaEngineStalledRecord: n,
switchCompleteRecord: s,
playRateChangedRecord: a,
variantEndedRecord: o,
playErrorRecord: l,
nwErrorRecord: d,
periodicRecord: u,
playEndedRecord: c
}) => {
var h = Date.now() - t.eventStartTime;
switch (t.state) {
case "RTC_STATE_INIT":
i.StartupTime = (i.StartupTime || 0) + h, u.InitTime = (u.InitTime || 0) + h, c.InitTime = (c.InitTime || 0) + h;
break;
case "RTC_STATE_CANPLAY":
a.StartupTime = (a.StartupTime || 0) + h, u.InitTime = (u.InitTime || 0) + h, c.InitTime = (c.InitTime || 0) + h;
break;
case "RTC_STATE_PAUSE":
u.PauseTime = (u.PauseTime || 0) + h, c.PauseTime = (c.PauseTime || 0) + h, a.LastPause = (a.LastPause || 0) + h, c.LastPause = (c.LastPause || 0) + h, l.LastPause = (l.LastPause || 0) + h, d.LastPause = (d.LastPause || 0) + h;
break;
case "RTC_STATE_STALL":
o.StallTime = (o.StallTime || 0) + h, u.StallTime = (u.StallTime || 0) + h, c.StallTime = (c.StallTime || 0) + h, a.LastStall = (a.LastStall || 0) + h, l.LastStall = (l.LastStall || 0) + h, c.LastStall = (c.LastStall || 0) + h;
break;
case "RTC_STATE_MEDIAENGINESTALL":
o.MediaEngineStallTime = (o.MediaEngineStallTime || 0) + h, u.MediaEngineStallTime = (u.MediaEngineStallTime || 0) + h, c.MediaEngineStallTime = (c.MediaEngineStallTime || 0) + h, a.LastMediaEngineStall = (a.LastMediaEngineStall || 0) + h, l.LastMediaEngineStall = (l.LastMediaEngineStall || 0) + h, c.LastMediaEngineStall = (c.LastMediaEngineStall || 0) + h;
break;
case "RTC_STATE_NWERROR":
c.NwErrTime = (c.NwErrTime || 0) + h, u.NwErrTime = (u.NwErrTime || 0) + h;
break;
case "RTC_STATE_PLAYERROR":
u.PlayErrTime = (u.PlayErrTime || 0) + h, c.PlayErrTime = (c.PlayErrTime || 0) + h;
break;
case "RTC_STATE_PLAY": {
a.RateChangePlayTime = (a.RateChangePlayTime || 0) + h, s.PlayTime = (s.PlayTime || 0) + h, s.PlayTimeLastSW = (s.PlayTimeLastSW || 0) + h * (t.oldRate / 100), r.LastResume = (r.LastResume || 0) + h, n.LastResume = (n.LastResume || 0) + h, l.LastResume = (l.LastResume || 0) + h, d.LastResume = (d.LastResume || 0) + h, o.VarPlayTimeWC = (o.VarPlayTimeWC || 0) + h, o.VarPlayTime = (o.VarPlayTime || 0) + h * (t.oldRate / 100), u.PlayTimeWC = (u.PlayTimeWC || 0) + h, u.PlayTime = (u.PlayTime || 0) + h * (t.oldRate / 100), c.PlayTimeWC = (c.PlayTimeWC || 0) + h, c.PlayTime = (c.PlayTime || 0) + h * (t.oldRate / 100), n.PlayTime = c.PlayTime, r.PlayTime = c.PlayTime;
const i = t.curLevelUrl;
let e = t.intervalVariantList[i];
e.playTime = (e.playTime || 0) + h, e = t.sessionVariantList[i], e.playTime = (e.playTime || 0) + h;
break
}
}
})
}
}
const Vf = {
name: "rtc-service"
};
class Kf {
constructor(e, t, i, r) {
this.hls = e, this.config = t, this.accessLog = i, this.logger = r, this.destroy$ = new Xt, this.isSeeking = !1, this.seekStart = null, this.periodicInterval = t.rtcIntervalTimeout || 3e5, this.intervalFunc = null, this.rtcStore = new $f(this.logger), this.rtcQuery = new Uf(this.rtcStore, this.logger), this.rtcComponent = new Bf(this.rtcQuery, this.logger), i.setRTCQuery(this.rtcQuery), this.subscribeAndUpdateStore(), this.registerForEvents()
}
destroy() {
this.destroy$.next(), this.clearPeriodic(), this.rtcStore.reset()
}
detachMedia() {
this.clearPeriodic();
var e;
try {
e = this.hls.realCurrentTime, this.rtcStore.updateVariantEnd(this.rtcEventItemId(!0), {
currentTime: e
}), this.sendAndFinalize(this.rtcEventItemId(!0), Nf.VariantEnded), this.rtcStore.updatePeriodic(this.rtcEventItemId(!0), !0), this.sendAndFinalize(this.rtcEventItemId(!0), Nf.Periodic), this.rtcStore.updateEnded(this.rtcEventItemId(!0)), this.sendAndFinalize(this.rtcEventItemId(!0), Nf.PlayEnded)
} catch (e) {
this.logger.warn(Vf, e)
}
}
handleError(e) {
var t = e instanceof p ? e : new V(!0, e.message, $.InternalError);
t instanceof uc && !t.fatal ? (this.rtcStore.updateLevelLoadError(this.rtcEventItemId(), {
url: t.url,
mediaDur: this.hls.bufferedDuration,
isSeeking: this.isSeeking
}), this.sendAndFinalize(this.rtcEventItemId(), Nf.SwitchComplete)) : t.type === o ? (this.rtcStore.updateNwError(this.rtcEventItemId(), {
fatal: t.fatal,
details: t.details,
code: null === (e = t.response) || void 0 === e ? void 0 : e.code
}), this.sendAndFinalize(this.rtcEventItemId(), Nf.NwError)) : (this.rtcStore.updateMediaError(this.rtcEventItemId(), {
fatal: t.fatal,
details: t.details,
code: null === (t = t.response) || void 0 === t ? void 0 : t.code
}), this.sendAndFinalize(this.rtcEventItemId(), Nf.PlayError))
}
handleMediaElementError(e) {
this.rtcStore.updateMediaElementError(this.rtcEventItemId(), e), this.sendAndFinalize(this.rtcEventItemId(), Nf.PlayError)
}
handleFragLoaded(e, t) {
var i, r, n;
this.checkMediaOptionType(e.mediaOptionType) && (e.itemId !== this.rtcEventItemId() && this.logger.warn(Vf, `Frag id does not match current item id. Frag Id=${e.itemId}, playing id=${this.rtcEventItemId(!0)}, loading id=${null===(n=this.hls.loadingItem)||void 0===n?void 0:n.itemId}`), i = t.tload - t.trequest, r = t.tload - t.tfirst, n = this.serverInfoInstance || {}, this.rtcStore.updateFragLoaded(e.itemId, {
fragType: e.mediaOptionType,
bytes: t.loaded,
duration: e.duration,
adt: i,
processTime: r,
contentType: t.contentType,
cdnServer: t.cdnServer,
serverInfo: n
}), this.accessLog.updateFragLoaded(e.itemId, this.isSeeking, {
fragType: e.mediaOptionType,
bytes: t.loaded,
duration: e.duration,
adt: i,
processTime: r,
startPTS: e.start,
endPTS: e.start + e.duration
}))
}
handleFragBuffered(e) {
var t;
this.checkMediaOptionType(e.fragmentType) && (t = e.endDataAppend - e.startDataAppend, this.rtcStore.updateFragBuffered(this.rtcEventItemId(), {
fragType: e.fragmentType,
bytes: e.dataBytesAppend,
parseTime: t
}))
}
handleLevelLoaded(e, t) {
var i;
e ? (e.itemId !== this.rtcEventItemId() && this.logger.warn(Vf, `media option id does not match current item id. media Id=${e.itemId}, current id=${this.rtcEventItemId}`), e.mediaOptionType === gu.Variant && (i = t.tload - t.trequest, this.rtcStore.updateLevelLoaded(this.rtcEventItemId(), {
url: e.url,
targetduration: e.targetduration,
adt: i,
contentType: t.contentType,
playType: e.type
}))) : this.logger.warn(`handleLevelLoaded called with mediaOptionDetails as ${e}`)
}
handleLevelSwitched(e) {
var t = {
url: e.url,
isSeeking: this.isSeeking,
mediaDur: this.hls.bufferedDuration,
currentTime: this.hls.realCurrentTime
};
e.oldVariant && (this.rtcStore.updateVariantEnd(this.rtcEventItemId(), {
currentTime: this.hls.realCurrentTime
}), this.sendAndFinalize(this.rtcEventItemId(), Nf.VariantEnded)), this.rtcStore.updateLevelSwitched(this.rtcEventItemId(), t), this.sendAndFinalize(this.rtcEventItemId(), Nf.SwitchComplete)
}
handleLevelSwitching(e) {
this.levelSwitchingUrl = e
}
handleLevelsChanged(e) {
this.rtcStore.updateLevelsChanged(this.rtcEventItemId(), {
levels: e
})
}
handleManifestParsed(e) {
var t = e.stats.tload - e.stats.trequest;
this.rtcStore.updateManifestParsed(this.rtcEventItemId(), {
levels: e.levels,
adt: t,
contentType: e.stats.contentType,
isAudioOnly: this.hls.inGaplessMode,
isGapless: this.hls.inGaplessMode,
isFirstItem: this.hls.isFirstItem,
itemID: ((null === (e = this.hls.reportingAgent) || void 0 === e ? void 0 : e.SessionID) || Zl()) + "-" + this.rtcEventItemId()
})
}
handleSeek(e) {
if ("SEEKING" === e) this.isSeeking = !0, this.seekStart = Date.now();
else if ("SEEKED" === e) {
this.isSeeking = !1;
let e = 0;
this.seekStart && (e = Date.now() - this.seekStart), this.seekStart = null, this.rtcStore.updateSeeked(this.rtcEventItemId(!0), {
latency: e
})
}
}
handleDesiredRateChanged(e, t) {
0 === t || 1 < Math.abs(e) && 1 < Math.abs(t) ? (this.rtcStore.updateRateChanged(this.rtcEventItemId(!0), {
rate: t,
latency: 0,
mediaDur: this.hls.bufferedDuration,
currentTime: this.hls.realCurrentTime,
url: this.levelSwitchingUrl
}), this.sendAndFinalize(this.rtcEventItemId(!0), Nf.PlayRateChanged)) : 1 !== e && 1 === t && (this.playStart = Date.now()), this.oldRate = e, this.newRate = t
}
handleVariantBufferAppended(e, t) {
let i = 0;
e && (i = Date.now() - e), this.rtcStore.updateBufferAppended(this.rtcEventItemId(), {
latency: i,
size: t
})
}
handleStalled(e, t) {
var i = {
type: e.type,
stallDurationMs: e.stallDurationMs,
bufferLen: t,
mediaDur: this.hls.bufferedDuration
},
t = this.rtcQuery.getEntity(this.rtcEventItemId(!0)).sessionControlRecord.state;
e.type === Cp.LowBuffer || e.type === Cp.Seek && e.isLowBufferStall ? "RTC_STATE_PLAY" === t && (this.rtcStore.updateBufferStalled(this.rtcEventItemId(!0), i), this.sendAndFinalize(this.rtcEventItemId(!0), Nf.PlayStalled)) : "RTC_STATE_PLAY" === t && (this.rtcStore.updateMediaEngineStalled(this.rtcEventItemId(!0), i), this.sendAndFinalize(this.rtcEventItemId(!0), Nf.MediaEngineStalled))
}
handlePlaybackInfo(e, t) {
this.rtcStore.updatePlaybackInfo(this.rtcEventItemId(!0), {
droppedVideoFrames: e,
decodedFrameCount: t
}), this.accessLog.updatePlaybackInfo(this.rtcEventItemId(!0), {
droppedVideoFrames: e,
decodedFrameCount: t
})
}
checkMediaOptionType(e) {
return e === gu.Variant || e === gu.AltAudio || (this.logger.error(Vf, 'Should not have media option type = "%s" in RTC', Nu[e]), !1)
}
rtcEventItemId(e = !1) {
return (this.hls.isPreloading ? e ? this.hls.playingItem : this.hls.loadingItem : this.hls.currentItem).itemId
}
subscribeAndUpdateStore() {
this.hls.publicQueries$.pipe(La(([, e]) => this.mediaElementQueryListener(e)), Va(this.destroy$)).subscribe(), this.hls.itemQueue.activeItemById$.pipe(Za(t => {
if (t) {
let e = !1;
if (this.hls.userInfo ? this.hls.userInfo.internalBuild ? e = !0 : this.hls.userInfo.diagnosticsAndUsage && (e = this.config.enableRtcReporting) : e = this.config.enableRtcReporting, e) {
const i = this.hls.reportingAgent;
i ? this.rtcComponent.setReportingAgent(i) : this.logger.warn(Vf, "[RTCA] - Reporting is enabled but reportingAgent is null")
} else this.rtcComponent.setReportingAgent(null);
this.serverInfoInstance = null;
t = t.itemId;
this.rtcStore.createEntity(t), !this.hls.isFirstItem && this.hls.inGaplessMode || this.setPeriodic(t)
}
}), Va(this.destroy$)).subscribe()
}
itemTransitioned(e, t) {
this.rtcStore.updateVariantEnd(e, {
currentTime: this.hls.realCurrentTime
}), this.sendAndFinalize(e, Nf.VariantEnded), this.rtcStore.updatePeriodic(e, !0), this.sendAndFinalize(e, Nf.Periodic), this.rtcStore.updateEnded(e), this.sendAndFinalize(e, Nf.PlayEnded), this.setPeriodic(t)
}
mediaElementQueryListener(e) {
return e.gotPlaying$.pipe(Za(e => {
if (e) {
const e = this.oldRate,
t = this.newRate || 1;
1 < Math.abs(e) && 1 < Math.abs(t) || (this.rtcStore.updateCanPlay(this.rtcEventItemId(!0), {
mediaDur: this.hls.bufferedDuration
}), this.sendAndFinalize(this.rtcEventItemId(!0), Nf.PlayLikelyToKeepUp), this.rtcStore.updateRateChanged(this.rtcEventItemId(!0), {
rate: t,
latency: ne(this.playStart) ? Date.now() - this.playStart : 0,
mediaDur: this.hls.bufferedDuration,
currentTime: this.hls.realCurrentTime,
url: this.levelSwitchingUrl
}), this.sendAndFinalize(this.rtcEventItemId(!0), Nf.PlayRateChanged))
}
}))
}
registerForEvents() {
const e = Oc(this.hls, this);
an(e.event(P.KEY_REQUEST_STARTED, this.keyRequestStarted, this), e.event(P.KEY_LOADED, this.keyLoaded, this)).pipe(Va(this.destroy$)).subscribe()
}
keyRequestStarted(e) {
e.timestamp = Date.now(), this.rtcStore.updateLicenseChallengeRequested(this.rtcEventItemId(), e)
}
keyLoaded(e) {
e.timestamp = Date.now(), e.currentTime = this.hls.realCurrentTime, this.rtcStore.updateSegmentKeyLoaded(this.rtcEventItemId(), e)
}
licenseChallengeReceived(e) {
this.rtcStore.updateLicenseChallengeReceived(this.rtcEventItemId(), {
timestamp: Date.now(),
keyuri: e.keyuri
})
}
licenseChallengeSubmitted(e) {
this.rtcStore.updateLicenseChallengeSubmitted(this.rtcEventItemId(), {
timestamp: Date.now(),
keyFormat: e.keyFormat,
keyuri: e.keyuri
})
}
licenseChallengeCreated(e) {
this.rtcStore.updateLicenseChallengeCreated(this.rtcEventItemId(), {
timestamp: Date.now(),
cdmVersion: e.cdmVersion,
keyuri: e.keyuri
}), this.rtcStore.updateLicenseResponseRequested(this.rtcEventItemId(), {
timestamp: Date.now(),
keyuri: e.keyuri
})
}
licenseResponseSubmitted(e) {
this.rtcStore.updateLicenseResponseReceived(this.rtcEventItemId(), {
timestamp: Date.now(),
keyuri: e.keyuri
}), this.rtcStore.updateLicenseResponseSubmitted(this.rtcEventItemId(), {
timestamp: Date.now(),
keyuri: e.keyuri
})
}
licenseResponseProcessed(e) {
this.rtcStore.updateLicenseResponseProcessed(this.rtcEventItemId(), {
timestamp: Date.now(),
keyuri: e.keyuri,
currentTime: this.hls.realCurrentTime
}), this.sendAndFinalize(this.rtcEventItemId(), Nf.KeySessionComplete)
}
licenseChallengeError(e) {
this.rtcStore.updateLicenseChallengeError(this.rtcEventItemId(), {
timestamp: Date.now(),
keyuri: e.keyuri
}), this.sendAndFinalize(this.rtcEventItemId(), Nf.KeySessionComplete)
}
licenseResponseError(e) {
this.rtcStore.updateLicenseResponseError(this.rtcEventItemId(), {
timestamp: Date.now(),
keyuri: e.keyuri
}), this.sendAndFinalize(this.rtcEventItemId(), Nf.KeySessionComplete)
}
keyAborted(e) {
var t;
null != (null === (t = this.rtcQuery.getEntity(this.rtcEventItemId())) || void 0 === t ? void 0 : t.sessionControlRecord.activeKeySessions[e.keyuri]) ? (this.rtcStore.updateKeyAborted(this.rtcEventItemId(), {
timestamp: Date.now(),
keyuri: e.keyuri
}), this.sendAndFinalize(this.rtcEventItemId(), Nf.KeySessionComplete)) : this.logger.warn(`keyAbort called without active key session ${le(e.keyuri)}`)
}
setPeriodic(e) {
this.clearPeriodic(), this.intervalFunc = setInterval(this.handlePeriodic.bind(this, e), this.periodicInterval)
}
handlePeriodic(e) {
this.rtcStore.updatePeriodic(e, !1), this.sendAndFinalize(e, Nf.Periodic)
}
clearPeriodic() {
this.intervalFunc && clearInterval(this.intervalFunc), this.intervalFunc = null
}
sendAndFinalize(e, t) {
switch (this.accessLog.addPlayTime(e), t) {
case Nf.PlayEnded:
this.rtcComponent.sendPlayEnded(e);
break;
case Nf.Periodic:
this.rtcComponent.sendPeriodic(e);
break;
case Nf.PlayStalled:
this.accessLog.updateStallCount(e), this.rtcComponent.sendPlayStalled(e);
break;
case Nf.KeySessionComplete:
this.rtcComponent.sendKeySessionComplete(e);
break;
case Nf.PlayLikelyToKeepUp:
this.accessLog.updateCanPlay(e), this.rtcComponent.sendPlayLikelyToKeepUp(e);
break;
case Nf.PlayRateChanged:
this.rtcComponent.sendPlayRateChange(e);
break;
case Nf.PlayError:
this.accessLog.addToErrorLog(e, "mediaError"), this.rtcComponent.sendPlayError(e);
break;
case Nf.MediaEngineStalled:
this.accessLog.updateMediaEngineStallCount(e), this.rtcComponent.sendMediaEngineStalled(e);
break;
case Nf.SwitchComplete:
this.accessLog.addToAccessLog(e), this.rtcComponent.sendSwitchComplete(e);
break;
case Nf.VariantEnded:
this.rtcComponent.sendVariantEnded(e);
break;
case Nf.NwError:
this.accessLog.addToErrorLog(e, "networkError"), this.rtcComponent.sendNwError(e);
break;
default:
return void this.logger.error(Vf, `Unknown rtc event eventGroupId:${e}`)
}
this.rtcStore.finalize(e, t)
}
}
const qf = a => (e, t) => {
let i = 0,
r = 0;
for (var {
timestamp: n,
value: s
} of e) {
const e = Math.pow(Math.max(0, n - t) / 1e3, a);
i += e * s, r += e
}
return i / r
},
Hf = {
"uniform-time-weighted": qf(0),
"linear-time-weighted": qf(1),
"quadratic-time-weighted": qf(2)
};
class jf {
constructor(e, t = "quadratic-time-weighted", i = {
avgLatencyMs: NaN,
avgBandwidth: NaN
}) {
this.windowSize = e, this.aggregationMethod = t, this.latencyEntries = [], this.bandwidthEntries = [], this.minEntries = 1, this.cleanUpExpiredEntries = this.cleanUpExpiredEntries.bind(this), this.bwSubject = new yi(i)
}
get estimate$() {
return this.bwSubject.asObservable()
}
record(e) {
var {
trequest: t,
tfirst: i,
tload: r,
bitsDownloaded: e
} = e;
t !== r && (this.recordLatency(t, i), this.recordBandwidth(t, r, 1e3 * e / (r - t)), this.bwSubject.closed || (t = this.getEstimate(), this.bwSubject.next(t)))
}
getEstimate() {
if (this.latencyEntries.length < this.minEntries) return {
avgLatencyMs: NaN,
avgBandwidth: NaN
};
const e = performance.now() - this.windowSize,
t = Hf[this.aggregationMethod],
i = this.latencyEntries.map(({
start: e,
end: t
}) => ({
timestamp: t,
value: t - e,
duration: 1
}));
this.bandwidthEntries = function(r) {
function n(t, i) {
if (t.length) {
for (let e = 0; e < t.length; e++)
if (t[e].start > i.start || t[e].start === i.start && t[e].end > i.end) {
t.splice(e, 0, i);
break
}
} else t.push(i)
}
const s = [...r].sort((e, t) => e.start !== t.start ? e.start - t.start : e.end - t.end),
t = [];
for (; s.length;) {
const r = s[0];
let e;
if (s.shift(), t.length && (e = t[t.length - 1]), 0 === t.length || e.end <= r.start) t.push(r);
else if (r.start === e.start) r.end === e.end ? e.bitsPerSec += r.bitsPerSec : r.end < e.end || (e.bitsPerSec += r.bitsPerSec, r.start = e.end, n(s, r));
else {
var a = e.end,
o = e.bitsPerSec;
e.end = r.start;
var i = {
start: r.start,
end: Math.min(a, r.end),
bitsPerSec: r.bitsPerSec + o
};
if (t.push(i), a !== r.end) {
let e = 0,
t = 0,
i = 0;
i = a < r.end ? (e = a, t = r.end, r.bitsPerSec) : (e = r.end, t = a, o), n(s, {
start: e,
end: t,
bitsPerSec: i
})
}
}
}
return t
}(this.bandwidthEntries);
var r = this.bandwidthEntries.map(({
end: e,
bitsPerSec: t
}) => ({
timestamp: e,
duration: 1,
value: t
}));
return {
avgLatencyMs: t(i, e),
avgBandwidth: t(r, e)
}
}
getLatest() {
if (0 === this.latencyEntries.length) return {
avgLatencyMs: NaN,
avgBandwidth: NaN
};
var e = this.latencyEntries[this.latencyEntries.length - 1],
t = this.bandwidthEntries[this.bandwidthEntries.length - 1];
return {
avgLatencyMs: e.end - e.start,
avgBandwidth: t.bitsPerSec
}
}
recordLatency(e, t) {
this.latencyEntries.push({
start: e,
end: t
}), this.updateCleanupTimeout(t)
}
recordBandwidth(e, t, i) {
this.bandwidthEntries.push({
start: e,
end: t,
bitsPerSec: i
}), this.updateCleanupTimeout(t)
}
setCleanupTimeout(e) {
this.cleanupTimeout = setTimeout(this.cleanUpExpiredEntries, Math.max(e - performance.now(), 0)), this.cleanupTimestamp = e
}
clearCleanupTimeout() {
void 0 !== this.cleanupTimeout && (clearTimeout(this.cleanupTimeout), this.cleanupTimeout = void 0), this.cleanupTimestamp = void 0
}
updateCleanupTimeout(e) {
e += this.windowSize;
(!this.cleanupTimestamp || e < this.cleanupTimestamp) && (this.clearCleanupTimeout(), this.setCleanupTimeout(e))
}
cleanUpExpiredEntries() {
this.clearCleanupTimeout();
const t = performance.now() - this.windowSize;
if (this.latencyEntries = this.latencyEntries.filter(e => e.end >= t), this.bandwidthEntries = this.bandwidthEntries.filter(e => e.end >= t), this.bwSubject.closed || this.bwSubject.next(this.getEstimate()), 0 < this.latencyEntries.length || 0 < this.bandwidthEntries.length) {
const t = Math.min(...this.latencyEntries.map(e => e.end), ...this.bandwidthEntries.map(e => e.end));
this.updateCleanupTimeout(t)
}
}
destroy() {
this.clearCleanupTimeout()
}
}
const Qf = {
setCombinedEstimate: function(t, i, r) {
const n = Qe();
if (void 0 !== t.storage.set) {
var s = t.bandwidthHistoryStorageKey,
a = {
avgLatencyMs: i.avgLatencyMs,
avgBandwidth: i.avgBandwidth
},
a = Object.assign({}, a, {
expires: Date.now() + t.bandwidthHistoryTTL
});
try {
t.storage.set(s, JSON.stringify(a))
} catch (t) {
n.warn(`Error stringifying! Not persisting bandwidth estimates: ${t.message}`)
}
i = {
maxDuration: i.maxDurationSec,
avgFragParseTimeMs: i.avgParseTimeMs,
avgFragBufferCreationDelayMs: i.avgBufferCreateMs,
avgPlaylistLoadTimeMs: i.avgPlaylistLoadTimeMs,
avgPlaylistParseTimeMs: i.avgPlaylistParseTimeMs,
avgInitFragAppendMs: i.avgInitFragAppendMs,
avgDataFragAppendMs: i.avgDataFragAppendMs
};
let e = t.storageKeyPrefix;
r && (e += r);
try {
t.storage.set(e, JSON.stringify(i))
} catch (t) {
n.warn(`Error stringifying! Not persisting bandwidth estimates: ${t.message}`)
}
} else n.warn("storage.set is not supported! Not persisting bandwidth estimates")
},
getCombinedEstimate: function(t, e) {
const i = Qe();
let r = {};
if (void 0 === t.storage.get) return i.warn("storage.get is not supported! unable to retreive bandwidth estimates"), this.convertStorageJsonToCombinedEstimate(r);
try {
let e = JSON.parse(t.storage.get(t.bandwidthHistoryStorageKey));
e = null != e && e.expires && e.expires < Date.now() ? null : {
avgLatencyMs: null == e ? void 0 : e.avgLatencyMs,
avgBandwidth: null == e ? void 0 : e.avgBandwidth
}, r = Object.assign(Object.assign({}, r), e)
} catch (t) {
i.warn(`Unable to get persisted bandwidth history: ${t.message}`)
}
let n = t.storageKeyPrefix;
e && (n += e);
try {
const e = JSON.parse(t.storage.get(n));
r = Object.assign(Object.assign({}, r), e)
} catch (t) {
i.warn(`Unable to get persisted bandwidth history: ${t.message}`)
}
return this.convertStorageJsonToCombinedEstimate(r)
},
convertStorageJsonToCombinedEstimate: function(e) {
return {
avgLatencyMs: (null == e ? void 0 : e.avgLatencyMs) || NaN,
avgBandwidth: (null == e ? void 0 : e.avgBandwidth) || NaN,
maxDurationSec: (null == e ? void 0 : e.maxDuration) || NaN,
avgParseTimeMs: (null == e ? void 0 : e.avgFragParseTimeMs) || NaN,
avgBufferCreateMs: (null == e ? void 0 : e.avgFragBufferCreationDelayMs) || NaN,
avgPlaylistLoadTimeMs: (null == e ? void 0 : e.avgPlaylistLoadTimeMs) || NaN,
avgPlaylistParseTimeMs: (null == e ? void 0 : e.avgPlaylistParseTimeMs) || NaN,
avgInitFragAppendMs: (null == e ? void 0 : e.avgInitFragAppendMs) || NaN,
avgDataFragAppendMs: (null == e ? void 0 : e.avgDataFragAppendMs) || NaN
}
},
getBandwidthEstimate: function(e, t) {
const i = this.getCombinedEstimate(e, t),
r = {
avgLatencyMs: null == i ? void 0 : i.avgLatencyMs,
avgBandwidth: null == i ? void 0 : i.avgBandwidth
};
return ne(r.avgLatencyMs) || (r.avgLatencyMs = NaN), ne(r.avgBandwidth) || (r.avgBandwidth = NaN), r
},
getPlaylistEstimate: function(e, t) {
const i = this.getCombinedEstimate(e, t),
r = {
avgPlaylistLoadTimeMs: null == i ? void 0 : i.avgPlaylistLoadTimeMs,
avgPlaylistParseTimeMs: null == i ? void 0 : i.avgPlaylistParseTimeMs
};
return ne(r.avgPlaylistLoadTimeMs) || (r.avgPlaylistLoadTimeMs = NaN), ne(r.avgPlaylistParseTimeMs) || (r.avgPlaylistParseTimeMs = NaN), r
},
getFragEstimate: function(e, t) {
const i = this.getCombinedEstimate(e, t),
r = {
maxDurationSec: null == i ? void 0 : i.maxDurationSec,
avgParseTimeMs: null == i ? void 0 : i.avgParseTimeMs
};
return ne(r.maxDurationSec) || (r.maxDurationSec = NaN), ne(r.avgParseTimeMs) || (r.avgParseTimeMs = NaN), r
},
getBufferEstimate: function(e, t) {
const i = this.getCombinedEstimate(e, t),
r = {
avgBufferCreateMs: null == i ? void 0 : i.avgBufferCreateMs,
avgInitFragAppendMs: null == i ? void 0 : i.avgInitFragAppendMs,
avgDataFragAppendMs: null == i ? void 0 : i.avgDataFragAppendMs
};
return ne(r.avgBufferCreateMs) || (r.avgBufferCreateMs = NaN), ne(r.avgInitFragAppendMs) || (r.avgInitFragAppendMs = NaN), ne(r.avgDataFragAppendMs) || (r.avgDataFragAppendMs = NaN), r
}
};
var Wf = Qf;
class Gf {
constructor(e = 0) {
this._minSamples = e, this._sum = 0, this._max = Number.NEGATIVE_INFINITY, this._numSamples = 0
}
get avg() {
return this._numSamples < this._minSamples ? NaN : this._sum / this._numSamples
}
get max() {
return 0 < this.count ? this._max : NaN
}
get count() {
return this._numSamples
}
reset() {
this._sum = 0, this._numSamples = 0, this._max = Number.NEGATIVE_INFINITY
}
add(e) {
this._sum += e, this._max = Math.max(this._max, e), ++this._numSamples
}
}
class zf extends kl {
constructor(e, t) {
super(e), this.id = t
}
getBandwidthEstimate(e, t) {
var i;
const r = Object.assign({}, null === (i = this.statsEntity) || void 0 === i ? void 0 : i.bandwidthEstimate);
if (ne(r.avgBandwidth) && ne(r.avgLatencyMs)) return r;
if (e) {
const i = Qf.getBandwidthEstimate(e, t);
ne(r.avgBandwidth) || (r.avgBandwidth = i.avgBandwidth), ne(r.avgLatencyMs) || (r.avgLatencyMs = i.avgLatencyMs)
}
return r
}
getPlaylistEstimate(e, t) {
var i;
const r = Object.assign({}, null === (i = this.statsEntity) || void 0 === i ? void 0 : i.playlistEstimate),
n = e => ne(e.avgPlaylistLoadTimeMs) && ne(e.avgPlaylistParseTimeMs);
if (n(r)) return r;
if (e) {
const i = Qf.getPlaylistEstimate(e, t);
if (ne(r.avgPlaylistLoadTimeMs) || (r.avgPlaylistLoadTimeMs = i.avgPlaylistLoadTimeMs), ne(r.avgPlaylistParseTimeMs) || (r.avgPlaylistParseTimeMs = i.avgPlaylistParseTimeMs), n(r)) return r;
ne(r.avgPlaylistLoadTimeMs) || (r.avgPlaylistLoadTimeMs = e.statDefaults.playlistLoadTimeMs), ne(r.avgPlaylistParseTimeMs) || (r.avgPlaylistParseTimeMs = e.statDefaults.playlistParseTimeMs)
}
return r
}
getBufferEstimate(e, t) {
var i;
const r = Object.assign({}, null === (i = this.statsEntity) || void 0 === i ? void 0 : i.bufferEstimate),
n = e => ne(e.avgBufferCreateMs) && ne(e.avgDataFragAppendMs) && ne(e.avgInitFragAppendMs);
if (n(r)) return r;
if (e) {
const i = Qf.getBufferEstimate(e, t);
if (ne(r.avgBufferCreateMs) || (r.avgBufferCreateMs = i.avgBufferCreateMs), ne(r.avgDataFragAppendMs) || (r.avgDataFragAppendMs = i.avgDataFragAppendMs), ne(r.avgInitFragAppendMs) || (r.avgInitFragAppendMs = i.avgInitFragAppendMs), n(r)) return r;
ne(r.avgBufferCreateMs) || (r.avgBufferCreateMs = e.statDefaults.fragBufferCreationDelayMs), ne(r.avgDataFragAppendMs) || (r.avgDataFragAppendMs = e.statDefaults.dataFragAppendMs), ne(r.avgInitFragAppendMs) || (r.avgInitFragAppendMs = e.statDefaults.initFragAppendMs)
}
return r
}
getFragEstimate(e, t) {
var i;
const r = Object.assign({}, null === (i = this.statsEntity) || void 0 === i ? void 0 : i.fragEstimate),
n = e => ne(e.maxDurationSec) && ne(e.avgParseTimeMs);
if (n(r)) return r;
if (e) {
const i = Qf.getFragEstimate(e, t);
if (ne(r.maxDurationSec) || (r.maxDurationSec = i.maxDurationSec), ne(r.avgParseTimeMs) || (r.avgParseTimeMs = i.avgParseTimeMs), n(r)) return r;
ne(r.maxDurationSec) || (r.maxDurationSec = e.defaultTargetDuration), ne(r.avgParseTimeMs) || (r.avgParseTimeMs = e.statDefaults.fragParseTimeMs)
}
return r
}
getCombinedEstimate() {
return Object.assign(Object.assign(Object.assign(Object.assign({}, this.getFragEstimate()), this.getPlaylistEstimate()), this.getBufferEstimate()), this.getBandwidthEstimate())
}
get statsEntity() {
return this.getEntity(this.id)
}
get bandwidthSample() {
var e;
return null === (e = this.statsEntity) || void 0 === e ? void 0 : e.bandwidthSample
}
get bandwidthStatus() {
var e;
return null === (e = this.statsEntity) || void 0 === e ? void 0 : e.bandwidthStatus
}
get fragSample() {
var e;
return null === (e = this.statsEntity) || void 0 === e ? void 0 : e.fragSample
}
get bandwidthEstimate$() {
return this.selectEntity(this.id, "bandwidthEstimate")
}
get fragEstimate$() {
return this.selectEntity(this.id, "fragEstimate")
}
get playlistEstimate$() {
return this.selectEntity(this.id, "playlistEstimate")
}
get bufferEstimate$() {
return this.selectEntity(this.id, "bufferEstimate")
}
get bandwidthSample$() {
return this.selectEntity(this.id, ({
bandwidthSample: e
}) => e).pipe(Kp())
}
get fragSample$() {
return this.selectEntity(this.id, ({
fragSample: e
}) => e).pipe(Kp())
}
get playlistSample$() {
return this.selectEntity(this.id, ({
playlistSample: e
}) => e).pipe(Kp())
}
get bufferMetric$() {
return this.selectEntity(this.id, ({
bufferMetric: e
}) => e).pipe(Kp())
}
}
class Xf {
constructor(e) {
this.statsStore = e
}
getQuery() {
return new kl(this.statsStore)
}
getQueryForItem(e) {
return new zf(this.statsStore, e)
}
remove(e) {
this.statsStore.remove(e)
}
removeAll() {
this.statsStore.remove()
}
setBandwidthSample(e) {
this.statsStore.bandwidthSample = e
}
setFragSample(e) {
this.statsStore.fragSample = e
}
setPlaylistSample(e) {
this.statsStore.playlistSample = e
}
setBufferMetric(e) {
this.statsStore.bufferMetric = e
}
setBandwidthEstimate(e) {
this.statsStore.bandwidthEstimate = e
}
setFragEstimate(e) {
this.statsStore.fragEstimate = e
}
setPlaylistEstimate(e) {
this.statsStore.playlistEstimate = e
}
setBufferEstimate(e) {
this.statsStore.bufferEstimate = e
}
}
const Yf = new class extends fl {
constructor() {
super({}, {
name: "stats-store",
producerFn: su
})
}
set statsEntity(e) {
Do("statsStore.set.stats"), al(() => {
this.add(e), this.setActive(e.id)
})
}
set playlistSample(t) {
Do(`stats.set.playlistSample: ${t}`), this.updateActive(e => {
e.playlistSample = t
})
}
set bandwidthSample(t) {
Do(`stats.set.bandwidthSample: ${t}`), this.updateActive(e => {
e.bandwidthSample = t, e.bandwidthStatus.bandwidthSampleCount += 1, e.bandwidthStatus.instantBw = 8e3 * t.loaded / (t.tload - t.trequest)
})
}
set fragSample(t) {
Do(`stats.set.fragSample: ${t}`), this.updateActive(e => {
e.fragSample = t
})
}
set bufferMetric(t) {
Do(`stats.set.bufferMetric: ${t}`), this.updateActive(e => {
e.bufferMetric = t
})
}
set bandwidthEstimate(t) {
Do(`stats.set.bandwidthEstimate: ${t}`), this.updateActive(e => {
e.bandwidthEstimate = t
})
}
set fragEstimate(t) {
Do(`stats.set.fragEstimate: ${t}`), this.updateActive(e => {
e.fragEstimate = t
})
}
set playlistEstimate(t) {
Do(`stats.set.playlistEstimate: ${t}`), this.updateActive(e => {
e.playlistEstimate = t
})
}
set bufferEstimate(t) {
Do(`stats.set.bufferEstimate: ${t}`), this.updateActive(e => {
e.bufferEstimate = t
})
}
};
let Jf = null;
const Zf = e => new zf(Yf, e);
function em(e, t) {
if (e === t) return !0;
if (!e || !t) return !1;
let i = Object.keys(e).length === Object.keys(t).length;
for (const r of Object.keys(e)) i = i && (isNaN(e[r]) && isNaN(t[r]) || e[r] === t[r]);
return i
}
function tm(f, m, g) {
return new $t(e => {
(e => {
const t = Zf(e);
t.hasEntity(e) ? $i(t) : (i = Yf, e = e, Do("stats.loading"), i.setLoading(!0), i.statsEntity = {
id: e,
bandwidthEstimate: {
avgLatencyMs: NaN,
avgBandwidth: NaN
},
bandwidthStatus: {
bandwidthSampleCount: 0,
instantBw: NaN
},
fragEstimate: {
maxDurationSec: NaN,
avgParseTimeMs: NaN
},
playlistEstimate: {
avgPlaylistLoadTimeMs: NaN,
avgPlaylistParseTimeMs: NaN
},
bufferEstimate: {
avgBufferCreateMs: NaN,
avgInitFragAppendMs: NaN,
avgDataFragAppendMs: NaN
}
}, i.setLoading(!1), Do("stats.loaded"));
var i
})(g.itemId);
const t = Zf(g.itemId),
{
fragSample$: i,
playlistSample$: r,
bandwidthSample$: n,
bufferMetric$: s
} = t;
return an(r.pipe(ji(tr), (h = f, p = m, e => e.pipe(tc("statsPlaylistProcessingEpic.in"), sa((e, t) => (e.playlistLoadTimeMs.add(t.playlistLoadTimeMs), e.playlistParseTimeMs.add(t.playlistParseTimeMs), e), {
playlistLoadTimeMs: new Gf(h.minPlaylistCount),
playlistParseTimeMs: new Gf(h.minPlaylistCount)
}), hr(e => ({
avgPlaylistLoadTimeMs: e.playlistLoadTimeMs.avg,
avgPlaylistParseTimeMs: e.playlistParseTimeMs.avg
})), Is(em), Za(e => {
p.setPlaylistEstimate(e)
})))), n.pipe(ji(tr), (u = f, c = m, n => new $t(e => {
let t = new jf(u.bandwidthHistoryWindowSize, u.bandwidthHistoryAggregationMethod, {
avgLatencyMs: NaN,
avgBandwidth: NaN
});
const i = t.estimate$,
r = an(n.pipe(ln(e => e.complete), Za(e => {}), hr(e => ({
trequest: e.trequest,
tfirst: e.tfirst,
tload: e.tload,
bitsDownloaded: 8 * e.loaded
})), tc("statsBandwidthProcessingEpic.in"), La(e => (t.record(e), Ii))), i.pipe(Is(), tc("statsBandwidthProcessingEpic.change"), Za(e => {
c && c.setBandwidthEstimate(e)
}))).subscribe(e);
return () => {
r.unsubscribe(), t.destroy(), t = void 0
}
}))), i.pipe(ji(tr), (l = f, d = m, e => e.pipe(tc("statsFragProcessingEpic.in"), sa((e, t) => (e.durationSec.add(t.durationSec), e.fragParseMs.add(t.parseTimeMs), e), {
durationSec: new Gf,
fragParseMs: new Gf(l.minFragmentCount)
}), hr(e => ({
maxDurationSec: e.durationSec.max,
avgParseTimeMs: e.fragParseMs.avg
})), Is(em), Za(e => d.setFragEstimate(e))))), s.pipe(ji(tr), (a = f, o = m, e => e.pipe(tc("statsBufferMetricProcessingEpic.in"), sa((e, t) => (ne(t.bufferCreationStart) && ne(t.bufferCreationEnd) && e.bufferCreateMs.add(t.bufferCreationEnd - t.bufferCreationStart), ne(t.startInitAppend) && ne(t.endInitAppend) && e.initFragAppendMs.add(t.endInitAppend - t.startInitAppend), ne(t.startDataAppend) && ne(t.endDataAppend) && e.dataFragAppendMs.add(t.endDataAppend - t.startDataAppend), e), {
bufferCreateMs: new Gf,
initFragAppendMs: new Gf,
dataFragAppendMs: new Gf(a.minFragmentCount)
}), hr(e => ({
avgBufferCreateMs: e.bufferCreateMs.avg,
avgInitFragAppendMs: e.initFragAppendMs.avg,
avgDataFragAppendMs: e.dataFragAppendMs.avg
})), Is(em), Za(e => {
o.setBufferEstimate(e)
}))))).pipe($a(Ii)).subscribe(e), () => {
Wf.setCombinedEstimate(f, Object.assign(Object.assign(Object.assign(Object.assign({}, t.getFragEstimate()), t.getPlaylistEstimate()), t.getBufferEstimate()), t.getBandwidthEstimate()), g.serviceName), m.remove(g.itemId)
};
var a, o, l, d, u, c, h, p
})
}
const im = {
isWebkitMediaElement: e => "webkitDroppedFrameCount" in e,
isHtmlVideoElement: e => "getVideoPlaybackQuality" in e,
timeRangeToArray(t) {
const i = [];
for (let e = 0; e < t.length; e++) i.push([t.start(e), t.end(e)]);
return i
}
};
class rm {
constructor(e, t) {
this.hls = e, this.sessionID = t, this.rtcQuery = null, this.accessLogData = this.createAccessLogEntry(), this.accesslog = [], this.errorlog = []
}
destroy() {
this.rtcQuery = null, this.accesslog = [], this.errorlog = [], this.accessLogData = void 0, this.accessLogReporter = void 0
}
setRTCQuery(e) {
this.rtcQuery = e
}
setupReporter(e) {
this.accessLogReporter = {
SessionID: this.sessionID,
ClientName: null == e ? void 0 : e.clientName,
ServiceName: null == e ? void 0 : e.serviceName
}
}
addPlayTime(e) {
var t, e = null === (t = this.rtcQuery) || void 0 === t ? void 0 : t.getEntity(e);
!e || "RTC_STATE_PLAY" === (e = e.sessionControlRecord).state && (this.accessLogData.PlayTimeWC = (this.accessLogData.PlayTimeWC || 0) + e.eventStartTime)
}
updatePlaybackInfo(e, t) {
this.accessLogData.ViFrDr = this.rtcQuery.getEntity(e).sessionControlRecord.droppedVideoFrames || 0
}
updateStallCount(e) {
"RTC_STATE_PLAY" === this.rtcQuery.getEntity(e).sessionControlRecord.state && this.accessLogData.StallCount++
}
updateMediaEngineStallCount(e) {
"RTC_STATE_PLAY" === this.rtcQuery.getEntity(e).sessionControlRecord.state && this.accessLogData.MediaEngineStallCount++
}
updateCanPlay(e) {
this.accessLogData.StartupTime = this.rtcQuery.getEntity(e).sessionControlRecord.eventStartTime
}
updateFragLoaded(e, t, i) {
var r;
i.fragType === gu.Variant ? (this.accessLogData.NetBytes += i.bytes, this.accessLogData.ADT += i.adt, r = this.aggregateFragObserverdBitrate(i, ++this.accessLogData.fragmentCnt, this.accessLogData.NetBytes, this.accessLogData.ADT), this.accessLogData.OBRLast = r.obrLast, this.accessLogData.OBRMean = r.obrMean, this.aggregateFragMinMaxBitrate(this.accessLogData, r.obr), this.hls.realCurrentTime > i.startPTS && !t && this.accessLogData.overdue++, this.hasGap(i.startPTS, i.endPTS, this.accessLogData.lastStartPTS, this.accessLogData.lastEndPTS) && this.addToAccessLog(e), this.accessLogData.startPTS || (this.accessLogData.startPTS = i.startPTS), this.accessLogData.lastStartPTS = i.startPTS, this.accessLogData.lastEndPTS = i.endPTS, this.accessLogData.videoBytes += i.bytes, this.accessLogData.videoDuration += i.duration) : i.fragType === gu.AltAudio && (this.accessLogData.audioBytes += i.bytes, this.accessLogData.audioDuration += i.duration)
}
addToAccessLog(e) {
var t = this.getVariantInfo(e),
i = this.rtcQuery.getEntity(e).sessionControlRecord.curLevelUrl,
r = this.rtcQuery.getEntity(e).playEndedRecord.PlayType;
if (i && "" !== i) {
r = this.translateToAccessLogItem(e, i, t, r);
if (r) {
const n = this.accesslog.length - 20;
0 < n && this.accesslog.splice(0, n), this.accesslog.push(r)
}
this.accessLogData = this.createAccessLogEntry();
e = this.rtcQuery.getEntity(e).switchCompleteRecord.MediaDur;
this.accessLogData.lastMediaDur = e || this.hls.bufferedDuration
}
}
addToErrorLog(e, t) {
var i = null === (r = this.rtcQuery) || void 0 === r ? void 0 : r.getEntity(e);
if (i) {
var r = Number(("mediaError" === t ? i.playErrorRecord : i.nwErrorRecord).ErrCode),
i = i.sessionControlRecord.curLevelUrl,
r = this.translateToErrorLogItem(e, i, {
domain: t,
code: r
});
if (r) {
const e = this.errorlog.length - 20;
0 < e && this.errorlog.splice(0, e), this.errorlog.push(r)
}
}
}
getAccessLog(e) {
var t;
const i = this.accesslog.slice(0),
r = null === (t = this.rtcQuery) || void 0 === t ? void 0 : t.getEntity(e);
if (i && r) {
const t = r.sessionControlRecord.curLevelUrl;
if (t && "" !== t) {
const r = this.getVariantInfo(e),
n = this.translateToAccessLogItem(e, t, r, this.rtcQuery.getEntity(e).playEndedRecord.PlayType);
n && (n["c-provisional-entry"] = !0, i.push(n))
}
}
return i
}
get errorLog() {
return this.errorlog
}
createAccessLogEntry() {
return {
fragmentCnt: 0,
overdue: 0,
startPTS: 0,
obrMax: 0,
obrMin: 0,
audioBytes: 0,
audioDuration: 0,
videoBytes: 0,
videoDuration: 0,
svrAddrChanged: 0,
svrAddr: "",
PlayTimeWC: 0,
ViFrDr: 0,
StallCount: 0,
MediaEngineStallCount: 0,
ADT: 0,
NetBytes: 0,
StartupTime: 0,
OBRMean: 0,
OBRLast: 0
}
}
convertStringObjectToPrimitive(e) {
return e ? "object" == typeof e ? e.toString() : e : ""
}
updateSvrAddrStats(t) {
const i = bu.parseURL(t);
if (i && i.netLoc) {
const t = i.netLoc.indexOf(":");
let e = 0 <= t ? i.netLoc.slice(0, t) : i.netLoc;
e.startsWith("//") && (e = e.slice(2)), this.accessLogData.svrAddr ? e !== this.accessLogData.svrAddr && this.accessLogData.svrAddrChanged++ : this.accessLogData.svrAddrChanged = 0, this.accessLogData.svrAddr = e
}
}
translateToAccessLogItem(e, t, i, r) {
t = this.convertStringObjectToPrimitive(t);
this.updateSvrAddrStats(t);
let n = this.rtcQuery.getEntity(e).switchCompleteRecord.MediaDur;
n = n || this.hls.bufferedDuration, n = n || 0;
const s = {
uri: t,
"s-ip": this.accessLogData.svrAddr,
"s-ip-changes": this.accessLogData.svrAddrChanged,
"sc-wwan-count": -1,
"c-transfer-duration": this.accessLogData.ADT,
bytes: this.accessLogData.NetBytes,
"c-total-media-requests": this.accessLogData.fragmentCnt,
"cs-guid": this.accessLogReporter.SessionID,
"c-start-time": this.accessLogData.startPTS,
"c-startup-time": this.accessLogData.StartupTime,
"c-duration-watched": this.accessLogData.PlayTimeWC / 1e3,
"c-frames-dropped": this.accessLogData.ViFrDr,
"c-stalls": this.accessLogData.StallCount + this.accessLogData.MediaEngineStallCount,
"c-duration-downloaded": this.accessLogData.lastMediaDur ? n - this.accessLogData.lastMediaDur : n,
"c-overdue": this.accessLogData.overdue,
"c-avg-video-bitrate": 8 * this.accessLogData.videoBytes / (this.accessLogData.videoDuration || 1),
"c-observed-max-bitrate": this.accessLogData.obrMax,
"c-observed-min-bitrate": this.accessLogData.obrMin,
"sc-indicated-bitrate": i.bandwidth || 0,
"sc-indicated-avg-bitrate": i.avgBandwidth || 0,
"c-observed-bitrate": this.accessLogData.OBRMean,
"c-switch-bitrate": this.accessLogData.OBRLast,
"c-provisional-entry": !1
};
return s["s-playback-type"] = r, this.accessLogData.audioBytes && (s["c-avg-audio-bitrate"] = 8 * this.accessLogData.audioBytes / (this.accessLogData.audioDuration || 1)), s
}
translateToErrorLogItem(e, t, i) {
t = this.convertStringObjectToPrimitive(t);
return this.updateSvrAddrStats(t), {
date: new Date,
"cs-guid": this.accessLogReporter.SessionID + "-" + e,
uri: t,
"s-ip": this.accessLogData.svrAddr,
status: "" + i.code,
domain: i.domain
}
}
hasGap(e, t, i, r) {
return void 0 !== e && void 0 !== i && (1 < e - r || 1 < i - t)
}
aggregateFragObserverdBitrate(e, t, i, r) {
r = 8 * i / (r / 1e3);
return {
obr: r,
obrLast: 8 * e.bytes / (e.adt / 1e3),
obrMean: r / t
}
}
aggregateFragMinMaxBitrate(e, t) {
(!e.obrMax || t > e.obrMax) && (e.obrMax = t), (!e.obrMin || t < e.obrMin) && (e.obrMin = t)
}
getVariantInfo(e) {
var t = this.rtcQuery.getEntity(e).sessionControlRecord.curLevelUrl,
e = null === (e = this.rtcQuery.getEntity(e).sessionControlRecord.manifestData) || void 0 === e ? void 0 : e.variantList;
return t && e && e[t] ? e[t] : {}
}
}
const nm = (r, e, t, i, n, s) => {
var a, {
absoluteUrl: o,
byteRangeOffset: l,
keyTagInfo: d,
iframe: u,
isInitSegment: c
} = r,
h = o,
p = d["method"],
{
start: o,
end: d
} = l,
t = Lc({
url: h
}, t);
let f, m = o,
g = d,
y = !1,
v = ne(o) || ne(d) ? l : void 0;
if ("AES-128" === p && d && (u || c)) {
const r = d - o;
r % 16 && (g = d + (16 - r % 16)), 0 !== o && (y = !0, m = o - 16), v = {
start: m,
end: g
}
}
return n && ne(r.mediaSeqNum) && r.mediaOptionType === gu.Variant && (f = [], null === (n = t.reportHTTPResponseHeaders) || void 0 === n || n.forEach(function(e) {
Ou.includes(e) ? f.push(e) : Qe().warn({
name: "load-media-fragment"
}, `${e} is not in approved privacy list. Actions required.`)
}), 0 === f.length && (f = void 0)), Rc({
url: h,
byteRangeOffset: v,
checkContentLength: !0,
extendMaxTTFB: s,
collectServerInstanceInfo: f,
onProgress: i,
xhrSetup: e.xhrSetup
}, t).pipe(hr(([e, t, i]) => {
if (y) {
const t = e;
r.keyTagInfo.iv = new Uint8Array(t.slice(0, 16)), e = t.slice(16)
}
return [r, e, t, i]
}), (a = r, e => e.pipe(Vn(e => {
if (e instanceof pc) throw new hc(!1, "Timeout", 0, $.FragmentTimeoutError, !0, a, e.stats);
if (e instanceof oc) throw new hc(!1, e.message, e.code, {
code: e.code,
text: "Fragment Network Error"
}, !1, a);
throw e
}))))
},
sm = {
clearkey: th,
fairplaystreaming: Sc,
playready: Fc,
widevine: Bc
},
am = {
getKeySystemFormat(e) {
e = sm[e];
return e ? e.keyFormatString : ""
},
getKeySystemSecurityLevel(e) {
e = sm[e];
return e ? e.securityLevels : null
}
},
om = {
NONE: "",
"AES-128": "",
"ISO-23001-7": "",
"SAMPLE-AES": "",
"SAMPLE-AES-CTR": ""
},
lm = {
NONE: 0,
"TYPE-0": 1,
"TYPE-1": 2,
"TYPE-2": 3
};
function dm(e) {
return e in lm
}
function um(e) {
return null == e ? 4 : lm[e]
}
const cm = ["SDR", "PQ", "HLG"],
hm = {
afr: "af",
aka: "ak",
amh: "am",
ara: "ar",
arg: "an",
asm: "as",
ava: "av",
ave: "ae",
aym: "ay",
aze: "az",
bam: "bm",
bel: "be",
ben: "bn",
bih: "bh",
bod: "bo",
bos: "bs",
bre: "br",
bul: "bg",
cat: "ca",
ces: "cs",
cha: "ch",
che: "ce",
chu: "cu",
chv: "cv",
cor: "kw",
cos: "co",
cre: "cr",
cym: "cy",
dan: "da",
deu: "de",
div: "dv",
dzo: "dz",
ell: "el",
eng: "en",
epo: "eo",
est: "et",
eus: "eu",
ewe: "ee",
fao: "fo",
fas: "fa",
fin: "fi",
fra: "fr",
fry: "fy",
ful: "ff",
gla: "gd",
gle: "ga",
glg: "gl",
glv: "gv",
grn: "gn",
guj: "gu",
hat: "ht",
heb: "he",
her: "hz",
hin: "hi",
hmo: "ho",
hrv: "hr",
hun: "hu",
hye: "hy",
ibo: "ig",
ido: "io",
iii: "ii",
iku: "iu",
ile: "ie",
ina: "ia",
ind: "id",
isl: "is",
ita: "it",
jav: "jv",
jpn: "ja",
kal: "kl",
kan: "kn",
kas: "ks",
kat: "ka",
kau: "kr",
kaz: "kk",
khm: "km",
kik: "ki",
kin: "rw",
kir: "ky",
kom: "kv",
kon: "kg",
kor: "ko",
kua: "kj",
kur: "ku",
lao: "lo",
lat: "la",
lav: "lv",
lim: "li",
lit: "lt",
ltz: "lb",
lub: "lu",
lug: "lg",
mah: "mh",
mal: "ml",
mar: "mr",
mkd: "mk",
mlg: "mg",
mlt: "mt",
mol: "mo",
mon: "mn",
mri: "mi",
msa: "ms",
mya: "my",
nav: "nv",
nbl: "nr",
nde: "nd",
ndo: "ng",
nep: "ne",
nld: "nl",
nno: "nn",
nob: "nb",
nya: "ny",
oci: "oc",
oji: "oj",
ori: "or",
orm: "om",
oss: "os",
pan: "pa",
pli: "pi",
pol: "pl",
por: "pt",
pus: "ps",
que: "qu",
roh: "rm",
ron: "ro",
run: "rn",
rus: "ru",
san: "sa",
sin: "si",
slk: "sk",
slv: "sl",
sme: "se",
snd: "sd",
som: "so",
spa: "es",
sqi: "sq",
srd: "sc",
srp: "sr",
sun: "su",
swa: "sw",
swe: "sv",
tah: "ty",
tam: "ta",
tat: "tt",
tel: "te",
tgk: "tg",
tgl: "tl",
tha: "th",
tir: "ti",
ton: "to",
tuk: "tk",
tur: "tr",
uig: "ug",
ukr: "uk",
urd: "ur",
uzb: "uz",
ven: "ve",
vie: "vi",
wln: "wa",
yid: "yi",
zha: "za",
zho: "zh"
},
pm = {
isLanguageCode: e => e in hm,
shortenLanguageCode(e) {
let t;
var i, r;
return e && (r = 0 <= (i = e.indexOf("-")) ? e.slice(0, i) : e, pm.isLanguageCode(r) && (t = hm[r]), t = t || r, 0 < i && (t += "-" + e.slice(i + 1))), t
}
},
fm = {
getRichestVideoCodec(e) {
if (e && e.length) {
e = e.sort((e, t) => qp(t) - qp(e));
return e && e.length ? e[0] : void 0
}
},
getRichestAudioCodec(e) {
if (e && e.length) {
e = e.sort((e, t) => jp(t) - jp(e));
return e && e.length ? e[0] : void 0
}
},
getRichestChannelLayoutForGroupId(t, i) {
if (t && i && i.length) {
let e;
const r = i.filter(e => e.groupId === t);
if (r && r.length) {
const t = r.sort((e, t) => be.getChannelCount(t.channels) - be.getChannelCount(e.channels));
t && t.length && (e = t[0].channels)
}
return e
}
}
};
function mm(e) {
return new R(L, "steeringManifestParsingError", !1, e, $.FormatError)
}
class gm {
constructor(e) {
this._url = null, this._programDateTime = null, this._byteRange = null, this.relurl = null, this.baseurl = null, this.isInitSegment = !1, this.mediaSeqNum = NaN, this.cc = NaN, this.iframe = !1, this.bitrate = NaN, this.start = NaN, this.duration = NaN, this.lastByteRangeEndOffset = NaN, this.inheritQuery = e, this.tagList = new Array, this.iframe = !1
}
getMediaFragment(e, t, i) {
const r = {
mediaOptionType: i,
absoluteUrl: this.url,
start: this.start,
duration: this.duration,
mediaSeqNum: this.mediaSeqNum,
discoSeqNum: this.cc,
mediaOptionId: t,
itemId: e,
isLastFragment: !1,
isInitSegment: this.isInitSegment
};
return null !== (e = this.byteRange) && void 0 !== e && e.length && (r.byteRangeOffset = {
start: this.byteRangeStartOffset,
end: this.byteRangeEndOffset
}), this.iframe && (r.iframe = this.iframe), this.levelkey && (r.keyTagInfo = this.levelkey), this.programDateTime && (r.programDateTime = this.programDateTime), r
}
get url() {
return !this._url && this.relurl && this.baseurl && (this._url = bu.buildAbsoluteURL(this.baseurl, this.relurl, {
alwaysNormalize: !0,
inheritQuery: this.inheritQuery
})), this._url
}
set url(e) {
this._url = e
}
get programDateTime() {
return !this._programDateTime && this.rawProgramDateTime && (this._programDateTime = new Date(Date.parse(this.rawProgramDateTime))), this._programDateTime
}
get byteRange() {
if (!this._byteRange) {
const i = new Array(2);
var e, t;
this.rawByteRange && (1 === (e = this.rawByteRange.split("@", 2)).length ? (t = this["lastByteRangeEndOffset"], i[0] = t || 0) : i[0] = parseInt(e[1]), i[1] = parseInt(e[0]) + i[0]), this._byteRange = i
}
return this._byteRange
}
get byteRangeStartOffset() {
return this.byteRange[0]
}
get byteRangeEndOffset() {
return this.byteRange[1]
}
get rangeString() {
return 0 <= this.start && 0 <= this.duration ? `${this.start.toFixed(2)}-${(this.start+this.duration).toFixed(2)}` : "N/A"
}
get fragTag() {
return `sn/cc/levelId: ${this.mediaSeqNum}/${this.cc}`
}
}
const ym = {
parseMediaCharacteristics: e => e ? e.split(/\s*,\s*/) : new Array,
addMediaToSelectionArray(e, t, i) {
if (void 0 === e) return -1;
const r = e.MediaSelectionGroupOptions;
let n = r.find(e => e.MediaSelectionOptionsMediaType === t.mediaType && e.MediaSelectionOptionsName === t.name && e.MediaSelectionOptionsExtendedLanguageTag === t.lang);
return n || (n = {
MediaSelectionOptionsMediaType: t.mediaType,
MediaSelectionOptionsExtendedLanguageTag: t.lang,
MediaSelectionOptionsIsDefault: t.default,
MediaSelectionOptionsName: t.name,
MediaSelectionOptionsPersistentID: i,
MediaSelectionOptionsTaggedMediaCharacteristics: t.characteristics
}, t.mediaType === Su.SUBTITLE && (n.MediaSelectionOptionsDisplaysNonForcedSubtitles = t.forced ? vu.NO : vu.YES), i++, r.push(n)), t.persistentID = n.MediaSelectionOptionsPersistentID, i
},
addDefaultClosedCaptionOption(e, t, i, r) {
e = {
itemId: e,
mediaOptionType: gu.Subtitle,
id: 0,
mediaOptionId: "cc1_" + Zl(),
mediaType: Su.CLOSEDCAPTION,
inStreamID: "CC1",
groupId: "cc",
name: "English-CC",
type: "CLOSED-CAPTIONS",
default: !1,
autoselect: !1,
forced: !1,
lang: "en",
characteristics: ["public.accessibility.transcribes-spoken-dialog", "public.accessibility.describes-music-and-sound"],
persistentID: r
};
t.push(e), ym.addMediaToSelectionArray(i, e, r)
}
},
vm = {
BANDWIDTH: NaN,
"AVERAGE-BANDWIDTH": NaN
},
Sm = {
"TIME-OFFSET": NaN,
"FRAME-RATE": NaN,
SCORE: NaN,
"PLANNED-DURATION": NaN,
DURATION: NaN
},
bm = /^(\d+)x(\d+)$/,
Tm = /\s*(.+?)\s*=((?:\".*?\")|.*?)(?:,|$)/g;
class Em {
constructor(e) {
this.validTags = e
}
isKey(e) {
return e in this.validTags
}
trySetValue(e, t, i) {
return !!this.isKey(e) && (i[e] = this.parseFunc(t), !0)
}
}
class Im {
static parseTags(t) {
let i;
var r = {};
if (!t) return r;
for (Tm.lastIndex = 0; null !== (i = Tm.exec(t));) {
const t = i[1].toUpperCase();
let e = i[2];
0 === e.indexOf('"') && e.lastIndexOf('"') === e.length - 1 && (e = e.slice(1, -1));
for (const i of Im.tagParsers)
if (i.trySetValue(t, e, r)) break
}
return r
}
}
Im.tagParsers = [new class extends Em {
parseFunc(e) {
return e
}
}({
NAME: "",
TYPE: "",
DEFAULT: "",
AUTOSELECT: "",
FORCED: "",
LANGUAGE: "",
URI: "",
AUDIO: "",
"VIDEO-RANGE": "",
"CLOSED-CAPTIONS": "",
CODECS: "",
BYTERANGE: "",
"INSTREAM-ID": "",
"GROUP-ID": "",
CHANNELS: "",
CHARACTERISTICS: "",
KEYFORMAT: "",
KEYFORMATVERSIONS: "",
"DATA-ID": "",
VALUE: "",
METHOD: "",
"HDCP-LEVEL": "",
"ALLOWED-CPC": "",
SUBTITLES: "",
ID: "",
CLASS: "",
"START-DATE": "",
"END-DATE": "",
"END-ON-NEXT": "",
"SERVER-URI": "",
"PATHWAY-ID": ""
}), new class extends Em {
parseFunc(e) {
e = parseInt(e);
return e > Number.MAX_SAFE_INTEGER ? 1 / 0 : e
}
}(vm), new class extends Em {
constructor() {
super(...arguments), this.parseFunc = parseFloat
}
}(Sm), new class extends Em {
parseFunc(e) {
let t = (e || "0x").slice(2);
t = (1 & t.length ? "0" : "") + t;
const i = new Uint8Array(t.length / 2);
for (let e = 0; e < t.length / 2; e++) {
var r = parseInt(t.slice(2 * e, 2 * e + 2), 16);
if (!ne(r)) return;
i[e] = r
}
return i
}
}({
IV: null
}), new class extends Em {
parseFunc(e) {
e = bm.exec(e);
let t;
return null !== e && (t = {
width: parseInt(e[1], 10),
height: parseInt(e[2], 10)
}), t
}
}({
RESOLUTION: null
})];
const wm = {
ExtractVariableParameter: /{\$(.*?)}/g,
LevelPlaylistFast: /#EXTINF:(\d*(?:\.\d+)?)(?:,(.*))?|(?!#)(\S.+)|#EXT-X-BYTERANGE: *(.+)|#EXT-X-PROGRAM-DATE-TIME:(.+)|#EXT-X-BITRATE:(.+)|#EXT-X-DATERANGE:(.+)|#.*/g,
LevelPlaylistSlow: /(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE): *(\d+))|(?:#EXT-X-(TARGETDURATION): *(\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DISCONTINUITY-SEQ)UENCE:(\d+))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(VERSION):(\d+))|(?:#EXT-X-(MAP):(.+))|(?:#EXT-X-(I-FRAMES)-ONLY)|(?:#EXT-X-(DEFINE):(.+))|(?:(#)(.*):(.*))|(?:(#)(.*))(?:.*)\r?\n?/,
MasterPlaylist: /#EXT-X-STREAM-INF:([^\n\r]*)[\r\n]+([^\r\n]+)|#EXT-X-I-FRAME-STREAM-INF:([^\r\n]+)|#EXT-X-DEFINE:([^\n\r]*)|#EXT-X-CONTENT-STEERING:([^\n\r]*)/g,
MasterPlaylistAlternateMedia: /#EXT-X-MEDIA:(.*)/g,
SessionData: /#EXT-X-SESSION-DATA[^:]*:(.*)/g,
SessionKeys: /#EXT-X-SESSION-KEY:([^\n\r]*)/g,
VARIABLE_PLAYLIST_REGEX: /(NAME|VALUE)=\"(.*)\",(NAME|VALUE)=\"(.*)\"|(IMPORT)=\"(.*)\"/
};
function Am(e, t, i) {
return cu.buildAbsoluteURL(t, e, {
alwaysNormalize: !0,
inheritQuery: i
})
}
class Om {
static isValidPlaylist(e) {
return 0 === e.indexOf("#EXTM3U")
}
static isMediaPlaylist(e) {
return 0 < e.indexOf("#EXTINF:") || 0 < e.indexOf("#EXT-X-PLAYLIST-TYPE:")
}
static replaceVariables(e, t) {
let i, r = !1;
return e && t && (i = e.replace(wm.ExtractVariableParameter, e => {
wm.ExtractVariableParameter.lastIndex = 0;
e = wm.ExtractVariableParameter.exec(e)[1];
if (e && t.hasOwnProperty(e)) return t[e];
r = !0
})), {
updatedString: i,
error: r
}
}
static parseDecryptData(e, t, i) {
const r = Im.parseTags(e),
n = (e = r.METHOD) && e in om ? r.METHOD : null;
e = null !== (e = r.KEYFORMAT) && void 0 !== e ? e : null;
if (n && Om.shouldSelectKeyTag(e, n, i)) {
const s = r.URI,
i = r.IV || null;
if (s && r.IV && !i) {
const s = new R(L, _, !0, `Invalid IV: ${r.IV}`, $.PlaylistErrorInvalidEntry);
throw s.url = t, s
}
const a = s ? cu.buildAbsoluteURL(t, s, {
alwaysNormalize: !0
}) : t,
o = (r.KEYFORMATVERSIONS || "1").split("/").map(Number).filter(isFinite);
return new zc(n, a, i, e, o)
}
}
static shouldSelectKeyTag(e, t, i) {
return "AES-128" === t || "NONE" === t || null == i || e === am.getKeySystemFormat(i)
}
static optOutClosedCaption(t) {
let i = !1,
r = !1;
if (t)
for (let e = 0; e < t.length; ++e) {
const n = t[e];
if (n.videoCodec && ((r = !0) !== n.iframes && n.closedcaption && "none" === n.closedcaption.toLowerCase())) {
i = !0;
break
}
}
return !r || i
}
static parseRootPlaylistAlternateMediaOptions(a, o, l, d, u, c) {
let h, p;
var f = {
MediaSelectionGroupAllowEmptySelection: 1,
MediaSelectionGroupMediaCharacteristics: ["public.audible"],
MediaSelectionGroupMediaType: Su.AUDIO,
MediaSelectionGroupOptions: []
},
m = {
MediaSelectionGroupAllowEmptySelection: 1,
MediaSelectionGroupMediaCharacteristics: ["public.legible"],
MediaSelectionGroupMediaType: Su.SUBTITLE,
MediaSelectionGroupOptions: []
},
g = {
videoAlternateOptions: [],
audioAlternateOptions: [],
subtitleAlternateOptions: [],
audioMediaSelectionGroup: f,
subtitleMediaSelectionGroup: m
};
let y = 0;
for (wm.MasterPlaylistAlternateMedia.lastIndex = 0; null != (h = wm.MasterPlaylistAlternateMedia.exec(o));) {
const o = Om.replaceVariables(h[1], c);
if (o.error) {
p = new R(L, N, !0, $.PlaylistErrorInvalidEXTXDEFINE.text, $.PlaylistErrorInvalidEXTXDEFINE);
break
}
var v = Im.parseTags(o.updatedString);
let e, t, i, r = Su.UNKNOWN;
const S = ym.parseMediaCharacteristics(v.CHARACTERISTICS),
b = v["GROUP-ID"],
T = v.CHANNELS;
let n, s = null;
switch (v.TYPE) {
case "VIDEO":
r = Su.VIDEO, t = g.videoAlternateOptions;
break;
case "AUDIO":
r = Su.AUDIO, s = gu.AltAudio, t = g.audioAlternateOptions, i = f;
const a = d.find(e => e.audioGroupId === b);
n = a ? a.audioCodecList : [];
break;
case "SUBTITLES":
r = Su.SUBTITLE, s = gu.Subtitle, t = g.subtitleAlternateOptions, i = m;
break;
case "CLOSED-CAPTIONS":
r = Su.CLOSEDCAPTION, s = gu.Subtitle, e = v["INSTREAM-ID"], t = g.subtitleAlternateOptions, i = m
}
const E = {
itemId: a,
mediaOptionType: s,
mediaType: r,
groupId: b,
channels: T,
groupCodecList: n,
name: v.NAME,
type: v.TYPE,
default: "YES" === v.DEFAULT,
autoselect: "YES" === v.AUTOSELECT,
forced: "YES" === v.FORCED,
characteristics: S,
persistentID: y,
id: t ? t.length : 0,
mediaOptionId: `${v.NAME}_${b}_${y}`,
lang: pm.shortenLanguageCode(v.LANGUAGE)
};
v.URI && (E.url = Am(v.URI, l, u)), E.name || (E.name = E.lang, E.mediaType === Su.CLOSEDCAPTION && (E.name += " CC")), E.mediaType === Su.CLOSEDCAPTION && e && (E.inStreamID = e), t && (E.id = t.length, t.push(E)), y = ym.addMediaToSelectionArray(i, E, y)
}
return 0 !== g.subtitleAlternateOptions.length || Om.optOutClosedCaption(d) || ym.addDefaultClosedCaptionOption(a, g.subtitleAlternateOptions, m, y), {
alternateMediaInfo: g,
playlistParsingError: p
}
}
static parseMediaOptionPlaylist(e, t, i = !0, r, n, s, a, o, l, d = 0, u = !1) {
var c;
let h = 0,
p = 0;
const f = {
itemId: s,
mediaOptionId: a,
mediaOptionType: o,
type: "",
version: 0,
url: t,
initSegments: {},
fragments: [],
liveOrEvent: !0,
startSN: 0,
endSN: 0,
iframesOnly: u,
targetduration: 0,
totalduration: 0,
averagetargetduration: 0,
ptsKnown: !1
};
let m, g, y, v = new zc("NONE", t, null, null, null),
S = !1,
b = !1,
T = 0,
E = null,
I = new gm(i),
w = 0;
const A = {};
let O, k, C, D = !0,
M = !0;
wm.LevelPlaylistFast.lastIndex = 0;
for (var x = () => new R(L, _, !0, "Invalid key system preference for the playlist", $.IncompatibleAsset); null !== (m = wm.LevelPlaylistFast.exec(e));) {
const e = m[1];
if (e) {
I.duration = parseFloat(e);
const t = (" " + m[2]).slice(1);
I.title = t || null, I.tagList.push(t ? ["INF", e, t] : ["INF", e])
} else if (m[3]) {
if (ne(I.duration)) {
const e = h++;
if (I.start = p + d, I.levelkey = v, b && !S) {
k = x();
break
}
if (S = !1, b = !1, I.mediaSeqNum = e, I.cc = T, I.iframe = f.iframesOnly, I.baseurl = t, (O = Om.replaceVariables((" " + m[3]).slice(1), A)).error) {
k = new R(L, N, !0, $.PlaylistErrorInvalidEXTXDEFINE.text, $.PlaylistErrorInvalidEXTXDEFINE);
break
}
if (I.relurl = O.updatedString, I.bitrate = ne(I.byteRangeEndOffset) ? 8 * (I.byteRangeEndOffset - I.byteRangeStartOffset) / I.duration : w, null != y) {
I.rawProgramDateTime = y, I.tagList.push(["PROGRAM-DATE-TIME", I.rawProgramDateTime]);
const e = I.programDateTime.getTime();
f.programDateTimeMap = null !== (c = f.programDateTimeMap) && void 0 !== c ? c : {}, f.programDateTimeMap[e] = I.mediaSeqNum, f.dateMediaTimePairs = null !== (c = f.dateMediaTimePairs) && void 0 !== c ? c : [], f.dateMediaTimePairs.push([e, I.start]), y = void 0
}
if (f.fragments.push(I.getMediaFragment(s, a, o)), E = I, p += I.duration, D || !f.initSegments[T] || M)
if (f.iframesOnly && 0 < I.byteRangeStartOffset && !f.initSegments[T] && !M) {
const e = new gm(i);
if (e.url = I.url, e.rawByteRange = Math.min(I.byteRangeStartOffset, 1316) + "@0", e.baseurl = t, e.isInitSegment = !0, e.cc = T, e.levelkey = v, e.iframe = !0, b && !S) {
k = x();
break
}
S = !1, b = !1, f.initSegments[T] = e.getMediaFragment(s, a, o)
} else C && (C.discoSeqNum = T, f.initSegments[T] = C);
D = !1, M = !1, I = new gm(i)
}
} else if (m[4]) {
if (I.rawByteRange = (" " + m[4]).slice(1), E) {
const e = E.byteRangeEndOffset;
e && (I.lastByteRangeEndOffset = e)
}
} else if (m[5]) y = (" " + m[5]).slice(1);
else if (m[6]) {
const e = parseInt(m[6]);
ne(e) && (w = 1e3 * e)
} else if (m[7]) {
const e = m[7],
t = Im.parseTags(e);
t.ID && (f.daterangeTags || (f.daterangeTags = {}), f.daterangeTags[t.ID] = t)
} else {
for (m = m[0].match(wm.LevelPlaylistSlow), g = 1; g < m.length && void 0 === m[g]; g++);
const e = Om.replaceVariables((" " + m[g + 1]).slice(1), A),
l = Om.replaceVariables((" " + m[g + 2]).slice(1), A);
if (e.error || l.error) {
k = new R(L, N, !0, $.PlaylistErrorInvalidEXTXDEFINE.text, $.PlaylistErrorInvalidEXTXDEFINE);
break
}
const d = e.updatedString,
u = l.updatedString;
switch (m[g]) {
case "#":
I.tagList.push(u ? [d, u] : [d]);
break;
case "PLAYLIST-TYPE":
f.type = d.toUpperCase(), "VOD" === f.type && (f.liveOrEvent = !1);
break;
case "MEDIA-SEQUENCE":
0 === f.fragments.length && (h = f.startSN = parseInt(d));
break;
case "TARGETDURATION":
f.targetduration = parseFloat(d);
break;
case "VERSION":
f.version = parseInt(d);
break;
case "EXTM3U":
break;
case "ENDLIST":
f.liveOrEvent = !1;
break;
case "DIS":
T++, I.tagList.push(["DIS"]), D = !0;
break;
case "DISCONTINUITY-SEQ":
T = parseInt(d);
break;
case "KEY":
const e = d;
if (b = !0, !S) {
try {
v = Om.parseDecryptData(e, t, r)
} catch (e) {
k = e
}
v && (S = !0)
}
break;
case "START":
const l = d,
P = Im.parseTags(l)["TIME-OFFSET"];
ne(P) && (f.startTimeOffset = P);
break;
case "I-FRAMES":
f.iframesOnly = !0;
break;
case "MAP":
const c = Im.parseTags(d);
if (I.relurl = c.URI, I.rawByteRange = c.BYTERANGE, I.baseurl = t, I.isInitSegment = !0, I.levelkey = v, b && !S) {
k = x();
break
}
S = !1, b = !1, C = I.getMediaFragment(s, a, o), M = !0, I = new gm(i);
break;
case "DEFINE":
const p = wm.VARIABLE_PLAYLIST_REGEX.exec(d),
m = "NAME" === p[1] ? p[2] : p[4],
g = "VALUE" === p[1] ? p[2] : p[4],
y = p[5],
N = p[6];
if (m || g || "IMPORT" !== y || !n.hasOwnProperty(N)) {
if (!m || y || p[1] === p[3] || A.hasOwnProperty(m)) {
k = new R(L, _, !0, $.PlaylistErrorMissingImportReference.text, $.PlaylistErrorMissingImportReference);
break
}
A[m] = g
} else A[N] = n[N]
}
}
}
return I = E, I && !I.relurl && (f.fragments.pop(), p -= I.duration), !f.liveOrEvent && 0 < f.fragments.length && (f.fragments[f.fragments.length - 1].isLastFragment = !0), f.totalduration = p, f.averagetargetduration = p / f.fragments.length, f.endSN = h - 1, {
mediaOptionDetails: f,
playlistParsingError: k
}
}
static parseRootPlaylist(t, e, i, r) {
const n = [],
s = {};
let a, o, l, d, u = null,
c = !0;
for (wm.MasterPlaylist.lastIndex = 0; null != (a = wm.MasterPlaylist.exec(e));)
if (a[4]) {
a = wm.VARIABLE_PLAYLIST_REGEX.exec(a[4]);
const t = "NAME" === a[1] ? a[2] : a[4],
e = "VALUE" === a[1] ? a[2] : a[4],
i = a[5];
if (!t || s.hasOwnProperty(t) || i || a[1] === a[3]) {
d = new R(L, _, !0, $.PlaylistErrorInvalidEXTXDEFINE.text, $.PlaylistErrorInvalidEXTXDEFINE);
break
}
s[t] = e
} else if (a[5]) {
const t = Om.replaceVariables(a[5], s);
if (t.error) {
d = new R(L, _, !0, $.PlaylistErrorInvalidEXTXDEFINE.text, $.PlaylistErrorInvalidEXTXDEFINE);
break
}
const e = Im.parseTags(t.updatedString);
if ("string" != typeof e["SERVER-URI"]) {
d = new R(L, _, !0, $.PlaylistErrorInvalidSERVERURI.text, $.PlaylistErrorInvalidSERVERURI);
break
}
if (null != e["PATHWAY-ID"] && "string" != typeof e["PATHWAY-ID"]) {
d = new R(L, _, !0, $.PlaylistErrorInvalidPATHWAYID.text, $.PlaylistErrorInvalidPATHWAYID);
break
}
u = {
serverURI: Am(e["SERVER-URI"], i, !1),
initPathwayID: e["PATHWAY-ID"] || "."
}
} else {
l = Om.replaceVariables(a[1] || a[3], s);
const e = Im.parseTags(l.updatedString);
if (o = Om.replaceVariables(a[2] || e.URI, s), l.error || o.error) {
d = new R(L, _, !0, $.PlaylistErrorInvalidEXTXDEFINE.text, $.PlaylistErrorInvalidEXTXDEFINE);
break
}
if (void 0 !== e.SCORE && !ne(e.SCORE) || e.SCORE < 0) {
d = new R(L, _, !0, $.PlaylistErrorInvalidSCORE.text, $.PlaylistErrorInvalidSCORE), c = !1;
break
}
c && void 0 === e.SCORE && (c = !1);
const u = e.BANDWIDTH,
p = e["AVERAGE-BANDWIDTH"],
f = p || u,
m = null !== (h = e["VIDEO-RANGE"]) && void 0 !== h ? h : "SDR";
if (null == (h = m) || !cm.includes(h)) continue;
const g = {
itemId: t,
mediaOptionId: `level_${(f||0)+n.length%1e3/1e3}`,
mediaOptionType: gu.Variant,
attrs: e,
url: Am(o.updatedString, i, r),
name: e.NAME,
audioGroupId: e.AUDIO,
subtitleGroupId: e.SUBTITLES,
iframes: !!a[3],
bandwidth: u,
avgBandwidth: p,
bitrate: f,
videoRange: m,
frameRate: e["FRAME-RATE"],
allowedCPCMap: Om.parseAllowedCPC(e["ALLOWED-CPC"]),
closedcaption: e["CLOSED-CAPTIONS"],
levelCodec: e.CODECS,
score: e.SCORE,
pathwayID: e["PATHWAY-ID"] || "."
},
y = e["HDCP-LEVEL"];
dm(y) && (g.hdcpLevel = y);
var h = e.RESOLUTION;
if (h && (g.width = h.width, g.height = h.height), e.CODECS) {
g.videoCodecList = new Array, g.audioCodecList = new Array;
const t = e.CODECS.split(/[ ,]+/),
i = t["length"];
for (let e = 0; e < i; e++) {
const i = t[e];
switch (i.slice(0, 4)) {
case "avc1":
g.videoCodec = be.avc1toavcoti(i), g.videoCodecList.push(g.videoCodec);
break;
case "avc3":
case "dvav":
case "dva1":
case "hev1":
case "hvc1":
case "dvh1":
case "dvhe":
case "vp09":
g.videoCodec = i, g.videoCodecList.push(g.videoCodec);
break;
default:
g.audioCodec = i, g.audioCodecList.push(g.audioCodec)
}
}
1 < g.audioCodecList.length && (g.audioCodec = fm.getRichestAudioCodec(g.audioCodecList)), 1 < g.videoCodecList.length && (g.videoCodec = fm.getRichestVideoCodec(g.videoCodecList))
}
if (null != (d = "string" != typeof(h = g.pathwayID) ? mm("invalid steering manifest PATHWAY-PRIORITY list item data type") : /^[\w\-\.]+$/.test(h) ? void 0 : mm("steering manifest contains invalid pathway ID: " + h))) break;
let cpc = g.allowedCPCMap ? JSON.stringify(g.allowedCPCMap) : "null";
if (!cpc.includes("WIDEVINE_HARDWARE") && !g.url.includes('trickPlay') && !g.videoCodec.includes("hvc1"))
n.push(g)
}
try{
// console.log(n, window.screen.width)
let ok = (n.map( function(item){return{height : item.height, content: item}}));
let screenHeight = (app.cfg.visual.videoRes ?? window.screen.height) ;
ok.sort(function (a, b) {
return a.height - b.height;
});
for (var i = 0; i < ok.length; i++){
if (ok[i].height > screenHeight){
if (i == 0){n.splice(0,n.length);n.push(ok[i].content)}
else{n.splice(0,n.length);n.push(ok[i-1].content)}
console.log('selected' , n[0].height)
break;
}
}
if (n.length > 1){
n.splice(0,n.length - 1);
}
// console.log(n)
// console.log(ok)
} catch (e){ console.log(e)}
return {
variantMediaOptions: n,
contentSteeringOption: u,
masterVariableList: s,
playlistParsingError: d,
scoreAvailable: c
}
}
static parseAllowedCPC(e) {
if ("string" != typeof e) return null;
const n = {};
return e.split(",").forEach(e => {
const t = e.split(":");
let i, r;
if (2 === t.length) i = t[0].trim(), r = t[1].trim();
else {
if (!(2 < t.length)) return;
r = t[t.length - 1].trim(), t.pop(), i = t.join(":")
}
if (!(i in n)) {
let e = new Array;
"" !== r && (e = r.split("/").map(e => e.trim())), n[i] = e
}
}), n
}
static parseSessionKeys(e, t, i) {
var r;
const n = [];
for (wm.SessionData.lastIndex = 0; r = wm.SessionKeys.exec(e);) try {
const e = Om.parseDecryptData(r[1], t, i);
e && e.isEncrypted && n.push(e)
} catch (e) {}
return n
}
static parseSessionData(e, t) {
var i;
const r = [],
n = new Set;
for (wm.SessionData.lastIndex = 0; null != (i = wm.SessionData.exec(e));) {
const e = Im.parseTags(i[1]);
e.LANGUAGE = pm.shortenLanguageCode(e.LANGUAGE);
const t = e.LANGUAGE ? e["DATA-ID"] + "|" + e.LANGUAGE : void 0;
"DATA-ID" in e ? t && n.has(t) || ("com.apple.hls.other-tags" === e["DATA-ID"] && (e.VALUE = function(t) {
let i;
try {
i = JSON.parse(qc.base64DecodeToStr(t))
} catch (e) {
i = t
}
return i
}(e.VALUE)), r.push(e), t && n.add(t)) : Qe().error(`Error processing DATA-ID ${e["DATA-ID"]} and LANGUAGE ${e.LANGUAGE}`)
}
return {
itemList: r,
baseUrl: t
}
}
}
var km, Cm, Dm, Mm, xm, Pm, Rm = Om;
const Lm = (e, t, i) => {
i = Object.assign(Object.assign({}, e), {
method: "GET",
responseType: "text",
extendMaxTTFB: i
});
return Tu(i.url) ? Pc().load(i, t).pipe(hr(e => ({
responseText: e.data.response.data.toString(),
responseURL: e.data.response.uri,
stats: e.stats
}))) : Cc(i, t).pipe(hr(([e, t]) => ({
responseText: e.responseText,
responseURL: e.responseURL,
stats: t
})))
},
_m = (e, n, t, i, s, a, o, l, r) => {
const {
url: d,
itemId: u,
mediaOptionId: c,
mediaOptionType: h,
iframes: p = !1
} = e, f = Lc(e, i);
return Lm({
url: d,
xhrSetup: t.xhrSetup
}, f, r).pipe(hr(({
responseText: e,
responseURL: t,
stats: i
}) => {
t || (s.warn("Missing response url. Reusing request url as base url"), t = d);
var r = performance.now(),
e = Om.parseMediaOptionPlaylist(e, t, !0, a, l, u, c, h, s, n, p);
Nc(e.mediaOptionDetails);
var t = performance.now(),
e = e["mediaOptionDetails"],
r = {
playlistLoadTimeMs: i.tload - i.trequest,
playlistParseTimeMs: t - r
};
return o.setPlaylistSample(r), {
mediaOptionDetails: e,
stats: i
}
}), (m = h, g = c, y = d, e => e.pipe(Vn(e => {
if (e instanceof pc) throw new uc(!1, "Timeout", 0, $.PlaylistTimeoutError, !0, m, g, y);
if (e instanceof oc) throw new uc(!1, e.message, e.code, {
code: e.code,
text: "Playlist Network Error"
}, !1, m, g, y);
throw e
}))));
var m, g, y
},
Nm = (f, e, m, t, g) => $i(e).pipe(La(e => {
const {
keyTagInfo: t,
isInitSegment: i,
iframe: r,
byteRangeOffset: n
} = f, s = t["method"], {
start: a,
end: o
} = n;
if ("AES-128" !== s) return $i(e); {
!t.uri || t.iv || t.format && "identity" !== t.format || (t.iv = function(t) {
const i = new Uint8Array(16);
for (let e = 12; e < 16; e++) i[e] = t >> 8 * (15 - e) & 255;
return i
}(f.mediaSeqNum));
const n = e,
s = t.key.buffer,
l = t.iv.buffer,
d = o && (r || i) ? o - a : void 0,
u = !m.enableWebCrypto || !!d,
c = s.slice(0),
h = l.slice(0),
p = {
useJSCrypto: u,
plainTextLength: d
};
return g.decrypt(c, h, "AES-CBC", n, p)
}
}));
function Fm(e, t) {
var i = e.fragments,
r = t.mediaSeqNum - e.startSN;
return 0 <= r && r < e.fragments.length && $p(t, i[r])
}
function Bm(t, r, n, s, a = !1, o = !1) {
if (Fm(t, r)) {
var l = r.mediaSeqNum - t.startSN;
let i = t.fragments,
e = i[l];
var {
startDtsTs: d,
startPts: u,
endPts: r
} = r;
a && (i = t.fragments = t.fragments.slice(), e = i[l] = Object.assign({}, e)), e.startDtsTs = d, e.startPts = u, e.endPts = r, !s && void 0 === e.isIframeStart || (e.isIframeStart = s), e.start = n, e.duration = b(r, u);
for (let e = l, t = !0; 0 < e && (o || t); e--) t = Um(i, e, e - 1, s, u.timescale, a);
for (let e = l, t = !0; e < i.length - 1 && (o || t); e++) t = Um(i, e, e + 1, s, u.timescale, a);
l = i[i.length - 1];
t.totalduration = l.start + l.duration - i[0].start, t.ptsKnown = !0
}
}
function Um(e, t, i, r, n, s = !1) {
var a = e[t];
let o = e[i];
var l = null != r && null != o.isIframeStart && o.isIframeStart !== r && o.discoSeqNum === a.discoSeqNum;
let d = o.start;
!l && null != o.startPts || (d = t < i ? a.start + a.duration : Math.max(a.start - o.duration, 0));
n = ne(n) ? 1 / n : Number.EPSILON, n = Math.abs(o.start - d) > n;
return !(!l && !n || (s && (o = e[i] = Object.assign({}, o)), n && (o.start = d), l && (o.isIframeStart = r), 0))
}
function $m(e) {
if (e.programDateTimeMap) {
e.dateMediaTimePairs = [];
for (var [t, i] of Object.entries(e.programDateTimeMap)) {
t = Number(t), i = e.fragments[i - e.startSN];
i && (i = i.start, e.dateMediaTimePairs.push([t, i]))
}
e.dateMediaTimePairs.sort((e, t) => e[0] - t[0])
}
}
class Vm {
constructor(e) {
this.option = e
}
get name() {
return this.option.name
}
get priority() {
return this.option.priority
}
get expiry() {
return this.option.expiry
}
filter(i, e) {
const r = this.option.initFn && this.option.initFn(i, e) || (e ? Object.assign({}, e) : {});
let t = i;
return this.option.firstPassFn && i.forEach((e, t) => this.option.firstPassFn(e, t, r, i)), this.option.filterFn && (t = i.filter((e, t) => this.option.filterFn(e, t, r, i))), null != this.option.filterFn && 0 !== t.length || !this.option.minSortingFn || (t = i.sort((e, t) => this.option.minSortingFn(e, t, r, i))), this.option.finalFn && this.option.finalFn(t, r, i), t
}
}
function Km(e, t, i) {
return (t || []).reduce((e, t) => t.filter(e, i), Array.from(e))
}
function qm(t, e) {
return e.filter(e => {
return Au(t, null !== (e = e.url) && void 0 !== e ? e : null)
})
}
function Hm() {
return [new Vm({
name: "Remove Filter",
priority: 0,
filterFn: (t, e, i) => !i || i.removed.every(e => t.mediaOptionId !== e)
}), new Vm({
name: "Penalty Box Filter",
priority: 1,
filterFn: (t, e, i) => {
const r = performance.now();
return !i || i.penaltyBoxQueue.every(e => e.expiry <= r || t.mediaOptionId !== e.mediaOptionId)
}
}), new Vm({
name: "Compatible IDs Filter",
priority: 1,
filterFn: (t, e, i) => !i || null == i.compatibleIds || i.compatibleIds.some(e => e === t.mediaOptionId)
})]
}
class jm extends kl {
constructor(e, t, i) {
super(e), this.itemId = t, this.mediaOptionType = i, this.allowFilters = this._initFilters()
}
get mediaOptionList() {
var e;
return (null === (e = this.mediaOptionListInfo) || void 0 === e ? void 0 : e.mediaOptions) || null
}
get mediaOptionList$() {
return this.mediaOptionListInfo$.pipe(hr(({
mediaOptions: e
}) => e))
}
mediaOptionFromId(t) {
var e;
return null !== (e = (null !== (e = this.mediaOptionList) && void 0 !== e ? e : []).find(e => e.mediaOptionId === t)) && void 0 !== e ? e : null
}
_getFilteredList(e) {
return Km(e.mediaOptions, this.allowFilters, e)
}
get filteredMediaOptionList() {
return this.mediaOptionListInfo ? this._getFilteredList(this.mediaOptionListInfo) : null
}
get filteredMediaOptionList$() {
return this.mediaOptionListInfo$.pipe(La(e => {
const t = [Wu],
i = performance.now();
for (const r of e.penaltyBoxQueue) ne(r.expiry) && r.expiry > i && t.push(bn(r.expiry - i));
return an(...t).pipe(hr(() => this._getFilteredList(e)))
}), vl())
}
get preferredMediaOptionList() {
return this.filteredMediaOptionList ? qm(this.preferredHost, this.filteredMediaOptionList) : []
}
get preferredMediaOptionList$() {
return ed([this.preferredHost$, this.filteredMediaOptionList$]).pipe(hr(([e, t]) => qm(e, t)))
}
getNewHost(e) {
e = this.getFallbackVariant(e, !1, !0);
return null != e && e.url ? Eu(e.url) : this.preferredHost
}
}
function Qm(e) {
return "PQ" === e.videoRange || "HLG" === e.videoRange
}
function Wm(e, t) {
return t.iframes === e
}
function Gm(e, t, i, r) {
return !r || i.bitrate > r.bitrate && i.bitrate <= e.bitrate ? km.Better : i.bitrate === r.bitrate ? km.Same : km.Worse
}
function zm(e, t) {
return e && !t ? -1 : !e && t ? 1 : 0
}(dl = km = km || {})[dl.Better = 1] = "Better", dl[dl.Same = 0] = "Same", dl[dl.Worse = -1] = "Worse";
class Xm extends jm {
constructor(e, t) {
super(e, t, gu.Variant)
}
static makeFilters() {
return [...Hm().concat([new Vm({
name: "HDR Filter",
priority: 1,
filterFn: (e, t, i) => !i || (i.hasHdrLevels && i.preferHDR) === Qm(e)
}), new Vm({
name: "Viewport Filter",
priority: 1,
firstPassFn: (e, t, i) => {
if (i && e && !e.iframes && e.videoCodec) {
const t = !i.lowestBitrate || e.bitrate < i.lowestBitrate ? e.bitrate : i.lowestBitrate;
i.lowestBitrate = t
}
},
filterFn: (e, t, i) => !(e && i && i.viewportInfo && e.videoCodec && i.lowestBitrate) || function(e, t) {
return e.width < 1.35 * t.width && e.height < 1.35 * t.height && e.width * e.height < t.width * t.height * 1.35
}({
width: e.width,
height: e.height
}, i.viewportInfo) || e.bitrate === i.lowestBitrate
}), new Vm({
name: "HDCP Filter",
priority: 2,
filterFn: (e, t, i) => !i || !dm(i.maxHdcpLevel) || um(e.hdcpLevel) < um(i.maxHdcpLevel)
})])].sort((e, t) => {
return (null !== (e = e.priority) && void 0 !== e ? e : Number.MAX_SAFE_INTEGER) - (null !== (t = t.priority) && void 0 !== t ? t : Number.MAX_SAFE_INTEGER)
})
}
_initFilters() {
return Xm.kAllowFilters
}
get preferredHost() {
var e;
return null !== (e = null === (e = this.mediaOptionListInfo) || void 0 === e ? void 0 : e.preferredHost) && void 0 !== e ? e : null
}
get preferredHost$() {
return this.selectEntity(this.itemId, e => {
return null !== (e = null == e ? void 0 : e.mediaOptionListTuple[gu.Variant].preferredHost) && void 0 !== e ? e : null
})
}
get mediaOptionListInfo() {
var e;
return null !== (e = null === (e = this.getEntity(this.itemId)) || void 0 === e ? void 0 : e.mediaOptionListTuple[gu.Variant]) && void 0 !== e ? e : null
}
get mediaOptionListInfo$() {
return this.selectEntity(this.itemId, e => {
return null === (e = null == e ? void 0 : e.mediaOptionListTuple) || void 0 === e ? void 0 : e[gu.Variant]
}).pipe(Kp())
}
get hdrMode$() {
return this.mediaOptionListInfo$.pipe(hr(e => !0 === e.preferHDR && e.hasHdrLevels), Is())
}
get maxHdcpLevel$() {
return this.selectEntity(this.itemId, e => {
e = null === (e = null == e ? void 0 : e.mediaOptionListTuple) || void 0 === e ? void 0 : e[gu.Variant];
return null == e ? void 0 : e.maxHdcpLevel
}).pipe(Is())
}
listFallbackVariants(t, e, i, r, n) {
var s = this.mediaOptionListInfo,
a = null === (o = this.mediaOptionList) || void 0 === o ? void 0 : o.find(e => e.mediaOptionId === t);
if (!a || !s) return null;
var o = this.makeFilteredListFromVariant(a, e, n);
if (!o) return null;
e = Eu(a.url), s = s.hasScore;
return Xm._listFallbackVariants(o, a, e, s, i, r, n)
}
getFallbackVariant(t, e, i, r) {
var n = this.mediaOptionListInfo,
s = null === (s = this.mediaOptionList) || void 0 === s ? void 0 : s.find(e => e.mediaOptionId === t);
if (!s || !n) return null;
e = this.makeFilteredListFromVariant(s, e, r);
if (!e) return null;
r = Eu(s.url), n = n.hasScore;
return Xm._getFallbackVariant(e, s, r, n, i)
}
makeFilteredListFromVariant(e, t, i) {
let r = this.mediaOptionListInfo;
if (!e || !this.mediaOptionList || !r) return null;
r = Object.assign(Object.assign({}, r), {
includeAllEligiblePathways: !0
});
e = Array.from(this.mediaOptionList);
let n = t ? Km(e, this.allowFilters, Object.assign(Object.assign({}, r), {
preferHDR: !1,
compatibleIds: null
})) : this._getFilteredList(r);
return n ? (i && 0 < i.length && (n = n.filter(e => !i.includes(e.mediaOptionId))), n) : null
}
get hasIframes() {
var e;
return null !== (e = null === (e = this.mediaOptionListInfo) || void 0 === e ? void 0 : e.hasIframeLevels) && void 0 !== e && e
}
canSwitchToSDR(e, t, i = !1) {
var r = this.mediaOptionListInfo;
if (!this.mediaOptionList || !r) return !1;
var n = this.mediaOptionFromId(e);
if (!n) return !1;
if (!Qm(n)) return !1;
var s = Eu(n.url),
e = Km(Array.from(this.mediaOptionList), this.allowFilters, Object.assign(Object.assign({}, r), {
preferHDR: !1,
compatibleIds: null
})),
r = r.hasScore;
return null != Xm._getFallbackVariant(e, n, s, r, t, i)
}
static _listFallbackVariants(e, r, n, t, s, a = !1, i = null) {
let o = !1;
const l = function(e, s, a) {
const t = [...e],
o = Eu(s.url),
l = s.audioGroupId;
return t.sort((e, t) => {
let i = 0;
var r = a && ne(e.score) && ne(t.score),
n = r ? e.score > t.score && e.score <= s.score : e.bitrate > t.bitrate && e.bitrate <= s.bitrate,
r = r ? e.score === t.score : e.bitrate === t.bitrate;
return n ? i = -1 : r ? (i = zm(Au(o, e.url), Au(o, t.url)), 0 === i && (i = zm(!l || e.audioGroupId === l, !l || t.audioGroupId === l))) : i = 1, i
}), t
}(e.filter(e => {
var t = !(e.iframes !== r.iframes || s && Au(n, e.url)),
i = a ? e.bitrate < r.bitrate : e.bitrate <= r.bitrate,
i = t && i;
return r.mediaOptionId === e.mediaOptionId ? (o = i, !1) : i
}), r, t);
return !o || i && i.includes(r.mediaOptionId) || l.unshift(r), l
}
static _getFallbackVariant(e, t, i, r, n, s = !1) {
let a = null;
e = (e = s ? e.filter(e => e.bitrate < t.bitrate) : e).filter(e => e.mediaOptionId !== t.mediaOptionId && e.iframes === t.iframes);
if (n && null != i)
for (const o of e) Gm(t, 0, o, a) !== km.Better || Au(i, o.url) || (a = o);
else
for (const o of e) {
const r = Gm(t, 0, o, a);
r !== km.Better && (r !== km.Same || !Au(i, o.url) || Au(i, a.url) && o.audioGroupId !== t.audioGroupId) || (a = o)
}
return a
}
getMatchingVariant(e, t) {
var i = this.mediaOptionFromId(e),
r = Eu(null == i ? void 0 : i.url),
n = t.mediaOptionType === gu.AltAudio ? "audioGroupId" : "subtitleGroupId";
let s = null;
this.mediaOptionListInfo.hasScore;
for (const e of this.filteredMediaOptionList)
if (e[n] === t.groupId) {
if (!i) {
s = e;
break
}
var a = Gm(i, 0, e, s);
a !== km.Better && (a !== km.Same || s.mediaOptionId === i.mediaOptionId || e.mediaOptionId !== i.mediaOptionId && !Au(r, e.url)) || (s = e)
} return s
}
get currentPathwayID() {
var e;
return null === (e = this.mediaOptionListInfo) || void 0 === e ? void 0 : e.currentPathwayID
}
}
function Ym(e, t) {
switch (e) {
case Cm.SendAlternateToPenaltyBox:
e = Cm.RetryRequest, 401 !== t && 403 !== t && 407 !== t && t !== $.CorruptStream.code && t !== $.LivePlaylistUpdateError.code || (e = Cm.SendEndCallback);
break;
case Cm.RemoveAlternatePermanently:
e = Cm.SendEndCallback
}
return e
}
function Jm(e, t, i, r, n, s, a, o = !1) {
const l = s.mediaOptionListQueries[n],
d = 0 != (e.errorActionFlags & Dm.MoveAllAlternatesMatchingHost),
u = s.mediaOptionListQueries[n].mediaOptionFromId(r),
c = a.getFallbackMediaOptionTupleFromMediaOptionId(s, n, r, u.backingMediaOptionId, !1, d, o);
let {
errorAction: h,
errorActionFlags: p
} = e;
return s.isValidMediaOptionTuple(c) ? Au(l.preferredHost, c[n].url) && (p &= ~Dm.MoveAllAlternatesMatchingHost) : (t || (h = Ym(h, i), p = 0), l instanceof Xm && (!0 === l.mediaOptionFromId(r).iframes ? (h = Cm.DoNothing, p = 0) : !t && a.canSwitchToSDR(s, r, d, o) && (h = e.errorAction, p = Dm.SwitchToSDR))), {
errorAction: h,
errorActionFlags: p
}
}
function Zm(e) {
let t, i = 0;
switch (e) {
case 0:
t = Cm.SendAlternateToPenaltyBox, i = Dm.MoveAllAlternatesMatchingHost;
break;
case 410:
t = Cm.RemoveAlternatePermanently;
break;
case 500:
case 502:
case 503:
case 504:
case 404:
case 409:
case 401:
case 403:
case 407:
case $.LivePlaylistUpdateError.code:
case $.PlaylistNotReceived.code:
default:
t = Cm.SendAlternateToPenaltyBox, i = 0
}
return {
errorAction: t,
errorActionFlags: i
}
}
function eg(i, r, n, s, a, o, l) {
var {
errorAction: d,
errorActionFlags: u
} = i;
let e = !0;
switch (d) {
case Cm.RemoveAlternatePermanently:
case Cm.SendAlternateToPenaltyBox: {
if (null == a || null == o) return r.handled = !1;
const i = n.itemId;
let e = o,
t = n.mediaOptionListQueries[a].mediaOptionFromId(o);
t.backingMediaOptionId && (e = t.backingMediaOptionId, t = n.mediaOptionListQueries[a].mediaOptionFromId(e));
var c = 0 != (u & Dm.MoveAllAlternatesMatchingHost),
h = 0 != (u & Dm.MoveAllAlternatesMatchingHDCP),
p = 0 != (u & Dm.SwitchToSDR),
f = d === Cm.RemoveAlternatePermanently;
if (h && "hdcpLevel" in t) {
const r = t.hdcpLevel;
s.setMaxHdcpLevel(i, r)
}
if (p && s.switchToSDROnly(i), c) {
const r = Eu(t.url);
s.moveAllWithMatchingHosts(i, a, r, f)
} else f ? s.removePermanently(i, a, e) : s.addToPenaltyBox(i, a, e);
if (n.enabledMediaOptionIdByType(a) === o) {
let e = [Lu, Lu, Lu];
e = s.getFallbackMediaOptionTupleFromMediaOptionId(n, a, o, null, !1, c, l), n.isValidMediaOptionTuple(e) ? s.setPreferredHost(i, Eu(e[gu.Variant].url)) : r.fatal = !0, r.fatal && (e = [Lu, Lu, Lu]), s.setNextMediaOptions(n.itemId, e)
}
break
}
case Cm.SendEndCallback:
r.fatal = !0;
break;
case Cm.RetryRequest:
case Cm.DoNothing:
default:
e = !1
}
return r.handled = e, e
}
function tg(e, t) {
t instanceof dc || t instanceof uc || t instanceof hc || (t instanceof gc || t instanceof mc) && le(t.keyuri)
}
function ig(t, i, r) {
if (t.handled = !0, r && i < r.maxNumRetry && ne(r.retryDelayMs)) {
let e;
return e = "linear" === r.backoff ? (i + 1) * r.retryDelayMs : Math.pow(2, i) * r.retryDelayMs, e = Math.min(r.maxRetryDelayMs, e), tg(0, t), bn(e)
}
return t.fatal = !0, tg(0, t), Vi(t)
}
function rg(e, t, i, r, n, s, a, o, l = !1) {
return (null == r ? void 0 : r.errorAction) === Cm.RetryRequest ? ig(e, t, i, s.logger) : ng(e, 0, r, n, s, a, o, l)
}
function ng(e, t, i, r, n, s, a, o = !1) {
const l = new er;
return al(() => {
i && (tg(n.logger, e), eg(i, e, r, n, s, a, o)), l.error(e)
}), l
}
function sg(t, i, r, n) {
return e => e.pipe(Vn(e => {
if (t.logger.error(`Got demux error ${e.message}`), e instanceof D || e instanceof F) {
Cm.SendAlternateToPenaltyBox;
return ng(e, 0, {
errorAction: e.fatal ? Cm.SendEndCallback : e instanceof F ? Cm.SendAlternateToPenaltyBox : Cm.RemoveAlternatePermanently,
errorActionFlags: 0
}, i, t, r, n)
}
throw e
}))
}
function ag(e, t, i, r, n) {
e = null !== (e = null === (e = n.getKeyInfo(e)) || void 0 === e ? void 0 : e.mediaOptionIds) && void 0 !== e ? e : [];
for (const s of e)
for (const n of i.mediaOptionListQueries) null != n.mediaOptionFromId(s) && r.updateConsecutiveTimeouts(i.itemId, n.mediaOptionType, t, "key")
}
function og(r, t, e, n, s, a) {
const o = n.logger,
i = s.enabledMediaOptionKeys,
l = [];
for (const t of r.mediaOptionIds) {
const r = i.some(e => e.mediaOptionId === t),
e = s.mediaOptionListQueries.find(e => null != e.mediaOptionFromId(t));
if (e) {
const n = e.mediaOptionType,
a = {
mediaOptionId: t,
mediaOptionType: n
};
r ? l.push(a) : l.unshift(a)
} else o.warn(`Couldn't find query for ${t}`)
}
const d = new er;
return al(() => {
const e = r instanceof mc;
ag(r.keyuri, e, s, n, a);
let t, i = !1;
for (const {
mediaOptionId: e,
mediaOptionType: a
} of l) t = function(e, t, i, r, n) {
let s = {
errorAction: Cm.SendAlternateToPenaltyBox,
errorActionFlags: 0
};
if (e instanceof mc) s.errorAction = Cm.SendAlternateToPenaltyBox;
else {
const t = e.isOkToRetry;
e.keyErrorReason === rc.OutputRestricted ? (s.errorAction = Cm.RemoveAlternatePermanently, s.errorActionFlags |= Dm.MoveAllAlternatesMatchingHDCP) : t ? s = Zm(e.code) : s.errorAction = Cm.RemoveAlternatePermanently
}
s.errorActionFlags &= ~Dm.MoveAllAlternatesMatchingHost;
var a = r.enabledMediaOptionIdByType(i);
return t === a ? Jm(s, !1, e.code, a, i, r, n, e.isTimeout) : s
}(r, e, a, s, n), o.error(`[Keys] handleNetworkError uri=${le(r.keyuri)} mediaOptionId=${e} mediaOptionType=${a} action=${JSON.stringify(t)}`), t.errorAction === Cm.RetryRequest && (i = !0), eg(t, r, s, n, a, e);
i ? (d.next(), d.complete()) : (tg(0, r), d.error(r))
}), d.pipe(La(() => ig(r, t, e, n.logger)))
}
function lg(t, i, r, n, s, a, o, l) {
return n = Math.max(0, n), e => e.pipe(Za(() => {
null != i && o.updateConsecutiveTimeouts(t, i, !1, "load")
}), va(e => e.pipe(jr((e, t) => function(e, t, i, r, n, s, a, o) {
var l;
if (!(e instanceof p)) return Vi(e);
let d, u, c, h = !1;
if (e instanceof dc) c = {
errorAction: Ym(Zm((l = e).response.code).errorAction, l.response.code),
errorActionFlags: 0
};
else if (e instanceof uc || e instanceof hc) {
({
mediaOptionType: u,
mediaOptionId: d,
isTimeout: h
} = e);
const t = null === (l = s.mediaOptionListQueries[u]) || void 0 === l ? void 0 : l.mediaOptionFromId(d);
if (!r && e.isTimeout && null != t && (!("iframes" in t) || !0 !== t.iframes) && (a.updateConsecutiveTimeouts(s.itemId, e.mediaOptionType, !0, "load"), e instanceof hc && e.stats)) {
const t = performance.now();
o.setBandwidthSample(Object.assign(Object.assign({}, e.stats), {
tfirst: e.stats.tfirst || t,
tload: e.stats.tload || t,
complete: !0,
mediaOptionType: u
}))
}
c = function(e, t, i, r, n) {
var s = e.response.code;
let a = Zm(s);
var {
mediaOptionId: o,
mediaOptionType: l
} = e;
return t ? a.errorActionFlags &= ~Dm.MoveAllAlternatesMatchingHost : a = function(e, t, i, r, n) {
let {
errorAction: s,
errorActionFlags: a
} = t;
if (e.isTimeout) {
const t = e["mediaOptionType"],
o = null !== (n = null === (n = n.getErrorInfoByType(t)) || void 0 === n ? void 0 : n.timeouts.load) && void 0 !== n ? n : 0;
!i && r <= o && (s = Cm.DoNothing, a = 0)
}
return {
errorAction: s,
errorActionFlags: a
}
}(e, a, t, i, r), a = Jm(a, t, s, o, l, r, n, e.isTimeout), a
}(e, r, n, s, a)
}
return rg(e, t, i, c, s, a, u, d, h)
}(e, t, _c(e, r), s, n, a, o, l)))))
}
Xm.kAllowFilters = Xm.makeFilters(), (dl = Cm = Cm || {})[dl.DoNothing = 0] = "DoNothing", dl[dl.SendEndCallback = 1] = "SendEndCallback", dl[dl.SendAlternateToPenaltyBox = 2] = "SendAlternateToPenaltyBox", dl[dl.RemoveAlternatePermanently = 3] = "RemoveAlternatePermanently", dl[dl.InsertDiscontinuity = 4] = "InsertDiscontinuity", dl[dl.RetryRequest = 5] = "RetryRequest", (dl = Dm = Dm || {})[dl.MoveAllAlternatesMatchingHost = 1] = "MoveAllAlternatesMatchingHost", dl[dl.MoveAllAlternatesMatchingHDCP = 2] = "MoveAllAlternatesMatchingHDCP", dl[dl.SwitchToSDR = 4] = "SwitchToSDR";
class dg extends kl {
constructor(e) {
super(e)
}
get currentConfig() {
var e;
return null === (e = this.getActive()) || void 0 === e ? void 0 : e.config
}
get extendMaxTTFB() {
var e;
return null === (e = this.getActive()) || void 0 === e ? void 0 : e.extendMaxTTFB
}
get config$() {
return this.selectActive(e => null == e ? void 0 : e.config)
}
get userSeek$() {
return this.selectActive(e => null == e ? void 0 : e.userSeek)
}
}
A();
class ug extends fl {
constructor() {
super({}, {
name: "hls-store",
producerFn: su
})
}
}
class cg {
constructor(e) {
this.store = e
}
getQuery() {
return new dg(this.store)
}
setHlsEntity(e) {
const t = e.id;
Do(`hls.set.entity ${t}`), al(() => {
this.store.add(de(e)), this.store.setActive(t)
})
}
removeEntity(e) {
Do(`hls.remove ${e}`), this.store.remove(e)
}
setStartTime(t) {
this.store.updateActive(e => {
e.config.startPosition = t
})
}
setUserSeek(t) {
this.store.updateActive(e => {
e.userSeek = t
})
}
setExtendMaxTTFB(t) {
this.store.updateActive(e => {
e.extendMaxTTFB = t
})
}
}
let hg, pg;
function fg() {
return hg = hg || new cg(new ug), hg
}
function mg() {
return fg().getQuery().currentConfig
}
function gg(r, n) {
if ("VOD" !== r.type && "VOD" !== n.type && r.iframesOnly === n.iframesOnly) {
const s = r.mediaOptionId === n.mediaOptionId,
a = Math.max(r.startSN, n.startSN) - n.startSN,
o = Math.min(r.endSN, n.endSN) - n.startSN,
l = n.startSN - r.startSN,
d = r.fragments,
u = n.fragments;
let t = 0;
for (let e = a; e <= o; ++e)
if (d[l + e] && u[e]) {
t = d[l + e].discoSeqNum - u[e].discoSeqNum;
break
} const c = {};
let i = null;
for (let e = 0; e < u.length; e++) {
const h = d[l + e],
a = u[e];
if (t) {
const r = a.discoSeqNum + t;
n.initSegments[a.discoSeqNum] && (n.initSegments[a.discoSeqNum].discoSeqNum = r, c[r] = n.initSegments[a.discoSeqNum], delete n.initSegments[a.discoSeqNum]), a.discoSeqNum = r
}
s && a.mediaSeqNum === (null == h ? void 0 : h.mediaSeqNum) && null != h.startPts && (a.start = h.start, a.duration = h.duration, a.startDtsTs = h.startDtsTs, a.endDtsTs = h.endDtsTs, a.startPts = h.startPts, a.endPts = h.endPts, i = a)
}
if (Object.keys(c).length && (n.initSegments = c), i) Bm(n, i, i.start, void 0, !1, !0);
else if (0 <= l && l < d.length) {
const r = d[l].start,
h = n.fragments;
for (let e = 0; e < u.length; e++) h[e].start += r
}
n.ptsKnown = n.ptsKnown || s && !0 === r.ptsKnown && r.endSN >= n.startSN, $m(n)
}
}
function yg(e, t, i) {
let r = t.targetduration;
return ne(i.liveSyncDuration) ? r = i.liveSyncDuration : ne(i.liveSyncDurationCount) && (r = i.liveSyncDurationCount * t.targetduration), e + Math.max(0, t.totalduration - r)
}
function vg(e, t, i, r, n) {
if (!t.ptsKnown) return 0;
var s = t.targetduration,
a = t.fragments[0].start,
r = n.canContinuePlaybackWithoutGap(t, i, {
avgPlaylistLoadTimeMs: 0,
avgPlaylistParseTimeMs: 0
}, r);
let o = Math.max(0, e - s);
return e < a && !r && (o = a), o
}
function Sg(e) {
return 1e3 * (e.averagetargetduration || e.targetduration)
}
function bg(e, t) {
var i = Sg(e),
t = performance.now() - t;
return e.liveOrEvent && i <= t
}
function Tg(t, i, r = NaN) {
var n = t.fragments;
for (let e = r > t.startSN ? r - t.startSN : 0; e < n.length; ++e) {
const t = n[e],
r = t["start"];
if (i(t)) return {
timelineOffset: r,
mediaFragment: t
}
}
return null
}
function Eg(e, t, i) {
var r = 0 < i.duration,
n = i.start + i.duration,
n = null == t || t < n || t - n < 1 && i.isLastFragment,
e = e.every(e => !$p(e.frag, i));
return r && e && n
}
function Ig(e, t, i, r, n) {
i = null !== (i = Tg(r, Eg.bind(null, n, void 0), i)) && void 0 !== i ? i : null;
let s = null;
i && (s = null !== (e = Tg(r, Eg.bind(null, n, e), i.mediaFragment.mediaSeqNum)) && void 0 !== e ? e : null, s || !r.liveOrEvent || r.ptsKnown || (s = i));
let a = NaN;
null != s && ne(t) && s.mediaFragment.discoSeqNum !== t && (a = s.mediaFragment.discoSeqNum, s = null);
t = n.some(e => 0 < e.frag.framesWithoutIDR);
return s && t && n[n.length - 1].frag.mediaOptionId !== r.mediaOptionId && (s = null !== (r = Tg(r, e => e.mediaSeqNum === s.mediaFragment.mediaSeqNum - 1)) && void 0 !== r ? r : s), {
foundFrag: s,
nextDisco: a
}
}
function wg(e) {
e = e.fragments[e.fragments.length - 1];
return e ? e.start + e.duration : 0
}
class Ag extends kl {
constructor(e, t) {
super(e), this.mediaOption = t
}
get itemId() {
return this.mediaOption.itemId
}
get mediaOptionId() {
return this.mediaOption.mediaOptionId
}
get initSegmentEntities() {
var e;
return null === (e = this.mediaOptionDetailsEntity) || void 0 === e ? void 0 : e.initSegmentCacheEntities
}
get mediaLibraryEntity() {
return this.getEntity(this.itemId)
}
get mediaOptionDetailsEntityRecord() {
var e;
return null === (e = this.mediaLibraryEntity) || void 0 === e ? void 0 : e.mediaOptionDetailsEntityRecord
}
get mediaOptionDetailsEntity() {
return this.mediaOptionDetailsEntityRecord ? this.mediaOptionDetailsEntityRecord[this.mediaOptionId] : null
}
get mediaOptionDetails() {
var e;
return null === (e = this.mediaOptionDetailsEntity) || void 0 === e ? void 0 : e.mediaOptionDetails
}
get playlistDuration() {
var e;
return null === (e = this.mediaOptionDetailsEntity) || void 0 === e ? void 0 : e.playlistDuration
}
get mediaOptionDetailsEntity$() {
const {
itemId: e,
mediaOptionId: t
} = this;
return this.selectEntity(e, e => {
if (null != e && e.mediaOptionDetailsEntityRecord) return null == e ? void 0 : e.mediaOptionDetailsEntityRecord[t]
})
}
get mediaOptionDetails$() {
return this.selectEntity(this.itemId, e => {
return null === (e = null == e ? void 0 : e.mediaOptionDetailsEntityRecord[this.mediaOptionId]) || void 0 === e ? void 0 : e.mediaOptionDetails
}).pipe(Kp())
}
get playlistDuration$() {
return this.mediaOptionDetailsEntity$.pipe(hr(e => null == e ? void 0 : e.playlistDuration), Kp(), Is())
}
get live$() {
return this.mediaOptionDetails$.pipe(hr(e => null == e ? void 0 : e.liveOrEvent), Is())
}
}
class Og extends fl {
constructor() {
super({}, {
name: "media-library-store",
idKey: "itemId",
producerFn: su
})
}
}
class kg {
constructor(e) {
this.store = e
}
getQuery() {
return new kl(this.store)
}
getQueryForOption(e) {
return new Ag(this.store, e)
}
createMediaLibraryEntity(e) {
var t = {
itemId: e,
mediaOptionDetailsEntityRecord: {}
};
Do(`library.entity.create: ${e}`), this.store.add(t)
}
setDetailsLoading(e) {
const {
itemId: t,
mediaOptionId: i
} = e;
Do(`library.details.loading: ${i}`), this.store.update(t, ({
mediaOptionDetailsEntityRecord: e
}) => {
e[i] || (e[i] = {
initSegmentCacheEntities: {},
unchangedCount: 0
}), e[i].detailsLoading = !0
})
}
archiveMediaOptionDetails(i, r, n) {
const {
itemId: e,
mediaOptionId: s
} = i, a = performance.now(), o = wg(i);
Do(`library.details.loaded: ${s}`), this.store.update(e, e => {
const t = e.mediaOptionDetailsEntityRecord[s];
t.detailsLoading = !1, t.mediaOptionDetails = i, t.lastUpdateMillis = a, n ? t.unchangedCount = 0 : ++t.unchangedCount, t.playlistDuration = o, t.stats = r, e.liveOrEvent = i.liveOrEvent
})
}
setInitSegmentLoading(e) {
const {
itemId: t,
mediaOptionId: i,
discoSeqNum: r
} = e;
Do(`library.initsegs.loading: ${i}/${r}`), this.store.update(t, e => {
e.mediaOptionDetailsEntityRecord[i].initSegLoading = r
})
}
archiveInitSegmentEntity(i, r) {
const {
itemId: e,
mediaOptionId: n,
discoSeqNum: s
} = i;
Do(`library.initseg.loaded: ${n}/${s}`), this.store.update(e, ({
mediaOptionDetailsEntityRecord: e
}) => {
const t = e[n];
t.initSegmentCacheEntities[s] = [i, r], t.initSegLoading = null
})
}
updatePTSDTS(e, i, t, r) {
var n = null === (n = this.getQueryForOption({
itemId: e,
mediaOptionId: i
})) || void 0 === n ? void 0 : n.mediaOptionDetails;
if (n && Fm(n, r)) {
const s = r["startDtsTs"],
{
variantDTS: a,
timelineOffset: o,
iframeMode: l
} = t,
d = b(s, a) + o,
u = Object.assign({}, n);
Bm(u, r, d, l, !0), $m(u);
const c = wg(u);
this.store.update(e, ({
mediaOptionDetailsEntityRecord: e
}) => {
const t = e[i];
null != t && t.mediaOptionDetails && (t.mediaOptionDetails = u, t.playlistDuration = c)
})
}
}
remove(e) {
this.store.remove(e)
}
clear() {
this.store.remove()
}
}
function Cg() {
return pg = pg || new kg(new Og), pg
}
const Dg = e => Cg().getQueryForOption(e),
Mg = (d, e, t = !1, i = !1) => {
if (null == e || !_u(e)) return $i(null);
const r = e["itemId"],
n = d["mediaLibraryService"],
s = n.getQueryForOption(e);
s.hasEntity(r) || n.createMediaLibraryEntity(r);
var a = s.mediaOptionDetailsEntity,
o = s.mediaOptionDetails;
return null == o || i || "VOD" !== o.type && (!o.liveOrEvent || bg(o, a.lastUpdateMillis)) ? (n.setDetailsLoading(e), function(u, e) {
var t;
const {
logger: i,
config: c,
rootPlaylistQuery: h,
rootPlaylistService: p,
statsService: r,
mediaLibraryService: f,
mediaSink: n
} = d, m = n.mediaQuery, s = c.playlistLoadPolicy, a = c.keySystemPreference, o = h.masterVariableList, l = null === (t = null === (t = fg()) || void 0 === t ? void 0 : t.getQuery()) || void 0 === t ? void 0 : t.extendMaxTTFB;
return _m(u, h.itemStartOffset, c, s, i, a, r, o, l).pipe(hr(e => {
const t = f.getQueryForOption(u),
i = t.mediaOptionDetails,
r = e["mediaOptionDetails"],
n = e["stats"];
let s = !0;
if (r.liveOrEvent) {
const d = r["mediaOptionType"];
e = r, s = null == i || e.endSN !== i.endSN || e.liveOrEvent !== i.liveOrEvent, i && gg(i, r);
const u = h.lastLoadedMediaOptionByType(d),
t = u ? null === (l = f.getQueryForOption(u)) || void 0 === l ? void 0 : l.mediaOptionDetails : null;
!r.ptsKnown && t && t.mediaOptionId !== (null == i ? void 0 : i.mediaOptionId) && gg(t, r)
}
r && al(() => {
f.archiveMediaOptionDetails(r, n, s), p.setLastLoadedMediaOptionByType(h.itemId, u.mediaOptionType, u)
});
const a = !s && t.mediaOptionDetailsEntity.unchangedCount >= c.liveMaxUnchangedPlaylistRefresh,
o = function(e, t, i, r) {
t = vg(r.currentTime, e, t, i, r), i = e.fragments[e.fragments.length - 1], r = (null == i ? void 0 : i.start) + (null == i ? void 0 : i.duration);
return {
expired: null != i && e.liveOrEvent && e.ptsKnown && r < t,
windowEnd: r,
minPosition: t
}
}(r, n.tload, c.maxBufferHole, m);
if (a || o.expired) {
var l = a ? $.LivePlaylistUpdateError : {
text: `Live window too far in the past end:${o.windowEnd.toFixed(3)} minPosition:${o.minPosition}`,
code: 0
};
throw new uc(!1, l.text, l.code, l, !1, u.mediaOptionType, u.mediaOptionId, u.url)
}
return r
}), tc("getMediaOptionDetailsCommon.emit.loaded"), lg(u.itemId, u.mediaOptionType, Lc(u, s), c.maxNumAddLevelToPenaltyBox, e, h, p, r)).pipe(Ds(1))
}(e, t)) : $i(o).pipe(tc("retrieveMediaOptionDetails.emit.cached")).pipe(Ds(1))
};
const xg = (t, i) => {
if (!i) return $i(null);
const r = t["logger"],
{
mediaLibraryService: e,
mediaParser: n
} = t,
s = e.getQueryForOption(i),
{
mediaOption: a,
mediaOptionDetailsEntityRecord: o,
mediaOptionDetails: l
} = s,
d = a["mediaOptionId"];
if (null == o || !o[d]) throw new Error("retrieveInitSegmentCacheEntity no details entity");
if (!l) throw new Error("retrieveInitSegmentCacheEntity no details");
var u = o[d]["initSegmentCacheEntities"],
c = l["initSegments"],
h = i["discoSeqNum"];
if (u[h]) {
const [t, r] = u[h];
let e = t;
return r && (e = n.willBeTrackSwitch(i) ? t : r), $i(e)
}
const p = c[h];
return p ? (e.setInitSegmentLoading(p), r.child({
name: "timing"
}), Rg(t, p, !1, !1).pipe(Za(() => {}), ji(tr), La(e => Pg(e, p, t)), Za(() => {}))) : $i(null)
};
function Pg(e, n, t) {
const {
logger: s,
mediaSink: i,
rootPlaylistService: r,
rootPlaylistQuery: a,
mediaParser: o,
mediaLibraryService: l,
gaplessInstance: d
} = t, u = i["mediaQuery"], c = l.getQueryForOption(n), {
mediaOption: h,
mediaOptionDetails: p
} = c, {
itemId: f,
mediaOptionId: m
} = h, {
keyTagInfo: g,
discoSeqNum: y,
mediaOptionType: v
} = n, S = u.seeking, b = p.liveOrEvent, T = v === gu.Variant && p.ptsKnown;
let E, I;
n.isInitSegment ? I = new Uint8Array(e) : E = new Uint8Array(e);
var e = {
segment: E,
initSegment: I,
frag: n,
ptsKnown: T,
seeking: S,
live: b,
totalDuration: p.totalduration
};
return o.parseInitSegment(e, null !== (e = null === navigator || void 0 === navigator ? void 0 : navigator.vendor) && void 0 !== e ? e : "").pipe(hr(e => {
var {
track: t,
moovData: i,
mimeType: r
} = e, e = t["initSegment"];
d.inGaplessMode && be.isVideoCodec(t.codec) && (s.warn(`Video codec discovered in gapless mode codec:${t.codec}`), d.dequeueSource("InvalidFormat"));
r = {
itemId: f,
mediaOptionId: m,
discoSeqNum: y,
initParsedData: i,
data: e,
mimeType: r,
keyTagInfo: g,
fragment: n
};
return l.archiveInitSegmentEntity(r), r
}), sg(r, a, v, m))
}
function Rg(n, s, i, r) {
var e;
const {
rootPlaylistQuery: t,
rootPlaylistService: a,
config: o,
rtcService: l,
statsService: d
} = n, {
itemId: u,
mediaOptionType: c
} = s, h = o.fragLoadPolicy, p = ne(s.mediaSeqNum);
let f;
p && (f = {
getData: !1,
cb: (e, t, i, r) => (a.updateInflightFrag(u, s.mediaOptionType, s, "loading", i), !1)
});
let m = !1;
r && null === l.serverInfoInstance && (m = !0);
const g = nm(s, o, h, f, m, null === (e = null === (e = fg()) || void 0 === e ? void 0 : e.getQuery()) || void 0 === e ? void 0 : e.extendMaxTTFB).pipe(Za(([, , e, t]) => {
i && d.setBandwidthSample(Object.assign(Object.assign({}, e), {
mediaOptionType: s.mediaOptionType
})), r && m && (l.serverInfoInstance = t), p && a.updateInflightFrag(u, s.mediaOptionType, s, "loaded", e)
}), Za(([e, , t]) => {
r && l.handleFragLoaded(e, t)
}), lg(u, c, Lc(s, h), o.maxNumAddLevelToPenaltyBox, !1, t, a, d));
return "AES-128" === (null === (e = s.keyTagInfo) || void 0 === e ? void 0 : e.method) ? en([_g(n, s.keyTagInfo, {
itemId: s.itemId,
mediaOptionId: s.mediaOptionId
}), g]).pipe(La(([e, t]) => {
const [i, r] = t;
return i.keyTagInfo.key = e.key, Nm(i, r, o, n.logger, n.rpcClients.crypto)
})) : g.pipe(hr(e => e[1]))
}
const Lg = (i, r, e) => {
const {
rootPlaylistService: n,
rootPlaylistQuery: s
} = i, {
timelineOffset: a,
mediaFragment: o
} = e.foundFrag, {
itemId: l,
discoSeqNum: d
} = o;
return xg(i, o).pipe(La(t => (n.updateInflightFrag(l, o.mediaOptionType, o, "loading", null), Rg(i, o, !0, !0).pipe(La(e => {
return n.updateInflightFrag(l, r, o, "parsing", null),
function(e, t, i, y, v, S) {
const r = new Uint8Array(e),
{
legibleSystemAdapter: n,
rootPlaylistService: s,
mediaSink: a,
mediaParser: o,
rootPlaylistQuery: l,
mediaLibraryService: b
} = S,
d = a["mediaQuery"],
u = b.getQueryForOption(y),
{
mediaOption: c,
mediaOptionDetails: h
} = u,
p = h["initSegments"],
{
itemId: T,
mediaOptionId: E
} = c,
{
discoSeqNum: I,
mediaSeqNum: w,
mediaOptionType: f,
isLastFragment: A
} = y,
m = d.seeking,
g = h.liveOrEvent,
O = p[I],
k = f === gu.Variant && h.ptsKnown,
C = {
segment: r,
frag: y,
seeking: m,
live: g,
ptsKnown: k,
totalDuration: h.totalduration,
defaultInitPTS: t,
iframeMediaStart: Up(y) ? y.iframeMediaStart : void 0,
iframeDuration: Up(y) ? y.iframeMediaDuration : void 0,
iframeOriginalStart: Up(y) ? y.iframeOriginalStart : void 0
};
let D;
if (null != i && (null === (t = y.keyTagInfo) || void 0 === t ? void 0 : t.uri) === (null === (t = i.keyTagInfo) || void 0 === t ? void 0 : t.uri)) D = $i(i);
else if (null != i) {
const M = Object.assign(Object.assign({}, i.fragment), {
keyTagInfo: y.keyTagInfo
});
D = Pg(O ? i.data : e, M, S)
} else D = Pg(e, y, S);
return D.pipe(La(m => {
const g = performance.now();
if (null != m) {
const g = m["data"],
e = new Uint8Array(g);
C.initSegment = e
}
return y.mediaOptionType === gu.Variant && (null == n || n.setupForFrag(y)), o.parseSegment(C, "").pipe(hr(e => {
var t = performance.now(),
{
startPTS: i,
startDTS: r,
endPTS: n,
endDTS: s,
firstKeyframePts: a,
framesWithoutIDR: o,
dropped: l,
data1: d,
data2: u,
captionData: c,
id3Samples: h,
parsedInitSegment: e
} = e,
t = {
durationSec: n.baseTime / n.timescale - i.baseTime / i.timescale,
parseTimeMs: t - g
};
S.statsService.setFragSample(t);
let p = Object.assign({}, m);
if (e) {
const {
track: g,
moovData: f,
mimeType: v
} = e, S = g["initSegment"];
p = {
itemId: T,
mediaOptionId: E,
discoSeqNum: I,
initParsedData: f,
data: S,
mimeType: v,
keyTagInfo: y.keyTagInfo,
fragment: y
}, b.archiveInitSegmentEntity(m, p)
}
e = y.keyTagInfo;
return [p, {
itemId: T,
mediaOptionId: E,
mediaSeqNum: w,
discoSeqNum: I,
startDtsTs: r,
endDtsTs: s,
timelineOffset: v,
firstKeyframePts: a,
framesWithoutIDR: o,
dropped: l,
data1: d,
data2: u,
startPts: i,
endPts: n,
keyTagInfo: e,
isLastFragment: A,
iframe: null !== (e = y.iframe) && void 0 !== e && e,
duration: y.duration,
iframeMediaDuration: Up(y) ? y.iframeMediaDuration : void 0,
iframeOriginalStart: Up(y) ? y.iframeOriginalStart : void 0,
captionData: c,
id3Samples: h
}]
}))
}), sg(s, l, f, E))
}(e, null === (e = s.getInitPTS(d)) || void 0 === e ? void 0 : e.offsetTimestamp, t, o, a, i)
}), Za(e => {
n.updateInflightFrag(l, r, o, "parsed", null)
}), tc(`retrieveMediaFragmentCacheEntity.${r}.emit`)))), Ds(1))
};
function _g(e, t, i) {
const {
keySystemAdapter: r,
rootPlaylistQuery: n,
rootPlaylistService: s,
config: a
} = e;
return r.getKeyFromDecryptData(t, i).pipe((o = t.uri, l = Lc({
url: t.uri
}, a.keyLoadPolicy), d = n, u = s, c = r.ksQuery, e => e.pipe(ll(() => {
ag(o, !1, d, u, c)
}), va(e => e.pipe(jr((e, t) => {
if (e instanceof mc || e instanceof gc) return og(e, t, _c(e, l), u, d, c);
throw e
}))))));
var o, l, d, u, c
}
class Ng {
constructor(e, t, i) {
this.hls = e, this.destroy$ = new Xt, this.iframeSwitchStart = 0, this.logger = t.child({
name: "hls-player-events"
}), this.rtc = i, this.subscribeAndEmit()
}
destroy() {
this.destroy$.next()
}
subscribeAndEmit() {
var e = this.loaderQueryListener(new bc(Ec)),
t = this.hls.publicQueries$.pipe(La(([e, t]) => an(this.rootPlaylistQueryListener(e, t), this.mediaElementQueryListener(t, e))));
an(e, t, this.activeItemListener(this.hls.itemQueue)).pipe(Vn(e => {
var t = e.message;
return this.logger.error(`Got error in HlsPlayerEvents ${t}`, e), Ii
}), Va(this.destroy$), Vs(() => {})).subscribe()
}
activeItemListener(e) {
return e.activeItemById$.pipe(Kp(), La(e => {
e = e.url;
return this.hls.trigger(P.MANIFEST_LOADING, {
url: e
}), Ii
}))
}
rootPlaylistQueryListener(t, e) {
var i = t.enabledMediaOptionByType$(gu.Variant).pipe(ln(e => !!e), La(e => {
var t;
return this.hls.trigger(P.LEVEL_SWITCHING, e), null === (t = this.rtc) || void 0 === t || t.handleLevelSwitching(e.url), Ii
})),
r = t.enabledMediaOptionByType$(gu.Variant).pipe(La(i => Dg(i).mediaOptionDetailsEntity$.pipe(ln(e => !0 === (null == e ? void 0 : e.detailsLoading)), Za(e => {
var t = {
url: le(null == i ? void 0 : i.url),
level: i.mediaOptionId,
type: Nu[i.mediaOptionType]
};
return this.hls.trigger(P.LEVEL_LOADING, t), Ii
})))),
n = t.enabledMediaOptionByType$(gu.Variant).pipe(La(e => {
const t = Dg(e);
let i = 0;
return t.mediaOptionDetailsEntity$.pipe(Kp(), ln(e => {
var t = null !== e.stats && !1 === e.detailsLoading && e.lastUpdateMillis > i;
return i = null !== (e = e.lastUpdateMillis) && void 0 !== e ? e : 0, t
}))
}), La(e => {
var t = e.mediaOptionDetails,
i = e.stats,
r = {
mediaOptionId: t.mediaOptionId,
details: t,
playlistType: t.type,
stats: i
};
if (null === (i = this.rtc) || void 0 === i || i.handleLevelLoaded(t, r.stats), this.hls.trigger(P.LEVEL_LOADED, r), 0 === e.unchangedCount) {
const e = {
level: 0,
details: t
};
this.hls.trigger(P.LEVEL_UPDATED, e)
}
if (null != t && t.daterangeTags) {
const e = {
daterangeTags: t.daterangeTags
};
this.hls.trigger(P.DATERANGE_UPDATED, e)
}
return Ii
})),
s = t.enableMediaOptionSwitchedForType$(gu.AltAudio).pipe(La(e => {
e = t.alternateMediaOptionById(gu.AltAudio, e.mediaOptionId);
return e && this.triggerAudioSwitch(e), Ii
})),
a = t.rootPlaylistEntity$.pipe(ln(e => null !== e.enabledMediaOptionKeys[gu.AltAudio].mediaOptionId), Ds(1), La(e => {
const t = e.enabledMediaOptionKeys[gu.AltAudio].mediaOptionId;
return t && (e = e.mediaOptionListTuple[gu.AltAudio].mediaOptions.find(e => e.mediaOptionId === t), this.triggerAudioSwitch(Object.assign(Object.assign({}, e), {
url: le(null == e ? void 0 : e.url)
}))), Ii
}));
return an(i, s, Gu(e.textTracksCreated$, e => e).pipe(La(() => t.enabledMediaOptionByType$(gu.Subtitle).pipe(La(e => {
e = t.alternateMediaOptionById(gu.Subtitle, e.mediaOptionId);
return e ? this.hls.trigger(P.SUBTITLE_TRACK_SWITCH, {
track: Object.assign({}, e),
hidden: !1
}) : this.hls.trigger(P.SUBTITLE_TRACK_SWITCH, {
track: void 0,
hidden: !1
}), Ii
})))), t.sessionData$.pipe(ln(e => null != e.complete), Ds(1), Za(e => {}), hr(e => {
this.hls.trigger(P.SESSION_DATA_COMPLETE, e)
})), t.getPreferredMediaOptionsByType$(gu.Variant).pipe(ka(1), hr(e => {
const t = e;
null === (e = this.rtc) || void 0 === e || e.handleLevelsChanged(t), t.forEach(e => {}), this.hls.trigger(P.LEVELS_CHANGED, {
requiresReset: !1,
levels: t
})
})), t.getPreferredMediaOptionsByType$(gu.AltAudio).pipe(hr(e => {
this.hls.trigger(P.AUDIO_TRACKS_UPDATED, {
audioTracks: e
})
})), Gu(e.textTracksCreated$, e => e).pipe(La(() => t.getPreferredMediaOptionsByType$(gu.Subtitle).pipe(Ds(1), hr(e => {
this.hls.trigger(P.SUBTITLE_TRACKS_UPDATED, {
subtitleTracks: e
}), this.hls.trigger(P.SUBTITLE_TRACKS_CREATED)
})))), n, r, a)
}
mediaElementQueryListener(s, e) {
return an(s.seekTo$.pipe(hr(e => {
var t;
e && ne(e.pos) ? (null === (t = this.rtc) || void 0 === t || t.handleSeek("SEEKING"), this.hls.trigger(P.SEEKING, {
seekToPos: e.pos
})) : null === e && (null === (e = this.rtc) || void 0 === e || e.handleSeek("SEEKED"), this.hls.trigger(P.SEEKED))
})), s.desiredRate$.pipe(Ra(0), ha(), hr(e => {
var t = e[0],
i = e[1];
Wp(i) ? 0 == this.iframeSwitchStart && (this.iframeSwitchStart = performance.now()) : this.iframeSwitchStart = 0, this.hls.trigger(P.DESIRED_RATE_CHANGED, {
oldRate: t,
newRate: i
}), null === (e = this.rtc) || void 0 === e || e.handleDesiredRateChanged(t, i)
})), s.sourceBufferEntityByType$(yu.AltAudio).pipe(ln(e => !!e), Is((e, t) => e.totalBytes === t.totalBytes), hr(e => {
this.hls.trigger(P.BUFFER_APPENDED)
})), s.sourceBufferEntityByType$(yu.Variant).pipe(ln(e => !!e), Is((e, t) => e.totalBytes === t.totalBytes), hr(e => {
var t;
null === (t = this.rtc) || void 0 === t || t.handleVariantBufferAppended(e.timestampOffset, e.totalBytes), this.hls.trigger(P.BUFFER_APPENDED)
})), s.stallInfo$.pipe(Kp(), bo(s.combinedBuffer$), hr(([e]) => {
var t;
null === (t = this.rtc) || void 0 === t || t.handleStalled(e, s.getCombinedBufferInfo(e.currentTime, 0).len), this.hls.trigger(P.STALLED, e)
})), Mr([$i(e), ed([s.timeupdate$, s.bufferedSegmentsByType$(yu.Variant)]).pipe(ao(1e3), hr(([t, e]) => null == e ? void 0 : e.find(e => e.startPTS <= t && e.endPTS > t)), ln(e => !!e), Ra(null), ha())]).pipe(La(([e, [t, i]]) => {
var r = null == i ? void 0 : i.frag,
t = null == t ? void 0 : t.frag;
if (r && !$p(t, r) && (this.hls.trigger(P.FRAG_CHANGED, i), this.hls.inGaplessMode && this.checkAndTriggerReadyForNext(s, i), !t || r.mediaOptionId !== t.mediaOptionId)) {
const s = e.mediaOptionListQueries[gu.Variant].mediaOptionFromId(r.mediaOptionId);
if (!s) return this.logger.warn("variantInfo is undefined in fragChangeMonitor"), Ii;
const n = t ? t.mediaOptionId : "",
i = r.mediaOptionId;
s.iframes && (performance.now(), this.iframeSwitchStart), null === (r = this.rtc) || void 0 === r || r.handleLevelSwitched({
url: s.url,
mediaOptionId: s.mediaOptionId,
oldVariant: "" !== n ? n : void 0,
newVariant: i
}), this.hls.trigger(P.LEVEL_SWITCHED, s)
}
return Ii
})), s.isBufferedToEnd$(this.hls.config.maxBufferHole, !1).pipe(ln(e => !0 === e), ji(tr), hr(e => {
if (e && !this.hls.itemQueue.isPreloading() && this.hls.inGaplessMode) {
const i = s.getCombinedBufferInfo(s.currentTime, 0);
var t = 0;
i && (t = i.end, e = s.mediaElementDuration, 0 < t && e - s.currentTime < 10 && this.hls.trigger(P.READY_FOR_NEXT_ITEM, {
duration: t
}))
}
})))
}
checkAndTriggerReadyForNext(e, t) {
var i, r;
t && t.frag && (i = e.currentTime, (r = e.getCombinedBufferInfo(i, 0)) && (i = r.end, r = e.mediaElementDuration, e = e.bufferMonitorInfo, e = Math.max(e.almostDryWaterLevelSeconds, e.lowWaterLevelSeconds / 2), (r - t.endPTS <= e || t.frag.isLastFragment) && this.hls.inGaplessMode && !this.hls.isPreloading && this.hls.trigger(P.READY_FOR_NEXT_ITEM, {
duration: i
})))
}
loaderQueryListener(e) {
return an(e.unresolvedUriLoading$.pipe(hr(e => e.map(e => {
e = {
uri: e.uri,
responseType: e.responseType,
userAgent: e.userAgent
};
this.hls.trigger(P.UNRESOLVED_URI_LOADING, e)
}))))
}
triggerAudioSwitch(e) {
e && this.hls.trigger(P.AUDIO_TRACK_SWITCHED, {
id: e.id
})
}
triggerManifestLoaded(e) {
e = {
levels: e.rootMediaOptionsTuple[gu.Variant],
audioTracks: e.rootMediaOptionsTuple[gu.AltAudio],
subtitleTracks: e.rootMediaOptionsTuple[gu.Subtitle],
url: e.baseUrl,
audioMediaSelectionGroup: e.audioMediaSelectionGroup,
subtitleMediaSelectionGroup: e.subtitleMediaSelectionGroup,
stats: e.stats,
isMediaPlaylist: e.isMediaPlaylist
};
this.hls.trigger(P.MANIFEST_LOADED, e)
}
triggerManifestParsed(e) {
var t = {
levels: e.mediaOptionListQueries[gu.Variant].filteredMediaOptionList,
firstLevel: 0,
audio: !1,
video: !0,
altAudio: !1,
audioTracks: e.mediaOptionListQueries[gu.AltAudio].filteredMediaOptionList,
audioMediaSelectionGroup: e.audioMediaSelectionGroup,
subtitleMediaSelectionGroup: e.subtitleMediaSelectionGroup,
stats: e.loadStats
};
null === (e = this.rtc) || void 0 === e || e.handleManifestParsed(t), this.hls.trigger(P.MANIFEST_PARSED, t)
}
urlRedactedManifestLoaded(e) {
const t = Object.assign({}, e);
return t.url = le(t.url), t.levels = ue(t.levels), t.audioTracks = ce(t.audioTracks), t.subtitleTracks = ce(t.subtitleTracks), t
}
urlRedactedManifestParsed(e) {
const t = Object.assign({}, e);
return t.levels = ue(t.levels), t.audioTracks = ce(t.audioTracks), t
}
}(A = Mm = Mm || {}).LowBandwidth = "LowBandwidth", A.HighBandwidth = "HighBandwidth", A.PreferredListChanged = "PreferredListChanged", A.IframeModeChange = "IframeModeChange", A.None = "";
const Fg = {
minValidBitrate: 2e6,
maxValidBitrate: 5e6,
maxPreferredBitrate: 3e6,
minValidHeight: 480,
maxValidHeight: 720
};
function Bg(e, a, o, l, d, u) {
return e.reduce((e, t) => {
if (t.iframes) return e;
let i = e;
const r = (n = t.score, s = a && o && l && d && !Ug(t, a, o, l, d, u) ? mu.INVALID : mu.VALID, new Qp(s, n));
var n, s;
return (!e || r.isGreaterThan(e.bestRank) || r.isEqualTo(e.bestRank) && t.bandwidth < e.selected.bandwidth) && (i = {
selected: t,
bestRank: r
}), i
}, null).selected
}
function Ug(e, t, i, r, n, s) {
var {
targetDuration: a,
targetStartupMs: o
} = i, l = r["avgPlaylistLoadTimeMs"], d = n["avgParseTimeMs"], {
avgBufferCreateMs: i,
avgInitFragAppendMs: r,
avgDataFragAppendMs: n
} = s, {
avgBandwidth: s,
avgLatencyMs: t
} = t;
return e.bandwidth <= s && (e.avgBandwidth || e.bandwidth) * a / s * 1e3 + l + i + +(t + d + (r + n)) <= o
}
const $g = {
name: "abr"
};
function Vg(e, t) {
return ne(e) ? Math.min(e, t) : t
}
function Kg(e) {
return ne(null == e ? void 0 : e.avgBandwidth)
}
function qg(e, t) {
return e.getCurrentWaterLevelByType(yu.Variant, t) / (0 !== e.playbackRate ? Math.abs(e.playbackRate) : 1)
}
function Hg(t, i, e, r) {
if (e) return t;
let n = -1;
if (t < 0) return n;
for (let e = t; e < i.length; ++e) {
const t = Qg(i[e], r);
if (t.altAudio && t.subtitle) {
n = e;
break
}
}
return n
}
function jg(t, e, i, r, n, s, a) {
const o = i.preferredMediaOptions[gu.Variant].filter(e => e.iframes === t);
if (!o.length) return {
variantMediaOption: Lu.mediaOptionId,
holdOffDuration: 0,
lowestCandidate: null
};
let l = 0;
const d = i.nextMinAutoOptionId;
if (d !== Lu.mediaOptionId) {
const t = o.findIndex(e => e.mediaOptionId === d);
0 <= t && (l = t)
}
if (l = Hg(l, o, t, i), l < 0) return {
variantMediaOption: Lu.mediaOptionId,
holdOffDuration: 0,
lowestCandidate: null
};
let u = o.length - 1;
const c = i.nextMaxAutoOptionId;
if (c !== Lu.mediaOptionId) {
const t = o.findIndex(e => e.mediaOptionId === c);
0 <= t && (u = t)
}
var h = i.variantMediaOptionById(r.mediaOptionId),
p = r.mediaOptionDetails,
f = (null == h ? void 0 : h.iframes) !== t ? 0 : qg(n, e.maxBufferHole);
let m, g;
if (t) {
const t = e.desiredIframeFPS;
g = p ? p.targetduration / t : 0, g = Math.max(1 / t, g)
} else g = p ? p.targetduration : 0;
h = e.abrBandWidthUpFactor, p = e.abrBandWidthFactor;
return m = Wg(o, g, l, u, f, t, s.getCombinedEstimate(), s.bandwidthStatus, p, h, e, i, r, n, a), m.variantMediaOption === Lu.mediaOptionId && (m = Wg(o, g, l, u, f + Vg(g, e.maxStarvationDelay), t, s.getCombinedEstimate(), s.bandwidthStatus, p, h, e, i, r, n, a), m.variantMediaOption === Lu.mediaOptionId && 0 <= l && (m.variantMediaOption = o[l].mediaOptionId, m.alternates = t ? null : Qg(o[l], i))), m
}
function Qg(e, t) {
var i = t.enabledMediaOptionKeys,
r = i[gu.AltAudio],
r = _u(r) ? t.mediaOptionListQueries[gu.AltAudio].getMatchingAlternate(r.mediaOptionId, e) : Lu,
i = i[gu.Subtitle];
return {
altAudio: r,
subtitle: _u(i) ? t.mediaOptionListQueries[gu.Subtitle].getMatchingAlternate(i.mediaOptionId, e) : Lu
}
}
function Wg(i, r, n, e, s, a, o, l, t, d, u, c, h, p, f) {
"bandwidth-history-controller" !== u.abrBandwidthEstimator && f.warn(`Unsupported configuration: ${u.abrBandwidthEstimator} for ABR bandwidth estimator`);
const m = l.bandwidthSampleCount,
g = c.abrStatus,
y = p.maxBufferSize,
v = u.minTargetDurations || 1,
S = c.mediaOptionListQueries[gu.Variant].mediaOptionListInfo.hasScore;
if (!i.length) return {
variantMediaOption: Lu.mediaOptionId,
holdOffDuration: -1,
lowestCandidate: null
};
const b = c.enabledMediaOptionIdByType(gu.Variant),
T = c.variantMediaOptionById(b),
E = null != i.find(e => e.mediaOptionId === b),
I = T && T.iframes === a,
w = T && I ? T.score : void 0,
A = T && I ? T.frameRate : void 0,
O = T && I ? T.height : void 0,
k = I ? qg(p, u.maxBufferHole) : 0;
e = Math.max(0, Math.min(i.length - 1, e)), n = Math.max(0, Math.min(i.length - 1, n));
var C = h.mediaOptionDetailsEntityRecord,
D = Gg(o.avgBandwidth, d, t, m);
let M;
for (let t = e; t >= n; t--) {
const n = i[t];
let e = n.mediaOptionId;
const u = n.score,
h = C && C[e] ? C[e].mediaOptionDetails : void 0,
p = C && C[e] ? C[e].lastUpdateMillis : null,
f = h ? h.totalduration / h.fragments.length : r,
B = null != T && n.bitrate > T.bitrate,
m = null != T && n.bitrate < T.bitrate,
U = !(null != A && (B && n.frameRate < A || m && n.frameRate > A)),
$ = !(B && null != O && O > n.height),
V = !(m && (n.bitrate === T.bitrate - 1 || n.bitrate === T.bitrate + 1)),
K = !(S && B && null != w && (u < w || u === w && T && n.bitrate >= T.bitrate)),
q = n.iframes === a;
if (ne(f) && q && U && $ && V && K) {
var {
adjustedbw: x,
bitrate: P,
fetchDuration: R,
rejectLevelDueToPeakBW: L,
canFitMultipleSegments: _,
requireAlternates: N,
alternates: F
} = function(e, t, i, r, n, s, a, o, l, d, u, c) {
var h = n ? a.bwUp : a.bwDown,
n = e.bitrate,
a = t ? t.totalduration / t.fragments.length : o,
s = zg(e, t, o, h, ne(s.avgPlaylistLoadTimeMs) ? s.avgPlaylistLoadTimeMs : s.avgLatencyMs, d),
d = e.bandwidth,
i = n < h && h < d && i <= 2 * a,
l = r * ((d || n || 0) * ((null == t ? void 0 : t.targetduration) || a)) / 8 <= l;
let p = null;
u = !u;
return u && (p = Qg(e, c), p.altAudio && p.subtitle || (p = null)), {
adjustedbw: h,
bitrate: n,
fetchDuration: s,
rejectLevelDueToPeakBW: i,
canFitMultipleSegments: l,
requireAlternates: u,
alternates: p
}
}(n, h, k, v, B, o, D, r, y, p, a, c);
if (N && Boolean(F) && (M = e), P < x && _ && !L && (!N || Boolean(F)) && (a || !R || R < s)) {
if (L = x, N = g, x = (x = l).instantBw, (N.fragDownloadSlow || N.fragDownloadTooSlow || ne(x) && x < L) && E && I)
if (k <= 2 * f && B) e = b;
else if (B && d * l.instantBw < P) continue;
return {
variantMediaOption: e,
holdOffDuration: R,
alternates: F,
lowestCandidate: M
}
}
}
}
return {
variantMediaOption: Lu.mediaOptionId,
holdOffDuration: -1,
lowestCandidate: M
}
}
function Gg(e, t, i, r) {
let n, s;
return 4 <= r ? (n = e * t, s = e * i) : n = s = e / 1.8, {
bwUp: n,
bwDown: s
}
}
function zg(e, t, i, r, n, s) {
let a = e.bitrate * (t ? t.totalduration / t.fragments.length : i) / r;
return null == t || !t.liveOrEvent || t.ptsKnown && !Yg(t.totalduration, n, s) || (a *= 2), ne(n) && (!ne(s) || null != t && t.liveOrEvent) && (a += n / 1e3), a
}
function Xg(t, e) {
let i = 1 / 0;
if (t === Lu.mediaOptionId) return i;
var r = e.find(e => e.mediaOptionId === t);
if (!r) return 1 / 0;
const n = r.iframes,
s = r.bitrate,
a = r.frameRate,
o = e.find(e => e.iframes === n && (void 0 === a || e.frameRate >= a) && e.bitrate > s);
return o && (i = o.bitrate), i
}
function Yg(e, t, i) {
return t = ne(t) ? t : 0, !ne(i) || performance.now() - i + t > 1e3 * e
}
function Jg(e, t) {
return (null == e ? void 0 : e.fragDownloadSlow) === (null == t ? void 0 : t.fragDownloadSlow) && e.fragDownloadTooSlow === (null == t ? void 0 : t.fragDownloadTooSlow)
}
function Zg(e) {
return "loading" === (null == e ? void 0 : e.state) && ne(null === (e = e.bwSample) || void 0 === e ? void 0 : e.trequest)
}
const ey = 2e3;
function ty(e, t, i, r) {
let {
fragDownloadSlow: n,
fragDownloadTooSlow: s
} = t;
var a = i.variantMediaOptionById(e.mediaOptionId).bitrate,
t = e.bwSample;
r = r.child($g);
i = t.total || Math.max(t.loaded, Math.round(e.duration * a / 8)), a = performance.now() - t.tfirst, i = t.loaded * e.duration * 1e3 / i;
return a >= ey && 1e3 <= a - i && (n || r.warn(`flow indicates low bandwidth, after time/duration behind real time: ${a}/${a-i}`), n = !0), a >= 1e3 * e.duration && (s || r.warn(`too much time spent downloading fragment, likely to switch down ${a} > ${1e3*e.duration}`), s = !0), {
fragDownloadSlow: n,
fragDownloadTooSlow: s
}
}
function iy(e, t, i, r, n) {
var s;
const a = n.logger.child($g),
o = r.isIframeRate,
l = i.mediaOptionListQueries[gu.Variant].preferredMediaOptionList,
d = i.enabledMediaOptionKeys[gu.Variant];
let u = e;
if (u !== Mm.None || l.some(e => e.mediaOptionId === d.mediaOptionId) || (u = Mm.PreferredListChanged), u !== Mm.None && !(o && u !== Mm.IframeModeChange && r.getBufferedSegmentsByType(yu.Variant).filter(e => e.frag.iframe).length < t.minFramesBeforeSwitchingLevel)) {
o && u === Mm.IframeModeChange && n.setEnabledVariantMediaOptionIdBeforeTrickplaySwitch(i.itemId, d.mediaOptionId);
const h = Zf(i.itemId),
p = Dg(d),
f = [Lu, Lu, Lu];
if (!o && e === Mm.IframeModeChange) {
const e = function(e, t, i, r) {
const n = i.mediaOptionListQueries[gu.Variant].preferredMediaOptionList,
s = t.targetStartupMs,
a = {
avgPlaylistParseTimeMs: 0,
avgPlaylistLoadTimeMs: 0
},
o = r.getFragEstimate(),
l = {
avgBufferCreateMs: 0,
avgInitFragAppendMs: 0,
avgDataFragAppendMs: 0
},
d = o.maxDurationSec,
u = {
avgLatencyMs: 0,
avgBandwidth: r.getBandwidthEstimate().avgBandwidth
},
c = {
targetDuration: d,
targetStartupMs: s,
metricsOverride: {
maxValidHeight: 0,
maxValidBitrate: 0,
maxPreferredBitrate: 0
}
},
h = n.filter(e => !e.iframes && (!e.width || !e.height || e.width * e.height <= 2488320));
let p = e;
0 < h.length && (p = h[0].mediaOptionId);
e = h.filter(e => Ug(e, u, c, a, o, l));
return 0 < e.length && (p = e[e.length - 1].mediaOptionId), p
}(i.enabledVariantMediaOptionIdBeforeTrickplaySwitch, t, i, h);
n.setNextMaxAutoOptionId(i.itemId, e), n.setEnabledVariantMediaOptionIdBeforeTrickplaySwitch(i.itemId, void 0)
}
var c = function(e, t, i, r, n, s, a) {
let o = t.nextMaxAutoOptionId;
if (o === Lu.mediaOptionId || Kg(s.getBandwidthEstimate())) return l = e, d = t, u = r, e = n, r = s, s = a.child({
name: "abr"
}), a = e.isIframeRate, d.enabledMediaOptionIdByType(gu.Variant), jg(a, l, d, u, e, r, s);
if (n.isIframeRate) return {
variantMediaOption: o,
holdOffDuration: 0,
lowestCandidate: null
}; {
const c = t.variantMediaOptionById(o),
h = t.enabledAlternateMediaOptionByType(gu.Subtitle),
n = t.enabledAlternateMediaOptionByType(gu.AltAudio),
p = null == n ? void 0 : n.persistentID,
f = null == h ? void 0 : h.persistentID,
m = !t.preferHDR,
g = i.getBestMediaOptionTupleFromVariantAndPersistentId(t, c, p, f, void 0, [], m, !1, !1);
return t.isValidMediaOptionTuple(g) ? (o = g[gu.Variant].mediaOptionId, {
variantMediaOption: o,
holdOffDuration: 0,
alternates: {
altAudio: g[gu.AltAudio],
subtitle: g[gu.Subtitle]
},
lowestCandidate: null
}) : {
variantMediaOption: t.enabledMediaOptionKeys[gu.Variant].mediaOptionId,
holdOffDuration: 0,
lowestCandidate: null
}
}
var l, d, u
}(t, i, n, p, r, h, a);
if (o || e !== Mm.IframeModeChange || n.setNextMaxAutoOptionId(i.itemId, Lu.mediaOptionId), c.variantMediaOption !== d.mediaOptionId) {
f[gu.Variant] = {
itemId: i.itemId,
mediaOptionId: c.variantMediaOption
};
for (const e of [gu.AltAudio, gu.Subtitle]) {
const t = i.enabledMediaOptionIdByType(e);
if (t !== Lu.mediaOptionId) {
const r = e === gu.AltAudio ? null === (s = c.alternates) || void 0 === s ? void 0 : s.altAudio : null === (s = c.alternates) || void 0 === s ? void 0 : s.subtitle;
f[e] = r || {
itemId: i.itemId,
mediaOptionId: t
}
}
}
return n.setEnabledMediaOptions(i.itemId, f), 1
}
}
}
const ry = {
name: "iframes"
};
(A = xm = xm || {})[A.DISABLED = 0] = "DISABLED", A[A.ERRORED = 1] = "ERRORED", A[A.SUCCESS = 2] = "SUCCESS";
const ny = new fl({}, {
name: "item-queue",
producerFn: su,
idKey: "itemId",
resettable: !0
}),
sy = new class extends kl {}(ny);
class ay {
constructor() {
this.firstItem = !0, this.playingEntity = null, this.loadingEntity = null
}
static createItem(e, t, i = NaN, r, n) {
const s = new Date,
a = `${s.getHours()}:${s.getMinutes()}:${s.getSeconds()}`;
Qe();
var o = function(e) {
e = cu.parseURL(e).fragment.substr(1);
if (0 === e.length) return null;
const t = new URLSearchParams(e);
if (!t.has("t")) return null;
e = Number(t.get("t"));
return ne(e) ? e : null
}(t);
if (ne(o)) i = o;
else {
const e = mg();
ne(null == e ? void 0 : e.startPosition) && (i = e.startPosition)
}
return {
itemId: `${e}_${a}`,
name: e,
url: t,
serviceName: n,
createTime: a,
initialSeekTime: i,
itemStartOffset: 0,
platformInfo: r,
config: {}
}
}
get activeItemById$() {
return sy.selectActiveId().pipe(hr(e => sy.getActive()))
}
get removedItems$() {
return sy.selectEntityAction(Eo.Remove).pipe(hr(e => e))
}
get activeItem() {
return sy.getActive()
}
get queueItems$() {
return sy.selectAll().pipe(hr(e => null != e ? e : []))
}
get isFirstItem() {
return this.firstItem
}
get playingItem() {
return this.playingEntity
}
get loadingItem() {
return this.loadingEntity
}
addQueueItem(e, t, i, r, n, s) {
sy.getCount();
const a = ay.createItem(e, t, i, r, s);
null != this.playingEntity && (a.initialSeekTime = void 0), n && (a.itemStartOffset = n, this.firstItem = !1, this.playingEntity = this.activeItem, this.loadingEntity = a), Do(`queue.add.item: ${e}`), al(() => {
ny.add(a), ny.setActive(a.itemId)
})
}
updatePlayingItemId() {
this.playingEntity = this.loadingEntity, this.loadingEntity = null, this.clearAllButActive()
}
resetLoadingItem() {
this.removeQueueItem(this.loadingEntity.itemId), this.loadingEntity = null, al(() => {
ny.setActive(this.playingEntity.itemId)
})
}
isPreloading() {
return null !== this.playingEntity && null !== this.loadingEntity
}
setQueueItem(t, i, r, n, s) {
Do("queue.set.item"), this.loadingEntity = null, al(() => {
ny.reset();
var e = ay.createItem(t, i, r, n, s);
ny.add(e), ny.setActive(e.itemId)
}), this.playingEntity = this.activeItem
}
removeQueueItem(e) {
ny.remove(e)
}
clearQueue() {
ny.reset()
}
clearAllButActive() {
var e;
const t = null === (e = this.activeItem) || void 0 === e ? void 0 : e.itemId;
al(() => {
sy.getAll().forEach(e => {
e.itemId !== t && ny.remove(e.itemId)
})
})
}
set earlyAudioSelection(t) {
ny.updateActive(e => {
e.earlySelection || (e.earlySelection = {}), e.earlySelection.audioPersistentId = t
})
}
get earlyAudioSelection() {
var e;
return null === (e = this.activeItem.earlySelection) || void 0 === e ? void 0 : e.audioPersistentId
}
set earlySubtitleSelection(t) {
ny.updateActive(e => {
e.earlySelection || (e.earlySelection = {}), e.earlySelection.subtitlePersistentId = t
})
}
get earlySubtitleSelection() {
var e;
return null === (e = this.activeItem.earlySelection) || void 0 === e ? void 0 : e.subtitlePersistentId
}
}
function oy(e, t, i, r, n, s) {
return ng(e, 0, Jm({
errorAction: Cm.RemoveAlternatePermanently,
errorActionFlags: 0
}, !1, e.response.code, i, t, s, n), s, n, t, i).pipe(Vn(e => {
throw !1 === e.fatal && r.resetMediaSource(), e
}))
}
class ly {
constructor(e, t, i, r, n, s) {
this.logger = e, this._rootPlaylistService = t, this._rootQuery = i, this._mediaQuery = r, this._iframeMachine = n, this._anchorMSNs = [NaN, NaN], this._avDetails = [null, null], this.logger = e.child({
name: "fpicker"
}), this._discoSeqNum = NaN, this.lookUpTolerance = Math.max(s.maxBufferHole, s.maxFragLookUpTolerance), this.firstAudioMustOverlapVideoStart = s.firstAudioMustOverlapVideoStart, this.lookUpToleranceAlt = s.firstAudioMustOverlapVideoStart ? 0 : s.maxFragLookUpTolerance
}
destroy() {
this._anchorMSNs = [NaN, NaN], this._avDetails = [null, null], this._rootQuery = null, this._mediaQuery = null, this._rootPlaylistService = null, this._iframeMachine = null
}
get discoSeqNum() {
return this._discoSeqNum
}
get _discoSeqNum() {
return this._rootQuery.discoSeqNum
}
set _discoSeqNum(e) {
this._rootPlaylistService.setDiscoSeqNum(this._rootQuery.itemId, e)
}
get anchorMSNs() {
return this._anchorMSNs
}
_resolvePosition(e, t, i) {
let r = e;
var t = this._avDetails[t];
if ((null == t ? void 0 : t.mediaOptionId) !== (null == i ? void 0 : i.mediaOptionId) && i.liveOrEvent && !1 === i.ptsKnown && (!t || Math.max(t.startSN, i.startSN) > Math.min(t.endSN, i.endSN))) {
const e = 3 * i.targetduration,
n = (null === (t = i.fragments[0]) || void 0 === t ? void 0 : t.start) + i.totalduration;
r = Math.max(0, n - e)
}
return r
}
getDiscoSeqNumForTime(e, t) {
return this._mediaQuery.isIframeRate && e.iframesOnly ? Qu.discoSeqNumForTime(e.fragments, t) : (r = t, null == (e = null !== (e = Tg(e, e => {
var t = 0 < e.duration,
i = e.start + e.duration,
e = r < i || r - i < 1 && e.isLastFragment;
return t && e
})) && void 0 !== e ? e : null) ? void 0 : e.mediaFragment.discoSeqNum);
var r
}
_updateAnchorByPosition(e, t) {
let i = NaN;
const r = t[yu.Variant];
let n = e;
if (r) {
const t = r.fragments;
if (n = this._resolvePosition(e, yu.Variant, r), i = this.getDiscoSeqNumForTime(r, n), !ne(i)) {
const r = t[0],
s = t[t.length - 1],
a = null == r ? void 0 : r.start,
o = (null == s ? void 0 : s.start) + (null == s ? void 0 : s.duration);
this.logger.warn(`${e.toFixed(3)} out of range [${null==a?void 0:a.toFixed(3)},${null==o?void 0:o.toFixed(3)}]`), n <= a ? i = r.discoSeqNum : n >= o ? i = s.discoSeqNum : this.logger.warn(`Unable to determine newCC. fragFirst: ${JSON.stringify(r)} fragLast: ${JSON.stringify(s)}`), ne(i) || this.logger.warn(`Unable to determine newCC. fragFirst: ${JSON.stringify(r)} fragLast: ${JSON.stringify(s)}`)
}
} else this.logger.warn("No variant details for anchoring");
return this._updateAnchor(i, t), n
}
_updateAnchor(e, s) {
const a = e !== this._discoSeqNum;
a && (this._discoSeqNum = e), Bu.forEach(e => {
const t = this._avDetails[e],
i = s[e],
r = (null == t ? void 0 : t.mediaOptionId) !== (null == i ? void 0 : i.mediaOptionId);
if (a || r) this._updateAnchorForType($u(e), i);
else if (i) {
const {
mediaOptionId: s,
ptsKnown: a,
dateMediaTimePairs: t,
startSN: r,
endSN: n
} = i;
this._avDetails[e] = {
mediaOptionId: s,
ptsKnown: a,
dateMediaTimePairs: t,
startSN: r,
endSN: n
}
}
})
}
getNextFragments(i, r, n) {
const {
position: s,
bufferInfoTuple: e,
switchContexts: a
} = i;
let t = e.map((e, t) => dy(s, r[t], a[t], null == e ? void 0 : e.buffered, t === gu.AltAudio ? this.lookUpToleranceAlt : this.lookUpTolerance)).reduce((e, t) => Math.min(t, e), Number.POSITIVE_INFINITY);
if (ne(i.discoSeqNum)) {
const s = r.reduce((e, t) => {
if (!t) return e;
t = Qu.getTimeRangeForCC(t.fragments, i.discoSeqNum, n);
return [Math.max(e[0], t[0]), Math.min(e[1], t[1])]
}, [Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY]);
t = Math.min(Math.max(t, s[0]), s[1])
}
return i.position = this._updateAnchorByPosition(t, r), this._getNextFragmentsInternal(i, r)
}
_getNextFragmentsInternal(r, n) {
const s = [null, null];
let a;
n.forEach((e, t) => {
var i;
this.firstAudioMustOverlapVideoStart && t === gu.AltAudio && this._mediaQuery.seeking && null !== (i = s[gu.Variant]) && void 0 !== i && i.foundFrag && (a = r.position, r.position = s[gu.Variant].foundFrag.mediaFragment.start), s[t] = this._getNextFragmentForType(r, n, t)
});
var e = s[yu.Variant],
t = s[yu.AltAudio],
i = null === (o = null == e ? void 0 : e.foundFrag) || void 0 === o ? void 0 : o.mediaFragment,
o = null === (o = null == t ? void 0 : t.foundFrag) || void 0 === o ? void 0 : o.mediaFragment;
if (i && o && (o.start > i.start + i.duration ? (this.logger.warn("Audio too far ahead"), s[yu.AltAudio] = ly.noopResult) : i.start > o.start + o.duration && !this._mediaQuery.isIframeRate && (this.logger.warn("Video too far ahead"), s[yu.Variant] = ly.noopResult)), !isFinite(null == e ? void 0 : e.nextDisco) || null != t && !ne(t.nextDisco)) return s; {
const l = s[yu.Variant].nextDisco;
return this._updateAnchor(l, n), ne(a) && (r.position = a, a = NaN), this._getNextFragmentsInternal(r, n)
}
}
_getNextFragmentForType(e, t, i) {
var {
position: r,
bufferInfoTuple: n,
switchContexts: s
} = e, a = t[i], o = null !== (d = null === (c = n[i]) || void 0 === c ? void 0 : c.buffered) && void 0 !== d ? d : {
start: r,
end: r,
len: 0
}, l = this._mediaQuery.getBufferedSegmentsByType(i), d = null !== (c = null === (e = s[i]) || void 0 === e ? void 0 : e.userInitiated) && void 0 !== c && c, u = dy(r, a, s[i], o, this.lookUpTolerance);
if (!a) return null;
var {
highWaterLevelSeconds: e,
lowWaterLevelSeconds: c
} = this._mediaQuery.bufferMonitorInfo, r = o.len;
if (!d && e <= r) return ly.noopResult;
var e = i === yu.Variant ? yu.AltAudio : yu.Variant,
n = null === (n = n[e]) || void 0 === n ? void 0 : n.buffered,
e = null !== (e = null === (e = s[e]) || void 0 === e ? void 0 : e.userInitiated) && void 0 !== e && e;
let h = !1;
i === yu.Variant && c <= r && 1 < this._mediaQuery.expectedSbCount && null != n && n.end < o.end && (e || n.end - n.start < c) && (h = !0);
let p, f = null,
m = NaN;
if (this._mediaQuery.isIframeRate && i === yu.Variant && a.iframesOnly) {
const g = function(e, t, i) {
e = i.nextFragment(a.fragments, (null == e ? void 0 : e.fragments) || [], t, u);
if (!e) return null;
var {
frag: t,
newMediaRootTime: e
} = e;
return {
foundFrag: {
timelineOffset: t.iframeMediaStart,
mediaFragment: t
},
nextDisco: NaN,
newMediaRootTime: e
}
}(t[yu.AltAudio], this._mediaQuery.desiredRate, this._iframeMachine);
if (g) {
({
foundFrag: f,
nextDisco: m,
newMediaRootTime: p
} = g);
const i = f.mediaFragment;
i.discoSeqNum !== this._discoSeqNum && this._updateAnchor(i.discoSeqNum, t)
}
} else {
const g = this._anchorMSNs[i];
({
foundFrag: f,
nextDisco: m,
newMediaRootTime: p
} = Ig(u, this._discoSeqNum, g, a, l))
}
return h && this._rootQuery.getInitPTS(null == f ? void 0 : f.mediaFragment.discoSeqNum) ? ly.noopResult : {
foundFrag: f,
nextDisco: m,
newMediaRootTime: p
}
}
_updateAnchorForType(e, t) {
var i, r, n, s, a;
if (!t) return this._anchorMSNs[e] = NaN, void(this._avDetails[e] = null);
ne(this._discoSeqNum) ? (a = this._discoSeqNum, a = null !== (s = null == (n = (r = t.fragments, i = a, r.find(e => e.discoSeqNum === i))) ? void 0 : n.mediaSeqNum) && void 0 !== s ? s : t.startSN, this._anchorMSNs[e] = a, {
mediaOptionId: r,
ptsKnown: n,
dateMediaTimePairs: s,
startSN: a,
endSN: t
} = t, this._avDetails[e] = {
mediaOptionId: r,
ptsKnown: n,
dateMediaTimePairs: s,
startSN: a,
endSN: t
}) : this.logger.warn("Trying to anchor with non-finite discoSeqNum")
}
}
function dy(e, t, i, r, n) {
r = null != r ? r : {
start: e,
end: e,
len: 0
};
i = null !== (i = null == i ? void 0 : i.userInitiated) && void 0 !== i && i, n = null != t && t.iframesOnly ? 0 : n;
return i || 0 === r.len ? e : r.end + n
}
ly.noopResult = {
foundFrag: null,
nextDisco: NaN
};
const uy = {
name: "avpipe"
};
function cy(r) {
const {
config: o,
rootPlaylistService: l,
rootPlaylistQuery: d,
mediaSink: e,
gaplessInstance: t
} = r, u = e.mediaQuery, i = ed(Bu.map(e => d.enabledMediaOptionSwitchForType$(e).pipe(Za(e => {})))).pipe(La(e => {
if (!_u({
itemId: d.itemId,
mediaOptionId: e[gu.Variant].toId
})) throw new V(!0, `No valid variant enabled id:${e[gu.Variant].toId}`, $.NoValidAlternates);
e = e.map(({
fromId: e,
toId: t
}, i) => function(t, i, r, n, s) {
var a, o;
const {
rootPlaylistQuery: l,
rootPlaylistService: d,
mediaSink: u,
mediaParser: c,
config: h,
iframeMachine: p
} = t, f = u.mediaQuery;
if (!n || !s || n === s && (r === gu.AltAudio || !p.isStarted)) return Wu;
switch (r) {
case gu.Variant: {
n !== s && c.reset(gu.Variant);
const t = $u(r),
g = l.variantMediaOptionById(n),
y = l.variantMediaOptionById(s),
v = l.itemId;
if (null == y || null == g) return Wu;
var e = !y.iframes && p.isStarted;
if (g.iframes !== y.iframes || e) return u.toggleTrickPlaybackMode(y.iframes), e && (ne(u.mediaQuery.postFlushSeek) || (u.postFlushSeek = p.iframeClockTimeSeconds), p.stop()), u.pause(), (e ? u.flushAll(0, 1 / 0, !0) : u.flushData(t, 0, 1 / 0, !0)).pipe(Za(() => {
var e = u.mediaQuery.postFlushSeek;
ne(e) && d.setPendingSeek(v, e)
}));
if (!h.allowFastSwitchUp || y.iframes) return Wu;
var m = Dg(g).mediaOptionDetails;
if (null != m && null != y && g.bitrate < y.bitrate) {
const r = m.targetduration,
n = Dg(y),
s = n.mediaOptionDetails,
d = n.mediaOptionDetailsEntity.lastUpdateMillis,
c = f.getCurrentWaterLevelByType(t, h.maxBufferHole),
p = function(e, t, i, r, n, s, a, o) {
if (n.nextMaxAutoOptionId !== Lu.mediaOptionId && !Kg(s.getBandwidthEstimate())) return Number.POSITIVE_INFINITY;
a = Gg(s.getBandwidthEstimate().avgBandwidth, a.abrBandWidthUpFactor, a.abrBandWidthFactor, s.bandwidthStatus.bandwidthSampleCount), s = ne(s.getPlaylistEstimate().avgPlaylistLoadTimeMs) ? s.getPlaylistEstimate().avgPlaylistLoadTimeMs : s.getBandwidthEstimate().avgLatencyMs, a = t.bitrate > e.bitrate ? a.bwUp : a.bwDown;
return null == i || !i.liveOrEvent || i.ptsKnown && !Yg(i.totalduration, s, o) ? zg(t, i, r, a, s, o) : Number.POSITIVE_INFINITY
}(g, y, s, r, l.abrStatus, i, h, d) + h.maxStarvationDelay,
S = f.currentTime + p,
b = null === (o = null === (a = f.sourceBufferEntityByType(t)) || void 0 === a ? void 0 : a.bufferedSegments) || void 0 === o ? void 0 : o.find(e => e.startPTS >= S);
let e;
if (b) {
const t = b.endPTS - b.startPTS;
e = b.startPTS + Math.min(Math.max(t - h.maxFragLookUpTolerance, .5 * t), .75 * t)
}
if (ne(e) && c >= p) return u.flushData(t, e, 1 / 0)
}
}
break;
case gu.AltAudio:
e = l, m = s, o = "Nah" === (a = n) ? null : e.alternateMediaOptionById(gu.AltAudio, a), o = Boolean(o && o.url), m = "Nah" === a ? null : e.alternateMediaOptionById(gu.AltAudio, m), m = Boolean(m && m.url), o && !m && (d.setEnabledMediaOptionSwitchContextByType(l.itemId, gu.AltAudio, s, void 0), u.resetMediaSource(f.currentTime)), c.reset(gu.AltAudio)
}
return Wu
}(r, n, i, e, t));
return Jr($i(!0), en(e).pipe(Zs(!1)))
}), tc("mediaOptionSwitch.audiovideo.out")), n = Zf(d.itemId), s = r.logger.child(uy), a = new ly(s, l, d, u, r.iframeMachine, o);
return ed([d.anchorTime$.pipe(tc("anchorTime.audiovideo.in")), i]).pipe(La(([i, e]) => e ? Ii : u.needData$(o.maxBufferHole, t.inGaplessMode).pipe(hr(e => {
var t = [d.enabledMediaOptionSwitchContexts[gu.Variant], d.enabledMediaOptionSwitchContexts[gu.AltAudio]];
return u.getSourceBufferInfoAction(e, i, t, o.maxBufferHole)
}), _s(e => e ? fn($i(e).pipe(hy(r, a), my(r)), Gu(function(e) {
const {
mediaSink: t,
rootPlaylistQuery: i,
rootPlaylistService: r
} = e, n = t.mediaQuery, s = e.logger.child($g);
return an((a = i, o = s, ed([n.fellBelowLowWater$, a.getInFlightFragByType$(gu.Variant)]).pipe(La(e => {
var [, t] = e;
if (!Zg(t)) return Ii;
const i = performance.now() - t.bwSample.trequest,
r = ey - i,
n = 1e3 * t.duration - i,
s = [Wu];
return 0 < r && s.push(bn(r)), 0 < n && s.push(bn(n)), an(...s).pipe(Zs(e))
}), sa((e, [t, i]) => {
const r = Object.assign({}, e);
return t && (r.fragDownloadSlow = !0), ty(i, r, a, o)
}, {
fragDownloadSlow: !1,
fragDownloadTooSlow: !1
}), Ra({
fragDownloadSlow: !1,
fragDownloadTooSlow: !1
}), Is(Jg))), function(r) {
const s = r.mediaSink.mediaQuery,
{
rootPlaylistQuery: e,
config: a
} = r;
return s.desiredRate$.pipe(La(t => 0 === t ? Ii : ed([e.getInFlightFragByType$(gu.Variant), e.mediaOptionListQueries[gu.Variant].preferredMediaOptionList$.pipe(hr(e => e.filter(Wm.bind(null, Wp(t)))))])), ao(100), La(e => {
const [t, i] = e;
if (!Zg(t) || i.findIndex(e => e.mediaOptionId === t.mediaOptionId) <= 0) return Ii;
var r = performance.now() - t.bwSample.trequest,
n = Vg(t.duration, a.maxStarvationDelay),
n = Math.min(1e3 * n, 500 * t.duration / s.playbackRate);
return bn(Math.max(0, n - r), 100).pipe(Zs(e))
})).pipe(sa((e, [t, i]) => function(t, i, r, e) {
let {
fragDownloadSlow: n,
fragDownloadTooSlow: s
} = t;
const {
config: a,
rootPlaylistService: o,
rootPlaylistQuery: l,
mediaSink: d,
statsService: u,
mediaLibraryService: c
} = e, h = e.logger.child($g), p = d.mediaQuery;
if (p.paused) return t;
e = i.bwSample;
if (!ne(e.tfirst)) return t;
const f = performance.now(),
m = f - e.trequest,
g = Vg(i.duration, a.maxStarvationDelay),
y = gu.Variant,
v = i.mediaOptionId,
S = l.variantMediaOptionById(v),
b = c.getQueryForOption(S),
T = S.bitrate,
E = Math.max(1, 8e3 * e.loaded / m),
I = 8 * ((ne(e.total) ? e.total : Math.max(e.loaded, Math.round(i.duration * T / 8))) - e.loaded) / E,
w = qg(p, a.maxBufferHole);
let A;
if (ne(w) && 0 < w && !ne(null === (O = p.seekTo) || void 0 === O ? void 0 : O.pos)) A = w;
else {
const N = m / 1e3;
A = N < g ? g - N : g
}
var O = n;
({
fragDownloadSlow: n,
fragDownloadTooSlow: s
} = ty(i, t, l, h));
t = 2 * ((null === (t = b.mediaOptionDetails) || void 0 === t ? void 0 : t.targetduration) || i.duration);
if (!(w <= t && (I >= A || n))) return fg().getQuery().extendMaxTTFB && fg().setExtendMaxTTFB(0), {
fragDownloadSlow: n,
fragDownloadTooSlow: s
};
O || h.warn(`likely to stall ${ae({maxTimeToLoadSec:A,minSwitchDuration:t,stats:e,elapsedMs:m,remainingTimeSec:I,instantBw:E,bufferAheadSec:w,fragDownloadSlow:n})}`), n = !0, fg().getQuery().extendMaxTTFB || fg().setExtendMaxTTFB(6e5);
let k;
const C = i.itemId,
D = u.getQueryForItem(C),
M = D.getCombinedEstimate(),
x = Object.assign(Object.assign({}, M), {
avgBandwidth: E
}),
P = D.bandwidthStatus,
R = S.iframes,
L = I >= A && !R,
_ = Hg(0, r, R, l);
if (_ < 0) return {
fragDownloadSlow: n,
fragDownloadTooSlow: s
};
t = Math.max(_, r.findIndex(e => e && e.mediaOptionId === S.mediaOptionId));
if (L) {
let e = Wg(r, i.duration, _, t, A, R, x, P, 1, 1, a, l, b, p, h);
const F = Lu.mediaOptionId;
k = e.variantMediaOption !== F || (e = Wg(r, i.duration, _, t, I, R, x, P, 1, 1, a, l, b, p, h)).variantMediaOption !== F ? e.variantMediaOption : e.lowestCandidate
} else {
const N = Hg(0, r.slice(_, t).reverse(), R, l),
i = t - 1 - N;
(0 <= N || t === _) && (k = r[i].mediaOptionId)
}
if (null != k && k !== l.abrStatus.nextMaxAutoOptionId && o.setNextMaxAutoOptionId(C, k), L) throw h.warn(`loading too slow, abort fragment loading and switch to level ${k}`), u.setBandwidthSample(Object.assign(Object.assign({}, e), {
tfirst: e.tfirst || f,
tload: e.tload || f,
complete: !0,
mediaOptionType: y
})), s = !0, new fc({
mediaOptionType: y,
mediaOptionId: v
}, k, $.FragmentAbortError);
return {
fragDownloadSlow: n,
fragDownloadTooSlow: s
}
}(e, t, i, r), {
fragDownloadSlow: !1,
fragDownloadTooSlow: !1
}), Ra({
fragDownloadSlow: !1,
fragDownloadTooSlow: !1
}), Is(Jg))
}(e)).pipe(Ra({
fragDownloadSlow: !1,
fragDownloadTooSlow: !1
}), sa((e, t) => ({
fragDownloadSlow: e.fragDownloadSlow || t.fragDownloadSlow,
fragDownloadTooSlow: e.fragDownloadTooSlow || t.fragDownloadTooSlow
})), Is(Jg), hr(e => (r.setFragLoadSlow(i.itemId, e), !1)), Vn(e => {
if (e instanceof fc) {
const e = {
fragDownloadSlow: !0,
fragDownloadTooSlow: !0
};
return r.setFragLoadSlow(i.itemId, e), $i(!0)
}
return Vi(e)
}));
var a, o
}(r), e => e)).pipe(Ds(1), Vs(() => {
Bu.forEach(e => {
l.updateInflightFrag(d.itemId, e, null, null, null)
})
})) : Ii))), hr(() => {
if (!d.getEntity(d.itemId).manualMode) {
let e = Mm.None;
var i, r, n, s;
i = Af(), r = u, n = o, s = null == r ? void 0 : r.clientWidth, a = null == r ? void 0 : r.clientHeight, r = "object" == typeof window && window.devicePixelRatio ? window.devicePixelRatio : 1, a = s && a ? {
width: s * r,
height: a * r
} : void 0, r = (r = (null === (r = i.getQuery()) || void 0 === r ? void 0 : r.viewportInfo) || {}) && a && (r.width !== a.width || r.height !== a.height), n.useViewportSizeForLevelCap && r && (i.updateViewportInfo(a), 1) && (e = Mm.PreferredListChanged);
let t = !1;
var a = d.enabledVariantMediaOption;
! function(e, t) {
const i = l.logger.child($g),
r = e.abrStatus,
n = r.fragDownloadSlow || r.fragDownloadTooSlow,
s = ne(null === (t = t.seekTo) || void 0 === t ? void 0 : t.pos);
return n && !r.fragDownloadTooSlow && s ? (i.warn("could be ignoring low bandwidth due to seek"), 0) : n
}(d, u) ? u.playbackStarted && function(e, t) {
const i = Zf(t.itemId),
r = i.getBandwidthEstimate(),
n = t.abrStatus;
if (Kg(r)) {
var t = (null === (t = i.bandwidthStatus) || void 0 === t ? void 0 : t.bandwidthSampleCount) || 0,
t = Gg(r.avgBandwidth, e.abrBandWidthUpFactor, e.abrBandWidthFactor, t)["bwUp"];
return t > n.highBWTrigger
}
}(o, d) && (e = Mm.HighBandwidth, l.setNextMinAutoOptionId(a.itemId, a.mediaOptionId)): (e = Mm.LowBandwidth, d.nextMaxAutoOptionId === Lu.mediaOptionId && (l.setNextMaxAutoOptionId(a.itemId, a.mediaOptionId), t = !0)), iy(e, o, d, u, l), t ? l.setNextMaxAutoOptionId(a.itemId, Lu.mediaOptionId) : e === Mm.HighBandwidth && l.setNextMinAutoOptionId(a.itemId, Lu.mediaOptionId)
}
}), Vs(() => {}))
}
const hy = (r, n) => e => {
const {
rootPlaylistQuery: t,
mediaSink: a
} = r, i = r.logger.child(uy);
return e.pipe(ji(tr), bo(t.enabledMediaOptionKeys$), La(([s, e]) => En(py(s, gu.Variant, r, e).pipe(Za(e => {
var e = e.detailsEntity;
if (!e.mediaOptionDetails.liveOrEvent || e.mediaOptionDetails.ptsKnown) {
const t = e.playlistDuration,
i = (null === (e = s.bufferInfoTuple[0]) || void 0 === e ? void 0 : e.buffered.end) || 0,
r = (null === (e = s.bufferInfoTuple[1]) || void 0 === e ? void 0 : e.buffered.end) || 0,
n = Math.max(i, r);
a.msDuration = ne(a.msDuration) ? Math.max(a.msDuration, t, n) : t
}
})), py(s, gu.AltAudio, r, e)).pipe(hr(e => ({
action: s,
detailsAndContext: e
})))), La(({
action: e,
detailsAndContext: t
}) => function t(n, s, a, i, d) {
var e;
const {
mediaSink: u,
iframeMachine: c,
rootPlaylistQuery: o
} = a, r = [d[gu.Variant].detailsEntity.mediaOptionDetails, null === (e = null === (e = d[gu.AltAudio]) || void 0 === e ? void 0 : e.detailsEntity) || void 0 === e ? void 0 : e.mediaOptionDetails];
let l = s.getNextFragments(i, r, n);
const h = l.reduce((e, t) => Math.max(e, ne(null == t ? void 0 : t.newMediaRootTime) ? t.newMediaRootTime : -1 / 0), -1 / 0);
return ne(h) && (u.seekTo = h, l = [null, null]), l.every(e => null == (null == e ? void 0 : e.foundFrag)) ? $i(null) : En(...l.map((t, l) => {
if (t && null != t.foundFrag) {
const i = t.foundFrag["mediaFragment"],
r = _g(a, i.keyTagInfo, {
itemId: i.itemId,
mediaOptionId: i.mediaOptionId
});
let e = Lg(a, l, t).pipe(Za(e => {
const t = e[1],
i = d[l].switchContext;
t.switchPosition = null == i ? void 0 : i.switchPosition;
const r = null !== (e = null == i ? void 0 : i.userInitiated) && void 0 !== e && e,
n = u["mediaQuery"],
{
desiredRate: s,
isIframeRate: a
} = n,
o = a && c.isStarted && s && s < 0 && s !== c.iframeRate;
(r || o) && (t.flushBeforeAppend = {
start: 0,
end: Number.POSITIVE_INFINITY
})
}));
return e = l === gu.Variant ? e.pipe(Za(e => {
const t = function(t, i, r, n) {
if (!r) return null;
const {
rootPlaylistService: s,
rootPlaylistQuery: a
} = i, o = a.itemId, l = r[1], d = l.iframe;
let u = a.getInitPTS(n);
if (null == u || !d && u.iframeMode) {
const i = null !== (r = l.startDtsTs) && void 0 !== r ? r : null;
if (null == i) return t.warn("updateInitPTS: Variant data missing."), null;
let e = null !== (t = l.timelineOffset) && void 0 !== t ? t : 0;
d && (e = null !== (t = l.iframeOriginalStart) && void 0 !== t ? t : 0), i.timescale < 1e3 && (i.timescale = 1e3 * i.timescale, i.baseTime = 1e3 * i.baseTime);
const a = B(e, i.timescale),
c = {
baseTime: i.baseTime - a.baseTime,
timescale: i.timescale
};
s.setInitPTS(o, n, i, e, c, d), u = {
variantDTS: i,
timelineOffset: e,
offsetTimestamp: c,
iframeMode: d
}
}
return u
}(n, a, e, s.discoSeqNum);
fy(n, a, e, t)
})) : en([e, Gu(o.initPTS$(s.discoSeqNum), e => {
const t = u.mediaQuery.isIframeRate;
return null != e && (t || !e.iframeMode)
})]).pipe(hr(([e, t]) => (fy(n, a, e, t), e))), en([r, e]).pipe(hr(e => e[1]))
}
return $i(null)
})).pipe(hr(e => function(g, t, e, i) {
const {
rootPlaylistQuery: r,
mediaSink: n,
config: y
} = t, v = n.mediaQuery, s = v.isIframeRate, a = r.getInitPTS(e);
if (null == a) return g.warn("No initPTS info found"), null;
const o = i[gu.Variant],
l = null == o ? void 0 : o[1];
if (l && l.iframe !== s) return g.warn(`frag mediaSeqNum ${l.mediaSeqNum} discoSeqNum ${l.discoSeqNum} mediaOptionId ${l.mediaOptionId} doesn't match mediaSink's iframeMode ${s}; discard`), null;
const S = [null, null];
if (o) {
const [g, t] = o;
let e = a.offsetTimestamp;
if (s) {
const g = t.startDtsTs,
i = B(t.timelineOffset, g.timescale);
e = {
baseTime: g.baseTime - i.baseTime,
timescale: g.timescale
}
}
S[yu.Variant] = {
initSeg: g,
dataSeg: t,
offsetTimestamp: e
}
}
const d = i[gu.AltAudio];
if (null != d) {
const [g, t] = d;
S[yu.AltAudio] = {
initSeg: g,
dataSeg: t,
offsetTimestamp: a.offsetTimestamp
}
}
const u = S.map((e, t) => {
const i = null == e ? void 0 : e.dataSeg;
if (i) {
const {
itemId: r,
mediaOptionId: n,
mediaSeqNum: s,
discoSeqNum: a,
startPts: o,
endPts: l,
duration: d,
iframe: u
} = i, c = e["offsetTimestamp"], h = b(o, c), p = b(l, c), f = Dg(i), m = S[0];
return m && m.dataSeg.dropped || i.flushBeforeAppend || !((null === (e = null === (e = v.getBufferInfo(h, y.maxBufferHole)[t]) || void 0 === e ? void 0 : e.buffered) || void 0 === e ? void 0 : e.len) >= p - h) ? {
start: h,
duration: u ? d : p - h,
itemId: r,
mediaOptionId: n,
mediaSeqNum: s,
discoSeqNum: a,
targetDuration: f.mediaOptionDetails.targetduration
} : (g.warn(`${Nu[t]} Discarding append due to complete overlap with existing buffer`), S[t] = null)
}
return null
});
return u.every(e => !e) ? null : {
appendDataTuple: S,
inFlightFrags: u,
initPTSInfo: a
}
}(n, a, s.discoSeqNum, e)), La(e => {
if (e) return $i(e); {
const e = function(e, r) {
const n = e.enabledMediaOptionKeys,
s = [null, null],
a = [null, null];
return Bu.map(e => {
var t;
if (_u(n[e])) {
const i = Dg(n[e]).mediaOptionDetailsEntity;
a[e] = null === (t = i.mediaOptionDetails) || void 0 === t ? void 0 : t.ptsKnown, s[e] = {
detailsEntity: i,
switchContext: null === (e = r[e]) || void 0 === e ? void 0 : e.switchContext
}
}
}), s
}(o, d);
return t(n, s, a, i, e)
}
}))
}(i, n, r, e, t)), tc("mediaProducerEpic.emit"))
};
function py(e, i, t, r) {
const {
rootPlaylistQuery: n,
mediaLibraryService: s,
config: a
} = t, o = r[i];
if (t.logger.child({
name: Nu[i]
}), !o || "Nah" === o.mediaOptionId) return $i({
detailsEntity: null,
switchContext: null
});
const l = s.getQueryForOption(o);
return Mr([$i(e), l.mediaOptionDetailsEntity$.pipe(Is((e, t) => (null == e ? void 0 : e.lastUpdateMillis) === (null == t ? void 0 : t.lastUpdateMillis)), ln(e => {
var t = null == e ? void 0 : e.mediaOptionDetails;
if (!t) return !0;
var i = performance.now(),
r = e.lastUpdateMillis || i,
e = t.liveOrEvent,
t = t.targetduration;
return !e || i - r < a.livePlaylistUpdateStaleness * t * 1e3
}))]).pipe(ln(([, e]) => {
if (i === gu.AltAudio && !n.altMediaOptionHasValidUrl(i, o.mediaOptionId)) return !0;
var t = null == e ? void 0 : e.mediaOptionDetails;
return null != t && (e = null !== (e = e.lastUpdateMillis) && void 0 !== e ? e : 0, !t.liveOrEvent || !t.ptsKnown || !Yg(null == t ? void 0 : t.totalduration, 0, e))
}), Ds(1), bo(n.enabledMediaOptionSwitchContextsByType$(i)), hr(([
[, e], t
]) => ({
detailsEntity: e,
switchContext: t
})))
}
function fy(e, t, i, r) {
const {
mediaLibraryService: n,
rootPlaylistQuery: s,
mediaSink: a
} = t, o = s.itemId;
null != r && (a.mediaQuery.isIframeRate || !r.iframeMode ? i && !ne(i[1].iframeMediaDuration) && (performance.now(), n.updatePTSDTS(o, i[1].mediaOptionId, r, i[1])) : e.warn("updatePTSDTS iframeMode mismatch"))
}
const my = t => e => {
const {
rootPlaylistQuery: g,
rootPlaylistService: y,
mediaSink: v,
legibleSystemAdapter: o,
statsService: l,
rtcService: d
} = t;
return e.pipe(tc("mediaConsumerEpic.in"), La(e => {
if (!e) return $i(!1);
const {
appendDataTuple: r,
inFlightFrags: m,
initPTSInfo: t
} = e, i = t["offsetTimestamp"];
return m.forEach((e, t) => {
e && y.updateInflightFrag(e.itemId, t, e, "appending", null)
}), r.forEach(e => {
e && (e = e.dataSeg, o.addLegibleSamples(i, e.captionData, e.id3Samples, e.endPts))
}), v.appendData(r, (e, t, i, r, n) => {
var s, a, o, l, d, u, c, h, p, f = null !== (f = m[t].targetDuration) && void 0 !== f ? f : 10;
return s = v, a = e, o = t, l = i, d = f, u = r, c = g, h = y, p = n, e => e.pipe(Za(() => {
h.updateConsecutiveTimeouts(c.itemId, o, !1, "append")
}), va(e => e.pipe(jr((e, t) => {
var i = e instanceof df && e.isTimeout;
if (h.updateConsecutiveTimeouts(c.itemId, o, i, "append"), i) return function(e, t, i, r, n, s, a, o) {
let l = {
errorAction: Cm.SendAlternateToPenaltyBox,
errorActionFlags: 0
};
var d = s.getCurrentWaterLevel(i.maxBufferHole),
u = d < i.almostDryBufferSec;
let c = NaN;
s = i.appendErrorMaxRetry, i = a.rootPlaylistEntity.errorsByType[r].timeouts.append;
u && s <= i || s <= t ? l.errorAction = Cm.SendEndCallback : c = 1e3 * d;
s = {
retryDelayMs: c,
maxNumRetry: s,
maxRetryDelayMs: c
};
return l = Jm(l, !1, e.response.code, n, r, a, o), rg(e, t, s, l, a, o, r, n).pipe()
}(e, t, u, o, l, p, c, h);
if (e instanceof uf) return function(e, t, i, r, n, s, a, o, l, d) {
var u = t.type,
u = o.getCurrentWaterLevelByType(u, n.maxBufferHole);
if (u >= n.almostDryBufferSec && !o.isIframeRate) {
const t = 1e3 * r,
n = {
errorAction: Cm.RetryRequest,
errorActionFlags: 0
};
return 1e3 * u < t && (d.hasFallbackMediaOptionTuple(l, s, a, !1) ? n.errorAction = Cm.SendAlternateToPenaltyBox : n.errorAction = Cm.SendEndCallback), rg(e, i, {
retryDelayMs: t,
maxNumRetry: 1 / 0,
maxRetryDelayMs: t
}, n, l, d, s, a)
}
return i < n.appendErrorMaxRetry ? t.remove(0, Number.POSITIVE_INFINITY) : (e.fatal = !0, Vi(e))
}(e, a, t, d, u, o, l, p, c, h);
if (e instanceof hf) {
const {
mediaOptionType: a,
mediaOptionId: o
} = e;
return oy(e, a, o, s, h, c)
}
throw e
}))))
}, g.highestVideoCodec).pipe(hr(e => {
m.forEach((e, t) => {
e && y.updateInflightFrag(e.itemId, t, e, "appended", null)
});
var t = e.filter(e => (null == e ? void 0 : e.fragmentType) === gu.Variant);
t.length && (l.setBufferMetric(t[0]), null == d || d.handleFragBuffered(t[0]));
e = r[yu.AltAudio];
if (null !== (t = null == e ? void 0 : e.dataSeg) && void 0 !== t && t.flushBeforeAppend || ne(null === (t = null == e ? void 0 : e.dataSeg) || void 0 === t ? void 0 : t.switchPosition)) {
const {
itemId: i,
mediaOptionId: r
} = e.dataSeg;
y.setEnabledMediaOptionSwitchContextByType(i, gu.AltAudio, r, void 0)
}
return !0
}), (n = v, s = y, a = g, e => e.pipe(Vn(e => {
if (e instanceof lf) {
var {
mediaOptionType: t,
mediaOptionId: i
} = e;
return oy(e, t, i, n, s, a)
}
throw e
}))));
var n, s, a
}))
};
function gy(d, u, c, h, p, f) {
return u = u.child({
name: "seek"
}), e => e.pipe(La((e, t) => {
if (null == e) return Ii;
var i, r, n, s, a, o, l = c.mediaQuery.seekTo$.pipe(ka(1), Kp());
return i = 0 === t, r = d, n = u, s = p, t = f, (null == (e = e) ? Ii : e instanceof Date ? (a = e, o = t, s.enabledMediaOptionByType$(gu.Variant).pipe(La(e => o.getQueryForOption(e).mediaOptionDetails$), hr(e => function(e, t) {
if (!e || 0 === e.length) return 0;
const i = [...e].sort((e, t) => t[0] - e[0]),
r = t.getTime(),
n = null !== (t = i.find(([e]) => r >= e)) && void 0 !== t ? t : i[i.length - 1],
[s, a] = n,
o = a + (r - s) / 1e3;
return Math.max(0, o)
}(e.dateMediaTimePairs, a)), Ds(1))) : function(r, e, a, n, t, o) {
let i = n.enabledMediaOptionByType$(gu.Variant).pipe(La(e => t.getQueryForOption(e).mediaOptionDetails$), ln(e => ne(null == e ? void 0 : e.totalduration)), Ds(1), hr(s => {
var e = !s.liveOrEvent,
t = s.totalduration,
i = n.itemStartOffset;
return e ? ne(r) ? 0 <= r ? r : i + (t + r) : i + (ne(s.startTimeOffset) ? s.startTimeOffset : 0) : !ne(r) || r < 0 || 0 === r && a.liveEdgeForZeroStartPositon ? yg(0, s, a) : function(e, t) {
let i = e;
var r = s.fragments[0].start,
n = s.fragments[s.fragments.length - 1].start + s.fragments[s.fragments.length - 1].duration;
return e < r ? i = r : n < e && (i = yg(0, s, a)), (e < r || n < e) && t.warn(`[live] sanitizeLiveSeek seekTo:${se(e,3)}, sanitizedSeek:${se(i,3)}, liveWindowStart:${se(r,3)}, liveWindowEnd:${se(n,3)}`), i
}(r, o)
}));
return e && (i = i.pipe(Za(e => {}))), i
}(e, i, r, s, t, n)).pipe(Vs(() => {
h.setPendingSeek(p.itemId, void 0)
}), Va(l))
}), Za(e => {
ne(e) && (c.seekTo = e)
}))
}
function yy(e) {
const {
logger: r,
rootPlaylistService: n,
rootPlaylistQuery: t
} = e, s = t.itemId;
return e => e.pipe(va(e => e.pipe(jr(e => {
if (r.error(`Got error in pipeline ${e.message} fatal:${null==e?void 0:e.fatal} handled:${null==e?void 0:e.handled}`), !(e instanceof p) || e.fatal) throw e;
return e.handled ? (t = n, i = s, bn(0).pipe(hr(() => {
t.updateEnabledMediaOptions(i)
}))) : Ii;
var t, i
}))))
}
const vy = () => e => e.pipe(tc("mediaFragmentPipelineEpic.in"), La(i => {
if (!i) return Ii;
const {
logger: e,
config: t,
platformService: r,
rootPlaylistService: n,
rootPlaylistQuery: s,
keySystemAdapter: a,
mediaSink: o,
mediaParser: l,
gaplessInstance: d,
mediaLibraryService: u
} = i, c = s["itemId"], h = o["mediaQuery"], p = a.keyStatusChange$.pipe((f = i, e => e.pipe(La(e => {
const {
decryptdata: t,
status: i,
error: r
} = e, n = f["rootPlaylistQuery"];
if ("needs-renewal" === i) return _g(f, t, null);
if ("error" !== i || !(r instanceof gc || r instanceof mc) || r.handled) return Ii; {
const {
rootPlaylistService: e,
keySystemAdapter: t
} = f;
return og(r, 0, null, e, n, t.ksQuery)
}
}), La(() => Ii))));
var f;
const m = r.getQuery(),
g = m.displaySupportsHdr$.pipe(Is(), La(e => (n.setHDRPreference(c, e, !0), Ii))),
y = m.viewportInfo$.pipe(Is((e, t) => e && t && e.width === t.width && e.height === t.height), Za(e => {
t.useViewportSizeForLevelCap && n.setViewportInfo(c, e)
}), $a(Ii)),
v = ed([s.hdrMode$.pipe(Is()), s.maxHdcpLevel$.pipe(Is())]).pipe(La(([]) => (d.inGaplessMode || 0 !== s.itemStartOffset || (o.resetMediaSource(), l.reset()), Ii))),
S = an(function(i) {
const {
rootPlaylistQuery: t,
mediaSink: r
} = i, e = t.enabledMediaOptions$.pipe(Kp(), Za(e => {
e = e[gu.AltAudio], e = _u(e) && null != (null == e ? void 0 : e.url) ? 2 : 1;
r.setExpectedSbCount(e)
})), n = en([t.enabledMediaOptionByType$(gu.Variant).pipe(ln(e => _u(e)), La(e => Dg(e).mediaOptionDetails$), Ds(1)), Gu(r.mediaQuery.updating$, e => e)]).pipe(ji(tr), Za(([e]) => {
r.bufferMonitorTargetDuration = e.targetduration
})), s = Fu.map(e => t.enabledMediaOptionByType$(e).pipe(tc("mediaOptionRetrieve.switch"), La(t => {
if (!t || !t.url || !_u(t)) return Ii;
var e = r.mediaQuery.desiredRate$.pipe(hr(e => 0 !== e), Is());
return Mg(i, t).pipe(tc("mediaOptionRetrieve.first"), $a(e), La(e => e ? function e(t, i) {
const r = t.mediaLibraryService;
return function(e) {
if (!e) return Ii;
var {
mediaOptionDetails: t,
lastUpdateMillis: i,
unchangedCount: e
} = e;
if (null == t || !t.liveOrEvent) return Ii;
if (bg(t, i)) return bn(0).pipe(Za(() => {}));
let r = Sg(t);
return 0 < e && (r /= 2, r = Math.max(r, 5e3)), r -= performance.now() - i, r += 0, r = Math.max(1e3, Math.round(r)), bn(r).pipe(Za(() => {}))
}(r.getQueryForOption(i).mediaOptionDetailsEntity).pipe(La(() => Mg(t, i, !1, !0)), La(() => e(t, i)))
}(i, t) : Ii))
})));
return an(e, n, an(...s)).pipe($a(Ii))
}(i), cy(i), function(t) {
const {
rootPlaylistQuery: i,
mediaSink: e
} = t;
return Gu(e.mediaQuery.mediaElementEntity$, e => e).pipe(La(e => i.anchorTime$.pipe(tc("anchorTime.subtitle.in"), ln(e => ne(null == e ? void 0 : e.pos)), (s => e => {
const {
rootPlaylistQuery: i,
rootPlaylistService: t,
legibleSystemAdapter: r
} = s, n = i.enabledAlternateMediaOptionByType(gu.Subtitle);
if (r.gotTracks) r.selectedTrack = n;
else {
const s = i.preferredMediaOptions[gu.Subtitle];
r.setTracks(s, n, i.getDisabledMediaOption(gu.Subtitle))
}
return e.pipe(tc("subtitleEpic.select.in"), La(() => an(r.nativeSubtitleTrackChange$.pipe(La(e => (e.mediaOptionId !== r.selectedMediaOption.mediaOptionId && t.setEnabledMediaOptionByType(e.itemId, gu.Subtitle, e), Ii))), i.enabledMediaOptionByType$(gu.Subtitle).pipe(hr(e => {
const t = _u(e) ? i.alternateMediaOptionById(gu.Subtitle, e.mediaOptionId) : e;
return r.selectedMediaOption = t, t
})).pipe(Is((e, t) => (null == e ? void 0 : e.mediaOptionId) === (null == t ? void 0 : t.mediaOptionId))))), tc("subtitleEpic.select.emit"))
})(t), (s => e => {
const {
mediaSink: t,
rootPlaylistQuery: i,
legibleSystemAdapter: r,
logger: n
} = s;
return e.pipe(tc("subtitleEpic.process.in"), La(e => {
if (!e || !e.url || !_u(e)) return $i([null, null, null]);
return ed([Dg(e).mediaOptionDetails$, i.discoSeqNum$.pipe(ln(e => ne(e)))]).pipe(La(([e, t]) => ((i, r, e) => {
const {
legibleSystemAdapter: n,
rootPlaylistQuery: t
} = i;
return t.initPTS$(e).pipe(La(t => !t || t.iframeMode ? on : n.findFrags$(r, e).pipe(La(e => r && (null == e ? void 0 : e.foundFrags) ? Sy(i, t.offsetTimestamp, e, r) : Wu))))
})(s, e, t)))
}), tc("subtitleEpic.process.emit"))
})(t))))
}(i), p).pipe(Zs(void 0), yy(i)),
b = h.seekTo$.pipe(ln(e => ne(null == e ? void 0 : e.pos)), Is((e, t) => Math.abs(e.pos - t.pos) < Number.EPSILON), La(e => (n.setAnchorTime(c, e), Ii))),
T = h.gotPlaying$.pipe(ln(e => e), Za(e => {
s.mediaOptionListQueries[gu.Variant].filteredMediaOptionList.forEach(e => {})
}), Ds(1), $a(Ii));
return an(s.pendingSeek$.pipe(gy(t, e, o, n, s, u)), function() {
const {
config: n,
mediaSink: s,
rootPlaylistQuery: e,
mediaLibraryService: t
} = i, a = (i.logger.child({
name: "live"
}), s.mediaQuery);
return e.enabledMediaOptionByType$(gu.Variant).pipe(ln(_u), La(e => t.getQueryForOption(e).mediaOptionDetailsEntity$.pipe(ln(e => {
var t;
return (null === (t = null == e ? void 0 : e.mediaOptionDetails) || void 0 === t ? void 0 : t.ptsKnown) && e.mediaOptionDetails.liveOrEvent
}), Is((e, t) => (null == e ? void 0 : e.lastUpdateMillis) === (null == t ? void 0 : t.lastUpdateMillis)))), hr(e => {
var t = e.mediaOptionDetails,
i = a.currentTime;
a.msDuration < e.playlistDuration ? s.msDuration = e.playlistDuration : ne(s.msDuration) && (s.msDuration = s.msDuration + n.livePlaylistDurationNudge);
let r = NaN;
return i < vg(i, t, e.lastUpdateMillis, n.maxBufferHole, a) && (r = yg(t.fragments[0].start, t, n), s.seekTo = r), r
}))
}(), b, S, g, y, v, function() {
const e = i.mediaSink.mediaQuery;
return Mr([$i(i), e.desiredRate$.pipe(ha())]).pipe(La(([e, [t, i]]) => {
const {
rootPlaylistQuery: s,
rootPlaylistService: r,
config: a,
mediaSink: n,
mediaLibraryService: o,
statsService: l
} = e, d = n.mediaQuery;
if (Wp(t) !== Wp(i)) iy(Mm.IframeModeChange, a, s, d, r);
else if (0 === t && 1 === i && !Bu.every(e => {
const t = s.enabledMediaOptionKeys[e],
i = o.getQueryForOption(t),
r = l.getQueryForItem(s.itemId),
n = i.mediaOptionDetailsEntity;
return !(null !== (e = null == n ? void 0 : n.mediaOptionDetails) && void 0 !== e && e.ptsKnown) || d.canContinuePlaybackWithoutGap(n.mediaOptionDetails, n.lastUpdateMillis, r.getPlaylistEstimate(), a.maxBufferHole)
})) return n.pause(), n.flushAll(0, 1 / 0, !0);
return Ii
}), $a(Ii))
}(), function(e) {
const t = e.rootPlaylistQuery,
i = e.mediaSink.mediaQuery,
r = t.enabledMediaOptionByType$(gu.Variant);
return Mr([$i(e), i.desiredRate$.pipe(ha())]).pipe(Is((e, t) => e[1] === t[1]), bo(r), La(([
[e, [t, i]], r
]) => {
t = Wp(t), i = Wp(i);
if (t === i) return Ii;
const n = e["rootPlaylistService"];
return i && e.rootPlaylistQuery.nextMaxAutoOptionId === Lu.mediaOptionId && n.setNextMaxAutoOptionId(e.rootPlaylistQuery.itemId, r.mediaOptionId), Ii
}))
}(i), T).pipe(tc("mediaFragmentPiplineEpic.emit"), Zs(void 0))
})),
Sy = (r, e, t, i) => {
const n = r.legibleSystemAdapter,
s = t.foundFrags;
return Fr(s).pipe(hr(t => {
return ((e, t, i) => {
const {
rootPlaylistQuery: r,
legibleSystemAdapter: n
} = e;
return Zr(() => ((t, i) => Rg(e, i, !1, !1).pipe(hr(e => ({
initPTS: t,
data: e,
mediaFragment: i
})), tc("retrieveSubtitleFragmentCacheEntity.emit")))(t, i).pipe(hr(({
initPTS: e,
data: t,
mediaFragment: i
}) => ({
frag: i,
cueRange: function(e, t, i, r, n) {
if (e) return n.processSubtitleFrag(e, t, i, r)
}(r.enabledAlternateMediaOptionByType(gu.Subtitle), i, e, t, n)
}))))
})(r, e, t).pipe((i = e => n.checkReadyToLoadNextSubtitleFragment$(t, s).pipe(ln(e => e)), function(e) {
return e.lift(new gs(i))
}));
var i
}), Yr(r.config.vttConcurrentLoadCount), Za(e => {
n.reviewParsedFrag(e, t, i) !== kp.CloseEnough && r.legibleSystemAdapter.tryAgain$.next(!0)
}))
},
by = (e, t) => {
let i, r = "";
return i = e.videoCodec && e.audioCodec ? (r = `${e.videoCodec}, ${e.audioCodec}`, t = null != t ? t : "video/mp4", "audiovideo") : e.videoCodec ? (r = `${e.videoCodec}`, t = null != t ? t : "video/mp4", "video") : (r = `${null!==(e=e.audioCodec)&&void 0!==e?e:""}`, t = null != t ? t : "audio/mp4", "audio"), {
mimeType: `${t};codecs=${r}`,
codec: r,
container: t,
type: i
}
};
class Ty {
constructor(e, t, i) {
this.config = e, this.logger = t, this.demuxClient = i, this.typeSupported = {
mp4: MediaSource.isTypeSupported("video/mp4"),
mpeg: MediaSource.isTypeSupported("audio/mpeg"),
mp3: MediaSource.isTypeSupported('audio/mp4; codecs="mp3"'),
ac3: MediaSource.isTypeSupported('audio/mp4; codecs="ac-3"'),
ec3: MediaSource.isTypeSupported('audio/mp4; codecs="ec-3"')
}, this.demuxers = [], this.lastInitFrags = [], this.lastFrags = []
}
parseInitSegment(h, e) {
return this.getDemuxerInfo(h, this.lastInitFrags, e, this.demuxClient).pipe(La(({
demuxer: e,
contiguous: t,
trackSwitch: i,
discontinuity: r,
accurateTimeOffset: n
}) => {
const s = h["frag"],
{
keyTagInfo: a,
start: o,
mediaOptionType: l
} = s;
if (this.lastInitFrags[l] = s, h.initSegment) {
const e = ze.remuxInitSegment(new Uint8Array(h.initSegment), this.logger, a),
t = Ze.parseInitSegment(e),
{
mimeType: i,
type: r,
codec: n,
container: s
} = by(t);
return $i({
moovData: t,
mimeType: i,
track: {
type: r,
codec: n,
initSegment: e,
container: s
}
})
}
const d = h.segment || h.initSegment,
u = d ? h.initSegment : void 0,
c = Oc(e.observer);
return $i(c.event(v.FRAG_PARSING_INIT_SEGMENT).pipe(hr(this.handleInitSegmentData)), c.event(x.INTERNAL_ERROR).pipe(La(this.handleError)), e.pushWithoutTransfer(d, a, u, o, r, i, t, h.totalDuration, n, void 0, h.iframeMediaStart, h.iframeDuration).pipe($a(Ii))).pipe(Yr(), Ds(1))
}))
}
parseSegment(y, e) {
return this.getDemuxerInfo(y, this.lastFrags, e, this.demuxClient).pipe(La(({
demuxer: e,
contiguous: t,
trackSwitch: i,
discontinuity: r,
accurateTimeOffset: n
}) => {
const {
frag: h,
defaultInitPTS: p
} = y, {
keyTagInfo: s,
start: a,
duration: f,
mediaOptionType: m
} = h;
let g;
this.lastFrags[m] = h;
const o = Oc(e.observer);
return $i(o.event(v.FRAG_PARSING_INIT_SEGMENT).pipe(La(e => {
var t;
return e.track.initSegment.byteLength !== (null === (t = y.initSegment) || void 0 === t ? void 0 : t.byteLength) && (g = this.handleInitSegmentData(e)), Ii
})), o.event(v.FRAG_PARSING_DATA).pipe(hr(e => {
var {
startPTS: t,
startDTS: i,
firstKeyframePts: r,
framesWithoutIDR: n,
dropped: s,
data1: a,
data2: o,
captionData: l,
id3Samples: d
} = e;
let {
endPTS: u,
endDTS: c
} = e;
return null == u && (this.logger.warn(`${Nu[m]} ${Vp(h)}: null endPTS parsed, using duration ${f}`), u = Object.assign(Object.assign({}, t), {
baseTime: t.baseTime + B(f, t.timescale).baseTime
})), null == c && (this.logger.warn(`${Nu[m]} ${Vp(h)}: null endDTS parsed, using duration ${f}`), c = Object.assign(Object.assign({}, i), {
baseTime: i.baseTime + B(f, i.timescale).baseTime
})), ne(y.iframeMediaStart) || function(e, t, i, r) {
let n = NaN,
s = NaN;
if (ne(i)) s = i, n = .01, isFinite(s) && isFinite(r) && (s += r);
else {
{
const o = void 0
}
}
var {
startPTS: a,
startDTS: i,
endPTS: r,
endDTS: t
} = t;
if (!(0 <= a.baseTime && 0 <= i.baseTime && 0 < e.duration && (null == r || 0 < b(r, a)) && (null == t || 0 < b(t, i)) && (!ne(n) || !ne(s) || Math.abs(S(i) - s) <= n))) throw new D(!1, `Failed demuxer sanity check frag=${Vp(e)} parsed=${JSON.stringify({startPTS:a,endPTS:r,startDTS:i,endDTS:t})} ${ae({expectedStartDTS:s,fudge:n})}`, $.FailedDemuxerSanityCheck)
}(h, e, (p, y.iframeMediaStart), this.config.audioPrimingDelay), {
startPTS: t,
endPTS: u,
startDTS: i,
endDTS: c,
firstKeyframePts: r,
framesWithoutIDR: n,
dropped: s,
data1: a,
data2: o,
captionData: l,
id3Samples: d,
parsedInitSegment: g
}
})), o.event(x.INTERNAL_ERROR).pipe(La(this.handleError)), e.push(y.segment, s, y.initSegment, a, r, i, t, y.totalDuration, n, p, y.iframeMediaStart, y.iframeDuration).pipe($a(Ii))).pipe(Yr(), Ds(1))
}))
}
reset(e) {
if (null == e) return this.demuxers.forEach(e => {
e && e.destroy()
}), void(this.demuxers = []);
const t = this.demuxers[e];
null == t || t.destroy(), this.demuxers[e] = null
}
destroy(e) {
null != e ? this.reset(e) : this.reset()
}
willBeTrackSwitch(e, t) {
var {
mediaOptionType: i,
mediaOptionId: e
} = e, i = (t || this.lastFrags)[i];
return !(i && i.mediaOptionId === e)
}
getDemuxerInfo(e, r, t, i) {
const {
frag: n,
ptsKnown: s,
seeking: a,
live: o
} = e, {
discoSeqNum: l,
mediaSeqNum: d,
mediaOptionType: u
} = n;
return Zr(() => {
var e = this.demuxers[u];
return e ? $i(e) : i.init(this.typeSupported, this.config, t).pipe(Za(e => this.demuxers[u] = e))
}).pipe(hr(e => {
var t = r[u],
i = this.willBeTrackSwitch(n, r);
return {
demuxer: e,
trackSwitch: i,
discontinuity: !(t && l === t.discoSeqNum),
contiguous: !!t && !i && t.mediaSeqNum + 1 === d,
accurateTimeOffset: !a && (s || !o)
}
}))
}
handleInitSegmentData(e) {
var t = e["track"],
i = t["initSegment"],
r = Ze.parseInitSegment(i),
{
mimeType: n,
type: s,
codec: a,
container: e
} = by(r, t.container);
return {
moovData: r,
mimeType: n,
track: Object.assign(Object.assign({}, t), {
type: s,
codec: a,
initSegment: i,
container: e
})
}
}
handleError(e) {
return Vi(e)
}
}
function Ey(a, e, t, h, p, i, r, n) {
var s = h["combined"],
o = function(e) {
let t = 1 / 0;
h.playingFrag && (t = null !== (s = null === (n = e.fragments[h.playingFrag.mediaSeqNum - e.startSN]) || void 0 === n ? void 0 : n.duration) && void 0 !== s ? s : 1 / 0);
var {
minRequiredStartDuration: i,
maxRequiredStartDuration: r,
startTargetDurationFactor: n
} = a, {
targetduration: s,
averagetargetduration: e
} = e, r = n * Math.min(t, e, s, r);
return Math.max(i, r)
}(t.details);
let l = function(e, t, i) {
const {
pos: r,
combined: n,
playingFrag: s
} = h;
if (0 === n.len) return !1;
var a = t.details,
o = a.fragments;
let l = 0 != p && 1 != p || n.len >= i;
var d = o[a.fragments.length - 1],
t = o[0].start + a.totalduration;
let u = !1;
if (s) {
const c = qu.search(o, e => s.discoSeqNum - e.discoSeqNum);
u = e && s.discoSeqNum !== e.discoSeqNum || null == c || $p(c, s)
}
return l && a.liveOrEvent ? l = r <= t - d.duration : a.liveOrEvent || (l = l || t - i <= r), l = l || u, l
}(e, t, o);
return !l && 0 < s.len && null != e && e.state && (l = function(n, e, t, i, r, s, a) {
var o = null === (l = h.sbTuple[gu.Variant]) || void 0 === l ? void 0 : l.buffered,
l = null === (l = h.sbTuple[gu.AltAudio]) || void 0 === l ? void 0 : l.buffered;
if ((null == o ? void 0 : o.len) >= t && (!l || l.len >= t)) return 0;
if (!(o && n && (d = h.pos, (l = n.start + n.duration) > o.end && (n.start - o.end <= a || n.start <= o.end) && t <= l - d))) return 1 / 0;
var d = n.state;
let u = n.tstart,
c = 0;
switch (d) {
case "loading":
c += function(e, t) {
var {
bwSample: i,
duration: r
} = n;
if (!i) return 1 / 0;
r = ne(i.total) ? 8 * i.total : Math.ceil(r * e), e = 8 * i.loaded, r -= e, i = e / (performance.now() - i.tfirst) * 1e3;
if (!ne(i)) return 1 / 0;
t = t.avgBandwidth;
return r / Math.min(t, i)
}(e, i), u = n.tstart + 1e3 * c;
case "loaded":
case "parsing":
c += function(e, t) {
t = ne(t.avgParseTimeMs) ? t.avgParseTimeMs : 0;
return performance.now() < e ? t / 1e3 : Math.max(0, t - (performance.now() - e)) / 1e3
}(u, r), u = n.tstart + 1e3 * c;
case "parsed":
case "appending":
c += function(e, t) {
t = ne(t.avgDataFragAppendMs) ? t.avgDataFragAppendMs : 0;
return performance.now() < e ? t / 1e3 : Math.max(0, t - (performance.now() - e)) / 1e3
}(u, s);
break;
default:
c = 1 / 0
}
return c
}(e, t.variant.bitrate, o, i, r, n, a.maxBufferHole) <= s.len), l
}
function Iy(e, t, i, r) {
if (200 === t && r && 10 < r.length) {
if (Rm.isValidPlaylist(r)) return !0; {
const t = new R(o, _, !0, "response doesnt have #EXTM3U tag", $.PlaylistErrorMissingEXTM3U);
throw t.url = e, t
}
}
return !1
}
const wy = {
name: "pltfrm"
};
function Ay(e, t) {
t = Ah.getKeySystemSecurityLevel(t);
return null != e && void 0 !== t[e]
}
function Oy(e) {
return e.every(e => e.iframes)
}
function ky(e, t) {
return !ne(e) || !ne(t) || e <= t
}
function Cy() {
const n = new Set,
s = new Set;
return e => {
const i = (e, t) => {
t = t ? "audio" : "video";
n.has(e) || s.has(e) || (((e, t) => {
let i = MediaSource.isTypeSupported(`${e}/mp4;codecs=${t}`);
return "mp4a.40.34" !== t || i || (i = MediaSource.isTypeSupported(`${e}/mpeg`)), i
})(t, e) ? n : s).add(e)
},
t = (e, t) => (i(e, t), s.has(e));
let r = !1;
return e.audioCodecList && (r = e.audioCodecList.some(e => t(e, !0))), !r && e.videoCodecList && (r = e.videoCodecList.some(e => t(e, !1))), !r
}
}
function Dy(e, t) {
for (const i in e)
if (e[i].type === t) return e[i];
return {}
}
function My(e, t, i) {
t.filter(e => !i.includes(e)).map(e => e.mediaOptionId)
}
function xy(e, i, s) {
const a = new Map,
r = new Array;
return e.forEach(t => {
var e = Array();
! function(e, t, i) {
var r = Wc.getCapabilities(t.videoCodecList, t.audioCodecList),
t = JSON.stringify(r);
let n;
a.has(t) ? n = a.get(t) : (n = Ah.requestKeySystemAccess(e, r, void 0, s).pipe(hr(() => !0), Vn(e => (s.warn(`Request key system error: ${e.message}`), $i(!1))), Oa({
bufferSize: 1,
refCount: !0
})), a.set(t, n)), i.push(n)
}(i, t, e);
e = en(e).pipe(hr(e => {
if (void 0 === e.find(e => !1 === e)) return t
}));
r.push(e)
}), en(r).pipe(hr(e => e.filter(e => Boolean(e))))
}
function Py(e, r) {
const o = new Set,
l = new Set,
d = !MediaSource.isTypeSupported('audio/mp4; codecs="mp4a.40.2"; channels="-1"'),
u = d && !MediaSource.isTypeSupported('audio/mp4; codecs="mp4a.40.2"; channels="2"; features="INVALID"'),
t = e.filter(e => {
let t = !1;
var i;
return e.audioCodecList && e.audioGroupId && (i = fm.getRichestChannelLayoutForGroupId(e.audioGroupId, r), 0 < e.audioCodecList.length && i && (t = ((e, t) => {
var i, r, n, s = be.isDolbyAtmos(e, t);
if (u || d && !s) {
n = `${i=e}/${r=t}`, o.has(n) || l.has(n) || (((e, t) => {
const i = t.split("/"),
r = parseInt(i[0]);
let n, s;
if (1 < i.length) {
const t = i[1].split(",")[0];
n = `audio/mp4;codecs="${e}";channels="${r}";features="${t}"`, s = `audio/mp4;codecs="${e}";channels="8";features="${t}"`
} else n = `audio/mp4;codecs="${e}";channels="${r}"`;
let a = MediaSource.isTypeSupported(n);
return !a && s && (a = MediaSource.isTypeSupported(s)), a
})(i, r) ? o : l).add(n);
const a = `${e}/${t}`;
return l.has(a)
}
return !!s
})(fm.getRichestAudioCodec(e.audioCodecList), i))), !t
});
return My(0, e, t), t
}
function Ry(e, t, l) {
const n = 0 < (null == t ? void 0 : t.length),
i = e.filter(o => {
var e = function() {
if (!l) return {
highestPlayableAverageBitRate: void 0,
highestPlayablePeakBitRate: void 0,
highestPlayableWidth: void 0,
highestPlayableHeight: void 0,
highestPlayableFrameRate: void 0
};
const e = o.videoCodec,
t = o.videoRange,
i = l.videoDynamicRangeFormats,
r = l.videoCodecs,
n = be.getDynamicRangeType(t, e),
s = be.getCompressionType(e),
a = function(e, t, i, r) {
if (!r && !i) return {};
var n, s, t = i ? Dy(i, t) : {},
r = r ? Dy(r, e) : {};
let a, o;
return o = e === fe.SDR ? (a = t, r) : (a = r, t), n = Object.assign({}, a), s = o, Object.keys(s).forEach(e => {
n[e] || (n[e] = s[e])
}), n
}(n, s, r, i);
return s !== me.VP09 && (a.highestPlayablePeakBitRateForClearContent = void 0), a
}(),
t = e["highestPlayablePeakBitRateForClearContent"],
i = o.allowedCPCMap || n,
r = ky(o.bandwidth, e.highestPlayablePeakBitRate);
return (i || !t ? r : r || ky(o.bandwidth, t)) && ky(o.avgBandwidth, e.highestPlayableAverageBitRate) && ky(o.width, e.highestPlayableWidth) && ky(o.height, e.highestPlayableHeight) && ky(o.frameRate, e.highestPlayableFrameRate)
});
return My(0, e, i), i
}
function Ly(e, a, o, l, d, u) {
var r = (null == l ? void 0 : l.maxHdcpLevel) || void 0;
let c = [...e];
(0 < d.disableVideoCodecList.size || 0 < d.disableAudioCodecList.size) && (c = function(e, t, i) {
let r = e.filter(e => !e.videoCodec || e.videoCodecList.every(e => {
e = qp(e);
return !t.has(e)
}));
return r = r.filter(e => !(!e.iframes && e.audioCodec) || e.audioCodecList.every(e => {
e = jp(e);
return !i.has(e)
})), My(0, e, r), r
}(c, d.disableVideoCodecList, d.disableAudioCodecList)), r && dm(r) && (c = function(e) {
const t = um(r),
i = e.filter(e => {
e = e.hdcpLevel;
return !e || um(e) <= t
});
return My(0, e, i), i
}(c));
var t = null == l ? void 0 : l.maxSecurityLevel,
e = null == d ? void 0 : d.keySystemPreference;
t && e && Ay(t, e) && (c = function(e, t, i) {
function r(e) {
return Ay(e, i) ? n[e] : -1
}
const n = Ah.getKeySystemSecurityLevel(i),
s = Ah.getKeySystemFormat(i),
a = r(t),
o = e.filter(e => {
e = null !== (e = null === (e = e.allowedCPCMap) || void 0 === e ? void 0 : e[s]) && void 0 !== e ? e : [];
let t = !0;
for (const i of e)
if (t = r(i) <= a, !t) break;
return t
});
return My(0, e, o), [...o]
}(c, t, e)), c = c.map(t => {
var e;
return t.audioCodecList && t.audioGroupId && ((e = null == (e = a.find(e => e.groupId === t.audioGroupId)) ? void 0 : e.channels) && (t.audioChannelCount = parseInt(e))), t
});
const h = !(null == d || !d.useMediaKeySystemAccessFilter) && e && navigator && "function" == typeof navigator.requestMediaKeySystemAccess;
return (h ? xy(c, e, u) : $i(c)).pipe(La(e => {
if (0 === e.length || Oy(e)) throw new R(L, f, void 0, "no media option with compatible codecs found in playlist", void 0);
h && My(0, c, e);
const t = navigator && navigator.mediaCapabilities,
n = !(null == d || !d.useMediaCapabilities) && t && "function" == typeof t.decodingInfo;
let i;
return i = n ? function(e, n, s) {
const a = [],
o = Cy(),
l = function(o) {
const l = new Map,
d = navigator && navigator.mediaCapabilities;
return (i, e, t, n, r) => {
const s = {
type: "media-source"
};
n ? s.video = function(e) {
const t = {
contentType: `video/mp4;codecs=${e}`,
width: i.width,
height: i.height,
bitrate: i.bandwidth || i.avgBandwidth,
framerate: i.iframes ? 8 : i.frameRate
};
if (i.videoRange) switch (i.videoRange) {
case "PQ":
be.isDolby(e) ? (t.hdrMetadataType = Pm.DoVi, t.colorGamut = "rec2020") : (be.isHEVC(e) || be.isVP09(e)) && (t.hdrMetadataType = Pm.HDR10, t.colorGamut = "rec2020"), t.transferFunction = "pq";
break;
case "HLG":
t.colorGamut = "rec2020", t.transferFunction = "hlg"
}
return t
}(t) : s.audio = function(e, t, i) {
const r = {
contentType: `audio/mp4;codecs=${e}`
},
n = fm.getRichestChannelLayoutForGroupId(t.audioGroupId, i);
return n && (r.channels = be.getChannelCount(n).toString(), r.spatialRendering = be.isDolbyAtmos(e, n)), r
}(t, i, e);
e = JSON.stringify(s);
let a;
return l.has(e) ? a = l.get(e) : (a = Fr(d.decodingInfo(s)).pipe(hr(e => {
const t = e.configuration || e.supportedConfiguration,
i = t instanceof Object && (!s.video || null == Object.keys(s.video).find(e => !(e in t.video))) && (!s.audio || null == Object.keys(s.audio).find(e => !(e in t.audio))),
r = e.supported && (!n || e.powerEfficient) && i;
return r || o.warn(wy, `Unsupported config ${e.supported}/${e.powerEfficient}/${i} ${JSON.stringify(s)} supportedConfig=${JSON.stringify(t)}`), r
})), l.set(e, a)), [...r, a]
}
}(s);
return e.forEach(t => {
var e;
let i = [];
if (null === (e = t.videoCodecList) || void 0 === e || e.forEach(e => {
i = l(t, n, e, !0, i)
}), 0 < (null === (e = t.audioCodecList) || void 0 === e ? void 0 : e.length)) {
const s = fm.getRichestAudioCodec(t.audioCodecList);
i = l(t, n, s, !1, i)
}
let r = $i(t);
0 < i.length && (r = en(i).pipe(hr(e => null == e.find(e => !1 === e) ? t : null), Vn(e => (s.warn(wy, `decodingInfo errror: ${e.message}`), $i(o(t) ? t : null))))), a.push(r)
}), en(a).pipe(hr(e => e.filter(e => Boolean(e))))
}(e, a, u) : $i(e = Py((r = e, s = Cy(), s = r.filter(s), My(0, r, s), e = s), a)), i.pipe(hr(e => {
if (0 === e.length || Oy(e)) throw new R(L, f, void 0, "no media option with compatible codecs found in manifest", void 0);
if (0 === (t = e = Ry(e, o, l), r = t.filter(e => !e.iframes || !e.width || !e.height || e.width * e.height <= 2488320), My(0, t, r), (e = r).length) || Oy(e)) throw new R(L, f, void 0, "no media option with compatible codecs found in manifest", void 0);
var t;
let i = (null == l ? void 0 : l.videoDynamicRangeFormats) || [];
n && 0 === i.length && (i = [{
type: fe.SDR
}, {
type: fe.HDR
}, {
type: fe.HDR10
}, {
type: fe.DolbyVision
}, {
type: fe.HLG
}]);
var {
hdrMediaOptions: r,
sdrMediaOptions: e
} = function(e, t) {
const i = t.reduce((e, t) => {
switch (t.type) {
case fe.DolbyVision:
e.doViSupported = !0;
break;
case fe.HDR10:
e.hdr10Supported = !0;
break;
case fe.HLG:
e.hlgSupported = !0
}
return e
}, {
doViSupported: !1,
hdr10Supported: !1,
hlgSupported: !1
}),
{
doViSupported: r,
hdr10Supported: n,
hlgSupported: s
} = i;
return e.reduce((e, t) => {
var i;
switch (be.getDynamicRangeType(t.videoRange, null !== (i = t.videoCodec) && void 0 !== i ? i : "")) {
case fe.HDR:
case fe.HDR10:
n && e.hdrMediaOptions.push(t);
break;
case fe.DolbyVision:
r && e.hdrMediaOptions.push(t);
break;
case fe.HLG:
s && e.hdrMediaOptions.push(t);
break;
default:
"SDR" !== t.videoRange && null != t.videoRange || e.sdrMediaOptions.push(t)
}
return e
}, {
hdrMediaOptions: new Array,
sdrMediaOptions: new Array
})
}(e, i);
if (0 === r.length && 0 === e.length || Oy(r) && Oy(e)) throw new R(L, "manifestIncompatibleVideoRangeError", void 0, "mediaOption with compatible VIDEO-RANGE not found in manifest", void 0);
return {
hdrMediaOptions: r,
sdrMediaOptions: e
}
}), Vn(e => {
throw e instanceof R && (e.fatal = !0, e.response = $.IncompatibleAsset), e
}));
var r, s
}))
}
function _y(e, t) {
return t.mediaOptionId !== e.mediaOptionId && t.persistentID === e.persistentID && t.groupId !== e.groupId
}(A = Pm = Pm || {}).HDR10 = "smpteSt2086", A.DoVi = "smpteSt2094-10", A.HDR10Plus = "smpteSt2094-40";
class Ny extends jm {
constructor(e, t, i) {
super(e, t, i)
}
static makeFilters() {
return Hm()
}
_initFilters() {
return Ny.kAllowFilters
}
get _mediaOptionType() {
return this.mediaOptionType
}
get preferredHost() {
return null
}
get preferredHost$() {
return $i(null)
}
get mediaOptionListInfo() {
var e;
return null !== (e = null === (e = this.getEntity(this.itemId)) || void 0 === e ? void 0 : e.mediaOptionListTuple[this._mediaOptionType]) && void 0 !== e ? e : null
}
get mediaOptionListInfo$() {
return this.selectEntity(this.itemId, e => e && e.mediaOptionListTuple ? e.mediaOptionListTuple[this._mediaOptionType] : null).pipe(Kp())
}
getFallbackVariant(t, e, i, r) {
var n;
const s = null === (n = this.mediaOptionList) || void 0 === n ? void 0 : n.find(e => e.mediaOptionId === t);
if (!s) return null;
const a = this.filteredMediaOptionList;
if (!a) return null;
const o = Eu(s.url);
if (i) return null !== (i = a.find(e => _y(s, e) && !Au(o, e.url))) && void 0 !== i ? i : null;
let l = null;
for (const t of a) !_y(s, t) || l && !Au(o, t.url) || (l = t);
return l
}
getMatchingAlternateWithPersistentId(t, i, r) {
var e;
return null !== (e = this.preferredMediaOptionList.find(e => !(0 < (null == r ? void 0 : r.length) && r.includes(e.mediaOptionId)) && (!ne(t) || e.persistentID === t) && (!i || this.matchGroup(e, i.audioGroupId, i.subtitleGroupId, i.closedcaption)))) && void 0 !== e ? e : null
}
matchGroup(e, t, i, r) {
let n = !1;
switch (e.type) {
case "CLOSED-CAPTIONS":
n = !r || e.groupId === r;
break;
case "SUBTITLES":
n = !i || e.groupId === i;
break;
case "AUDIO":
n = !t || e.groupId === t
}
return n
}
getMatchingAlternate(e, t) {
e = this.mediaOptionFromId(e);
return this.getMatchingAlternateWithPersistentId(null == e ? void 0 : e.persistentID, t, [])
}
packageAlternateMediaOption(e, t, i) {
return t.mediaType === Su.CLOSEDCAPTION ? this.augmentClosedCaptionsWithForcedSubtitles(null == e ? void 0 : e.subtitleGroupId, t, i) : t
}
augmentClosedCaptionsWithForcedSubtitles(e, t, i) {
i = this.pairForcedSubtitleMediaOptionWithClosedCaption(e, t, i);
return i ? Object.assign(Object.assign({}, t), {
url: i.url,
backingMediaOptionId: i.mediaOptionId
}) : t
}
pairForcedSubtitleMediaOptionWithClosedCaption(t, i, r) {
let n;
if (i && i.mediaType === Su.CLOSEDCAPTION) {
let e = this.mediaOptionList;
r && (e = this.preferredMediaOptionList), n = Ny.pairForcedSubtitleMediaOptionWithClosedCaptionInList(t, i, e)
}
return n
}
static pairForcedSubtitleMediaOptionWithClosedCaptionInList(t, i, e) {
return e.find(function(e) {
return e.mediaType === Su.SUBTITLE && e.lang === i.lang && e.forced && e.autoselect && (!t || e.groupId === t)
})
}
}
Ny.kAllowFilters = Ny.makeFilters();
class Fy extends kl {
constructor(e, t) {
super(e), this.itemId = t, this.mediaOptionListQueries = [new Xm(e, this.itemId), new Ny(e, this.itemId, gu.AltAudio), new Ny(e, this.itemId, gu.Subtitle)]
}
get rootPlaylistEntity() {
return this.getEntity(this.itemId)
}
get rootMediaOptionsTuple() {
var e = null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.mediaOptionListTuple;
return e ? [e[0].mediaOptions, e[1].mediaOptions, e[2].mediaOptions] : [
[],
[],
[]
]
}
get itemStartOffset() {
var e, t;
return null !== (e = this.rootPlaylistEntity) && void 0 !== e && e.itemStartOffset && ne(null === (t = this.rootPlaylistEntity) || void 0 === t ? void 0 : t.itemStartOffset) ? null === (t = this.rootPlaylistEntity) || void 0 === t ? void 0 : t.itemStartOffset : 0
}
get highestVideoCodec() {
var e;
return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.highestVideoCodec
}
get baseUrl() {
var e;
return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.baseUrl
}
get anchorTime() {
var e;
return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.anchorTime
}
get discoSeqNum() {
var e;
return null !== (e = null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.discoSeqNum) && void 0 !== e ? e : NaN
}
get discoSeqNum$() {
return this.selectEntity(this.itemId, "discoSeqNum")
}
get audioMediaSelectionGroup() {
var e;
return null !== (e = null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.audioMediaSelectionGroup) && void 0 !== e ? e : null
}
get subtitleMediaSelectionGroup() {
var e;
return null !== (e = null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.subtitleMediaSelectionGroup) && void 0 !== e ? e : null
}
get audioMediaSelectionOptions() {
var e;
return null !== (e = null === (e = null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.audioMediaSelectionGroup) || void 0 === e ? void 0 : e.MediaSelectionGroupOptions) && void 0 !== e ? e : []
}
get subtitleMediaSelectionOptions() {
var e;
return null !== (e = null === (e = null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.subtitleMediaSelectionGroup) || void 0 === e ? void 0 : e.MediaSelectionGroupOptions) && void 0 !== e ? e : []
}
get contentSteeringOption() {
var e;
return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.contentSteeringOption
}
get masterVariableList() {
var e;
return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.masterVariableList
}
get loadStats() {
var e;
return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.loadStats
}
get isMediaPlaylist() {
var e;
return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.isMediaPlaylist
}
getInitPTS(e) {
var t;
return null === (t = this.rootPlaylistEntity) || void 0 === t ? void 0 : t.initPtsRecord[e]
}
get abrStatus$() {
return this.selectEntity(this.itemId, e => null == e ? void 0 : e.abrStatus)
}
get abrStatus() {
var e;
return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.abrStatus
}
get nextMaxAutoOptionId() {
var e;
return null === (e = null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.abrStatus) || void 0 === e ? void 0 : e.nextMaxAutoOptionId
}
get nextMinAutoOptionId() {
var e;
return null === (e = null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.abrStatus) || void 0 === e ? void 0 : e.nextMinAutoOptionId
}
initPTS$(t) {
return this.selectEntity(this.itemId, ({
initPtsRecord: e
}) => e[t])
}
get rootPlaylistEntity$() {
return this.selectEntity(this.itemId).pipe(ln(e => Boolean(e)), hr(e => e))
}
get rootPlaylistEntityAdded$() {
return this.selectEntityAction(Eo.Add).pipe(hr(e => e.map(e => this.getEntity(e))))
}
get rootMediaOptionsTuple$() {
return ed([this.selectEntity(this.itemId, e => e.mediaOptionListTuple[0].mediaOptions), this.selectEntity(this.itemId, e => e.mediaOptionListTuple[1].mediaOptions), this.selectEntity(this.itemId, e => e.mediaOptionListTuple[2].mediaOptions)])
}
get sessionData() {
var e;
return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.sessionData
}
get sessionData$() {
return this.selectEntity(this.itemId, ({
sessionData: e
}) => e).pipe(Kp())
}
get anchorTime$() {
return this.selectEntity(this.itemId, "anchorTime").pipe(La(e => {
var t;
return ne(null == e ? void 0 : e.pos) ? (null == e ? void 0 : e.pos) !== (null === (t = this.anchorTime) || void 0 === t ? void 0 : t.pos) ? (Qe().warn(`anchorTime doesn't match stored value! ${null==e?void 0:e.pos} !== ${null===(t=this.anchorTime)||void 0===t?void 0:t.pos}`), Ii) : $i(e) : Ii
}))
}
get pendingSeek$() {
return this.selectEntity(this.itemId, ({
pendingSeek: e
}) => e).pipe(Is((e, t) => e === t || "number" == typeof e && "number" == typeof t && isNaN(e) && isNaN(t)))
}
get enabledMediaOptionKeys$() {
return this.selectEntity(this.itemId, "enabledMediaOptionKeys").pipe(ln(e => Boolean(e)))
}
get enabledMediaOptionKeys() {
var e;
return null !== (e = null === (e = this.getEntity(this.itemId)) || void 0 === e ? void 0 : e.enabledMediaOptionKeys) && void 0 !== e ? e : [Lu, Lu, Lu]
}
get enabledMediaOptionSwitchContexts() {
var e;
return null !== (e = null === (e = this.getEntity(this.itemId)) || void 0 === e ? void 0 : e.mediaOptionSwitchContexts) && void 0 !== e ? e : [null, null, null]
}
enabledMediaOptionSwitchContextsByType$(t) {
return this.selectEntity(this.itemId, "mediaOptionSwitchContexts").pipe(hr(e => null == e ? void 0 : e[t]))
}
get enabledMediaOptions$() {
return ed([this.enabledMediaOptionByType$(gu.Variant), this.enabledMediaOptionByType$(gu.AltAudio), this.enabledMediaOptionByType$(gu.Subtitle)])
}
get enabledAVOptions$() {
return ed([this.enabledMediaOptionByType$(gu.Variant), this.enabledMediaOptionByType$(gu.AltAudio)])
}
rawEnabledMediaOptionByType$(t) {
return this.enabledMediaOptionKeys$.pipe(hr(e => {
const i = e[t];
return _u(i) && this.rootMediaOptionsTuple[t].find(e => {
return t = i, e.itemId === t.itemId && e.mediaOptionId === t.mediaOptionId;
var t
}) || Lu
}))
}
enabledMediaOptionByType$(e) {
return this.rawEnabledMediaOptionByType$(e).pipe(Is((e, t) => e.mediaOptionId === t.mediaOptionId && e.url === t.url))
}
enabledMediaOptionSwitchForType$(e) {
return this.rawEnabledMediaOptionByType$(e).pipe(bo(this.enabledMediaOptionSwitchContextsByType$(e)), Ra(null), ha(), hr(([e, t]) => ({
fromId: null == e ? void 0 : e[0].mediaOptionId,
toId: null == t ? void 0 : t[0].mediaOptionId,
switchContext: null == t ? void 0 : t[1]
})), Is((e, t) => e.fromId === t.fromId && e.toId === t.toId))
}
enableMediaOptionSwitchedForType$(t) {
return this.enabledMediaOptionByType$(t).pipe(La(e => Gu(Mr([$i(e), this.enabledMediaOptionSwitchContextsByType$(t).pipe(ha())]), ([, e]) => e[0] && !e[1])), hr(([e]) => e))
}
enabledMediaOptionIdByType(e) {
return this.getEntity(this.itemId).enabledMediaOptionKeys[e].mediaOptionId
}
get enabledVariantMediaOptionIdBeforeTrickplaySwitch() {
return this.getEntity(this.itemId).enabledVariantMediaOptionIdBeforeTrickplaySwitch
}
variantMediaOptionById(e) {
return this.mediaOptionListQueries[gu.Variant].mediaOptionFromId(e)
}
alternateMediaOptionById(e, t) {
return this.mediaOptionListQueries[e].mediaOptionFromId(t)
}
enabledAlternateMediaOptionByType(e) {
var t = this.enabledMediaOptionIdByType(e);
return this.alternateMediaOptionById(e, t)
}
get enabledVariantMediaOption() {
var e = this.enabledMediaOptionIdByType(gu.Variant);
return this.variantMediaOptionById(e)
}
lastLoadedMediaOptionByType(e) {
var t;
return null === (t = this.getEntity(this.itemId).lastLoadedMediaOptionKeys) || void 0 === t ? void 0 : t[e]
}
get nextMediaOptionsKeys$() {
return this.selectEntity(this.itemId, "nextMediaOptionKeys")
}
get preferredMediaOptions() {
return [this.mediaOptionListQueries[0].preferredMediaOptionList, this.mediaOptionListQueries[1].preferredMediaOptionList, this.mediaOptionListQueries[2].preferredMediaOptionList]
}
get preferredMediaOptions$() {
return ed([this.mediaOptionListQueries[0].preferredMediaOptionList$, this.mediaOptionListQueries[1].preferredMediaOptionList$, this.mediaOptionListQueries[2].preferredMediaOptionList$])
}
get filteredMediaOptions() {
return [this.mediaOptionListQueries[0].filteredMediaOptionList, this.mediaOptionListQueries[1].filteredMediaOptionList, this.mediaOptionListQueries[2].filteredMediaOptionList]
}
getDisabledMediaOption(e) {
return {
itemId: this.itemId,
mediaOptionType: e,
mediaOptionId: "Nah"
}
}
getEnabledMediaOptionMask() {
return this.enabledMediaOptionKeys.map(e => _u(e))
}
getPreferredMediaOptionsByType$(e) {
return this.mediaOptionListQueries[e].preferredMediaOptionList$
}
altMediaOptionHasValidUrl(e, t) {
t = this.alternateMediaOptionById(e, t);
return Boolean(null == t ? void 0 : t.url)
}
get hdrMode$() {
return this.mediaOptionListQueries[gu.Variant].hdrMode$
}
get maxHdcpLevel$() {
return this.mediaOptionListQueries[gu.Variant].maxHdcpLevel$
}
get currentPathwayID() {
return this.mediaOptionListQueries[gu.Variant].currentPathwayID
}
get preferredHost() {
return this.mediaOptionListQueries[gu.Variant].preferredHost
}
getErrorInfoByType(e) {
var t;
return null != (null === (t = this.rootPlaylistEntity) || void 0 === t ? void 0 : t.errorsByType) ? this.rootPlaylistEntity.errorsByType[e] : null
}
getInFlightFragByType(e) {
var t;
return null !== (e = null === (t = null === (t = this.getEntity(this.itemId)) || void 0 === t ? void 0 : t.inFlightFrags) || void 0 === t ? void 0 : t[e]) && void 0 !== e ? e : null
}
getInFlightFragByType$(t) {
return this.selectEntity(this.itemId, e => {
return null === (e = null == e ? void 0 : e.inFlightFrags) || void 0 === e ? void 0 : e[t]
})
}
matchAlternates(e, t, i, r) {
t = ne(t) ? this.mediaOptionListQueries[gu.AltAudio].getMatchingAlternateWithPersistentId(t, e, r) : void 0, r = ne(i) ? this.mediaOptionListQueries[gu.Subtitle].getMatchingAlternateWithPersistentId(i, e, r) : void 0;
return [t || Lu, r || Lu]
}
getLegacyMatchingAlternateWithPersistentId(e, t, i) {
let r = this.mediaOptionListQueries[e].getMatchingAlternateWithPersistentId(t, i, []);
return r = r || this.mediaOptionListQueries[e].getMatchingAlternateWithPersistentId(t, void 0, []), r
}
isValidMediaOptionTuple(i, e) {
const r = e || this.getEnabledMediaOptionMask();
return [gu.Variant, gu.AltAudio, gu.Subtitle].reduce((e, t) => e && r[t] === _u(i[t]), !0)
}
matchGroup(e, t, i, r) {
var n = e.mediaOptionType;
return this.mediaOptionListQueries[n].matchGroup(e, t, i, r)
}
get preferHDR() {
return this.mediaOptionListQueries[gu.Variant].mediaOptionListInfo.preferHDR
}
}
const By = {
name: "rps"
};
class Uy {
constructor(e, t) {
this.store = e, this.logger = t
}
getQuery() {
return new kl(this.store)
}
getQueryForId(e) {
return new Fy(this.store, e)
}
set rootPlaylistEntity(e) {
Do("root.add.rootPlaylist"), this.store.add(e)
}
removeItems(e) {
Do(`root.add.remove ${JSON.stringify(e)}`), this.store.remove(e)
}
removeAll() {
Do("root.add.clear"), this.store.remove()
}
setRootPlaylistEntity(e, t) {
Do("root.set.rootPlaylistEntity"), this.store.update(e, e => t)
}
setSessionData(e, t) {
Do("root.set.sessionData"), this.store.update(e, e => {
e.sessionData = t
})
}
setAnchorTime(e, t) {
Do(`root.set.anchorTime: ${null==t?void 0:t.pos} ${null==t?void 0:t.discoSeqNum}`), this.store.update(e, e => {
e.anchorTime = t
})
}
setDiscoSeqNum(e, t) {
Do(`root.set.discoSeqNum: ${t}`), this.store.update(e, e => {
e.discoSeqNum = t
})
}
setPendingSeek(e, t) {
Do("root.set.pendingSeek"), this.store.update(e, e => {
e.pendingSeek = t
}), void 0 === t && fg().setUserSeek(t)
}
setEnabledMediaOptionSwitchContextByType(e, i, r, n) {
this.store.update(e, e => {
var t;
if (e.enabledMediaOptionKeys[i].mediaOptionId === r) {
const r = null !== (t = e.mediaOptionSwitchContexts) && void 0 !== t ? t : [null, null, null];
r[i] = n ? {
userInitiated: n.userInitiated,
switchPosition: n.switchPosition
} : null, e.mediaOptionSwitchContexts = r
} else Do(`root.set.mediaOptionSwitchContextByType ${r} doesn't match existing mediaOption ${e.enabledMediaOptionKeys[i].mediaOptionId}`)
})
}
setEnabledVariantMediaOptionIdBeforeTrickplaySwitch(e, t) {
this.store.update(e, e => {
e.enabledVariantMediaOptionIdBeforeTrickplaySwitch = t
})
}
setEnabledMediaOptionByType(r, n, s, a = !1, o) {
s = s || {
itemId: r,
mediaOptionType: n,
mediaOptionId: "Nah"
}, this.store.update(r, e => {
var t;
const i = null !== (t = [...e.enabledMediaOptionKeys]) ? t : [Lu, Lu, Lu];
if (i[n] = {
itemId: r,
mediaOptionId: s.mediaOptionId
}, this._updateEnabledMediaOptionKeys(e, i), a) {
const r = null !== (t = e.mediaOptionSwitchContexts) && void 0 !== t ? t : [null, null, null];
r[n] = o ? {
userInitiated: o.userInitiated,
switchPosition: o.switchPosition
} : null, e.mediaOptionSwitchContexts = r
}
})
}
_associateForcedSubtitleWithClosedCaption(e, t, i, r) {
if ((null == i ? void 0 : i.mediaType) === Su.CLOSEDCAPTION) {
t = r.variantMediaOptionById(t), r = r.mediaOptionListQueries[gu.Subtitle].packageAlternateMediaOption(t, i, !0);
if (r.url !== i.url) {
const n = jy(t, r, e.mediaOptionListTuple[gu.Subtitle].mediaOptions, Qe());
e.mediaOptionListTuple[gu.Subtitle].mediaOptions = n
}
}
}
_updateEnabledMediaOptionKeys(t, i) {
var e, r;
const n = null !== (e = t.enabledMediaOptionKeys) && void 0 !== e ? e : [Lu, Lu, Lu];
let s;
for (let e = 0; e < i.length; ++e) {
var a = i[e],
o = n[e].mediaOptionId !== a.mediaOptionId;
if (o && (n[e] = Object.assign({}, a)), e === gu.Variant) {
const i = this.getQueryForId(a.itemId).mediaOptionListQueries[e].mediaOptionList;
o ? t.abrStatus = (r = a.mediaOptionId, o = i, o = Xg(r, o), {
fragDownloadSlow: !1,
fragDownloadTooSlow: !1,
nextMinAutoOptionId: Lu.mediaOptionId,
nextMaxAutoOptionId: Lu.mediaOptionId,
highBWTrigger: o
}) : t.abrStatus.highBWTrigger = Xg(a.mediaOptionId, i), s = a
} else if (e === gu.Subtitle && _u(a)) {
const i = this.getQueryForId(a.itemId),
n = i.alternateMediaOptionById(e, a.mediaOptionId);
this._associateForcedSubtitleWithClosedCaption(t, s.mediaOptionId, n, i)
}
}
t.enabledMediaOptionKeys = n, t.nextMediaOptionKeys = void 0
}
setManualMode(e, t) {
this.store.update(e, e => {
e.manualMode = t
})
}
setEnabledMediaOptions(e, i) {
this.store.update(e, e => {
var t = i.map(({
mediaOptionId: e,
itemId: t
}) => ({
mediaOptionId: e,
itemId: t
}));
this._updateEnabledMediaOptionKeys(e, t)
})
}
setEnabledMediaOptionsAndSwitchContexts(e, i, r) {
this.store.update(e, e => {
var t = i.map(({
mediaOptionId: e,
itemId: t
}) => ({
mediaOptionId: e,
itemId: t
}));
this._updateEnabledMediaOptionKeys(e, t), e.mediaOptionSwitchContexts = r
})
}
setNextMediaOptions(e, i) {
Do(`root.set.nextMediaOptions: ${JSON.stringify(null==i?void 0:i.map(e=>e.mediaOptionId))}`), this.store.update(e, e => {
var t = i ? i.map(({
itemId: e,
mediaOptionId: t
}) => ({
itemId: e,
mediaOptionId: t
})) : null;
e.nextMediaOptionKeys = t
})
}
updateEnabledMediaOptions(e) {
Do("root.set.updateEnabledMediaOptions"), this.store.update(e, e => {
e.nextMediaOptionKeys && !0 !== e.manualMode && (Do(`root.set.updateEnabledMediaOptions ${JSON.stringify(e.nextMediaOptionKeys)}`), this._updateEnabledMediaOptionKeys(e, [...e.nextMediaOptionKeys])), e.nextMediaOptionKeys = void 0
})
}
setLastLoadedMediaOptionByType(r, n, s) {
Do(`root.set.lastLoadedMediaOptionByType: ${n} ${(s=s||{itemId:r,mediaOptionType:n,mediaOptionId:"Nah"}).mediaOptionId}`), this.store.update(r, e => {
var t;
const i = null !== (t = e.lastLoadedMediaOptionKeys) && void 0 !== t ? t : [Lu, Lu, Lu];
i[n] = {
itemId: r,
mediaOptionId: s.mediaOptionId
}, e.lastLoadedMediaOptionKeys = i
})
}
setPreferredHost(e, t) {
Do(`root.set.preferredHost: ${t}`), this.store.update(e, e => {
e && (e.mediaOptionListTuple[gu.Variant].preferredHost = t)
})
}
setViewportInfo(e, t) {
Do(`root.set.viewportInfo: ${JSON.stringify(t)}`), this.store.update(e, e => {
e && (e.mediaOptionListTuple[gu.Variant].viewportInfo = t)
})
}
static getExistingPersistentIds(e) {
var t;
const i = {},
r = null === (t = e.enabledMediaOptionKeys[gu.AltAudio]) || void 0 === t ? void 0 : t.mediaOptionId;
if ("Nah" !== r) {
const s = e.mediaOptionListTuple[gu.AltAudio],
t = Km(s.mediaOptions, Ny.kAllowFilters, s).find(e => e.mediaOptionId === r);
i.audioPersistentId = null == t ? void 0 : t.persistentID
}
const n = null === (t = e.enabledMediaOptionKeys[gu.Subtitle]) || void 0 === t ? void 0 : t.mediaOptionId;
if ("Nah" !== n) {
const s = e.mediaOptionListTuple[gu.Subtitle],
t = Km(s.mediaOptions, Ny.kAllowFilters, s).find(e => e.mediaOptionId === n);
i.subtitlePersistentId = null == t ? void 0 : t.persistentID
}
return i
}
static doUpdateRootHDRSwitch(e, t, i, r) {
const n = e.mediaOptionListTuple.map(e => Object.assign({}, e));
n[gu.Variant].preferHDR = t, n[gu.Variant].hasHdrLevels = i;
const s = mg(),
a = sy.getEntity(e.itemId),
o = Zf(e.itemId),
l = o.getBandwidthEstimate(s, null == a ? void 0 : a.serviceName),
d = o.getPlaylistEstimate(s, null == a ? void 0 : a.serviceName),
u = o.getFragEstimate(s, null == a ? void 0 : a.serviceName),
c = o.getBufferEstimate(s, null == a ? void 0 : a.serviceName),
h = {
targetDuration: u.maxDurationSec || (null == s ? void 0 : s.defaultTargetDuration),
targetStartupMs: null == s ? void 0 : s.targetStartupMs
},
p = Uy.getExistingPersistentIds(e);
return Qy(Object.assign(Object.assign({}, e), {
mediaOptionListTuple: n,
nextMediaOptionKeys: null
}), p, r, l, h, d, u, c)
}
switchToSDROnly(e) {
Do("root.switchToSDROnly"), this.store.update(e, e => {
var t = Uy.doUpdateRootHDRSwitch(e, !1, !1, this.logger)["mediaOptionListTuple"];
e.mediaOptionListTuple = t
})
}
setHDRPreference(e, i, r) {
Do(`root.set.HDRPreference: ${i}`), this.store.update(e, e => {
var t = e.mediaOptionListTuple[gu.Variant];
if (t.preferHDR !== i && (!i || t.hasHdrLevels)) {
t = Uy.doUpdateRootHDRSwitch(e, i, t.hasHdrLevels, this.logger);
if (r) return t;
e.mediaOptionListTuple = t.mediaOptionListTuple
}
})
}
setPathwayPriority(e, i) {
Do(`root.set.PathwayPriority: [ ${i.join(", ")} ]`), this.store.update(e, e => {
if (e) {
const t = e.mediaOptionListTuple[gu.Variant];
t.pathwayPriority = i, t.preferredHost = null
}
})
}
setCurrentPathwayID(e, t) {
Do(`root.set.currentPathwayID: ${t}`), this.store.update(e, e => {
e && (e.mediaOptionListTuple[gu.Variant].currentPathwayID = t)
})
}
setInitPTS(e, t, i, r, n, s) {
Do(`root.set.initPTS: ${e} ${t} variantDTS:${JSON.stringify(i)} timelineOffset: ${r}`), this.store.update(e, e => {
e.initPtsRecord[t] = {
variantDTS: i,
timelineOffset: r,
offsetTimestamp: n,
iframeMode: s
}
})
}
static prunePenaltyBox(e, t) {
return e.filter(e => !(e.expiry <= t))
}
static addToPenaltyBox(e, t, i) {
return e.push({
mediaOptionId: i,
expiry: t + 12e4
})
}
addToPenaltyBox(e, r, n) {
Do(`root.set.penaltyBox: ${r}: ${n}`), this.store.update(e, ({
mediaOptionListTuple: e
}) => {
const t = e[r],
i = performance.now();
t.penaltyBoxQueue = Uy.prunePenaltyBox(t.penaltyBoxQueue, i), Uy.addToPenaltyBox(t.penaltyBoxQueue, i, n)
})
}
prunePenaltyBox(e, r = null) {
Do(`root.set.prunePenaltyBox: ${r}`), this.store.update(e, ({
mediaOptionListTuple: e
}) => {
var e = r ? [e[r]] : e,
t = performance.now();
for (const i of e) i.penaltyBoxQueue = Uy.prunePenaltyBox(i.penaltyBoxQueue, t)
})
}
removePermanently(e, r, n) {
Do(`root.set.removePermanently: ${r}: ${n}`), this.store.update(e, ({
mediaOptionListTuple: e
}) => {
const t = e[r],
i = new Set(t.removed);
i.add(n), t.removed = Array.from(i)
})
}
moveAllWithMatchingHosts(e, r, n, s) {
Do(`root.set.moveAllMatchingHosts: ${r}:${n} remove:${s}`), this.store.update(e, ({
mediaOptionListTuple: e
}) => {
const t = e[r],
i = [...t.mediaOptions].filter(e => Au(n, e.url)).map(e => e.mediaOptionId);
if (s) {
const e = new Set([...t.removed, ...i]);
t.removed = Array.from(e)
} else {
const e = performance.now();
t.penaltyBoxQueue = Uy.prunePenaltyBox(t.penaltyBoxQueue, e);
for (const r of i) Uy.addToPenaltyBox(t.penaltyBoxQueue, e, r)
}
})
}
setMaxHdcpLevel(e, i, r = !1) {
Do(`root.set.maxHdcpLevel: ${i}`), this.store.update(e, ({
mediaOptionListTuple: e
}) => {
const t = e[gu.Variant];
(r || um(i) < um(t.maxHdcpLevel)) && (t.maxHdcpLevel = i)
})
}
updateConsecutiveTimeouts(e, i, r, n) {
this.store.update(e, e => {
const t = e.errorsByType || [{
timeouts: {
load: 0,
append: 0,
key: 0
}
}, {
timeouts: {
load: 0,
append: 0,
key: 0
}
}, {
timeouts: {
load: 0,
append: 0,
key: 0
}
}];
r ? ++t[i].timeouts[n] : t[i].timeouts[n] = 0, e.errorsByType = t
})
}
updateInflightFrag(l, d, u, c, h) {
Do("root.set.updateInflightFrag"), this.store.update(l, r => {
if (r.inFlightFrags || (r.inFlightFrags = [null, null]), !(d === gu.Subtitle || u && u.itemId !== l))
if (u) {
let {
start: e,
duration: t
} = u;
var {
mediaOptionId: n,
mediaSeqNum: s,
discoSeqNum: a
} = u, o = r.inFlightFrags[d];
let i = null == o ? void 0 : o.tstart;
c !== (null == o ? void 0 : o.state) && (i = performance.now()), $p(o, u) && (e = o.start, t = o.duration), r.inFlightFrags[d] = {
itemId: l,
mediaOptionId: n,
mediaSeqNum: s,
discoSeqNum: a,
start: e,
duration: t,
tstart: i,
state: c,
bwSample: Object.assign({}, h)
}
} else r.inFlightFrags[d] = null
})
}
setNextMaxAutoOptionId(e, t) {
Do(`root.set.nextMaxAutoOptionId: ${t}`), this.store.update(e, ({
abrStatus: e
}) => {
e.nextMaxAutoOptionId = t
})
}
setNextMinAutoOptionId(e, t) {
Do(`root.set.nextMinAutoOptionId: ${t}`), this.store.update(e, ({
abrStatus: e
}) => {
e.nextMinAutoOptionId = t
})
}
setHighBWTrigger(e, t) {
Do(`root.set.setHighBWTrigger: ${t}`), this.store.update(e, ({
abrStatus: e
}) => {
e.highBWTrigger = t
})
}
setFragLoadSlow(e, t) {
Do(`root.set.setFragLoadSlow ${e} ${JSON.stringify(t)}`), this.store.update(e, ({
abrStatus: e
}) => {
e.fragDownloadSlow = t.fragDownloadSlow, e.fragDownloadTooSlow = t.fragDownloadTooSlow
})
}
pickMediaOptionTupleByPersistentId(e, t, i, r = !1, n = !1) {
var s = e.enabledMediaOptionIdByType(gu.Variant),
s = e.variantMediaOptionById(s);
let a, o;
if (t === gu.AltAudio) {
const t = e.enabledAlternateMediaOptionByType(gu.Subtitle);
o = null == t ? void 0 : t.persistentID, a = i
} else {
const t = e.enabledAlternateMediaOptionByType(gu.AltAudio);
a = null == t ? void 0 : t.persistentID, o = i
}
const l = e.getEnabledMediaOptionMask();
return l[t] = !!(ne(i) && 0 <= i), s ? this.getBestMediaOptionTupleFromVariantAndPersistentId(e, s, a, o, l, void 0, r, n, !1) : [Lu, Lu, Lu]
}
getFallbackMediaOptionTupleFromMediaOptionId(e, t, i, r, n = !1, s = !1, a = !1) {
var o = r ? [r] : [i],
l = e.enabledMediaOptionIdByType(gu.Variant),
r = e.variantMediaOptionById(l),
l = t === gu.AltAudio ? e.alternateMediaOptionById(gu.AltAudio, i) : e.enabledAlternateMediaOptionByType(gu.AltAudio),
l = null == l ? void 0 : l.persistentID,
i = t === gu.Subtitle ? e.alternateMediaOptionById(gu.Subtitle, i) : e.enabledAlternateMediaOptionByType(gu.Subtitle),
i = null == i ? void 0 : i.persistentID;
return r ? this.getBestMediaOptionTupleFromVariantAndPersistentId(e, r, l, i, void 0, o, n, s, a) : [Lu, Lu, Lu]
}
hasFallbackMediaOptionTuple(e, t, i, r) {
var n = e.mediaOptionListQueries[t].mediaOptionFromId(i);
return e.isValidMediaOptionTuple(this.getFallbackMediaOptionTupleFromMediaOptionId(e, t, i, n.backingMediaOptionId, !1, r))
}
setLegacyAlternateMediaOption(e, t, i, r, n) {
var s = e.enabledMediaOptionIdByType(gu.Variant),
s = e.variantMediaOptionById(s),
s = e.getLegacyMatchingAlternateWithPersistentId(i, r, s);
s ? this.setEnabledMediaOptionByType(t, i, s, !0, n) : this.logger.warn(`${Nu[i]} can't find matching mediaOption for persistent id ${r}`)
}
setEnabledMediaOptionTupleWithMatchedGroups(t, i, e, r) {
const n = Ky(t),
s = this.pickMediaOptionTupleByPersistentId(n, i, e);
if (!n.isValidMediaOptionTuple(s)) return this.setLegacyAlternateMediaOption(n, t, i, e, r);
al(() => {
this.setEnabledMediaOptionByType(t, i, s[i], !0, r), s[gu.Variant].mediaOptionId !== n.enabledMediaOptionIdByType(gu.Variant) && this.setPreferredHost(t, Eu(s[gu.Variant].url)), this.setEnabledMediaOptionByType(t, gu.Variant, s[gu.Variant]);
var e = i === gu.AltAudio ? gu.Subtitle : gu.AltAudio;
s[e].mediaOptionId !== n.enabledMediaOptionIdByType(e) && this.setEnabledMediaOptionByType(t, e, s[e], !1)
})
}
canSwitchToSDR(e, t, i, r = !1) {
var n = e.mediaOptionListQueries[gu.Variant].mediaOptionFromId(t),
r = this.getFallbackMediaOptionTupleFromMediaOptionId(e, gu.Variant, t, n.backingMediaOptionId, !0, i, r);
return e.isValidMediaOptionTuple(r)
}
getBestMediaOptionTupleFromVariantAndPersistentId(t, e, i, r, n, s, a, o, l) {
var d, u = t.mediaOptionListQueries[gu.Variant].listFallbackVariants(e.mediaOptionId, a, o, l, s);
let c = [Lu, Lu, Lu];
for (let e = 0; e < u.length; ++e) {
const a = u[e];
if (d = t.matchAlternates(a, i, r, s), t.isValidMediaOptionTuple([a, ...d], n)) {
c = [a, ...d];
break
}
}
return c
}
}
const $y = new class extends fl {
constructor() {
super({}, {
name: "root-playlist-store",
idKey: "itemId",
producerFn: su
})
}
akitaPreAddEntity(e) {
return null == e.errorsByType ? Object.assign(Object.assign({}, e), {
errorsByType: [{
timeouts: {
load: 0,
append: 0,
key: 0
}
}, {
timeouts: {
load: 0,
append: 0,
key: 0
}
}, {
timeouts: {
load: 0,
append: 0,
key: 0
}
}]
}) : e
}
};
new kl($y);
let Vy = null;
function Ky(e) {
return new Fy($y, e)
}
const qy = (n, e, t, s, i) => {
const {
rootMediaOptionsTuple: r,
sessionKeys: a
} = n, o = Array.from(r[gu.Variant]), l = Array.from(r[gu.AltAudio]);
let d = !1,
u = !1,
c = o.map(e => (d = d || Boolean(e.videoCodec), u = u || Boolean(e.audioCodec) || Boolean(e.audioGroupId), e));
return d && u && (c = c.filter(({
videoCodec: e
}) => Boolean(e))), Ly(o, l, a, e, t, i).pipe(hr(({
hdrMediaOptions: e,
sdrMediaOptions: t
}) => {
var i = e.concat(t),
r = 0 < e.length;
return e.concat(t),
function(e, t, i, r) {
var {
itemId: n,
itemStartOffset: s,
rootMediaOptionsTuple: a,
audioMediaSelectionGroup: o,
subtitleMediaSelectionGroup: l
} = e, d = Array.from(a[gu.AltAudio]), u = Array.from(a[gu.Subtitle]), c = t.every(e => ne(e.score)), h = t.some(e => Wm(!0, e)), p = function(e, t) {
const i = [...e];
return t ? i.sort((e, t) => e.score - t.score || t.bitrate - e.bitrate) : i.sort((e, t) => e.bitrate - t.bitrate), i
}(t, c), f = e.baseUrl, t = null === (a = e.contentSteeringOption) || void 0 === a ? void 0 : a.initPathwayID, a = e.sessionData;
return {
itemId: n,
baseUrl: f,
mediaOptionListTuple: [{
mediaOptions: p,
hasHdrLevels: i,
hasIframeLevels: h,
hasScore: c,
preferHDR: r,
compatibleIds: null,
penaltyBoxQueue: [],
removed: [],
currentPathwayID: t
}, {
mediaOptions: d,
compatibleIds: null,
penaltyBoxQueue: [],
removed: []
}, {
mediaOptions: u,
penaltyBoxQueue: [],
removed: []
}],
audioMediaSelectionGroup: o,
subtitleMediaSelectionGroup: l,
enabledMediaOptionKeys: [Lu, Lu, Lu],
mediaOptionSwitchContexts: [null, null, null],
anchorTime: {
pos: 0
},
discoSeqNum: NaN,
pendingSeek: void 0,
itemStartOffset: s,
initPtsRecord: {},
contentSteeringOption: e.contentSteeringOption,
masterVariableList: e.masterVariableList,
loadStats: e.stats,
isMediaPlaylist: e.isMediaPlaylist,
abrStatus: {
fragDownloadSlow: !1,
fragDownloadTooSlow: !1,
nextMinAutoOptionId: Lu.mediaOptionId,
nextMaxAutoOptionId: Lu.mediaOptionId,
highBWTrigger: NaN
},
sessionData: a
}
}(n, i, r, s)
}))
};
function Hy(e, t, i, r, n, s, a) {
var o, l, d, u, c, h, p, f = e.mediaOptionListTuple[gu.Variant],
m = Km(f.mediaOptions, Xm.kAllowFilters, Object.assign(Object.assign({}, f), {
compatibleIds: null
})),
g = qm(f.preferredHost, m);
return {
firstVariant: (o = g, e = Fg, f = f.hasScore, t = t, i = i, r = r, n = n, s = s, a = a, !o || o.length < 1 || o.every(e => e.iframes) ? void t.warn("no non-iframe media option found") : ((o = f ? Bg(o, i, r, n, s, a) : (l = e, d = i, u = r, c = n, h = s, p = a, o.reduce((e, t) => {
if (t.iframes) return e;
let i = e;
const r = function(e, t, i, r, n, s, a) {
var o, l, d = (o = e.bitrate, u = e.height, (l = (e, t, i) => (e - t) * (e - i) <= 0)(o, t.minValidBitrate, t.maxValidBitrate) && l(u, t.minValidHeight, t.maxValidHeight) ? mu.VALID : mu.INVALID),
o = "PQ" === (c = e.videoRange) ? pu.PQ : "HLG" === c ? pu.HLG : "SDR" === c ? pu.SDR : pu.UNKNOWN,
{
videoCodecRank: u,
audioCodecRank: c
} = {
videoCodecRank: qp((l = e).videoCodec),
audioCodecRank: jp(l.audioCodec)
},
l = e.bitrate < t.maxPreferredBitrate ? mu.VALID : mu.INVALID,
t = e.audioChannelCount || 1,
a = i && r && n && s && !Ug(e, i, r, n, s, a) ? mu.INVALID : mu.VALID;
return new Qp(d, o, u, t, c, a, l, e.height)
}(t, l, d, u, c, h, p);
return (!e || r.isGreaterThan(e.bestRank) || r.isEqualTo(e.bestRank) && t.bitrate > e.selected.bitrate) && (i = {
selected: t,
bestRank: r
}), i
}, null).selected)) || t.warn("no valid first media option found"), o)),
filteredVariants: m,
preferredVariants: g
}
}
function jy(e, t, i) {
if ((null == t ? void 0 : t.mediaType) === Su.CLOSEDCAPTION) {
const r = Ny.pairForcedSubtitleMediaOptionWithClosedCaptionInList(e.subtitleGroupId, t, i);
if (r) return t = Object.assign(Object.assign({}, t), {
url: r.url,
backingMediaOptionId: r.mediaOptionId
}), i.map(e => e.mediaOptionId === t.mediaOptionId ? t : e)
}
return i
}
function Qy(e, t, i, r, n, s, a, o) {
var l;
const d = e.itemId,
u = e.mediaOptionListTuple[gu.Variant],
c = e.mediaOptionListTuple[gu.AltAudio],
h = e.mediaOptionListTuple[gu.Subtitle],
p = Km(c.mediaOptions, Ny.kAllowFilters, c),
f = Km(h.mediaOptions, Ny.kAllowFilters, h);
let {
firstVariant: m,
filteredVariants: g
} = Hy(e, i, r, n, s, a, o);
if (!m) {
const U = u.preferHDR;
u.preferHDR = !U && u.hasHdrLevels, u.preferHDR !== U && (i.warn(`No valid first variant found, toggling hdr preference=${U}->${u.preferHDR}`), {
firstVariant: m,
filteredVariants: g
} = Hy(e, i, r, n, s, a, o))
}
if (!m) throw new V(!0, "No valid first variant found", $.NoValidAlternates);
const y = Eu(m.url),
v = {
itemId: d,
mediaOptionId: null !== (o = null == m ? void 0 : m.mediaOptionId) && void 0 !== o ? o : null
},
S = null != p && p.length ? null === (o = ((i, r, e, n) => {
if (e) {
let t;
return t = ne(i) ? e.MediaSelectionGroupOptions.find(function(e) {
return e.MediaSelectionOptionsPersistentID === i
}) : e.MediaSelectionGroupOptions.find(function(e) {
return e.MediaSelectionOptionsIsDefault
}), t = t || e.MediaSelectionGroupOptions[0], n.find(e => (!r || e.groupId === r) && e.persistentID === (null == t ? void 0 : t.MediaSelectionOptionsPersistentID))
}
})(null == t ? void 0 : t.audioPersistentId, m.audioGroupId, e.audioMediaSelectionGroup, p)) || void 0 === o ? void 0 : o.mediaOptionId : null,
b = S ? {
itemId: d,
mediaOptionId: S
} : Lu,
T = ((i, r, n, s, a, o) => {
if (s) {
let t, e;
return t = ne(i) ? s.MediaSelectionGroupOptions.find(function(e) {
return e.MediaSelectionOptionsPersistentID === i
}) : s.MediaSelectionGroupOptions.find(function(e) {
return e.MediaSelectionOptionsIsDefault
}), t && (e = a.find(e => e.mediaType === Su.CLOSEDCAPTION ? (!r || e.groupId === r) && e.persistentID === t.MediaSelectionOptionsPersistentID : e.mediaType === Su.SUBTITLE ? (!n || e.groupId === n) && e.persistentID === t.MediaSelectionOptionsPersistentID : void o.warn(By, `subtitle media option has unknown type ${e.mediaType}`))), e
}
})(null == t ? void 0 : t.subtitlePersistentId, m.closedcaption, m.subtitleGroupId, e.subtitleMediaSelectionGroup, f, i),
E = null != f && f.length ? null == T ? void 0 : T.mediaOptionId : null,
I = E ? {
itemId: d,
mediaOptionId: E,
mediaOptionType: gu.Subtitle
} : Lu,
{
mediaOptions: w,
audioGroups: A,
subtitleGroups: O
} = (t = g, l = m, t.reduce((e, t) => {
if (((e, t) => {
let i = !0;
e.videoCodec && t.videoCodec && (i = be.isCompatibleVideoCodec(e.videoCodec, t.videoCodec));
let r = !1;
e.videoRange && t.videoRange ? r = e.videoRange == t.videoRange : e.videoRange || t.videoRange || (r = !0);
let n = !0;
return e.audioCodec && t.audioCodec && (n = be.isCompatibleAudioCodec(e.audioCodec, t.audioCodec)), i && r && n
})(l, t)) {
const l = t.audioGroupId;
l && e.audioGroups.add(l), e.mediaOptions.add(t)
}
var i = t.subtitleGroupId;
i && e.subtitleGroups.add(i);
t = t.closedcaption;
return t && e.closedCaptionGroups.add(t), e
}, {
mediaOptions: new Set,
audioGroups: new Set,
subtitleGroups: new Set,
closedCaptionGroups: new Set
})),
k = Array.from(w).map(e => e.mediaOptionId),
C = m.pathwayID,
D = Object.assign(Object.assign({}, u), {
compatibleIds: k,
preferredHost: y,
currentPathwayID: C
}),
M = [],
x = c.mediaOptions.reduce((e, t) => (A.has(t.groupId) && (e.persistentIds.add(t.persistentID), M.push(t.mediaOptionId), e.filteredAudioMediaOptions.push(t), e.altAudio || (e.altAudio = !!t.url)), e), {
filteredAudioMediaOptions: [],
persistentIds: new Set,
altAudio: !1
}),
P = Object.assign(Object.assign({}, c), {
compatibleIds: M
});
let R = e.audioMediaSelectionGroup;
const L = null == R ? void 0 : R.MediaSelectionGroupOptions;
if (L) {
const e = L.reduce((e, t) => (x.persistentIds.has(t.MediaSelectionOptionsPersistentID) && e.push(t), e), new Array);
R = Object.assign(Object.assign({}, R), {
MediaSelectionGroupOptions: e
})
}
h.mediaOptions = jy(m, T, h.mediaOptions);
const _ = h.mediaOptions.reduce((e, t) => (O.has(t.groupId) && (e.persistentIds.add(t.persistentID), e.filteredSubtitleMediaOptions.push(t)), e), {
filteredSubtitleMediaOptions: [],
persistentIds: new Set
});
let N = e.subtitleMediaSelectionGroup;
const F = null == N ? void 0 : N.MediaSelectionGroupOptions;
if (F) {
const e = F.reduce((e, t) => (_.persistentIds.has(t.MediaSelectionOptionsPersistentID) && e.push(t), e), new Array);
N = Object.assign(Object.assign({}, N), {
MediaSelectionGroupOptions: e
})
}
i = [D, P, h];
let B = new Map;
mg().useHighestVideoCodecPrivate && (B = null == D ? void 0 : D.mediaOptions.reduce((e, t) => {
const i = t.videoCodecList;
if (i)
for (const t of i) {
const i = Hp(t),
r = e.get(i);
be.isHigherCodecByFamily(r, t) && e.set(i, t)
}
return e
}, B)), B.size && B.forEach((e, t) => {});
t = {
fragDownloadSlow: !1,
fragDownloadTooSlow: !1,
nextMinAutoOptionId: Lu.mediaOptionId,
nextMaxAutoOptionId: Lu.mediaOptionId,
highBWTrigger: Xg(v.mediaOptionId, D.mediaOptions)
};
return Object.assign(Object.assign({}, e), {
enabledMediaOptionKeys: [v, b, I],
mediaOptionListTuple: i,
audioMediaSelectionGroup: R,
abrStatus: t,
highestVideoCodec: B
})
}
const Wy = (o, l, d, u, c, h, p) => e => e.pipe(tc("retrieveRootMediaOptions.input"), La(t => {
var e;
if (!t) return Ii;
const {
itemId: i,
platformInfo: r
} = t, n = Ky(i), s = l["logger"];
if (n.hasEntity(i)) return $i(n);
$y.setLoading(!0);
const a = performance.now();
return function(e, t, u, c, i) {
const {
itemId: h,
url: p,
itemStartOffset: f
} = e, r = Lc(e, t);
return Lm({
url: p,
onProgress: {
getData: !0,
cb: Iy
},
xhrSetup: c.xhrSetup
}, r, i).pipe(hr(({
responseText: e,
responseURL: t,
stats: i
}) => {
var r = c["keySystemPreference"];
if (t || (u.warn("Missing response url. Reusing request url as base url"), t = p), Rm.isMediaPlaylist(e)) {
const c = "media-pl-" + Zl(),
d = Rm.parseMediaOptionPlaylist(e, t, !0, r, {}, h, c, gu.Variant, u, f);
Nc(d.mediaOptionDetails);
var n = {
itemId: h,
mediaOptionId: c,
mediaOptionType: gu.Variant,
url: p,
bandwidth: 0,
bitrate: 0,
iframes: d.mediaOptionDetails.iframesOnly,
pathwayID: "."
};
return {
itemId: h,
itemStartOffset: f,
rootMediaOptionsTuple: [
[n],
[],
[]
],
stats: i,
baseUrl: t,
initialDetails: d.mediaOptionDetails,
isMediaPlaylist: !0
}
} {
const u = Rm.parseSessionData(e, t),
c = Rm.parseSessionKeys(e, t, r),
p = Rm.parseRootPlaylist(h, e, t, !0);
if (p.playlistParsingError) throw p.playlistParsingError;
var {
variantMediaOptions: s,
contentSteeringOption: a,
masterVariableList: o
} = p, l = Rm.parseRootPlaylistAlternateMediaOptions(h, e, t, p.variantMediaOptions, !0, o);
if (l.playlistParsingError) throw l.playlistParsingError;
var {
audioAlternateOptions: n,
subtitleAlternateOptions: r,
audioMediaSelectionGroup: e,
subtitleMediaSelectionGroup: l
} = l.alternateMediaInfo;
return {
itemId: h,
itemStartOffset: f,
rootMediaOptionsTuple: [s, n, r],
stats: i,
baseUrl: t,
audioMediaSelectionGroup: e,
subtitleMediaSelectionGroup: l,
contentSteeringOption: a,
sessionData: u,
sessionKeys: c,
masterVariableList: o
}
}
}), e => e.pipe(Vn(e => {
if (e instanceof pc) throw new dc(!1, "Timeout", 0, $.ManifestTimeoutError, !0);
if (e instanceof oc) throw new dc(!1, e.message, e.code, {
code: e.code,
text: "Manifest network error"
}, !1);
throw e
})))
}(t, o, s, d, null === (e = null === (e = fg()) || void 0 === e ? void 0 : e.getQuery()) || void 0 === e ? void 0 : e.extendMaxTTFB).pipe(Za(e => p.triggerManifestLoaded(e)), Za(({
initialDetails: e,
stats: t
}) => {
e && (e = e, t = t, Cg().archiveMediaOptionDetails(e, t, !0))
}), bo(u.displaySupportsHdr$), La(([e, t]) => qy(e, r, d, t, s)), hr(e => (l.rootPlaylistEntity = function(e, t, i, r, n, s) {
const {
itemId: a,
initialSeekTime: o
} = e, l = Zf(a), d = n.enableAdaptiveStartup ? l.getBandwidthEstimate(n, e.serviceName) : void 0, u = n.enableAdaptiveStartup ? l.getPlaylistEstimate(n, e.serviceName) : void 0, c = n.enableAdaptiveStartup ? l.getFragEstimate(n, e.serviceName) : void 0, h = n.enableAdaptiveStartup ? l.getBufferEstimate(n, e.serviceName) : void 0, p = performance.now() - r;
let f;
n.targetStartupMs > p ? f = n.targetStartupMs - p : (f = n.targetStartupMs, s.warn(`Manifest load took ${p}ms and exceeds targetStartupMs: ${n.targetStartupMs}; resetting targetStartupMs to ${n.targetStartupMs}`));
const m = n.enableAdaptiveStartup ? {
targetDuration: c.maxDurationSec || n.defaultTargetDuration,
targetStartupMs: f
} : void 0,
g = Qy(t, i, s, d, m, u, c, h);
return g.pendingSeek = o, g
}(t, e, c, a, d, s), n)), lg(i, null, Lc(t, o), 0, !1, n, l, h), Vs(() => {
$y.setLoading(!1)
}))
}), tc("retrieveRootMediaOptions.emit"));
function Gy(t, o, l, d, u, c, h) {
return e => e.pipe(Kp(), La(e => {
return e ? Mr([$i(e).pipe(Wy(t.manifestLoadPolicy, l, t, d, null, u, c)), (n = t, s = o, a = h.mux, new $t(e => {
const t = new Ty(n, s, a);
return e.next(t), () => {
t.destroy()
}
})), (i = t.trickPlaybackConfig, r = o, new $t(e => {
var t = new Zu(i, r);
return e.next(t), () => {}
}))]).pipe(hr(([e, t, i]) => ({
rootPlaylistQuery: e,
mediaParser: t,
iframeMachine: i
}))) : $i(null);
var i, r, n, s, a
}))
}
wc;
return class zy extends wc {
constructor(e = {}, t) {
var i;
if (super(), this.destroy$ = new Xt, this.mediaElement$ = new yi(null), this.publicQueriesInternal$ = new yi(null), this.mediaElementAdapter = null, this.rpcService = null, this.rpcClients = null, this.platformService = Af(), this.keySystemAdapter = null, this.legibleSystemAdapter = null, this.sessionID = Zl(), this.statsService = (Jf = Jf || new Xf(Yf), Jf), this.gaplessCapable = !0, this.teardownWG$ = new Xp, this.itemQueue = new ay, (e.liveSyncDurationCount || e.liveMaxLatencyDurationCount) && (e.liveSyncDuration || e.liveMaxLatencyDuration)) throw new Error("Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration");
const m = Object.assign(Object.assign({}, Ru), e);
if (m.maxRequiredStartDuration < m.minRequiredStartDuration || m.minRequiredStartDuration < 0) throw new Error("Illegal config: bad maxRequiredStartDuration or minRequiredStartDuration");
i = (this.hlsConfig = m).buildType, oe = "production" === i;
const r = this.sessionID;
let n = "silent";
e.debug && (n = m.debugLevel), au(!0), this.logger = null !== (i = this.logger) && void 0 !== i ? i : ([M, h = {}] = [r, (c = {
sendLogs: m.sendLogs || null,
level: "log" === n ? "debug" : n,
consoleOverride: "boolean" != typeof e.debug ? e.debug : void 0,
buildType: m.buildType
}, x = c.consoleOverride, Object.assign({
name: "hls",
timestamp: c.sendLogs ? Oe.stdTimeFunctions.epochTime : Oe.stdTimeFunctions.isoTime,
browser: {
asObject: !0,
serialize: !0,
transmit: {
send: (e, t) => {}
},
write: {
debug: qe.bind(null, Ke(x || console, "debug"), "debug"),
info: qe.bind(null, Ke(x || console, "info"), "info"),
warn: qe.bind(null, Ke(x || console, "warn"), "warn"),
error: qe.bind(null, Ke(x || console, "error"), "error"),
fatal: qe.bind(null, Ke(x || console, "error"), "fatal")
}
}
}, c))], Ue && Ue.sessionId === M ? Ue.warn("Logger Singleton already setup, returning existing singleton") : (Ue = Oe($e(h)).child({
sessionId: M,
name: "hls"
}), Ue.qe = e => Ue.info(e), Ue.sessionId = M), Ue), _o = !1, Lo && (delete window.$$stores, delete window.$$queries), this.hlsConfig.audioPrimingDelay = 0, this.rootPlaylistService = (x = this.logger, Vy = new Uy($y, x), Vy), this.customUrlLoader = Pc(), this.sessionDataLoader = new Fp(m, Cc, this.customUrlLoader.load, this.logger);
var s, a, o, l, d, u, c = m.liveMaxLatencyDurationCount,
h = m.liveSyncDurationCount;
if (ne(c) && ne(h) && c <= h) throw new Error('Illegal hls.js config: "liveMaxLatencyDurationCount" must be gt "liveSyncDurationCount"');
if (ne(m.liveMaxLatencyDuration) && (m.liveMaxLatencyDuration <= m.liveSyncDuration || !ne(m.liveSyncDuration))) throw new Error('Illegal hls.js config: "liveMaxLatencyDuration" must be gt "liveSyncDuration"');
const p = fg();
p.setHlsEntity({
id: r,
config: m
});
const f = Cg(),
g = new Tf(If),
y = (Rh = Rh || new xh(Ph), Rh);
this.accessLogInstance = new rm(this, r), this.rtcService = new Kf(this, m, this.accessLogInstance, this.logger), this.playerEvents = new Ng(this, this.logger, this.rtcService);
const v = (M = this.platformService, u = M, (() => {
if ("function" == typeof matchMedia) {
var e = matchMedia("(dynamic-range: high)"),
t = matchMedia("bad query");
if (e.media !== t.media) return an($i(e), rn(e, "change")).pipe(hr(e => e.matches))
}
return $i(!0)
})().pipe(Za(e => {
u.updateSupportsHdr(e)
})).pipe($a(Ii))),
S = this.mediaElement$.pipe((s = m, o = (a = this).logger, l = this.teardownWG$, d = this.rtcService, e => e.pipe(tc("playback.mediaElementServiceEpic.in"), La(e => {
if (!e) return $i(null);
const t = new vf(e, bf, s, a, o, l, d);
return t.openMediaSource(new MediaSource), an($i(t), t)
}), tc("playback.mediaElementServiceEpic.emit"))), Aa()),
b = this.itemQueue.activeItemById$.pipe(La(e => e ? tm(m, this.statsService, e, this.logger) : Ii));
this.rpcService = (() => {
let e = null;
return null != m.createRPCService && (e = Lf(m.createRPCService, xf)), m.enableWorker && null == e && (e = _f), null == e && (e = xf), e(this.logger)
})(), this.rpcClients = (x = this.rpcService, {
crypto: new kf(x),
mux: new Cf(x)
});
var T, E, I, w, A, O, k, C, D, c = Mr([this.itemQueue.activeItemById$.pipe(Gy(m, this.logger, this.rootPlaylistService, g, this.statsService, this.playerEvents, this.rpcClients), Za(e => {
var t = null == e ? void 0 : e.rootPlaylistQuery;
this.publicQueriesInternal$.next([t, null]), this.iframeMachine = null == e ? void 0 : e.iframeMachine, t && this.playerEvents.triggerManifestParsed(t)
})), S.pipe((I = this.itemQueue.removedItems$, w = y, A = m, O = g, C = (k = this).rtcService, D = this.logger, e => Mr([((n, s, a, o, l, d, u) => e.pipe(tc("[Keys] playback.keySystemServiceEpic.in"), La(r => r ? new $t(e => {
let t = new Dh(n, r, a, o, l, d, u);
const i = an($i(t), s.pipe(jr(e => t.removeKeysForItems(e)), $a(Ii))).subscribe(e);
return function() {
u.warn("[Keys] playback.keySystemServiceEpic.unsubscribe"), i.unsubscribe(), t.destroy().subscribe(), t = void 0
}
}) : $i(null)), tc("[Keys] playback.keySystemServiceEpic.emit")))(w, I, A, O, k, C, D), ((t, i, r) => e.pipe(tc("playback.legibleServiceEpic.in"), La(e => e ? an($i(e = new _p(e, t, i, r)), e) : $i(null)), tc("playback.legibleServiceEpic.emit")))(A, k, D), e]).pipe(hr(([e, t, i]) => ({
keySystemAdapter: e,
legibleSystemAdapter: t,
mediaSink: i
})))), Za(({
keySystemAdapter: e,
legibleSystemAdapter: t,
mediaSink: i
}) => {
this.keySystemAdapter = e, this.legibleSystemAdapter = t, this.mediaElementAdapter = i
}))]).pipe(hr(([e, t]) => {
var {
keySystemAdapter: i,
legibleSystemAdapter: r,
mediaSink: n
} = t;
if (!(e && i && r && n)) return null;
var {
rootPlaylistQuery: s,
iframeMachine: t,
mediaParser: e
} = e;
return {
logger: this.logger,
config: m,
platformService: this.platformService,
statsService: this.statsService,
rtcService: this.rtcService,
rpcClients: this.rpcClients,
rootPlaylistService: this.rootPlaylistService,
rootPlaylistQuery: s,
mediaLibraryService: f,
keySystemAdapter: i,
legibleSystemAdapter: r,
mediaSink: n,
mediaParser: e,
iframeMachine: t,
customUrlLoader: this.customUrlLoader,
gaplessInstance: this
}
}), Aa()).pipe(La(u => {
if (!u) return Ii;
const {
rootPlaylistQuery: t,
mediaSink: e,
mediaLibraryService: i
} = u;
this.publicQueriesInternal$.next([t, e.mediaQuery]);
const n = e.mediaQuery,
r = $i(u).pipe(vy()),
s = t.rootPlaylistEntity$.pipe(Kp(), Ds(1), Za(() => {
this.commitEarlySelection(u.logger)
})),
a = Gu(Mr([n.haveEnough$, t.sessionData$]), ([e]) => !0 === e, 1).pipe(La(([, e]) => this.sessionDataLoader.loadSessionData(e)), Za(e => {
this.rootPlaylistService.setSessionData(t.itemId, e)
}), Vn(e => (this.logger.error(e.message), Ii))),
o = Zf(t.itemId),
l = function(d, r, u, n, s) {
const a = u.mediaQuery;
return Gu(a.combinedBuffer$, e => 0 < (null == e ? void 0 : e.length)).pipe(La(() => {
var e = ed([a.seekTo$, a.bufferedSegmentsByType$(yu.Variant)]).pipe(hr(([e, t]) => {
const i = ne(null == e ? void 0 : e.pos) ? e.pos : a.currentTime,
r = t.find(e => e.startPTS <= i && e.endPTS > i),
n = a.getBufferInfo(i, d.maxBufferHole),
s = a.getCombinedBufferInfo(i, d.maxBufferHole);
return {
pos: i,
sbTuple: n,
combined: s,
playingFrag: null !== (t = null == r ? void 0 : r.frag) && void 0 !== t ? t : null
}
})),
t = ed([r.getInFlightFragByType$(gu.Variant), r.enabledMediaOptionByType$(gu.Variant)]).pipe(La(([e, t]) => {
var i = n.getQueryForOption(t);
return En($i(e), $i(t), i.mediaOptionDetails$)
}), hr(([e, t, i]) => [e, {
variant: t,
details: i
}])),
i = ed([s.bandwidthEstimate$, s.fragEstimate$, s.bufferEstimate$]);
return ed([a.readyState$, t, e, a.desiredRate$, i])
}), ao(100, tr, {
leading: !0,
trailing: !0
}), hr(([, e, t, i, r]) => {
var [n, s] = e, [a, e, r] = r;
let o = e,
l = r;
return e && (o = {
maxDurationSec: ne(e.maxDurationSec) ? e.maxDurationSec : d.defaultTargetDuration,
avgParseTimeMs: ne(e.avgParseTimeMs) ? e.avgParseTimeMs : d.statDefaults.fragParseTimeMs
}), r && (l = {
avgBufferCreateMs: ne(r.avgBufferCreateMs) ? r.avgBufferCreateMs : d.statDefaults.fragBufferCreationDelayMs,
avgInitFragAppendMs: ne(r.avgInitFragAppendMs) ? r.avgInitFragAppendMs : d.statDefaults.initFragAppendMs,
avgDataFragAppendMs: ne(r.avgDataFragAppendMs) ? r.avgDataFragAppendMs : d.statDefaults.dataFragAppendMs
}), a = Ey(d, n, s, t, i, a, o, l), u.haveEnough = a
}), Is(), Za(e => {}), $a(Ii))
}(m, (this.logger, t), e, i, o),
d = function() {
const {
config: e,
mediaSink: t,
rootPlaylistQuery: i,
mediaLibraryService: r,
gaplessInstance: n
} = u, s = t.mediaQuery, a = i.enabledAVOptions$.pipe(La(e => En(...e.map(e => _u(e) ? r.getQueryForOption(e).mediaOptionDetails$ : $i(null)))));
return Gu(s.combinedBuffer$, e => 0 < (null == e ? void 0 : e.length)).pipe($a(ed([a, s.msReadyState$, s.updating$, s.isIframeRate$, s.isBufferedToEnd$(e.maxBufferHole, !n.inGaplessMode)])), tc("checkForEndOfStream"), ln(([, e, t, i, r]) => "open" === e && !1 === t && !i && r), Za(([e]) => {
null != e[0] && e.every(e => null == e || !1 === e.liveOrEvent && !1 === e.iframesOnly) && !n.inGaplessMode && t.endStream()
}), $a(Ii))
}(),
c = function() {
const {
config: o,
iframeMachine: l,
mediaSink: i
} = u, d = i.mediaQuery;
return d.desiredRate$.pipe(La(a => Wp(a) ? bn(0, Math.abs(1e3 / a)).pipe(hr(() => {
let e = null;
const t = d.seekable;
if (!l.isStarted || t.length < 1) return e;
var i = l.iframeClockTimeSeconds,
r = o.leftMediaTimeToAutoPause,
n = t.start(0),
s = t.end(t.length - 1);
return 1 < a && s - i < r ? (e = {
newRate: 0,
postFlushSeek: s - r
}, l.pause()) : a < 0 && i - n < a / -2 && (e = {
newRate: 1,
postFlushSeek: n
}), e
}), Kp(), Za(({
newRate: e,
postFlushSeek: t
}) => {
i.postFlushSeek = t, i.desiredRate = e
}), $a(Ii)) : Ii))
}(),
h = (f = u).config.enableIFramePreloading ? function(t) {
const {
mediaSink: e,
rootPlaylistQuery: r,
mediaLibraryService: n
} = t, i = e.mediaQuery;
return ed([i.desiredRate$, i.waterLevelChangedForType$(yu.Variant)]).pipe(La(([e, t]) => Wp(e) || t !== Dp.AboveHighWater ? Ii : r.enabledMediaOptionByType$(gu.Variant).pipe(hr(e => {
var t = r.mediaOptionListQueries[gu.Variant].hasIframes,
i = null !== (i = null === (i = n.getQuery().getEntity(r.itemId)) || void 0 === i ? void 0 : i.liveOrEvent) && void 0 !== i && i;
return !t || i ? xm.DISABLED : e
}))), Ds(1), _s(e => function(e, t) {
const i = t.logger;
return e === xm.DISABLED ? $i(e) : function(e, t) {
const {
rootPlaylistQuery: i,
logger: r,
config: n,
mediaSink: s,
statsService: a
} = t, o = s.mediaQuery, l = a.getQueryForItem(i.itemId), d = Dg(e), u = jg(!0, n, i, d, o, l, r), c = i.variantMediaOptionById(u.variantMediaOption);
return Mg(t, c, !0)
}(e, t).pipe(_s(r => function(e) {
var {
mediaSink: t,
rootPlaylistQuery: i
} = e, t = Ig((t = t.mediaQuery).currentTime, i.discoSeqNum, 0, r, []);
return null !== (i = null == t ? void 0 : t.foundFrag) && void 0 !== i && i.mediaFragment ? (t = t.foundFrag.mediaFragment, en([_g(e, t.keyTagInfo, {
itemId: t.itemId,
mediaOptionId: t.mediaOptionId
}), xg(e, t)]).pipe(Za(() => {}), Zs(xm.SUCCESS))) : Vi("Unable to find fragment for iframe prefetch")
}(t)), Zs(xm.SUCCESS), Vn(e => (i.error(ry, `got error ${e.message} in prefetch`), $i(xm.ERRORED))))
}(e, t)), Vs(() => {}))
}(f) : $i(xm.DISABLED),
p = [s, r, a, l, Gu(ed([n.gotPlaying$, n.gotLoadStart$, n.readyState$]), ([e, t, i]) => !0 === e || !0 === t || 1 <= i).pipe(La(() => n.ended$), La(e => bn(0, e ? void 0 : 1e3)), Za(() => {
this.playbackInfo(m, n)
})), c, h, n.timeupdate$.pipe(hr(e => {
if (this.inGaplessMode && this.isPreloading && ne(this.loadingItem.itemStartOffset) && e >= this.loadingItem.itemStartOffset) {
const e = this.itemQueue.playingItem.itemId,
t = this.itemQueue.loadingItem.itemId,
i = {
prevItemId: e,
nextItemId: t,
nextStartTime: this.loadingItem.itemStartOffset,
nextDuration: n.msDuration - this.loadingItem.itemStartOffset
};
this.itemQueue.updatePlayingItemId(), this.trigger(P.ITEM_TRANSITIONED, i), this.rtcService.itemTransitioned(e, t)
}
})), this.updateLiveSeekableRange(t, e), d];
var f;
if (m.enablePerformanceLogging) {
this.logger.child({
name: "timing"
});
const u = En(...Bu.map(r => t.getInFlightFragByType$(r).pipe(Is((e, t) => (null == e ? void 0 : e.state) === (null == t ? void 0 : t.state)), Kp(), bo(n.bufferedRangeTuple$), Za(([e, t]) => {
const i = Object.assign(Object.assign({}, e), {
event: "fragment",
name: Nu[r],
buffered: void 0
});
"appended" === e.state && (i.buffered = t)
}), Vn(() => Ii)))),
e = En(...Fu.map(e => t.enabledMediaOptionByType$(e).pipe(La(t => null != (null == t ? void 0 : t.url) && _u(t) ? Dg(t).mediaOptionDetailsEntity$.pipe(Kp(), hr(e => ({
entity: e,
option: t
})), Is((e, t) => (null == e ? void 0 : e.entity.detailsLoading) === (null == t ? void 0 : t.entity.detailsLoading)), Za(({}) => {})) : Ii), Vn(() => Ii))));
p.push(u, e)
}
return an(...p)
})),
h = this.itemQueue.removedItems$.pipe(ll(e => {
var t;
t = e, Cg().remove(t), this.rootPlaylistService.removeItems(e)
})),
M = p.getQuery().userSeek$.pipe((T = this.itemQueue, E = this.rootPlaylistService, e => e.pipe(Kp(), La(e => en([$i(e), T.activeItemById$.pipe(Kp(), La(e => E.getQueryForId(e.itemId).rootPlaylistEntity$), Ds(1))])), hr(([e, t]) => (E.setPendingSeek(t.itemId, e), e))))),
x = p.getQuery().selectEntityAction(Eo.Add).pipe(Za(() => {
this.logger.warn(`new Hls instance added while old one still active sessionId:${r}`)
}));
an(S.pipe(Vn(() => Ii)), an(v, M, b, h, c, this.teardownWG$).pipe(Vn(e => this._handleError(e)))).pipe(Vs(() => {
var e, t;
try {
this.detachMedia(), this.trigger(P.DESTROYING), this.playerEvents.destroy(), null === (e = this.accessLogInstance) || void 0 === e || e.destroy(), null === (t = this.rtcService) || void 0 === t || t.destroy(), Cg().clear(), this.rootPlaylistService.removeAll(), this.itemQueue.clearQueue(), p.removeEntity(this.sessionID)
} catch (e) {
this.logger.error(`Got error in finalize ${e.message}`)
}
}), Va(fn(this.destroy$, x))).subscribe()
}
get publicQueries$() {
return this.publicQueriesInternal$.pipe(ln(e => Boolean(e) && Boolean(e[0]) && Boolean(e[1])))
}
get _activeRootQuery() {
var e = this.publicQueriesInternal$.value;
return null !== (e = null == e ? void 0 : e[0]) && void 0 !== e ? e : null
}
get _mediaElementQuery() {
var e = this.publicQueriesInternal$.value;
return null !== (e = null == e ? void 0 : e[1]) && void 0 !== e ? e : null
}
static get version() {
return "2.162.2"
}
static get Events() {
return P
}
get Events() {
return zy.Events
}
static get DefaultConfig() {
return de(Ru)
}
get DefaultConfig() {
return zy.DefaultConfig
}
static isSupported() {
try {
const e = window.MediaSource || window.WebKitMediaSource,
t = window.SourceBuffer || window.WebKitSourceBuffer,
i = e && "function" == typeof e.isTypeSupported && e.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"'),
r = !t || t.prototype && "function" == typeof t.prototype.appendBuffer && "function" == typeof t.prototype.remove;
return !!i && !!r
} catch (e) {
return !1
}
}
commitEarlySelection(e) {
var t = this.itemQueue.earlyAudioSelection;
ne(t) && (this.audioSelectedPersistentID = t, this.itemQueue.earlyAudioSelection = null), ne(t = this.itemQueue.earlySubtitleSelection) && (this.subtitleSelectedPersistentID = t, this.itemQueue.earlySubtitleSelection = null)
}
_handleError(i) {
var r;
try {
let t, e = i.message;
if (this.logger.error(`Got unhandled or fatal error ${e}`, i), null === (r = this.rtcService) || void 0 === r || r.handleError(i), t = i instanceof p ? i : new V(!0, i.message, $.InternalError), t.fatal && this.isPreloading && (this.logger.warn("Fatal error seen while preloading, calling dequeueSource"), this.dequeueSource("FatalErrorWhileLoading")), t.fatal) {
let e = Wu;
if (this.mediaElementAdapter) {
const r = this.mediaElementAdapter.mediaQuery,
n = r.getCombinedBufferInfo(r.currentTime, 0);
0 < (null == n ? void 0 : n.len) && (e = Gu(this.mediaElementAdapter.mediaQuery.stallInfo$, e => null != e).pipe(hr(() => {})))
}
return e.pipe(La(() => (this.trigger(P.ERROR, t), Ii)))
}
this.trigger(P.ERROR, t)
} catch (i) {
throw this.logger.error(`Error thrown inside _handleError ${i.message}`, i), i
}
return Ii
}
updateLiveSeekableRange(e, t) {
return e.enabledMediaOptionByType$(gu.Variant).pipe(La(e => {
const t = Dg(e);
let i = 0;
return t.mediaOptionDetailsEntity$.pipe(Kp(), ln(e => {
var t = null !== e.stats && !1 === e.detailsLoading && e.lastUpdateMillis > i;
return i = null !== (e = e.lastUpdateMillis) && void 0 !== e ? e : 0, t
}))
}), La(e => (0 === e.unchangedCount && (e.mediaOptionDetails.liveOrEvent ? t.updateLiveSeekableRange(e.mediaOptionDetails) : t.clearLiveSeekableRange()), Ii)))
}
playbackInfo(i, r) {
const n = this.mediaElement$.getValue();
if (n) {
const s = n.readyState >= n.HAVE_FUTURE_DATA,
a = {
readyToPlay: s,
playbackLikelyToKeepUp: r.haveEnough && s,
rate: n.playbackRate,
paused: n.paused,
position: n.currentTime,
duration: n.duration,
seekableTimeRanges: im.timeRangeToArray(n.seekable),
loadedTimeRanges: im.timeRangeToArray(n.buffered)
};
let e = 0,
t = 0;
if (im.isHtmlVideoElement(n)) {
const o = n.getVideoPlaybackQuality;
if (o && typeof o == typeof Function) {
const o = n.getVideoPlaybackQuality();
e = a.droppedVideoFrames = o.droppedVideoFrames, a.corruptedVideoFrames = o.corruptedVideoFrames, a.totalVideoFrames = o.totalVideoFrames, t = a.totalVideoFrames - e
}
} else im.isWebkitMediaElement(n) && (e = a.droppedVideoFrames = n.webkitDroppedFrameCount, t = a.decodedFrameCount = n.webkitDecodedFrameCount);
i.enablePerformanceLogging && r.getCombinedMediaSourceBufferInfo(i.maxBufferHole), null === (i = this.rtcService) || void 0 === i || i.handlePlaybackInfo(e, t)
}
}
get currentItem() {
return this.isPreloading ? this.playingItem : this.itemQueue.activeItem
}
get realCurrentTime() {
var e, t = this._mediaElementQuery;
if (!t) return NaN;
if (null !== (e = this.iframeMachine) && void 0 !== e && e.isStarted) {
const r = t.mediaElementDuration,
e = this.iframeMachine.iframeClockTimeSeconds;
return e > r ? r : e
}
let i = ne(t.postFlushSeek) ? t.postFlushSeek : t.currentTime;
return ne(i) && ne(null === (e = this.playingItem) || void 0 === e ? void 0 : e.itemStartOffset) && (i -= this.playingItem.itemStartOffset), i
}
set realCurrentTime(e) {
var t;
ne(null === (t = this.playingItem) || void 0 === t ? void 0 : t.itemStartOffset) && (e += this.playingItem.itemStartOffset), this.seekTo = e
}
get bufferedDuration() {
var e;
const t = this._mediaElementQuery;
return null !== (e = null == t ? void 0 : t.getBufferedDuration()) && void 0 !== e ? e : 0
}
get sessionData() {
var e = this._activeRootQuery;
return null == e ? void 0 : e.sessionData
}
get supportedFrameRates() {
const e = this.hlsConfig.trickPlaybackConfig.enabled,
t = [0, 1],
i = this._activeRootQuery,
r = Cg().getQuery();
return e && i && r.getEntity(i.itemId) && !1 === r.getEntity(i.itemId).liveOrEvent && t.push(8, 24, 48, 96), t
}
loadSource(e, i, t) {
var r, n, s, a, o, l;
if ("playready" === this.config.keySystemPreference && !this.config.enablePlayReadyKeySystem) throw new V(!0, "Playready key system is not supported now", $.UnsupportedKeySystemError);
if (!e || !e.trim().length) throw new V(!0, "Empty loadSource url", $.EmptyLoadSourceError);
if (e = bu.buildAbsoluteURL(window.location.href, e, {
alwaysNormalize: !0
}), i && Object.keys(i).filter(e => 0 <= ["itemId", "streamID"].indexOf(e)).reduce((e, t) => t in i ? Object.assign(e, {
[t]: i[t]
}) : e, {}), null !== (l = null == i ? void 0 : i.appData) && void 0 !== l && l.reportingAgent && (this.reportingAgent = i.appData.reportingAgent), null != i && i.userInfo && (this.userInfo = i.userInfo), null === (a = this.accessLogInstance) || void 0 === a || a.setupReporter(i.appData), null != i && i.platformInfo && this.platformService.updatePlatformInfo(i.platformInfo), function(e, t) {
if (t) {
const t = Eu(e);
return void 0 !== Iu.find(e => new RegExp(e).exec(t))
}
}(e, this.config.enableQueryParamsForITunes)) {
const d = {
language: i.language,
dsid: i.dsid,
subs: i.subs
};
r = e, n = null == i ? void 0 : i.platformInfo, s = d, o = n.model, l = n.manufacturer, o && l || Qe().warn(`Missing model/manufacturer in platformInfo model ${o} manufacturer ${l}`), o && l && (a = r, o = n.model, l = n.manufacturer, n = -1 !== a.indexOf("?"), o = encodeURIComponent(o), l = encodeURIComponent(l), r = (a = n ? a : a + "?") + wu.deviceName + l + wu.deviceModel + o), e = function(e, t) {
let i;
e = -1 !== e.indexOf("?") ? e : e + "?";
const r = Qe();
for (i in t) t[i] ? e += wu[i] + ("subs" === i ? encodeURIComponent(t[i]) : t[i]) : r.warn(`Missing ${i} info`);
return e
}(r, s), i.inheritQuery = !1
}
this.itemQueue.setQueueItem(`item:${null!==(s=null==i?void 0:i.itemId)&&void 0!==s?s:Zl()}`, e, t, null == i ? void 0 : i.platformInfo, null === (t = null == i ? void 0 : i.appData) || void 0 === t ? void 0 : t.serviceName), fg().setStartTime(void 0)
}
queueSource(e, t, i) {
var r;
null != t && t.userInfo && (this.userInfo = t.userInfo);
var n = null === (r = this._mediaElementQuery) || void 0 === r ? void 0 : r.getCombinedBufferInfo(null === (n = this._mediaElementQuery) || void 0 === n ? void 0 : n.currentTime, 0);
let s = 0;
n && (s = n.end), this.itemQueue.addQueueItem(`item:${null!==(n=null==t?void 0:t.itemId)&&void 0!==n?n:Zl()}`, e, i, null == t ? void 0 : t.platformInfo, s, null === (t = null == t ? void 0 : t.appData) || void 0 === t ? void 0 : t.serviceName)
}
dequeueSource(e = "ApplicationInitiated") {
if (!this.isPreloading && "InvalidFormat" === e && this.isFirstItem) return this.logger.error("First item has invalid format for gapless. Probably video. Disabling gapless."), void(this.gaplessCapable = !1);
var t, i;
this.isPreloading ? (t = this.loadingItem.url, i = this.loadingItem.itemId, this.mediaElementAdapter.flushData(yu.Variant, this.loadingItem.itemStartOffset, 1 / 0), this.mediaElementAdapter.msDuration = this.loadingItem.itemStartOffset, this.itemQueue.resetLoadingItem(), "InvalidFormat" !== e && "FatalErrorWhileLoading" !== e || (this.gaplessCapable = !1), this.triggerItemEvicted({
url: t,
itemId: i
}, e)) : this.logger.warn(`Nothing to dequeue, no item is preloading dequeue reason: ${e}`)
}
triggerItemEvicted(e, t) {
null !== e ? (t = {
url: e.url,
evictedItemId: e.itemId,
reason: t
}, Object.assign(Object.assign({}, t), {
url: le(e.url)
}), this.trigger(P.ITEM_EVICTED, t)) : this.logger.error("dequeueSource called with no playing or loading item")
}
endSource() {
this.gaplessCapable = !1, this.isPreloading && (this.logger.warn("EndSource called during preloading. Loading item will be removed"), this.mediaElementAdapter.flushData(yu.Variant, this.loadingItem.itemStartOffset, 1 / 0), this.mediaElementAdapter.msDuration = this.loadingItem.itemStartOffset, this.itemQueue.resetLoadingItem())
}
get inGaplessMode() {
return mg().gapless && this.gaplessCapable
}
get isPreloading() {
return this.itemQueue.isPreloading()
}
get isFirstItem() {
return this.itemQueue.isFirstItem
}
get loadingItem() {
return this.itemQueue.loadingItem
}
get playingItem() {
return this.itemQueue.playingItem
}
get url() {
return this.playingItem ? this.playingItem.url : this.loadingItem ? this.loadingItem.url : void 0
}
destroy() {
const t = this.logger;
return this.destroy$.next(), null != this.rpcService && (this.teardownWG$.add(), this.rpcService.teardown(e => {
e && t.error("RPCService teardown error:", e), this.teardownWG$.done()
}), this.rpcService = null), null != this.iframeMachine && (this.iframeMachine.destroy(), this.iframeMachine = null), this.teardownWG$.toPromise()
}
attachMedia(e) {
this.trigger(P.MEDIA_ATTACHING, {
media: e
}), this.mediaElement$.next(e), this.trigger(P.MEDIA_ATTACHED, {
media: e
})
}
detachMedia() {
var e;
this.mediaElement$.getValue() && (this.trigger(P.MEDIA_DETACHING), null === (e = this.rtcService) || void 0 === e || e.detachMedia(), null != this.iframeMachine && this.iframeMachine.stop(), this.mediaElement$.next(null), this.trigger(P.MEDIA_DETACHED))
}
handleResolvedUri(e, t) {
this.customUrlLoader.setCustomUrlResponse(e, {
uri: t.uri,
response: t
})
}
get variantOptions$() {
return this.publicQueries$.pipe(La(e => {
const [t, i] = e;
return Mr([t.preferredMediaOptions$, i.desiredRate$]).pipe(hr(([e]) => {
const t = i.isIframeRate;
return e[gu.Variant].filter(e => (null !== (e = e.iframes) && void 0 !== e && e) === t).map(e => e.mediaOptionId)
}))
}))
}
get altAudioOptions$() {
return this.publicQueries$.pipe(La(e => {
var [e] = e;
return $i(e.audioMediaSelectionOptions)
}))
}
get subtitleOptions$() {
return this.publicQueries$.pipe(La(e => {
var [e] = e;
return $i([{
MediaSelectionOptionsName: "Disable subtitle",
MediaSelectionOptionsPersistentID: -1
}].concat(e.subtitleMediaSelectionOptions))
}))
}
get levels() {
var e;
return null !== (e = null === (e = this._activeRootQuery) || void 0 === e ? void 0 : e.preferredMediaOptions[gu.Variant]) && void 0 !== e ? e : []
}
get audioTracks() {
var e;
return null !== (e = null === (e = this._activeRootQuery) || void 0 === e ? void 0 : e.preferredMediaOptions[gu.AltAudio]) && void 0 !== e ? e : []
}
get audioMediaOptions() {
var e;
return null !== (e = null === (e = this._activeRootQuery) || void 0 === e ? void 0 : e.audioMediaSelectionOptions) && void 0 !== e ? e : []
}
get subtitleMediaOptions() {
var e;
return null !== (e = null === (e = this._activeRootQuery) || void 0 === e ? void 0 : e.subtitleMediaSelectionOptions) && void 0 !== e ? e : []
}
get playbackLikelyToKeepUp() {
var e;
return null !== (e = null === (e = this._mediaElementQuery) || void 0 === e ? void 0 : e.playbackLikelyToKeepUp) && void 0 !== e && e
}
get duration$() {
return this.publicQueries$.pipe(La(e => {
var [, e] = e;
return e.mediaElementDuration$
}))
}
get timeupdate$() {
return this.publicQueries$.pipe(La(e => {
var [, e] = e;
return e.timeupdate$
}))
}
get playing$() {
return this.publicQueries$.pipe(La(e => {
var [, e] = e;
return e.gotPlaying$
}))
}
get desiredRate$() {
return this.publicQueries$.pipe(La(e => {
var [, e] = e;
return e.desiredRate$
}))
}
set desiredRate(e) {
null != e && this.setRate(e)
}
get desiredRate() {
var e;
return null !== (e = null === (e = this._mediaElementQuery) || void 0 === e ? void 0 : e.desiredRate) && void 0 !== e ? e : 0
}
get effectiveRate() {
var e;
return null !== (e = null === (e = this._mediaElementQuery) || void 0 === e ? void 0 : e.effectiveRate) && void 0 !== e ? e : 0
}
get iframeMode() {
var e;
return null !== (e = null === (e = this._mediaElementQuery) || void 0 === e ? void 0 : e.isIframeRate) && void 0 !== e && e
}
get accessLog() {
return this.accessLogInstance && this._activeRootQuery ? this.accessLogInstance.getAccessLog(this._activeRootQuery.itemId) : []
}
get errorLog() {
return this.accessLogInstance ? this.accessLogInstance.errorLog : []
}
setRate(e) {
var t;
const i = this.logger.child({
name: "iframes"
});
if (e === this.desiredRate) return -2;
const r = this.mediaElementAdapter;
if (!r || isNaN(e)) return i.warn("unable to switch to rate, missing adapter or newRate isNaN"), -1;
e = Number(e);
const n = Math.abs(e);
if (!this.supportedFrameRates.some(e => e === n)) return i.warn(`unsupported rate(${e})`), -3;
const s = Wp(e),
a = this.iframeMachine;
if (s) {
const e = this._activeRootQuery;
if (null == e || !e.mediaOptionListQueries[gu.Variant].hasIframes) return i.warn("no iframe variants available"), -1;
r.postFlushSeek = null
} else null != a && a.isStarted && !ne(null === (t = r.mediaQuery) || void 0 === t ? void 0 : t.postFlushSeek) && (a.pause(), r.postFlushSeek = a.iframeClockTimeSeconds);
return r.desiredRate = e, 0
}
get sessionData$() {
return this.publicQueries$.pipe(La(([e]) => e.sessionData$))
}
set skip(e) {
this._mediaElementQuery && (this.realCurrentTime = Math.max(0, this.realCurrentTime + e))
}
gaplessSeekTo(e) {
e < this.playingItem.itemStartOffset && (this.logger.warn(`[Gapless] Seeking past track boundary oldSeek=${e}, adjustedSeek=${this.playingItem.itemStartOffset}`), e = this.playingItem.itemStartOffset), this.isPreloading && (e > this.loadingItem.itemStartOffset && (this.logger.warn(`[Gapless] Seeking past track boundary oldSeek=${e}, adjustedSeek=${this.loadingItem.itemStartOffset}`), e = this.loadingItem.itemStartOffset), e < this._mediaElementQuery.getBufferInfo(this._mediaElementQuery.currentTime, this.config.maxBufferHole)[0].buffered.start && this.dequeueSource("SeekToUnbufferedTimeRanges")), fg().setUserSeek(e)
}
isIframeInternalSeek(e) {
return e === (null === (e = this.iframeMachine) || void 0 === e ? void 0 : e.mediaRootTime)
}
set seekTo(e) {
var t, i = Number(e);
if (ne(i))
if (this.inGaplessMode) this.gaplessSeekTo(i);
else {
const r = this.mediaElementAdapter;
!r || !ne(null === (t = r.mediaQuery) || void 0 === t ? void 0 : t.postFlushSeek) || r.mediaQuery.seekTo && !this.isIframeInternalSeek(r.mediaQuery.seekTo.pos) ? fg().setUserSeek(i) : r.schedulePostFlushSeek(i)
}
else this.logger.error(`[seek] got invalid seek value ${e}`)
}
seekToDate(e) {
fg().setUserSeek(e)
}
get availableProgramDateTime() {
return new Map(this._currentDateToMediaTimeTuple)
}
get _currentDateToMediaTimeTuple() {
if (!this._activeRootQuery) return [];
var e = this._activeRootQuery.enabledMediaOptionKeys[gu.Variant];
return _u(e) && null !== (e = null === (e = Cg().getQueryForOption(e).mediaOptionDetails) || void 0 === e ? void 0 : e.dateMediaTimePairs) && void 0 !== e ? e : []
}
get playingDate() {
return function(e, t) {
if (e && 0 !== e.length) {
const i = [...e].sort((e, t) => t[1] - e[1]),
r = null !== (e = i.find(([, e]) => e <= t)) && void 0 !== e ? e : i[i.length - 1],
[n, s] = r;
return new Date(n + 1e3 * (t - s))
}
}(this._currentDateToMediaTimeTuple, this.realCurrentTime)
}
set variantId(e) {}
set audioSelectedPersistentID(e) {
var t = this._activeRootQuery;
null != t && t.preferredMediaOptions[gu.AltAudio] ? (t = t.itemId, e !== this.audioSelectedPersistentID && this.rootPlaylistService.setEnabledMediaOptionTupleWithMatchedGroups(t, gu.AltAudio, e, {
userInitiated: !0
})) : !ne(e) || e < 0 || (this.logger.warn(`[audio] no active item, defer audio track selection: persistentId ${e}`), this.itemQueue.earlyAudioSelection = e)
}
get audioSelectedPersistentID() {
var e;
return this._activeRootQuery ? null === (e = this._activeRootQuery.enabledAlternateMediaOptionByType(gu.AltAudio)) || void 0 === e ? void 0 : e.persistentID : this.itemQueue.earlyAudioSelection
}
set subtitleSelectedPersistentID(e) {
var t = this._activeRootQuery,
i = null == t ? void 0 : t.preferredMediaOptions[gu.Subtitle];
i ? e !== this.subtitleSelectedPersistentID && (t = t.itemId, 0 === i.length && (!ne(e) || e < 0) || (ne(e) && -1 !== e ? this.rootPlaylistService.setEnabledMediaOptionTupleWithMatchedGroups(t, gu.Subtitle, e) : this.rootPlaylistService.setEnabledMediaOptionByType(t, gu.Subtitle, Lu))) : !ne(e) || e < 0 || (this.logger.warn(`[subtitle] no active item, defer subtitle track selection: persistentId ${e}`), this.itemQueue.earlySubtitleSelection = e)
}
get subtitleSelectedPersistentID() {
var e;
return this._activeRootQuery ? null === (e = this._activeRootQuery.enabledAlternateMediaOptionByType(gu.Subtitle)) || void 0 === e ? void 0 : e.persistentID : this.itemQueue.earlySubtitleSelection
}
get selectedMediaArray() {
const e = this._activeRootQuery;
if (!e) return [];
const t = [],
i = e.enabledAlternateMediaOptionByType(gu.AltAudio),
r = e.enabledAlternateMediaOptionByType(gu.Subtitle),
n = i ? e.audioMediaSelectionOptions.find(e => e.MediaSelectionOptionsPersistentID === i.persistentID) : void 0,
s = r ? e.subtitleMediaSelectionOptions.find(e => e.MediaSelectionOptionsPersistentID === r.persistentID) : void 0;
if (n) {
const e = {
MediaSelectionGroupMediaType: Su.AUDIO,
MediaSelectionOptionsPersistentID: n.MediaSelectionOptionsPersistentID
};
t.push(e)
}
if (s) {
let e = vu.NO;
s.MediaSelectionOptionsDisplaysNonForcedSubtitles && (e = s.MediaSelectionOptionsDisplaysNonForcedSubtitles);
const i = {
MediaSelectionGroupMediaType: Su.SUBTITLE,
MediaSelectionOptionsDisplaysNonForcedSubtitles: e,
MediaSelectionOptionsPersistentID: s.MediaSelectionOptionsPersistentID
};
t.push(i)
}
return t
}
set selectedMediaArray(e) {
this._activeRootQuery ? e.forEach(e => {
e.MediaSelectionGroupMediaType === Su.AUDIO || e.MediaSelectionOptionsMediaType === Su.AUDIO ? this.audioSelectedPersistentID = e.MediaSelectionOptionsPersistentID : e.MediaSelectionGroupMediaType !== Su.SUBTITLE && e.MediaSelectionOptionsMediaType !== Su.SUBTITLE && e.MediaSelectionOptionsMediaType !== Su.CLOSEDCAPTION || (this.subtitleSelectedPersistentID = e.MediaSelectionOptionsPersistentID)
}) : this.logger.warn("selectedMediaArray: no active item")
}
getHTMLTextTrack(e) {
return this.legibleSystemAdapter.getExistingHTMLTextTrackWithSubtitleTrackId(e)
}
get keysystems() {
return this.keySystemAdapter.availableKeySystems
}
setProtectionData(e) {
this.keySystemAdapter.initialize(e)
}
generateKeyRequest(e, t) {
this.keySystemAdapter.generateRequest(e, t), this.rtcService.licenseChallengeReceived({
keyuri: e
})
}
setLicenseResponse(e, t) {
this.keySystemAdapter.setLicenseResponse(e, t)
}
get bufferInfo$() {
return this.publicQueries$.pipe(La(e => {
const [, t] = e, i = fg().getQuery().currentConfig;
return an(t.timeupdate$, t.bufferedRangeTuple$).pipe(ao(1e3), hr(() => {
var e = t.currentTime;
return {
combined: t.getCombinedBufferInfo(e, i.maxBufferHole),
sbTuple: t.getBufferInfo(e, i.maxBufferHole)
}
}))
}))
}
bufferInfoByType$(t) {
return this.bufferInfo$.pipe(hr(e => null === (e = null == e ? void 0 : e.sbTuple) || void 0 === e ? void 0 : e[t]))
}
levelWithPersistentId(e) {
this.logger.warn("levelWithPersistentId is deprecated")
}
startLoad(e) {
this.logger.warn("startLoad is deprecated"), ne(e) && (this.logger.warn(`[seek] Seeking to ${null==e?void 0:e.toFixed(3)} via deprecated "startLoad" method. Use loadSource(url, options, startTime) instead.`), this.seekTo = e)
}
stopLoad() {}
get config() {
return Object.assign(Object.assign({}, de(mg())), {
set startPosition(e) {
Qe().warn(`Setting start position ${null==e?void 0:e.toFixed(3)} using deprecated method`), fg().setStartTime(e)
}
})
}
get media() {
return null != this.mediaElement$.value
}
set subtitleDisplay(e) {
this.logger.warn(`set subtitleDisplay ${e} is deprecated`)
}
}
}, "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || Jy).Hls = t()
}(!1);
//# sourceMappingURL=hls.js.map