From f92b5ac293e842b41367ee6f85897edebc21f072 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Fri, 10 Dec 2021 21:51:34 -0800 Subject: [PATCH] hls fix progress --- resources/cider-ui-tests/apple-hls.js | 31028 ++++++++++++++++ .../views/components/animatedartwork-view.ejs | 12 +- resources/cider-ui-tests/views/main.ejs | 3 +- resources/functions/cider-base.js | 14 +- 4 files changed, 31054 insertions(+), 3 deletions(-) create mode 100644 resources/cider-ui-tests/apple-hls.js diff --git a/resources/cider-ui-tests/apple-hls.js b/resources/cider-ui-tests/apple-hls.js new file mode 100644 index 00000000..abb18dab --- /dev/null +++ b/resources/cider-ui-tests/apple-hls.js @@ -0,0 +1,31028 @@ +/*! For license information please see hls.js.LICENSE.txt */ +!function Ky(Hy) { + const jy = this; + var e, t; + e = this, + t = function() { + "use strict"; + var P, e = e=>e && e.Math === Math && e, d = e("object" == typeof globalThis && globalThis) || e("object" == typeof window && window) || e("object" == typeof jy && jy) || e("object" == typeof global && global) || Function("return this")(); + class l { + 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"] + , d = o[0] + , l = 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, + d[g] = y << 24 | y >>> 8, + l[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) + , d = this.invKeySchedule = new Uint32Array(a) + , l = 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 = l[r >>> 24] << 24 | l[r >>> 16 & 255] << 16 | l[r >>> 8 & 255] << 8 | l[255 & r], + r ^= u[e / s | 0] << 24) : 6 < s && e % s == 4 && (r = l[r >>> 24] << 24 | l[r >>> 16 & 255] << 16 | l[r >>> 8 & 255] << 8 | l[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], + d[t] = t < 4 || e <= 4 ? r : h[l[r >>> 24]] ^ p[l[r >>> 16 & 255]] ^ f[l[r >>> 8 & 255]] ^ m[l[255 & r]], + d[t] = d[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] + , d = a[1] + , l = 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 P = this.networkToHostOrderSwap; + for (; t < m.length; ) { + for (A = P(m[t]), + O = P(m[t + 1]), + k = P(m[t + 2]), + C = P(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] ^ d[E >> 16 & 255] ^ l[I >> 8 & 255] ^ u[255 & w] ^ n[D], + v = o[E >>> 24] ^ d[I >> 16 & 255] ^ l[w >> 8 & 255] ^ u[255 & T] ^ n[D + 1], + S = o[I >>> 24] ^ d[w >> 16 & 255] ^ l[T >> 8 & 255] ^ u[255 & E] ^ n[D + 2], + b = o[w >>> 24] ^ d[T >> 16 & 255] ^ l[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] = P(y ^ c), + g[t + 1] = P(b ^ h), + g[t + 2] = P(S ^ p), + g[t + 3] = P(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 = d.crypto; + if (null != o && o.useJSCrypto || null == i || !i.subtle) { + const s = new l; + 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) + } + } + (gr = P = P || {}).MEDIA_ATTACHING = "hlsMediaAttaching", + gr.MEDIA_ATTACHED = "hlsMediaAttached", + gr.MEDIA_DETACHING = "hlsMediaDetaching", + gr.MEDIA_DETACHED = "hlsMediaDetached", + gr.BUFFER_CREATED = "hlsBufferCreated", + gr.BUFFER_APPENDING = "hlsBufferAppending", + gr.BUFFER_APPENDED = "hlsBufferAppended", + gr.BUFFER_FLUSHED = "hlsBufferFlushed", + gr.MANIFEST_LOADING = "hlsManifestLoading", + gr.MANIFEST_LOADED = "hlsManifestLoaded", + gr.MANIFEST_PARSED = "hlsManifestParsed", + gr.LEVEL_SWITCHING = "hlsLevelSwitching", + gr.LEVEL_SWITCHED = "hlsLevelSwitched", + gr.LEVEL_LOADING = "hlsLevelLoading", + gr.LEVEL_LOADED = "hlsLevelLoaded", + gr.LEVEL_UPDATED = "hlsLevelUpdated", + gr.LEVELS_CHANGED = "hlsLevelsChanged", + gr.AUDIO_TRACKS_UPDATED = "hlsAudioTracksUpdated", + gr.AUDIO_TRACK_SWITCH = "hlsAudioTrackSwitch", + gr.AUDIO_TRACK_SWITCHED = "hlsAudioTrackSwitched", + gr.AUDIO_TRACK_LOADED = "hlsAudioTrackLoaded", + gr.SUBTITLE_TRACKS_UPDATED = "hlsSubtitleTracksUpdated", + gr.SUBTITLE_TRACKS_CREATED = "hlsSubtitleTracksCreated", + gr.SUBTITLE_TRACK_SWITCH = "hlsSubtitleTrackSwitch", + gr.INLINE_STYLES_PARSED = "hlsInlineStylesParsed", + gr.SESSION_DATA_COMPLETE = "hlsSessionDataComplete", + gr.FRAG_LOADING = "hlsFragLoading", + gr.FRAG_LOADED = "hlsFragLoaded", + gr.FRAG_BUFFERED = "hlsFragBuffered", + gr.FRAG_CHANGED = "hlsFragChanged", + gr.INTERNAL_ERROR = "hlsInternalError", + gr.ERROR = "hlsError", + gr.DESTROYING = "hlsDestroying", + gr.KEY_REQUEST_STARTED = "hlsKeyRequestStarted", + gr.LICENSE_CHALLENGE_CREATED = "hlsLicenseChallengeCreated", + gr.LICENSE_RELEASED = "hlsLicenseReleased", + gr.KEY_LOADED = "hlsKeyLoaded", + gr.UNRESOLVED_URI_LOADING = "hlsUnresolvedUriLoading", + gr.DESIRED_RATE_CHANGED = "hlsDesiredRateChanged", + gr.PLAYER_STATE_CHANGE = "hlsPlayerStateChange", + gr.SEEKING = "hlsSeeking", + gr.SEEKED = "hlsSeeked", + gr.STALLED = "hlsStalled", + gr.RESUME_FROM_STALL = "hlsResumeFromStall", + gr.READY_FOR_NEXT_ITEM = "hlsReadyForNextItem", + gr.ITEM_TRANSITIONED = "hlsItemTransitioned", + gr.ITEM_EVICTED = "hlsItemEvicted", + gr.DATERANGE_UPDATED = "hlsDaterangeUpdated"; + var v, x = P; + (dd = v = v || {}).FRAG_PARSING_INIT_SEGMENT = "hlsFragParsingInitSegment", + dd.FRAG_PARSING_DATA = "hlsFragParsingData", + dd.FRAG_PARSED = "hlsFragParsed", + dd.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 !== d.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, d; + const l = 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(l) ? 6 <= c ? (s = 5, + d = new Array(4), + a = c - 3) : (s = 2, + d = new Array(2)) : -1 !== l.indexOf("android") ? (s = 2, + d = new Array(2)) : (s = 5, + d = 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, + d = new Array(2)), + c)), + d[0] = s << 3, + d[0] |= (14 & c) >> 1, + d[1] |= (1 & c) << 7, + d[1] |= o << 3, + 5 === s && (d[1] |= (14 & a) >> 1, + d[2] = (1 & a) << 7, + d[2] |= 8, + d[3] = 0), + { + esdsConfig: d, + 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 = d.Buffer.from(e, "utf-8"); + return new Uint8Array(e.buffer,e.byteOffset,e.byteLength) + }, + utf8arrayToStr: e=>d.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 === (pd = d.Buffer) || void 0 === pd ? void 0 : pd.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, d, l, 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 + }), + l = s.length, + h = e.length; l < h - 1 && (255 !== e[l] || 240 != (246 & e[l + 1])); l++) + ; + if (!this.audioConfig && (this.audioConfig = E(this.observer, e, l, 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), + d = 0; + for (var y = 9216e4 / this.audioConfig.samplerate; l + 5 < h && (u = 1 & e[l + 1] ? 7 : 9, + o = (3 & e[l + 3]) << 11 | e[l + 4] << 3 | (224 & e[l + 5]) >>> 5, + o -= u, + 0 < o && l + u + o <= h); ) + for (c = a + d * y, + p = { + unit: e.subarray(l + u, l + u + o), + pts: c, + dts: c, + keyTagInfo: n + }, + this.audioTrack.parsingData.esSamples.push(p), + this.audioTrack.parsingData.len += o, + l += o + u, + d++; l < h - 1; l++) { + if (M.isHeader(e, l)) { + const t = new M(e.subarray(l),this.logger); + if (0 < t.length) { + l += 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[l] && 240 == (246 & e[l + 1])) + break + } + this.esRemuxer.remuxEsTracks(this.audioTrack, void 0, f, void 0, t, i, r, n) + } + } + class H { + 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) + , d = 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; ) { + d[0] = i[t]; + const r = Math.min(n, 8) + , s = 8 - r; + o[0] = 4278190080 >>> 24 + s << s, + a[0] = (d[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) + , d = new Uint8Array(1); + for (s[0] = n, + i && (a[0] = s[0] << 32 - r, + o[0] = 4278190080, + d[0] = (a[0] & o[0]) >>> 24 + i, + t[e] &= ~(o[0] >>> 24 + i), + t[e] |= d[0], + e += 1, + r -= 8 - i); 0 < r; ) { + a[0] = s[0] << 32 - r, + o[0] = 4278190080, + d[0] = (a[0] & o[0]) >>> 24; + const l = r < 0 ? 8 - r : 0; + t[e] &= ~(o[0] >>> 24 >>> l << l), + t[e] |= d[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 j(e, t) { + return 1536 / e.samplerate * t + } + function q(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 d = 0; + 2 == o ? d += 2 : (1 & o && 1 != o && (d += 2), + 4 & o && (d += 2)); + var l = (t[i + 6] << 8 | t[i + 7]) >> 12 - d & 1 + , u = [2, 1, 2, 3, 3, 4, 4, 5][o] + l + , e = t[i + 5] >> 3 + , i = 7 & t[i + 5]; + return { + samplerate: G[s], + channelCount: u, + segmentCodec: "ac3", + codec: "ac-3", + extraData: s << 22 | e << 17 | i << 14 | o << 11 | l << 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 * W[3 * i + n]) + } + const G = [48e3, 44100, 32e3] + , W = [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 H).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 d = 0 + , l = s.length; + if (this.audioConfig || (this.audioConfig = q(this.observer, e, l, 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 = j(this.audioConfig, this.audioTrack.info.inputTimescale); + for ("zac3" === s.audioType && (this.audioTrack.info.encrypted = !0); l < o; ) { + if (M.isHeader(e, l) && (l += new M(e.subarray(l),this.logger).length), + 11 !== e[l] || 119 !== e[l + 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, l) + , i = a + d * u + , r = { + unit: e.subarray(l, l + t), + pts: i, + dts: i, + keyTagInfo: n + }; + this.audioTrack.parsingData.esSamples.push(r), + this.audioTrack.parsingData.len += t, + l += t, + d++ + } + 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 H; + let a, o = !1, d = 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 l = { + byteOffset: r + 2, + usedBits: 0 + } + , u = s.bsReadAndUpdate(i, l, 2) + , c = s.bsReadAndUpdate(i, l, 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); + l = 2 * (s.bsReadAndUpdate(i, l, 11) + 1); + r += l, + d += l + (e || 0) + } + return d + } + , 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 H; + let d, l = !1, u = 0; + for (; r < i.length; ) { + if (r + 8 > i.length) + return d = new D(!0,"error parsing ec-3, not enough data",$.InsufficientEC3Data), + void t.trigger(x.INTERNAL_ERROR, d); + 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 d = new D(!0,"invalid ec-3 magic",$.InvalidEC3Magic), + void t.trigger(x.INTERNAL_ERROR, d); + 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 === l) { + if (0 === s.substreamid) + break + } else + l = !0; + a.num_ind_sub++, + a.num_dep_sub.push(0) + } else { + if (1 !== s.strmtyp) + return d = new D(!0,"reserved stream type",$.ReservedStreamType), + void t.trigger(x.INTERNAL_ERROR, d); + 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 H).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 d = 0 + , l = s.length; + if (this.audioConfig || (this.audioConfig = Y(this.observer, e, l, 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 = j(this.audioConfig, this.audioTrack.info.inputTimescale); + for ("zec3" === s.audioType && (this.audioTrack.info.encrypted = !0); l < o; ) { + const t = X(this.observer, e, l, this.logger) + , i = a + d * u + , r = { + unit: e.subarray(l, l + t), + pts: i, + dts: i, + keyTagInfo: n + }; + this.audioTrack.parsingData.esSamples.push(r), + this.audioTrack.parsingData.len += t, + l += t, + d++ + } + 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] + , d = [44100, 48e3, 32e3, 22050, 24e3, 16e3, 11025, 12e3, 8e3][3 * (3 == a ? 0 : 2 == a ? 1 : 2) + p] + , l = f ? 1 : 0 + , u = t[i + 3] >> 6 == 3 ? 1 : 2 + , l = 3 == c ? (3 == a ? 12 : 6) * o / d + l << 2 : (3 == a ? 144 : 72) * o / d + l | 0; + return r < i + l ? -1 : (Z.onFrame(e, t.subarray(i, i + l), o, d, u, n, s), + l) + } + } + 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, i=3) { + return JSON.stringify(e, (e,t)=>!isNaN(t) && null != t && t.toFixed ? Number(null == t ? void 0 : t.toFixed(i)) : t) + } + let ae = !0; + function oe(e) { + return ae ? "" : 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 le(e) { + const t = [...e]; + for (let e = 0; e < t.length; e++) + t[e] = Object.assign({}, t[e]), + t[e].url = oe(t[e].url), + t[e].attrs && (t[e].attrs = Object.assign({}, t[e].attrs), + t[e].attrs.URI = oe(t[e].attrs.URI)); + return t + } + function ue(e) { + const t = [...e]; + for (let e = 0; e < t.length; e++) + t[e] = Object.assign({}, t[e]), + t[e].url = oe(t[e].url); + return t + } + const ce = Math.pow(2, 32) - 1; + class he { + static init() { + let e; + for (e in he.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: [] + }, + he.types) + he.types.hasOwnProperty(e) && (he.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]); + he.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]); + he.STTS = he.STSC = he.STCO = n, + he.STSZ = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), + he.VMHD = new Uint8Array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]), + he.SMHD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]), + he.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]); + he.FTYP = he.box(he.types.ftyp, t, n, t, i), + he.DINF = he.box(he.types.dinf, he.box(he.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 he.box(he.types.hdlr, he.HDLR_TYPES[e]) + } + static mdat(e) { + return he.box(he.types.mdat, e) + } + static mdhd(e, t) { + t *= e; + var i = Math.floor(t / (1 + ce)) + , t = Math.floor(t % (1 + ce)); + return he.box(he.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 = he.mdhd(e.info.timescale, e.info.duration) + , i = he.hdlr(e.type) + , e = he.minf(e); + return he.box(he.types.mdia, t, i, e) + } + static mfhd(e) { + return he.box(he.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 ? he.box(he.types.minf, he.box(he.types.smhd, he.SMHD), he.DINF, he.stbl(e)) : he.box(he.types.minf, he.box(he.types.vmhd, he.VMHD), he.DINF, he.stbl(e)) + } + static moof(e, t) { + he.types || he.init(); + e = he.traf(t, e); + return he.box(he.types.moof, he.mfhd(t.sequenceNumber), e) + } + static moov(e) { + let t = e.length; + const i = []; + for (; t--; ) + i[t] = he.trak(e[t]); + return he.box.apply(null, [he.types.moov, he.mvhd(e[0].info.timescale, e[0].info.duration)].concat(i).concat(he.mvex(e))) + } + static mvex(e) { + let t = e.length; + const i = []; + for (; t--; ) + i[t] = he.trex(e[t]); + return he.box(he.types.mvex, ...i) + } + static mvhd(e, t) { + t *= e; + var i = Math.floor(t / (1 + ce)) + , t = Math.floor(t % (1 + ce)) + , 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 he.box(he.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 he.box(he.types.sdtp, i) + } + static stbl(e) { + var t = he.stsd(e) + , i = he.box(he.types.stts, he.STTS) + , r = he.box(he.types.stsc, he.STSC) + , n = he.box(he.types.stsz, he.STSZ) + , e = he.box(he.types.stco, he.STCO); + return he.box(he.types.stbl, t, i, r, n, e) + } + static avc1(e) { + let t, i, r, n = [], s = []; + var a = e.info.encrypted ? he.types.encv : he.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 = he.box(he.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))) + , d = e.config.width + , l = e.config.height + , u = e.config.pixelRatio[0] + , c = e.config.pixelRatio[1] + , h = e.info.encrypted && e.info.keyTagInfo ? he.sinf(e.info.keyTagInfo, e.type, he.types.avc1) : new Uint8Array; + return he.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, d >> 8 & 255, 255 & d, l >> 8 & 255, 255 & l, 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, he.box(he.types.btrt, new Uint8Array([0, 28, 156, 128, 0, 45, 198, 192, 0, 45, 198, 192])), he.box(he.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 = he.types.mp4a + , r = null; + r = e.encrypted && e.keyTagInfo ? (i = he.types.enca, + he.sinf(e.keyTagInfo, "audio", he.types.mp4a)) : new Uint8Array; + e = he.audioStsd(t), + t = he.box(he.types.esds, he.esds(t)); + return he.box(i, e, t, r) + } + static mp3(e) { + return he.box(he.types[".mp3"], he.audioStsd(e)) + } + static ac3(e, t) { + let i = he.types["ac-3"] + , r = null; + return r = e.encrypted && e.keyTagInfo ? (i = he.types.enca, + he.sinf(e.keyTagInfo, "audio", he.types["ac-3"])) : new Uint8Array, + he.box(i, he.audioStsd(t), he.box(he.types.dac3, he.dac3(t)), r) + } + static ec3(e, t) { + let i = he.types["ec-3"] + , r = null; + return r = e.encrypted && e.keyTagInfo ? (i = he.types.enca, + he.sinf(e.keyTagInfo, "audio", he.types["ec-3"])) : new Uint8Array, + he.box(i, he.audioStsd(t), he.box(he.types.dec3, he.dec3(t)), r) + } + static stsd(e) { + if ("audio" !== e.type) + return he.box(he.types.stsd, he.STSD, he.avc1(e)); + if ("mp3" === e.config.segmentCodec && "mp3" === e.config.codec) + return he.box(he.types.stsd, he.STSD, he.mp3(e.config)); + if ("ac3" === e.config.segmentCodec) + return he.box(he.types.stsd, he.STSD, he.ac3(e.info, e.config)); + if ("ec3" === e.config.segmentCodec) + return he.box(he.types.stsd, he.STSD, he.ec3(e.info, e.config)); + if ("aac" === e.config.segmentCodec) + return he.box(he.types.stsd, he.STSD, he.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 + ce)) + , i = Math.floor(i % (1 + ce)); + let n = 0 + , s = 0; + return "video" === e.type && (n = e.config.width, + s = e.config.height), + he.box(he.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 = he.senc(e) + , r = he.sdtp(e) + , n = i.boxData + , s = n.length ? he.saio(76) : new Uint8Array + , a = n.length ? he.saiz(i.defaultSampleInfoSize, i.sampleInfoSizes) : new Uint8Array + , o = he.sbgp(e) + , d = he.sgpd(e) + , l = e.id + , i = Math.floor(t / (1 + ce)) + , t = Math.floor(t % (1 + ce)); + return he.box(he.types.traf, he.box(he.types.tfhd, new Uint8Array([0, 2, 0, 0, l >> 24, l >> 16 & 255, l >> 8 & 255, 255 & l])), he.box(he.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, d, he.trun(e, r.length + n.length + o.length + d.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 = he.types.trak + , i = he.tkhd(e) + , e = he.mdia(e); + return he.box(t, i, e) + } + static trex(e) { + e = e.info.id; + return he.box(he.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, d, l, 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++) + d = (o = i[a]).duration, + l = o.size, + u = o.flags, + c = o.cts, + s.set([d >>> 24 & 255, d >>> 16 & 255, d >>> 8 & 255, 255 & d, l >>> 24 & 255, l >>> 16 & 255, l >>> 8 & 255, 255 & l, 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 he.box(he.types.trun, s) + } + static initSegment(e) { + he.types || he.init(); + const t = he.moov(e) + , i = new Uint8Array(he.FTYP.byteLength + t.byteLength); + return i.set(he.FTYP), + i.set(t, he.FTYP.byteLength), + i + } + static saio(e) { + e = e + 4 + 4; + return he.box(he.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 he.box(he.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 l of t) + l.subsamples && (r += l.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 d = this.set32(i, o, 0); + for (const l of t) { + const t = l.subsamples || []; + let e = 2; + l.iv && (o.set(l.iv, d), + d += l.iv.byteLength, + e += l.iv.byteLength), + d = this.set16(t.length, o, d); + for (const l of t) + d = this.set16(l[0], o, d), + d = this.set32(l[1], o, d), + e += 6; + a.push(e), + ne(n) || (n = e), + s = s && n === e, + n = e + } + return { + boxData: he.box(he.types.senc, new Uint8Array([0, 0, 0, 2]), o), + defaultSampleInfoSize: s ? n : 0, + sampleInfoSizes: a + } + } + static sinf(e, t, i) { + return he.box(he.types.sinf, he.frma(i), he.schm(), he.schi(e, t)) + } + static frma(e) { + return he.box(he.types.frma, new Uint8Array(e)) + } + static schm() { + return he.box(he.types.schm, new Uint8Array([0, 0, 0, 0, 99, 98, 99, 115, 0, 1, 0, 0])) + } + static schi(e, t) { + return he.box(he.types.schi, he.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 he.box(he.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 he.box(he.types.sbgp, new Uint8Array([0, 0, 0, 0]), new Uint8Array(he.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 he.box(he.types.sgpd, new Uint8Array([1, 0, 0, 0]), new Uint8Array(he.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 (he.types || he.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), + he.box(he.types.pssh, new Uint8Array([r, 0, 0, 0]), e, s, n, a, i || new Uint8Array) + } + } + var pe, fe, me = he; + (yi = pe = pe || {})[yi.SDR = 0] = "SDR", + yi[yi.HDR = 1] = "HDR", + yi[yi.HDR10 = 2] = "HDR10", + yi[yi.DolbyVision = 3] = "DolbyVision", + yi[yi.HLG = 4] = "HLG", + (Si = fe = fe || {})[Si.H264 = 16] = "H264", + Si[Si.HEVC = 64] = "HEVC", + Si[Si.VP09 = 65] = "VP09"; + const ge = new Set(["ac-3", "mp4a.a5", "mp4a.A5"]) + , ye = new Set(["ec-3", "mp4a.a6", "mp4a.A6"]) + , ve = { + aac: 1024, + mp3: 1024, + ac3: 1536, + ec3: 1536 + } + , Se = { + isAC3: e=>Boolean(e && ge.has(e)), + isEC3: e=>Boolean(e && ye.has(e)), + isDolbyAtmos(e, t) { + const i = t.split("/"); + return Boolean(Se.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=>Se.isVideoCodec(e)) + , s = r.filter(e=>Se.isVideoCodec(e)) + , a = i.filter(e=>Se.isAudioCodec(e)) + , o = r.filter(e=>Se.isAudioCodec(e)) + , d = 0 === n.length && 0 === s.length || n.length === s.length && Se.isCompatibleVideoCodec(n[0], s[0]) + , l = 0 === a.length && 0 === o.length || a.length === o.length && Se.isCompatibleAudioCodec(a[0], o[0]); + return d && l + }, + isVideoCodec: e=>Se.isAVC(e) || Se.isDolby(e) || Se.isHEVC(e), + isAudioCodec: e=>Se.isAC3(e) || Se.isEC3(e) || Se.isAAC(e) || Se.isMP3(e), + isCompatibleVideoCodec: (e,t)=>Boolean(e && t && (e === t || Se.isDolby(e) && Se.isDolby(t) || Se.isHEVC(e) && Se.isHEVC(t) || Se.isAVC(e) && Se.isAVC(t))), + isCompatibleAudioCodec: (e,t)=>Boolean(e && t && (e === t || Se.isAAC(e) && Se.isAAC(t) || Se.isAC3(e) && Se.isAC3(t) || Se.isEC3(e) && Se.isEC3(t) || Se.isMP3(e) && Se.isMP3(t))), + getSegmentCodec(e) { + let t; + if (Se.isAAC(e)) + t = "aac"; + else if (Se.isAC3(e)) + t = "ac3"; + else if (Se.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 = pe.SDR; + return "PQ" === e && Se.isDolby(t) ? i = pe.DolbyVision : "PQ" === e && (Se.isHEVC(t) || Se.isVP09(t)) ? i = pe.HDR10 : "HLG" !== e || -1 === t.indexOf("hvc1") && !Se.isVP09(t) || (i = pe.HLG), + i + }, + getCompressionType(e) { + let t = fe.H264; + return Se.isHEVC(e) || Se.isDolby(e) ? t = fe.HEVC : Se.isVP09(e) && (t = fe.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 be { + static getTrack(e, t, i, r, n) { + let s; + switch (Se.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 = q(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 = be.getSample(e.config.codec, e.config.channelCount); + if (o) { + const d = [] + , l = { + id: e.info.id, + sequenceNumber: i, + type: "audio", + encrypted: !1, + samples: d, + defaultPerSampleIVSize: 0 + } + , u = ve[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, + me.types || me.init(), + f.set(me.types.mdat, 4), + t += 8; + for (let e = 0; e < c; e++) + d.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 = me.moof(r, l) + , g = new Uint8Array(m.byteLength + f.byteLength); + return g.set(m), + g.set(f, m.byteLength), + { + silentFragData: g, + endTs: h + } + } + } + } + } + class Te 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, d, l, u, c, h) { + let p; + d || (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 = be.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 = be.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 = be.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, d, l, 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, d, l, 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 ? Ee(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 = he.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 : he.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 = he.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 d, l, 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 : Ee(f[0].dts, f[0].pts), + f.forEach(function(e) { + e.pts = Ee(e.pts, v), + e.dts = Ee(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 (d = 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 > d + , 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 * d : 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 { + l = 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(l.buffer); + C.setUint32(0, e), + l.set(he.types.mdat, 4); + for (let t = 0; t < k; t++) { + const M = f[t] + , s = M.units; + let e, i = 0; + const h = []; + 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, + l.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), + h.push([r + 36, e]), + r = o - 32 - e + } + } + if (0 < r && h.push([r, 0]), + w) + e = Math.max(0, d * Math.round((M.pts - M.dts) / d)); + else { + if (t < k - 1) + d = 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 + , l = s.maxSeekHole + , c = Math.floor(Math.min(n, l) * m) + , x = (a ? u + a * m : this.nextAudioPts) - M.pts; + x > c ? (d = x - o, + d < 0 && (d = o)) : d = o + } else + d = o + } + e = Math.round(M.pts - M.dts) + } + ne(o) && (e = 0, + d = o * m), + g.push({ + size: i, + duration: d, + 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: h + }) + } + if (this.nextAvcDts = t + d, + 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 = he.moof(c + this.config.audioPrimingDelay * m, e); + n.parsingData.esSamples = []; + const D = new Uint8Array(e.byteLength + l.byteLength); + return D.set(e), + D.set(l, e.byteLength), + { + data1: D, + startPTS: B(u / m, m), + endPTS: B((h + d) / 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 + , d = ("aac" === r.config.segmentCodec ? 1024 : "mp3" === r.config.segmentCodec ? 1152 : 1536) * o + , l = "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 = l ? 0 : 8; + const k = new H + , C = r.parsingData.esSamples; + if (A = this.nextAudioPts, + (n = n || C.length && A && (e && Math.abs(t - A) < 9e3 || Math.abs(Ee(C[0].pts - A, t)) < 20 * d)) || (A = Ee(C[0].pts, this._initPTS)), + C.forEach(function(e) { + e.pts = e.dts = Ee(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 + , l = Math.abs(1e3 * o / a); + if (o <= -d) + this.logger.warn(`Dropping 1 audio frame @ ${(i / a).toFixed(3)}s due to ${l} ms overlap.`), + C.splice(t, 1), + r.parsingData.len -= M.unit.length; + else if (o >= d && l < 1e4 && i) { + const l = Math.round(o / d); + this.logger.warn(`Injecting ${l} audio frame @ ${(i / a).toFixed(3)}s due to ${Math.round(1e3 * o / a)} ms gap.`); + for (let e = 0; e < l; 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 += d, + t += 1; + M.pts = M.dts = i, + i += d, + t += 1 + } else + i += d, + M.pts = M.dts = 0 === t ? A : C[t - 1].pts + d, + 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) / d), + 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 = l ? 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) + } + l || (h = new DataView(g.buffer), + h.setUint32(0, i), + g.set(he.types.mdat, 4)) + } + for (let e = 0; e < t; e++) + w = T - (t - e) * d, + 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, + l) + 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 = he.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) + , d = this.nextAudioPts + , l = (void 0 !== d ? d : S(n.startDTS) * a) + this._initDTS + , a = S(n.endDTS) * a + this._initDTS + , u = 1024 * o + , c = Math.ceil((a - l) / 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 = l + 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 Ee(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 Ie(e) { + try { + return JSON.stringify(e) + } catch (e) { + return '"[Circular]"' + } + } + function we(e, t, i) { + var r = i && i.stringify || Ie; + 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 d = "", l = 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 <= l) + break; + if (u < h && (d += e.slice(u, h)), + null == t[l]) + break; + d += Number(t[l]), + u = h += 2; + break; + case 79: + case 111: + case 106: + if (o <= l) + break; + if (u < h && (d += e.slice(u, h)), + void 0 === t[l]) + break; + var p = typeof t[l]; + if ("string" == p) { + d += "'" + t[l] + "'", + u = h + 2, + h++; + break + } + if ("function" == p) { + d += t[l].name || "", + u = h + 2, + h++; + break + } + d += r(t[l]), + u = h + 2, + h++; + break; + case 115: + if (o <= l) + break; + u < h && (d += e.slice(u, h)), + d += String(t[l]), + u = h + 2, + h++; + break; + case 37: + u < h && (d += e.slice(u, h)), + d += "%", + u = h + 2, + h++ + } + ++l + } + ++h + } + return -1 === u ? e : (u < c && (d += e.slice(u)), + d) + } + var Ae = Ce; + const Oe = 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 || {} + , ke = { + mapHttpRequest: Re, + mapHttpResponse: Re, + wrapRequestSerializer: Le, + wrapResponseSerializer: Le, + wrapErrorSerializer: Le, + req: Re, + res: Re, + 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 Ce(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 || Oe; + s.browser.write && (s.browser.asObject = !0); + const o = s.serializers || {} + , d = (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" + , l = Object.create(e); + l.log || (l.log = _e), + Object.defineProperty(l, "levelVal", { + get: function() { + return "silent" === this.level ? 1 / 0 : this.levels.values[this.level] + } + }), + Object.defineProperty(l, "level", { + get: function() { + return this._level + }, + set: function(e) { + if ("silent" !== e && !this.levels.values[e]) + throw Error("unknown level " + e); + this._level = e, + De(u, l, "error", "log"), + De(u, l, "fatal", "error"), + De(u, l, "warn", "error"), + De(u, l, "info", "log"), + De(u, l, "debug", "log"), + De(u, l, "trace", "log") + } + }); + const u = { + transmit: a, + serialize: d, + asObject: s.browser.asObject, + levels: ["error", "fatal", "warn", "info", "debug", "trace"], + timestamp: "function" == typeof (i = s).timestamp ? i.timestamp : !1 === i.timestamp ? Ne : Fe + }; + return l.levels = Ce.levels, + l.level = n, + l.setMaxListeners = l.getMaxListeners = l.emit = l.addListener = l.on = l.prependListener = l.once = l.prependOnceListener = l.removeListener = l.removeAllListeners = l.listeners = l.listenerCount = l.eventNames = l.write = l.flush = _e, + l.serializers = o, + l._serialize = d, + l._stdErrSerialize = r, + l.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 = xe([].concat(e._logEvent.bindings, t))) + } + return d && e && (i = Object.assign({}, o, e), + r = !0 === s.browser.serialize ? Object.keys(i) : d, + delete t.serializers, + Me([t], r, i, this._stdErrSerialize)), + n.prototype = this, + new n(this) + } + , + a && (l._logEvent = xe()), + l + } + function De(e, t, i, r) { + var n, s, a, o, d = Object.getPrototypeOf(t); + t[i] = !(t.levelVal > t.levels.values[i]) && (d[i] || Oe[i] || Oe[r]) || _e, + s = t, + a = i, + !(n = e).transmit && s[a] === _e || (s[a] = (o = s[a], + function() { + const e = n.timestamp() + , t = new Array(arguments.length) + , i = Object.getPrototypeOf && Object.getPrototypeOf(this) === Oe ? Oe : this; + for (var r = 0; r < t.length; r++) + t[r] = arguments[r]; + if (n.serialize && !n.asObject && Me(t, this._serialize, this.serializers, this._stdErrSerialize), + n.asObject ? o.call(i, function(e, t, i, r) { + e._serialize && Me(i, e._serialize, e.serializers, e._stdErrSerialize); + const n = i.slice(); + let s = n[0]; + const a = {}; + r && (a.time = r), + a.level = Ce.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 ? we(n.shift(), n) : void 0 + } else + "string" == typeof s && (s = we(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 = Ce.levels.values[o] + , r = Ce.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 + , d = e._logEvent.bindings; + Me(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 === d.indexOf(e) + }), + e._logEvent.level.label = s, + e._logEvent.level.value = a, + r(s, e._logEvent, o), + e._logEvent = xe(d) + }(this, { + ts: e, + methodLevel: a, + methodValue: r, + transmitLevel: o, + transmitValue: Ce.levels.values[n.transmit.level || s.level], + send: n.transmit.send, + val: s.levelVal + }, t) + } + } + )) + } + function Me(e, t, i, r) { + for (const n in e) + if (r && e[n]instanceof Error) + e[n] = Ce.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 xe(e) { + return { + ts: 0, + messages: [], + bindings: e || [], + level: { + label: "", + value: 0 + } + } + } + function Re() { + return {} + } + function Le(e) { + return e + } + function _e() {} + function Ne() { + return !1 + } + function Fe() { + return Date.now() + } + let Be; + function Ue(e={}) { + return Object.assign(Object.assign({}, e), { + customLevels: Object.assign(Object.assign({}, e.customLevels || {}), { + qe: 35 + }) + }) + } + Ce.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" + } + }, + Ce.stdSerializers = ke, + Ce.stdTimeFunctions = Object.assign({}, { + nullTime: Ne, + epochTime: Fe, + unixTime: function() { + return Math.round(Date.now() / 1e3) + }, + isoTime: function() { + return new Date(Date.now()).toISOString() + } + }); + const $e = ()=>{} + ; + function Ve(e, t) { + const i = (e = t in e ? e : console)[t] || e.log; + return i ? i.bind(e) : $e + } + function Ke(r, n, e) { + var {time: s, sessionId: t, critical: i, name: a, msg: o} = e; + let d = ""; + if ("data"in e) + try { + const r = [] + , n = []; + d = 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) { + d = `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 || ""} ${d}`) + } + 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 = ()=>(Be || (Be = Ae(Ue()).child({ + name: "hls" + }), + Be.qe = e=>Be.info(e), + Be.warn("getLogger called without hls object instantiated, returning a logger that is not configured")), + Be) + , Qe = { + 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 = Qe.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 = Qe.readUint32(e, t); + return i *= Math.pow(2, 32), + i += Qe.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)); + Qe.writeUint32(e, t, n), + Qe.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 = Qe.readUint32(e, i), + n = Qe.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 = Qe.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, d, l = []; + if (!i.length) + return []; + for (n = 0; n < e.byteLength; ) + s = Qe.readUint32(e, n), + a = Qe.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 ? l.push({ + offset: n + t, + type: a, + data: e.subarray(n + 8, o), + boxSize: s, + walkedPath: r ? r.slice(0) : void 0 + }) : (d = Qe.findBoxWithOffset(e.subarray(n + 8, o), n + t + 8, i.slice(1), r ? r.slice(0) : void 0)).length && (l = l.concat(d), + r = r ? r.slice(0, -1) : void 0)), + n = o; + return l + } + } + , Ge = { + name: "MP4EncryptionRemuxer" + }; + class We 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 (We._isCommonEncryptionInternal(p.method)) { + const m = p.keyId; + let u = !1; + const g = []; + if (Qe.findBoxWithOffset(c, 0, ["moov", "trak"]).forEach(t=>{ + const o = t.data; + let d, i = 0; + const l = Qe.findBoxWithOffset(o, 0, ["mdia", "minf", "stbl", "stsd"], [])[0] + , e = l.data.subarray(8); + let r = !0 + , n = Qe.findBoxWithOffset(e, l.offset + 16, ["enca"]); + 0 === n.length && (r = !1, + n = Qe.findBoxWithOffset(e, l.offset + 16, ["encv"])), + n.forEach(s=>{ + let e = null + , a = null; + i = r ? (e = s.data.subarray(28), + d = "audio", + l.offset + 16 + 8 + 28) : (e = s.data.subarray(78), + d = "video", + l.offset + 16 + 8 + 78), + e && Qe.findBoxWithOffset(e, i, ["sinf"]).forEach(e=>{ + const t = e.data + , i = Qe.findBox(t, ["frma"])[0] + , r = Qe.findBox(t, ["schm"])[0]; + if (i) + if (r) { + var n = Qe.bin2str(r.subarray(4, 8)); + if ("aac " === Qe.bin2str(i.subarray(0, 4)) && (me.types || me.init(), + i.set(me.types.mp4a, 0)), + "cbcs" === n || "cenc" === n) { + f && f.push(t); + const e = Qe.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, + me.types || me.init(); + const h = Qe.findBoxWithOffset(t, 0, ["frma"])[0] + , f = me.box(me.types.schi, me.tenc(p, d)) + , m = me.box(me.types.sinf, t.subarray(h.offset, h.boxSize), me.schm(), f); + a = me.box(me.types.trak, o.subarray(0, e.offset), m, o.subarray(e.offset + e.boxSize)); + const i = a.subarray(8) + , r = m.byteLength - e.boxSize; + l.walkedPath && (l.walkedPath.push({ + type: "stsd", + offset: s.offset, + size: s.boxSize + }), + l.walkedPath.forEach(e=>{ + Qe.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 = Qe.findBoxWithOffset(o, 0, ["edts"])[0]; + s && (me.types || me.init(), + o.set(me.types.free, s.offset + 4)) + } + ), + u) { + const p = We.remuxCbc2InitSegment(c, g, h); + e = p || c + } + } + return e + } + static remuxCbc2InitSegment(i, r, n) { + const s = Qe.findBoxWithOffset(i, 0, ["ftyp"])[0]; + if (s) { + const a = Qe.findBoxWithOffset(i, s.boxSize, ["moov"])[0]; + let e = [] + , t = 0; + for (; t < a.data.byteLength; ) { + const i = Qe.readUint32(a.data, t) + , n = Qe.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 = me.box(me.types.moov, ...e) + , d = new Uint8Array(s.boxSize + o.byteLength); + return d.set(i.subarray(0, s.boxSize)), + d.set(o, s.boxSize), + d + } + n.error(Ge, "no ftyp found") + } + static remuxOverflowSegment(i, e) { + me.types || me.init(); + const t = Qe.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 = Qe.readUint32(i, t) + , s = Qe.bin2str(i.subarray(t + 4, t + 8)) + , a = 1 < n ? t + n : i.byteLength; + if ("moof" === s) { + const n = We.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 = Qe.readUint32(e, t); + if ("traf" === Qe.bin2str(e.subarray(t + 4, t + 8))) { + const s = We.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 = me.box(me.types.moof, ...i) + , s = r.byteLength - e.byteLength - 8; + return Qe.findBoxWithOffset(r, 0, ["moof", "traf", "trun"], []).forEach(e=>{ + var t; + 0 != (1 & e.data[3]) && (t = Qe.readUint32(e.data, 8), + Qe.writeUint32(e.data, 8, t + s)) + } + ), + Qe.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 = Qe.readUint32(t.data, r); + if (r += 4, + i) + for (let e = 0; e < n; e++) { + const i = Qe.readUint64(t.data, r); + Qe.writeUint64(t.data, r, i + s), + r += 8 + } + else + for (let e = 0; e < n; e++) { + const i = Qe.readUint32(t.data, r); + Qe.writeUint32(t.data, r, i + s), + r += 4 + } + } + ), + r + } + static remuxOverflowTraf(e) { + let t = 0; + const i = []; + for (; t < e.byteLength; ) { + var r, n = Qe.readUint32(e, t); + "tfdt" === Qe.bin2str(e.subarray(t + 4, t + 8)) && 0 === e[t + 8] ? (r = Qe.readUint32(e, t + 12), + r = me.box(me.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 me.box(me.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 = me.moof(e * t.timescale, t) + , o = new Uint8Array(a.byteLength + t.samples[0].data.byteLength + 8); + o.set(a), + Qe.writeUint32(o, a.byteLength, t.samples[0].data.byteLength + 8), + o.set(me.types.mdat, a.byteLength + 4), + o.set(t.samples[0].data, a.byteLength + 8), + t.sequenceNumber++; + var d = t.timescale + , l = B(e + r, d) + , d = B(e, d); + let u, c; + u = i ? (s = "audiovideo", + i.sequenceNumber = t.sequenceNumber, + t.sequenceNumber++, + c = be.getSegment(i, i.sequenceNumber, e * i.info.timescale, r), + y(c.endTs, l)) : (s = "video", + l); + n = { + data1: o, + data2: null == c ? void 0 : c.silentFragData, + startPTS: d, + startDTS: d, + endPTS: u, + endDTS: u, + type: s, + dropped: 0, + track: n + }; + this.observer.trigger(v.FRAG_PARSING_DATA, n), + this.observer.trigger(v.FRAG_PARSED) + } + remuxRawData(e, t, i, r, n, s, a, o, d) { + let l; + t && r ? l = "audiovideo" : t ? l = "audio" : r && (l = "video"); + const u = Math.max(i, e) + , c = { + data1: o, + track: d, + startPTS: B(s, a), + startDTS: B(s, a), + endPTS: void 0, + endDTS: void 0, + type: l, + dropped: 0 + }; + return u && (c.endPTS = B(s + u, a), + c.endDTS = B(s + u, a)), + n && n.captionSamples.length && this.remuxText(n, c), + this.observer.trigger(v.FRAG_PARSING_DATA, c), + this.observer.trigger(v.FRAG_PARSED), + c + } + remuxEmsg(e, t, i, r, n, s, a) { + let o = ""; + e && (o += "audio"), + t && (o += "video"); + n = B(r, n), + a = { + data1: s, + startPTS: n, + startDTS: n, + endPTS: void 0, + endDTS: void 0, + type: o, + dropped: 0, + track: a + }; + return i && 0 < i.id3Samples.length && this.remuxID3(i, a), + this.observer.trigger(v.FRAG_PARSING_DATA, a), + this.observer.trigger(v.FRAG_PARSED), + a + } + 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 ze = Math.pow(2, 32) - 1 + , Xe = Math.pow(2, 20) - 1 + , Ye = { + name: "MP4Demuxer" + }; + class Je 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 = We.remuxInitSegment(t, this.logger, r) + , s = this.initData = Je.parseInitSegment(n); + let e; + s.foundLargeTimescale && this.logger.warn(Ye, "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 + , d = 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: d, + sequenceNumber: 0, + samples: [] + }), + this.trySEICaptions = !Se.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 < Qe.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: Qe.readUint32(e, 2), + constraintIndicator: e.subarray(6, 12), + levelIDC: e[12] + }) : qe().warn(Ye, `Unhandled version ${i} in hvcC box`) : qe().warn(Ye, "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(Ye, "No dvcC box"), + t + } + static dvcCToCodecString(e, t) { + return e + "." + (t.profile < 10 ? "0" + t.profile : t.profile) + "." + (t.level < 10 ? "0" + t.level : t.level) + } + static parseVpcC(e) { + let t; + return e ? t = { + profile: e[4], + level: e[5], + bitDepth: e[6] >> 4 & 15 + } : qe().warn(Ye, "No vpcC box"), + t + } + static vpcCToCodecString(e, t) { + return e + "." + (t.profile < 10 ? "0" + t.profile : t.profile) + "." + (t.level < 10 ? "0" + t.level : t.level) + "." + t.bitDepth + } + static parseInitSegment(e) { + const c = { + foundLargeTimescale: !1, + tracksById: {} + }; + return Qe.findBoxWithOffset(e, 0, ["moov", "trak"]).forEach(t=>{ + const i = t.data + , r = Qe.findBox(i, ["tkhd"])[0]; + if (r) { + var n = 0 === (a = r[0]) ? 12 : 20 + , s = Qe.readUint32(r, n) + , e = Qe.findBox(i, ["mdia", "mdhd"])[0]; + if (e) { + var a, o = 0 === (a = e[0]) ? 12 : 20, n = Qe.readUint32(e, o); + o += 4, + 1e6 <= n && (c.foundLargeTimescale = !0); + const d = 0 === a ? Qe.readUint32(e, o) : 0 + , l = Qe.findBox(i, ["mdia", "hdlr"])[0]; + if (l) { + const r = Qe.bin2str(l.subarray(8, 12)) + , u = { + soun: "audio", + vide: "video", + clcp: "caption" + }[r] || r; + if (u) { + const r = Qe.findBox(i, ["mdia", "minf", "stbl", "stsd"]); + if (r.length) { + const i = r[0]; + Qe.bin2str(i.subarray(12, 16)); + o = Je.parseStsd(i); + let e; + if ("caption" === u) { + const t = Object.assign({ + id: s, + type: u, + timescale: n, + duration: d, + isTimingTrack: !1, + sequenceNumber: 0, + captionSamples: [] + }, o); + c.caption = t, + e = t + } else { + const i = Object.assign({ + id: s, + type: u, + timescale: n, + duration: d, + 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 + } + } + } + } + } + } + ), + Qe.findBoxWithOffset(e, 0, ["moov", "mvex", "trex"]).forEach(e=>{ + var t = e.data + , e = Qe.readUint32(t, 4) + , t = Qe.readUint32(t, 16); + c.tracksById[e].defaultSampleSize = t + } + ), + c + } + static parseStsd(e) { + let r, t; + const i = e.subarray(8); + let n = Qe.bin2str(i.subarray(4, 8)) + , s = null + , a = null; + "enca" === n ? (s = Qe.findBox(i, ["enca"])[0], + a = s.subarray(28)) : "encv" === n && (s = Qe.findBox(i, ["encv"])[0], + a = s.subarray(78)); + e = !!a; + r = 0, + a && Qe.findBox(a, ["sinf"]).forEach(e=>{ + const t = Qe.findBox(e, ["schm"])[0]; + if (t) { + var i = Qe.bin2str(t.subarray(4, 8)); + if ("cbcs" === i || "cenc" === i) { + const t = Qe.findBox(e, ["frma"])[0]; + t && (n = Qe.bin2str(t)); + e = Qe.findBox(e, ["schi", "tenc"])[0]; + e && (r = e[7]) + } + } + } + ); + let o; + var d = 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 l = Qe.findBox(d, ["hvcC"])[0]; + o = Je.parseHvcC(l), + t = o ? Je.hvcCToCodecString(n, o) : n + ".2.4.H150.B0"; + break; + case "dvh1": + case "dvhe": + const r = Qe.findBox(d, ["dvcC"])[0]; + o = Je.parseDvcC(r), + t = o ? Je.dvcCToCodecString(n, o) : n + ".05.01"; + break; + case "c608": + t = n; + break; + case "vp09": + const i = Qe.findBox(d, ["vpcC"])[0]; + o = Je.parseVpcC(i), + t = Je.vpcCToCodecString(n, o); + break; + default: + t = n + } + return { + codec: t, + encrypted: e, + defaultPerSampleIVSize: r + } + } + static has32BitTfdts(e) { + const t = Qe.findBox(e, ["moof", "traf", "tfdt"]); + let i = !1; + return t.forEach(e=>{ + 0 === e[0] && (i = !0) + } + ), + i + } + static getStartDtsTs(r, e) { + const t = Qe.findBox(e, ["moof", "traf"]); + let n, s = Number.MAX_SAFE_INTEGER; + return t.map(function(i) { + return Qe.findBox(i, ["tfhd"]).forEach(e=>{ + var t = Qe.readUint32(e, 4) + , e = r.tracksById[t]; + if (e) { + if (!e.isTimingTrack) + return 1 / 0; + t = e.timescale || 9e4, + e = Qe.findBox(i, ["tfdt"]).map(function(e) { + let t; + var i = e[0]; + return t = Qe.readUint32(e, 4), + 1 === i && (t > Xe && qe().warn(Ye, `Value larger than can be represented by float for upper 32 bits ${t}`), + t *= Math.pow(2, 32), + t += Qe.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, d, n) { + Qe.findBox(e, ["moof", "traf"]).map(function(i) { + return Qe.findBox(i, ["tfhd"]).map(function(e) { + const t = Qe.readUint32(e, 4) + , s = r.tracksById[t]; + if (s) { + const a = s.timescale || 9e4 + , o = "caption" === s.type ? 0 : n; + Qe.findBox(i, ["tfdt"]).map(function(t) { + const i = t[0] + , r = s.type; + if (0 === i) { + let e = Qe.readUint32(t, 4) - Math.round(d.baseTime * a / d.timescale); + "video" === r && e < 0 && (qe().warn(Ye, `video tdft would have gone negative by ${e / a} seconds`), + e = 0), + e += Math.round(o * a), + e = Math.max(e, 0), + Qe.writeUint32(t, 4, e) + } else { + const i = Qe.readUint32(t, 4); + i > Xe && qe().error(Ye, `baseMediaDecodeTime larger than can be represented by float for upper 32 bits ${i}`); + let e = i; + e *= Math.pow(2, 32), + e += Qe.readUint32(t, 8), + e -= Math.round(d.baseTime * a / d.timescale), + "video" === r && e < 0 && (qe().warn(Ye, `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 + ze)) + , s = Math.floor(e % (1 + ze)); + Qe.writeUint32(t, 4, n), + Qe.writeUint32(t, 8, s) + } + }) + } + }) + }) + } + static writeStartDTS(i, e, s) { + Qe.findBox(e, ["moof", "traf"]).map(function(t) { + return Qe.findBox(t, ["tfhd"]).map(function(e) { + e = Qe.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(Ye, `[iframes] large rounding error when adjusting timestamps, startDTS: ${s}, roundedStartDTS: ${n}`), + Qe.findBox(t, ["tfdt"]).map(function(e) { + var t, i; + 0 === e[0] ? Qe.writeUint32(e, 4, n * r) : (i = n * r, + i = Math.max(i, 0), + t = Math.floor(i / (1 + ze)), + i = Math.floor(i % (1 + ze)), + Qe.writeUint32(e, 4, t), + Qe.writeUint32(e, 8, i)) + }) + } + }) + }) + } + static parseSAIO(e) { + let t = 0 + , i = 0; + var r = e[0]; + i += 4, + 0 != (1 & Qe.readUint32(e, 0)) && (i += 8); + var n = 16777215 & Qe.readUint32(e, i); + return 1 == n ? (i += 4, + t = Qe.readUint32(e, i), + 1 === r && (i += 4, + t *= Math.pow(2, 32), + t += Qe.readUint32(e, i))) : qe().error(Ye, `saio entry count error, count is: ${n}`), + t + } + static parseSAIZ(e) { + let t = 0 + , i = 0; + return i += 4, + 0 != (1 & Qe.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 = Qe.readUint16(t, r); + r += 2; + var n = Qe.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 = Qe.readUint32(e, a); + a += 4; + var d = Qe.bin2str(e.subarray(a, a + 4)); + if (a += 4, + "cdat" !== d) + break; + { + const t = o - 8 + , l = e.subarray(a, a + t); + s += t, + n.push(l), + r += o + } + } + return { + cdatList: n, + cdatTotalSize: s + } + } + static parseSamples(e, S, b, T, E, I) { + const w = b.timescale + , l = b.id; + let A, O = e, k = 0, C = !1; + Qe.findBoxWithOffset(S, 0, ["moof"]).map(function(e) { + const t = e.data + , v = e.offset; + Qe.findBox(t, ["traf"]).map(function(d) { + var e = Qe.findBox(d, ["tfdt"]).map(function(e) { + let t; + var i = e[0]; + return t = Qe.readUint32(e, 4), + 1 === i && (t *= Math.pow(2, 32), + t += Qe.readUint32(e, 8)), + t / w + })[0]; + return void 0 !== e && (O = e), + Qe.findBox(d, ["tfhd"]).map(function(e) { + var t = Qe.readUint32(e, 4) + , i = 16777215 & Qe.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 === l) { + if (r && (Qe.readUint32(e, o), + o += 4, + Qe.readUint32(e, o), + o += 4), + n && (Qe.readUint32(e, o), + o += 4), + s && (g = Qe.readUint32(e, o), + o += 4), + a && (y = Qe.readUint32(e, o), + o += 4), + i && (Qe.readUint32(e, o), + o += 4), + "video" === b.type) { + let t = 0 + , i = 0; + Qe.findBox(d, ["saio"]).map(function(e) { + t = Je.parseSAIO(e) + }), + Qe.findBox(d, ["saiz"]).map(function(e) { + i = Je.parseSAIZ(e) + }), + t && i && (A = Je.parseSubsample(b.defaultPerSampleIVSize, S.subarray(t, t + i))), + C = Je.isHEVCFlavor(b.codec) + } + Qe.findBox(d, ["trun"]).map(function(i) { + var t = i[0] + , e = 16777215 & Qe.readUint32(i, 0) + , r = 0 != (1 & e); + let n = 0; + var s = 0 != (4 & e) + , a = 0 != (256 & e); + let o = 0; + var d = 0 != (512 & e); + let l = 0; + var u = 0 != (1024 & e) + , c = 0 != (2048 & e); + let h = 0; + var p = Qe.readUint32(i, 4); + let f = 8; + r && (n = Qe.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 = Qe.readUint32(i, f), + f += 4) : o = g, + d ? (l = Qe.readUint32(i, f), + f += 4) : l = y, + u && (f += 4), + c && (h = 0 === t ? Qe.readUint32(i, f) : Qe.readSint32(i, f), + f += 4), + "video" === b.type) { + if (ne(T)) + b.samples.push({ + data: S.subarray(m, m + l), + size: l, + 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 < l; ) { + const T = Qe.readUint32(S, m); + m += 4; + const E = 31 & S[m]; + if (b.seiSamples || (b.seiSamples = []), + Je.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} = Je.parseCLCPSample(S, m, l); + if (m += l, + 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 = "", d = 0; + if (0 === e[0]) { + for (; "\0" !== Qe.bin2str(e.subarray(d, d + 1)); ) + a += Qe.bin2str(e.subarray(d, d + 1)), + d += 1; + for (a += Qe.bin2str(e.subarray(d, d + 1)), + d += 1; "\0" !== Qe.bin2str(e.subarray(d, d + 1)); ) + o += Qe.bin2str(e.subarray(d, d + 1)), + d += 1; + o += Qe.bin2str(e.subarray(d, d + 1)), + d += 1, + t = Qe.readUint32(e, 12), + i = Qe.readUint32(e, 16), + n = Qe.readUint32(e, 20), + s = Qe.readUint32(e, 24), + d = 28 + } else { + d += 4, + t = Qe.readUint32(e, d), + d += 4; + const i = Qe.readUint32(e, d); + d += 4; + var l = Qe.readUint32(e, d); + for (d += 4, + r = Math.pow(2, 32) * i + l, + Number.isSafeInteger(r) || (r = Number.MAX_SAFE_INTEGER, + qe().warn(Ye, "Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box")), + n = Qe.readUint32(e, d), + d += 4, + s = Qe.readUint32(e, d), + d += 4; "\0" !== Qe.bin2str(e.subarray(d, d + 1)); ) + a += Qe.bin2str(e.subarray(d, d + 1)), + d += 1; + for (a += Qe.bin2str(e.subarray(d, d + 1)), + d += 1; "\0" !== Qe.bin2str(e.subarray(d, d + 1)); ) + o += Qe.bin2str(e.subarray(d, d + 1)), + d += 1; + o += Qe.bin2str(e.subarray(d, d + 1)), + d += 1 + } + return { + schemeIdUri: a, + value: o, + timeScale: t, + presentationTime: r, + presentationTimeDelta: i, + eventDuration: n, + id: s, + payload: e.subarray(d, 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 + , d = 0; + var l = ne(e.presentationTime) ? e.presentationTime / e.timeScale : t + e.presentationTimeDelta / e.timeScale; + if (ne(l)) { + const c = e.eventDuration + , h = s.subarray(0, 10) + , p = Qe.bin2str(h.subarray(d, d + 3)); + d += 3, + "ID3" !== p && qe().error(Ye, "No ID3 tag found when extracting ID3 payload"), + d += 2; + var t = s.subarray(d, d + 1) + , e = 64 & t[0] + , u = 16 & t[0]; + if (d += 1, + M.readSynchSafeUint32(s.subarray(d, d + 4)), + d += 4, + e) { + const f = M.readSynchSafeUint32(s.subarray(d, d + 4)); + d += 4, + d += f + } + for (; d + 2 < a; ) { + Qe.bin2str(s.subarray(d, d + 4)), + d += 4; + const m = M.readSynchSafeUint32(s.subarray(d, d + 4)); + d += 4; + const r = l + o * c + , a = { + data: s, + pts: r, + dts: r, + keyTagInfo: void 0, + frames: n.frames + }; + i.id3Samples.push(a), + d += m, + o++, + u && ("DI3" !== Qe.bin2str(s.subarray(d, d + 3)) && qe().error(Ye, "End should be DI3 if footer present in extracting ID3 payload"), + d += 3, + d += 7) + } + d + 2 === a && 0 !== Qe.readUint16(s, d) && qe().warn(Ye, "Padding should be 0 when extracting ID3 payload") + } else + qe().error(Ye, "No pts found in emsg info when extracting ID3 payload") + } + append(e, t, i, r, n, s, a) { + let o = this.initData + , d = 0 + , l = 0 + , u = !1 + , c = !1; + void 0 === o && (this.resetInitSegment(e, 0), + o = this.initData); + let h, p = this.initPtsTs; + p || (h = Je.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 && Je.has32BitTfdts(e) && !a && (e = We.remuxOverflowSegment(e, this.logger)), + h = Je.getStartDtsTs(o, e); + const f = Qe.findBox(e, ["emsg"]); + if (o.video && o.video.encrypted && (Qe.findBox(e, ["moof", "traf"]).find(function(e) { + return Boolean(Qe.findBox(e, ["senc"])[0] || Qe.findBox(e, ["saiz"])[0] && Qe.findBox(e, ["saio"])[0]) + }) || this.logger.warn(Ye, `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 = be.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 = me.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) + } + Je.parseSamples(i, e, this._videoTrack, a, !1, 1), + this.mp4Remuxer.remuxIFrame(i, this._videoTrack, this._silentAudioTrack, a, this.remuxedInitDataTrack), + this._videoTrack.samples = [] + } else if (f && 0 < f.length) { + var m = (h.baseTime - this.audioPrimingDelay * h.timescale) / h.timescale + , m = Math.max(0, m); + const r = f.map(e=>{ + e = Je.parseEmsg(e); + return "https://aomedia.org/emsg/ID3\0" !== e.schemeIdUri || this._id3Track || (this._id3Track = { + id3Samples: [], + inputTimescale: 9e4 + }), + e + } + ); + this._id3Track && r.map(e=>{ + Je.extractID3PayloadCreateID3Track(e, t, this._id3Track, this.logger) + } + ), + this.mp4Remuxer.remuxEmsg(!!o.audio, !!o.video, this._id3Track, m, h.timescale, e, this.remuxedInitDataTrack), + this._id3Track && (this._id3Track.id3Samples = []) + } else { + m = (h.baseTime - this.audioPrimingDelay * h.timescale) / h.timescale, + m = Math.max(0, m); + this._videoTrack && (Je.parseSamples(m, e, this._videoTrack, void 0, this.trySEICaptions, -1), + d = this._videoTrack.fragmentDuration / this._videoTrack.timescale, + u = !0, + this._videoTrack.fragmentDuration = 0, + this.trySEICaptions ? (Je.extractSEICaptionsFromNALu(this._videoTrack.seiSamples, this._captionTrack), + this._videoTrack.seiSamples = []) : this._captionTrack && Je.parseSamples(m, e, this._captionTrack, void 0, !1, Number.MAX_SAFE_INTEGER)), + this._audioTrack && (Je.parseSamples(m, e, this._audioTrack, void 0, !1, -1), + l = this._audioTrack.fragmentDuration / this._audioTrack.timescale, + c = !0, + this._audioTrack.fragmentDuration = 0), + this.mp4Remuxer.remuxRawData(l, c, d, u, this._captionTrack, m, h.timescale, e, this.remuxedInitDataTrack) + } + } + static extractSEICaptionsFromNALu(a, o) { + if (a) { + for (let s = 0; s < a.length; ++s) { + var d = a[s] + , l = d.pts; + let t = 0; + t++; + let e = 0 + , i = 0 + , r = !1 + , n = 0; + for (; !r && t < d.data.length; ) { + for (e = 0; !(t >= d.data.length) && (n = d.data[t++], + e += n, + 255 === n); ) + ; + for (i = 0; !(t >= d.data.length) && (n = d.data[t++], + i += n, + 255 === n); ) + ; + const a = d.data.length - t; + if (4 === e && t < d.data.length) { + if (r = !0, + 181 === d.data[t++]) { + const a = Qe.readUint16(d.data, t); + if (t += 2, + 49 === a) { + const a = Qe.readUint32(d.data, t); + if (t += 4, + 1195456820 === a && 3 === d.data[t++]) { + const a = d.data[t++]; + t++; + const u = 31 & a + , c = []; + if (64 & a) + for (let e = 0; e < u; e++) { + const a = d.data[t++]; + if (a === (252 & a)) { + const o = 3 & a; + if (0 == o || 1 == o) { + const a = d.data[t++] + , o = d.data[t++]; + c.push(a), + c.push(o) + } + } else + t += 2 + } + 0 < c.length && o.captionSamples.push({ + type: 3, + pts: l, + bytes: c + }) + } + } + } + } else if (i < a) + t += i; + else if (i > a) + break + } + } + return o + } + } + } + const Ze = { + name: "ExpGolomb" + }; + class et { + 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(Ze, "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) + , d = this.readBits.bind(this) + , l = 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 (d(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 = l(); + 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 = l(); + if (0 === g) + l(); + else if (1 === g) + for (c(1), + h(), + h(), + e = l(), + i = 0; i < e; i++) + h(); + p(), + c(1); + var y = l() + , m = l() + , g = d(1); + 0 === g && c(1), + c(1), + u() && (r = l(), + n = l(), + s = l(), + a = l()); + 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 tt = { + name: "TS Demuxer" + }; + var it, rt = 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, d, l, 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 (d = !!(64 & e[o + 1]), + l = ((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 (l) { + case y: + d && (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 (d && !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: + d && (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: + d && (u += e[u] + 1), + b = this._pmtId = this._parsePAT(e, u); + break; + case b: + d && (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(tt, "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(tt, "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(tt, "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(tt, "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(tt, "HEVC stream type found, not supported for now"); + break; + default: + this.logger.warn(tt, "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 d = e.data + , l = e.keyTagInfo; + let u = NaN + , c = NaN; + if (e && 0 !== e.size) { + for (; d[0].length < 19 && 1 < d.length; ) { + const e = new Uint8Array(d[0].length + d[1].length); + e.set(d[0]), + e.set(d[1], d[0].length), + d[0] = e, + d.splice(1, 1) + } + if (i = d[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(tt, `${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 = d.length; t < e; t++) { + i = d[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: l + } + } + } + } + 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 d = this._avcContext + , t = this._parseAVCNALu(o.data); + let l, u, c, h = d.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 et(o,this.logger).readSliceType(); + 2 !== n && 4 !== n && 7 !== n && 9 !== n || (h.key = !0) + } + } + break; + case 5: + u = !0, + h && (h = h || (d.avcSample = this._createAVCSample(!0, o.pts, o.dts, "")), + h.key = !0, + h.frame = !0); + break; + case 6: + u = !0, + l = new et(this.discardEPB(n.data),this.logger), + l.readUByte(); + let e = 0 + , t = 0 + , i = !1 + , r = 0; + for (; !i && 1 < l.bytesAvailable; ) { + for (e = 0; r = l.readUByte(), + e += r, + 255 === r; ) + ; + for (t = 0; r = l.readUByte(), + t += r, + 255 === r; ) + ; + if (4 === e && 0 !== l.bytesAvailable) { + if (i = !0, + 181 === l.readUByte() && 49 === l.readUShort() && 1195456820 === l.readUInt() && 3 === l.readUByte()) { + const n = l.readUByte() + , d = 31 & n + , s = [n, l.readUByte()]; + for (c = 0; c < d; c++) + s.push(l.readUByte()), + s.push(l.readUByte()), + s.push(l.readUByte()); + this._insertSampleInOrder(this._txtTrack.captionSamples, { + type: 3, + pts: o.pts, + bytes: s + }) + } + } else if (t < l.bytesAvailable) + for (c = 0; c < t; c++) + l.readUByte() + } + break; + case 7: + if (u = !0, + !d.config.sps) { + l = new et(n.data,this.logger); + const o = l.readSPS(); + d.config.width = o.width, + d.config.height = o.height, + d.config.pixelRatio = o.pixelRatio, + d.config.sps = [n.data], + d.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 + } + d.config.codec = t + } + break; + case 8: + u = !0, + d.config.pps || (d.config.pps = [n.data]); + break; + case 9: + u = !1, + h && this.pushAccesUnit(d, p), + h = d.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(d, p), + d.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 + , d = []; + let l, 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) + l = { + data: e.subarray(h, n - a - 1), + type: c + }, + d.push(l); + 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 + } + } + 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 && (l = { + data: e.subarray(h, t), + type: c, + state: a + }, + d.push(l)), + 0 === d.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, + d + } + 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, d, l, 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, + l = c.length; a < l - 1 && (255 !== c[a] || 240 != (240 & c[a + 1])); a++) + ; + if (a) { + let e, t, i; + i = a < l - 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(tt, `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 < l && (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 <= l); ) + for (d = h + s * f, + u = { + unit: c.subarray(a + o, a + o + n), + pts: d, + dts: d, + keyTagInfo: r + }, + t.parsingData.esSamples.push(u), + t.parsingData.len += n, + a += n + o, + s++; a < l - 1 && (255 !== c[a] || 240 != (240 & c[a + 1])); a++) + ; + p = a < l ? c.subarray(a, l) : void 0, + t.audioOverFlow = p, + t.audioLastPTS = d + } + _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 = q(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 d = 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 l = i.length; + if (o && e) { + const c = e + d; + 1 < Math.abs(c - r) && (r = c) + } + let u = 0; + for (; a + u <= l; ) { + 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 * d; + 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 < l ? i.subarray(a, l) : void 0, + t.audioOverFlow = o + } + } + ; + class nt 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, d, l, 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: Je, + remux: We + }, { + demux: rt, + remux: Te + }, { + demux: J, + remux: Te + }, { + demux: z, + remux: Te + }, { + demux: K, + remux: Te + }, { + demux: ie, + remux: Te + }]; + 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), d, i, s), + f.resetInitSegment()), + s) { + const t = u ? S(u) : void 0; + e.resetTimeStamp(t), + f.resetTimeStamp(t) + } + e.append(p, n, o, l, i, c, h) + } + } + } + function st() { + let e = `${Date.now()}-${Math.random()}`; + return "undefined" != typeof performance && "function" == typeof performance.now && (e += `-${performance.now()}`), + e + } + class at { + constructor(e, t) { + this.rpc = e, + this.logger = t, + this.init = (t,n,s)=>e=>{ + const i = st() + , r = this.demuxers[i] = new nt(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,d,l,u,c,h,p,f)=>e=>{ + const t = this.demuxers[i]; + t ? (t.push(r, n, s, a, o, d, l, 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 ot { + 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 === it.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 === it.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=ot._fallbackCallback)=>{ + var t = st(); + this.deferers[t] = e; + t = { + type: it.Invoke, + id: t, + command: i, + args: r + }; + this._send(t, n) + } + } + teardown() { + this.worker.removeEventListener("message", this._messageHandler) + } + _respond(e, t, i, r, n) { + r instanceof Error && (r = `[${r.name}] ${r.message}\n${r.stack}`); + r = { + type: it.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)) + } + } + ot._fallbackCallback = (e,t)=>{ + if (null != t) + throw t + } + , + (gr = it = it || {})[gr.Invoke = 0] = "Invoke", + gr[gr.Result = 1] = "Result", + ArrayBuffer.isView || (ArrayBuffer.isView = function(e) { + return null !== e && "object" == typeof e && e.buffer instanceof ArrayBuffer + } + ), + void 0 !== Hy && Hy && (Br = new ot(d), + mu = (r=>{ + const t = (i=[])=>{ + const e = Object.fromEntries(["fatal", "error", "warn", "info", "debug", "trace", "qe"].map(e=>{ + return [e, (t = e, + (...e)=>{ + r.invoke("logger.log", [i, t, ...e])((e,t)=>{ + if (null != t) + throw t + } + ) + } + )]; + var t + } + )); + return e.child = e=>t([...i, e]), + e + } + ; + return t() + } + )(Br), + new i(Br,mu), + new at(Br,mu)); + 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 lt(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 ut = function() { + return (ut = 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 ct(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 ht(e, t) { + if ("object" == typeof Reflect && "function" == typeof Reflect.metadata) + return Reflect.metadata(e, t) + } + function pt(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 ft(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 mt() { + for (var e = [], t = 0; t < arguments.length; t++) + e = e.concat(ft(arguments[t])); + return e + } + function gt(e) { + return "function" == typeof e + } + var yt = !1 + , vt = { + Promise: void 0, + set useDeprecatedSynchronousErrorHandling(e) { + yt = e + }, + get useDeprecatedSynchronousErrorHandling() { + return yt + } + }; + function St(e) { + setTimeout(function() { + throw e + }, 0) + } + var bt = { + closed: !0, + next: function(e) {}, + error: function(e) { + if (vt.useDeprecatedSynchronousErrorHandling) + throw e; + St(e) + }, + complete: function() {} + } + , Tt = Array.isArray || function(e) { + return e && "number" == typeof e.length + } + ; + function Et(e) { + return null !== e && "object" == typeof e + } + var It = (Ot.prototype = Object.create(Error.prototype), + Ot) + , wt = (At.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 At) + e.remove(this); + else if (null !== e) + for (var s = 0; s < e.length; ++s) + e[s].remove(this); + if (gt(r)) { + i && (this._unsubscribe = void 0); + try { + r.call(this) + } catch (e) { + t = e instanceof It ? kt(e.errors) : [e] + } + } + if (Tt(n)) + for (var s = -1, a = n.length; ++s < a; ) { + var o = n[s]; + if (Et(o)) + try { + o.unsubscribe() + } catch (e) { + t = t || [], + e instanceof It ? t = t.concat(kt(e.errors)) : t.push(e) + } + } + if (t) + throw new It(t) + } + } + , + At.prototype.add = function(e) { + var t, i = e; + if (!e) + return At.EMPTY; + switch (typeof e) { + case "function": + i = new At(e); + case "object": + if (i === this || i.closed || "function" != typeof i.unsubscribe) + return i; + if (this.closed) + return i.unsubscribe(), + i; + i instanceof At || (t = i, + (i = new At)._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 At) { + 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 + } + , + At.prototype.remove = function(e) { + var t = this._subscriptions; + !t || -1 !== (e = t.indexOf(e)) && t.splice(e, 1) + } + , + At.EMPTY = ((dd = new At).closed = !0, + dd), + At); + function At(e) { + this.closed = !1, + this._parentOrParents = null, + this._subscriptions = null, + e && (this._ctorUnsubscribe = !0, + this._unsubscribe = e) + } + function Ot(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 kt(e) { + return e.reduce(function(e, t) { + return e.concat(t instanceof It ? t.errors : t) + }, []) + } + var Ct, Dt, Mt = "function" == typeof Symbol ? Symbol("rxSubscriber") : "@@rxSubscriber_" + Math.random(), Pt = (lt(Lt, Dt = wt), + Lt.prototype[Mt] = function() { + return this + } + , + Lt.create = function(e, t, i) { + i = new Lt(e,t,i); + return i.syncErrorThrowable = !1, + i + } + , + Lt.prototype.next = function(e) { + this.isStopped || this._next(e) + } + , + Lt.prototype.error = function(e) { + this.isStopped || (this.isStopped = !0, + this._error(e)) + } + , + Lt.prototype.complete = function() { + this.isStopped || (this.isStopped = !0, + this._complete()) + } + , + Lt.prototype.unsubscribe = function() { + this.closed || (this.isStopped = !0, + Dt.prototype.unsubscribe.call(this)) + } + , + Lt.prototype._next = function(e) { + this.destination.next(e) + } + , + Lt.prototype._error = function(e) { + this.destination.error(e), + this.unsubscribe() + } + , + Lt.prototype._complete = function() { + this.destination.complete(), + this.unsubscribe() + } + , + Lt.prototype._unsubscribeAndRecycle = function() { + var e = this._parentOrParents; + return this._parentOrParents = null, + this.unsubscribe(), + this.closed = !1, + this.isStopped = !1, + this._parentOrParents = e, + this + } + , + Lt), xt = (lt(Rt, Ct = Pt), + Rt.prototype.next = function(e) { + var t; + !this.isStopped && this._next && (t = this._parentSubscriber, + vt.useDeprecatedSynchronousErrorHandling && t.syncErrorThrowable ? this.__tryOrSetError(t, this._next, e) && this.unsubscribe() : this.__tryOrUnsub(this._next, e)) + } + , + Rt.prototype.error = function(e) { + if (!this.isStopped) { + var t = this._parentSubscriber + , i = vt.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) : St(e), + this.unsubscribe(); + else { + if (this.unsubscribe(), + i) + throw e; + St(e) + } + } + } + , + Rt.prototype.complete = function() { + var e, t, i = this; + this.isStopped || (e = this._parentSubscriber, + this._complete && (t = function() { + return i._complete.call(i._context) + } + , + vt.useDeprecatedSynchronousErrorHandling && e.syncErrorThrowable ? this.__tryOrSetError(e, t) : this.__tryOrUnsub(t)), + this.unsubscribe()) + } + , + Rt.prototype.__tryOrUnsub = function(e, t) { + try { + e.call(this._context, t) + } catch (e) { + if (this.unsubscribe(), + vt.useDeprecatedSynchronousErrorHandling) + throw e; + St(e) + } + } + , + Rt.prototype.__tryOrSetError = function(e, t, i) { + if (!vt.useDeprecatedSynchronousErrorHandling) + throw new Error("bad call"); + try { + t.call(this._context, i) + } catch (t) { + return vt.useDeprecatedSynchronousErrorHandling ? (e.syncErrorValue = t, + e.syncErrorThrown = !0) : St(t), + !0 + } + return !1 + } + , + Rt.prototype._unsubscribe = function() { + var e = this._parentSubscriber; + this._context = null, + this._parentSubscriber = null, + e.unsubscribe() + } + , + Rt); + function Rt(e, t, i, r) { + var n, s = Ct.call(this) || this; + s._parentSubscriber = e; + e = s; + return gt(t) ? n = t : t && (n = t.next, + i = t.error, + r = t.complete, + t !== bt && (gt((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 Lt(e, t, i) { + var r = Dt.call(this) || this; + switch (r.syncErrorValue = null, + r.syncErrorThrown = !1, + r.syncErrorThrowable = !1, + r.isStopped = !1, + arguments.length) { + case 0: + r.destination = bt; + break; + case 1: + if (!e) { + r.destination = bt; + break + } + if ("object" == typeof e) { + e instanceof Lt ? (r.syncErrorThrowable = e.syncErrorThrowable, + (r.destination = e).add(r)) : (r.syncErrorThrowable = !0, + r.destination = new xt(r,e)); + break + } + default: + r.syncErrorThrowable = !0, + r.destination = new xt(r,e,t,i) + } + return r + } + var _t = "function" == typeof Symbol && Symbol.observable || "@@observable"; + function Nt(e) { + return e + } + function Ft() { + for (var e = [], t = 0; t < arguments.length; t++) + e[t] = arguments[t]; + return Bt(e) + } + function Bt(t) { + return 0 === t.length ? Nt : 1 === t.length ? t[0] : function(e) { + return t.reduce(function(e, t) { + return t(e) + }, e) + } + } + var Ut = ($t.prototype.lift = function(e) { + var t = new $t; + return t.source = this, + t.operator = e, + t + } + , + $t.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[Mt]) + return e[Mt]() + } + return e || t || i ? new Pt(e,t,i) : new Pt(bt) + }(e, t, i); + if (r ? i.add(r.call(i, this.source)) : i.add(this.source || vt.useDeprecatedSynchronousErrorHandling && !i.syncErrorThrowable ? this._subscribe(i) : this._trySubscribe(i)), + vt.useDeprecatedSynchronousErrorHandling && i.syncErrorThrowable && (i.syncErrorThrowable = !1, + i.syncErrorThrown)) + throw i.syncErrorValue; + return i + } + , + $t.prototype._trySubscribe = function(t) { + try { + return this._subscribe(t) + } catch (e) { + vt.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) + } + } + , + $t.prototype.forEach = function(r, e) { + var n = this; + return new (e = Vt(e))(function(e, t) { + var i = n.subscribe(function(e) { + try { + r(e) + } catch (e) { + t(e), + i && i.unsubscribe() + } + }, t, e) + } + ) + } + , + $t.prototype._subscribe = function(e) { + var t = this.source; + return t && t.subscribe(e) + } + , + $t.prototype[_t] = function() { + return this + } + , + $t.prototype.pipe = function() { + for (var e = [], t = 0; t < arguments.length; t++) + e[t] = arguments[t]; + return 0 === e.length ? this : Bt(e)(this) + } + , + $t.prototype.toPromise = function(e) { + var r = this; + return new (e = Vt(e))(function(e, t) { + var i; + r.subscribe(function(e) { + return i = e + }, function(e) { + return t(e) + }, function() { + return e(i) + }) + } + ) + } + , + $t.create = function(e) { + return new $t(e) + } + , + $t); + function $t(e) { + this._isScalar = !1, + e && (this._subscribe = e) + } + function Vt(e) { + if (!(e = e || (vt.Promise || Promise))) + throw new Error("no Promise impl found"); + return e + } + var Kt, Ht, jt, qt, Qt = (ti.prototype = Object.create(Error.prototype), + ti), Gt = (lt(ei, qt = wt), + ei.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)) + } + , + ei), Wt = (lt(Zt, jt = Pt), + Zt), zt = (lt(Jt, Ht = Ut), + Jt.prototype[Mt] = function() { + return new Wt(this) + } + , + Jt.prototype.lift = function(e) { + var t = new Xt(this,this); + return t.operator = e, + t + } + , + Jt.prototype.next = function(e) { + if (this.closed) + throw new Qt; + if (!this.isStopped) + for (var t = this.observers, i = t.length, r = t.slice(), n = 0; n < i; n++) + r[n].next(e) + } + , + Jt.prototype.error = function(e) { + if (this.closed) + throw new Qt; + 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 + } + , + Jt.prototype.complete = function() { + if (this.closed) + throw new Qt; + 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 + } + , + Jt.prototype.unsubscribe = function() { + this.isStopped = !0, + this.closed = !0, + this.observers = null + } + , + Jt.prototype._trySubscribe = function(e) { + if (this.closed) + throw new Qt; + return Ht.prototype._trySubscribe.call(this, e) + } + , + Jt.prototype._subscribe = function(e) { + if (this.closed) + throw new Qt; + return this.hasError ? (e.error(this.thrownError), + wt.EMPTY) : this.isStopped ? (e.complete(), + wt.EMPTY) : (this.observers.push(e), + new Gt(this,e)) + } + , + Jt.prototype.asObservable = function() { + var e = new Ut; + return e.source = this, + e + } + , + Jt.create = function(e, t) { + return new Xt(e,t) + } + , + Jt), Xt = (lt(Yt, Kt = zt), + Yt.prototype.next = function(e) { + var t = this.destination; + t && t.next && t.next(e) + } + , + Yt.prototype.error = function(e) { + var t = this.destination; + t && t.error && this.destination.error(e) + } + , + Yt.prototype.complete = function() { + var e = this.destination; + e && e.complete && this.destination.complete() + } + , + Yt.prototype._subscribe = function(e) { + return this.source ? this.source.subscribe(e) : wt.EMPTY + } + , + Yt); + function Yt(e, t) { + var i = Kt.call(this) || this; + return i.destination = e, + i.source = t, + i + } + function Jt() { + var e = Ht.call(this) || this; + return e.observers = [], + e.closed = !1, + e.isStopped = !1, + e.hasError = !1, + e.thrownError = null, + e + } + function Zt(e) { + var t = jt.call(this, e) || this; + return t.destination = e, + t + } + function ei(e, t) { + var i = qt.call(this) || this; + return i.subject = e, + i.subscriber = t, + i.closed = !1, + i + } + function ti() { + return Error.call(this), + this.message = "object unsubscribed", + this.name = "ObjectUnsubscribedError", + this + } + function ii() { + return function(e) { + return e.lift(new hi(e)) + } + } + var ri, ni, si, ai, oi, di, li, ui, ci, hi = (xi.prototype.call = function(e, t) { + var i = this.connectable; + i._refCount++; + e = new pi(e,i), + t = t.subscribe(e); + return e.closed || (e.connection = i.connect()), + t + } + , + xi), pi = (lt(Pi, ci = Pt), + Pi.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 + } + , + Pi), w = (lt(Mi, ui = Ut), + Mi.prototype._subscribe = function(e) { + return this.getSubject().subscribe(e) + } + , + Mi.prototype.getSubject = function() { + var e = this._subject; + return e && !e.isStopped || (this._subject = this.subjectFactory()), + this._subject + } + , + Mi.prototype.connect = function() { + var e = this._connection; + return e || (this._isComplete = !1, + (e = this._connection = new wt).add(this.source.subscribe(new mi(this.getSubject(),this))), + e.closed && (this._connection = null, + e = wt.EMPTY)), + e + } + , + Mi.prototype.refCount = function() { + return ii()(this) + } + , + Mi), fi = { + operator: { + value: null + }, + _refCount: { + value: 0, + writable: !0 + }, + _subject: { + value: null, + writable: !0 + }, + _connection: { + value: null, + writable: !0 + }, + _subscribe: { + value: (pd = w.prototype)._subscribe + }, + _isComplete: { + value: pd._isComplete, + writable: !0 + }, + getSubject: { + value: pd.getSubject + }, + connect: { + value: pd.connect + }, + refCount: { + value: pd.refCount + } + }, mi = (lt(Di, li = Wt), + Di.prototype._error = function(e) { + this._unsubscribe(), + li.prototype._error.call(this, e) + } + , + Di.prototype._complete = function() { + this.connectable._isComplete = !0, + this._unsubscribe(), + li.prototype._complete.call(this) + } + , + Di.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()) + } + , + Di), gi = (lt(Ci, di = zt), + Object.defineProperty(Ci.prototype, "value", { + get: function() { + return this.getValue() + }, + enumerable: !0, + configurable: !0 + }), + Ci.prototype._subscribe = function(e) { + var t = di.prototype._subscribe.call(this, e); + return t && !t.closed && e.next(this._value), + t + } + , + Ci.prototype.getValue = function() { + if (this.hasError) + throw this.thrownError; + if (this.closed) + throw new Qt; + return this._value + } + , + Ci.prototype.next = function(e) { + di.prototype.next.call(this, this._value = e) + } + , + Ci), A = (lt(ki, oi = wt), + ki.prototype.schedule = function(e, t) { + return this + } + , + lt(Oi, ai = ki), + Oi.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 + } + , + Oi.prototype.requestAsyncId = function(e, t, i) { + return void 0 === i && (i = 0), + setInterval(e.flush.bind(e, this), i) + } + , + Oi.prototype.recycleAsyncId = function(e, t, i) { + if (null !== (i = void 0 === i ? 0 : i) && this.delay === i && !1 === this.pending) + return t; + clearInterval(t) + } + , + Oi.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)) + } + , + Oi.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 + } + , + Oi.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 + } + , + Oi), yi = (lt(Ai, si = A), + Ai.prototype.schedule = function(e, t) { + return 0 < (t = void 0 === t ? 0 : t) ? si.prototype.schedule.call(this, e, t) : (this.delay = t, + this.state = e, + this.scheduler.flush(this), + this) + } + , + Ai.prototype.execute = function(e, t) { + return 0 < t || this.closed ? si.prototype.execute.call(this, e, t) : this._execute(e, t) + } + , + Ai.prototype.requestAsyncId = function(e, t, i) { + return null !== (i = void 0 === i ? 0 : i) && 0 < i || null === i && 0 < this.delay ? si.prototype.requestAsyncId.call(this, e, t, i) : e.flush(this) + } + , + Ai), vi = (wi.prototype.schedule = function(e, t, i) { + return void 0 === t && (t = 0), + new this.SchedulerAction(this,e).schedule(i, t) + } + , + wi.now = function() { + return Date.now() + } + , + wi), Si = (lt(Ii, ni = vi), + Ii.prototype.schedule = function(e, t, i) { + return void 0 === t && (t = 0), + Ii.delegate && Ii.delegate !== this ? Ii.delegate.schedule(e, t, i) : ni.prototype.schedule.call(this, e, t, i) + } + , + Ii.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 + } + } + } + , + Ii), bi = (lt(Ei, ri = Si), + new Ei(yi)), Ti = new Ut(function(e) { + return e.complete() + } + ); + function Ei() { + return null !== ri && ri.apply(this, arguments) || this + } + function Ii(e, t) { + void 0 === t && (t = vi.now); + var i = ni.call(this, e, function() { + return Ii.delegate && Ii.delegate !== i ? Ii.delegate.now() : t() + }) || this; + return i.actions = [], + i.active = !1, + i.scheduled = void 0, + i + } + function wi(e, t) { + void 0 === t && (t = wi.now), + this.SchedulerAction = e, + this.now = t + } + function Ai(e, t) { + var i = si.call(this, e, t) || this; + return i.scheduler = e, + i.work = t, + i + } + function Oi(e, t) { + var i = ai.call(this, e, t) || this; + return i.scheduler = e, + i.work = t, + i.pending = !1, + i + } + function ki(e, t) { + return oi.call(this) || this + } + function Ci(e) { + var t = di.call(this) || this; + return t._value = e, + t + } + function Di(e, t) { + e = li.call(this, e) || this; + return e.connectable = t, + e + } + function Mi(e, t) { + var i = ui.call(this) || this; + return i.source = e, + i.subjectFactory = t, + i._refCount = 0, + i._isComplete = !1, + i + } + function Pi(e, t) { + e = ci.call(this, e) || this; + return e.connectable = t, + e + } + function xi(e) { + this.connectable = e + } + function Ri(e) { + return e ? (t = e, + new Ut(function(e) { + return t.schedule(function() { + return e.complete() + }) + } + )) : Ti; + var t + } + function Li(e) { + return e && "function" == typeof e.schedule + } + var _i = function(r) { + return function(e) { + for (var t = 0, i = r.length; t < i && !e.closed; t++) + e.next(r[t]); + e.complete() + } + }; + function Ni(r, n) { + return new Ut(function(e) { + var t = new wt + , 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 Fi(e, t) { + return t ? Ni(e, t) : new Ut(_i(e)) + } + function Bi() { + for (var e = [], t = 0; t < arguments.length; t++) + e[t] = arguments[t]; + var i = e[e.length - 1]; + return Li(i) ? (e.pop(), + Ni(e, i)) : Fi(e) + } + function Ui(t, i) { + return new Ut(i ? function(e) { + return i.schedule($i, 0, { + error: t, + subscriber: e + }) + } + : function(e) { + return e.error(t) + } + ) + } + function $i(e) { + var t = e.error; + e.subscriber.error(t) + } + var Vi = (Ki.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() + } + } + , + Ki.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() + } + } + , + Ki.prototype.accept = function(e, t, i) { + return e && "function" == typeof e.next ? this.observe(e) : this.do(e, t, i) + } + , + Ki.prototype.toObservable = function() { + switch (this.kind) { + case "N": + return Bi(this.value); + case "E": + return Ui(this.error); + case "C": + return Ri() + } + throw new Error("unexpected notification kind value") + } + , + Ki.createNext = function(e) { + return void 0 !== e ? new Ki("N",e) : Ki.undefinedValueNotification + } + , + Ki.createError = function(e) { + return new Ki("E",void 0,e) + } + , + Ki.createComplete = function() { + return Ki.completeNotification + } + , + Ki.completeNotification = new Ki("C"), + Ki.undefinedValueNotification = new Ki("N",void 0), + Ki); + function Ki(e, t, i) { + this.kind = e, + this.value = t, + this.error = i, + this.hasValue = "N" === e + } + function Hi(t, i) { + return void 0 === i && (i = 0), + function(e) { + return e.lift(new Gi(t,i)) + } + } + var ji, qi, Qi, Gi = (nr.prototype.call = function(e, t) { + return t.subscribe(new Wi(e,this.scheduler,this.delay)) + } + , + nr), Wi = (lt(rr, Qi = Pt), + rr.dispatch = function(e) { + var t = e.notification + , e = e.destination; + t.observe(e), + this.unsubscribe() + } + , + rr.prototype.scheduleMessage = function(e) { + this.destination.add(this.scheduler.schedule(rr.dispatch, this.delay, new zi(e,this.destination))) + } + , + rr.prototype._next = function(e) { + this.scheduleMessage(Vi.createNext(e)) + } + , + rr.prototype._error = function(e) { + this.scheduleMessage(Vi.createError(e)), + this.unsubscribe() + } + , + rr.prototype._complete = function() { + this.scheduleMessage(Vi.createComplete()), + this.unsubscribe() + } + , + rr), zi = function(e, t) { + this.notification = e, + this.destination = t + }, Xi = (lt(ir, qi = zt), + ir.prototype.nextInfiniteTimeWindow = function(e) { + var t; + this.isStopped || ((t = this._events).push(e), + t.length > this._bufferSize && t.shift()), + qi.prototype.next.call(this, e) + } + , + ir.prototype.nextTimeWindow = function(e) { + this.isStopped || (this._events.push(new Yi(this._getNow(),e)), + this._trimBufferThenGetEvents()), + qi.prototype.next.call(this, e) + } + , + ir.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 Qt; + if (t = this.isStopped || this.hasError ? wt.EMPTY : (this.observers.push(e), + new Gt(this,e)), + n && e.add(e = new Wi(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 + } + , + ir.prototype._getNow = function() { + return (this.scheduler || bi).now() + } + , + ir.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 + } + , + ir), Yi = function(e, t) { + this.time = e, + this.value = t + }, Ji = (lt(tr, ji = zt), + tr.prototype._subscribe = function(e) { + return this.hasError ? (e.error(this.thrownError), + wt.EMPTY) : this.hasCompleted && this.hasNext ? (e.next(this.value), + e.complete(), + wt.EMPTY) : ji.prototype._subscribe.call(this, e) + } + , + tr.prototype.next = function(e) { + this.hasCompleted || (this.value = e, + this.hasNext = !0) + } + , + tr.prototype.error = function(e) { + this.hasCompleted || ji.prototype.error.call(this, e) + } + , + tr.prototype.complete = function() { + this.hasCompleted = !0, + this.hasNext && ji.prototype.next.call(this, this.value), + ji.prototype.complete.call(this) + } + , + tr), Zi = new Si(A), er = Zi; + function tr() { + var e = null !== ji && ji.apply(this, arguments) || this; + return e.value = null, + e.hasNext = !1, + e.hasCompleted = !1, + e + } + function ir(e, t, i) { + void 0 === e && (e = Number.POSITIVE_INFINITY), + void 0 === t && (t = Number.POSITIVE_INFINITY); + var r = qi.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 rr(e, t, i) { + void 0 === i && (i = 0); + e = Qi.call(this, e) || this; + return e.scheduler = t, + e.delay = i, + e + } + function nr(e, t) { + void 0 === t && (t = 0), + this.scheduler = e, + this.delay = t + } + function sr() {} + var ar = (lr.prototype = Object.create(Error.prototype), + lr) + , or = (dr.prototype = Object.create(Error.prototype), + dr); + function dr() { + return Error.call(this), + this.message = "Timeout has occurred", + this.name = "TimeoutError", + this + } + function lr() { + return Error.call(this), + this.message = "argument out of range", + this.name = "ArgumentOutOfRangeError", + this + } + function ur(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 fr(t,i)) + } + } + var cr, hr, pr, fr = (Tr.prototype.call = function(e, t) { + return t.subscribe(new mr(e,this.project,this.thisArg)) + } + , + Tr), mr = (lt(br, pr = Pt), + br.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) + } + , + br), gr = (lt(Sr, hr = Pt), + Sr.prototype.notifyNext = function(e, t, i, r, n) { + this.destination.next(t) + } + , + Sr.prototype.notifyError = function(e, t) { + this.destination.error(e) + } + , + Sr.prototype.notifyComplete = function(e) { + this.destination.complete() + } + , + Sr), yr = (lt(vr, cr = Pt), + vr.prototype._next = function(e) { + this.parent.notifyNext(this.outerValue, e, this.outerIndex, this.index++, this) + } + , + vr.prototype._error = function(e) { + this.parent.notifyError(e, this), + this.unsubscribe() + } + , + vr.prototype._complete = function() { + this.parent.notifyComplete(this), + this.unsubscribe() + } + , + vr); + function vr(e, t, i) { + var r = cr.call(this) || this; + return r.parent = e, + r.outerValue = t, + r.outerIndex = i, + r.index = 0, + r + } + function Sr() { + return null !== hr && hr.apply(this, arguments) || this + } + function br(e, t, i) { + e = pr.call(this, e) || this; + return e.project = t, + e.count = 0, + e.thisArg = i || e, + e + } + function Tr(e, t) { + this.project = e, + this.thisArg = t + } + var Er = "function" == typeof Symbol && Symbol.iterator ? Symbol.iterator : "@@iterator" + , Ir = function(e) { + return e && "number" == typeof e.length && "function" != typeof e + }; + function wr(e) { + return e && "function" != typeof e.subscribe && "function" == typeof e.then + } + var Ar = function(e) { + if (e && "function" == typeof e[_t]) + return n = e, + function(e) { + var t = n[_t](); + if ("function" != typeof t.subscribe) + throw new TypeError("Provided object does not correctly implement Symbol.observable"); + return t.subscribe(e) + } + ; + if (Ir(e)) + return _i(e); + if (wr(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, St), + t + } + ; + if (e && "function" == typeof e[Er]) + return r = e, + function(t) { + for (var e = r[Er](); ; ) { + 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 = Et(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 Or(e, t, i, r, n) { + if (!(n = void 0 === n ? new yr(e,i,r) : n).closed) + return t instanceof Ut ? t.subscribe(n) : Ar(t)(n) + } + var kr = {}; + function Cr() { + for (var e = [], t = 0; t < arguments.length; t++) + e[t] = arguments[t]; + var i = void 0 + , r = void 0; + return Li(e[e.length - 1]) && (r = e.pop()), + "function" == typeof e[e.length - 1] && (i = e.pop()), + Fi(e = 1 === e.length && Tt(e[0]) ? e[0] : e, r).lift(new Mr(i)) + } + var Dr, Mr = (Rr.prototype.call = function(e, t) { + return t.subscribe(new Pr(e,this.resultSelector)) + } + , + Rr), Pr = (lt(xr, Dr = gr), + xr.prototype._next = function(e) { + this.values.push(kr), + this.observables.push(e) + } + , + xr.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(Or(this, r, void 0, i)) + } + } + } + , + xr.prototype.notifyComplete = function(e) { + 0 == --this.active && this.destination.complete() + } + , + xr.prototype.notifyNext = function(e, t, i) { + var r = this.values + , n = r[i] + , n = this.toRespond ? n === kr ? --this.toRespond : this.toRespond : 0; + r[i] = t, + 0 === n && (this.resultSelector ? this._tryResultSelector(r) : this.destination.next(r.slice())) + } + , + xr.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) + } + , + xr); + function xr(e, t) { + e = Dr.call(this, e) || this; + return e.resultSelector = t, + e.active = 0, + e.values = [], + e.observables = [], + e + } + function Rr(e) { + this.resultSelector = e + } + function Lr(e, t) { + return t ? function(e, t) { + if (null != e) { + if (e && "function" == typeof e[_t]) + return s = e, + a = t, + new Ut(function(t) { + var i = new wt; + return i.add(a.schedule(function() { + var e = s[_t](); + 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 (wr(e)) + return r = e, + n = t, + new Ut(function(t) { + var i = new wt; + 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 (Ir(e)) + return Ni(e, t); + if (e && "function" == typeof e[Er] || "string" == typeof e) + return function(t, i) { + if (!t) + throw new Error("Iterable cannot be null"); + return new Ut(function(r) { + var n, e = new wt; + return e.add(function() { + n && "function" == typeof n.return && n.return() + }), + e.add(i.schedule(function() { + n = t[Er](), + 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") + }(e, t) : e instanceof Ut ? e : new Ut(Ar(e)) + } + var _r, Nr, Fr = (lt($r, Nr = Pt), + $r.prototype._next = function(e) { + this.parent.notifyNext(e) + } + , + $r.prototype._error = function(e) { + this.parent.notifyError(e), + this.unsubscribe() + } + , + $r.prototype._complete = function() { + this.parent.notifyComplete(), + this.unsubscribe() + } + , + $r), Br = (lt(Ur, _r = Pt), + Ur.prototype.notifyNext = function(e) { + this.destination.next(e) + } + , + Ur.prototype.notifyError = function(e) { + this.destination.error(e) + } + , + Ur.prototype.notifyComplete = function() { + this.destination.complete() + } + , + Ur); + function Ur() { + return null !== _r && _r.apply(this, arguments) || this + } + function $r(e) { + var t = Nr.call(this) || this; + return t.parent = e, + t + } + function Vr(e, t) { + if (!t.closed) + return e instanceof Ut ? e.subscribe(t) : Ar(e)(t) + } + function Kr(t, n, i) { + return void 0 === i && (i = Number.POSITIVE_INFINITY), + "function" == typeof n ? function(e) { + return e.pipe(Kr(function(i, r) { + return Lr(t(i, r)).pipe(ur(function(e, t) { + return n(i, e, r, t) + })) + }, i)) + } + : ("number" == typeof n && (i = n), + function(e) { + return e.lift(new jr(t,i)) + } + ) + } + var Hr, jr = (Gr.prototype.call = function(e, t) { + return t.subscribe(new qr(e,this.project,this.concurrent)) + } + , + Gr), qr = (lt(Qr, Hr = Br), + Qr.prototype._next = function(e) { + this.active < this.concurrent ? this._tryNext(e) : this.buffer.push(e) + } + , + Qr.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) + } + , + Qr.prototype._innerSub = function(e) { + var t = new Fr(this) + , i = this.destination; + i.add(t); + e = Vr(e, t); + e !== t && i.add(e) + } + , + Qr.prototype._complete = function() { + this.hasCompleted = !0, + 0 === this.active && 0 === this.buffer.length && this.destination.complete(), + this.unsubscribe() + } + , + Qr.prototype.notifyNext = function(e) { + this.destination.next(e) + } + , + Qr.prototype.notifyComplete = function() { + var e = this.buffer; + this.active--, + 0 < e.length ? this._next(e.shift()) : 0 === this.active && this.hasCompleted && this.destination.complete() + } + , + Qr); + function Qr(e, t, i) { + void 0 === i && (i = Number.POSITIVE_INFINITY); + e = Hr.call(this, e) || this; + return e.project = t, + e.concurrent = i, + e.hasCompleted = !1, + e.buffer = [], + e.active = 0, + e.index = 0, + e + } + function Gr(e, t) { + void 0 === t && (t = Number.POSITIVE_INFINITY), + this.project = e, + this.concurrent = t + } + function Wr(e) { + return Kr(Nt, e = void 0 === e ? Number.POSITIVE_INFINITY : e) + } + function zr() { + return Wr(1) + } + function Xr() { + for (var e = [], t = 0; t < arguments.length; t++) + e[t] = arguments[t]; + return zr()(Bi.apply(void 0, e)) + } + function Yr(i) { + return new Ut(function(t) { + var e; + try { + e = i() + } catch (e) { + return void t.error(e) + } + return (e ? Lr(e) : Ri()).subscribe(t) + } + ) + } + function Jr() { + for (var e = [], t = 0; t < arguments.length; t++) + e[t] = arguments[t]; + if (1 === e.length) { + var i = e[0]; + if (Tt(i)) + return Zr(i, null); + if (Et(i) && Object.getPrototypeOf(i) === Object.prototype) { + var r = Object.keys(i); + return Zr(r.map(function(e) { + return i[e] + }), r) + } + } + if ("function" != typeof e[e.length - 1]) + return Zr(e, null); + var n = e.pop(); + return Zr(e = 1 === e.length && Tt(e[0]) ? e[0] : e, null).pipe(ur(function(e) { + return n.apply(void 0, e) + })) + } + function Zr(d, l) { + return new Ut(function(r) { + var n = d.length; + if (0 !== n) + for (var s = new Array(n), a = 0, o = 0, e = 0; e < n; e++) + !function(t) { + var e = Lr(d[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(l ? l.reduce(function(e, t, i) { + return e[t] = s[i], + e + }, {}) : s), + r.complete()) + } + })) + }(e); + else + r.complete() + } + ) + } + function en(e, i, r, t) { + return gt(r) && (t = r, + r = void 0), + t ? en(e, i, r).pipe(ur(function(e) { + return Tt(e) ? t.apply(void 0, e) : t(e) + })) : new Ut(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 d = t; + t.on(i, r), + a = function() { + return d.off(i, r) + } + } else if (function(e) { + return e && "function" == typeof e.addListener && "function" == typeof e.removeListener + }(t)) { + var l = t; + t.addListener(i, r), + a = function() { + return l.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 tn(e, t, i) { + return void 0 === t && (t = Ti), + void 0 === i && (i = Ti), + Yr(function() { + return e() ? t : i + }) + } + function rn(e) { + return !Tt(e) && 0 <= e - parseFloat(e) + 1 + } + function nn() { + 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 Li(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 Ut ? e[0] : Wr(i)(Fi(e, r)) + } + var sn = new Ut(sr); + function an(t, i) { + return function(e) { + return e.lift(new dn(t,i)) + } + } + var on, dn = (cn.prototype.call = function(e, t) { + return t.subscribe(new ln(e,this.predicate,this.thisArg)) + } + , + cn), ln = (lt(un, on = Pt), + un.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) + } + , + un); + function un(e, t, i) { + e = on.call(this, e) || this; + return e.predicate = t, + e.thisArg = i, + e.count = 0, + e + } + function cn(e, t) { + this.predicate = e, + this.thisArg = t + } + function hn() { + for (var e = [], t = 0; t < arguments.length; t++) + e[t] = arguments[t]; + if (1 === e.length) { + if (!Tt(e[0])) + return e[0]; + e = e[0] + } + return Fi(e, void 0).lift(new fn) + } + var pn, fn = (yn.prototype.call = function(e, t) { + return t.subscribe(new mn(e)) + } + , + yn), mn = (lt(gn, pn = gr), + gn.prototype._next = function(e) { + this.observables.push(e) + } + , + gn.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 = Or(this, e[i], void 0, i); + this.subscriptions && this.subscriptions.push(r), + this.add(r) + } + this.observables = null + } + } + , + gn.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) + } + , + gn); + function gn(e) { + e = pn.call(this, e) || this; + return e.hasFirst = !1, + e.observables = [], + e.subscriptions = [], + e + } + function yn() {} + function vn(i, e, r) { + void 0 === i && (i = 0); + var n = -1; + return rn(e) ? n = Number(e) < 1 ? 1 : Number(e) : Li(e) && (r = e), + Li(r) || (r = er), + new Ut(function(e) { + var t = rn(i) ? i : +i - r.now(); + return r.schedule(Sn, t, { + index: 0, + period: n, + subscriber: e + }) + } + ) + } + function Sn(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 bn() { + 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(), + Fi(e, void 0).lift(new In(i)) + } + var Tn, En, In = (xn.prototype.call = function(e, t) { + return t.subscribe(new wn(e,this.resultSelector)) + } + , + xn), wn = (lt(Pn, En = Pt), + Pn.prototype._next = function(e) { + var t = this.iterators; + Tt(e) ? t.push(new On(e)) : "function" == typeof e[Er] ? t.push(new An(e[Er]())) : t.push(new kn(this.destination,this,e)) + } + , + Pn.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() + } + , + Pn.prototype.notifyInactive = function() { + this.active--, + 0 === this.active && this.destination.complete() + } + , + Pn.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() + } + , + Pn.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) + } + , + Pn), An = (Mn.prototype.hasValue = function() { + return !0 + } + , + Mn.prototype.next = function() { + var e = this.nextResult; + return this.nextResult = this.iterator.next(), + e + } + , + Mn.prototype.hasCompleted = function() { + var e = this.nextResult; + return Boolean(e && e.done) + } + , + Mn), On = (Dn.prototype[Er] = function() { + return this + } + , + Dn.prototype.next = function(e) { + var t = this.index++ + , i = this.array; + return t < this.length ? { + value: i[t], + done: !1 + } : { + value: null, + done: !0 + } + } + , + Dn.prototype.hasValue = function() { + return this.array.length > this.index + } + , + Dn.prototype.hasCompleted = function() { + return this.array.length === this.index + } + , + Dn), kn = (lt(Cn, Tn = Br), + Cn.prototype[Er] = function() { + return this + } + , + Cn.prototype.next = function() { + var e = this.buffer; + return 0 === e.length && this.isComplete ? { + value: null, + done: !0 + } : { + value: e.shift(), + done: !1 + } + } + , + Cn.prototype.hasValue = function() { + return 0 < this.buffer.length + } + , + Cn.prototype.hasCompleted = function() { + return 0 === this.buffer.length && this.isComplete + } + , + Cn.prototype.notifyComplete = function() { + 0 < this.buffer.length ? (this.isComplete = !0, + this.parent.notifyInactive()) : this.destination.complete() + } + , + Cn.prototype.notifyNext = function(e) { + this.buffer.push(e), + this.parent.checkIterators() + } + , + Cn.prototype.subscribe = function() { + return Vr(this.observable, new Fr(this)) + } + , + Cn); + function Cn(e, t, i) { + e = Tn.call(this, e) || this; + return e.parent = t, + e.observable = i, + e.stillUnsubscribed = !0, + e.buffer = [], + e.isComplete = !1, + e + } + function Dn(e) { + this.array = e, + this.index = 0, + this.length = 0, + this.length = e.length + } + function Mn(e) { + this.iterator = e, + this.nextResult = e.next() + } + function Pn(e, t, i) { + e = En.call(this, e) || this; + return e.resultSelector = t, + e.iterators = [], + e.active = 0, + e.resultSelector = "function" == typeof t ? t : void 0, + e + } + function xn(e) { + this.resultSelector = e + } + var Rn, Ln = (Fn.prototype.call = function(e, t) { + return t.subscribe(new _n(e,this.durationSelector)) + } + , + Fn), _n = (lt(Nn, Rn = Br), + Nn.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 = Vr(t, new Fr(this)); + !t || t.closed ? this.clearThrottle() : this.add(this.throttled = t) + } + } + , + Nn.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)) + } + , + Nn.prototype.notifyNext = function() { + this.clearThrottle() + } + , + Nn.prototype.notifyComplete = function() { + this.clearThrottle() + } + , + Nn); + function Nn(e, t) { + e = Rn.call(this, e) || this; + return e.durationSelector = t, + e.hasValue = !1, + e + } + function Fn(e) { + this.durationSelector = e + } + function Bn(e, t) { + return void 0 === t && (t = er), + i = function() { + return vn(e, t) + } + , + function(e) { + return e.lift(new Ln(i)) + } + ; + var i + } + function Un(i) { + return function(e) { + var t = new Vn(i) + , e = e.lift(t); + return t.caught = e + } + } + var $n, Vn = (jn.prototype.call = function(e, t) { + return t.subscribe(new Kn(e,this.selector,this.caught)) + } + , + jn), Kn = (lt(Hn, $n = Br), + Hn.prototype.error = function(e) { + if (!this.isStopped) { + var t = void 0; + try { + t = this.selector(e, this.caught) + } catch (e) { + return void $n.prototype.error.call(this, e) + } + this._unsubscribeAndRecycle(); + var i = new Fr(this); + this.add(i); + t = Vr(t, i); + t !== i && this.add(t) + } + } + , + Hn); + function Hn(e, t, i) { + e = $n.call(this, e) || this; + return e.selector = t, + e.caught = i, + e + } + function jn(e) { + this.selector = e + } + function qn(e, t) { + return Kr(e, t, 1) + } + function Qn(t, i) { + return void 0 === i && (i = er), + function(e) { + return e.lift(new Wn(t,i)) + } + } + var Gn, Wn = (Yn.prototype.call = function(e, t) { + return t.subscribe(new zn(e,this.dueTime,this.scheduler)) + } + , + Yn), zn = (lt(Xn, Gn = Pt), + Xn.prototype._next = function(e) { + this.clearDebounce(), + this.lastValue = e, + this.hasValue = !0, + this.add(this.debouncedSubscription = this.scheduler.schedule(Jn, this.dueTime, this)) + } + , + Xn.prototype._complete = function() { + this.debouncedNext(), + this.destination.complete() + } + , + Xn.prototype.debouncedNext = function() { + var e; + this.clearDebounce(), + this.hasValue && (e = this.lastValue, + this.lastValue = null, + this.hasValue = !1, + this.destination.next(e)) + } + , + Xn.prototype.clearDebounce = function() { + var e = this.debouncedSubscription; + null !== e && (this.remove(e), + e.unsubscribe(), + this.debouncedSubscription = null) + } + , + Xn); + function Xn(e, t, i) { + e = Gn.call(this, e) || this; + return e.dueTime = t, + e.scheduler = i, + e.debouncedSubscription = null, + e.lastValue = null, + e.hasValue = !1, + e + } + function Yn(e, t) { + this.dueTime = e, + this.scheduler = t + } + function Jn(e) { + e.debouncedNext() + } + var Zn, es = (rs.prototype.call = function(e, t) { + return t.subscribe(new ts(e,this.defaultValue)) + } + , + rs), ts = (lt(is, Zn = Pt), + is.prototype._next = function(e) { + this.isEmpty = !1, + this.destination.next(e) + } + , + is.prototype._complete = function() { + this.isEmpty && this.destination.next(this.defaultValue), + this.destination.complete() + } + , + is); + function is(e, t) { + e = Zn.call(this, e) || this; + return e.defaultValue = t, + e.isEmpty = !0, + e + } + function rs(e) { + this.defaultValue = e + } + function ns(e) { + return e instanceof Date && !isNaN(+e) + } + function ss(e, t) { + void 0 === t && (t = er); + var i = ns(e) ? +e - t.now() : Math.abs(e); + return function(e) { + return e.lift(new os(i,t)) + } + } + var as, os = (cs.prototype.call = function(e, t) { + return t.subscribe(new ds(e,this.delay,this.scheduler)) + } + , + cs), ds = (lt(us, as = Pt), + us.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) + } + , + us.prototype._schedule = function(e) { + this.active = !0, + this.destination.add(e.schedule(us.dispatch, this.delay, { + source: this, + destination: this.destination, + scheduler: e + })) + } + , + us.prototype.scheduleNotification = function(e) { + var t; + !0 !== this.errored && (t = this.scheduler, + e = new ls(t.now() + this.delay,e), + this.queue.push(e), + !1 === this.active && this._schedule(t)) + } + , + us.prototype._next = function(e) { + this.scheduleNotification(Vi.createNext(e)) + } + , + us.prototype._error = function(e) { + this.errored = !0, + this.queue = [], + this.destination.error(e), + this.unsubscribe() + } + , + us.prototype._complete = function() { + this.scheduleNotification(Vi.createComplete()), + this.unsubscribe() + } + , + us), ls = function(e, t) { + this.time = e, + this.notification = t + }; + function us(e, t, i) { + e = as.call(this, e) || this; + return e.delay = t, + e.scheduler = i, + e.queue = [], + e.active = !1, + e.errored = !1, + e + } + function cs(e, t) { + this.delay = e, + this.scheduler = t + } + var hs, ps, fs, ms = (Ts.prototype.call = function(e, t) { + return t.subscribe(new gs(e,this.delayDurationSelector)) + } + , + Ts), gs = (lt(bs, fs = gr), + bs.prototype.notifyNext = function(e, t, i, r, n) { + this.destination.next(e), + this.removeSubscription(n), + this.tryComplete() + } + , + bs.prototype.notifyError = function(e, t) { + this._error(e) + } + , + bs.prototype.notifyComplete = function(e) { + e = this.removeSubscription(e); + e && this.destination.next(e), + this.tryComplete() + } + , + bs.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) + } + } + , + bs.prototype._complete = function() { + this.completed = !0, + this.tryComplete(), + this.unsubscribe() + } + , + bs.prototype.removeSubscription = function(e) { + e.unsubscribe(); + var t = this.delayNotifierSubscriptions.indexOf(e); + return -1 !== t && this.delayNotifierSubscriptions.splice(t, 1), + e.outerValue + } + , + bs.prototype.tryDelay = function(e, t) { + t = Or(this, e, t); + t && !t.closed && (this.destination.add(t), + this.delayNotifierSubscriptions.push(t)) + } + , + bs.prototype.tryComplete = function() { + this.completed && 0 === this.delayNotifierSubscriptions.length && this.destination.complete() + } + , + bs), ys = (lt(Ss, ps = Ut), + Ss.prototype._subscribe = function(e) { + this.subscriptionDelay.subscribe(new ys(e,this.source)) + } + , + lt(vs, hs = Pt), + vs.prototype._next = function(e) { + this.subscribeToSource() + } + , + vs.prototype._error = function(e) { + this.unsubscribe(), + this.parent.error(e) + } + , + vs.prototype._complete = function() { + this.unsubscribe(), + this.subscribeToSource() + } + , + vs.prototype.subscribeToSource = function() { + this.sourceSubscribed || (this.sourceSubscribed = !0, + this.unsubscribe(), + this.source.subscribe(this.parent)) + } + , + vs); + function vs(e, t) { + var i = hs.call(this) || this; + return i.parent = e, + i.source = t, + i.sourceSubscribed = !1, + i + } + function Ss(e, t) { + var i = ps.call(this) || this; + return i.source = e, + i.subscriptionDelay = t, + i + } + function bs(e, t) { + e = fs.call(this, e) || this; + return e.delayDurationSelector = t, + e.completed = !1, + e.delayNotifierSubscriptions = [], + e.index = 0, + e + } + function Ts(e) { + this.delayDurationSelector = e + } + function Es(t, i) { + return function(e) { + return e.lift(new ws(t,i)) + } + } + var Is, ws = (ks.prototype.call = function(e, t) { + return t.subscribe(new As(e,this.compare,this.keySelector)) + } + , + ks), As = (lt(Os, Is = Pt), + Os.prototype.compare = function(e, t) { + return e === t + } + , + Os.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)) + } + , + Os); + function Os(e, t, i) { + e = Is.call(this, e) || this; + return e.keySelector = i, + e.hasKey = !1, + "function" == typeof t && (e.compare = t), + e + } + function ks(e, t) { + this.compare = e, + this.keySelector = t + } + function Cs(t) { + return function(e) { + return 0 === t ? Ri() : e.lift(new Ms(t)) + } + } + var Ds, Ms = (Rs.prototype.call = function(e, t) { + return t.subscribe(new Ps(e,this.total)) + } + , + Rs), Ps = (lt(xs, Ds = Pt), + xs.prototype._next = function(e) { + var t = this.total + , i = ++this.count; + i <= t && (this.destination.next(e), + i === t && (this.destination.complete(), + this.unsubscribe())) + } + , + xs); + function xs(e, t) { + e = Ds.call(this, e) || this; + return e.total = t, + e.count = 0, + e + } + function Rs(e) { + if (this.total = e, + this.total < 0) + throw new ar + } + function Ls(t, n) { + return n ? function(e) { + return e.pipe(Ls(function(i, r) { + return Lr(t(i, r)).pipe(ur(function(e, t) { + return n(i, e, r, t) + })) + })) + } + : function(e) { + return e.lift(new Ns(t)) + } + } + var _s, Ns = (Us.prototype.call = function(e, t) { + return t.subscribe(new Fs(e,this.project)) + } + , + Us), Fs = (lt(Bs, _s = Br), + Bs.prototype._next = function(e) { + this.hasSubscription || this.tryNext(e) + } + , + Bs.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) + } + , + Bs.prototype._innerSub = function(e) { + var t = new Fr(this) + , i = this.destination; + i.add(t); + e = Vr(e, t); + e !== t && i.add(e) + } + , + Bs.prototype._complete = function() { + this.hasCompleted = !0, + this.hasSubscription || this.destination.complete(), + this.unsubscribe() + } + , + Bs.prototype.notifyNext = function(e) { + this.destination.next(e) + } + , + Bs.prototype.notifyError = function(e) { + this.destination.error(e) + } + , + Bs.prototype.notifyComplete = function() { + this.hasSubscription = !1, + this.hasCompleted && this.destination.complete() + } + , + Bs); + function Bs(e, t) { + e = _s.call(this, e) || this; + return e.project = t, + e.hasSubscription = !1, + e.hasCompleted = !1, + e.index = 0, + e + } + function Us(e) { + this.project = e + } + function $s(t) { + return function(e) { + return e.lift(new Ks(t)) + } + } + var Vs, Ks = (qs.prototype.call = function(e, t) { + return t.subscribe(new Hs(e,this.callback)) + } + , + qs), Hs = (lt(js, Vs = Pt), + js); + function js(e, t) { + e = Vs.call(this, e) || this; + return e.add(new wt(t)), + e + } + function qs(e) { + this.callback = e + } + function Qs(t) { + return function(e) { + return 0 === t ? Ri() : e.lift(new Ws(t)) + } + } + var Gs, Ws = (Ys.prototype.call = function(e, t) { + return t.subscribe(new zs(e,this.total)) + } + , + Ys), zs = (lt(Xs, Gs = Pt), + Xs.prototype._next = function(e) { + var t = this.ring + , i = this.total + , r = this.count++; + t.length < i ? t.push(e) : t[r % i] = e + } + , + Xs.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() + } + , + Xs); + function Xs(e, t) { + e = Gs.call(this, e) || this; + return e.total = t, + e.ring = new Array, + e.count = 0, + e + } + function Ys(e) { + if (this.total = e, + this.total < 0) + throw new ar + } + function Js(t) { + return function(e) { + return e.lift(new ea(t)) + } + } + var Zs, ea = (ra.prototype.call = function(e, t) { + return t.subscribe(new ta(e,this.value)) + } + , + ra), ta = (lt(ia, Zs = Pt), + ia.prototype._next = function(e) { + this.destination.next(this.value) + } + , + ia); + function ia(e, t) { + e = Zs.call(this, e) || this; + return e.value = t, + e + } + function ra(e) { + this.value = e + } + function na(t, i) { + var r = 2 <= arguments.length ? !0 : !1; + return function(e) { + return e.lift(new aa(t,i,r)) + } + } + var sa, aa = (la.prototype.call = function(e, t) { + return t.subscribe(new oa(e,this.accumulator,this.seed,this.hasSeed)) + } + , + la), oa = (lt(da, sa = 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 = sa.call(this, e) || this; + return e.accumulator = t, + e._seed = i, + e.hasSeed = r, + e.index = 0, + e + } + function la(e, t, i) { + void 0 === i && (i = !1), + this.accumulator = e, + this.seed = t, + this.hasSeed = i + } + ua.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 ua(e, t) { + this.subjectFactory = e, + this.selector = t + } + function ca() { + return function(e) { + return e.lift(new pa) + } + } + var ha, pa = (ga.prototype.call = function(e, t) { + return t.subscribe(new fa(e)) + } + , + ga), fa = (lt(ma, ha = Pt), + ma.prototype._next = function(e) { + var t; + this.hasPrev ? t = [this.prev, e] : this.hasPrev = !0, + this.prev = e, + t && this.destination.next(t) + } + , + ma); + function ma(e) { + e = ha.call(this, e) || this; + return e.hasPrev = !1, + e + } + function ga() {} + function ya(t) { + return function(e) { + return e.lift(new Sa(t,e)) + } + } + var va, Sa = (Ea.prototype.call = function(e, t) { + return t.subscribe(new ba(e,this.notifier,this.source)) + } + , + Ea), ba = (lt(Ta, va = Br), + Ta.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 zt; + try { + i = (0, + this.notifier)(t) + } catch (e) { + return va.prototype.error.call(this, e) + } + r = Vr(i, new Fr(this)) + } + this._unsubscribeAndRecycle(), + this.errors = t, + this.retries = i, + this.retriesSubscription = r, + t.next(e) + } + } + , + Ta.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 + } + , + Ta.prototype.notifyNext = function() { + var e = this._unsubscribe; + this._unsubscribe = null, + this._unsubscribeAndRecycle(), + this._unsubscribe = e, + this.source.subscribe(this) + } + , + Ta); + function Ta(e, t, i) { + e = va.call(this, e) || this; + return e.notifier = t, + e.source = i, + e + } + function Ea(e, t) { + this.notifier = e, + this.source = t + } + function Ia() { + return new zt + } + function wa() { + return function(e) { + return ii()((t = e, + i = "function" == typeof (r = Ia) ? r : function() { + return r + } + , + (e = Object.create(t, fi)).source = t, + e.subjectFactory = i, + e)); + var t, i, r + } + } + function Aa(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, + d = 0, + u = l = !1, + function(e) { + var t; + d++, + !i || l ? (l = !1, + i = new Xi(n,s,o), + t = i.subscribe(this), + r = e.subscribe({ + next: function(e) { + i.next(e) + }, + error: function(e) { + l = !0, + i.error(e) + }, + complete: function() { + u = !0, + r = void 0, + i.complete() + } + }), + u && (r = void 0)) : t = i.subscribe(this), + this.add(function() { + d--, + t.unsubscribe(), + t = void 0, + r && !u && a && 0 === d && (r.unsubscribe(), + i = r = void 0) + }) + } + )); + var i, r, n, s, a, o, d, l, u + } + } + function Oa(t) { + return function(e) { + return e.lift(new Ca(t)) + } + } + var ka, Ca = (Pa.prototype.call = function(e, t) { + return t.subscribe(new Da(e,this.total)) + } + , + Pa), Da = (lt(Ma, ka = Pt), + Ma.prototype._next = function(e) { + ++this.count > this.total && this.destination.next(e) + } + , + Ma); + function Ma(e, t) { + e = ka.call(this, e) || this; + return e.total = t, + e.count = 0, + e + } + function Pa(e) { + this.total = e + } + function xa() { + for (var t = [], e = 0; e < arguments.length; e++) + t[e] = arguments[e]; + var i = t[t.length - 1]; + return Li(i) ? (t.pop(), + function(e) { + return Xr(t, e, i) + } + ) : function(e) { + return Xr(t, e) + } + } + function Ra(t, n) { + return "function" == typeof n ? function(e) { + return e.pipe(Ra(function(i, r) { + return Lr(t(i, r)).pipe(ur(function(e, t) { + return n(i, e, r, t) + })) + })) + } + : function(e) { + return e.lift(new _a(t)) + } + } + var La, _a = (Ba.prototype.call = function(e, t) { + return t.subscribe(new Na(e,this.project)) + } + , + Ba), Na = (lt(Fa, La = Br), + Fa.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) + } + , + Fa.prototype._innerSub = function(e) { + var t = this.innerSubscription; + t && t.unsubscribe(); + var i = new Fr(this) + , t = this.destination; + t.add(i), + this.innerSubscription = Vr(e, i), + this.innerSubscription !== i && t.add(this.innerSubscription) + } + , + Fa.prototype._complete = function() { + var e = this.innerSubscription; + e && !e.closed || La.prototype._complete.call(this), + this.unsubscribe() + } + , + Fa.prototype._unsubscribe = function() { + this.innerSubscription = void 0 + } + , + Fa.prototype.notifyComplete = function() { + this.innerSubscription = void 0, + this.isStopped && La.prototype._complete.call(this) + } + , + Fa.prototype.notifyNext = function(e) { + this.destination.next(e) + } + , + Fa); + function Fa(e, t) { + e = La.call(this, e) || this; + return e.project = t, + e.index = 0, + e + } + function Ba(e) { + this.project = e + } + function Ua(e, t) { + return t ? Ra(function() { + return e + }, t) : Ra(function() { + return e + }) + } + function $a(t) { + return function(e) { + return e.lift(new Ka(t)) + } + } + var Va, Ka = (qa.prototype.call = function(e, t) { + var i = new Ha(e) + , e = Vr(this.notifier, new Fr(i)); + return e && !i.seenValue ? (i.add(e), + t.subscribe(i)) : i + } + , + qa), Ha = (lt(ja, Va = Br), + ja.prototype.notifyNext = function() { + this.seenValue = !0, + this.complete() + } + , + ja.prototype.notifyComplete = function() {} + , + ja); + function ja(e) { + e = Va.call(this, e) || this; + return e.seenValue = !1, + e + } + function qa(e) { + this.notifier = e + } + function Qa(t, i) { + return void 0 === i && (i = !1), + function(e) { + return e.lift(new Wa(t,i)) + } + } + var Ga, Wa = (Ya.prototype.call = function(e, t) { + return t.subscribe(new za(e,this.predicate,this.inclusive)) + } + , + Ya), za = (lt(Xa, Ga = Pt), + Xa.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) + } + , + Xa.prototype.nextOrComplete = function(e, t) { + var i = this.destination; + Boolean(t) ? i.next(e) : (this.inclusive && i.next(e), + i.complete()) + } + , + Xa); + function Xa(e, t, i) { + e = Ga.call(this, e) || this; + return e.predicate = t, + e.inclusive = i, + e.index = 0, + e + } + function Ya(e, t) { + this.predicate = e, + this.inclusive = t + } + function Ja(t, i, r) { + return function(e) { + return e.lift(new eo(t,i,r)) + } + } + var Za, eo = (no.prototype.call = function(e, t) { + return t.subscribe(new to(e,this.nextOrObserver,this.error,this.complete)) + } + , + no), to = (lt(ro, Za = Pt), + ro.prototype._next = function(e) { + try { + this._tapNext.call(this._context, e) + } catch (e) { + return void this.destination.error(e) + } + this.destination.next(e) + } + , + ro.prototype._error = function(e) { + try { + this._tapError.call(this._context, e) + } catch (e) { + return void this.destination.error(e) + } + this.destination.error(e) + } + , + ro.prototype._complete = function() { + try { + this._tapComplete.call(this._context) + } catch (e) { + return void this.destination.error(e) + } + return this.destination.complete() + } + , + ro), io = { + leading: !0, + trailing: !1 + }; + function ro(e, t, i, r) { + e = Za.call(this, e) || this; + return e._tapNext = sr, + e._tapError = sr, + e._tapComplete = sr, + e._tapError = i || sr, + e._tapComplete = r || sr, + gt(t) ? (e._context = e)._tapNext = t : t && (e._context = t, + e._tapNext = t.next || sr, + e._tapError = t.error || sr, + e._tapComplete = t.complete || sr), + e + } + function no(e, t, i) { + this.nextOrObserver = e, + this.error = t, + this.complete = i + } + function so(t, i, r) { + return void 0 === i && (i = er), + void 0 === r && (r = io), + function(e) { + return e.lift(new oo(t,i,r.leading,r.trailing)) + } + } + var ao, oo = (co.prototype.call = function(e, t) { + return t.subscribe(new lo(e,this.duration,this.scheduler,this.leading,this.trailing)) + } + , + co), lo = (lt(uo, ao = Pt), + uo.prototype._next = function(e) { + this.throttled ? this.trailing && (this._trailingValue = e, + this._hasTrailingValue = !0) : (this.add(this.throttled = this.scheduler.schedule(ho, this.duration, { + subscriber: this + })), + this.leading ? this.destination.next(e) : this.trailing && (this._trailingValue = e, + this._hasTrailingValue = !0)) + } + , + uo.prototype._complete = function() { + this._hasTrailingValue && this.destination.next(this._trailingValue), + this.destination.complete() + } + , + uo.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) + } + , + uo); + function uo(e, t, i, r, n) { + e = ao.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 co(e, t, i, r) { + this.duration = e, + this.scheduler = t, + this.leading = i, + this.trailing = r + } + function ho(e) { + e.subscriber.clearThrottle() + } + var po, fo = (yo.prototype.call = function(e, t) { + return t.subscribe(new mo(e,this.absoluteTimeout,this.waitFor,this.withObservable,this.scheduler)) + } + , + yo), mo = (lt(go, po = Br), + go.dispatchTimeout = function(e) { + var t = e.withObservable; + e._unsubscribeAndRecycle(), + e.add(Vr(t, new Fr(e))) + } + , + go.prototype.scheduleTimeout = function() { + var e = this.action; + e ? this.action = e.schedule(this, this.waitFor) : this.add(this.action = this.scheduler.schedule(go.dispatchTimeout, this.waitFor, this)) + } + , + go.prototype._next = function(e) { + this.absoluteTimeout || this.scheduleTimeout(), + po.prototype._next.call(this, e) + } + , + go.prototype._unsubscribe = function() { + this.action = void 0, + this.scheduler = null, + this.withObservable = null + } + , + go); + function go(e, t, i, r, n) { + e = po.call(this, e) || this; + return e.absoluteTimeout = t, + e.waitFor = i, + e.withObservable = r, + e.scheduler = n, + e.scheduleTimeout(), + e + } + function yo(e, t, i, r) { + this.waitFor = e, + this.absoluteTimeout = t, + this.withObservable = i, + this.scheduler = r + } + function vo(e, t) { + return void 0 === t && (t = er), + r = e, + n = Ui(new or), + void 0 === (s = t) && (s = er), + function(e) { + var t = ns(r) + , i = t ? +r - s.now() : Math.abs(r); + return e.lift(new fo(i,t,n,s)) + } + ; + var r, n, s + } + function So() { + 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 Eo(i,t)) + } + } + var bo, To, Eo = (ko.prototype.call = function(e, t) { + return t.subscribe(new Io(e,this.observables,this.project)) + } + , + ko), Io = (lt(Oo, bo = gr), + Oo.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)) + } + , + Oo.prototype.notifyComplete = function() {} + , + Oo.prototype._next = function(e) { + 0 === this.toRespond.length && (e = [e].concat(this.values), + this.project ? this._tryProject(e) : this.destination.next(e)) + } + , + Oo.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) + } + , + Oo), wo = { + type: null, + entityIds: null, + skip: !1 + }, Ao = !1; + function Oo(e, t, i) { + var r = bo.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(Or(r, a, void 0, s)) + } + return r + } + function ko(e, t) { + this.observables = e, + this.project = t + } + function Co(e, t) { + Do(e, t), + Ao = !0 + } + function Do(e, t) { + !1 === Ao && (wo.type = e, + wo.entityIds = t) + } + function Mo(e, t) { + return e.hasOwnProperty(t) + } + function Po(e) { + return null == e + } + function xo(e) { + return Po(e) ? [] : Array.isArray(e) ? e : [e] + } + (mu = To = To || {}).Set = "Set", + mu.Add = "Add", + mu.Update = "Update", + mu.Remove = "Remove"; + var Ro = "undefined" != typeof window + , Lo = !0; + function _o(e) { + var t = typeof e; + return null != e && ("object" == t || "function" == t) + } + function No(e) { + return Array.isArray(e) + } + function Fo(e) { + return !1 === Po(e) + } + function Bo(e) { + return No(e) && 0 === e.length + } + function Uo(e) { + return "function" == typeof e + } + function $o(e) { + return void 0 === e + } + function Vo(e) { + return e.hasOwnProperty("active") + } + function Ko(e) { + return No(e) + } + function Ho(e) { + var t, i = e.active, r = e.ids, n = e.entities; + return Ko(i) ? (t = r, + (r = (e = i).filter(function(e) { + return -1 < t.indexOf(e) + })).length === e.length ? e : r) : !1 === Mo(n, i) ? null : i + } + function jo(e, t) { + var i, r, n = {}; + try { + for (var s = pt(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 Qo(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]) || Qo(t[e]) + }), + t + } + var Go, Wo = new zt, zo = new Xi(50,5e3), Xo = new zt; + function Yo(e) { + return null != e && "" + e != "false" + } + function Jo(e) { + return Yo(e) && "Object" === e.constructor.name + } + lt(function(e) { + return Go.call(this, e) || this + }, Go = Error); + var Zo = {} + , ed = {}; + Ro && (window.$$stores = Zo, + window.$$queries = ed); + var td = new zt + , id = new gi(!1) + , rd = { + activeTransactions: 0, + batchTransaction: null + }; + function nd() { + return 0 < rd.activeTransactions + } + function sd(e, t) { + void 0 === t && (t = void 0), + nd() || (rd.batchTransaction = new zt), + rd.activeTransactions++, + id.next(!0); + try { + return e.apply(t) + } finally { + Co("@Transaction"), + 0 == --rd.activeTransactions && (rd.batchTransaction.next(!0), + rd.batchTransaction.complete(), + id.next(!1), + td.next(!0)) + } + } + function ad() { + 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 sd(function() { + return r.apply(e, t) + }, this) + } + , + i + } + } + function od(t) { + return function(e) { + return e.pipe(Ja(function(e) { + return sd(function() { + return t(e) + }) + })) + } + } + var dd = (ld.prototype.setLoading = function(t) { + (t = void 0 === t ? !1 : t) !== this._value().loading && (Lo && Do("Set Loading"), + this._setState(function(e) { + return ut({}, e, { + loading: t + }) + })) + } + , + ld.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)) + } + , + ld.prototype.getValue = function() { + return this.storeValue + } + , + ld.prototype.setError = function(t) { + t !== this._value().error && (Lo && Do("Set Error"), + this._setState(function(e) { + return ut({}, e, { + error: t + }) + })) + } + , + ld.prototype._select = function(t) { + return this.store.asObservable().pipe(ur(function(e) { + return t(e.state) + }), Es()) + } + , + ld.prototype._value = function() { + return this.storeValue + } + , + ld.prototype._cache = function() { + return this.cache.active + } + , + Object.defineProperty(ld.prototype, "config", { + get: function() { + return this.constructor.akitaConfig || {} + }, + enumerable: !0, + configurable: !0 + }), + Object.defineProperty(ld.prototype, "storeName", { + get: function() { + return this.config.storeName || this.options.storeName || this.options.name + }, + enumerable: !0, + configurable: !0 + }), + Object.defineProperty(ld.prototype, "deepFreeze", { + get: function() { + return this.config.deepFreezeFn || this.options.deepFreezeFn || Qo + }, + enumerable: !0, + configurable: !0 + }), + Object.defineProperty(ld.prototype, "cacheConfig", { + get: function() { + return this.config.cache || this.options.cache + }, + enumerable: !0, + configurable: !0 + }), + Object.defineProperty(ld.prototype, "_producerFn", { + get: function() { + return this.config.producerFn || this.options.producerFn || qo.producerFn + }, + enumerable: !0, + configurable: !0 + }), + Object.defineProperty(ld.prototype, "resettable", { + get: function() { + return (Fo(this.config.resettable) ? this.config : this.options).resettable + }, + enumerable: !0, + configurable: !0 + }), + ld.prototype._setState = function(e, t) { + var i, r = this; + if (void 0 === t && (t = !0), + Uo(e) ? (i = e(this._value()), + this.storeValue = Lo ? this.deepFreeze(i) : i) : this.storeValue = e, + !this.store) + return this.store = new gi({ + state: this.storeValue + }), + void (Lo && this.store.subscribe(function(e) { + var t = e.action; + t && (e = r.storeName, + Xo.next({ + storeName: e, + action: t + })) + })); + nd() ? this.handleTransaction() : this.dispatch(this.storeValue, t) + } + , + ld.prototype.reset = function() { + var e = this; + this.isResettable() ? (Lo && Do("Reset"), + this._setState(function() { + return Object.assign({}, e._initialState) + }), + this.setHasCache(!1)) : Lo && console.warn("You need to enable the reset functionality") + } + , + ld.prototype.update = function(e) { + Lo && Do("Update"); + var t = this._value() + , e = Uo(e) ? Uo(this._producerFn) ? this._producerFn(t, e) : e(t) : e + , e = this.akitaPreUpdate(t, ut({}, t, e)) + , e = Jo(t) ? e : new t.constructor(e); + this._setState(e) + } + , + ld.prototype.updateStoreConfig = function(e) { + this.options = ut({}, this.options, e) + } + , + ld.prototype.akitaPreUpdate = function(e, t) { + return t + } + , + ld.prototype.ngOnDestroy = function() { + this.destroy() + } + , + ld.prototype.destroy = function() { + var e; + Ro && window.hmrEnabled || this !== Zo[this.storeName] || (delete Zo[this.storeName], + e = this.storeName, + Wo.next(e), + this.setHasCache(!1), + this.cache.active.complete(), + this.store.complete()) + } + , + ld.prototype.onInit = function(e) { + var t, i; + (Zo[this.storeName] = this)._setState(function() { + return e + }), + i = this.storeName, + zo.next(i), + this.isResettable() && (this._initialState = e), + Lo && (t = this.storeName, + i = this.constructor.name, + t || console.error("@StoreConfig({ name }) is missing in " + i)) + } + , + ld.prototype.dispatch = function(e, t) { + var i = void 0; + (t = void 0 === t ? !0 : t) && (i = wo, + Ao = !1), + this.store.next({ + state: e, + action: i + }) + } + , + ld.prototype.watchTransaction = function() { + var e = this; + (rd.batchTransaction ? rd.batchTransaction.asObservable() : Bi(!0)).subscribe(function() { + e.inTransaction = !1, + e.dispatch(e._value()) + }) + } + , + ld.prototype.isResettable = function() { + return !1 !== this.resettable && (this.resettable || qo.resettable) + } + , + ld.prototype.handleTransaction = function() { + this.inTransaction || (this.watchTransaction(), + this.inTransaction = !0) + } + , + ld.prototype.getCacheTTL = function() { + return this.cacheConfig && this.cacheConfig.ttl || qo.ttl + } + , + ld); + function ld(e, t) { + this.options = t = void 0 === t ? {} : t, + this.inTransaction = !1, + this.cache = { + active: new gi(!1), + ttl: null + }, + this.onInit(e) + } + var ud, cd, hd, pd = (lt(gd, hd = dd), + Object.defineProperty(gd.prototype, "selectEntityAction$", { + get: function() { + return this.entityActions.asObservable() + }, + enumerable: !0, + configurable: !0 + }), + Object.defineProperty(gd.prototype, "selectEntityIdChanges$", { + get: function() { + return this.entityIdChanges.asObservable() + }, + enumerable: !0, + configurable: !0 + }), + Object.defineProperty(gd.prototype, "idKey", { + get: function() { + return this.config.idKey || this.options.idKey || "id" + }, + enumerable: !0, + configurable: !0 + }), + gd.prototype.set = function(a, o) { + var d, l = this; + void 0 === o && (o = {}), + Po(a) || (Lo && Do("Set Entity"), + d = this.akitaPreAddEntity === gd.prototype.akitaPreAddEntity, + this.setHasCache(!0, { + restartTTL: !0 + }), + this._setState(function(e) { + var t, i, r, n, s, e = (t = { + state: e, + entities: a, + idKey: l.idKey, + preAddEntity: l.akitaPreAddEntity, + isNativePreAdd: d + }, + r = t.state, + n = t.entities, + s = t.idKey, + e = t.preAddEntity, + t = t.isNativePreAdd, + e = No(n) ? (i = (s = function(e, t, i) { + var r, n, s = { + entities: {}, + ids: [] + }; + try { + for (var a = pt(e), o = a.next(); !o.done; o = a.next()) { + var d = i(o.value); + s.entities[d[t]] = d, + s.ids.push(d[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 = ut({}, r, { + entities: i, + ids: e, + loading: !1 + }), + Vo(r) && (e.active = Ho(e)), + e); + return !1 === $o(o.activeId) && (e.active = o.activeId), + e + }), + this.hasInitialUIState() && this.handleUICreation(), + this.entityActions.next({ + type: To.Set, + ids: this.ids + })) + } + , + gd.prototype.add = function(e, t) { + void 0 === t && (t = { + loading: !1 + }); + var i, e = xo(e); + Bo(e) || (i = function(e) { + var t, i, r = e.state, n = e.entities, s = e.idKey, a = e.options, o = void 0 === a ? {} : a, d = e.preAddEntity, l = {}, u = [], c = !1; + try { + for (var h = pt(n), p = h.next(); !p.done; p = h.next()) { + var f, m, g = p.value; + !1 === Mo(r.entities, g[s]) && (l[m = (f = d(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: ut({}, r, { + entities: ut({}, r.entities, l), + ids: o.prepend ? mt(u, r.ids) : mt(r.ids, u) + }), + newIds: u + } : null + }({ + state: this._value(), + preAddEntity: this.akitaPreAddEntity, + entities: e, + idKey: this.idKey, + options: t + })) && (Lo && Do("Add Entity"), + i.newState.loading = t.loading, + this._setState(function() { + return i.newState + }), + this.hasInitialUIState() && this.handleUICreation(!0), + this.entityActions.next({ + type: To.Add, + ids: i.newIds + })) + } + , + gd.prototype.update = function(t, i) { + var r, n, s = this; + $o(i) ? hd.prototype.update.call(this, t) : (n = [], + Bo(n = Uo(t) ? this.ids.filter(function(e) { + return t(s.entities[e]) + }) : Po(t) ? this.ids : xo(t)) || (Lo && Do("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 + , d = {} + , l = !1; + try { + for (var u = pt(i), c = u.next(); !c.done; c = u.next()) { + var h, p, f, m, g, y, v = c.value; + !1 !== Mo(t.entities, v) && (h = t.entities[v], + p = void 0, + f = (p = Uo(n) ? Uo(a) ? a(h, n) : n(h) : n).hasOwnProperty(r) && p[r] !== h[r], + y = void 0, + m = v, + f && (l = !0, + m = p[r]), + g = ut({}, h, p), + y = Jo(h) ? g : new (Jo(p) ? h : p).constructor(g), + d[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 l && (S = ft(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)), + ut({}, t, { + entities: ut({}, T, d), + 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(ut({}, r, { + pending: !0 + })) + } + }) + }), + r && this.entityIdChanges.next(ut({}, r, { + pending: !1 + })), + this.entityActions.next({ + type: To.Update, + ids: n + }))) + } + , + gd.prototype.upsert = function(e, i, r, t) { + var n = this; + void 0 === t && (t = {}); + var s = xo(e) + , e = function(t) { + return function(e) { + return Mo(n.entities, e) === t + } + } + , a = Uo(r) ? t.baseClass : r ? r.baseClass : void 0 + , o = Uo(a) + , t = s.filter(e(!0)) + , e = s.filter(e(!1)).map(function(e) { + var t = "function" == typeof i ? i({}) : i + , t = Uo(r) ? r(e, t) : t + , t = ut({}, t, ((t = {})[n.idKey] = e, + t)); + return o ? new a(t) : t + }); + this.update(t, i), + this.add(e), + Lo && Co("Upsert Entity") + } + , + gd.prototype.upsertMany = function(e, t) { + var i, r; + void 0 === t && (t = {}); + var n = [] + , s = [] + , a = {}; + try { + for (var o = pt(e), d = o.next(); !d.done; d = o.next()) { + var l, u, c, h, p, f, m = d.value, g = this.akitaPreCheckEntity(m), y = g[this.idKey]; + Mo(this.entities, y) ? (l = this._value().entities[y], + u = ut({}, this._value().entities[y], g), + c = t.baseClass ? new t.baseClass(u) : u, + f = (h = this.akitaPreUpdateEntity(l, 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 { + d && !d.done && (r = o.return) && r.call(o) + } finally { + if (i) + throw i.error + } + } + Lo && Co("Upsert Many"), + this._setState(function(e) { + return ut({}, e, { + ids: n.length ? mt(e.ids, n) : e.ids, + entities: ut({}, e.entities, a), + loading: !!t.loading + }) + }), + s.length && this.entityActions.next({ + type: To.Update, + ids: s + }), + n.length && this.entityActions.next({ + type: To.Add, + ids: n + }), + n.length && this.hasUIStore() && this.handleUICreation(!0) + } + , + gd.prototype.replace = function(e, t) { + var i, r, n = xo(e); + if (!Bo(n)) { + var s = {}; + try { + for (var a = pt(n), o = a.next(); !o.done; o = a.next()) { + var d = o.value; + t[this.idKey] = d, + s[d] = t + } + } catch (e) { + i = { + error: e + } + } finally { + try { + o && !o.done && (r = a.return) && r.call(a) + } finally { + if (i) + throw i.error + } + } + Lo && Do("Replace Entity", e), + this._setState(function(e) { + return ut({}, e, { + entities: ut({}, e.entities, s) + }) + }) + } + } + , + gd.prototype.move = function(e, t) { + var i = this.ids.slice(); + i.splice(t < 0 ? i.length + t : t, 0, i.splice(e, 1)[0]), + Lo && Do("Move Entity"), + this._setState(function(e) { + return ut({}, e, { + entities: ut({}, e.entities), + ids: i + }) + }) + } + , + gd.prototype.remove = function(t) { + var e, i, r = this; + Bo(this.ids) || (e = Fo(t), + i = [], + Bo(i = Uo(t) ? this.ids.filter(function(e) { + return t(r.entities[e]) + }) : e ? xo(t) : this.ids) || (Lo && Do("Remove Entity", i), + this._setState(function(e) { + return function(e) { + var t, i = e.state, r = e.ids; + if (Po(r)) + return ut({}, i, { + entities: {}, + ids: [], + active: Ko(i.active) ? [] : null + }); + var n = i.entities + , s = {}; + try { + for (var a = pt(i.ids), o = a.next(); !o.done; o = a.next()) { + var d = o.value; + !1 === r.includes(d) && (s[d] = n[d]) + } + } catch (e) { + l = { + error: e + } + } finally { + try { + o && !o.done && (t = a.return) && t.call(a) + } finally { + if (l) + throw l.error + } + } + var l = ut({}, i, { + entities: s, + ids: i.ids.filter(function(e) { + return !1 === r.includes(e) + }) + }); + return Vo(i) && (l.active = Ho(l)), + l + }({ + state: e, + ids: i + }) + }), + e || this.setHasCache(!1), + this.handleUIRemove(i), + this.entityActions.next({ + type: To.Remove, + ids: i + }))) + } + , + gd.prototype.updateActive = function(e) { + var t = xo(this.active); + Lo && Do("Update Active", t), + this.update(t, e) + } + , + gd.prototype.setActive = function(e) { + e = function(e, t, i) { + var r; + if (No(e)) + r = e; + else if (_o(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 && (Lo && Do("Set Active", e), + this._setActive(e)) + } + , + gd.prototype.addActive = function(e) { + var t = this + , i = xo(e); + Bo(i) || i.every(function(e) { + return -1 < t.active.indexOf(e) + }) || (Lo && Do("Add Active", e), + this._setState(function(e) { + var t = Array.from(new Set(mt(e.active, i))); + return ut({}, e, { + active: t + }) + })) + } + , + gd.prototype.removeActive = function(e) { + var t = this + , i = xo(e); + Bo(i) || i.some(function(e) { + return -1 < t.active.indexOf(e) + }) && (Lo && Do("Remove Active", e), + this._setState(function(e) { + return ut({}, e, { + active: Array.isArray(e.active) ? e.active.filter(function(e) { + return -1 === i.indexOf(e) + }) : null + }) + })) + } + , + gd.prototype.toggleActive = function(e) { + var i = this + , t = xo(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), + Lo && Co("Toggle Active") + } + , + gd.prototype.createUIStore = function(e, t) { + var i = { + name: "UI/" + this.storeName, + idKey: this.idKey + }; + return this.ui = new fd(e = void 0 === e ? {} : e,ut({}, i, t = void 0 === t ? {} : t)), + this.ui + } + , + gd.prototype.destroy = function() { + hd.prototype.destroy.call(this), + this.ui instanceof gd && this.ui.destroy(), + this.entityActions.complete() + } + , + gd.prototype.akitaPreUpdateEntity = function(e, t) { + return t + } + , + gd.prototype.akitaPreAddEntity = function(e) { + return e + } + , + gd.prototype.akitaPreCheckEntity = function(e) { + return e + } + , + Object.defineProperty(gd.prototype, "ids", { + get: function() { + return this._value().ids + }, + enumerable: !0, + configurable: !0 + }), + Object.defineProperty(gd.prototype, "entities", { + get: function() { + return this._value().entities + }, + enumerable: !0, + configurable: !0 + }), + Object.defineProperty(gd.prototype, "active", { + get: function() { + return this._value().active + }, + enumerable: !0, + configurable: !0 + }), + gd.prototype._setActive = function(t) { + this._setState(function(e) { + return ut({}, e, { + active: t + }) + }) + } + , + gd.prototype.handleUICreation = function(e) { + var r = this + , t = this.ids + , n = Uo(this.ui._akitaCreateEntityFn) + , i = function(e) { + var t = r.entities[e] + , i = n ? r.ui._akitaCreateEntityFn(t) : r.ui._akitaCreateEntityFn; + return ut(((e = {})[r.idKey] = t[r.idKey], + e), i) + } + , i = ((e = void 0 === e ? !1 : e) ? this.ids.filter(function(e) { + return $o(r.ui.entities[e]) + }) : t).map(i); + e ? this.ui.add(i) : this.ui.set(i) + } + , + gd.prototype.hasInitialUIState = function() { + return this.hasUIStore() && !1 === $o(this.ui._akitaCreateEntityFn) + } + , + gd.prototype.handleUIRemove = function(e) { + this.hasUIStore() && this.ui.remove(e) + } + , + gd.prototype.hasUIStore = function() { + return this.ui instanceof fd + } + , + ct([ad(), ht("design:type", Function), ht("design:paramtypes", [Object, Object, Object, Object]), ht("design:returntype", void 0)], gd.prototype, "upsert", null), + ct([ad(), ht("design:type", Function), ht("design:paramtypes", ["function" == typeof (w = "undefined" != typeof T && T) ? w : Object]), ht("design:returntype", void 0)], gd.prototype, "toggleActive", null), + gd), fd = (lt(md, cd = pd), + md.prototype.setInitialEntityState = function(e) { + this._akitaCreateEntityFn = e + } + , + md); + function md(e, t) { + return cd.call(this, e = void 0 === e ? {} : e, t = void 0 === t ? {} : t) || this + } + function gd(e, t) { + void 0 === t && (t = {}); + e = hd.call(this, ut({}, { + entities: {}, + ids: [], + loading: !0, + error: null + }, e = void 0 === e ? {} : e), t) || this; + return e.options = t, + e.entityActions = new zt, + e.entityIdChanges = new zt, + e + } + function yd() { + return Es(function(e, t) { + return e === t || !1 !== No(e) && !1 !== No(t) && (!(!Bo(e) || !Bo(t)) || !vd(t, e) && !1 === vd(e, t)) + }) + } + function vd(e, t) { + return t.some(function(t) { + return void 0 === e.find(function(e) { + return e === t + }) + }) + } + function Sd(i, e) { + for (var r, n, s, a = [], o = i.ids, d = i.entities, l = e.filterBy, t = e.limitTo, u = e.sortBy, e = e.sortByOrder, c = 0; c < o.length; c++) + !function(t) { + var i = d[o[t]]; + if (!l) + return a.push(i); + xo(l).every(function(e) { + return e(i, t) + }) && a.push(i) + }(c); + u && (s = Uo(u) ? u : (r = u, + void 0 === (n = e) && (n = ud.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 == ud.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 bd(e) { + return "string" == typeof e + } + function Td(t, i) { + return function(e) { + e = e[t]; + if (!$o(e)) + return i ? bd(i) ? e[i] : i(e) : e + } + } + (yi = ud = ud || {}).ASC = "asc", + yi.DESC = "desc"; + Ed.prototype.select = function(t) { + var e, n; + if (Uo(t)) + e = t; + else if (bd(t)) + e = function(e) { + return e[t] + } + ; + else { + if (Array.isArray(t)) + return this.store._select(function(e) { + return e + }).pipe(Es((n = t, + function(t, i) { + var r = Uo(n[0]); + return !1 === n.some(function(e) { + return r ? e(t) !== e(i) : t[e] !== i[e] + }) + } + )), ur(function(i) { + return Uo(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) + } + , + Ed.prototype.selectLoading = function() { + return this.select(function(e) { + return e.loading + }) + } + , + Ed.prototype.selectError = function() { + return this.select(function(e) { + return e.error + }) + } + , + Ed.prototype.getValue = function() { + return this.store._value() + } + , + Ed.prototype.selectHasCache = function() { + return this.store._cache().asObservable() + } + , + Ed.prototype.getHasCache = function() { + return this.store._cache().value + } + , + Object.defineProperty(Ed.prototype, "config", { + get: function() { + return this.constructor.akitaQueryConfig + }, + enumerable: !0, + configurable: !0 + }), + Si = Ed; + function Ed(e) { + this.store = e, + this.__store__ = e, + Lo && (ed[e.storeName] = this) + } + function Id(e) { + return e.pipe(an(function(e) { + return null != e + })) + } + var wd, Ad, Od = (lt(Dd, Ad = Si), + Dd.prototype.selectAll = function(e) { + var t = this; + return void 0 === e && (e = { + asObject: !1 + }), + this.select(function(e) { + return e.entities + }).pipe(ur(function() { + return t.getAll(e) + })) + } + , + Dd.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 d = 0, i = 0, l = a.length; i < l && "break" !== function(t) { + if (d === s) + return "break"; + var e = a[t] + , i = o[e]; + xo(n).every(function(e) { + return e(i, t) + }) && (r[e] = i, + d++) + }(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; + xo(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, + Sd(this.getValue(), e)); + var t, i + } + , + Dd.prototype.selectMany = function(e, i) { + return e && e.length ? this.select(function(e) { + return e.entities + }).pipe(ur(function(t) { + return n = function(e) { + return Td(e, i)(t) + } + , + e.reduce(function(e, t, i, r) { + t = n(t); + return void 0 !== t && e.push(t), + e + }, []); + var n + }), yd()) : Bi([]) + } + , + Dd.prototype.selectEntity = function(e, t) { + var i = e; + return Uo(e) && (i = function(e, t) { + var i, r; + try { + for (var n = pt(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(ur(Td(i, t)), Es()) + } + , + Dd.prototype.getEntity = function(e) { + return this.getValue().entities[e] + } + , + Dd.prototype.selectActiveId = function() { + return this.select(function(e) { + return e.active + }) + } + , + Dd.prototype.getActiveId = function() { + return this.getValue().active + } + , + Dd.prototype.selectActive = function(t) { + var i = this; + return No(this.getActive()) ? this.selectActiveId().pipe(Ra(function(e) { + return i.selectMany(e, t) + })) : this.selectActiveId().pipe(Ra(function(e) { + return i.selectEntity(e, t) + })) + } + , + Dd.prototype.getActive = function() { + var t = this + , e = this.getActiveId(); + return No(e) ? e.map(function(e) { + return t.getValue().entities[e] + }) : Yo(e) ? this.getEntity(e) : void 0 + } + , + Dd.prototype.selectCount = function(e) { + var t = this; + return this.select(function(e) { + return e.entities + }).pipe(ur(function() { + return t.getCount(e) + })) + } + , + Dd.prototype.getCount = function(e) { + return (Uo(e) ? this.getAll().filter(e) : this.getValue().ids).length + } + , + Dd.prototype.selectLast = function(e) { + return this.selectAt(function(e) { + return e[e.length - 1] + }, e) + } + , + Dd.prototype.selectFirst = function(e) { + return this.selectAt(function(e) { + return e[0] + }, e) + } + , + Dd.prototype.selectEntityAction = function(e) { + if (Po(e)) + return this.store.selectEntityAction$; + var t = No(e) ? function(e) { + return e + } + : function(e) { + return e.ids + } + , i = xo(e); + return this.store.selectEntityAction$.pipe(an(function(e) { + e = e.type; + return i.includes(e) + }), ur(function(e) { + return t(e) + })) + } + , + Dd.prototype.hasEntity = function(e) { + var t = this; + return Po(e) ? 0 < this.getValue().ids.length : Uo(e) ? this.getAll().some(e) : No(e) ? e.every(function(e) { + return e in t.getValue().entities + }) : e in this.getValue().entities + } + , + Dd.prototype.hasActive = function(e) { + var t = this.getValue().active + , i = Fo(e); + return Array.isArray(t) ? i ? t.includes(e) : 0 < t.length : i ? t === e : Fo(t) + } + , + Dd.prototype.createUIQuery = function() { + this.ui = new kd(this.__store__.ui) + } + , + Dd.prototype.selectAt = function(e, t) { + var i = this; + return this.select(function(e) { + return e.ids + }).pipe(ur(e), Es(), Ra(function(e) { + return i.selectEntity(e, t) + })) + } + , + Dd), kd = (lt(Cd, wd = Od), + Cd); + function Cd(e) { + return wd.call(this, e) || this + } + function Dd(e, t) { + void 0 === t && (t = {}); + var i = Ad.call(this, e) || this; + return i.options = t, + i.__store__ = e, + i + } + function Md(e, t) { + return 1 === t.split(".").length ? e : t.split(".").slice(1).join(".").split(".").reduce(function(e, t) { + return e && e[t] + }, e) + } + function Pd(e, t, r) { + var i = t.split("."); + if (1 === i.length) + return ut({}, e, r); + e = ut({}, e); + var n = i.length - 2; + return t.split(".").slice(1).reduce(function(e, t, i) { + return e[t] = i !== n ? ut({}, e[t]) : Array.isArray(e[t]) || !_o(e[t]) ? r : ut({}, e[t], r), + e && e[t] + }, e), + e + } + new Xi(1); + var xd, Rd, Ld, _d, A = (Fd.prototype.getQuery = function() { + return this.query + } + , + Fd.prototype.getStore = function() { + return this.getQuery().__store__ + } + , + Fd.prototype.isEntityBased = Yo, + Fd.prototype.selectSource = function(e, t) { + var i = this; + return this.isEntityBased(e) ? this.getQuery().selectEntity(e).pipe(Id) : t ? this.getQuery().select(function(e) { + return Md(e, i.withStoreName(t)) + }) : this.getQuery().select() + } + , + Fd.prototype.getSource = function(e, t) { + if (this.isEntityBased(e)) + return this.getQuery().getEntity(e); + e = this.getQuery().getValue(); + return t ? Md(e, this.withStoreName(t)) : e + } + , + Fd.prototype.withStoreName = function(e) { + return this.storeName + "." + e + } + , + Object.defineProperty(Fd.prototype, "storeName", { + get: function() { + return this.getStore().storeName + }, + enumerable: !0, + configurable: !0 + }), + Fd.prototype.updateStore = function(t, e, i) { + var r = this; + this.isEntityBased(e) ? this.getStore().update(e, t) : i ? this.getStore()._setState(function(e) { + return Pd(e, r.withStoreName(i), t) + }) : this.getStore()._setState(function(e) { + return ut({}, e, t) + }) + } + , + Fd.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() + }) + } + } + , + Fd), Nd = { + pagesControls: !1, + range: !1, + startWith: 1, + cacheTimeout: void 0, + clearStoreWithCache: !0 + }; + function Fd(e, t) { + this.query = e + } + function Bd(e, t, i) { + void 0 === i && (i = {}); + var r = xd.call(this, e) || this; + return r.query = e, + r.factoryFnOrPath = t, + r.params = i, + r.params = ut({ + debounceTime: 300, + formKey: "akitaForm", + emitEvent: !1, + arrControlFactory: function(e) { + return r.builder.control(e) + } + }, i), + r.isRootKeys = !1 === Yo(t), + r.isKeyBased = bd(t) || r.isRootKeys, + r + } + function Ud(e, t) { + void 0 === t && (t = {}); + var i = Rd.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(ss(0)), + i.config = Object.assign(Nd, t); + e = i.config, + t = e.startWith, + e = e.cacheTimeout; + return i.page = new gi(t), + e && (e instanceof Ut || "function" == typeof e.lift && "function" == typeof e.subscribe) && (i.clearCacheSubscription = e.subscribe(function() { + return i.clearCache() + })), + i + } + lt(Ud, Rd = A), + Object.defineProperty(Ud.prototype, "pageChanges", { + get: function() { + return this.page.asObservable() + }, + enumerable: !0, + configurable: !0 + }), + Object.defineProperty(Ud.prototype, "currentPage", { + get: function() { + return this.pagination.currentPage + }, + enumerable: !0, + configurable: !0 + }), + Object.defineProperty(Ud.prototype, "isFirst", { + get: function() { + return 1 === this.currentPage + }, + enumerable: !0, + configurable: !0 + }), + Object.defineProperty(Ud.prototype, "isLast", { + get: function() { + return this.currentPage === this.pagination.lastPage + }, + enumerable: !0, + configurable: !0 + }), + Ud.prototype.withControls = function() { + return this.config.pagesControls = !0, + this + } + , + Ud.prototype.withRange = function() { + return this.config.range = !0, + this + } + , + Ud.prototype.setLoading = function(e) { + void 0 === e && (e = !0), + this.getStore().setLoading(e) + } + , + Ud.prototype.update = function(e) { + this.pagination = e, + this.addPage(e.data) + } + , + Ud.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) + } + , + Ud.prototype.clearCache = function(e) { + void 0 === e && (e = {}), + this.initial || (Co("@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 + } + , + Ud.prototype.clearPage = function(e) { + this.pages.delete(e) + } + , + Ud.prototype.destroy = function(e) { + var t = void 0 === e ? {} : e + , e = t.clearCache + , t = t.currentPage; + this.clearCacheSubscription && this.clearCacheSubscription.unsubscribe(), + e && this.clearCache(), + $o(t) || this.setPage(t), + this.initial = !0 + } + , + Ud.prototype.isPageActive = function(e) { + return this.currentPage === e + } + , + Ud.prototype.setPage = function(e) { + e === this.currentPage && this.hasPage(e) || this.page.next(this.pagination.currentPage = e) + } + , + Ud.prototype.nextPage = function() { + this.currentPage !== this.pagination.lastPage && this.setPage(this.pagination.currentPage + 1) + } + , + Ud.prototype.prevPage = function() { + 1 < this.pagination.currentPage && this.setPage(this.pagination.currentPage - 1) + } + , + Ud.prototype.setLastPage = function() { + this.setPage(this.pagination.lastPage) + } + , + Ud.prototype.setFirstPage = function() { + this.setPage(1) + } + , + Ud.prototype.hasPage = function(e) { + return this.pages.has(e) + } + , + Ud.prototype.getPage = function(e) { + var t = this + , i = this.pagination.currentPage; + return this.hasPage(i) ? this.selectPage(i) : (this.setLoading(!0), + Lr(e()).pipe(Ra(function(e) { + return i = e.currentPage, + sd(function() { + t.setLoading(!1), + t.update(e) + }), + t.selectPage(i) + }))) + } + , + Ud.prototype.getQuery = function() { + return this.query + } + , + Ud.prototype.refreshCurrentPage = function() { + !1 === Po(this.currentPage) && (this.clearPage(this.currentPage), + this.setPage(this.currentPage)) + } + , + Ud.prototype.getFrom = function() { + return this.isFirst ? 1 : (this.currentPage - 1) * this.pagination.perPage + 1 + } + , + Ud.prototype.getTo = function() { + return this.isLast ? this.pagination.total : this.currentPage * this.pagination.perPage + } + , + Ud.prototype.selectPage = function(n) { + var s = this; + return this.query.selectAll({ + asObject: !0 + }).pipe(Cs(1), ur(function(t) { + var e = ut({}, 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 + })) + } + , + ct([(Ld = "@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 Co(Ld, _d), + r.apply(this, e) + } + , + i + } + ), ht("design:type", Function), ht("design:paramtypes", [Object]), ht("design:returntype", void 0)], Ud.prototype, "update", null), + lt(Bd, xd = A), + Bd.prototype.setForm = function(e, t) { + return this.form = e, + this.builder = t, + this.activate(), + this + } + , + Bd.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 ? Pd(this.getQuery().getValue(), this.getStore().storeName + "." + this.factoryFnOrPath, e) : ((t = {})[this.params.formKey] = e, + t); + this.updateStore(t) + } + , + Bd.prototype.cleanArray = function(e) { + for (; 0 !== e.length; ) + e.removeAt(0) + } + , + Bd.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 + }, {}) + } + , + Bd.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 = Md(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] || (Co("@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(Qn(this.params.debounceTime)).subscribe(function(t) { + var e; + Co("@PersistForm - Update"), + e = r.isKeyBased ? r.isRootKeys ? function(e) { + return ut({}, e, t) + } + : function(e) { + return Pd(e, i, t) + } + : function() { + var e; + return (e = {})[r.params.formKey] = t, + e + } + , + r.updateStore(e(r.getQuery().getValue())) + }) + } + , + Bd.prototype.destroy = function() { + this.formChanges && this.formChanges.unsubscribe(), + this.form = null, + this.builder = null + } + ; + var $d, Vd, Br = (jd.prototype.getEntity = function(e) { + return this.entities.get(e) + } + , + jd.prototype.hasEntity = function(e) { + return this.entities.has(e) + } + , + jd.prototype.removeEntity = function(e) { + return this.destroy(e), + this.entities.delete(e) + } + , + jd.prototype.createEntity = function(e, t) { + return this.entities.set(e, t) + } + , + jd.prototype.getIds = function() { + return $o(this.entityIds) ? this.query.getValue().ids : xo(this.entityIds) + } + , + jd.prototype.resolvedIds = function(e) { + return $o(e) ? this.getIds() : xo(e) + } + , + jd.prototype.rebase = function(i, r) { + var n = this; + if (void 0 === r && (r = {}), + Yo(i)) + if ($o(this.entityIds)) { + for (var e = 0, t = i.length; e < t; e++) { + var s, a = i[e]; + !1 === this.hasEntity(a) && (Uo(r.beforeAdd) && r.beforeAdd(a), + s = this.instantiatePlugin(a), + this.entities.set(a, s), + Uo(r.afterAdd) && r.afterAdd(s)) + } + this.entities.forEach(function(e, t) { + -1 === i.indexOf(t) && (Uo(r.beforeRemove) && r.beforeRemove(e), + n.removeEntity(t)) + }) + } else + for (var o = xo(this.entityIds), e = 0, t = o.length; e < t; e++) + a = o[e], + -1 < i.indexOf(a) && !1 === this.hasEntity(a) ? (Uo(r.beforeAdd) && r.beforeAdd(a), + s = this.instantiatePlugin(a), + this.entities.set(a, s), + Uo(r.afterAdd) && r.afterAdd(s)) : this.entities.forEach(function(e, t) { + -1 === i.indexOf(t) && !0 === n.hasEntity(t) && (Uo(r.beforeRemove) && r.beforeRemove(e), + n.removeEntity(t)) + }); + else + this.getIds().forEach(function(e) { + n.hasEntity(e) || n.createEntity(e, n.instantiatePlugin(e)) + }) + } + , + jd.prototype.selectIds = function() { + return this.query.select(function(e) { + return e.ids + }) + } + , + jd.prototype.activate = function(e) { + this.rebase(e) + } + , + jd.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)) + } + } + , + jd), Kd = (lt(Hd, $d = A), + Object.defineProperty(Hd.prototype, "hasPast$", { + get: function() { + return this._hasPast$ + }, + enumerable: !0, + configurable: !0 + }), + Object.defineProperty(Hd.prototype, "hasFuture$", { + get: function() { + return this._hasFuture$ + }, + enumerable: !0, + configurable: !0 + }), + Object.defineProperty(Hd.prototype, "hasPast", { + get: function() { + return 0 < this.history.past.length + }, + enumerable: !0, + configurable: !0 + }), + Object.defineProperty(Hd.prototype, "hasFuture", { + get: function() { + return 0 < this.history.future.length + }, + enumerable: !0, + configurable: !0 + }), + Object.defineProperty(Hd.prototype, "property", { + get: function() { + return this.params.watchProperty + }, + enumerable: !0, + configurable: !0 + }), + Hd.prototype.updateHasHistory = function() { + this.hasFutureSubject.next(this.hasFuture), + this.hasPastSubject.next(this.hasPast) + } + , + Hd.prototype.activate = function() { + var r = this; + this.hasPastSubject = new gi(!1), + this._hasPast$ = this.hasPastSubject.asObservable().pipe(Es()), + this.hasFutureSubject = new gi(!1), + this._hasFuture$ = this.hasFutureSubject.asObservable().pipe(Es()), + this.history.present = this.getSource(this._entityId, this.property), + this.subscription = this.selectSource(this._entityId, this.property).pipe(ca()).subscribe(function(e) { + var t = ft(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 = mt(r.history.past, [i]), + r.history.present = e, + r.updateHasHistory())) + }) + } + , + Hd.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 = mt([t], this.history.future), + this.update()) + } + , + Hd.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 = mt(e, [t]), + this.history.present = i, + this.history.future = r, + this.update("Redo")) + } + , + Hd.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 = mt(t.slice(e + 1), [i], n), + e = t[e], + this.history.past = r, + this.history.present = e, + this.history.future = n, + this.update()) + } + , + Hd.prototype.jumpToFuture = function(e) { + var t, i, r; + e < 0 || e >= this.history.future.length || (i = (r = this.history).past, + t = r.future, + i = mt(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")) + } + , + Hd.prototype.jump = function(e) { + return 0 < e ? this.jumpToFuture(e - 1) : e < 0 ? this.jumpToPast(this.history.past.length + e) : void 0 + } + , + Hd.prototype.clear = function(e) { + this.history = Uo(e) ? e(this.history) : { + past: [], + present: null, + future: [] + }, + this.updateHasHistory() + } + , + Hd.prototype.destroy = function(e) { + (e = void 0 === e ? !1 : e) && this.clear(), + this.subscription.unsubscribe() + } + , + Hd.prototype.ignoreNext = function() { + this.skip = !0 + } + , + Hd.prototype.update = function(e) { + void 0 === e && (e = "Undo"), + this.skipUpdate = !0, + Co("@StateHistory - " + e), + this.updateStore(this.history.present, this._entityId, this.property), + this.updateHasHistory(), + this.skipUpdate = !1 + } + , + Hd); + function Hd(e, t, i) { + void 0 === t && (t = {}); + var r = $d.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 jd(e, t) { + this.query = e, + this.entityIds = t, + this.entities = new Map + } + function qd(e, t) { + var i = Vd.call(this, e, (t = void 0 === t ? {} : t).entityIds) || this; + return i.query = e, + (i.params = t).maxAge = Yo(t.maxAge) ? t.maxAge : 10, + i.activate(), + i.selectIds().pipe(Oa(1)).subscribe(function(e) { + return i.activate(e) + }), + i + } + lt(qd, Vd = Br), + qd.prototype.redo = function(e) { + this.forEachId(e, function(e) { + return e.redo() + }) + } + , + qd.prototype.undo = function(e) { + this.forEachId(e, function(e) { + return e.undo() + }) + } + , + qd.prototype.hasPast = function(e) { + if (this.hasEntity(e)) + return this.getEntity(e).hasPast + } + , + qd.prototype.hasFuture = function(e) { + if (this.hasEntity(e)) + return this.getEntity(e).hasFuture + } + , + qd.prototype.jumpToFuture = function(e, t) { + this.forEachId(e, function(e) { + return e.jumpToFuture(t) + }) + } + , + qd.prototype.jumpToPast = function(e, t) { + this.forEachId(e, function(e) { + return e.jumpToPast(t) + }) + } + , + qd.prototype.clear = function(e) { + this.forEachId(e, function(e) { + return e.clear() + }) + } + , + qd.prototype.destroy = function(e, t) { + void 0 === t && (t = !1), + this.forEachId(e, function(e) { + return e.destroy(t) + }) + } + , + qd.prototype.ignoreNext = function(e) { + this.forEachId(e, function(e) { + return e.ignoreNext() + }) + } + , + qd.prototype.instantiatePlugin = function(e) { + return new Kd(this.query,this.params,e) + } + ; + var Qd = { + comparator: function(e, t) { + return JSON.stringify(e) !== JSON.stringify(t) + } + }; + function Gd(e, t) { + return t.split(".").reduce(function(e, t) { + return e && "undefined" !== e[t] ? e[t] : void 0 + }, e) + } + var Wd, zd, Xd = (lt(Yd, Wd = A), + Yd.prototype.reset = function(e) { + var t = this.head; + Uo((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())), + Co("@DirtyCheck - Revert"), + this.updateStore(t, this._entityId), + this._reset.next() + } + , + Yd.prototype.setHead = function() { + return this.active ? this.head = this._getHead() : (this.activate(), + this.active = !0), + this.updateDirtiness(!1), + this + } + , + Yd.prototype.isDirty = function() { + return !!this.dirty.value + } + , + Yd.prototype.hasHead = function() { + return !!this.getHead() + } + , + Yd.prototype.destroy = function() { + this.head = null, + this.subscription && this.subscription.unsubscribe(), + this._reset && this._reset.complete() + } + , + Yd.prototype.isPathDirty = function(e) { + var t = this.getHead() + , i = Gd(this.getQuery().getValue(), e) + , e = Gd(t, e); + return this.params.comparator(i, e) + } + , + Yd.prototype.getHead = function() { + return this.head + } + , + Yd.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(ur(function(e) { + return { + val: e, + __akitaKey: t + } + })) + }) : [this.selectSource(this._entityId)]; + this.subscription = Cr.apply(void 0, mt(e)).pipe(Oa(1)).subscribe(function(e) { + $o(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)) + }) + } + , + Yd.prototype.updateDirtiness = function(e) { + this.dirty.next(e) + } + , + Yd.prototype._getHead = function() { + var e = this.getSource(this._entityId); + return e = this.params.watchProperty ? this.getWatchedValues(e) : e + } + , + Yd.prototype.getWatchedValues = function(i) { + return this.params.watchProperty.reduce(function(e, t) { + return e[t] = i[t], + e + }, {}) + } + , + Yd); + function Yd(e, t, i) { + var r = Wd.call(this, e) || this; + return r.query = e, + r.params = t, + r._entityId = i, + r.dirty = new gi(!1), + r.active = !1, + r._reset = new zt, + r.isDirty$ = r.dirty.asObservable().pipe(Es()), + r.reset$ = r._reset.asObservable(), + r.params = ut({}, Qd, t), + r.params.watchProperty && (t = xo(r.params.watchProperty), + e instanceof Od && t.includes("entities") && !t.includes("ids") && t.push("ids"), + r.params.watchProperty = t), + r + } + function Jd() { + return Math.random().toString(36).slice(2) + } + function Zd(e) { + return Cr(e).pipe(Bn(0)) + } + function el(e, t) { + var i = zd.call(this, e, (t = void 0 === t ? {} : t).entityIds) || this; + return i.query = e, + i.params = t, + i._someDirty = new zt, + i.someDirty$ = nn(i.query.select(function(e) { + return e.entities + }), i._someDirty.asObservable()).pipe(Bn(0), ur(function() { + return i.checkSomeDirty() + })), + i.params = ut({}, Qd, t), + i.activate(), + i.selectIds().pipe(Oa(1)).subscribe(function(e) { + zd.prototype.rebase.call(i, e, { + afterAdd: function(e) { + return e.setHead() + } + }) + }), + i + } + lt(el, zd = Br), + el.prototype.setHead = function(e) { + if (this.params.entityIds && e) { + var t = xo(e); + if (!1 === xo(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 + } + , + el.prototype.hasHead = function(e) { + return !!this.entities.has(e) && this.getEntity(e).hasHead() + } + , + el.prototype.reset = function(e, t) { + void 0 === t && (t = {}), + this.forEachId(e, function(e) { + return e.reset(t) + }) + } + , + el.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 + } + , + el.prototype.someDirty = function() { + return this.checkSomeDirty() + } + , + el.prototype.isPathDirty = function(e, t) { + if (this.entities.has(e)) { + var i = this.getEntity(e).getHead() + , e = Gd(this.query.getEntity(e), t) + , t = Gd(i, t); + return this.params.comparator(e, t) + } + return null + } + , + el.prototype.destroy = function(e) { + this.forEachId(e, function(e) { + return e.destroy() + }), + e || this._someDirty.complete() + } + , + el.prototype.instantiatePlugin = function(e) { + return new Xd(this.query,this.params,e) + } + , + el.prototype.checkSomeDirty = function() { + var e, t, i = this.resolvedIds(); + try { + for (var r = pt(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 + } + , + (gc = gc || {}).Update = "UPDATE", + {}[gc.Update] = "update", + (gr = gu = gu || {}).Update = "UPDATE", + gr.AddEntities = "ADD_ENTITIES", + gr.SetEntities = "SET_ENTITIES", + gr.UpdateEntities = "UPDATE_ENTITIES", + gr.RemoveEntities = "REMOVE_ENTITIES", + gr.UpsertEntities = "UPSERT_ENTITIES", + gr.UpsertManyEntities = "UPSERT_MANY_ENTITIES", + (mu = {})[gu.Update] = "update", + mu[gu.AddEntities] = "add", + mu[gu.SetEntities] = "set", + mu[gu.UpdateEntities] = "update", + mu[gu.RemoveEntities] = "remove", + mu[gu.UpsertEntities] = "upsert", + mu[gu.UpsertManyEntities] = "upsertMany"; + const tl = /^((?:[^\/;?#]+:)?)(\/\/[^\/\;?#]*)?(.*?)??(;.*?)?(\?.*?)?(#.*?)?$/ + , il = /^([^\/;?#]*)(.*)$/ + , rl = /(?:\/|^)\.(?=\/)/g + , nl = /(?:\/|^)\.\.\/(?!\.\.\/).*?(?=\/)/g + , sl = { + buildAbsoluteURL: function(e, t, i) { + if (i = i || {}, + e = e.trim(), + !(t = t.trim())) { + if (!i.alwaysNormalize) + return e; + const t = sl.parseURL(e); + if (!t) + throw new Error("Error trying to parse base URL."); + return t.path = sl.normalizePath(t.path), + sl.buildURLFromParts(t) + } + const r = sl.parseURL(t); + if (!r) + throw new Error("Error trying to parse relative URL."); + if (r.scheme) + return i.alwaysNormalize ? (r.path = sl.normalizePath(r.path), + sl.buildURLFromParts(r)) : t; + const n = sl.parseURL(e); + if (!n) + throw new Error("Error trying to parse base URL."); + if (!n.netLoc && n.path && "/" !== n.path[0]) { + const e = il.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 = sl.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 ? sl.normalizePath(r.path) : r.path), + sl.buildURLFromParts(s) + }, + parseURL: function(e) { + e = tl.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(rl, ""); e.length !== (e = e.replace(nl, "")).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 al, ol, dl, ll, ul, cl, hl, pl, fl = sl; + function ml(e) { + return null != e && !e.startsWith("http://") && !e.startsWith("https://") + } + function gl(e) { + return null == e || ml(e) ? null : sl.getHostName(e) + } + function yl(e, t) { + return !e || e === gl(t) + } + (w = al = al || {})[w.DOVI = 4] = "DOVI", + w[w.HEVC = 3] = "HEVC", + w[w.VP09 = 2] = "VP09", + w[w.AVC = 1] = "AVC", + w[w.UNKNOWN = 0] = "UNKNOWN", + (yi = ol = ol || {})[yi.PQ = 3] = "PQ", + yi[yi.HLG = 2] = "HLG", + yi[yi.SDR = 1] = "SDR", + yi[yi.UNKNOWN = 0] = "UNKNOWN", + (A = dl = dl || {})[A.ALAC = 7] = "ALAC", + A[A.FLAC = 6] = "FLAC", + A[A.EC3 = 5] = "EC3", + A[A.AC3 = 4] = "AC3", + A[A.XHEAAC = 3] = "XHEAAC", + A[A.AAC = 2] = "AAC", + A[A.MP3 = 1] = "MP3", + A[A.UNKNOWN = 0] = "UNKNOWN", + (Br = ll = ll || {})[Br.VALID = 1] = "VALID", + Br[Br.INVALID = 0] = "INVALID"; + const vl = ["via", "x-apple-request-uuid"] + , Sl = { + maxNumRetry: 4, + retryDelayMs: 0, + maxRetryDelayMs: 0 + } + , bl = { + maxNumRetry: 6, + retryDelayMs: 1e3, + maxRetryDelayMs: 8e3 + } + , Tl = { + maxNumRetry: 0, + retryDelayMs: 0, + maxRetryDelayMs: 0 + } + , El = { + default: { + maxTimeToFirstByteMs: 5e3, + maxLoadTimeMs: 2e4, + autoRetry: !1, + timeoutRetry: Tl, + errorRetry: Tl + }, + customURL: { + maxTimeToFirstByteMs: 1e4, + maxLoadTimeMs: 2e4, + autoRetry: !1, + timeoutRetry: Tl, + errorRetry: Tl + } + } + , Il = { + maxNumRetry: 8, + retryDelayMs: 1e3, + maxRetryDelayMs: 2e4, + backoff: "linear" + } + , wl = Object.assign(Object.assign({}, Il), { + maxNumRetry: 1 + }) + , Al = { + 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, + discontinuitySeekTolerance: 2, + 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, + allowFastSwitchUp: !1, + minMatchGroupDuration: 5, + desiredIframeFPS: 8, + initialIframeFPS: 6, + minRemainingTimeInMediaPipeline: 3, + leftMediaTimeToAutoPause: 10, + startTargetDurationFactor: .9, + enableWorker: !0, + enableWebCrypto: !0, + keySystemPreference: void 0, + clearMediaKeysOnPromise: !0, + useMultipleKeySessions: !1, + enablePlayReadyKeySystem: !1, + useMediaKeySystemAccessFilter: !1, + playReadyMessageFormat: "utf16", + startLevel: void 0, + livePlaylistRefreshDelay: 2500, + liveMinPlayingBufferLen: 5, + enableIFramePreloading: !0, + useMediaCapabilities: !1, + enableID3Cues: !0, + certLoadPolicy: El, + keyLoadPolicy: { + default: { + maxTimeToFirstByteMs: 5e3, + maxLoadTimeMs: 2e4, + autoRetry: !1, + timeoutRetry: wl, + errorRetry: Il + }, + customURL: { + maxTimeToFirstByteMs: 1e4, + maxLoadTimeMs: 2e4, + autoRetry: !1, + timeoutRetry: wl, + errorRetry: Il + } + }, + 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: Sl, + errorRetry: bl, + forceContentLenCheckIfNoHeader: !1, + reportCDNServer: !0 + }, + customURL: { + maxTimeToFirstByteMs: 1e4, + maxLoadTimeMs: 2e4, + autoRetry: !1, + timeoutRetry: Sl, + errorRetry: bl, + 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, + earlyFragTolerance: 7, + vttConcurrentLoadCount: 1, + trottleCheckInterval: 2e3, + subtitleLeadTime: 30, + 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([dl.ALAC, dl.FLAC, dl.XHEAAC]), + useHighestVideoCodecPrivate: !0, + sessionDataAutoLoad: { + "com.apple.hls.chapters": !0 + } + } + , Ol = Object.assign(Object.assign({}, { + itemId: "Nah", + mediaOptionId: "Nah" + }), { + mediaOptionType: void 0 + }) + , kl = e=>{ + var {itemId: t, mediaOptionId: e} = e; + return "Nah" !== t && "Nah" !== e + } + ; + (gc = ul = ul || {})[gc.Variant = 0] = "Variant", + gc[gc.AltAudio = 1] = "AltAudio", + gc[gc.Subtitle = 2] = "Subtitle"; + const Cl = ["variant", "altAudio", "subtitle"] + , Dl = [ul.Variant, ul.AltAudio, ul.Subtitle] + , Ml = [ul.Variant, ul.AltAudio]; + (gr = cl = cl || {})[gr.Variant = 0] = "Variant", + gr[gr.AltAudio = 1] = "AltAudio"; + const Pl = ["variant", "altAudio"]; + function xl(e) { + switch (e) { + case ul.Variant: + return cl.Variant; + case ul.AltAudio: + return cl.AltAudio; + default: + return null + } + } + function Rl(e) { + return e === cl.Variant ? ul.Variant : ul.AltAudio + } + (mu = hl = hl || {})[mu.NO = 0] = "NO", + mu[mu.YES = 1] = "YES", + (gu = pl = pl || {}).UNKNOWN = "unkn", + gu.VIDEO = "vide", + gu.AUDIO = "soun", + gu.SUBTITLE = "sbtl", + gu.CLOSEDCAPTION = "clcp"; + const Ll = { + 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 _l = Ll + , Nl = { + 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 : Ll.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 Fl = { + 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 = Ll.search(e, Fl.startFragmentInCC.bind(null, e, t)), + n = Ll.search(e, Fl.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} = Fl.findStartEndFragmentsInCC(e, t, i); + return { + start: t.start, + end: i.start + i.duration + } + }, + getTimeRangeForCC: function(e, t, i) { + var {startFrag: t, endFrag: i} = Fl.findStartEndFragmentsInCC(e, t, i); + let r = []; + return t && i && (r = [t.start, i.start + i.duration]), + r + }, + snapToCCTimeRange: function(e, t, i, r) { + r = Fl.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 = Fl.getTimeRangeForCC(e, i, r); + if (e) { + const s = Fl.getTimeRangeForCC(t, i, r); + n = null != s && s.length ? Math.max(s[0], e[0]) : e[0] + } + } + return n + }, + ccForTime(e, t) { + t = Ll.search(e, Nl.fragmentWithinToleranceTest.bind(null, t, 0)); + return null == t ? void 0 : t.discoSeqNum + } + }; + var Bl = Fl; + const Ul = Bi(void 0); + function $l(e, t, i=1) { + return e.pipe(an(t), Cs(i)) + } + function Vl(e, t) { + var i = e.timeline; + return { + seconds: (e.seconds - i.rootTimeSeconds) / i.rate * t.rate + t.rootTimeSeconds, + timeline: t + } + } + class Kl { + 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 + }) + } + } + stop() { + this.isStarted && (this.stopTime = this.getCurrentTime()), + this.hostClock = null, + this._timeline = null + } + get timeline() { + return this._timeline + } + getCurrentTime() { + return this.stopTime || Vl(this.hostClock.getCurrentTime(), this.timeline) + } + } + class Hl { + constructor(e) { + this._timeline = e, + this.lastTimeSeconds = e.rootTimeSeconds + } + get timeline() { + return Object.assign({}, this._timeline) + } + getCurrentTime() { + return { + seconds: this.lastTimeSeconds, + timeline: Object.assign({}, this._timeline) + } + } + } + const jl = { + name: "ifm" + }; + class ql { + constructor(e, t) { + this.config = e, + this.logger = t, + this.scaledFragments = [], + this.iframeClock = new Kl, + this.hasMore$ = new gi(!0), + this.logger = t.child(jl) + } + 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 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 + } + 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 = Ll.search(e, Nl.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 = Bl.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 Hl({ + 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 d, l = Math.max(0, Math.min(r.mediaSeqNum - e[0].mediaSeqNum + o, e.length - 1)); + if (r.mediaSeqNum !== e[l].mediaSeqNum) + do { + d = e[l]; + const i = n.forward ? d.start : d.start + d.duration; + if (Vl({ + seconds: i, + timeline: a + }, s.timeline).seconds >= t && (n.forward && i >= this.iframeClockTimeSeconds || !n.forward && i <= this.iframeClockTimeSeconds)) + break + } while (l += o, + 0 < l && l < e.length); + return d || (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: d + } + } + 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 = Bl.getTimeRangeDictForCC(e, i.discoSeqNum, this.logger); + var s = r.getCurrentTime().seconds + , t = n.timeline.rate; + return 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(), + $l(this.hasMore$, e=>!0 === e).pipe(Ja(()=>{} + ))) : Ul + } + 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 + } + } + var Ql = {} + , w = {}; + Object.defineProperty(w, "__esModule", { + value: !0 + }), + w.hide = void 0, + w.hide = function() { + return function(e) { + return e.lift(new Gl) + } + } + ; + var Gl = (Wl.prototype.call = function(e, t) { + return t.subscribe(e) + } + , + Wl) + , yi = {}; + function Wl() { + this.hide = !0 + } + Object.defineProperty(yi, "__esModule", { + value: !0 + }), + yi.tag = void 0, + yi.tag = function(t) { + return function(e) { + return e.lift(new Jl(t)) + } + } + ; + var zl, Xl, Yl, Jl = (Zl.prototype.call = function(e, t) { + return t.subscribe(e) + } + , + Zl); + function Zl(e) { + this.tag = e + } + function eu(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 + } + A = Ql, + Yl = e && e.__createBinding || (Object.create ? function(e, t, i, r) { + void 0 === r && (r = i), + Object.defineProperty(e, r, { + enumerable: !0, + get: function() { + return t[i] + } + }) + } + : function(e, t, i, r) { + e[r = void 0 === r ? i : r] = t[i] + } + ), + Br = e && e.__exportStar || function(e, t) { + for (var i in e) + "default" === i || t.hasOwnProperty(i) || Yl(t, e, i) + } + , + Object.defineProperty(A, "__esModule", { + value: !0 + }), + Br(w, A), + Br(yi, A), + (gc = zl = zl || {}).MustRequestResponse = "MustRequestResponse", + gc.WaitingForKeyResponse = "WaitingForKeyResponse", + gc.GotKeyResponse = "GotKeyResponse"; + class tu extends Error { + constructor(e, t) { + super(e), + this.code = t + } + } + class iu 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 ru extends iu { + constructor(e, t, i, r, n) { + super(n ? "manifestLoadTimeOut" : "manifestLoadError", e, t, i, r, n) + } + } + class nu extends iu { + 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 ul.Variant: + this.details = n ? "levelLoadTimeOut" : N; + break; + case ul.AltAudio: + this.details = n ? "audioTrackLoadTimeOut" : "audioTrackLoadError"; + break; + case ul.Subtitle: + this.details = n ? "subtitleTrackLoadTimeout" : "subtitleTrackLoadError" + } + } + } + class su extends iu { + constructor(e, t, i, r) { + super("sessionDataLoadError", e, t, i, r, !1) + } + } + class au extends iu { + 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 ou extends or { + constructor(e, t, i) { + super(), + this.message = e, + this.code = t, + this.stats = i + } + } + class du extends iu { + constructor(e, t, i) { + super("fragAbortError", !1, "Fragment abort", 0, i, !1), + this.candidateMediaOptionId = t, + this.mediaOptionId = e.mediaOptionId, + this.mediaOptionType = e.mediaOptionType + } + } + class lu extends iu { + constructor(e, t, i, r=[]) { + super("keyLoadTimeOut", !1, e, i.code, i, !0), + this.keyuri = t, + this.response = i, + this.mediaOptionIds = r + } + } + (gr = Xl = Xl || {})[gr.InvalidState = 0] = "InvalidState", + gr[gr.Abort = 1] = "Abort", + gr[gr.OutputRestricted = 2] = "OutputRestricted", + gr[gr.AlreadyFailedKey = 3] = "AlreadyFailedKey", + gr[gr.HttpError = 4] = "HttpError", + gr[gr.InternalError = 5] = "InternalError", + gr[gr.LicenseServerError = 6] = "LicenseServerError", + gr[gr.InsufficientCPC = 7] = "InsufficientCPC"; + class uu extends iu { + 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 cu 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 hu(e, t) { + return e instanceof uu ? new uu(e.message,e.keyuri,e.code,e.response,e.isOkToRetry,e.keyErrorReason,e.fatal,t) : e instanceof lu ? new lu(e.message,e.keyuri,$.CryptResponseReceivedSlowly,t) : e ? new V(e.fatal,e.reason,$.InternalError) : null + } + const pu = { + id: "fairplaystreaming", + systemStringPrefix: "com.apple.fps", + keyFormatString: "com.apple.streamingkeydelivery", + securityLevels: { + AppleBaseline: 0, + AppleMain: 1, + Main: 1, + Baseline: 0 + } + }; + class fu extends Od { + constructor(e) { + super(e), + this.store = e + } + get unresolvedUriLoading$() { + return this.selectEntityAction(To.Add).pipe(ur(e=>e.map(e=>this.getEntity(e)))) + } + } + var mu = {}; + Object.defineProperty(mu, "__esModule", { + value: !0 + }); + var gu = "undefined" != typeof Symbol && "symbol" == typeof Symbol("x") + , yu = "undefined" != typeof Map + , vu = "undefined" != typeof Set + , Su = "undefined" != typeof Proxy && void 0 !== Proxy.revocable && "undefined" != typeof Reflect + , bu = gu ? Symbol.for("immer-nothing") : ((yc = {})["immer-nothing"] = !0, + yc) + , Tu = gu ? Symbol.for("immer-draftable") : "__$immer_draftable" + , Eu = gu ? Symbol.for("immer-state") : "__$immer_state" + , Iu = "undefined" != typeof Symbol && Symbol.iterator || "@@iterator" + , wu = { + 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 Au(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 = wu[e] + , e = n ? "function" == typeof n ? n.apply(null, i) : n : "unknown error nr: " + e; + throw new Error("[Immer] " + e) + } + function Ou(e) { + return !!e && !!e[Eu] + } + function ku(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[Tu] || !!t.constructor[Tu] || Nu(t) || Fu(t)) + } + var Cu = "undefined" != typeof Reflect && Reflect.ownKeys ? Reflect.ownKeys : void 0 !== Object.getOwnPropertySymbols ? function(e) { + return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e)) + } + : Object.getOwnPropertyNames + , Du = Object.getOwnPropertyDescriptors || function(t) { + var i = {}; + return Cu(t).forEach(function(e) { + i[e] = Object.getOwnPropertyDescriptor(t, e) + }), + i + } + ; + function Mu(i, r, t) { + void 0 === t && (t = !1), + 0 === Pu(i) ? (t ? Object.keys : Cu)(i).forEach(function(e) { + t && "symbol" == typeof e || r(e, i[e], i) + }) : i.forEach(function(e, t) { + return r(t, e, i) + }) + } + function Pu(e) { + var t = e[Eu]; + return t ? 3 < t.type_ ? t.type_ - 4 : t.type_ : Array.isArray(e) ? 1 : Nu(e) ? 2 : Fu(e) ? 3 : 0 + } + function xu(e, t) { + return 2 === Pu(e) ? e.has(t) : Object.prototype.hasOwnProperty.call(e, t) + } + function Ru(e, t) { + return 2 === Pu(e) ? e.get(t) : e[t] + } + function Lu(e, t, i) { + var r = Pu(e); + 2 === r ? e.set(t, i) : 3 === r ? (e.delete(t), + e.add(i)) : e[t] = i + } + function _u(e, t) { + return e === t ? 0 !== e || 1 / e == 1 / t : e != e && t != t + } + function Nu(e) { + return yu && e instanceof Map + } + function Fu(e) { + return vu && e instanceof Set + } + function Bu(e) { + return e.copy_ || e.base_ + } + function Uu(e) { + if (Array.isArray(e)) + return Array.prototype.slice.call(e); + var t = Du(e); + delete t[Eu]; + for (var i = Cu(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 $u(e, t) { + Ku(e) || Ou(e) || !ku(e) || (1 < Pu(e) && (e.set = e.add = e.clear = e.delete = Vu), + Object.freeze(e), + t && Mu(e, function(e, t) { + return $u(t, !0) + }, !0)) + } + function Vu() { + Au(2) + } + function Ku(e) { + return null == e || "object" != typeof e || Object.isFrozen(e) + } + var Hu, ju = {}; + function qu(e) { + var t = ju[e]; + return t || Au(18, e), + t + } + function Qu(e, t) { + ju[e] || (ju[e] = t) + } + function Gu() { + return Hu || Au(0), + Hu + } + function Wu(e, t) { + t && (qu("Patches"), + e.patches_ = [], + e.inversePatches_ = [], + e.patchListener_ = t) + } + function zu(e) { + Xu(e), + e.drafts_.forEach(Ju), + e.drafts_ = null + } + function Xu(e) { + e === Hu && (Hu = e.parent_) + } + function Yu(e) { + return Hu = { + drafts_: [], + parent_: Hu, + immer_: e, + canAutoFreeze_: !0, + unfinalizedDrafts_: 0 + } + } + function Ju(e) { + e = e[Eu]; + 0 === e.type_ || 1 === e.type_ ? e.revoke_() : e.revoked_ = !0 + } + function Zu(e, t) { + t.unfinalizedDrafts_ = t.drafts_.length; + var i = t.drafts_[0] + , r = void 0 !== e && e !== i; + return t.immer_.useProxies_ || qu("ES5").willFinalizeES5_(t, e, r), + r ? (i[Eu].modified_ && (zu(t), + Au(4)), + ku(e) && (e = ec(t, e), + t.parent_ || ic(t, e)), + t.patches_ && qu("Patches").generateReplacementPatches_(i[Eu], e, t.patches_, t.inversePatches_)) : e = ec(t, i, []), + zu(t), + t.patches_ && t.patchListener_(t.patches_, t.inversePatches_), + e !== bu ? e : void 0 + } + function ec(i, r, n) { + if (Ku(r)) + return r; + var s, a = r[Eu]; + 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_ = Uu(a.draft_) : a.copy_, + Mu(3 === a.type_ ? new Set(s) : s, function(e, t) { + return tc(i, a, s, e, t, n) + }), + ic(i, s, !1), + n && i.patches_ && qu("Patches").generatePatches_(a, n, i.patches_, i.inversePatches_)), + a.copy_) : (ic(i, a.base_, !0), + a.base_) : (Mu(r, function(e, t) { + return tc(i, a, r, e, t, n) + }, !0), + r) + } + function tc(e, t, i, r, n, s) { + if (n === i && Au(5), + Ou(n)) { + s = ec(e, n, s && t && 3 !== t.type_ && !xu(t.assigned_, r) ? s.concat(r) : void 0); + if (Lu(i, r, s), + !Ou(s)) + return; + e.canAutoFreeze_ = !1 + } + ku(n) && !Ku(n) && (!e.immer_.autoFreeze_ && e.unfinalizedDrafts_ < 1 || (ec(e, n), + t && t.scope_.parent_ || ic(e, n))) + } + function ic(e, t, i) { + void 0 === i && (i = !1), + e.immer_.autoFreeze_ && e.canAutoFreeze_ && $u(t, i) + } + var rc = { + get: function(e, t) { + if (t === Eu) + return e; + var i, r, n = Bu(e); + if (!xu(n, t)) + return i = e, + (r = ac(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_ && ku(n) && n === sc(e.base_, t) ? (dc(e), + e.copy_[t] = uc(e.scope_.immer_, n, e)) : n + }, + has: function(e, t) { + return t in Bu(e) + }, + ownKeys: function(e) { + return Reflect.ownKeys(Bu(e)) + }, + set: function(e, t, i) { + var r = ac(Bu(e), t); + if (null != r && r.set) + return r.set.call(e.draft_, i), + !0; + if (!e.modified_) { + var n = sc(Bu(e), t) + , r = null == n ? void 0 : n[Eu]; + if (r && r.base_ === i) + return e.copy_[t] = i, + !(e.assigned_[t] = !1); + if (_u(i, n) && (void 0 !== i || xu(e.base_, t))) + return !0; + dc(e), + oc(e) + } + return e.copy_[t] = i, + e.assigned_[t] = !0 + }, + deleteProperty: function(e, t) { + return void 0 !== sc(e.base_, t) || t in e.base_ ? (e.assigned_[t] = !1, + dc(e), + oc(e)) : delete e.assigned_[t], + e.copy_ && delete e.copy_[t], + !0 + }, + getOwnPropertyDescriptor: function(e, t) { + var i = Bu(e) + , r = Reflect.getOwnPropertyDescriptor(i, t); + return r && { + writable: !0, + configurable: 1 !== e.type_ || "length" !== t, + enumerable: r.enumerable, + value: i[t] + } + }, + defineProperty: function() { + Au(11) + }, + getPrototypeOf: function(e) { + return Object.getPrototypeOf(e.base_) + }, + setPrototypeOf: function() { + Au(12) + } + } + , nc = {}; + function sc(e, t) { + var i = e[Eu]; + return (i ? Bu(i) : e)[t] + } + function ac(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 oc(e) { + e.modified_ || (e.modified_ = !0, + e.parent_ && oc(e.parent_)) + } + function dc(e) { + e.copy_ || (e.copy_ = Uu(e.base_)) + } + Mu(rc, function(e, t) { + nc[e] = function() { + return arguments[0] = arguments[0][0], + t.apply(this, arguments) + } + }), + nc.deleteProperty = function(e, t) { + return isNaN(parseInt(t)) && Au(13), + rc.deleteProperty.call(this, e[0], t) + } + , + nc.set = function(e, t, i) { + return "length" !== t && isNaN(parseInt(t)) && Au(14), + rc.set.call(this, e[0], t, i, e[0]) + } + ; + (w = lc.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 && Au(6), + void 0 !== t && "function" != typeof t && Au(7), + ku(e)) { + var r = Yu(this) + , n = uc(this, e, void 0) + , d = !0; + try { + i = s(n), + d = !1 + } finally { + (d ? zu : Xu)(r) + } + return "undefined" != typeof Promise && i instanceof Promise ? i.then(function(e) { + return Wu(r, t), + Zu(e, r) + }, function(e) { + throw zu(r), + e + }) : (Wu(r, t), + Zu(i, r)) + } + if (!e || "object" != typeof e) + return (i = s(e)) === bu ? void 0 : (void 0 === i && (i = e), + this.autoFreeze_ && $u(i, !0), + i); + Au(21, e) + } + , + w.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] + } + , + w.createDraft = function(e) { + ku(e) || Au(8), + Ou(e) && (e = cc(e)); + var t = Yu(this) + , e = uc(this, e, void 0); + return e[Eu].isManual_ = !0, + Xu(t), + e + } + , + w.finishDraft = function(e, t) { + e = e && e[Eu]; + e && e.isManual_ || Au(9), + e.finalized_ && Au(10); + e = e.scope_; + return Wu(e, t), + Zu(void 0, e) + } + , + w.setAutoFreeze = function(e) { + this.autoFreeze_ = e + } + , + w.setUseProxies = function(e) { + e && !Su && Au(20), + this.useProxies_ = e + } + , + w.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 = qu("Patches").applyPatches_; + return Ou(e) ? n(e, t) : this.produce(e, function(e) { + return n(e, t.slice(i + 1)) + }) + } + , + Br = lc; + function lc(e) { + this.useProxies_ = Su, + 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 uc(e, t, i) { + t = Nu(t) ? qu("MapSet").proxyMap_(t, i) : Fu(t) ? qu("MapSet").proxySet_(t, i) : e.useProxies_ ? function(e, t) { + var i = Array.isArray(e) + , r = { + type_: i ? 1 : 0, + scope_: t ? t.scope_ : Gu(), + modified_: !1, + finalized_: !1, + assigned_: {}, + parent_: t, + base_: e, + draft_: null, + copy_: null, + revoke_: null, + isManual_: !1 + } + , t = r + , e = rc; + i && (t = [r], + e = nc); + t = Proxy.revocable(t, e), + e = t.revoke, + t = t.proxy; + return r.draft_ = t, + r.revoke_ = e, + t + }(t, i) : qu("ES5").createES5Proxy_(t, i); + return (i ? i.scope_ : Gu()).drafts_.push(t), + t + } + function cc(e) { + return Ou(e) || Au(22, e), + function i(e) { + if (!ku(e)) + return e; + var r, n = e[Eu], t = Pu(e); + if (n) { + if (!n.modified_ && (n.type_ < 4 || !qu("ES5").hasChanges_(n))) + return n.base_; + n.finalized_ = !0, + r = hc(e, t), + n.finalized_ = !1 + } else + r = hc(e, t); + return Mu(r, function(e, t) { + n && Ru(n.base_, e) === t || Lu(r, e, i(t)) + }), + 3 === t ? new Set(r) : r + }(e) + } + function hc(e, t) { + switch (t) { + case 2: + return new Map(e); + case 3: + return Array.from(e) + } + return Uu(e) + } + function pc() { + var r = {}; + function d(i, e) { + var t = r[i]; + return t ? t.enumerable = e : r[i] = t = { + configurable: !0, + enumerable: e, + get: function() { + var e = this[Eu]; + return a(e), + rc.get(e, i) + }, + set: function(e) { + var t = this[Eu]; + a(t), + rc.set(t, i, e) + } + }, + t + } + function n(e) { + for (var t = e.length - 1; 0 <= t; t--) { + var i = e[t][Eu]; + if (!i.modified_) + switch (i.type_) { + case 5: + u(i) && oc(i); + break; + case 4: + s(i) && oc(i) + } + } + } + function s(e) { + for (var t = e.base_, i = e.draft_, r = Cu(i), n = r.length - 1; 0 <= n; n--) { + var s = r[n]; + if (s !== Eu) { + var a = t[s]; + if (void 0 === a && !xu(t, s)) + return !0; + var o = i[s] + , s = o && o[Eu]; + if (s ? s.base_ !== a : !_u(o, a)) + return !0 + } + } + e = !!t[Eu]; + return r.length !== Cu(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_ && Au(3, JSON.stringify(Bu(e))) + } + Qu("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, d(r, !0)); + return i + } + var n = Du(t); + delete n[Eu]; + for (var s = Cu(n), a = 0; a < s.length; a++) { + var o = s[a]; + n[o] = d(o, e || !!n[o].enumerable) + } + return Object.create(Object.getPrototypeOf(t), n) + }(i, e) + , e = { + type_: i ? 5 : 4, + scope_: t ? t.scope_ : Gu(), + modified_: !1, + finalized_: !1, + assigned_: {}, + parent_: t, + base_: e, + draft_: r, + copy_: null, + revoked_: !1, + isManual_: !1 + }; + return Object.defineProperty(r, Eu, { + value: e, + writable: !0 + }), + r + }, + willFinalizeES5_: function(e, t, i) { + i ? Ou(t) && t[Eu].scope_ === e && n(e.drafts_) : (e.patches_ && function t(e) { + if (e && "object" == typeof e) { + var i = e[Eu]; + if (i) { + var r = i.base_ + , n = i.draft_ + , s = i.assigned_; + if (4 === (e = i.type_)) + Mu(n, function(e) { + e !== Eu && (void 0 !== r[e] || xu(r, e) ? s[e] || t(n[e]) : (s[e] = !0, + oc(i))) + }), + Mu(r, function(e) { + void 0 !== n[e] || xu(n, e) || (s[e] = !1, + oc(i)) + }); + else if (5 === e) { + if (u(i) && (oc(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 d = Math.min(n.length, r.length), l = 0; l < d; l++) + void 0 === s[l] && t(n[l]) + } + } + } + }(e.drafts_[0]), + n(e.drafts_)) + }, + hasChanges_: function(e) { + return (4 === e.type_ ? s : u)(e) + } + }) + } + function fc() { + var m = "replace" + , g = "add" + , y = "remove"; + function l(e) { + if (!ku(e)) + return e; + if (Array.isArray(e)) + return e.map(l); + if (Nu(e)) + return new Map(Array.from(e.entries()).map(function(e) { + return [e[0], l(e[1])] + })); + if (Fu(e)) + return new Set(Array.from(e).map(l)); + var t, i = Object.create(Object.getPrototypeOf(e)); + for (t in e) + i[t] = l(e[t]); + return i + } + function v(e) { + return Ou(e) ? l(e) : e + } + Qu("Patches", { + applyPatches_: function(d, e) { + return e.forEach(function(e) { + for (var t = e.path, i = e.op, r = d, n = 0; n < t.length - 1; n++) + "object" != typeof (r = Ru(r, t[n])) && Au(15, t.join("/")); + var s = Pu(r) + , a = l(e.value) + , o = t[t.length - 1]; + switch (i) { + case m: + switch (s) { + case 2: + return r.set(o, a); + case 3: + Au(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: + Au(17, i) + } + }), + d + }, + generatePatches_: function(c, e, t, i) { + switch (c.type_) { + case 0: + case 4: + case 2: + return l = e, + u = t, + h = i, + p = c.base_, + f = c.copy_, + void Mu(c.assigned_, function(e, t) { + var i = Ru(p, e) + , r = Ru(f, e) + , t = t ? xu(p, e) ? m : g : y; + i === r && t == m || (e = l.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, d = 0; d < n.length; d++) + s[d] && a[d] !== n[d] && (o = e.concat([d]), + t.push({ + op: m, + path: o, + value: v(a[d]) + }), + i.push({ + op: m, + path: o, + value: v(n[d]) + })); + for (var l = n.length; l < a.length; l++) { + var u = e.concat([l]); + t.push({ + op: g, + path: u, + value: v(a[l]) + }) + } + 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_, + d = 0, + a.forEach(function(e) { + var t; + o.has(e) || (t = r.concat([d]), + n.push({ + op: y, + path: t, + value: e + }), + s.unshift({ + op: g, + path: t, + value: e + })), + d++ + }), + d = 0, + void o.forEach(function(e) { + var t; + a.has(e) || (t = r.concat([d]), + n.push({ + op: g, + path: t, + value: e + }), + s.unshift({ + op: y, + path: t, + value: e + })), + d++ + }) + } + var r, n, s, a, o, d, l, 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 mc() { + 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[Eu] = { + type_: 2, + parent_: t, + scope_: t ? t.scope_ : Gu(), + 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 Bu(this[Eu]).size + } + }), + t.has = function(e) { + return Bu(this[Eu]).has(e) + } + , + t.set = function(e, t) { + var i = this[Eu]; + return d(i), + Bu(i).has(e) && Bu(i).get(e) === t || (s(i), + oc(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[Eu]; + return d(t), + s(t), + oc(t), + t.assigned_.set(e, !1), + t.copy_.delete(e), + !0 + } + , + t.clear = function() { + var t = this[Eu]; + d(t), + Bu(t).size && (s(t), + oc(t), + t.assigned_ = new Map, + Mu(t.base_, function(e) { + t.assigned_.set(e, !1) + }), + t.copy_.clear()) + } + , + t.forEach = function(r, n) { + var s = this; + Bu(this[Eu]).forEach(function(e, t, i) { + r.call(n, s.get(t), t, s) + }) + } + , + t.get = function(e) { + var t = this[Eu]; + d(t); + var i = Bu(t).get(e); + if (t.finalized_ || !ku(i)) + return i; + if (i !== t.base_.get(e)) + return i; + i = uc(t.scope_.immer_, i, t); + return s(t), + t.copy_.set(e, i), + i + } + , + t.keys = function() { + return Bu(this[Eu]).keys() + } + , + t.values = function() { + var e, t = this, i = this.keys(); + return (e = {})[Iu] = 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 = {})[Iu] = 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[Iu] = 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[Eu] = { + type_: 3, + parent_: t, + scope_: t ? t.scope_ : Gu(), + 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 Bu(this[Eu]).size + } + }), + t.has = function(e) { + var t = this[Eu]; + return d(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[Eu]; + return d(t), + this.has(e) || (o(t), + oc(t), + t.copy_.add(e)), + this + } + , + t.delete = function(e) { + if (!this.has(e)) + return !1; + var t = this[Eu]; + return d(t), + o(t), + oc(t), + t.copy_.delete(e) || !!t.drafts_.has(e) && t.copy_.delete(t.drafts_.get(e)) + } + , + t.clear = function() { + var e = this[Eu]; + d(e), + Bu(e).size && (o(e), + oc(e), + e.copy_.clear()) + } + , + t.values = function() { + var e = this[Eu]; + return d(e), + o(e), + e.copy_.values() + } + , + t.entries = function() { + var e = this[Eu]; + return d(e), + o(e), + e.copy_.entries() + } + , + t.keys = function() { + return this.values() + } + , + t[Iu] = 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; + ku(e) ? (t = uc(i.scope_.immer_, e, i), + i.drafts_.set(e, t), + i.copy_.add(t)) : i.copy_.add(e) + })) + } + function d(e) { + e.revoked_ && Au(3, JSON.stringify(Bu(e))) + } + Qu("MapSet", { + proxyMap_: function(e, t) { + return new n(e,t) + }, + proxySet_: function(e, t) { + return new a(e,t) + } + }) + } + var yi = new Br + , A = yi.produce + , gc = yi.produceWithPatches.bind(yi) + , gr = yi.setAutoFreeze.bind(yi) + , yc = yi.setUseProxies.bind(yi) + , gu = yi.applyPatches.bind(yi) + , w = yi.createDraft.bind(yi) + , yi = yi.finishDraft.bind(yi); + mu.Immer = Br, + mu.applyPatches = gu, + mu.castDraft = function(e) { + return e + } + , + mu.castImmutable = function(e) { + return e + } + , + mu.createDraft = w, + mu.current = cc, + mu.default = A, + mu.enableAllPlugins = function() { + pc(), + mc(), + fc() + } + , + mu.enableES5 = pc; + w = mu.enableMapSet = mc; + mu.enablePatches = fc, + mu.finishDraft = yi, + mu.immerable = Tu, + mu.isDraft = Ou, + mu.isDraftable = ku, + mu.nothing = bu, + mu.original = function(e) { + return Ou(e) || Au(23, e), + e[Eu].base_ + } + ; + var vc = mu.produce = A; + mu.produceWithPatches = gc, + mu.setAutoFreeze = gr, + mu.setUseProxies = yc; + class Sc { + constructor(e) { + this.store = e + } + createUnresolvedUriLoading(e, t, i) { + Co("loader.create.unresolvedUriLoading"), + this.store.add({ + uri: e, + responseType: t, + userAgent: i + }) + } + removeUnresolvedUriLoading(e) { + Co("loader.remove.unresolvedUriLoading"), + this.store.remove(e) + } + } + const bc = new class extends pd { + constructor() { + super({}, { + name: "loader", + producerFn: vc, + idKey: "uri" + }) + } + } + ; + let Tc = null; + class Ec 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 Ic { + constructor(e, t) { + this.target = e, + this._this = t + } + eventWithOptions(e, t, i, r=this._this) { + let n = en(this.target, e, t); + return this.target instanceof Ec && (n = n.pipe(ur(([,e])=>e))), + i && (r && (i = i.bind(r)), + n = n.pipe(Ja(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($a(t)).subscribe() + } + } + function wc(e, t) { + return new Ic(e,t) + } + function Ac(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 Oc(y, v) { + return new Ut(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 = wc(r) + , a = s.event("progress").pipe(wa(), so(300, Zi, { + leading: !0, + trailing: !0 + }), ur(e=>(isNaN(n.tfirst) && (n.tfirst = performance.now()), + n.loaded = e.loaded, + e.lengthComputable && (n.total = e.total), + e.target)), an(e=>3 <= e.readyState)) + , o = s.event("readystatechange").pipe(wa(), Hi(Zi), ur(e=>e.target), an(e=>2 <= e.readyState), Ja(e=>{ + isNaN(n.tfirst) && 3 <= e.readyState && (n.tfirst = performance.now()) + } + )); + let d = Ti; + isFinite(t) && 0 < t && (d = nn(a, o).pipe(Cs(1), vo(0 < y.extendMaxTTFB ? y.extendMaxTTFB : t), Ra(()=>Ti))); + let l = Ti; + isFinite(i) && 0 < i && (l = o.pipe(an(e=>4 <= e.readyState), Cs(1), vo(i), Ra(()=>Ti))); + let u = Ti; + y.onProgress && (u = nn(Bi(r), a).pipe(ur(e=>{ + const {getData: t, cb: i} = y.onProgress; + return i(y.url, e.status, n, t ? e.response : void 0) + } + ), Qa(e=>!e, !0)).pipe(Ua(Ti))); + const c = nn(a.pipe(Ra(()=>Ti)), o, d, l, u).pipe(Ra(e=>{ + if (4 <= e.readyState) { + 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 tu("Network error",e.status); + return Bi([e, n]) + } + throw new tu("Network error",e.status) + } + var i, r; + return Ti + } + ), Cs(1), Un(e=>{ + if (e instanceof or) + throw new ou(e.message,0,n); + if (!(e instanceof tu)) + throw new tu(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 tu(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 kc = { + name: "CustomUrlLoader" + }; + class Cc { + constructor(e) { + this.loaderService = e, + this.requestMap = {}, + this.logger = qe() + } + load(a, o) { + return new Ut(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 Ji).pipe(vo(0 < a.extendMaxTTFB ? a.extendMaxTTFB : i), Ra(e=>(r.tfirst = performance.now(), + this.handleExternalResponse(e, a, o, r))), Un(e=>{ + if (e instanceof or) + throw new ou(e.message,0,r); + throw e + } + ), $s(()=>{ + 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.length, + r.total = r.loaded, + r.complete = !0, + Bi({ + status: n, + data: e, + stats: r + })) : 300 === n || 302 === n || 303 === n || 305 === n ? this.redirectRequest(e.response.uri, t, i, r) : (this.logger.warn(kc, `unable to load custom url > uri=${oe(e.response.uri)}, status=${n}`), + Ui(new tu("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 ? Ui(new or) : Oc(e, i).pipe(ur(([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 Dc; + function Mc(e) { + return Dc || (e = e || (Tc = Tc || new Sc(bc), + Tc), + Dc = new Cc(e)), + Dc + } + function Pc(e, t) { + const i = Object.assign(Object.assign({}, e), { + method: "GET", + responseType: "arraybuffer" + }) + , r = Mc(); + return ml(i.url) ? r.load(i, t).pipe(ur(e=>[e.data.response.data, e.stats, i.serverInstanceInfo])) : Oc(i, t).pipe(ur(([e,t])=>[e.response, t, i.serverInstanceInfo])) + } + function xc(e, t) { + return !e.url || ml(e.url) ? t.customURL : t.default + } + function Rc(e, t) { + return e instanceof iu ? e.isTimeout ? t.timeoutRetry : t.errorRetry : null + } + function Lc(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 _c = { + id: "playready", + systemStringPrefix: "com.microsoft.playready", + keyFormatString: "com.microsoft.playready", + securityLevels: { + SL2000: 0, + SL3000: 1 + } + } + , Nc = { + id: "widevine", + systemStringPrefix: "com.widevine.alpha", + keyFormatString: "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed", + securityLevels: { + WIDEVINE_SOFTWARE: 0, + WIDEVINE_HARDWARE: 1 + } + }; + function Fc(e) { + return e.replace(/\+/g, "-").replace(/\//g, "_").replace(/\=+$/, "") + } + class Bc { + static strToBase64Encode(e) { + return btoa(e) + } + static base64DecodeToStr(e) { + return atob(e) + } + static base64Encode(e) { + return btoa(String.fromCharCode(...e)) + } + static base64UrlEncode(e) { + return Fc(Bc.base64Encode(e)) + } + static base64Decode(e) { + return Uint8Array.from(atob(e), e=>e.charCodeAt(0)) + } + } + class Uc { + static strToBase64Encode(e) { + return d.Buffer.from(e).toString("base64") + } + static base64DecodeToStr(e) { + return d.Buffer.from(e, "base64").toString() + } + static base64Encode(e) { + return d.Buffer.from(e).toString("base64") + } + static base64UrlEncode(e) { + return Fc(Uc.base64Encode(e)) + } + static base64Decode(e) { + e = d.Buffer.from(e, "base64"); + return new Uint8Array(e.buffer,e.byteOffset,e.byteLength) + } + } + var $c, Vc = void 0 !== d.Buffer ? Uc : Bc; + const Kc = { + avc1: "video/mp4", + avc3: "video/mp4", + dvav: "video/mp4", + dva1: "video/mp4", + hev1: "video/mp4", + hvc1: "video/mp4", + dvh1: "video/mp4", + dvhe: "video/mp4" + } + , Hc = { + mp4a: "audio/mp4", + "ac-3": "audio/mp4", + "ec-3": "audio/mp4" + }; + function jc(e) { + const t = O.strToUtf8array(e).subarray(0, 16) + , i = new Uint8Array(16); + return i.set(t, 16 - t.length), + i + } + const qc = { + getCapabilities: function(e, t) { + const i = { + videoCapabilities: [], + audioCapabilities: [] + }; + return e && e.forEach(e=>{ + var t = e.split(".")[0].trim(); + t in Kc && i.videoCapabilities.push({ + contentType: Kc[t] + ";codecs=" + e, + robustness: "" + }) + } + ), + t && t.forEach(e=>{ + var t = e.split(".")[0].trim(); + t in Hc && i.audioCapabilities.push({ + contentType: Hc[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: jc, + 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), + Vc.base64Decode(n)) : jc(n) + } + } + return i + }, + makeKeyIdsInitData: function(e) { + e = { + kids: e.map(Vc.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 Qc = {}; + class Gc { + 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 = qc.convertDataUriToArrayBytes(this.uri); + if (a) + switch (r) { + case _c.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 = Vc.base64Decode(s).subarray(0, 16); + qc.changeEndianness(t), + this.keyId = t + } + } + break + } + case Nc.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 = Qc[this.uri]; + if (!e) { + const t = Object.keys(Qc).length % Number.MAX_SAFE_INTEGER; + e = new Uint8Array(16), + new DataView(e.buffer,12,4).setUint32(0, t), + Qc[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() { + Qc = {} + } + } + (gc = $c = $c || {}).NONE = "NONE", + gc.GET_REQUEST_INFO = "GET_REQUEST_INFO", + gc.GET_CHALLENGE = "GET_CHALLENGE", + gc.GET_KEY_RESPONSE = "GET_KEY_RESPONSE", + gc.PROCESS_LICENSE = "PROCESS_LICENSE"; + class Wc { + constructor(e, t, i, r) { + this.session = e, + this.onkeystatuseschange = t, + this.onkeymessage = i, + this.logger = r, + this.isClosing$ = new gi(!1), + this.closed$ = new gi(!1); + const n = wc(this.session); + n.listen("keystatuseschange", this.isClosing$.pipe(an(e=>!0 === e)), this.onkeystatuseschange), + n.listen("message", this.closed$.pipe(an(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 Lr(e.remove().catch(e=>{} + ).then(()=>e.close()).catch(e=>{} + )).pipe(Ja(()=>{ + this.isClosing$.next(!1), + this.closed$.next(!0) + } + ), $s(()=>{ + this.isClosing$.next(!1), + this.closed$.next(!0) + } + )) + } + } + class zc { + constructor(e, t=null) { + this.decryptdata = e, + this._requestState$ = new gi($c.NONE), + this.destroy$ = new zt, + 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 !== $c.NONE && (e = new uu("Aborted",this.decryptdata.uri,0,$.KeySystemAbort,!0,Xl.Abort), + this.error(e)) + } + setKeyRequestState(e) { + if (this.currentObservable) { + const t = new uu(`Unexpected state transition ${this.requestState}->${e}`,this.decryptdata.uri,0,$.KeySystemUnexpectedStateTransition,!0,Xl.InvalidState); + this.error(t) + } + this._requestState$.next(e); + const t = new Ji; + return e === $c.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 uu(`Unexpected state ${this.requestState} != ${e}`,this.decryptdata.uri,0,$.KeySystemUnexpectedState,!0,Xl.InvalidState); + this.error(t) + } + } + error(e) { + if (this.currentObservable) { + const t = this.currentObservable; + this.currentObservable = null, + t.error(e) + } + this.setKeyRequestState($c.NONE) + } + } + function Xc(e) { + return `uri=${oe(e.uri)} keyId=${je(e.keyId)}` + } + class Yc { + 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 zt, + this.setCert = !1, + this.certificate$ = new gi(null), + this._keyStatusChange$ = new zt, + 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 = tn(()=>0 === e.length, Ul, Jr(e)).pipe(Js(void 0), $s(()=>{ + this.mediaKeys = void 0, + this.keyIdToKeyInfo = {}, + this.keyUriToKeyInfo = {}, + this.sessionIdToKeyUri = {} + } + )); + return Gc.clearKeyUriToKeyIdMap(), + t + } + setServerCertificate(e=null) { + return this.needsCert ? (e && this.certificate$.next(e), + $l(this.certificate$, e=>null != e).pipe(vo(1e4)).pipe(Ra(e=>this.setCert ? Bi(!0) : !this.setCertSubject || this.setCertSubject.isStopped ? (this.setCertSubject = new Ji, + Lr(this.mediaKeys.setServerCertificate(e)).pipe(Ja(e=>{ + e = void 0 === e || e; + this.setCert = e, + this.setCertSubject.next(e), + this.setCertSubject.complete() + } + ), Un(e=>(this.setCert = !1, + this.setCertSubject.error(e), + Ul)), Ra(()=>this.setCertSubject))) : this.setCertSubject), Un(e=>{ + throw e + } + ))) : Bi(!0) + } + ensureKeyContext(e) { + var t = e.uri; + this.keyUriToKeyInfo[t] || (this.keyUriToKeyInfo[t] = new zc(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 Wc(t,this.onkeystatuseschange,this.onkeymessage,this.logger)), + i.session = t, + i + } + startKeyRequest(t) { + const i = t.uri + , r = this.ensureKeyContext(t); + if (!r.session) + return Ui(new cu("Could not create key session",t.uri,0,$.KeySystemFailedToCreateSession,this.systemString)); + var e = O.utf8arrayToStr(t.keyId); + return this.keyIdToKeyInfo[e] = r, + Jr([this.getKeyRequestInfo(r), this.setServerCertificate()]).pipe(ur(e=>e[0]), Ra(e=>{ + var t; + return null === (t = this.sessionHandler) || void 0 === t || t.licenseChallengeSubmitted({ + keyuri: i, + keyFormat: this.systemString + }), + this.generateLicenseChallenge(r, e).pipe(Un(e=>{ + var t; + throw null === (t = this.sessionHandler) || void 0 === t || t.licenseChallengeError({ + keyuri: i + }), + e + } + )) + } + ), Ra(e=>{ + var t; + return null === (t = this.sessionHandler) || void 0 === t || t.licenseChallengeCreated({ + keyuri: i, + cdmVersion: this.cdmVersion + }), + this.getKeyRequestResponse(r, e) + } + ), Ra(e=>{ + var t; + return null === (t = this.sessionHandler) || void 0 === t || t.licenseResponseSubmitted({ + keyuri: i + }), + this.handleParsedKeyResponse(r, e).pipe(Un(e=>{ + var t; + throw null === (t = this.sessionHandler) || void 0 === t || t.licenseResponseError({ + keyuri: i + }), + e + } + )) + } + ), ur(()=>{ + var e; + return null === (e = this.sessionHandler) || void 0 === e || e.licenseResponseProcessed({ + keyuri: i + }), + r.setKeyRequestState($c.NONE), + this.removeSessions(r.decryptdata, !1).subscribe(), + t + } + ), Un(e=>{ + throw this.handleKeyExchangeError(r, e), + e + } + ), $s(()=>{ + this._abortKeyRequest(r) + } + )) + } + _abortKeyRequest(e) { + var t, i; + e && (i = e.decryptdata.uri, + O.utf8arrayToStr(e.decryptdata.keyId), + e.requestState !== $c.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 = [], + tn(()=>0 === r.length, Ul, Jr(r)).pipe(Ra(()=>t ? this.removeKeyInternal(e) : Ul)) + } + return Ul + } + 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() : Ul + } + getKeyRequestInfo(e) { + var t = e.decryptdata + , i = t.uri + , e = e.setKeyRequestState($c.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($c.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 d = t.setKeyRequestState($c.GET_CHALLENGE); + if (n.generateRequestPromise) + o = Lr(n.generateRequestPromise).pipe(Ra(()=>this.generateRequestInitialized(t, "usable" === i))); + else { + const i = this.generateInitData(a, r, e); + n.generateRequestPromise = n.generateRequest(i.initDataType, i.initData), + o = Lr(n.generateRequestPromise).pipe(Ja(()=>{ + this.sessionIdToKeyUri[n.sessionId] = s + } + ), Un(e=>{ + throw new cu(e.message,t.decryptdata.uri,0,$.KeySystemFailedToGenerateLicenseRequest,this.systemString) + } + )) + } + return Jr([d, o]).pipe(ur(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($c.GET_CHALLENGE, e.licenseChallenge), + t = this.sanitizeRequest(t), + e.requestInfo = t, + this.sessionId = this.sessionId || t && t.sessionId || this.itemId, + this.systemString === _c.systemStringPrefix) { + const e = new Uint8Array(s); + qc.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 = Ui(new cu(`Bad internal state state=${a}`,n,0,$.KeySystemUnexpectedState,this.systemString)) + } + return o + } + setParsedResponse(e, t) { + this.keyUriToKeyInfo[e].resolveState($c.GET_KEY_RESPONSE, t) + } + handleKeyStatusesChange(e) { + e.target.keyStatuses.forEach((e,t,i)=>{ + t = new Uint8Array(t); + this.systemString === _c.systemStringPrefix && qc.changeEndianness(t); + t = O.utf8arrayToStr(t), + t = this.keyIdToKeyInfo[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 ${Xc(i)}`), + this._signalError(t, new uu("Got internal error from key system",r,0,$.KeySystemInternalError,!1,Xl.InternalError)); + break; + case "usable": + t.requestState === $c.PROCESS_LICENSE && t.resolveState($c.PROCESS_LICENSE, void 0); + break; + case "output-restricted": + this.logger.warn(`${this.systemString} output-restricted for key ${Xc(i)}`), + t.session && this.removeSession(t.session).pipe($a(this.destroy$)).subscribe(), + this._signalError(t, new uu("output-restricted",r,0,$.KeySystemOutputRestricted,!1,Xl.OutputRestricted)) + } + } + } + _scheduleRenewal(e, t) { + vn(t).pipe(Ja(()=>this._signalRenewal(e)), $a(hn(e.destroy$, this.destroy$, $l(e.onKeyRequestState$, e=>e === $c.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 Jc = "org.w3.clearkey" + , Zc = { + id: "clearkey", + systemStringPrefix: Jc, + keyFormatString: Jc, + securityLevels: { + NONE: 0 + } + } + , eh = ["clearkey", "fairplaystreaming", "playready", "widevine"] + , th = { + initDataTypes: ["keyids", "cenc"] + }; + var ih, gr = class extends Yc { + constructor(e, t, i, r, n, s) { + super(e, t, i, r, !1, n, s) + } + static get requestAccessConfig() { + return th + } + get needsCert() { + return !1 + } + getKeyRequestResponse(e, t) { + return Pc({ + url: e.decryptdata.uri, + xhrSetup: this.config.xhrSetup + }, { + maxLoadTimeMs: 0, + maxTimeToFirstByteMs: 0, + autoRetry: !1, + timeoutRetry: null, + errorRetry: null + }).pipe(ur(([e])=>{ + e = new Uint8Array(e); + return { + response: this.parseResponse(t, e) + } + } + )) + } + parseResponse(e, t) { + t = { + kty: "oct", + kid: Vc.base64UrlEncode(e), + k: Vc.base64UrlEncode(t) + }; + return O.strToUtf8array(JSON.stringify({ + keys: [t] + })) + } + handleParsedKeyResponse(i, e) { + e = e.response; + return Jr([i.setKeyRequestState($c.PROCESS_LICENSE), Lr(i.session.update(e)).pipe(Ja(()=>{ + var e = i.decryptdata.keyId + , e = i.session.keyStatuses.get(e); + this.handleKeyStatusForKey(e, i) + } + ), Un(e=>{ + var t = { + code: e.code, + text: "Failed to update with key response" + }; + throw new cu(e.message,i.decryptdata.uri,e.code,t,this.systemString) + } + ))]).pipe(Js(void 0)) + } + generateInitData(e) { + return { + initData: qc.makeKeyIdsInitData([e]), + initDataType: "keyids" + } + } + generateRequestInitialized() { + return Ul + } + 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 = Vc.base64Decode(e.kids[0]) + , i = O.utf8arrayToStr(t) + , r = this.keyIdToKeyInfo[i]; + r && r.resolveState($c.GET_CHALLENGE, t) + } + } + } + } + ; + const rh = { + initDataTypes: ["cenc"] + } + , nh = new Uint8Array([148, 206, 134, 251, 7, 255, 79, 67, 173, 184, 147, 210, 250, 150, 140, 162]); + (mu = ih = ih || {})[mu.CENC = 1667591779] = "CENC", + mu[mu.CBCS = 1667392371] = "CBCS"; + class sh extends Yc { + constructor(e, t, i, r, n, s, a) { + super(e, t, i, r, n, s, a), + this._hasSetRenewal = !1 + } + static get systemId() { + return nh + } + static get requestAccessConfig() { + return rh + } + 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, + vn(t).pipe(Ja(()=>{ + var e = Object.values(this.keyUriToKeyInfo)[0]; + this._signalRenewal(e) + } + ), $s(()=>{ + this._hasSetRenewal = !1 + } + ), $a(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 Ui(new uu("License request resulted in HTTP Error",i,r,{ + code: r, + text: "HTTP Error" + },!0,Xl.HttpError)); + if (0 !== r) + return Ui(new uu("License server responded with error",i,r,{ + code: r, + text: "Server Error" + },!1,Xl.LicenseServerError)); + if (!n) + return Ui(new uu("License server responded with invalid license",i,r,{ + code: r, + text: "Invalid license" + },!1,Xl.LicenseServerError)); + const s = e.renewalDate + , a = new Date + , o = s > a ? s.getTime() - a.getTime() : 0; + 0 < o && this._scheduleRenewal(t, o); + const d = this.makeProcessLicenseRequestMessage(t, n, o) + , l = t.session + , u = Lr(l.update(d)).pipe(Ja(()=>{ + var e = t.decryptdata.keyId + , e = l.keyStatuses.get(e); + this.handleKeyStatusForKey(e, t) + } + ), Un(e=>{ + throw new cu(e.message,t.decryptdata.uri,0,$.KeySystemFailedToUpdateSession,this.systemString) + } + )); + return Jr([t.setKeyRequestState($c.PROCESS_LICENSE), u]).pipe(Js(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 ? ih.CENC : ih.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) { + Ql.tag(`[Keys] challenge create start uri=${oe(t.decryptdata.uri)} versions=${JSON.stringify(t.decryptdata.formatversions)}`); + e = this.makeKeyRequestMessage(t, e); + return e ? Lr(t.session.update(e)).pipe(Ja(()=>{ + t.requestInfo = void 0 + } + ), Un(e=>{ + throw Ql.tag(`[Keys] ${this.systemString} FAIL: generateRequestInitialized keyuri=${oe(t.decryptdata.uri)} message=${e.message}`), + new cu(e.message,t.decryptdata.uri,0,$.KeySystemFailedToGenerateLicenseRenewal,this.systemString) + } + )) : Ui(new uu("Unable to generate request using existing keySession",t.decryptdata.uri,0,$.KeySystemFailedToGenerateLicenseRequest,!0,Xl.InvalidState)) + } + getKeyRequestResponse(e, t) { + var i = e.decryptdata.uri + , e = e.setKeyRequestState($c.GET_KEY_RESPONSE); + return this.eventEmitter.trigger(x.LICENSE_CHALLENGE_CREATED, { + keyuri: i, + licenseChallenge: t, + keysystem: this.systemString + }), + e + } + resolveSPCPromise(e, t) { + e.resolveState($c.GET_CHALLENGE, t) + } + } + const ah = {} + , oh = 1919710053; + function dh(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 lh(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 = dh(t, r, n); + if (!a) + break; + n = a.pos, + i[O.utf8arrayToStr(s)] = a.data + } + return i + } + function uh(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 ch(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 hh(e, t, i, r) { + t.setUint32(i, r.length), + i += 4; + for (const n of r) + if (e.set(n.keyId, i), + i = uh(e, t, i += 16, n.assetId), + i = uh(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 ph extends sh { + 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 = uh(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 = ch(i); + const n = new Uint8Array(8 + r) + , s = new DataView(n.buffer); + return s.setUint32(0, e), + s.setUint32(4, 1 << 24 | 16777215 & t), + hh(n, s, 8, i), + n + }(e, t, i); + return me.pssh(ph.systemId, [], i) + } + makeKeyRequestMessage(e) { + return function(e) { + var t = ch(e); + const i = new Uint8Array(4 + t) + , r = new DataView(i.buffer); + return r.setUint32(0, 1668442994), + hh(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 !== oh) + 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 = lh(t); + for (const t in e) + if (Object.prototype.hasOwnProperty.call(e, t)) { + const e = this.keyIdToKeyInfo[t]; + this._signalRenewal(e) + } + break + } + case 1936745331: + { + const e = lh(t); + for (const t in e) + if (Object.prototype.hasOwnProperty.call(e, t)) { + const i = this.keyIdToKeyInfo[t] + , r = e[t]; + this.resolveSPCPromise(i, r) + } + break + } + case oh: + this._handleLicenseRelease(t); + break; + case 1667525993: + { + const e = dh(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: + ah, + 0, + t[ah.SessionId] = this.sessionId; + var r; + if (e.byteLength < 12) + break; + t[ah.APIProvider] = i.getUint32(8) === ih.CENC ? "EC396D13-FB13-4993-9D0D-71518ACF3D6F" : "F19BF03B-7470-41A4-9655-86D078307D59", + 0; + var n = dh(e, i, 12); + if (!n) + break; + if (r = n.pos, + t[ah.MovieID] = O.utf8arrayToStr(n.data), + !(n = dh(e, i, r))) + break; + if (r = n.pos, + t[ah.SecureStopSPC] = n.data, + !(n = dh(e, i, r))) + break; + n.pos, + t[ah.SessionLifespanSPC] = n.data + } + this.eventEmitter.trigger(x.LICENSE_RELEASED, { + keysystem: this.systemString, + itemId: this.itemId, + releaseRecord: t + }) + } + } + yc = ph; + const fh = { + 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 sh { + 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 !== $c.NONE && this.removeKey(e.decryptdata).subscribe(), + super._abortKeyRequest(e) + } + makeFpsKeySystemInitData(e, t, i) { + const r = [fh.fpsd, (n = e, + e = t, + t = new Uint8Array(4), + me.set32(n, t, 0), + me.box(fh.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 = [fh.fpsk] + , s = me.box(fh.fkri, new Uint8Array([0, 0, 0, 0]), t); + if (n.push(s), + e && e.byteLength && n.push(me.box(fh.fkai, e)), + i && i.byteLength && n.push(me.box(fh.fkcx, i)), + r && r.length) { + const t = new Uint8Array(4 * r.length); + let e = 0; + for (const i of r) + me.set32(i, t, e), + e += 4; + n.push(me.box(fh.fkvl, t)) + } + return me.box.apply(null, n) + }(s.keyId, s.assetId, s.ssc, s.versionList)); + i = me.box.apply(null, r); + return me.pssh(sh.systemId, null, i) + } + makeKeyRequestMessage(e, t) { + if (t) + return O.strToUtf8array("renew") + } + makeProcessLicenseRequestMessage(e, t, i) { + t = JSON.stringify([{ + keyID: Vc.base64Encode(e.decryptdata.keyId), + payload: Vc.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 = Vc.base64DecodeToStr(e.keyID) + , e = Vc.base64Decode(e.payload) + , t = this.keyIdToKeyInfo[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 mh = { + initDataTypes: ["cenc"] + } + , gh = new Uint8Array([154, 4, 240, 121, 152, 64, 66, 134, 171, 146, 230, 91, 224, 136, 95, 149]); + class yh extends Yc { + constructor(e, t, i, r, n, s) { + super(e, t, i, r, !1, n, s), + this.shouldDestroyMediaKeys = !0 + } + static get systemId() { + return gh + } + static get requestAccessConfig() { + return mh + } + get needsCert() { + return !1 + } + generateInitData(e, t) { + t = t.pssh; + return { + initData: me.pssh(yh.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($c.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($c.GET_CHALLENGE, t), + Ul + } + handleParsedKeyResponse(t, e) { + const i = t.decryptdata.uri + , r = e.statusCode; + if (0 !== r) + return Ui(new uu("License server responded with error",i,r,{ + code: r, + text: "Server error" + },!1,Xl.LicenseServerError)); + if (!e.license || !e.license.byteLength) + return Ui(new uu("License server responded with invalid license",i,r,{ + code: r, + text: "Invalid license" + },!1,Xl.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 Jr([t.setKeyRequestState($c.PROCESS_LICENSE), Lr(t.session.update(e.license)).pipe(Ja(()=>{ + t.resolveState($c.PROCESS_LICENSE, void 0) + } + ), Un(e=>{ + throw this.logger.error(`${this.systemString} FAIL: Failed to update with key response message=${e.message}`), + new cu(e.message,t.decryptdata.uri,0,$.KeySystemFailedToUpdateSession,this.systemString) + } + ))]).pipe(Js(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 = Vc.base64Decode(s.childNodes[0].nodeValue) + , o = O.utf8arrayToStr(a) + , d = t.parseFromString(o, "application/xml").getElementsByTagName("KID")[0]; + e = null, + e = d.childNodes[0] ? d.childNodes[0].nodeValue : d.getAttribute("VALUE"), + e = Vc.base64Decode(e).subarray(0, 16); + qc.changeEndianness(e); + const l = this.keyIdToKeyInfo[O.utf8arrayToStr(e)]; + l.licenseChallenge = a, + l.resolveState($c.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`) + } + } + } + gc = yh; + const vh = { + initDataTypes: ["cenc", "keyids"] + } + , Sh = new Uint8Array([237, 239, 139, 169, 121, 214, 74, 206, 163, 200, 39, 220, 213, 29, 33, 237]) + , bh = { + clearkey: Zc, + fairplaystreaming: pu, + playready: _c, + widevine: Nc + } + , Th = { + clearkey: [["org.w3.clearkey", gr]], + fairplaystreaming: [["com.apple.fps.3_0", t], ["com.apple.fps", yc]], + playready: [["com.microsoft.playready.recommendation", gc]], + widevine: [["com.widevine.alpha", class extends Yc { + constructor(e, t, i, r, n, s) { + super(e, t, i, r, !1, n, s), + this.shouldDestroyMediaKeys = !0 + } + static get systemId() { + return Sh + } + static get requestAccessConfig() { + return vh + } + 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($c.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 Ui(new uu("License server responded with error",i,r,{ + code: r, + text: "Server error" + },!1,Xl.LicenseServerError)); + if (!e.license || !e.license.byteLength) + return Ui(new uu("License server responded with invalid license",i,r,{ + code: r, + text: "Invalid license" + },!1,Xl.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 Jr([t.setKeyRequestState($c.PROCESS_LICENSE), Lr(t.session.update(e.license)).pipe(Ja(()=>{ + var e = t.decryptdata.keyId + , e = t.session.keyStatuses.get(e); + this.handleKeyStatusForKey(e, t) + } + ), Un(e=>{ + throw this.logger.error(`${this.systemString} FAIL: Failed to update with key response code=${e.code} message=${e.message}`), + new cu(e.message,t.decryptdata.uri,e.code,{ + code: e.code, + text: "Failed to update with key response" + },this.systemString) + } + ))]).pipe(Js(void 0)) + } + generateInitData(e, t) { + return { + initData: t.pssh, + initDataType: "cenc" + } + } + generateRequestInitialized(e) { + var t = e.licenseChallenge; + return e.requestInfo = void 0, + e.resolveState($c.GET_CHALLENGE, t), + Ul + } + 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($c.GET_CHALLENGE, r); + break + } + } + else + this.logger.warn(`${this.systemString} empty keyuri and keyInfo`) + } + } + } + ]] + } + , Eh = Zc.id; + class Ih { + createMediaKeys(t, e, i, r, n) { + let s = Ih.idToMediaKeysInfoMap[t]; + if (!s) { + const a = qc.getCapabilities(e, i) + , o = new Ji; + Ih.requestKeySystemAccess(t, a, n, r).pipe(Ra(function(e) { + return Lr((Ih.idToMediaKeysInfoMap[t].keySystemAccess = e).createMediaKeys()) + }), Ja(e=>{ + o.next(e), + o.complete() + } + ), Un(e=>(o.error(new cu(`could not initialize key system: ${e.message}`,void 0,0,$.KeySystemFailedToInitialize,t)), + Ti)), $a(Ih.destroy$)).subscribe(), + s = Ih.idToMediaKeysInfoMap[t] = { + mediaKeys$: o, + keySystemAccess: null + } + } + return s.mediaKeys$ + } + destroyMediaKeys() { + Ih.destroy$.next(), + Ih.idToMediaKeysInfoMap = {} + } + static getKeySystemIdForDecryptData(e) { + let t; + if (e) { + t = Eh; + var i = e.format; + for (const e of eh) { + var r = bh[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 Ui(new cu("navigator undefined",void 0,0,$.KeySystemUndefinedNavigator,e)); + const n = Th[e]; + let s = Ui(new cu("no key systems to try",void 0,0,$.KeySystemNoKeySystemsToTry,e)); + for (const e of n) { + const n = e[0] + , o = e[1] + , d = (a = i) && "object" == typeof a ? i : o.requestAccessConfig + , l = [Object.assign({}, d, t)]; + s = s.pipe(Un(()=>Ih.requestKeySystemInternal(n, l, r))) + } + var a; + return s + } + static requestKeySystemInternal(e, t, i) { + return Yr(()=>Lr(navigator.requestMediaKeySystemAccess(e, t))) + } + make(e, t, i, r, n, s) { + var a = null === (d = Ih.idToMediaKeysInfoMap[e]) || void 0 === d ? void 0 : d.keySystemAccess; + if (!a) + throw new cu(`No keySystemAccess for ${e}`,void 0,0,$.KeySystemNoKeySystemAccess,e); + let o; + var d = bh[e].systemStringPrefix; + for (const t of Th[e]) + if (t[0] === a.keySystem) { + o = t[1]; + break + } + if (!o) + throw new cu(`No constructor associated with ${e}`,void 0,0,$.KeySystemNoConstructor,d); + return new o(t,d,i,r,n,s) + } + static get availableKeySystems() { + return Object.keys(bh) + } + static getKeySystemFormat(e) { + e = bh[e]; + return e ? e.keyFormatString : "" + } + static getKeySystemSecurityLevel(e) { + e = bh[e]; + return e ? e.securityLevels : void 0 + } + } + Ih.idToMediaKeysInfoMap = {}, + Ih.destroy$ = new zt; + const wh = ["avc1.42E01E"] + , Ah = ["mp4a.40.2"]; + function Oh(e, t, i) { + if (t) { + if (t instanceof or) + t = new lu("Key request timed out",e,$.KeySystemRequestTimedOut); + else if (t instanceof cu) { + const i = (null == t ? void 0 : t.response) || $.InternalError; + t = new uu(t.message,e,0,i,!1,Xl.InternalError,!0) + } + } else + t = new uu("Unknown error from CDM",e,0,$.KeySystemCDMUnknownError,!1,Xl.InternalError); + return (t instanceof uu || t instanceof lu) && (t.mediaOptionIds = [...i]), + t + } + class kh { + constructor(e, t, i, r, n, s, a, o=new Ih) { + this.ksService = e, + this.mediaSink = t, + this.config = i, + this.platformQuery = r, + this.eventEmitter = n, + this.sessionHandler = s, + this.keySystemFactory = o, + this.reset$ = new zt, + this.keyRequest$ = new zt, + this.abort$ = new zt, + this.keySystem$ = new gi(null), + this._keyStatusChange$ = new zt, + this.protectionData = {}, + this.keySystemId = null, + this.keyUriToRequest = {}, + this.ksQuery = e.getQuery(), + this.logger = a.child({ + name: "eme" + }), + this.config.warmupCdms && this.keySystemFactory.createMediaKeys(pu.id, wh, Ah, this.logger, void 0).subscribe(), + nn(r.platformInfo$.pipe(Es((e,t)=>e && t && e.requiresCDMAttachOnStart === t.requiresCDMAttachOnStart), Ra(e=>null != e && e.requiresCDMAttachOnStart ? this.attachMediaKeys().pipe(Un(e=>(this.handleKeySystemError(e), + Ti))) : Ul), Ua(Ti)), this.keyRequest$.pipe(Kr(e=>e.pipe(Un(()=>Ti)))), this.keySystem$.pipe(Ra(e=>e ? e.keyStatusChange$.pipe(Ja(e=>{ + var t = e.decryptdata.uri + , i = this.ksQuery.getKeyInfo(t); + "needs-renewal" === e.status ? this.ksService.updateKeyRequestState(t, zl.MustRequestResponse, e=>e === zl.GotKeyResponse) : (i = Oh(t, e.error, null !== (i = null == i ? void 0 : i.mediaOptionIds) && void 0 !== i ? i : []), + this.ksService.setError(t, i)), + this._keyStatusChange$.next(e) + } + )) : Ti)), this.isKeyCleanupSupported() ? this.mediaSink.mediaQuery.bufferedSegmentsTuple$.pipe(Kr(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) + } + )) : Ul).pipe($a(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 = Ul; + return e && (this.keySystem$.next(null), + e.shouldDestroyMediaKeys && this.keySystemFactory.destroyMediaKeys(), + t = e.destroy()), + Cr([t, this.mediaSink.clearMediaKeys(this.config.clearMediaKeysOnPromise)]).pipe(Js(void 0)) + } + attachMediaKeys() { + if (this.keySystem) + return Ul; + var e = this.config.keySystemPreference ? Ih.getKeySystemFormat(this.config.keySystemPreference) : pu.keyFormatString; + return this.makeKeySystem(new Gc("NONE",null,null,e,[1])).pipe(Js(void 0)) + } + isKeyCleanupSupported() { + return !0 === this.config.useMultipleKeySessions || "widevine" === this.config.keySystemPreference || "playready" === this.config.keySystemPreference + } + handleKeyCleanup(i) { + if (this.ksQuery.getCount() < 6) + return Ul; + const r = performance.now() + , e = this.ksQuery.getAll().map(e=>{ + var t = e.keyUri; + if (!i.has(t)) { + const i = eu(e.decryptdata); + if ("AES-128" !== i.method && r > e.minHoldTime) + return this._removeKey(t, i) + } + return Ul + } + ); + return e.length ? Jr(e).pipe(Ua(Ul)) : Ul + } + _removeKey(e, t) { + return this.abort$.next(e), + this.ksService.removeKey(e), + this.keySystem.removeKey(t) + } + removeKeysForItems(i) { + const r = []; + return sd(()=>{ + 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, eu(t.decryptdata))) + } + } + ), + r.length ? Jr(r).pipe(Ra(()=>Ul)) : Ul + } + get availableKeySystems() { + return Ih.availableKeySystems + } + initialize(e) { + var t = this.protectionData; + this.protectionData = {}; + var i = this.config.keySystemPreference; + for (const a of Ih.availableKeySystems) { + var r = e[a]; + if (r) + if (i === a) { + var n, s = r.certificate, r = r.serverCertUrl ? fl.buildAbsoluteURL(window.location.href, r.serverCertUrl) : void 0; + let e; + this.protectionData[a] = { + serverCertUrl: r, + certificate: s + }, + s ? e = Bi({ + keysystem: a, + certificate: s + }) : r && (null === (n = null == t ? void 0 : t[a]) || void 0 === n ? void 0 : n.serverCertUrl) !== r && (n = ml(r) ? this.config.certLoadPolicy.customURL : this.config.certLoadPolicy.default, + e = Pc({ + url: r, + xhrSetup: this.config.xhrSetup + }, n).pipe(ur(([e])=>({ + keysystem: a, + certificate: new Uint8Array(e) + })))), + e && e.pipe(Ra(e=>this.onServerCertificateLoaded(e)), Un(e=>{ + throw 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 + } + ), $a(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 Bi(e); + let i; + return sd(()=>{ + 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 uu && !1 === e.error.isOkToRetry) + return Ui(e.error); + if (e && e.requestState !== zl.MustRequestResponse) + return e.requestState === zl.GotKeyResponse ? Bi(eu(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: zl.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(vo(o.maxLoadTimeMs)); + break + } + case "AES-128": + e = this.fetchKeyHTTP(t.uri, t, this.config.keyLoadPolicy); + break; + default: + return Ui(new V(!1,`Unexpected METHOD attribute ${a}`,$.KeySystemUnexpectedMETHOD)) + } + i = this.keyUriToRequest[s] = e.pipe(ur(e=>{ + var t = e.decryptdata; + return this.ksService.updateKeyValue(s, t.key), + this.eventEmitter.trigger(x.KEY_LOADED, e), + e.decryptdata + } + ), Un(e=>{ + var t = this.ksQuery.getKeyInfo(s); + return e = Oh(s, e, null !== (t = null == t ? void 0 : t.mediaOptionIds) && void 0 !== t ? t : []), + this.ksService.setError(s, e), + Ui(e) + } + ), $s(()=>{ + this.ksService.updateKeyRequestState(s, zl.MustRequestResponse, e=>e === zl.WaitingForKeyResponse), + this.keyUriToRequest[s] = null + } + ), wa(), $a(hn(this.abort$.pipe(an(e=>e === s)), this.reset$).pipe(Ja(e=>this.logger.warn(e ? `aborted ${oe(e)}` : "got reset"))))); + return this.keyRequest$.next(i), + i + } + } + fetchKeyEME(e) { + return this.requestKey(e).pipe(ur(e=>({ + timestamp: performance.now(), + keyuri: e.uri, + decryptdata: e + }))) + } + fetchKeyHTTP(e, t, i) { + return kh.fetchKeyHTTP(e, this.config, t, i) + } + static fetchKeyHTTP(t, e, i, r) { + e = { + url: t, + xhrSetup: e.xhrSetup + }; + return Pc(e, xc(e, r)).pipe(ur(([e])=>(i.key = new Uint8Array(e), + { + decryptdata: i, + keyuri: t, + timestamp: performance.now() + }))) + } + requestKey(t) { + return this.makeKeySystem(t).pipe(Ra(e=>e.startKeyRequest(t))) + } + ensureKeySystem(t) { + return Yr(()=>{ + 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(Js(this.keySystem)) + } + return Bi(this.keySystem) + } + ) + } + makeKeySystem(e) { + return this.ensureMediaKeys(e).pipe(Ra(e=>this.mediaSink.setMediaKeys(e).pipe(Ra(()=>this.ensureKeySystem(e))))) + } + ensureMediaKeys(e) { + var t = Ih.getKeySystemIdForDecryptData(e); + if (null == this.keySystemId) + this.keySystemId = t; + else if (this.keySystemId !== t) + return Ui(new uu(`New key system string does not match existing ${t} !== ${this.keySystemId}`,e.uri,0,$.KeySystemUnmatchedString,!1,Xl.InternalError)); + return this.keySystemFactory.createMediaKeys(this.keySystemId, wh, Ah, 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(Js(void 0)) : Ul + } + handleKeySystemError(e) { + e = new cu(e.message,void 0,void 0,$.KeySystemSetupError,void 0); + this.eventEmitter.trigger(x.INTERNAL_ERROR, e) + } + } + class Ch extends Od { + constructor(e) { + super(e) + } + getKeyInfo(e) { + e = this.getEntity(e); + return e ? Object.assign(Object.assign({}, e), { + error: hu(e.error, e.mediaOptionIds) + }) : null + } + getKeyInfo$(e) { + return this.selectEntity(e).pipe(ur(e=>e ? Object.assign(Object.assign({}, e), { + error: hu(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=>hu(null == e ? void 0 : e.error, null == e ? void 0 : e.mediaOptionIds)).pipe(Id) + } + } + class Dh { + constructor(e) { + this.store = e + } + getQuery() { + return new Ch(this.store) + } + upsertKey(i) { + Co("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) { + Co("keys.removeKey", e), + this.store.remove(e) + } + removeAllKeysForItem(i) { + Co(`keys.removeAllKeysForItem ${i}`), + this.store.update(null, e=>{ + var t = e.itemIds.findIndex(e=>e === i); + 0 <= t && e.itemIds.splice(t, 1) + } + ) + } + removeAll() { + Co("keys.remove"), + this.store.remove() + } + updateKeyValue(e, t) { + Co("keys.updateKeyValue", e), + this.store.update(e, e=>{ + null == e.decryptdata.keyBuf && null != t && (e.decryptdata.keyBuf = t.buffer), + e.requestState = zl.GotKeyResponse + } + ) + } + updateKeyStatus(e, t) { + Co(`keys.updateKeyStatus ${t}`, e), + this.store.update(e, e=>{ + e.status = t + } + ) + } + updateKeyRequestState(e, t, i) { + Co(`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; + Co(`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; + Co(`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 = hu(t), + e.requestState = zl.MustRequestResponse + } + ) + } + } + const Mh = new class extends pd { + constructor() { + super({}, { + name: "key-system-store", + idKey: "keyUri", + producerFn: vc + }) + } + } + ; + let Ph = null; + function xh(e) { + let t = e; + return Lh.hasOwnProperty(e) && (t = Lh[e]), + String.fromCharCode(t) + } + function Rh(t) { + const i = []; + for (let e = 0; e < t.length; e++) + i.push(t[e].toString(16)); + return i + } + const Lh = { + 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 + } + , _h = 100 + , Nh = { + 17: 1, + 18: 3, + 21: 5, + 22: 7, + 23: 9, + 16: 11, + 19: 12, + 20: 14 + } + , Fh = { + 17: 2, + 18: 4, + 21: 6, + 22: 8, + 23: 10, + 19: 13, + 20: 15 + } + , Bh = { + 25: 1, + 26: 3, + 29: 5, + 30: 7, + 31: 9, + 24: 11, + 27: 12, + 28: 14 + } + , Uh = { + 25: 2, + 26: 4, + 29: 6, + 30: 8, + 31: 10, + 27: 13, + 28: 15 + } + , $h = ["white", "green", "blue", "cyan", "red", "yellow", "magenta", "black", "transparent"] + , Vh = { + 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 Kh { + 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 Hh { + constructor(e, t, i, r, n, s) { + this.uchar = e || " ", + this.penState = new Kh(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 jh { + constructor() { + this.chars = []; + for (let e = 0; e < _h; e++) + this.chars.push(new Hh); + this.pos = 0, + this.currPenState = new Kh + } + equals(t) { + let i = !0; + for (let e = 0; e < _h; e++) + if (!this.chars[e].equals(t.chars[e])) { + i = !1; + break + } + return i + } + copy(t) { + for (let e = 0; e < _h; e++) + this.chars[e].copy(t.chars[e]) + } + isEmpty() { + let t = !0; + for (let e = 0; e < _h; e++) + if (!this.chars[e].isEmpty()) { + t = !1; + break + } + return t + } + setCursor(e) { + this.pos !== e && (this.pos = e), + this.pos < 0 ? (Vh.log("ERROR", "Negative cursor position " + this.pos), + this.pos = 0) : this.pos > _h && (Vh.log("ERROR", "Too large cursor position " + this.pos), + this.pos = _h) + } + 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 = xh(e); + this.pos >= _h ? Vh.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 < _h; 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 < _h; 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 qh { + constructor() { + this.rows = []; + for (let e = 0; e < 15; e++) + this.rows.push(new jh); + 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) { + Vh.log("INFO", "setCursor: " + e), + this.rows[this.currRow].setCursor(e) + } + setPAC(t) { + Vh.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 < Vh.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) { + Vh.log("INFO", "bkgData = " + JSON.stringify(e)), + this.backSpace(), + this.setPen(e), + this.insertChar(32) + } + setRollUpRows(e) { + this.nrRollUpRows = e + } + rollUp() { + if (null !== this.nrRollUpRows) { + Vh.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), + Vh.log("INFO", "Rolling up") + } else + Vh.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 Qh { + constructor(e, t) { + this.chNr = e, + this.outputFilter = t, + this.mode = null, + this.verbose = 0, + this.displayedMemory = new qh, + this.nonDisplayedMemory = new qh, + this.lastOutputScreen = new qh, + 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, + Vh.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"; + Vh.log("INFO", e + ": " + this.writeScreen.getDisplayText(!0)), + "MODE_PAINT-ON" !== this.mode && "MODE_ROLL-UP" !== this.mode || (Vh.log("TEXT", "DISPLAYED: " + this.displayedMemory.getDisplayText(!0)), + this.outputDataUpdate()) + } + ccRCL() { + Vh.log("INFO", "RCL - Resume Caption Loading"), + this.setMode("MODE_POP-ON") + } + ccBS() { + Vh.log("INFO", "BS - BackSpace"), + "MODE_TEXT" !== this.mode && (this.writeScreen.backSpace(), + this.writeScreen === this.displayedMemory && this.outputDataUpdate()) + } + ccAOF() {} + ccAON() {} + ccDER() { + Vh.log("INFO", "DER- Delete to End of Row"), + this.writeScreen.clearToEndOfRow(), + this.outputDataUpdate() + } + ccRU(e) { + Vh.log("INFO", "RU(" + e + ") - Roll Up"), + this.writeScreen = this.displayedMemory, + this.setMode("MODE_ROLL-UP"), + this.writeScreen.setRollUpRows(e) + } + ccFON() { + Vh.log("INFO", "FON - Flash On"), + this.writeScreen.setPen({ + flash: !0 + }) + } + ccRDC() { + Vh.log("INFO", "RDC - Resume Direct Captioning"), + this.setMode("MODE_PAINT-ON") + } + ccTR() { + Vh.log("INFO", "TR"), + this.setMode("MODE_TEXT") + } + ccRTD() { + Vh.log("INFO", "RTD"), + this.setMode("MODE_TEXT") + } + ccEDM() { + Vh.log("INFO", "EDM - Erase Displayed Memory"), + this.displayedMemory.reset(), + this.outputDataUpdate(!0) + } + ccCR() { + Vh.log("INFO", "CR - Carriage Return"), + this.writeScreen.rollUp(), + this.outputDataUpdate(!0) + } + ccENM() { + Vh.log("INFO", "ENM - Erase Non-displayed Memory"), + this.nonDisplayedMemory.reset() + } + ccEOC() { + var e; + Vh.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, + Vh.log("TEXT", "DISP: " + this.displayedMemory.getDisplayText())), + this.outputDataUpdate(!0) + } + ccTO(e) { + Vh.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]), + Vh.log("INFO", "MIDROW: " + JSON.stringify(t)), + this.writeScreen.setPen(t) + } + outputDataUpdate(e=!1) { + var t = Vh.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 Gh = class { + constructor(e=1, t, i) { + this.field = e, + this.currChNr = -1, + this.lastCmdA = null, + this.lastCmdB = null, + this.channels = [new Qh(1,t), new Qh(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; + Vh.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, + Vh.log("DEBUG", "Repeated command (" + Rh([r, n]) + ") is dropped")) : 0 != r || 0 != n ? (Vh.log("DATA", "[" + Rh([t[e], t[e + 1]]) + "] -> (" + Rh([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) : Vh.log("WARNING", "No channel found yet. TEXT-MODE?")), + i ? this.dataCounters.cmd += 2 : s ? this.dataCounters.char += 2 : (this.dataCounters.other += 2, + Vh.log("WARNING", "Couldn't parse cleaned data " + Rh([r, n]) + " orig: " + Rh([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 Vh.log("ERROR", "Mismatch channel in midrow parsing"), + !1; + const r = this.channels[i - 1]; + return r.insertChars([32]), + r.ccMIDROW(t), + Vh.log("DEBUG", "MIDROW (" + Rh([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 ? Nh : Bh : 1 == i ? Fh : Uh)[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, + Vh.log("INFO", "Special char '" + xh(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 = Rh(r); + Vh.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 = $h[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 Wh { + 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 zh = {} + , mu = {} + , gr = {} + , 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) + } + ; + yc = {}; + Object.defineProperty(yc, "__esModule", { + value: !0 + }); + const Xh = { + "&": "&", + "<": "<", + ">": ">", + "‎": "‎", + "‏": "‏", + " ": " " + } + , Yh = { + c: "span", + i: "i", + b: "b", + u: "u", + ruby: "ruby", + rt: "rt", + v: "span", + lang: "span" + } + , Jh = { + v: "title", + lang: "lang" + } + , Zh = { + rt: "ruby" + } + , ep = { + "text-combine-upright": "-webkit-text-combine:horizontal; text-orientation: mixed;" + }; + class tp { + 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 Xh[e] + } + const r = s.document.createElement("div") + , n = []; + let o, d, l = 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]) + l.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(), + l = l.parentNode); + continue + } + const t = tp.parseTimeStamp(o.substr(1, o.length - 2)); + let e; + if (t) { + e = s.document.createProcessingInstruction("timestamp", t.toString()), + l.appendChild(e); + continue + } + if (!(d = /^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/.exec(o))) + continue; + if (e = function(e, t, i) { + var r = Yh[e]; + if (!r) + return null; + const n = s.document.createElement(r); + if (n.dataset.localName = r, + (e = Jh[e]) && i && (n[e] = i.trim()), + t) + if (a[t]) { + const s = function(e) { + let t = ""; + for (const i in e) + t += ep[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 + }(d[1], d[2], d[3]), + !e) + continue; + if (u = l, + c = e, + Zh[c.dataset.localName] && Zh[c.dataset.localName] !== u.dataset.localName) + continue; + n.push(d[1]), + l.appendChild(e), + l = e + } + var u, c; + return r + } + } + yc.default = tp; + gc = 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(gr, "__esModule", { + value: !0 + }); + const ip = t + , rp = yc; + gc = gc([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 + } + ], gc = 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 (!ip.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 (!ip.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 (!ip.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 (!ip.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 (!ip.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 (!ip.isValidAlignSetting(e)) + throw new SyntaxError(`An invalid or illegal string was specified for align: ${e}`); + this._align = e, + this.hasBeenReset = !0 + } + getCueAsHTML() { + return rp.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 + } + } + ); + gr.VTTCue = gc; + gc = {}, + 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(gc, "__esModule", { + value: !0 + }); + const np = 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 (!np.isValidPercentValue(e)) + throw new TypeError("RegionAnchorX must be between 0 and 100."); + this._regionAnchorX = e + } + get regionAnchorY() { + return this._regionAnchorY + } + set regionAnchorY(e) { + if (!np.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 (np.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 (!np.isValidPercentValue(e)) + throw new TypeError("ViewportAnchorX must be between 0 and 100."); + this._viewportAnchorX = e + } + get viewportAnchorY() { + return this._viewportAnchorY + } + set viewportAnchorY(e) { + if (!np.isValidPercentValue(e)) + throw new TypeError("ViewportAnchorY must be between 0 and 100."); + this._viewportAnchorY = e + } + get width() { + return this._width + } + set width(e) { + if (!np.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)) + } + } + ); + gc.VTTRegion = e, + Object.defineProperty(mu, "__esModule", { + value: !0 + }); + const sp = gr; + mu.VTTCue = sp.VTTCue; + const ap = gc; + mu.VTTRegion = ap.VTTRegion; + const op = yc; + class dp extends Error { + constructor(e, t) { + super(), + this.name = "ParsingError", + this.code = "number" == typeof e ? e : e.code, + t ? this.message = t : e instanceof dp && (this.message = e.message) + } + } + (mu.ParsingError = dp).Errors = { + BadSignature: new dp(0,"Malformed WebVTT signature."), + BadTimeStamp: new dp(1,"Malformed time stamp.") + }; + class lp { + 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 up { + 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 dp && "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 = op.default.parseTimeStamp(t); + if (null === e) + throw new dp(dp.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 dp(dp.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 lp; + 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 lp; + 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 lp; + 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 ap.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 dp(dp.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 sp.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 dp(dp.Errors.BadSignature) + } catch (e) { + this.reportOrThrowError(e) + } + return this.onflush && this.onflush(), + this + } + styles() { + return this._styles + } + } + mu.default = up, + mu.WebVTTParser = up; + var cp, gc = {}; + Object.defineProperty(gc, "__esModule", { + value: !0 + }); + const hp = gr; + gc.VTTCue = hp.VTTCue; + const pp = yc + , fp = [/^(::cue\()(\..*)(\))/, /^(::cue\()(#.*)(\))/, /^(::cue\()(c|i|b|u|ruby|rt|v|lang)(\))/] + , mp = [[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 gp { + 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 + } + } + gc.StyleBox = gp; + class yp extends gp { + 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 = pp.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), mp)) + 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") + }) + } + } + gc.CueStyleBox = yp; + class vp { + constructor(e) { + var t; + let i, r, n, s, a, o; + if (e instanceof yp && e.cue ? (t = e.cue) && "" !== t.vertical ? this.property = "width" : this.property = "height" : e instanceof vp && (this.property = e.property || "height"), + e instanceof yp && 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 vp && (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 gp && 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 vp(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 + }(), d = []; + if (n.snapToLines) { + let t = 0; + switch (n.vertical) { + case "": + d = ["+y", "-y"], + i = "height"; + break; + case "rl": + d = ["+x", "-x"], + i = "width"; + break; + case "lr": + d = ["-x", "+x"], + i = "width" + } + const o = r.lineHeight + , l = a[i] + o + , u = d[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, + d = d.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) > l && (t = t < 0 ? -1 : 1, + t *= Math.ceil(l / 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, "%") + }) + } + d = ["+y", "-y", "+x", "-x"], + "+y" === n.axis ? d = ["+y", "-y", "+x", "-x"] : "-y" === n.axis && (d = ["-y", "+y", "+x", "-x"]), + r = new vp(e) + } + const l = 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: vp.getBoxPosition(o, "top"), + bottomMostBoxPosition: vp.getBoxPosition(o, "bottom"), + leftMostBoxPosition: vp.getBoxPosition(o, "left"), + rightMostBoxPosition: vp.getBoxPosition(o, "right") + }, + vp.moveToMinimumDistancePlacement(r, n[i], s)), + t = !0), + e++ + } + return r + }(r, d); + e.move(l.toCSSCompatValues(a)) + } + } + gc.BoxPosition = vp; + class Sp { + 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 hp.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 ? pp.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 < fp.length; e++) { + var s = fp[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 = vp.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 yp(this.window,e,this.foregroundStyleOptions,this.backgroundStyleOptions,this.globalStyleCollection); + this.paddedOverlay.appendChild(t.div), + vp.moveBoxToLinePosition(t, s, n), + e.displayState = t.div, + n.push(vp.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 bp(e) { + for (var t in e) + cp.hasOwnProperty(t) || (cp[t] = e[t]) + } + gc.default = Sp, + gc.WebVTTRenderer = Sp, + cp = zh, + Object.defineProperty(cp, "__esModule", { + value: !0 + }), + bp(mu), + bp(gc); + function Tp(e, t, i) { + return e.substr(i || 0, t.length) === t + } + function Ep(e) { + let t = 5381 + , i = e.length; + for (; i; ) + t = 33 * t ^ e.charCodeAt(--i); + return (t >>> 0).toString() + } + function Ip(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 wp(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 Ap, Op, kp, Cp = function(e, t, i, r, n, s, a, o) { + const d = O.utf8arrayToStr(new Uint8Array(e)).trim().replace(/\r\n|\n\r|\n|\r/g, "\n").split("\n") + , l = { + 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 zh.WebVTTParser(window,zh.WebVTTParser.StringDecoder(),a); + m.oncue = function(e) { + var t = S({ + baseTime: wp(wp(u) - l.baseTime, 9e4 * i), + timescale: 9e4 + }); + e.startTime = wp(e.startTime + t - c, 0, 95443.7176888889), + e.endTime = wp(e.endTime + t - c, 0, 95443.7176888889), + e.id = Ep(Ip(e.startTime).toString()) + Ep(Ip(e.endTime - e.startTime).toString()) + Ep(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) + } + , + d.forEach(a=>f && Tp(a, "X-TIMESTAMP-MAP=") ? (f = !1, + void a.substr(16).split(",").forEach(e=>{ + if (Tp(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 + Tp(e, "MPEGTS:") && (u = parseInt(e.substr(7))); + var i, r, n, s + } + )) : void m.parse(a + "\n")), + m.flush() + }, Dp = { + newCue: function(e, t, i, r, n) { + let s, a, o, d, l; + 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, + d = "", + !c.isEmpty()) { + for (let e = 0; e < c.chars.length; e++) + c.chars[e].uchar.match(/\s/) && a ? o++ : (d += this.getFormattedChar(c.chars[e], h), + a = !1); + (c.cueStartTime = t) === i && (i += 1e-4), + d = d.trim().replace(//gi, "\n"), + d += this.closeStyles(h), + s = new zh.VTTCue(t,i,d), + 16 <= o ? o-- : o++, + l = !navigator.userAgent.match(/Firefox\//) && 7 < u ? u : u + 1, + s.snapToLines = !1, + s.line = 10 + 5.33 * l, + 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 += "", + 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 += "", + t.styleStack.splice(r - 1 - n); + break + } + "c" === o[0] ? (t.background = "", + t.foreground = "", + t.flash = !1, + s += "") : "u" === o[0] ? (t.underline = !1, + s += "") : "i" === o[0] && (t.italics = !1, + s += ""), + 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 + } + }; + (gc = Ap = Ap || {}).CloseEnough = "CloseEnough", + gc.TooFar = "TooFar", + gc.Unknown = "Unknown"; + const Mp = e=>"cc1" === e || "cc2" === e; + function Pp(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 xp(e) { + if (e && e.cues) + for (; 0 < e.cues.length; ) + e.removeCue(e.cues[0]) + } + class Rp extends Ut { + constructor(e, t, i, r) { + super(e=>{ + const t = wc(this.hls, this); + if (e.add(t.event(x.INLINE_STYLES_PARSED, this.onInlineStylesParsed).pipe($s(()=>this.destroy())).subscribe()), + e.add(vn(0, this.config.trottleCheckInterval).pipe(Ra(()=>(this.checkReadyToLoadNextSubtitleFragment(), + Ul))).subscribe()), + this.mediaSink.textTracks && "onchange"in this.mediaSink.textTracks) { + const t = wc(this.mediaSink.textTracks, this); + e.add(t.event("change", this._onTextTracksChanged).subscribe()) + } else + e.add(vn(0, 500).pipe(Ra(()=>(this._onTextTracksChanged(), + Ul))).subscribe()) + } + ), + this.config = t, + this.hls = i, + this.logger = r.child({ + name: "legible" + }), + this.mediaSink = e, + this.enableCaption = !0, + this.Cues = Dp, + this.tracks = [], + this.cueRanges = [], + this.channelToTrackMap = {}, + this.htmlTextTrackMap = new Map, + this.lastCueEndTime = 0, + this.gotTracks = !1, + this.tryAgain$ = new gi(!0), + this.needNextSubtitle$ = new gi(!0) + } + destroy() { + xp(this.textTrack1), + xp(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$() { + return 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 + , d = null + , l = 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.isFragmentComplete(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(d) && 1 < u - d) && (a = o = c.startTime), + e >= c.startTime) + o = c.endTime, + d = u; + else { + if (!ne(d) || u - d != 1) { + l = u; + break + } + o = c.endTime, + d = u + } + } else + this.logger.warn(`$fragInfoMap has invalid key ${u}`) + } + return s = { + len: o - a, + start: a, + end: o + }, + { + fragInfoMap: n, + bufferInfo: s, + prevFragSN: d, + nextFragSN: l + } + } + findFrags$(t, i) { + return this.tryAgain$.pipe(Hi(Zi), Ra(()=>{ + var e = this.findFragmentsForPosition(this.mediaSink.mediaQuery.currentTime, i, t); + return e.foundFrags ? (this.lastCueEndTime = 0, + this.needNextSubtitle$.next(!0), + Bi(e)) : Ti + } + )) + } + 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 d = !0; + if (n.mediaSeqNum === e[0].mediaSeqNum) { + if (!i.timelineEstablished) + return Ap.TooFar; + if (!s) + return this.logger.warn(`[subtitle] 1st frag sn ${n.mediaSeqNum} has no cue; details ${r.fragments.length} frags`), + Ap.Unknown; + if (s.startTime < o) { + const l = r.fragments + , i = n.mediaSeqNum - r.startSN; + let e = i + , t = s.startTime; + for (; e < l.length && (t += l[e].duration, + !(t >= o)); ++e) + ; + d = e - i + 1 <= this.config.earlyFragTolerance + } else if (s.startTime > o && n.mediaSeqNum !== r.startSN) { + const l = t.prevFragSN; + if (n.mediaSeqNum === l + 1 && (null === (t = t.fragInfoMap[l]) || void 0 === t ? void 0 : t.count) === (null === (a = a[l]) || void 0 === a ? void 0 : a.count)) + d = !0; + else { + const l = r.fragments[n.mediaSeqNum - r.startSN - 1]; + d = s.startTime - o < l.duration + } + } + } + return d ? Ap.CloseEnough : Ap.TooFar + } + isFragmentComplete(e, t, i) { + e = i ? i[e] : null; + return (null == e ? void 0 : e.count) === t + } + 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, e, n) { + let s, a, o, d, l; + if (ne(e.prevFragSN) && (a = e.prevFragSN - n.startSN, + o = t[e.prevFragSN]), + ne(e.nextFragSN) && (d = e.nextFragSN - n.startSN, + l = t[e.nextFragSN]), + ne(a) && 0 <= a && a < n.fragments.length && o) { + let t = o.startTime; + for (let e = a; e < n.fragments.length; ++e) { + const o = n.fragments[e]; + if (!ne(r) || o.discoSeqNum === r) { + if (t + o.duration > i && e > a) { + s = { + foundFrag: o, + timelineEstablished: !0 + }; + break + } + t += o.duration + } + } + } else if (ne(d) && 0 <= d && d < n.fragments.length && l) { + let t = l.startTime; + for (let e = d - 1; 0 <= e; --e) { + const a = n.fragments[e]; + if (!ne(r) || a.discoSeqNum === r) { + if (t <= i) { + s = { + foundFrag: a, + timelineEstablished: !0 + }; + break + } + t -= a.duration + } + } + } else + for (let e = 0; e < n.fragments.length; ++e) { + const t = n.fragments[e]; + if (ne(r) && t.discoSeqNum === r) { + s = { + foundFrag: t, + timelineEstablished: !1 + }; + break + } + } + return s + } + generateFragmentBatch(t, i, e, r, n, s) { + var a; + const o = [] + , d = null == e ? void 0 : e.foundFrag; + if (!d) + return { + foundFrags: void 0, + subtitleParsedInfo: void 0, + subtitleBufferInfo: void 0, + timelineEstablished: null == e ? void 0 : e.timelineEstablished + }; + for (let e = d ? d.mediaSeqNum - s.startSN : s.fragments.length; e < s.fragments.length && o.length < t; ++e) { + const t = s.fragments[e]; + if (t.discoSeqNum === i) { + const d = null === (a = n.fragInfoMap[t.mediaSeqNum]) || void 0 === a ? void 0 : a.count; + this.isFragmentComplete(t.mediaSeqNum, null != d ? d : 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 = Pp(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 = Pp(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] + , l = (a = r[0], + o = r[1], + d = t, + Math.min(o, i) - Math.max(a, d)); + if (0 <= l && (r[0] = Math.min(r[0], t), + r[1] = Math.max(r[1], i), + s = !0, + .5 < l / (i - t))) + return + } + var a, o, d; + 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 (Mp(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, + xp(this.channelToTrackMap[n]), + this.sendAddTrackEvent(this.channelToTrackMap[n], this.mediaSink); + else { + const s = this.createHTMLTextTrackGuts("captions", t, i, r); + s && Mp(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) { + if ("sbtl" === t.mediaType) + i = this.createHTMLTextTrackGuts("subtitles", t.name, t.lang, t.forced); + else { + let e = 1; + t.inStreamID && (e = Number(t.inStreamID.substring(2))), + 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}`) + } + 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++) + xp(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.tracks.forEach(e=>{ + this.createHTMLTextTrack(e) + } + ) + } + attachId3Tracks() { + this.id3Track = this.mediaSink.addTextTrack("metadata", "id3"), + this.id3Track.mode = "hidden" + } + 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.attachId3Tracks(), + this.selectedTrack = t, + this.nativeSubtitleTrackChange$ = new zt, + 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 && (this.lastCueEndTime = Math.max(this.lastCueEndTime, s.endTime)), + s + } + } + _parseVTTs(r, n, e, t) { + let s; + return Cp(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) + } + ), + ne(i.startTime) && (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 Wh(this,1), + t = new Wh(this,2), + this.cea608Parser = new Gh(0,e,t)) + } + anchorTimeChanged() { + this.resetClosedCaptionParser() + } + 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 = Rp.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 Lp = { + name: "plist" + }; + class _p { + 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 = Bi(r); + return t.forEach(e=>{ + const i = e["DATA-ID"] + , t = e.URI; + if (t && n[i]) { + const n = fl.buildAbsoluteURL(r.baseUrl, t, { + alwaysNormalize: !0 + }) + , e = ""; + s = s.pipe(Ra(t=>this.loadSessionDataItemWithUrl(n, i, "", this.config, t, this.xhrLoader, this.customUrlLoader).pipe(Un(e=>(this.logger.error(`Error loading SessionData > url=${n}, id=${i}, err=${e}`), + Bi(t)))))) + } + } + ), + s.pipe(ur(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) + } + ), $s(()=>{} + )) + } + loadSessionDataItemWithUrl(e, t, i, r, n, s, a) { + const o = qe() + , d = { + url: e, + method: "GET", + responseType: i, + xhrSetup: r.xhrSetup, + mimeType: "application/xml" + } + , l = xc({ + url: e + }, r.fragLoadPolicy); + let u; + return u = ml(e) ? a(d, l).pipe(ur(e=>this.onLoadSuccess(n, t, e.data.response.data, e.data.response.data))) : s(d, l).pipe(ur(([e])=>this.onLoadSuccess(n, t, e.response, e.responseXML))), + u.pipe(Un(e=>(e instanceof or ? e = new su(!1,e.message,0,$.SessionDataLoadTimeout) : e instanceof tu && (e = new su(!1,e.message,e.code,{ + code: e.code, + text: "Failed to load SessionData" + })), + o.error(`Unable to load SessionData > err=${e}`), + Bi(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]*"), + 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(Lp, `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 Np(e) { + return null != e && "iframeMediaDuration"in e && "iframeMediaStart"in e + } + function Fp(e, t) { + return e === t || e && t && e.itemId === t.itemId && e.mediaOptionId === t.mediaOptionId && e.mediaSeqNum === t.mediaSeqNum && e.discoSeqNum === t.discoSeqNum + } + function Bp(e) { + return JSON.stringify(e, ["mediaOptionId", "mediaSeqNum", "discoSeqNum", "start", "duration"]) + } + function Up() { + return e=>e.pipe(an(e=>null != e), ur(e=>e)) + } + function $p(e) { + return Se.isDolby(e) ? al.DOVI : Se.isHEVC(e) ? al.HEVC : Se.isVP09(e) ? al.VP09 : Se.isAVC(e) ? al.AVC : al.UNKNOWN + } + function Vp(e) { + return null == e ? void 0 : e.split(".")[0] + } + function Kp(e) { + return Se.isALAC(e) ? dl.ALAC : Se.isFLAC(e) ? dl.FLAC : Se.isEC3(e) ? dl.EC3 : Se.isAC3(e) ? dl.AC3 : Se.isXHEAAC(e) ? dl.XHEAAC : Se.isAAC(e) ? dl.AAC : Se.isMP3(e) ? dl.MP3 : dl.UNKNOWN + } + class Hp { + 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 jp(e) { + return ne(e) && 0 !== e && 1 !== e + } + const qp = { + 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)=>qp.getBufferedInfo(qp.timeRangesToBufferedRange(e.buffered), t, i), + getBufferedInfo(e, t, i) { + const r = []; + let n, s, a, o, d; + const l = e.map(({start: e, end: t})=>({ + start: e, + end: t + })); + for (l.sort((e,t)=>{ + return e.start - t.start || t.end - e.end + } + ), + d = 0; d < l.length; d++) { + const e = r.length; + if (e) { + const t = r[e - 1].end; + l[d].start - t < i ? l[d].end > t && (r[e - 1].end = l[d].end) : r.push(l[d]) + } else + r.push(l[d]) + } + for (d = 0, + n = 0, + s = a = t; d < r.length; d++) { + const e = r[d]["start"] + , l = r[d]["end"]; + if (t + i >= e && t < l) + s = e, + a = l, + 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)}]` + }; + (gc = Op = Op || {}).Seek = "Seek", + gc.HighBuffer = "HighBuffer", + gc.LowBuffer = "LowBuffer", + (gc = kp = kp || {}).AlmostDry = "AlmostDry", + gc.LowWater = "LowWater", + gc.HighWater = "HighWater", + gc.AboveHighWater = "AboveHighWater"; + const Qp = { + [kp.AlmostDry]: 0, + [kp.LowWater]: 1, + [kp.HighWater]: 2, + [kp.AboveHighWater]: 3 + }; + function Gp(t, e) { + return [{ + threshold: e.highWaterLevelSeconds, + level: kp.HighWater + }, { + threshold: e.lowWaterLevelSeconds, + level: kp.LowWater + }, { + threshold: e.almostDryWaterLevelSeconds, + level: kp.AlmostDry + }].find(({threshold: e})=>e < t) + } + function Wp(t, e) { + return [{ + threshold: e.almostDryWaterLevelSeconds, + level: kp.AlmostDry + }, { + threshold: e.lowWaterLevelSeconds, + level: kp.LowWater + }, { + threshold: e.highWaterLevelSeconds, + level: kp.HighWater + }, { + threshold: 1 / 0, + level: kp.AboveHighWater + }].find(({threshold: e})=>t <= e) + } + function zp(t, i) { + const e = Wp(t.getCurrentWaterLevel(i), t.bufferMonitorInfo).level + , r = [null, null]; + return [cl.Variant, cl.AltAudio].forEach(e=>{ + null != t.sourceBufferEntityByType(e) && (r[e] = Wp(t.getCurrentWaterLevelByType(e, i), t.bufferMonitorInfo).level) + } + ), + { + combined: e, + sbTuple: r + } + } + function Xp(s, a) { + return Zd([s.combinedBuffer$, s.gotPlaying$, s.seeking$, s.waterLevelChangedForType$(null), s.stallInfo$]).pipe(Ra(([e,t,i,r,n])=>0 === e.length || !t || i || null == r || null != n ? Ti : function t(i, r, e) { + const n = i.getCurrentWaterLevel(r) + , s = Gp(n, i.bufferMonitorInfo); + if (s) { + const e = s["threshold"]; + return vn(Math.ceil(1e3 * (n - e))).pipe(Ra(()=>{ + const e = Gp(i.getCurrentWaterLevel(r), i.bufferMonitorInfo); + return (null == e ? void 0 : e.level) === s.level ? t(i, r) : Ul + } + ), ur(()=>zp(i, r))) + } + return Ti + }(s, a))) + } + class Yp extends Od { + 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 t = 1 / 0; + return null === (e = null === (e = this.mediaSourceEntity) || void 0 === e ? void 0 : e.sourceBufferEntities) || void 0 === e || e.forEach(e=>{ + return t = Math.min(t, null !== (e = null == e ? void 0 : e.totalDuration) && void 0 !== e ? e : 1 / 0) + } + ), + t + } + get currentTime() { + return this.mediaElement.currentTime + } + get clientWidth() { + return this.mediaElement.clientWidth + } + get clientHeight() { + return this.mediaElement.clientHeight + } + getBufferedDuration(e=.5) { + var t = qp.timeRangesToBufferedRange(this.mediaElement.buffered) + , e = qp.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[cl.Variant]; + let t = 1 / 0; + return null != e && e.gotQuotaExceeded && (t = null !== (e = e.maxTotalBytes) && void 0 !== e ? e : 1 / 0), + t + } + get autoPausedRestartTime() { + return this.getActive().autoPausedRestartTime + } + 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 jp(this.desiredRate) + } + get isIframeRate$() { + return this.desiredRate$.pipe(ur(jp)) + } + get msObjectUrl$() { + return this.selectActive(({mediaSourceEntity: e})=>null == e ? void 0 : e.objectUrl).pipe(Es()) + } + 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 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 Zd([this.bufferedSegmentsByType$(cl.Variant), this.bufferedSegmentsByType$(cl.AltAudio)]).pipe(Hi(Zi), wa(), Qn(10)) + } + get timeupdate$() { + return wc(this.mediaElement).event("timeupdate").pipe(Hi(Zi), wa(), so(125), ur(e=>this.currentTime), an(e=>ne(e))) + } + get playingEvent$() { + return wc(this.mediaElement).event("playing").pipe(ur(()=>{} + )) + } + 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 Zd([this.sbUpdating$(cl.Variant), this.sbUpdating$(cl.AltAudio)]).pipe(ur(e=>e.some(e=>e))) + } + get bufferedRangeTuple$() { + return Zd([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[ul.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[ul.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 = qp.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 ? qp.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(Es((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(ur(e=>null == e ? null : null == t ? e.combined : e.sbTuple[t])) + } + get fellBelowLowWater$() { + return this.waterLevelChangedForType$(cl.Variant).pipe(ca(), ur(([e,t])=>function(e, t) { + return Qp[e] > Qp[t] + }(e, t) && (t === kp.LowWater || t === kp.AlmostDry)), So(this.seekTo$, this.waitingForDisco$), ur(([e,t,i])=>e && !ne(null == t ? void 0 : t.pos) && !i), xa(!1)) + } + isBufferedToEnd$(r, n=!0) { + return Zd([this.combinedBuffer$, this.selectActive(e=>e.bufferMonitorInfo).pipe(Up(), ur(e=>Math.max(e.almostDryWaterLevelSeconds, e.lowWaterLevelSeconds / 2))), this.seeking$]).pipe(ur(([e,t])=>{ + if (!e || !ne(this.minSBDuration) && n) + return !1; + e = qp.getBufferedInfo(e, this.currentTime, r).end; + let i = this.mediaElementDuration; + return n && (i = Math.min(this.mediaElementDuration, this.minSBDuration)), + i - e <= t + } + ), Es()) + } + needData$(e, r=!1, t) { + var i = !r; + return Zd([this.msReadyState$, this.waterLevelChangedForType$(null), this.isBufferedToEnd$(e, i), this.bufferedRangeTuple$]).pipe(Hi(Zi), Qn(10), wa(), ur(([e,t,i])=>"closed" !== e && (!!r || null == t || !i && t !== kp.AboveHighWater)), Ql.tag("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, + bufferInfoTuple: o, + switchContexts: i + }) : { + position: t, + 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 Yp.likelyToKeepUp(this.mediaElement, this.haveEnough, this.readyState) + } + get playbackLikelyToKeepUp$() { + return Zd([this.haveEnough$, this.readyState$]).pipe(ur(([e,t])=>Yp.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 qp.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 [qp.getBufferedInfo(null !== (i = null == i ? void 0 : i.bufferedRanges) && void 0 !== i ? i : [], t, e), qp.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 qp.getBufferedInfo(e, i, t).len + } + canContinuePlaybackWithoutGap(e, t, i, r) { + if (!e.liveOrEvent) + return !0; + if (!e.ptsKnown) + return !1; + var n = this.currentTime + , i = performance.now() + i.avgPlaylistLoadTimeMs; + return e.fragments[0].start + (i - t) / 1e3 <= this.getCombinedBufferInfo(n, r).end + } + 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 Jp { + 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 Zp extends Error { + } + class ef extends p { + constructor(e, t, i, r, n) { + super(L, e, t, i, r), + this.sbType = n, + this.response = r + } + } + class tf extends ef { + constructor(e, t, i, r) { + super("bufferAddCodecError", !1, e, t, i), + this.mediaOptionId = r, + this.mediaOptionType = Rl(this.sbType) + } + } + class rf extends ef { + constructor(e, t, i, r, n, s) { + super(e, t, i, r, n), + this.isTimeout = s, + this.mediaOptionType = Rl(this.sbType) + } + } + class nf extends rf { + constructor(e, t, i, r) { + super("bufferFullError", !1, e, t, i, !1), + this.maxTotalBytes = r + } + } + class sf extends rf { + constructor(e, t, i) { + super(n, !1, e, t, i, !0) + } + } + class af extends rf { + constructor(e, t, i, r) { + super(n, !1, e, t, i, !1), + this.mediaOptionId = r, + this.mediaOptionType = Rl(this.sbType) + } + } + class of 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 df extends Ut { + constructor(n, e, s, a, o, d, l, u, c) { + super(e=>{ + const t = wc(d) + , i = u.child({ + sb: o + }); + n.setSourceBufferEntity(o, l), + l.mimeType.includes("audio/mpeg") && (this.updateMp3Timestamps = !0); + const r = nn(t.event("updatestart").pipe(Ja(()=>{ + n.setSourceBufferUpdating(o) + } + )), t.event("updateend").pipe(Hi(Zi), Ja(()=>{ + var e = qp.timeRangesToBufferedRange(d.buffered) + , t = qp.timeRangesToBufferedRange(s.buffered); + n.setBufferedRangesUpdated(o, e, t, !1, c.maxBufferHole) + } + )), t.event("error").pipe(Ja(()=>{ + n.setSourceBufferError(o, "Got source buffer error") + } + ))).pipe(Ra(()=>Ti)).subscribe(e); + return ()=>{ + r.unsubscribe(); + try { + "open" === a.readyState && d.abort(), + a.removeSourceBuffer(d) + } 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 = d, + this.config = c, + this.updateMp3Timestamps = !1 + } + get buffered() { + return this.sourceBuffer.buffered + } + appendBuffer(e, t) { + return Yr(()=>this.sourceBuffer.updating ? this._waitForUpdateEndOrError().pipe(Ra(()=>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 ? Ui(new af(e.message,$.VideoDecoderBadDataErr,this.type,n)) : Ui(e)) : (this.mediaElementStore.setBufferedRangesUpdated(this.type, qp.timeRangesToBufferedRange(this.sourceBuffer.buffered), qp.timeRangesToBufferedRange(this.mediaElement.buffered), !0, this.config.maxBufferHole), + Ui(new nf(e.message,$.AllocationFailed,this.type,this.maxTotalBytes))) + } + return this._waitForUpdateEndOrError().pipe(ur(()=>({ + startAppend: i, + endAppend: performance.now(), + bytesAppend: e.byteLength + })), vo(1e4), Un(e=>{ + throw e instanceof or ? (this.sourceBuffer.abort(), + e = new sf("Append took longer than 10000ms",$.InternalError,this.type)) : e instanceof ef && (e = new af("Decode error",$.VideoDecoderBadDataErr,this.type,n)), + e + } + )) + } + remove(e, t) { + return this._waitForUpdateEndOrError().pipe(Ra(this._removeAsync.bind(this, e, t))) + } + _removeAsync(e, t) { + try { + this.sourceBuffer.remove(e, t) + } catch (e) { + return Ui(new ef(r,!1,e.message,$.InternalError,this.type)) + } + return this._waitForUpdateEndOrError() + } + abort() { + try { + this.sourceBuffer.abort() + } catch (e) { + return Ui(new ef(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(an(e=>!1 === e), So(this.mediaElementQuery.sbError$(this.type)), ur(([,e])=>{ + if (e) + throw new ef(r,!1,"Got error during sourceBuffer operation",$.InternalError,this.type) + } + ), Cs(1)) + } + } + class lf extends Ut { + constructor(a, o, e, d, t, i) { + super(e=>{ + const t = wc(d) + , i = nn(t.event("sourceopen"), t.event("sourceclose"), t.event("sourceended")).pipe(Ja(e=>{ + e = (null !== (e = null == e ? void 0 : e.target) && void 0 !== e ? e : d).readyState; + o.msReadyState = e + } + )) + , r = this.sourceBuffers$.pipe(Ra(e=>e ? nn(...e.filter(e=>null != e)) : Ti)) + , n = nn(i, r).pipe(Ra(()=>Ti)).subscribe(e) + , s = URL.createObjectURL(d); + return a.src = s, + o.setMediaSourceEntity(s, d.readyState), + ()=>{ + n.unsubscribe(), + this.teardownWorker.addWork(Yr(()=>(URL.revokeObjectURL(s), + a.src === s && (a.removeAttribute("src"), + a.load(), + o.setMediaSourceEntity(null)), + Ul))), + this.sourceBuffers$.next(null) + } + } + ), + this.mediaElement = a, + this.mediaElementStore = o, + this.mediaElementQuery = e, + this.mediaSource = d, + this.teardownWorker = t, + this.logger = i, + this.sourceBuffers$ = new gi(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; + sd(()=>{ + 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 tf(t.message,$.IncompatibleAsset,i,n) + } + s[i] = new df(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 Zp(`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 uf(e, c, t) { + const {lowBufferThreshold: h, lowBufferWatchdogPeriod: p, highBufferWatchdogPeriod: f, seekWatchdogPeriod: m} = t + , i = Zd([c.desiredRate$, c.ended$, c.combinedBuffer$, c.seekTo$]).pipe(ur(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) + } + ), Es()) + , r = c.combinedBuffer$.pipe(ur(()=>c.getCurrentWaterLevel(0) <= t.lowBufferThreshold || !c.haveEnough ? Op.LowBuffer : Op.HighBuffer), Es()) + , n = Zd([i, c.seekTo$, c.gotPlaying$, r]).pipe(Ra(e=>{ + var [t,i,r] = e; + if (!t) + return Bi(null); + var n, s, a, o, d, l, 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, + vn(1e3 * t).pipe(ur(()=>{ + var e = n.currentTime + , t = n.getCombinedBufferInfo(e, 0); + return cf(Op.Seek, e, s, t, a, n.haveEnough) + } + ))) : (o = c, + d = p, + l = f + +e, + u = h, + nn(Bi(o.currentTime), o.timeupdate$).pipe(Ra(e=>{ + const t = performance.now() + , i = o.getCombinedBufferInfo(e, 0); + let r, n; + return r = i.len <= u || !o.haveEnough ? (n = d, + Op.LowBuffer) : (n = l, + Op.HighBuffer), + vn(Math.max(100, 1e3 * n)).pipe(ur(()=>e < o.currentTime ? null : cf(r, e, t, i, u, o.haveEnough))) + } + ))) + } + )) + , s = n.pipe(Up(), So(c.combinedBuffer$), Ra(([])=>Zd([c.seeking$, c.paused$])), Ra(([e,t])=>e || t ? Ti : c.timeupdate$.pipe(ca(), an(([e,t])=>ne(e) && ne(t) && e < t), Cs(1))), ur(()=>null)); + return nn(n, s) + } + function cf(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 hf extends Ut { + constructor(w, A, e, t, i, r) { + super(e=>{ + const t = this.config + , i = A.startMediaSession(w, t.maxBufferLength, t.almostDryBufferSec, t.defaultTargetDuration) + , r = Bi(w).pipe(pf(A, this._mediaQuery, this, this.hlsGapless, t, this.logger)) + , n = this.mediaSource$.pipe(Ra(e=>e || Ti)) + , s = this._mediaQuery.seekTo$.pipe((u = w, + c = this._mediaQuery, + p = (h = this).config, + f = (f = this.logger).child({ + name: "seek" + }), + e=>e.pipe(Ja(e=>{} + ), an(e=>e && ne(e.pos)), Ra(e=>c.readyState$.pipe(an(e=>e >= u.HAVE_METADATA), Cs(1), Js(e), Ra(({pos: e, fromEvent: t})=>(h.checkForInconsistentStoreBufferRangesAndUpdate(), + u.paused || h.pause(), + t || (u.currentTime = e), + $l(c.haveEnough$, e=>e).pipe(Js(e)))), Ra(e=>{ + var t = c.getCombinedBufferInfo(e, 0) + , i = t.nextStart; + return 0 === t.len && ne(i) && e < i && i - e <= p.maxSeekHole ? (h.seekTo = i, + Ti) : Bi(e) + } + ), So(c.desiredRate$), ur(([,e])=>{ + u.paused && 0 !== e && h.play() + } + ), Ua(Ti), Un(e=>(f.error(`error during seek ${e.message}`), + Ti))))))) + , a = this._mediaQuery.desiredRate$.pipe((o = w, + d = this._mediaQuery, + l = this, + e=>e.pipe(So(d.seekTo$), Ra(([e,t])=>ne(null == t ? void 0 : t.pos) ? Ti : 0 === e ? (o.paused || l.pause(), + Ti) : $l(d.haveEnough$, e=>e).pipe(Ja(()=>{ + o.paused && l.play() + } + ))), Ua(Ti)))); + var o, d, l, u, c, h, p, f; + this.mediaFunctions = this.mediaFunctions || new Jp(this,w,t,this.logger), + this.mediaFunctions.install(); + var m, g, y, v, S, b, T, E, I = nn(uf(this.logger, this._mediaQuery, this.config).pipe(Ja(e=>{ + A.setStallInfo(e) + } + )), this.mediaQuery.stallInfo$.pipe((g = A, + y = (m = this).config, + v = this.logger, + e=>e.pipe(Ls(e=>e ? function(i, e, r, n) { + const s = i.mediaQuery; + return nn(Zd([s.seekTo$, s.nudgeTarget$]).pipe(an(([e,t])=>e && ne(e.pos) && ne(t) && (e.pos < t || e.pos - t > r.maxSeekHole)), Js(null)), s.stallInfo$).pipe(So(s.desiredRate$), Hi(Zi), ur(([c,e],t)=>{ + if (!c) + return NaN; + var h = s.getCombinedBufferInfo(c.currentTime, 0) + , e = jp(e); + return function(e, t, i, r, n) { + var {type: s, isLowBufferStall: a, currentTime: o} = c + , d = h.len + , l = t.maxSeekHole; + let u = NaN; + if (a) { + const t = h.nextStart - o <= l ? 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 of("bufferStalledError",!0,"got fatal buffer error",$.VideoDecoderBadDataErr,s,d); + 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) + } + ), Qa(e=>ne(e)), $s(()=>{ + e.setNudgeInfo(null) + } + )) + }(m, g, y, v) : Bi(NaN)))))); + nn(r, n, s, a, I, (S = this.mediaQuery, + b = A, + I = t.maxBufferHole, + nn((E = I, + Zd([(T = S).bufferMonitorThresholds$, T.combinedBuffer$, T.seeking$]).pipe(ur(([e])=>null == e ? null : zp(T, E)))), Xp(S, I)).pipe(Hi(Zi), Ja(({combined: e, sbTuple: t})=>{ + b.updateWaterLevels(e, t) + } + )))).pipe(Ua(Ti), $s(()=>{ + 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.teardownWorker = r, + this.mediaSource$ = new gi(null), + this._mediaQuery = new Yp(w,A), + this.logger = i.child({ + name: "mse" + }), + this.mediaFunctions = new Jp(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 ? qp.timeRangesToBufferedRange(e.sourceBuffer.buffered) : null + } + checkForInconsistentStoreBufferRangesAndUpdate() { + var e = qp.timeRangesToBufferedRange(this.mediaElement.buffered) + , t = this.sourceBuffersBufferedRangeByType(cl.Variant) + , i = this.sourceBuffersBufferedRangeByType(cl.AltAudio) + , r = null !== (n = null === (r = this.mediaQuery.sourceBufferEntityByType(cl.Variant)) || void 0 === r ? void 0 : r.bufferedRanges) && void 0 !== n ? n : null + , n = null !== (n = null === (n = this.mediaQuery.sourceBufferEntityByType(cl.AltAudio)) || void 0 === n ? void 0 : n.bufferedRanges) && void 0 !== n ? n : null; + this.shouldUpdateStoreValues(t, r) && (this.logger.warn(`[${Pl[cl.Variant]}] SourceBuffer's loaded bufferedRanges ${JSON.stringify(t)} & mediaElementStore's bufferedRanges ${JSON.stringify(r)} are out of sync!`), + this.updateMediaElementStoreBufferedRanges(e, cl.Variant)), + this.shouldUpdateStoreValues(i, n) && (this.logger.warn(`[${Pl[cl.AltAudio]}] SourceBuffer's loaded bufferedRanges ${JSON.stringify(i)} & mediaElementStore's bufferedRanges ${JSON.stringify(n)} are out of sync!`), + this.updateMediaElementStoreBufferedRanges(e, cl.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 = Ll.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.maxBufferHole) + } + destroyMediaSource() { + this.mediaSource$.next(null) + } + makeMediaSource() { + return new MediaSource + } + openMediaSource(t) { + sd(()=>{ + var e; + t ? (e = new lf(this.mediaElement,this.mediaElementStore,this.mediaQuery,t,this.teardownWorker,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 Zd([this.mediaQuery.msReadyState$, this.mediaQuery.msObjectUrl$]).pipe(Ra(([e,t])=>t !== r ? Bi(null) : "open" === e || "ended" === e ? Bi(i) : Ti)) + } + get appendOrder() { + return this.mediaQuery.isIframeRate ? [cl.Variant, cl.AltAudio] : [cl.AltAudio, cl.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); + var i = function(e, s, t, i, r) { + const n = s.filter(e=>Boolean(e)).length + , a = e.filter(e=>Boolean(e)).length + , d = [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, + d[t] = { + audioCodec: r, + videoCodec: n, + mimeType: i, + startPTSSec: s, + endPTSSec: a, + discoSeqNum: o, + mediaOptionId: e.initSeg.mediaOptionId + }) + } + ); + let o = n === t + , l = a === t; + if (1 === a && a < t && 0 !== n) { + const t = e[ul.Variant] ? ul.Variant : ul.AltAudio + , n = 1 - t + , a = d[t] + , o = d[n] = ff(s[n], a.startPTSSec, a.discoSeqNum, i, a.mediaOptionId, r) || ff(s[n], a.endPTSSec, a.discoSeqNum, i, a.mediaOptionId, r); + o || r.warn(`${Cl[t]} No matching frag found ${se(a)} buffered=${se(s[n].bufferedSegments.map(e=>{ + var {mediaSeqNum: t, discoSeqNum: i} = e.frag; + return { + mediaSeqNum: t, + discoSeqNum: i, + startPTS: e.startPTS, + endPTS: e.endPTS + } + } + ))}`), + l = null != o + } + let u = NaN + , c = NaN; + return l && d.forEach((e,t)=>{ + if (!e) + return null; + t = s[t]; + if (t) { + const s = t.audioCodec + , i = t.videoCodec + , {audioCodec: r, videoCodec: n} = e; + o = o && (i === n || Se.isCompatibleVideoCodec(i, n)), + o = o && (s === r || Se.isCompatibleAudioCodec(s, r)) + } else + o = !1; + u = ne(u) ? (c = Math.abs(e.startPTSSec - u), + Math.max(e.startPTSSec, u)) : (c = 0, + e.startPTSSec) + } + ), + { + compatible: o && l, + boundary: u, + allowance: c + } + }(r, e, t, this.config.maxBufferHole, this.logger); + if (i.compatible) + return this._waitForMediaSourceOpen(r); + let s = i.boundary; + const a = i.allowance + , o = this.getSwitchPosition(r); + if (ne(o) && (s = o), + !ne(s)) + return this.logger.warn("not enough info #disco"), + Bi(null); + const d = hn($l(nn(Bi(n.currentTime), n.timeupdate$), e=>e >= s), $l(n.stallInfo$.pipe(ur(e=>{ + return null !== (e = null == e ? void 0 : e.currentTime) && void 0 !== e ? e : NaN + } + )), e=>e >= s - a - this.config.discontinuitySeekTolerance)); + return this.mediaElementStore.waitingForDisco = !0, + d.pipe(Js(s), Ra(e=>{ + performance.now(); + const t = n.currentTime + , i = this.msDuration; + return this.resetMediaSource(Math.max(t, e)), + this._waitForMediaSourceOpen(r).pipe(Ja(()=>{ + performance.now(), + this.msDuration = i + } + )) + } + ), $s(()=>{ + this.mediaElementStore.waitingForDisco = !1 + } + )) + } + resetMediaSource(e=NaN) { + var t; + ne(e) || (e = null !== (t = null === (t = this.mediaQuery.seekTo) || void 0 === t ? void 0 : t.pos) && void 0 !== t ? t : this.mediaQuery.currentTime), + 0 < this.sourceBuffers.length && (this.openMediaSource(this.makeMediaSource()), + this.seekTo = e) + } + setExpectedSbCount(e) { + this.mediaElementStore.expectedSbCount = e + } + appendInitSegments(d, l) { + 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 (d[t]) { + const i = c[t] + , r = d[t] + , n = h[t] + , s = r["initSeg"]; + if (!n) + throw new Error(`appendInitSegments: sb[${Pl[t]}] null currentSbEntity`); + if (!i) + throw new Error(`appendInitSegments: sb[${Pl[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 Bi(null); + var e = Rl(t); + return i.appendBuffer(s.data, s).pipe(Ja(e=>{ + u.setInitSegmentEntity(t, o) + } + ), l(i, e, s.mediaOptionId, this.config, this.mediaQuery)) + } + } + ).filter(e=>Boolean(e)); + return 0 === t.length ? Bi(null) : Jr(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 d = o.initSegmentInfo + , l = a["dataSeg"]; + if (!d) + throw new Error(`appendDataSegments: sb[${Pl[e]}] null currentInitSegmentInfo`); + if (!o) + throw new Error(`appendDataSegments: sb[${Pl[e]}] null currentSbEntity`); + if (!s) + throw new Error(`appendDataSegments: sb[${Pl[e]}] null source buffer`); + const u = s.timestampOffset + , c = { + startPTS: S(l.startPts) + u, + endPTS: S(l.endPts) + u, + firstKeyframePts: l.firstKeyframePts ? S(l.firstKeyframePts) + u : void 0, + bytes: l.data2 ? l.data1.byteLength + l.data2.byteLength : l.data1.byteLength, + frag: { + itemId: l.itemId, + mediaOptionId: l.mediaOptionId, + mediaSeqNum: l.mediaSeqNum, + discoSeqNum: l.discoSeqNum, + keyTagInfo: l.keyTagInfo, + isLastFragment: l.isLastFragment, + iframe: l.iframe, + framesWithoutIDR: l.framesWithoutIDR, + dropped: l.dropped + } + } + , h = Rl(e); + let p = Ul; + var f = t.dataSeg.flushBeforeAppend; + return f && f.start !== f.end && (p = this.flushData(e, f.start, f.end)), + p.pipe(Ra(()=>Bi(l.data1, l.data2).pipe(Up()).pipe(qn(e=>s.appendBuffer(e, c).pipe(g(s, h, l.mediaOptionId, this.config, this.mediaQuery))))), Ja(()=>{ + i.getBufferedRangeByType(e) + } + )) + } + ).filter(e=>Boolean(e)); + return 0 === e.length ? Bi(null) : Jr(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() { + var e; + const {mediaQuery: t, logger: r} = this + , {sourceBufferEntities: i, currentTime: n, seekTo: s} = t; + if (!i) + throw new Error("appendSourceBufferData null currentSbEntity"); + const a = (null == s ? void 0 : s.pos) || n; + let o = NaN; + i.forEach((e,t)=>{ + if (e) { + e = qp.getBufferedInfo(e.bufferedRanges, a, 0); + if (0 === e.len) { + const i = e["nextStart"]; + r.warn(`sb[${Pl[t]}] jagged start: ${i} current=${o}`), + ne(i) && (!ne(o) || o < i) && (o = i) + } + } + } + ), + ne(o) && (r.warn(`[seek] jagged start, adjusting currentTime:${n.toFixed(3)} seekTo=${null === (e = null == s ? void 0 : s.pos) || void 0 === e ? void 0 : e.toFixed(3)}->${o}`), + this.seekTo = o) + } + addCues(e, t) { + const i = this.mediaElement.textTracks[e]; + i && t.forEach(e=>{ + i.addCue(e) + } + ) + } + _flushInternal(e, t, i) { + return Yr(()=>e.remove(t, i)).pipe(Ja(()=>{} + )) + } + flushAll(i, r, n=!1) { + return 0 === this.sourceBuffers.length ? Ul : Jr(this.sourceBuffers.map((e,t)=>e ? this.flushData(t, i, r, n) : Ul)).pipe(Js(void 0)) + } + flushData(o, d, l, u=!1) { + const {mediaQuery: t, logger: c} = this; + return $l(t.updating$, e=>!1 === e).pipe(Ra(()=>{ + 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]; + let n, s, a = Ul; + e = -1 === navigator.userAgent.toLowerCase().indexOf("firefox"); + if (this.flushing = !0, + e) + return this._flushInternal(r, d, l); + for (let i = 0; i < r.buffered.length; i++) { + let e, t; + n = r.buffered.start(i), + s = r.buffered.end(i), + t = l === 1 / 0 ? (e = d, + l) : (e = Math.max(n, d), + Math.min(s, l)), + Math.min(t, s) > e && (u || .5 < Math.min(t, s) - e) ? a = a.pipe(Ua(this._flushInternal(r, e, t))) : c.warn(`ignoring sb[${Pl[o]}] flush ${e},${t}`) + } + return a + } + ), $s(()=>{ + 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] = hf.convertInitSegToCompatInfo(e.initSeg) : null); + t = n[cl.Variant].videoCodec, + e = Vp(t); + if (i && i.has(e)) { + const s = i.get(e); + n[cl.Variant].mimeType = n[cl.Variant].mimeType.replace(t, s), + n[cl.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, t, i) { + const {mediaQuery: r, logger: n} = this + , o = this.convertSourceBufferEntitiesToCompatInfo(r); + return e.every(e=>null == e) ? Bi([]) : this.resetMediaSourceIfNeeded(e).pipe(Ra(e=>e ? r.updating$.pipe(an(e=>!1 === e), Cs(1), Js(e)) : Bi(null)), Ra(e=>{ + if (!e) + return Bi([]); + let s = NaN + , a = NaN; + if (this.needSourceBuffers) { + s = performance.now(); + const t = hf.combineAppendDataInfoWithCompatInfo(e, o, i, n); + this.createSourceBuffers(t), + a = performance.now(), + this.clearFlush(e) + } + return e.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(e), + Xr(Yr(()=>this.appendInitSegments(e, t)), Yr(()=>this.appendDataSegments(e, t))).pipe(function(r, i) { + return 2 <= arguments.length ? function(e) { + return Ft(na(r, i), Qs(1), (void 0 === (t = i) && (t = null), + function(e) { + return e.lift(new es(t)) + } + ))(e); + var t + } + : function(e) { + return Ft(na(function(e, t, i) { + return r(e, t) + }), Qs(1))(e) + } + }((e,t)=>(e.push(t), + e), new Array), ur(([i,r])=>{ + const n = [null, null]; + return [cl.Variant, cl.AltAudio].forEach(e=>{ + var t; + null != (null == i ? void 0 : i[e]) && (t = { + fragmentType: Rl(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 + } + ), Ja(e=>{ + this.adjustJaggedStart() + } + )) + } + ), Cs(1)) + } + endStream() { + try { + this.mediaSourceAdapter.endOfStream() + } catch (e) { + this.logger.warn(`endOfStream failed: ${e.message}`) + } + } + setMediaKeys(e) { + const t = this.mediaElement; + return t.done$ || (t.done$ = new gi(!1)), + nn(Ul, t.done$).pipe(Ra(()=>!0 === t.updating ? Ti : t.mediaKeys === e ? Ul : (t.updating = !0, + Lr(t.setMediaKeys(e).then(()=>{ + t.updating = !1, + t.done$.next(!0) + } + ).catch(e=>{ + throw t.updating = !1, + t.done$.next(!0), + e + } + )))), Cs(1), Ja(()=>{} + ), ya(e=>e.pipe(Kr((e,t)=>{ + if (t < 3) + return vn(100 * t); + throw e + } + ))), wa()) + } + clearMediaKeys(i) { + return Yr(()=>{ + if (!this.mediaElement) + return Ul; + const e = -1 < navigator.userAgent.toLowerCase().indexOf("chrome") + , t = this.mediaElement.src; + return e && (this.mediaElement.src = ""), + i ? this.setMediaKeys(null).pipe(qn(()=>(this.mediaElement.src = t, + Ul))) : nn(Lr(this.mediaElement.setMediaKeys(null)).pipe(qn(()=>(this.mediaElement.src = t, + Ul))), Ul) + } + ) + } + set autoPausedRestartTime(e) { + this.mediaElementStore.autoPausedRestartTime = e + } + set seekTo(e) { + this.mediaElementStore.setSeekToPos(e, !1) + } + set skip(e) { + this.seekTo = this.mediaElement.currentTime + e + } + nudgeSeek(e, t) { + sd(()=>{ + 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 + } + 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 + } + 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 = t[0].start + , r = t[e - 1].start + t[e - 1].duration; + this.mediaSource$.value.updateLiveSeekableRange(i, r) + } + } + clearLiveSeekableRange() { + this.mediaSource$.value.clearLiveSeekableRange() + } + } + const pf = (r,n,s,a,o,d)=>e=>e.pipe(Ra(t=>{ + if (!t) + return Ti; + const e = wc(t); + return nn(e.event("durationchange").pipe(ur(e=>Ac(t, "durationchange", e)), Ja(e=>{ + e = e.currentTarget; + r.mediaElementDuration = e.duration + } + )), e.event("seeking").pipe(so(o.seekEventThrottleMs), ur(e=>Ac(t, "seeking", e)), Ja(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, d) : r.setSeekToPos(e, !0) : r.seeking = !0 + } + } + )), e.event("seeked").pipe(ur(e=>Ac(t, "seeked", e)), Ja(()=>{ + r.setSeekToPos(null, !0) + } + )), e.event("play").pipe(ur(e=>Ac(t, "play", e)), So(n.desiredRate$), ur(([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(ur(e=>Ac(t, "playing", e)), Ja(e=>{ + e = e.currentTarget; + r.paused = e.paused, + r.gotPlayingEvent() + } + )), e.event("loadstart").pipe(ur(e=>Ac(t, "loadstart", e)), Ja(()=>{ + r.gotLoadStartEvent() + } + )), e.event("pause").pipe(ur(e=>Ac(t, "pause", e)), Ja(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(ur(e=>Ac(t, "loadedmetadata", e))), e.event("loadeddata").pipe(ur(e=>Ac(t, "loadeddata", e))), e.event("canplay").pipe(ur(e=>Ac(t, "canplay", e))), e.event("canplaythrough").pipe(ur(e=>Ac(t, "canplaythrough", e))), e.event("waiting").pipe(ur(e=>Ac(t, "waiting", e))), e.event("emptied").pipe(ur(e=>Ac(t, "emptied", e))), e.event("error").pipe(ur(e=>Ac(t, "error", e)), qn(e=>Ui(t.error))), e.event("ended").pipe(ur(e=>Ac(t, "ended", e)))).pipe(So(n.bufferedRangeTuple$), od(([e])=>{ + var t = e.currentTarget + , e = t.readyState; + r.readyState = e, + r.ended = t.ended + } + ), Un(e=>e instanceof MediaError ? (d.warn(`mediaElementError, code: ${e.code}, message: ${e.message}`), + Ui(e)) : (d.error(`media event error: ${e.message}`), + Ti))) + } + ), Ra(()=>Ti)); + function ff(e, t, i, r, n, s) { + const a = null == e ? void 0 : e.bufferedSegments; + if (!a) + return s.warn("getMatchingInfo trying to query null sbEntity"), + null; + let o = a.find(e=>t >= e.startPTS && t < e.endPTS && e.frag.discoSeqNum === i); + if (!o) { + const e = a[0] && Math.abs(+a[0].startPTS) < r ? a[0] : void 0; + e && t < e.startPTS && i === e.frag.discoSeqNum && (o = e) + } + if (null == o) + return null; + { + const {audioCodec: t, videoCodec: r, mimeType: s} = e; + return { + mimeType: s, + audioCodec: t, + videoCodec: r, + startPTSSec: o.startPTS, + endPTSSec: o.endPTS, + discoSeqNum: i, + mediaOptionId: n + } + } + } + const mf = new class extends pd { + constructor() { + super({}, { + name: "media-element-store", + producerFn: vc + }), + this._activeId = "" + } + get activeId() { + return this._activeId + } + startMediaSession(i, r, n, s) { + return Co("playback.session.start"), + this._activeId = `media session: ${(new Date).toISOString()}`, + sd(()=>{ + 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, + 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.activeId + } + setMediaSourceEntity(t, i) { + Co("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) { + Co("playback.set.mediaElementDuration"), + this.updateActive(e=>{ + e && (e.mediaElementDuration = t) + } + ) + } + set msReadyState(t) { + Co("playback.set.msReadyState"), + this.updateActive(({mediaSourceEntity: e})=>{ + e && (e.readyState = t) + } + ) + } + set readyState(t) { + Co(`playback.set.readyState ${t}`), + this.updateActive(e=>{ + e.readyState = t + } + ) + } + set ended(t) { + Co(`playback.set.ended ${t}`), + this.updateActive(e=>{ + e.ended = t + } + ) + } + set msDuration(t) { + Co("playback.set.msDuration"), + this.updateActive(e=>{ + e.mediaSourceEntity.duration = t + } + ) + } + set textTracksCreated(t) { + Co("playback.set.textTracksCreated ${created}"), + this.updateActive(e=>{ + e.textTracksCreated = t + } + ) + } + set expectedSbCount(t) { + Co("playback.set.expectedSbCount"), + this.updateActive(e=>{ + e.expectedSbCount = t + } + ) + } + set autoPausedRestartTime(e) { + this.updateActive({ + autoPausedRestartTime: e + }) + } + setSeekToPos(t, i) { + Co(`playback.set.seekToPos: ${null == t ? void 0 : t.toFixed(3)}`), + this.updateActive(e=>{ + ne(t) ? (e.seekTo = { + pos: t, + fromEvent: i + }, + e.gotPlaying = !1, + e.haveEnough = !1) : e.seekTo = null, + i && (e.seeking = ne(t)) + } + ) + } + set seeking(t) { + Co(`playback.set.seeking: ${t}`), + this.updateActive(e=>{ + e.seeking = t + } + ) + } + set paused(t) { + Co(`playback.set.paused: ${t}`), + this.updateActive(e=>{ + (e.paused = t) && (e.gotPlaying = !1) + } + ) + } + gotPlayingEvent() { + Co("playback.set.playing"), + this.updateActive(e=>{ + e.paused || (e.gotPlaying = !0) + } + ) + } + gotLoadStartEvent() { + Co("playback.set.loadstart"), + this.updateActive(e=>{ + e.gotLoadStart = !0 + } + ) + } + set desiredRate(t) { + Co(`playback.set.desiredRate: ${t}`), + this.updateActive(e=>{ + e.desiredRate = t + } + ) + } + set haveEnough(t) { + Co(`playback.set.haveEnough: ${t}`), + this.updateActive(e=>{ + e.haveEnough = t + } + ) + } + set flushing(e) { + Co(`playback.set.flushing: ${e}`), + this.updateActive({ + flushing: e + }) + } + set waitingForDisco(t) { + Co(`playback.set.waitingForDisco: ${t}`), + this.updateActive(e=>{ + e && (e.waitingForDisco = t) + } + ) + } + setSourceBufferUpdating(i) { + Co(`playback.set.sourcebuffers[${Pl[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) { + Co(`playback.set.sourcebuffers[${Pl[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(n, s, a, o, d) { + Co(`playback.set.sourcebuffers[${Pl[n]}].bufferupdated`), + this.updateActive(e=>{ + var t; + const i = null == e ? void 0 : e.mediaSourceEntity + , r = null === (t = null == i ? void 0 : i.sourceBufferEntities) || void 0 === t ? void 0 : t[n]; + if (r) { + const n = null == i ? void 0 : i.duration; + r.updating = !1, + r.bufferedRanges = [...s], + function(e, t, i, r) { + const n = e.inFlight + , s = e.bufferedSegments; + n && ne(n.startPTS) && ne(n.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) + }(s, n); + const a = e.bufferedRanges; + let o, d = 0; + for (let e = s.length - 1; -1 < e; e--) { + const t = s[e] + , n = !t.frag.iframe; + n && t.frag.isLastFragment && (o = t.frag); + var l = t.endPTS - t.startPTS; + if (l <= 0) + s.splice(e, 1); + else { + var u = a.find(e=>e.start <= t.endPTS && e.end > t.startPTS); + if (u) { + const a = Math.max(u.start, t.startPTS) + , o = Math.min(u.end, t.endPTS) + , c = o - a; + if (d += t.bytes * c / l, + n) + if (c < Math.min(l, i)) + s.splice(e, 1); + else { + const n = t.appendedDuration; + n ? !(n > c && c != l) || t.frag.isLastFragment && o === r || s.splice(e, 1) : t.appendedDuration = c + } + } else + s.splice(e, 1) + } + } + e.totalDuration = o && 0 < a.length ? a[a.length - 1].end : 1 / 0, + e.inFlight = null, + e.gotQuotaExceeded = e.gotQuotaExceeded || t, + e.totalBytes = d, + e.maxTotalBytes = Math.max(e.totalBytes, e.maxTotalBytes) + }(r, o, d, n) + } + e.bufferedRanges = [...a] + } + ) + } + setSourceBufferEntity(n, s) { + Co(`playback.set.sourcebuffers[${Pl[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) { + Co(`playback.set.sourcebuffers[${Pl[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) { + Co(`playback.set.sourcebuffers[${Pl[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) { + Co(`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) { + Co(`playback.set.stallInfo stalled=${null != t}`), + this.updateActive(e=>{ + e.stallInfo = t + } + ) + } + setNudgeInfo(t) { + Co(`playback.set.nudgeInfo ${se(t)}`), + this.updateActive(e=>{ + e.nudgeInfo = t + } + ) + } + updateWaterLevels(t, i) { + Co("playback.set.updateWaterLevels"), + this.updateActive(e=>{ + e.bufferMonitorInfo.waterLevelType = { + combined: t, + sbTuple: [...i] + } + } + ) + } + set bufferMonitorTargetDuration(i) { + Co(`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) { + Co(`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 gf extends Si { + 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 yf { + constructor(e) { + this.store = e + } + getQuery() { + return new gf(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 vf = new class extends dd { + constructor() { + super({ + supportsHdr: !0 + }, { + name: "platform", + producerFn: vc + }) + } + } + ; + let Sf = null; + function bf() { + return Sf = Sf || new yf(vf), + Sf + } + class Tf extends Ut { + constructor(e) { + super(), + this._vanillaRPC = e, + this._handler$ = new zt + } + _subscribe(e) { + return e.add(this._handler$.pipe(Kr(([e,t,i])=>e(...t).pipe(Ja({ + next(e) { + i(e, null) + }, + error(e) { + i(null, e) + } + })))).subscribe()), + ()=>{ + this.teardown() + } + } + register(e, i) { + return this._vanillaRPC.register(e, (...t)=>e=>{ + this._handler$.next([i, t, e]) + } + ) + } + invoke(e, t, r) { + return new Ut(i=>{ + this._vanillaRPC.invoke(e, t, r)((e,t)=>{ + null != t ? i.error(t) : (i.next(e), + i.complete()) + } + ) + } + ) + } + teardown() {} + } + class Ef extends Tf { + constructor(e) { + super(e) + } + decrypt(e, t, i, r, n) { + return this.invoke("decrypt", [e, t, i, r, n], [e, t, r]) + } + } + class If extends Tf { + 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) + } + teardown() { + this.rpcService.unregister("demuxer.event") + } + 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(ur(e=>{ + var t = new wf(this,e); + return this.sessions[e] = t + } + )); + var r, n, s, a, o + } + } + class wf { + constructor(e, t) { + this.rpc = e, + this.demuxSessionID = t, + this.observer = new a + } + push(e, t, i, r, n, s, a, o, d, l, u, c, h) { + return this.rpc.invoke("demuxer.push", [this.demuxSessionID, e, t, i, r, n, s, a, o, d, l, u, c], null != h ? h : [e]) + } + pushWithoutTransfer(e, t, i, r, n, s, a, o, d, l, u, c) { + return this.push(e, t, i, r, n, s, a, o, d, l, u, c, []) + } + destroy() { + this.observer.removeAllListeners(), + this.rpc.invoke("demuxer.destroy", [this.demuxSessionID], []).subscribe() + } + } + class Af { + 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=Af._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() { + this.handlers = null + } + } + Af._fallbackCallback = (e,t)=>{ + if (null != t) + throw t + } + ; + const Of = e=>{ + e = e.child({ + name: "InlineRPCService" + }); + var t = new Af; + return new i(t,e), + new at(t,e), + t + } + ; + let kf; + const Cf = t=>{ + try { + return (e=>{ + try { + if (null == kf) { + const e = new Blob(["(" + Ky.toString() + ")(true);"],{ + type: "text/javascript" + }) + , r = URL.createObjectURL(e); + kf = new Worker(r) + } + var t = new ot(kf); + 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 + } + )(t) + } catch (e) { + t.warn(e) + } + return Of(t) + } + , Df = 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 + } + , Mf = { + "uniform-time-weighted": Df(0), + "linear-time-weighted": Df(1), + "quadratic-time-weighted": Df(2) + }; + class Pf { + 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 gi(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 = Mf[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 xf = { + 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 Rf = xf; + class Lf { + 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 _f extends Od { + 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 = xf.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 = xf.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 = xf.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 = xf.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(Up()) + } + get fragSample$() { + return this.selectEntity(this.id, ({fragSample: e})=>e).pipe(Up()) + } + get playlistSample$() { + return this.selectEntity(this.id, ({playlistSample: e})=>e).pipe(Up()) + } + get bufferMetric$() { + return this.selectEntity(this.id, ({bufferMetric: e})=>e).pipe(Up()) + } + } + class Nf { + constructor(e) { + this.statsStore = e + } + getQuery() { + return new Od(this.statsStore) + } + getQueryForItem(e) { + return new _f(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 Ff = new class extends pd { + constructor() { + super({}, { + name: "stats-store", + producerFn: vc + }) + } + set statsEntity(e) { + Co("statsStore.set.stats"), + sd(()=>{ + this.add(e), + this.setActive(e.id) + } + ) + } + set playlistSample(t) { + Co(`stats.set.playlistSample: ${t}`), + this.updateActive(e=>{ + e.playlistSample = t + } + ) + } + set bandwidthSample(t) { + Co(`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) { + Co(`stats.set.fragSample: ${t}`), + this.updateActive(e=>{ + e.fragSample = t + } + ) + } + set bufferMetric(t) { + Co(`stats.set.bufferMetric: ${t}`), + this.updateActive(e=>{ + e.bufferMetric = t + } + ) + } + set bandwidthEstimate(t) { + Co(`stats.set.bandwidthEstimate: ${t}`), + this.updateActive(e=>{ + e.bandwidthEstimate = t + } + ) + } + set fragEstimate(t) { + Co(`stats.set.fragEstimate: ${t}`), + this.updateActive(e=>{ + e.fragEstimate = t + } + ) + } + set playlistEstimate(t) { + Co(`stats.set.playlistEstimate: ${t}`), + this.updateActive(e=>{ + e.playlistEstimate = t + } + ) + } + set bufferEstimate(t) { + Co(`stats.set.bufferEstimate: ${t}`), + this.updateActive(e=>{ + e.bufferEstimate = t + } + ) + } + } + ; + let Bf = null; + const Uf = e=>new _f(Ff,e); + function $f(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 Vf(f, m, g) { + return new Ut(e=>{ + (e=>{ + const t = Uf(e); + t.hasEntity(e) ? Bi(t) : (i = Ff, + e = e, + Co("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), + Co("stats.loaded")); + var i + } + )(g.itemId); + const t = Uf(g.itemId) + , {fragSample$: i, playlistSample$: r, bandwidthSample$: n, bufferMetric$: s} = t; + return nn(r.pipe(Hi(Zi), (h = f, + p = m, + e=>e.pipe(Ql.tag("statsPlaylistProcessingEpic.in"), na((e,t)=>(e.playlistLoadTimeMs.add(t.playlistLoadTimeMs), + e.playlistParseTimeMs.add(t.playlistParseTimeMs), + e), { + playlistLoadTimeMs: new Lf(h.minPlaylistCount), + playlistParseTimeMs: new Lf(h.minPlaylistCount) + }), ur(e=>({ + avgPlaylistLoadTimeMs: e.playlistLoadTimeMs.avg, + avgPlaylistParseTimeMs: e.playlistParseTimeMs.avg + })), Es($f), Ja(e=>{ + p.setPlaylistEstimate(e) + } + )))), n.pipe(Hi(Zi), (u = f, + c = m, + n=>new Ut(e=>{ + let t = new Pf(u.bandwidthHistoryWindowSize,u.bandwidthHistoryAggregationMethod,{ + avgLatencyMs: NaN, + avgBandwidth: NaN + }); + const i = t.estimate$ + , r = nn(n.pipe(an(e=>e.complete), Ja(e=>{} + ), ur(e=>({ + trequest: e.trequest, + tfirst: e.tfirst, + tload: e.tload, + bitsDownloaded: 8 * e.loaded + })), Ql.tag("statsBandwidthProcessingEpic.in"), Ra(e=>(t.record(e), + Ti))), i.pipe(Es(), Ql.tag("statsBandwidthProcessingEpic.change"), Ja(e=>{ + c && c.setBandwidthEstimate(e) + } + ))).subscribe(e); + return ()=>{ + r.unsubscribe(), + t.destroy(), + t = void 0 + } + } + ))), i.pipe(Hi(Zi), (d = f, + l = m, + e=>e.pipe(Ql.tag("statsFragProcessingEpic.in"), na((e,t)=>(e.durationSec.add(t.durationSec), + e.fragParseMs.add(t.parseTimeMs), + e), { + durationSec: new Lf, + fragParseMs: new Lf(d.minFragmentCount) + }), ur(e=>({ + maxDurationSec: e.durationSec.max, + avgParseTimeMs: e.fragParseMs.avg + })), Es($f), Ja(e=>l.setFragEstimate(e))))), s.pipe(Hi(Zi), (a = f, + o = m, + e=>e.pipe(Ql.tag("statsBufferMetricProcessingEpic.in"), na((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 Lf, + initFragAppendMs: new Lf, + dataFragAppendMs: new Lf(a.minFragmentCount) + }), ur(e=>({ + avgBufferCreateMs: e.bufferCreateMs.avg, + avgInitFragAppendMs: e.initFragAppendMs.avg, + avgDataFragAppendMs: e.dataFragAppendMs.avg + })), Es($f), Ja(e=>{ + o.setBufferEstimate(e) + } + ))))).pipe(Ua(Ti)).subscribe(e), + ()=>{ + Rf.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, d, l, u, c, h, p + } + ) + } + const Kf = { + 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 Hf extends Ut { + constructor() { + super(e=>this.works$.pipe(ur(e=>Lr(e)), zr()).subscribe(e)), + this.works$ = new zt + } + addWork(e) { + this.works$.next(e) + } + complete() { + this.works$.complete() + } + } + class jf { + 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 === ul.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 === ul.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 = fl.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 qf = (r,e,t,i,n,s)=>{ + var a, {absoluteUrl: o, byteRangeOffset: d, keyTagInfo: l, iframe: u, isInitSegment: c} = r, h = o, p = l["method"], {start: o, end: l} = d, t = xc({ + url: h + }, t); + let f, m = o, g = l, y = !1, v = ne(o) || ne(l) ? d : void 0; + if ("AES-128" === p && l && (u || c)) { + const r = l - o; + r % 16 && (g = l + (16 - r % 16)), + 0 !== o && (y = !0, + m = o - 16), + v = { + start: m, + end: g + } + } + return n && ne(r.mediaSeqNum) && r.mediaOptionType === ul.Variant && (f = [], + null === (n = t.reportHTTPResponseHeaders) || void 0 === n || n.forEach(function(e) { + vl.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)), + Pc({ + url: h, + byteRangeOffset: v, + checkContentLength: !0, + extendMaxTTFB: s, + collectServerInstanceInfo: f, + onProgress: i, + xhrSetup: e.xhrSetup + }, t).pipe(ur(([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(Un(e=>{ + if (e instanceof ou) + throw new au(!1,"Timeout",0,$.FragmentTimeoutError,!0,a,e.stats); + if (e instanceof tu) + throw new au(!1,e.message,e.code,{ + code: e.code, + text: "Fragment Network Error" + },!1,a); + throw e + } + )))) + } + , Qf = { + clearkey: Zc, + fairplaystreaming: pu, + playready: _c, + widevine: Nc + } + , Gf = { + getKeySystemFormat(e) { + e = Qf[e]; + return e ? e.keyFormatString : "" + }, + getKeySystemSecurityLevel(e) { + e = Qf[e]; + return e ? e.securityLevels : null + } + } + , Wf = { + NONE: "", + "AES-128": "", + "ISO-23001-7": "", + "SAMPLE-AES": "", + "SAMPLE-AES-CTR": "" + } + , zf = { + NONE: 0, + "TYPE-0": 1, + "TYPE-1": 2, + "TYPE-2": 3 + }; + function Xf(e) { + return e in zf + } + function Yf(e) { + return null == e ? 4 : zf[e] + } + const Jf = ["SDR", "PQ", "HLG"] + , Zf = { + 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" + } + , em = { + isLanguageCode: e=>e in Zf, + shortenLanguageCode(e) { + let t; + var i, r; + return e && (r = 0 <= (i = e.indexOf("-")) ? e.slice(0, i) : e, + em.isLanguageCode(r) && (t = Zf[r]), + t = t || r, + 0 < i && (t += "-" + e.slice(i + 1))), + t + } + } + , tm = { + getRichestVideoCodec(e) { + if (e && e.length) { + e = e.sort((e,t)=>$p(t) - $p(e)); + return e && e.length ? e[0] : void 0 + } + }, + getRichestAudioCodec(e) { + if (e && e.length) { + e = e.sort((e,t)=>Kp(t) - Kp(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)=>Se.getChannelCount(t.channels) - Se.getChannelCount(e.channels)); + t && t.length && (e = t[0].channels) + } + return e + } + } + }; + function im(e) { + return new R(L,"steeringManifestParsingError",!1,e,$.FormatError) + } + class rm { + 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 = fl.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 nm = { + 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 === pl.SUBTITLE && (n.MediaSelectionOptionsDisplaysNonForcedSubtitles = t.forced ? hl.NO : hl.YES), + i++, + r.push(n)), + t.persistentID = n.MediaSelectionOptionsPersistentID, + i + }, + addDefaultClosedCaptionOption(e, t, i, r) { + e = { + itemId: e, + mediaOptionType: ul.Subtitle, + id: 0, + mediaOptionId: "cc1_" + Jd(), + mediaType: pl.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), + nm.addMediaToSelectionArray(i, e, r) + } + } + , sm = { + BANDWIDTH: NaN, + "AVERAGE-BANDWIDTH": NaN + } + , am = { + "TIME-OFFSET": NaN, + "FRAME-RATE": NaN, + SCORE: NaN, + "PLANNED-DURATION": NaN, + DURATION: NaN + } + , om = /^(\d+)x(\d+)$/ + , dm = /\s*(.+?)\s*=((?:\".*?\")|.*?)(?:,|$)/g; + class lm { + 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 um { + static parseTags(t) { + let i; + var r = {}; + if (!t) + return r; + for (dm.lastIndex = 0; null !== (i = dm.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 um.tagParsers) + if (i.trySetValue(t, e, r)) + break + } + return r + } + } + um.tagParsers = [new class extends lm { + 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 lm { + parseFunc(e) { + e = parseInt(e); + return e > Number.MAX_SAFE_INTEGER ? 1 / 0 : e + } + } + (sm), new class extends lm { + constructor() { + super(...arguments), + this.parseFunc = parseFloat + } + } + (am), new class extends lm { + 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 lm { + parseFunc(e) { + e = om.exec(e); + let t; + return null !== e && (t = { + width: parseInt(e[1], 10), + height: parseInt(e[2], 10) + }), + t + } + } + ({ + RESOLUTION: null + })]; + const cm = { + 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 hm(e, t, i) { + return sl.buildAbsoluteURL(t, e, { + alwaysNormalize: !0, + inheritQuery: i + }) + } + class pm { + 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(cm.ExtractVariableParameter, e=>{ + cm.ExtractVariableParameter.lastIndex = 0; + e = cm.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 = um.parseTags(e) + , n = (e = r.METHOD) && e in Wf ? r.METHOD : null; + e = null !== (e = r.KEYFORMAT) && void 0 !== e ? e : null; + if (n && pm.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 ? sl.buildAbsoluteURL(t, s, { + alwaysNormalize: !0 + }) : t + , o = (r.KEYFORMATVERSIONS || "1").split("/").map(Number).filter(isFinite); + return new Gc(n,a,i,e,o) + } + } + static shouldSelectKeyTag(e, t, i) { + return "AES-128" === t || "NONE" === t || null == i || e === Gf.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, d, l, u, c) { + let h, p; + var f = { + MediaSelectionGroupAllowEmptySelection: 1, + MediaSelectionGroupMediaCharacteristics: ["public.audible"], + MediaSelectionGroupMediaType: pl.AUDIO, + MediaSelectionGroupOptions: [] + } + , m = { + MediaSelectionGroupAllowEmptySelection: 1, + MediaSelectionGroupMediaCharacteristics: ["public.legible"], + MediaSelectionGroupMediaType: pl.SUBTITLE, + MediaSelectionGroupOptions: [] + } + , g = { + videoAlternateOptions: [], + audioAlternateOptions: [], + subtitleAlternateOptions: [], + audioMediaSelectionGroup: f, + subtitleMediaSelectionGroup: m + }; + let y = 0; + for (cm.MasterPlaylistAlternateMedia.lastIndex = 0; null != (h = cm.MasterPlaylistAlternateMedia.exec(o)); ) { + const o = pm.replaceVariables(h[1], c); + if (o.error) { + p = new R(L,N,!0,$.PlaylistErrorInvalidEXTXDEFINE.text,$.PlaylistErrorInvalidEXTXDEFINE); + break + } + var v = um.parseTags(o.updatedString); + let e, t, i, r = pl.UNKNOWN; + const S = nm.parseMediaCharacteristics(v.CHARACTERISTICS) + , b = v["GROUP-ID"] + , T = v.CHANNELS; + let n, s = null; + switch (v.TYPE) { + case "VIDEO": + r = pl.VIDEO, + t = g.videoAlternateOptions; + break; + case "AUDIO": + r = pl.AUDIO, + s = ul.AltAudio, + t = g.audioAlternateOptions, + i = f; + const a = l.find(e=>e.audioGroupId === b); + n = a ? a.audioCodecList : []; + break; + case "SUBTITLES": + r = pl.SUBTITLE, + s = ul.Subtitle, + t = g.subtitleAlternateOptions, + i = m; + break; + case "CLOSED-CAPTIONS": + r = pl.CLOSEDCAPTION, + s = ul.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: em.shortenLanguageCode(v.LANGUAGE) + }; + v.URI && (E.url = hm(v.URI, d, u)), + E.name || (E.name = E.lang, + E.mediaType === pl.CLOSEDCAPTION && (E.name += " CC")), + E.mediaType === pl.CLOSEDCAPTION && e && (E.inStreamID = e), + t && (E.id = t.length, + t.push(E)), + y = nm.addMediaToSelectionArray(i, E, y) + } + return 0 !== g.subtitleAlternateOptions.length || pm.optOutClosedCaption(l) || nm.addDefaultClosedCaptionOption(a, g.subtitleAlternateOptions, m, y), + { + alternateMediaInfo: g, + playlistParsingError: p + } + } + static parseMediaOptionPlaylist(e, t, i=!0, r, n, s, a, o, d, l=0) { + var u; + let c = 0 + , h = 0; + const p = { + itemId: s, + mediaOptionId: a, + mediaOptionType: o, + type: "", + version: 0, + url: t, + initSegments: {}, + fragments: [], + liveOrEvent: !0, + startSN: 0, + endSN: 0, + iframesOnly: !1, + targetduration: 0, + totalduration: 0, + averagetargetduration: 0, + ptsKnown: !1 + }; + let f, m, g, y = new Gc("NONE",t,null,null,null), v = !1, S = !1, b = 0, T = null, E = new rm(i), I = 0; + const w = {}; + let A, O, k, C = !0, D = !0; + cm.LevelPlaylistFast.lastIndex = 0; + for (var M = ()=>new R(L,_,!0,"Invalid key system preference for the playlist",$.IncompatibleAsset); null !== (f = cm.LevelPlaylistFast.exec(e)); ) { + const e = f[1]; + if (e) { + E.duration = parseFloat(e); + const t = (" " + f[2]).slice(1); + E.title = t || null, + E.tagList.push(t ? ["INF", e, t] : ["INF", e]) + } else if (f[3]) { + if (ne(E.duration)) { + const e = c++; + if (E.start = h + l, + E.levelkey = y, + S && !v) { + O = M(); + break + } + if (v = !1, + S = !1, + E.mediaSeqNum = e, + E.cc = b, + E.iframe = p.iframesOnly, + E.baseurl = t, + (A = pm.replaceVariables((" " + f[3]).slice(1), w)).error) { + O = new R(L,N,!0,$.PlaylistErrorInvalidEXTXDEFINE.text,$.PlaylistErrorInvalidEXTXDEFINE); + break + } + if (E.relurl = A.updatedString, + E.bitrate = ne(E.byteRangeEndOffset) ? 8 * (E.byteRangeEndOffset - E.byteRangeStartOffset) / E.duration : I, + null != g) { + E.rawProgramDateTime = g, + E.tagList.push(["PROGRAM-DATE-TIME", E.rawProgramDateTime]); + const e = E.programDateTime.getTime(); + p.programDateTimeMap = null !== (u = p.programDateTimeMap) && void 0 !== u ? u : {}, + p.programDateTimeMap[e] = E.mediaSeqNum, + p.dateMediaTimePairs = null !== (u = p.dateMediaTimePairs) && void 0 !== u ? u : [], + p.dateMediaTimePairs.push([e, E.start]), + g = void 0 + } + if (p.fragments.push(E.getMediaFragment(s, a, o)), + T = E, + h += E.duration, + C || !p.initSegments[b] || D) + if (p.iframesOnly && 0 < E.byteRangeStartOffset && !p.initSegments[b] && !D) { + const e = new rm(i); + if (e.url = E.url, + e.rawByteRange = Math.min(E.byteRangeStartOffset, 1316) + "@0", + e.baseurl = t, + e.isInitSegment = !0, + e.cc = b, + e.levelkey = y, + e.iframe = !0, + S && !v) { + O = M(); + break + } + v = !1, + S = !1, + p.initSegments[b] = e.getMediaFragment(s, a, o) + } else + k && (k.discoSeqNum = b, + p.initSegments[b] = k); + C = !1, + D = !1, + E = new rm(i) + } + } else if (f[4]) { + if (E.rawByteRange = (" " + f[4]).slice(1), + T) { + const e = T.byteRangeEndOffset; + e && (E.lastByteRangeEndOffset = e) + } + } else if (f[5]) + g = (" " + f[5]).slice(1); + else if (f[6]) { + const e = parseInt(f[6]); + ne(e) && (I = 1e3 * e) + } else if (f[7]) { + const e = f[7] + , t = um.parseTags(e); + t.ID && (p.daterangeTags || (p.daterangeTags = {}), + p.daterangeTags[t.ID] = t) + } else { + for (f = f[0].match(cm.LevelPlaylistSlow), + m = 1; m < f.length && void 0 === f[m]; m++) + ; + const e = pm.replaceVariables((" " + f[m + 1]).slice(1), w) + , d = pm.replaceVariables((" " + f[m + 2]).slice(1), w); + if (e.error || d.error) { + O = new R(L,N,!0,$.PlaylistErrorInvalidEXTXDEFINE.text,$.PlaylistErrorInvalidEXTXDEFINE); + break + } + const l = e.updatedString + , P = d.updatedString; + switch (f[m]) { + case "#": + E.tagList.push(P ? [l, P] : [l]); + break; + case "PLAYLIST-TYPE": + p.type = l.toUpperCase(), + "VOD" === p.type && (p.liveOrEvent = !1); + break; + case "MEDIA-SEQUENCE": + 0 === p.fragments.length && (c = p.startSN = parseInt(l)); + break; + case "TARGETDURATION": + p.targetduration = parseFloat(l); + break; + case "VERSION": + p.version = parseInt(l); + break; + case "EXTM3U": + break; + case "ENDLIST": + p.liveOrEvent = !1; + break; + case "DIS": + b++, + E.tagList.push(["DIS"]), + C = !0; + break; + case "DISCONTINUITY-SEQ": + b = parseInt(l); + break; + case "KEY": + const e = l; + if (S = !0, + !v) { + try { + y = pm.parseDecryptData(e, t, r) + } catch (e) { + O = e + } + y && (v = !0) + } + break; + case "START": + const d = l + , u = um.parseTags(d)["TIME-OFFSET"]; + ne(u) && (p.startTimeOffset = u); + break; + case "I-FRAMES": + p.iframesOnly = !0; + break; + case "MAP": + const h = um.parseTags(l); + if (E.relurl = h.URI, + E.rawByteRange = h.BYTERANGE, + E.baseurl = t, + E.isInitSegment = !0, + E.levelkey = y, + S && !v) { + O = M(); + break + } + v = !1, + S = !1, + k = E.getMediaFragment(s, a, o), + D = !0, + E = new rm(i); + break; + case "DEFINE": + const f = cm.VARIABLE_PLAYLIST_REGEX.exec(l) + , m = "NAME" === f[1] ? f[2] : f[4] + , g = "VALUE" === f[1] ? f[2] : f[4] + , N = f[5] + , T = f[6]; + if (m || g || "IMPORT" !== N || !n.hasOwnProperty(T)) { + if (!m || N || f[1] === f[3] || w.hasOwnProperty(m)) { + O = new R(L,_,!0,$.PlaylistErrorMissingImportReference.text,$.PlaylistErrorMissingImportReference); + break + } + w[m] = g + } else + w[T] = n[T] + } + } + } + return E = T, + E && !E.relurl && (p.fragments.pop(), + h -= E.duration), + !p.liveOrEvent && 0 < p.fragments.length && (p.fragments[p.fragments.length - 1].isLastFragment = !0), + p.totalduration = h, + p.averagetargetduration = h / p.fragments.length, + p.endSN = c - 1, + { + mediaOptionDetails: p, + playlistParsingError: O + } + } + static parseRootPlaylist(t, e, i, r) { + const n = [] + , s = {}; + let a, o, d, l, u = null, c = !0; + for (cm.MasterPlaylist.lastIndex = 0; null != (a = cm.MasterPlaylist.exec(e)); ) + if (a[4]) { + a = cm.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]) { + l = new R(L,_,!0,$.PlaylistErrorInvalidEXTXDEFINE.text,$.PlaylistErrorInvalidEXTXDEFINE); + break + } + s[t] = e + } else if (a[5]) { + const t = pm.replaceVariables(a[5], s); + if (t.error) { + l = new R(L,_,!0,$.PlaylistErrorInvalidEXTXDEFINE.text,$.PlaylistErrorInvalidEXTXDEFINE); + break + } + const e = um.parseTags(t.updatedString); + if ("string" != typeof e["SERVER-URI"]) { + l = new R(L,_,!0,$.PlaylistErrorInvalidSERVERURI.text,$.PlaylistErrorInvalidSERVERURI); + break + } + if (null != e["PATHWAY-ID"] && "string" != typeof e["PATHWAY-ID"]) { + l = new R(L,_,!0,$.PlaylistErrorInvalidPATHWAYID.text,$.PlaylistErrorInvalidPATHWAYID); + break + } + u = { + serverURI: hm(e["SERVER-URI"], i, !1), + initPathwayID: e["PATHWAY-ID"] || "." + } + } else { + d = pm.replaceVariables(a[1] || a[3], s); + const e = um.parseTags(d.updatedString); + if (o = pm.replaceVariables(a[2] || e.URI, s), + d.error || o.error) { + l = new R(L,_,!0,$.PlaylistErrorInvalidEXTXDEFINE.text,$.PlaylistErrorInvalidEXTXDEFINE); + break + } + if (void 0 !== e.SCORE && !ne(e.SCORE) || e.SCORE < 0) { + l = 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) || !Jf.includes(h)) + continue; + const g = { + itemId: t, + mediaOptionId: `level_${(f || 0) + n.length % 1e3 / 1e3}`, + mediaOptionType: ul.Variant, + attrs: e, + url: hm(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: pm.parseAllowedCPC(e["ALLOWED-CPC"]), + closedcaption: e["CLOSED-CAPTIONS"], + levelCodec: e.CODECS, + score: e.SCORE, + pathwayID: e["PATHWAY-ID"] || "." + } + , y = e["HDCP-LEVEL"]; + Xf(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 = Se.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 = tm.getRichestAudioCodec(g.audioCodecList)), + 1 < g.videoCodecList.length && (g.videoCodec = tm.getRichestVideoCodec(g.videoCodecList)) + } + if (null != (l = "string" != typeof (h = g.pathwayID) ? im("invalid steering manifest PATHWAY-PRIORITY list item data type") : /^[\w\-\.]+$/.test(h) ? void 0 : im("steering manifest contains invalid pathway ID: " + h))) + break; + n.push(g) + } + return { + variantMediaOptions: n, + contentSteeringOption: u, + masterVariableList: s, + playlistParsingError: l, + 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 (cm.SessionData.lastIndex = 0; r = cm.SessionKeys.exec(e); ) + try { + const e = pm.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 (cm.SessionData.lastIndex = 0; null != (i = cm.SessionData.exec(e)); ) { + const e = um.parseTags(i[1]); + e.LANGUAGE = em.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(Vc.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 fm, mm, gm, ym, vm, Sm = pm; + const bm = (e,t,i)=>{ + i = Object.assign(Object.assign({}, e), { + method: "GET", + responseType: "text", + extendMaxTTFB: i + }); + return ml(i.url) ? Mc().load(i, t).pipe(ur(e=>({ + responseText: e.data.response.data, + responseURL: e.data.response.uri, + stats: e.stats + }))) : Oc(i, t).pipe(ur(([e,t])=>({ + responseText: e.responseText, + responseURL: e.responseURL, + stats: t + }))) + } + , Tm = (e,n,t,i,s,a,o,d,r)=>{ + const {url: l, itemId: u, mediaOptionId: c, mediaOptionType: h} = e + , p = xc(e, i); + return bm({ + url: l, + xhrSetup: t.xhrSetup + }, p, r).pipe(ur(({responseText: e, stats: t})=>{ + var i = performance.now() + , r = pm.parseMediaOptionPlaylist(e, l, !0, a, d, u, c, h, s, n); + Lc(r.mediaOptionDetails); + var e = performance.now() + , r = r["mediaOptionDetails"] + , i = { + playlistLoadTimeMs: t.tload - t.trequest, + playlistParseTimeMs: e - i + }; + return o.setPlaylistSample(i), + { + mediaOptionDetails: r, + stats: t + } + } + ), (f = h, + m = c, + g = l, + e=>e.pipe(Un(e=>{ + if (e instanceof ou) + throw new nu(!1,"Timeout",0,$.PlaylistTimeoutError,!0,f,m,g); + if (e instanceof tu) + throw new nu(!1,e.message,e.code,{ + code: e.code, + text: "Playlist Network Error" + },!1,f,m,g); + throw e + } + )))); + var f, m, g + } + , Em = (f,e,m,t,g)=>Bi(e).pipe(Ra(e=>{ + const {keyTagInfo: t, isInitSegment: i, iframe: r, byteRangeOffset: n} = f + , s = t["method"] + , {start: a, end: o} = n; + if ("AES-128" !== s) + return Bi(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 + , d = t.iv.buffer + , l = o && (r || i) ? o - a : void 0 + , u = !m.enableWebCrypto || !!l + , c = s.slice(0) + , h = d.slice(0) + , p = { + useJSCrypto: u, + plainTextLength: l + }; + return g.decrypt(c, h, "AES-CBC", n, p) + } + } + )); + class Im { + 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 wm(e, t, i) { + return (t || []).reduce((e,t)=>t.filter(e, i), Array.from(e)) + } + function Am(t, e) { + return e.filter(e=>{ + return yl(t, null !== (e = e.url) && void 0 !== e ? e : null) + } + ) + } + function Om() { + return [new Im({ + name: "Remove Filter", + priority: 0, + filterFn: (t,e,i)=>!i || i.removed.every(e=>t.mediaOptionId !== e) + }), new Im({ + 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 Im({ + name: "Compatible IDs Filter", + priority: 1, + filterFn: (t,e,i)=>!i || null == i.compatibleIds || i.compatibleIds.some(e=>e === t.mediaOptionId) + })] + } + class km extends Od { + 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(ur(({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 wm(e.mediaOptions, this.allowFilters, e) + } + get filteredMediaOptionList() { + return this.mediaOptionListInfo ? this._getFilteredList(this.mediaOptionListInfo) : null + } + get filteredMediaOptionList$() { + return this.mediaOptionListInfo$.pipe(Ra(e=>{ + const t = [Ul] + , i = performance.now(); + for (const r of e.penaltyBoxQueue) + ne(r.expiry) && r.expiry > i && t.push(vn(r.expiry - i)); + return nn(...t).pipe(ur(()=>this._getFilteredList(e))) + } + ), yd()) + } + get preferredMediaOptionList() { + return this.filteredMediaOptionList ? Am(this.preferredHost, this.filteredMediaOptionList) : [] + } + get preferredMediaOptionList$() { + return Zd([this.preferredHost$, this.filteredMediaOptionList$]).pipe(ur(([e,t])=>Am(e, t))) + } + getNewHost(e) { + e = this.getFallbackVariant(e, !1, !0); + return null != e && e.url ? gl(e.url) : this.preferredHost + } + } + function Cm(e) { + return "PQ" === e.videoRange || "HLG" === e.videoRange + } + function Dm(e, t) { + return t.iframes === e + } + function Mm(e, t, i, r) { + return !r || i.bitrate > r.bitrate && i.bitrate <= e.bitrate ? fm.Better : i.bitrate === r.bitrate ? fm.Same : fm.Worse + } + function Pm(e, t) { + return e && !t ? -1 : !e && t ? 1 : 0 + } + (dd = fm = fm || {})[dd.Better = 1] = "Better", + dd[dd.Same = 0] = "Same", + dd[dd.Worse = -1] = "Worse"; + class xm extends km { + constructor(e, t) { + super(e, t, ul.Variant) + } + static makeFilters() { + return [...Om().concat([new Im({ + name: "HDR Filter", + priority: 1, + filterFn: (e,t,i)=>!i || (i.hasHdrLevels && i.preferHDR) === Cm(e) + }), new Im({ + 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 Im({ + name: "HDCP Filter", + priority: 2, + filterFn: (e,t,i)=>!i || !Xf(i.maxHdcpLevel) || Yf(e.hdcpLevel) < Yf(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[ul.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[ul.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[ul.Variant] + } + ).pipe(Up()) + } + get hdrMode$() { + return this.mediaOptionListInfo$.pipe(ur(e=>!0 === e.preferHDR && e.hasHdrLevels), Es()) + } + get maxHdcpLevel$() { + return this.selectEntity(this.itemId, e=>{ + e = null === (e = null == e ? void 0 : e.mediaOptionListTuple) || void 0 === e ? void 0 : e[ul.Variant]; + return null == e ? void 0 : e.maxHdcpLevel + } + ).pipe(Es()) + } + 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 = gl(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 = gl(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 ? wm(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 (!Cm(n)) + return !1; + var s = gl(n.url) + , e = wm(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 d = function(e, s, a) { + const t = [...e] + , o = gl(s.url) + , d = 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 = Pm(yl(o, e.url), yl(o, t.url)), + 0 === i && (i = Pm(!d || e.audioGroupId === d, !d || t.audioGroupId === d))) : i = 1, + i + } + ), + t + }(e.filter(e=>{ + var t = !(e.iframes !== r.iframes || s && yl(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) || d.unshift(r), + d + } + 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) + Mm(t, 0, o, a) !== fm.Better || yl(i, o.url) || (a = o); + else + for (const o of e) { + const r = Mm(t, 0, o, a); + r !== fm.Better && (r !== fm.Same || !yl(i, o.url) || yl(i, a.url) && o.audioGroupId !== t.audioGroupId) || (a = o) + } + return a + } + getMatchingVariant(e, t) { + var i = this.mediaOptionFromId(e) + , r = gl(null == i ? void 0 : i.url) + , n = t.mediaOptionType === ul.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 = Mm(i, 0, e, s); + a !== fm.Better && (a !== fm.Same || s.mediaOptionId === i.mediaOptionId || e.mediaOptionId !== i.mediaOptionId && !yl(r, e.url)) || (s = e) + } + return s + } + get currentPathwayID() { + var e; + return null === (e = this.mediaOptionListInfo) || void 0 === e ? void 0 : e.currentPathwayID + } + } + function Rm(e, t) { + switch (e) { + case mm.SendAlternateToPenaltyBox: + e = mm.RetryRequest, + 401 !== t && 403 !== t && 407 !== t && t !== $.CorruptStream.code && t !== $.LivePlaylistUpdateError.code || (e = mm.SendEndCallback); + break; + case mm.RemoveAlternatePermanently: + e = mm.SendEndCallback + } + return e + } + function Lm(e, t, i, r, n, s, a, o=!1) { + const d = s.mediaOptionListQueries[n] + , l = 0 != (e.errorActionFlags & gm.MoveAllAlternatesMatchingHost) + , u = s.mediaOptionListQueries[n].mediaOptionFromId(r) + , c = a.getFallbackMediaOptionTupleFromMediaOptionId(s, n, r, u.backingMediaOptionId, !1, l, o); + let {errorAction: h, errorActionFlags: p} = e; + return s.isValidMediaOptionTuple(c) ? yl(d.preferredHost, c[n].url) && (p &= ~gm.MoveAllAlternatesMatchingHost) : (t || (h = Rm(h, i), + p = 0), + d instanceof xm && (!0 === d.mediaOptionFromId(r).iframes ? (h = mm.DoNothing, + p = 0) : !t && a.canSwitchToSDR(s, r, l, o) && (h = e.errorAction, + p = gm.SwitchToSDR))), + { + errorAction: h, + errorActionFlags: p + } + } + function _m(e) { + let t, i = 0; + switch (e) { + case 0: + t = mm.SendAlternateToPenaltyBox, + i = gm.MoveAllAlternatesMatchingHost; + break; + case 410: + t = mm.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 = mm.SendAlternateToPenaltyBox, + i = 0 + } + return { + errorAction: t, + errorActionFlags: i + } + } + function Nm(i, r, n, s, a, o, d) { + var {errorAction: l, errorActionFlags: u} = i; + let e = !0; + switch (l) { + case mm.RemoveAlternatePermanently: + case mm.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 & gm.MoveAllAlternatesMatchingHost) + , h = 0 != (u & gm.MoveAllAlternatesMatchingHDCP) + , p = 0 != (u & gm.SwitchToSDR) + , f = l === mm.RemoveAlternatePermanently; + if (h && "hdcpLevel"in t) { + const r = t.hdcpLevel; + s.setMaxHdcpLevel(i, r) + } + if (p && s.switchToSDROnly(i), + c) { + const r = gl(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 = [Ol, Ol, Ol]; + e = s.getFallbackMediaOptionTupleFromMediaOptionId(n, a, o, null, !1, c, d), + n.isValidMediaOptionTuple(e) ? s.setPreferredHost(i, gl(e[ul.Variant].url)) : r.fatal = !0, + r.fatal && (e = [Ol, Ol, Ol]), + s.setNextMediaOptions(n.itemId, e) + } + break + } + case mm.SendEndCallback: + r.fatal = !0; + break; + case mm.RetryRequest: + case mm.DoNothing: + default: + e = !1 + } + return r.handled = e, + e + } + function Fm(e, t) { + t instanceof ru || t instanceof nu || t instanceof au || (t instanceof uu || t instanceof lu) && oe(t.keyuri) + } + function Bm(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), + Fm(0, t), + vn(e) + } + return t.fatal = !0, + Fm(0, t), + Ui(t) + } + function Um(e, t, i, r, n, s, a, o, d=!1) { + return (null == r ? void 0 : r.errorAction) === mm.RetryRequest ? Bm(e, t, i, s.logger) : $m(e, 0, r, n, s, a, o, d) + } + function $m(e, t, i, r, n, s, a, o=!1) { + const d = new Ji; + return sd(()=>{ + i && (Fm(n.logger, e), + Nm(i, e, r, n, s, a, o)), + d.error(e) + } + ), + d + } + function Vm(t, i, r, n) { + return e=>e.pipe(Un(e=>{ + if (t.logger.error(`Got demux error ${e.message}`), + e instanceof D || e instanceof F) { + mm.SendAlternateToPenaltyBox; + return $m(e, 0, { + errorAction: e.fatal ? mm.SendEndCallback : e instanceof F ? mm.SendAlternateToPenaltyBox : mm.RemoveAlternatePermanently, + errorActionFlags: 0 + }, i, t, r, n) + } + throw e + } + )) + } + function Km(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 Hm(r, t, e, n, s, a) { + const o = n.logger + , i = s.enabledMediaOptionKeys + , d = []; + 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 ? d.push(a) : d.unshift(a) + } else + o.warn(`Couldn't find query for ${t}`) + } + const l = new Ji; + return sd(()=>{ + const e = r instanceof lu; + Km(r.keyuri, e, s, n, a); + let t, i = !1; + for (const {mediaOptionId: e, mediaOptionType: a} of d) + t = function(e, t, i, r, n) { + let s = { + errorAction: mm.SendAlternateToPenaltyBox, + errorActionFlags: 0 + }; + if (e instanceof lu) + s.errorAction = mm.SendAlternateToPenaltyBox; + else { + const t = e.isOkToRetry; + e.keyErrorReason === Xl.OutputRestricted ? (s.errorAction = mm.RemoveAlternatePermanently, + s.errorActionFlags |= gm.MoveAllAlternatesMatchingHDCP) : t ? s = _m(e.code) : s.errorAction = mm.RemoveAlternatePermanently + } + s.errorActionFlags &= ~gm.MoveAllAlternatesMatchingHost; + var a = r.enabledMediaOptionIdByType(i); + return t === a ? Lm(s, !1, e.code, a, i, r, n, e.isTimeout) : s + }(r, e, a, s, n), + o.error(`[Keys] handleNetworkError uri=${oe(r.keyuri)} mediaOptionId=${e} mediaOptionType=${a} action=${JSON.stringify(t)}`), + t.errorAction === mm.RetryRequest && (i = !0), + Nm(t, r, s, n, a, e); + i ? (l.next(), + l.complete()) : (Fm(0, r), + l.error(r)) + } + ), + l.pipe(Ra(()=>Bm(r, t, e, n.logger))) + } + function jm(t, i, r, n, s, a, o, d) { + return n = Math.max(0, n), + e=>e.pipe(Ja(()=>{ + null != i && o.updateConsecutiveTimeouts(t, i, !1, "load") + } + ), ya(e=>e.pipe(Kr((e,t)=>function(e, t, i, r, n, s, a, o) { + var d; + if (!(e instanceof p)) + return Ui(e); + let l, u, c, h = !1; + if (e instanceof ru) + c = { + errorAction: Rm(_m((d = e).response.code).errorAction, d.response.code), + errorActionFlags: 0 + }; + else if (e instanceof nu || e instanceof au) { + ({mediaOptionType: u, mediaOptionId: l, isTimeout: h} = e); + const t = null === (d = s.mediaOptionListQueries[u]) || void 0 === d ? void 0 : d.mediaOptionFromId(l); + if (!r && e.isTimeout && null != t && (!("iframes"in t) || !0 !== t.iframes) && (a.updateConsecutiveTimeouts(s.itemId, e.mediaOptionType, !0, "load"), + e instanceof au && 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 = _m(s); + var {mediaOptionId: o, mediaOptionType: d} = e; + return t ? a.errorActionFlags &= ~gm.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 = mm.DoNothing, + a = 0) + } + return { + errorAction: s, + errorActionFlags: a + } + }(e, a, t, i, r), + a = Lm(a, t, s, o, d, r, n, e.isTimeout), + a + }(e, r, n, s, a) + } + return Um(e, t, i, c, s, a, u, l, h) + }(e, t, Rc(e, r), s, n, a, o, d))))) + } + xm.kAllowFilters = xm.makeFilters(), + (dd = mm = mm || {})[dd.DoNothing = 0] = "DoNothing", + dd[dd.SendEndCallback = 1] = "SendEndCallback", + dd[dd.SendAlternateToPenaltyBox = 2] = "SendAlternateToPenaltyBox", + dd[dd.RemoveAlternatePermanently = 3] = "RemoveAlternatePermanently", + dd[dd.InsertDiscontinuity = 4] = "InsertDiscontinuity", + dd[dd.RetryRequest = 5] = "RetryRequest", + (dd = gm = gm || {})[dd.MoveAllAlternatesMatchingHost = 1] = "MoveAllAlternatesMatchingHost", + dd[dd.MoveAllAlternatesMatchingHDCP = 2] = "MoveAllAlternatesMatchingHDCP", + dd[dd.SwitchToSDR = 4] = "SwitchToSDR"; + class qm extends Od { + 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) + } + } + w(); + class Qm extends pd { + constructor() { + super({}, { + name: "hls-store", + producerFn: vc + }) + } + } + class Gm { + constructor(e) { + this.store = e + } + getQuery() { + return new qm(this.store) + } + setHlsEntity(e) { + const t = e.id; + Co(`hls.set.entity ${t}`), + sd(()=>{ + this.store.add(de(e)), + this.store.setActive(t) + } + ) + } + removeEntity(e) { + Co(`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 Wm, zm; + function Xm() { + return Wm = Wm || new Gm(new Qm), + Wm + } + function Ym() { + return Xm().getQuery().currentConfig + } + function Jm(e, t, i, r) { + var n = t.mediaSeqNum - e.startSN; + if (n < 0 || n >= e.fragments.length) + return e; + const s = Object.assign(Object.assign({}, e), { + fragments: e.fragments.map(e=>Object.assign({}, e)) + }) + , a = s.fragments + , o = a[n]; + if (!Fp(t, a[n])) + return null == r || r.warn("Parsed and existing fragments don't match"), + e; + var {startDtsTs: d, startPts: e, endPts: t} = t; + o.startDtsTs = d, + o.startPts = e, + o.endPts = t, + o.start = i, + o.duration = b(o.endPts, o.startPts); + for (let e = n; 0 < e; e--) + Zm(a, e, e - 1, r); + for (let e = n; e < a.length - 1; e++) + Zm(a, e, e + 1, r); + s.totalduration = 0; + for (const l of a) + s.totalduration += l.duration; + return s.ptsKnown = !0, + eg(s), + s + } + function Zm(e, t, i, r) { + const n = e[t] + , s = e[i]; + s.startPts ? (t < i && n.start + n.duration > s.start || i < t && s.start + s.duration > n.start) && (null == r || r.warn(`overlapping segments found ${n.mediaSeqNum}->${s.mediaSeqNum}`)) : s.start = t < i ? n.start + n.duration : Math.max(n.start - s.duration, 0) + } + function eg(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]) + } + } + function tg(t, i) { + if ("VOD" === t.type || "VOD" === i.type || t.iframesOnly !== i.iframesOnly) + return i; + var r = t.mediaOptionId === i.mediaOptionId; + let n = Object.assign(Object.assign({}, i), { + initSegments: {}, + fragments: [], + ptsKnown: !1 + }); + const s = Math.max(t.startSN, n.startSN) - n.startSN + , a = Math.min(t.endSN, n.endSN) - n.startSN + , o = n.startSN - t.startSN + , d = t.fragments + , l = i.fragments; + let u = 0; + for (let e = s; e <= a; ++e) + if (d[o + e] && l[e]) { + u = d[o + e].discoSeqNum - l[e].discoSeqNum; + break + } + const c = n.initSegments; + let h = null; + for (let e = 0; e < l.length; e++) { + const p = d[o + e] + , s = l[e] + , a = Object.assign({}, s) + , f = s.discoSeqNum + u; + i.initSegments[s.discoSeqNum] && (c[f] = Object.assign(Object.assign({}, i.initSegments[s.discoSeqNum]), { + discoSeqNum: f + })), + a.discoSeqNum = f, + r && a.mediaSeqNum === (null == p ? void 0 : p.mediaSeqNum) && null != p.startPts && (a.start = p.start, + a.duration = p.duration, + a.startDtsTs = p.startDtsTs, + a.endDtsTs = p.endDtsTs, + a.startPts = p.startPts, + a.endPts = p.endPts, + h = a), + n.fragments.push(a) + } + if (h) + n = Jm(n, h, h.start); + else if (0 <= o && o < d.length) { + const t = d[o].start + , i = n.fragments; + for (let e = 0; e < l.length; e++) + i[e].start += t + } + return n.ptsKnown = n.ptsKnown || r && !0 === t.ptsKnown && t.endSN >= i.startSN, + eg(n), + n + } + function ig(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 rg(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 ng(e) { + return 1e3 * (e.averagetargetduration || e.targetduration) + } + function sg(e, t) { + var i = ng(e) + , t = performance.now() - t; + return e.liveOrEvent && i <= t + } + function ag(e, t) { + return function(e) { + const t = [] + , i = e.fragments; + for (const e of i) { + const {discoSeqNum: i, start: r} = e; + t.push({ + timelineOffset: r, + mediaFragment: e + }) + } + return t + }(e).find(e=>t(e.mediaFragment)) + } + function og(s, e, a, t, o) { + var i; + const d = !t.liveOrEvent || t.ptsKnown; + let r = null !== (i = ag(t, t=>{ + var e = t.mediaSeqNum >= a + , i = 0 < t.duration + , r = t.start + t.duration + , n = !d || s < r || s - r < 1 && t.isLastFragment + , r = o.every(e=>!Fp(e.frag, t)); + return e && i && n && r + } + )) && void 0 !== i ? i : null + , n = NaN; + null != r && ne(e) && r.mediaFragment.discoSeqNum !== e && (n = r.mediaFragment.discoSeqNum, + r = null); + e = o.some(e=>0 < e.frag.framesWithoutIDR); + return r && e && o[o.length - 1].frag.mediaOptionId !== t.mediaOptionId && (r = null !== (t = ag(t, e=>e.mediaSeqNum === r.mediaFragment.mediaSeqNum - 1)) && void 0 !== t ? t : r), + { + foundFrag: r, + nextDisco: n + } + } + function dg(e) { + const t = e.fragments; + return t.map(e=>e.duration).reduce((e,t)=>e + t, null !== (e = t[0].start) && void 0 !== e ? e : 0) + } + class lg extends Od { + 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(Up()) + } + get playlistDuration$() { + return this.mediaOptionDetailsEntity$.pipe(ur(e=>null == e ? void 0 : e.playlistDuration), Up(), Es()) + } + get live$() { + return this.mediaOptionDetails$.pipe(ur(e=>null == e ? void 0 : e.liveOrEvent), Es()) + } + } + class ug extends pd { + constructor() { + super({}, { + name: "media-library-store", + idKey: "itemId", + producerFn: vc + }) + } + } + class cg { + constructor(e) { + this.store = e + } + getQuery() { + return new Od(this.store) + } + getQueryForOption(e) { + return new lg(this.store,e) + } + createMediaLibraryEntity(e) { + var t = { + itemId: e, + mediaOptionDetailsEntityRecord: {} + }; + Co(`library.entity.create: ${e}`), + this.store.add(t) + } + setDetailsLoading(e) { + const {itemId: t, mediaOptionId: i} = e; + Co(`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 = dg(i); + Co(`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; + Co(`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; + Co(`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, r, n, s) { + this.store.update(e, ({mediaOptionDetailsEntityRecord: e})=>{ + const t = e[r]; + var i; + null != t && t.mediaOptionDetails && ({variantDTS: i, timelineOffset: e} = n, + e = S(s.startDtsTs) - S(i) + e, + e = Jm(t.mediaOptionDetails, s, e), + t.mediaOptionDetails = e, + t.playlistDuration = dg(e)) + } + ) + } + remove(e) { + this.store.remove(e) + } + clear() { + this.store.remove() + } + } + function hg() { + return zm = zm || new cg(new ug), + zm + } + const pg = e=>hg().getQueryForOption(e) + , fg = (d,e,t=!1)=>{ + if (!kl(e)) + return Bi(null); + const i = e["itemId"] + , r = d["mediaLibraryService"] + , n = r.getQueryForOption(e); + n.hasEntity(i) || r.createMediaLibraryEntity(i); + var s = n.mediaOptionDetailsEntity + , a = n.mediaOptionDetails; + return null == a || t || "VOD" !== a.type && (!a.liveOrEvent || sg(a, s.lastUpdateMillis)) ? (r.setDetailsLoading(e), + function(l) { + var e; + const {logger: t, config: u, rootPlaylistQuery: c, rootPlaylistService: h, statsService: i, mediaLibraryService: p, mediaSink: r} = d + , f = r.mediaQuery + , n = u.playlistLoadPolicy + , s = u.keySystemPreference + , a = c.masterVariableList + , o = null === (e = null === (e = Xm()) || void 0 === e ? void 0 : e.getQuery()) || void 0 === e ? void 0 : e.extendMaxTTFB; + return Tm(l, c.itemStartOffset, u, n, t, s, i, a, o).pipe(Hi(Zi), ur(t=>{ + const i = p.getQueryForOption(l) + , r = i.mediaOptionDetails; + let n = t["mediaOptionDetails"]; + var e = t["stats"]; + let s = !0; + if (n.liveOrEvent) { + const d = n["mediaOptionType"]; + t = n, + s = null == r || t.endSN !== r.endSN || t.liveOrEvent !== r.liveOrEvent; + let e = n; + r && (e = tg(r, n)); + const i = c.lastLoadedMediaOptionByType(d) + , u = i ? null === (t = p.getQueryForOption(i)) || void 0 === t ? void 0 : t.mediaOptionDetails : null; + !e.ptsKnown && u && u.mediaOptionId !== (null == r ? void 0 : r.mediaOptionId) && (e = tg(u, n)), + n = e + } + n && (p.archiveMediaOptionDetails(n, e, s), + h.setLastLoadedMediaOptionByType(c.itemId, l.mediaOptionType, l)); + const a = !s && i.mediaOptionDetailsEntity.unchangedCount >= u.liveMaxUnchangedPlaylistRefresh + , o = function(e, t, i, r) { + t = rg(r.currentTime, e, t, i, r), + i = e.fragments[e.fragments.length - 1], + r = i.start + i.duration; + return { + expired: null != i && e.liveOrEvent && e.ptsKnown && r < t, + windowEnd: r, + minPosition: t + } + }(n, e.tload, u.maxBufferHole, f); + if (a || o.expired) { + e = a ? $.LivePlaylistUpdateError : { + text: `Live window too far in the past end:${o.windowEnd.toFixed(3)} minPosition:${o.minPosition}`, + code: 0 + }; + throw new nu(!1,e.text,e.code,e,!1,l.mediaOptionType,l.mediaOptionId,l.url) + } + return n + } + ), Ql.tag("getMediaOptionDetailsCommon.emit.loaded"), jm(l.itemId, l.mediaOptionType, xc(l, n), u.maxNumAddLevelToPenaltyBox, !1, c, h, i)).pipe(Cs(1)) + }(e)) : Bi(a).pipe(Ql.tag("retrieveMediaOptionDetails.emit.cached")).pipe(Cs(1)) + } + ; + const mg = (t,i)=>{ + if (!i) + return Bi(null); + const {mediaLibraryService: r, mediaParser: n} = t + , e = r.getQueryForOption(i) + , {mediaOption: s, mediaOptionDetailsEntityRecord: a, mediaOptionDetails: o} = e + , d = s["mediaOptionId"]; + if (null == a || !a[d]) + throw new Error("retrieveInitSegmentCacheEntity no details entity"); + if (!o) + throw new Error("retrieveInitSegmentCacheEntity no details"); + var l = a[d]["initSegmentCacheEntities"] + , u = o["initSegments"] + , c = i["discoSeqNum"]; + if (l[c]) { + const [t,r] = l[c]; + let e = t; + return r && (e = n.willBeTrackSwitch(i) ? t : r), + Bi(e) + } + const h = u[c]; + return h ? (r.setInitSegmentLoading(h), + yg(t, h, !1, !1).pipe(Hi(Zi), Ra(e=>gg(e, h, t)), Ql.tag("retrieveInitSegmentCacheEntity.emit"))) : Bi(null) + } + ; + function gg(e, n, t) { + const {logger: s, mediaSink: i, rootPlaylistService: r, rootPlaylistQuery: a, mediaParser: o, mediaLibraryService: d, gaplessInstance: l} = t + , u = i["mediaQuery"] + , c = d.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 === ul.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(ur(e=>{ + var {track: t, moovData: i, mimeType: r} = e + , e = t["initSegment"]; + l.inGaplessMode && Se.isVideoCodec(t.codec) && (s.warn(`Video codec discovered in gapless mode codec:${t.codec}`), + l.dequeueSource("InvalidFormat")); + r = { + itemId: f, + mediaOptionId: m, + discoSeqNum: y, + initParsedData: i, + data: e, + mimeType: r, + keyTagInfo: g, + fragment: n + }; + return d.archiveInitSegmentEntity(r), + r + } + ), Vm(r, a, v, m)) + } + function yg(n, s, i, r) { + var e; + const {rootPlaylistQuery: t, rootPlaylistService: a, config: o, rtcService: d, statsService: l} = 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; + return r && null === d.serverInfoInstance && (m = !0), + Jr([Sg(n, s.keyTagInfo, { + itemId: s.itemId, + mediaOptionId: s.mediaOptionId + }), qf(s, o, h, f, m, null === (e = null === (e = Xm()) || void 0 === e ? void 0 : e.getQuery()) || void 0 === e ? void 0 : e.extendMaxTTFB).pipe(Ja(([,,e,t])=>{ + i && l.setBandwidthSample(Object.assign(Object.assign({}, e), { + mediaOptionType: s.mediaOptionType + })), + r && m && (d.serverInfoInstance = t), + p && a.updateInflightFrag(u, s.mediaOptionType, s, "loaded", e) + } + ), jm(u, c, xc(s, h), o.maxNumAddLevelToPenaltyBox, !1, t, a, l))]).pipe(Cs(1), Ja(([,e])=>{ + var t; + r && ([t,,e] = e, + d.handleFragLoaded(t, e)) + } + ), Ra(([e,t])=>{ + const [i,r] = t; + return i.keyTagInfo.key = e.key, + Em(i, r, o, n.logger, n.rpcClients.crypto) + } + ), Ql.tag("getMediaFragmentCommon.emit")) + } + const vg = (i,e,t)=>{ + const {rootPlaylistService: r, rootPlaylistQuery: n} = i + , {timelineOffset: s, mediaFragment: a} = t.foundFrag + , {itemId: o, discoSeqNum: d} = a; + return r.updateInflightFrag(o, a.mediaOptionType, a, "loading", null), + Jr([Sg(i, a.keyTagInfo, { + itemId: a.itemId, + mediaOptionId: a.mediaOptionId + }), mg(i, a).pipe(Ra(t=>yg(i, a, !0, !0).pipe(Ra(e=>{ + return function(e, t, i, y, v, S) { + const r = new Uint8Array(e) + , {rootPlaylistService: n, mediaSink: s, mediaParser: a, rootPlaylistQuery: o, mediaLibraryService: b} = S + , d = s["mediaQuery"] + , l = b.getQueryForOption(y) + , {mediaOption: u, mediaOptionDetails: c} = l + , {itemId: T, mediaOptionId: E} = u + , {discoSeqNum: I, mediaSeqNum: w, mediaOptionType: h, isLastFragment: A} = y + , p = d.seeking + , f = c.liveOrEvent + , m = h === ul.Variant && c.ptsKnown + , O = { + segment: r, + frag: y, + seeking: p, + live: f, + ptsKnown: m, + totalDuration: c.totalduration, + defaultInitPTS: t, + iframeMediaStart: Np(y) ? y.iframeMediaStart : void 0, + iframeDuration: Np(y) ? y.iframeMediaDuration : void 0 + }; + let g; + 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)) + g = Bi(i); + else if (null != i) { + const e = Object.assign(Object.assign({}, i.fragment), { + keyTagInfo: y.keyTagInfo + }); + g = gg(i.data, e, S) + } else + g = gg(e, y, S); + return g.pipe(Ra(m=>{ + const g = performance.now(); + if (null != m) { + const g = m["data"] + , e = new Uint8Array(g); + O.initSegment = e + } + return a.parseSegment(O, "").pipe(ur(e=>{ + var t = performance.now() + , {startPTS: i, startDTS: r, endPTS: n, endDTS: s, firstKeyframePts: a, framesWithoutIDR: o, dropped: d, data1: l, 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: d, + data1: l, + data2: u, + startPts: i, + endPts: n, + keyTagInfo: e, + isLastFragment: A, + iframe: null !== (e = y.iframe) && void 0 !== e && e, + duration: y.duration, + iframeMediaDuration: Np(y) ? y.iframeMediaDuration : void 0, + captionData: c, + id3Samples: h + }] + } + )) + } + ), Vm(n, o, h, E)) + }(e, null === (e = n.getInitPTS(d)) || void 0 === e ? void 0 : e.offsetTimestamp, t, a, s, i) + } + ), Ja(e=>{} + ), Ql.tag(`retrieveMediaFragmentCacheEntity.${e}.emit`)))).pipe(Cs(1))]).pipe(Ra(([,e])=>Bi(e))) + } + ; + function Sg(e, t, i) { + const {keySystemAdapter: r, rootPlaylistQuery: n, rootPlaylistService: s, config: a} = e; + return r.getKeyFromDecryptData(t, i).pipe((o = t.uri, + d = xc({ + url: t.uri + }, a.keyLoadPolicy), + l = n, + u = s, + c = r.ksQuery, + e=>e.pipe(od(()=>{ + Km(o, !1, l, u, c) + } + ), ya(e=>e.pipe(Kr((e,t)=>{ + if (e instanceof lu || e instanceof uu) + return Hm(e, t, Rc(e, d), u, l, c); + throw e + } + )))))); + var o, d, l, u, c + } + class bg { + constructor(e, t, i) { + this.hls = e, + this.destroy$ = new zt, + 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 fu(bc)) + , t = this.hls.publicQueries$.pipe(Ra(([e,t])=>nn(this.rootPlaylistQueryListener(e, t), this.mediaElementQueryListener(t, e)))); + nn(e, t, this.activeItemListener(this.hls.itemQueue)).pipe(Un(e=>{ + var t = e.message; + return this.logger.error(`Got error in HlsPlayerEvents ${t}`, e), + Ti + } + ), $a(this.destroy$), $s(()=>{} + )).subscribe() + } + activeItemListener(e) { + return e.activeItemById$.pipe(Up(), Ra(e=>{ + e = e.url; + return this.hls.trigger(P.MANIFEST_LOADING, { + url: e + }), + Ti + } + )) + } + rootPlaylistQueryListener(t, e) { + var i = t.enabledMediaOptionByType$(ul.Variant).pipe(an(e=>!!e), Ra(e=>{ + var t; + return this.hls.trigger(P.LEVEL_SWITCHING, e), + null === (t = this.rtc) || void 0 === t || t.handleLevelSwitching(e.url), + Ti + } + )) + , r = t.enabledMediaOptionByType$(ul.Variant).pipe(Ra(i=>pg(i).mediaOptionDetailsEntity$.pipe(an(e=>!0 === (null == e ? void 0 : e.detailsLoading)), Ja(e=>{ + var t = { + url: oe(null == i ? void 0 : i.url), + level: i.mediaOptionId, + type: Cl[i.mediaOptionType] + }; + return this.hls.trigger(P.LEVEL_LOADING, t), + Ti + } + )))) + , n = t.enabledMediaOptionByType$(ul.Variant).pipe(Ra(e=>{ + const t = pg(e); + let i = 0; + return t.mediaOptionDetailsEntity$.pipe(Up(), an(e=>{ + var t = null !== e.stats && !1 === e.detailsLoading && e.lastUpdateMillis > i; + return i = null !== (e = e.lastUpdateMillis) && void 0 !== e ? e : 0, + t + } + )) + } + ), Ra(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 Ti + } + )) + , s = t.enableMediaOptionSwitchedForType$(ul.AltAudio).pipe(Ra(e=>{ + e = t.alternateMediaOptionById(ul.AltAudio, e.mediaOptionId); + return e && this.triggerAudioSwitch(e), + Ti + } + )) + , a = t.rootPlaylistEntity$.pipe(an(e=>null !== e.enabledMediaOptionKeys[ul.AltAudio].mediaOptionId), Cs(1), Ra(e=>{ + const t = e.enabledMediaOptionKeys[ul.AltAudio].mediaOptionId; + return t && (e = e.mediaOptionListTuple[ul.AltAudio].mediaOptions.find(e=>e.mediaOptionId === t), + this.triggerAudioSwitch(e)), + Ti + } + )); + return nn(i, s, $l(e.textTracksCreated$, e=>e).pipe(Ra(()=>t.enabledMediaOptionByType$(ul.Subtitle).pipe(Ra(e=>{ + e = t.alternateMediaOptionById(ul.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 + }), + Ti + } + )))), t.sessionData$.pipe(an(e=>null != e.complete), Cs(1), Ja(e=>{} + ), ur(e=>{ + this.hls.trigger(P.SESSION_DATA_COMPLETE, e) + } + )), t.getPreferredMediaOptionsByType$(ul.Variant).pipe(Oa(1), ur(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$(ul.AltAudio).pipe(ur(e=>{ + this.hls.trigger(P.AUDIO_TRACKS_UPDATED, { + audioTracks: e + }) + } + )), $l(e.textTracksCreated$, e=>e).pipe(Ra(()=>t.getPreferredMediaOptionsByType$(ul.Subtitle).pipe(Cs(1), ur(e=>{ + this.hls.trigger(P.SUBTITLE_TRACKS_UPDATED, { + subtitleTracks: e + }), + this.hls.trigger(P.SUBTITLE_TRACKS_CREATED) + } + )))), n, r, a) + } + mediaElementQueryListener(s, e) { + return nn(s.seekTo$.pipe(ur(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(xa(0), ca(), ur(e=>{ + var t = e[0] + , i = e[1]; + jp(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$(cl.AltAudio).pipe(an(e=>!!e), Es((e,t)=>e.totalBytes === t.totalBytes), ur(e=>{ + this.hls.trigger(P.BUFFER_APPENDED) + } + )), s.sourceBufferEntityByType$(cl.Variant).pipe(an(e=>!!e), Es((e,t)=>e.totalBytes === t.totalBytes), ur(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(Up(), So(s.combinedBuffer$), ur(([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) + } + )), Cr([Bi(e), Zd([s.timeupdate$, s.bufferedSegmentsByType$(cl.Variant)]).pipe(so(1e3), ur(([t,e])=>null == e ? void 0 : e.find(e=>e.startPTS <= t && e.endPTS > t)), an(e=>!!e), xa(null), ca())]).pipe(Ra(([e,[t,i]])=>{ + var r = null == i ? void 0 : i.frag + , t = null == t ? void 0 : t.frag; + if (r && !Fp(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[ul.Variant].mediaOptionFromId(r.mediaOptionId); + if (!s) + return this.logger.warn("variantInfo is undefined in fragChangeMonitor"), + Ti; + 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 Ti + } + )), s.isBufferedToEnd$(this.hls.config.maxBufferHole, !1).pipe(an(e=>!0 === e), Hi(Zi), ur(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 nn(e.unresolvedUriLoading$.pipe(ur(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[ul.Variant], + audioTracks: e.rootMediaOptionsTuple[ul.AltAudio], + subtitleTracks: e.rootMediaOptionsTuple[ul.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[ul.Variant].filteredMediaOptionList, + firstLevel: 0, + audio: !1, + video: !0, + altAudio: !1, + audioTracks: e.mediaOptionListQueries[ul.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 = oe(t.url), + t.levels = le(t.levels), + t.audioTracks = ue(t.audioTracks), + t.subtitleTracks = ue(t.subtitleTracks), + t + } + urlRedactedManifestParsed(e) { + const t = Object.assign({}, e); + return t.levels = le(t.levels), + t.audioTracks = ue(t.audioTracks), + t + } + } + (w = ym = ym || {}).LowBandwidth = "LowBandwidth", + w.HighBandwidth = "HighBandwidth", + w.PreferredListChanged = "PreferredListChanged", + w.IframeModeChange = "IframeModeChange", + w.None = ""; + const Tg = { + minValidBitrate: 2e6, + maxValidBitrate: 5e6, + maxPreferredBitrate: 3e6, + minValidHeight: 480, + maxValidHeight: 720 + }; + function Eg(e, a, o, d, l, u) { + return e.reduce((e,t)=>{ + if (t.iframes) + return e; + let i = e; + const r = (n = t.score, + s = a && o && d && l && !Ig(t, a, o, d, l, u) ? ll.INVALID : ll.VALID, + new Hp(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 Ig(e, t, i, r, n, s) { + var {targetDuration: a, targetStartupMs: o} = i + , d = r["avgPlaylistLoadTimeMs"] + , l = 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 + d + i + +(t + l + (r + n)) <= o + } + const wg = { + name: "abr" + }; + function Ag(e, t) { + return ne(e) ? Math.min(e, t) : t + } + function Og(e) { + return ne(null == e ? void 0 : e.avgBandwidth) + } + function kg(e, t) { + return e.getCurrentWaterLevelByType(cl.Variant, t) / (0 !== e.playbackRate ? Math.abs(e.playbackRate) : 1) + } + function Cg(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 = Mg(i[e], r); + if (t.altAudio && t.subtitle) { + n = e; + break + } + } + return n + } + function Dg(t, e, i, r, n, s, a) { + const o = i.preferredMediaOptions[ul.Variant].filter(e=>e.iframes === t); + if (!o.length) + return { + variantMediaOption: Ol.mediaOptionId, + holdOffDuration: 0, + lowestCandidate: null + }; + let d = 0; + const l = i.nextMinAutoOptionId; + if (l !== Ol.mediaOptionId) { + const t = o.findIndex(e=>e.mediaOptionId === l); + 0 <= t && (d = t) + } + if (d = Cg(d, o, t, i), + d < 0) + return { + variantMediaOption: Ol.mediaOptionId, + holdOffDuration: 0, + lowestCandidate: null + }; + let u = o.length - 1; + const c = i.nextMaxAutoOptionId; + if (c !== Ol.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 : kg(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 = Pg(o, g, d, u, f, t, s.getCombinedEstimate(), s.bandwidthStatus, p, h, e, i, r, n, a), + m.variantMediaOption === Ol.mediaOptionId && (m = Pg(o, g, d, u, f + Ag(g, e.maxStarvationDelay), t, s.getCombinedEstimate(), s.bandwidthStatus, p, h, e, i, r, n, a), + m.variantMediaOption === Ol.mediaOptionId && 0 <= d && (m.variantMediaOption = o[d].mediaOptionId, + m.alternates = t ? null : Mg(o[d], i))), + m + } + function Mg(e, t) { + var i = t.enabledMediaOptionKeys + , r = i[ul.AltAudio] + , r = kl(r) ? t.mediaOptionListQueries[ul.AltAudio].getMatchingAlternate(r.mediaOptionId, e) : Ol + , i = i[ul.Subtitle]; + return { + altAudio: r, + subtitle: kl(i) ? t.mediaOptionListQueries[ul.Subtitle].getMatchingAlternate(i.mediaOptionId, e) : Ol + } + } + function Pg(i, r, n, e, s, a, o, d, t, l, u, c, h, p, f) { + "bandwidth-history-controller" !== u.abrBandwidthEstimator && f.warn(`Unsupported configuration: ${u.abrBandwidthEstimator} for ABR bandwidth estimator`); + const m = d.bandwidthSampleCount + , g = c.abrStatus + , y = p.maxBufferSize + , v = u.minTargetDurations || 1 + , S = c.mediaOptionListQueries[ul.Variant].mediaOptionListInfo.hasScore; + if (!i.length) + return { + variantMediaOption: Ol.mediaOptionId, + holdOffDuration: -1, + lowestCandidate: null + }; + const b = c.enabledMediaOptionIdByType(ul.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 ? kg(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 = xg(o.avgBandwidth, l, t, m); + let M; + for (let t = e; t >= n; t--) { + const n = i[t]; + let e = n.mediaOptionId; + const l = n.score + , u = C && C[e] ? C[e].mediaOptionDetails : void 0 + , h = C && C[e] ? C[e].lastUpdateMillis : null + , p = u ? u.totalduration / u.fragments.length : r + , f = null != T && n.bitrate > T.bitrate + , B = null != T && n.bitrate < T.bitrate + , m = !(null != A && (f && n.frameRate < A || B && n.frameRate > A)) + , U = !(f && null != O && O > n.height) + , $ = !(B && (n.bitrate === T.bitrate - 1 || n.bitrate === T.bitrate + 1)) + , V = !(S && f && null != w && (l < w || l === w && T && n.bitrate >= T.bitrate)) + , K = n.iframes === a; + if (ne(p) && K && m && U && $ && V) { + var {adjustedbw: P, bitrate: x, fetchDuration: R, rejectLevelDueToPeakBW: L, canFitMultipleSegments: _, requireAlternates: N, alternates: F} = function(e, t, i, r, n, s, a, o, d, l, u, c) { + var h = n ? a.bwUp : a.bwDown + , n = e.bitrate + , a = t ? t.totalduration / t.fragments.length : o + , s = Rg(e, t, o, h, ne(s.avgPlaylistLoadTimeMs) ? s.avgPlaylistLoadTimeMs : s.avgLatencyMs, l) + , l = e.bandwidth + , i = n < h && h < l && i <= 2 * a + , d = r * ((l || n || 0) * ((null == t ? void 0 : t.targetduration) || a)) / 8 <= d; + let p = null; + u = !u; + return u && (p = Mg(e, c), + p.altAudio && p.subtitle || (p = null)), + { + adjustedbw: h, + bitrate: n, + fetchDuration: s, + rejectLevelDueToPeakBW: i, + canFitMultipleSegments: d, + requireAlternates: u, + alternates: p + } + }(n, u, k, v, f, o, D, r, y, h, a, c); + if (N && Boolean(F) && (M = e), + x < P && _ && !L && (!N || Boolean(F)) && (a || !R || R < s)) + return L = P, + N = g, + P = (P = d).instantBw, + (N.fragDownloadSlow || N.fragDownloadTooSlow || ne(P) && P < L) && E && I && k <= 2 * p && f && (e = b), + { + variantMediaOption: e, + holdOffDuration: R, + alternates: F, + lowestCandidate: M + } + } + } + return { + variantMediaOption: Ol.mediaOptionId, + holdOffDuration: -1, + lowestCandidate: M + } + } + function xg(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 Rg(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 && !_g(t.totalduration, n, s) || (a *= 2), + ne(n) && (!ne(s) || null != t && t.liveOrEvent) && (a += n / 1e3), + a + } + function Lg(t, e) { + let i = 1 / 0; + if (t === Ol.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 _g(e, t, i) { + return t = ne(t) ? t : 0, + !ne(i) || performance.now() - i + t > 1e3 * e + } + function Ng(e, t) { + return (null == e ? void 0 : e.fragDownloadSlow) === (null == t ? void 0 : t.fragDownloadSlow) && e.fragDownloadTooSlow === (null == t ? void 0 : t.fragDownloadTooSlow) + } + function Fg(e) { + return "loading" === (null == e ? void 0 : e.state) && ne(null === (e = e.bwSample) || void 0 === e ? void 0 : e.trequest) + } + const Bg = 2e3; + function Ug(e, t, i, r) { + let {fragDownloadSlow: n, fragDownloadTooSlow: s} = t; + var a = i.variantMediaOptionById(e.mediaOptionId).bitrate + , t = e.bwSample; + r = r.child(wg); + 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 >= Bg && 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 $g(e, t, i, r, n) { + var s; + const a = n.logger.child(wg) + , o = r.isIframeRate + , d = i.mediaOptionListQueries[ul.Variant].preferredMediaOptionList + , l = i.enabledMediaOptionKeys[ul.Variant]; + let u = e; + if (u !== ym.None || d.some(e=>e.mediaOptionId === l.mediaOptionId) || (u = ym.PreferredListChanged), + u !== ym.None && !(o && u !== ym.IframeModeChange && r.getBufferedSegmentsByType(cl.Variant).filter(e=>e.frag.iframe).length < t.minFramesBeforeSwitchingLevel)) { + const c = Uf(i.itemId) + , h = pg(l) + , p = [Ol, Ol, Ol] + , f = function(e, t, i, r, n, s, a) { + let o = t.nextMaxAutoOptionId; + if (o === Ol.mediaOptionId || Og(s.getBandwidthEstimate())) + return d = e, + l = t, + u = r, + e = n, + r = s, + s = a.child({ + name: "abr" + }), + a = e.isIframeRate, + l.enabledMediaOptionIdByType(ul.Variant), + Dg(a, d, l, u, e, r, s); + if (n.isIframeRate) + return { + variantMediaOption: o, + holdOffDuration: 0, + lowestCandidate: null + }; + { + const c = t.variantMediaOptionById(o) + , h = t.enabledAlternateMediaOptionByType(ul.Subtitle) + , n = t.enabledAlternateMediaOptionByType(ul.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[ul.Variant].mediaOptionId, + { + variantMediaOption: o, + holdOffDuration: 0, + alternates: { + altAudio: g[ul.AltAudio], + subtitle: g[ul.Subtitle] + }, + lowestCandidate: null + }) : { + variantMediaOption: t.enabledMediaOptionKeys[ul.Variant].mediaOptionId, + holdOffDuration: 0, + lowestCandidate: null + } + } + var d, l, u + }(t, i, n, h, r, c, a); + if (f.variantMediaOption !== l.mediaOptionId) { + p[ul.Variant] = { + itemId: i.itemId, + mediaOptionId: f.variantMediaOption + }; + for (const e of [ul.AltAudio, ul.Subtitle]) { + const t = i.enabledMediaOptionIdByType(e); + if (t !== Ol.mediaOptionId) { + const r = e === ul.AltAudio ? null === (s = f.alternates) || void 0 === s ? void 0 : s.altAudio : null === (s = f.alternates) || void 0 === s ? void 0 : s.subtitle; + p[e] = r || { + itemId: i.itemId, + mediaOptionId: t + } + } + } + return n.setEnabledMediaOptions(i.itemId, p), + 1 + } + } + } + const Vg = { + name: "iframes" + } + , Kg = new pd({},{ + name: "item-queue", + producerFn: vc, + idKey: "itemId", + resettable: !0 + }) + , Hg = new class extends Od { + } + (Kg); + class jg { + constructor() { + this.firstItem = !0, + this.playingEntity = null, + this.loadingEntity = null + } + static createItem(e, t, i, r, n) { + const s = new Date + , a = `${s.getHours()}:${s.getMinutes()}:${s.getSeconds()}`; + qe(); + var o = function(e) { + e = sl.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 (o) + i = o; + else { + const e = Ym(); + 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 Hg.selectActiveId().pipe(ur(e=>Hg.getActive())) + } + get removedItems$() { + return Hg.selectEntityAction(To.Remove).pipe(ur(e=>e)) + } + get activeItem() { + return Hg.getActive() + } + get queueItems$() { + return Hg.selectAll().pipe(ur(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) { + Hg.getCount(); + const a = jg.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), + Co(`queue.add.item: ${e}`), + sd(()=>{ + Kg.add(a), + Kg.setActive(a.itemId) + } + ) + } + updatePlayingItemId() { + this.playingEntity = this.loadingEntity, + this.loadingEntity = null, + this.clearAllButActive() + } + resetLoadingItem() { + this.removeQueueItem(this.loadingEntity.itemId), + this.loadingEntity = null, + sd(()=>{ + Kg.setActive(this.playingEntity.itemId) + } + ) + } + isPreloading() { + return null !== this.playingEntity && null !== this.loadingEntity + } + setQueueItem(t, i, r, n, s) { + Co("queue.set.item"), + this.loadingEntity = null, + sd(()=>{ + Kg.reset(); + var e = jg.createItem(t, i, r, n, s); + Kg.add(e), + Kg.setActive(e.itemId) + } + ), + this.playingEntity = this.activeItem + } + removeQueueItem(e) { + Kg.remove(e) + } + clearQueue() { + Kg.reset() + } + clearAllButActive() { + var e; + const t = null === (e = this.activeItem) || void 0 === e ? void 0 : e.itemId; + sd(()=>{ + Hg.getAll().forEach(e=>{ + e.itemId !== t && Kg.remove(e.itemId) + } + ) + } + ) + } + set earlyAudioSelection(t) { + Kg.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) { + Kg.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 qg(e, t, i, r, n, s) { + return $m(e, 0, Lm({ + errorAction: mm.RemoveAlternatePermanently, + errorActionFlags: 0 + }, !1, e.response.code, i, t, s, n), s, n, t, i).pipe(Un(e=>{ + throw !1 === e.fatal && r.resetMediaSource(), + e + } + )) + } + function Qg(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) + } + function Gg(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)) + } + } + function Wg(l, e, u, c, h, p) { + return e.child({ + name: "seek" + }), + e=>e.pipe(Ra((e,t)=>{ + var i, r, n, s, a, o, d = u.mediaQuery.seekTo$.pipe(Up()); + return i = 0 === t, + r = l, + n = h, + s = p, + (null == (t = e) ? Ti : t instanceof Date ? (a = t, + o = s, + n.enabledMediaOptionByType$(ul.Variant).pipe(Ra(e=>o.getQueryForOption(e).mediaOptionDetails$), ur(e=>Qg(e.dateMediaTimePairs, a)), Cs(1))) : function(n, e, s, a, t) { + let i = a.enabledMediaOptionByType$(ul.Variant).pipe(Ra(e=>t.getQueryForOption(e).mediaOptionDetails$), an(e=>ne(null == e ? void 0 : e.totalduration)), Cs(1), ur(e=>{ + var t = !e.liveOrEvent + , i = e.totalduration + , r = a.itemStartOffset; + return t ? ne(n) ? 0 <= n ? n : r + (i + n) : r + (ne(e.startTimeOffset) ? e.startTimeOffset : 0) : !ne(n) || n < 0 || 0 === n && s.liveEdgeForZeroStartPositon ? ig(0, e, s) : n + } + )); + return e && (i = i.pipe(Ja(e=>{} + ))), + i + }(t, i, r, n, s)).pipe($s(()=>{ + null != e && c.setPendingSeek(h.itemId, void 0) + } + ), $a(d)) + } + ), Ja(e=>{ + ne(e) && (u.seekTo = e) + } + )) + } + class zg { + 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) + } + 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; + t = this._avDetails[t]; + if ((null == t ? void 0 : t.mediaOptionId) !== (null == i ? void 0 : i.mediaOptionId) && i.liveOrEvent && !1 === i.ptsKnown) + if (null != (null == t ? void 0 : t.dateMediaTimePairs) && i.dateMediaTimePairs) { + const n = Gg(t.dateMediaTimePairs, e); + r = Qg(i.dateMediaTimePairs, n) + } else { + const e = 3 * i.targetduration + , n = i.fragments[0].start + i.totalduration; + r = Math.max(0, n - e) + } + return r + } + _updateAnchorByPosition(e, t) { + let i = NaN; + const r = t[cl.Variant]; + if (r) { + const t = r.fragments + , n = this._resolvePosition(e, cl.Variant, r); + if (i = Bl.ccForTime(t, n), + !ne(i)) { + const r = t[0] + , s = t[t.length - 1] + , a = r.start + , o = s.start + s.duration; + this.logger.warn(`${e.toFixed(3)} out of range [${a.toFixed(3)},${o.toFixed(3)}]`), + e <= a ? i = r.discoSeqNum : e >= o && (i = s.discoSeqNum) + } + } else + this.logger.warn("No variant details for anchoring"); + this._updateAnchor(i, t) + } + _updateAnchor(e, n) { + const s = e !== this._discoSeqNum; + s && (this._discoSeqNum = e), + Ml.forEach(e=>{ + const t = this._avDetails[e] + , i = n[e] + , r = (null == t ? void 0 : t.mediaOptionId) !== (null == i ? void 0 : i.mediaOptionId); + if (s || r) + this._updateAnchorForType(xl(e), i); + else if (i) { + const {mediaOptionId: n, ptsKnown: s, dateMediaTimePairs: t} = i; + this._avDetails[e] = { + mediaOptionId: n, + ptsKnown: s, + dateMediaTimePairs: t + } + } + } + ) + } + getNextFragments(e, i) { + const {position: r, bufferInfoTuple: t, switchContexts: n} = e + , s = t.map((e,t)=>Xg(r, i[t], n[t], null == e ? void 0 : e.buffered, this.lookUpTolerance)).reduce((e,t)=>Math.min(t, e), Number.POSITIVE_INFINITY); + return this._updateAnchorByPosition(s, i), + this._getNextFragmentsInternal(e, i) + } + _getNextFragmentsInternal(i, r) { + const n = [null, null]; + r.forEach((e,t)=>{ + n[t] = this._getNextFragmentForType(i, r, t) + } + ); + var e = n[cl.Variant] + , t = n[cl.AltAudio] + , s = null === (a = null == e ? void 0 : e.foundFrag) || void 0 === a ? void 0 : a.mediaFragment + , a = null === (a = null == t ? void 0 : t.foundFrag) || void 0 === a ? void 0 : a.mediaFragment; + if (s && a && (a.start > s.start + s.duration ? (this.logger.warn("Audio too far ahead"), + n[cl.AltAudio] = zg.noopResult) : s.start > a.start + a.duration && !this._mediaQuery.isIframeRate && (this.logger.warn("Video too far ahead"), + n[cl.Variant] = zg.noopResult)), + !isFinite(null == e ? void 0 : e.nextDisco) || null != t && !ne(t.nextDisco)) + return n; + { + const o = n[cl.Variant].nextDisco; + return this._updateAnchor(o, r), + this._getNextFragmentsInternal(i, r) + } + } + _getNextFragmentForType(e, t, i) { + var {position: r, bufferInfoTuple: n, switchContexts: s} = e + , a = t[i] + , o = null !== (l = null === (c = n[i]) || void 0 === c ? void 0 : c.buffered) && void 0 !== l ? l : { + start: r, + end: r, + len: 0 + } + , d = this._mediaQuery.getBufferedSegmentsByType(i) + , l = null !== (c = null === (e = s[i]) || void 0 === e ? void 0 : e.userInitiated) && void 0 !== c && c + , u = Xg(r, a, s[i], o, this.lookUpTolerance); + if (!a) + return null; + var {highWaterLevelSeconds: e, lowWaterLevelSeconds: c} = this._mediaQuery.bufferMonitorInfo + , r = o.len; + if (!l && e <= r) + return zg.noopResult; + var e = i === cl.Variant ? cl.AltAudio : cl.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 === cl.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 === cl.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[cl.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} = og(u, this._discoSeqNum, g, a, d)) + } + return h && this._rootQuery.getInitPTS(null == f ? void 0 : f.mediaFragment.discoSeqNum) ? zg.noopResult : { + foundFrag: f, + nextDisco: m, + newMediaRootTime: p + } + } + _updateAnchorForType(e, t) { + var i, r, n; + if (!t) + return this._anchorMSNs[e] = NaN, + void (this._avDetails[e] = null); + ne(this._discoSeqNum) ? (n = this._discoSeqNum, + n = null !== (r = null == (n = (r = t.fragments, + i = n, + r.find(e=>e.discoSeqNum === i))) ? void 0 : n.mediaSeqNum) && void 0 !== r ? r : t.startSN, + this._anchorMSNs[e] = n, + {mediaOptionId: r, ptsKnown: n, dateMediaTimePairs: t} = t, + this._avDetails[e] = { + mediaOptionId: r, + ptsKnown: n, + dateMediaTimePairs: t + }) : this.logger.warn("Trying to anchor with non-finite discoSeqNum") + } + } + function Xg(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 + } + zg.noopResult = { + foundFrag: null, + nextDisco: NaN + }; + const Yg = { + name: "avpipe" + }; + function Jg(r) { + const {config: o, rootPlaylistService: d, rootPlaylistQuery: l, mediaSink: e, gaplessInstance: t} = r + , u = e.mediaQuery + , i = Zd(Ml.map(e=>l.enabledMediaOptionSwitchForType$(e).pipe(Ja(e=>{} + )))).pipe(Ra(e=>{ + if (!kl({ + itemId: l.itemId, + mediaOptionId: e[ul.Variant].toId + })) + throw new V(!0,`No valid variant enabled id:${e[ul.Variant].toId}`,$.NoValidAlternates); + e = e.map(({fromId: e, toId: t},i)=>function(t, i, r, n, s) { + var e, a, o; + const {rootPlaylistQuery: d, rootPlaylistService: l, mediaSink: u, mediaParser: c, config: h, iframeMachine: p} = t + , f = u.mediaQuery; + if (!n || !s || n === s) + return Ul; + switch (r) { + case ul.Variant: + { + c.reset(ul.Variant); + const t = xl(r) + , l = d.variantMediaOptionById(n) + , g = d.variantMediaOptionById(s); + if (null == g || null == l) + return Ul; + let e = NaN; + if (l.iframes !== g.iframes || !g.iframes && p.isStarted) { + if (u.toggleTrickPlaybackMode(g.iframes), + !g.iframes && p.isStarted) { + const t = u.mediaQuery.autoPausedRestartTime + , i = t || p.iframeClockTimeSeconds; + u.autoPausedRestartTime = void 0, + e = i, + p.stop() + } + return u.pause(), + u.flushData(t, 0, 1 / 0, !0).pipe(Ja(()=>{ + isFinite(e) && (u.seekTo = e) + } + )) + } + if (!h.allowFastSwitchUp || g.iframes) + return Ul; + var m = pg(l).mediaOptionDetails; + if (null != m && null != g && l.bitrate < g.bitrate) { + const r = m.targetduration + , n = pg(g) + , s = n.mediaOptionDetails + , c = n.mediaOptionDetailsEntity.lastUpdateMillis + , p = f.getCurrentWaterLevelByType(t, h.maxBufferHole) + , y = function(e, t, i, r, n, s, a, o) { + if (n.nextMaxAutoOptionId !== Ol.mediaOptionId && !Og(s.getBandwidthEstimate())) + return Number.POSITIVE_INFINITY; + a = xg(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 && !_g(i.totalduration, s, o) ? Rg(t, i, r, a, s, o) : Number.POSITIVE_INFINITY + }(l, g, s, r, d.abrStatus, i, h, c) + h.maxStarvationDelay + , v = f.currentTime + y + , S = null === (o = null === (a = f.sourceBufferEntityByType(t)) || void 0 === a ? void 0 : a.bufferedSegments) || void 0 === o ? void 0 : o.find(e=>e.startPTS >= v); + let e; + if (S) { + const t = S.endPTS - S.startPTS; + e = S.startPTS + Math.min(Math.max(t - h.maxFragLookUpTolerance, .5 * t), .75 * t) + } + if (ne(e) && p >= y) + return u.flushData(t, e, 1 / 0) + } + } + break; + case ul.AltAudio: + e = d, + m = s, + o = "Nah" === (a = n) ? null : e.alternateMediaOptionById(ul.AltAudio, a), + o = Boolean(o && o.url), + m = "Nah" === a ? null : e.alternateMediaOptionById(ul.AltAudio, m), + m = Boolean(m && m.url), + o && !m && (l.setEnabledMediaOptionSwitchContextByType(d.itemId, ul.AltAudio, s, void 0), + u.resetMediaSource(f.currentTime)), + c.reset(ul.AltAudio) + } + return Ul + }(r, n, i, e, t)); + return Xr(Bi(!0), Jr(e).pipe(Js(!1))) + } + ), Ql.tag("mediaOptionSwitch.audiovideo.out")) + , n = Uf(l.itemId) + , s = r.logger.child(Yg) + , a = new zg(s,d,l,u,r.iframeMachine,o); + return Zd([l.anchorTime$.pipe(Ql.tag("anchorTime.audiovideo.in")), i]).pipe(Ra(([i,e])=>e ? Ti : u.needData$(o.maxBufferHole, t.inGaplessMode, t.isPreloading).pipe(ur(e=>{ + var t = [l.enabledMediaOptionSwitchContexts[ul.Variant], l.enabledMediaOptionSwitchContexts[ul.AltAudio]]; + return u.getSourceBufferInfoAction(e, i, t, o.maxBufferHole) + } + ), Ls(e=>{ + if (!e) + return Ti; + e = Bi(e).pipe(Zg(r, a), ty(r)); + return hn($l(function(e) { + const {mediaSink: t, rootPlaylistQuery: i, rootPlaylistService: r} = e + , n = t.mediaQuery + , s = e.logger.child(wg); + return nn((a = i, + o = s, + Zd([n.fellBelowLowWater$, a.getInFlightFragByType$(ul.Variant)]).pipe(Ra(e=>{ + var [,t] = e; + if (!Fg(t)) + return Ti; + const i = performance.now() - t.bwSample.trequest + , r = Bg - i + , n = 1e3 * t.duration - i + , s = [Ul]; + return 0 < r && s.push(vn(r)), + 0 < n && s.push(vn(n)), + nn(...s).pipe(Js(e)) + } + ), na((e,[t,i])=>{ + const r = Object.assign({}, e); + return t && (r.fragDownloadSlow = !0), + Ug(i, r, a, o) + } + , { + fragDownloadSlow: !1, + fragDownloadTooSlow: !1 + }), xa({ + fragDownloadSlow: !1, + fragDownloadTooSlow: !1 + }), Es(Ng))), function(r) { + const s = r.mediaSink.mediaQuery + , {rootPlaylistQuery: e, config: a} = r; + return s.desiredRate$.pipe(Ra(t=>0 === t ? Ti : Zd([e.getInFlightFragByType$(ul.Variant), e.mediaOptionListQueries[ul.Variant].preferredMediaOptionList$.pipe(ur(e=>e.filter(Dm.bind(null, jp(t)))))])), so(100), Ra(e=>{ + const [t,i] = e; + if (!Fg(t) || i.findIndex(e=>e.mediaOptionId === t.mediaOptionId) <= 0) + return Ti; + var r = performance.now() - t.bwSample.trequest + , n = Ag(t.duration, a.maxStarvationDelay) + , n = Math.min(1e3 * n, 500 * t.duration / s.playbackRate); + return vn(Math.max(0, n - r), 100).pipe(Js(e)) + } + )).pipe(na((e,[t,i])=>function(t, i, r, e) { + let {fragDownloadSlow: n, fragDownloadTooSlow: s} = t; + const {config: a, rootPlaylistService: o, rootPlaylistQuery: d, mediaSink: l, statsService: u, mediaLibraryService: c} = e + , h = e.logger.child(wg) + , p = l.mediaQuery; + if (p.paused) + return t; + e = i.bwSample; + if (!ne(e.tfirst)) + return t; + const f = performance.now() + , m = f - e.trequest + , g = Ag(i.duration, a.maxStarvationDelay) + , y = ul.Variant + , v = i.mediaOptionId + , S = d.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 = kg(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 _ = m / 1e3; + A = _ < g ? g - _ : g + } + var O = n; + ({fragDownloadSlow: n, fragDownloadTooSlow: s} = Ug(i, t, d, h)); + t = 2 * ((null === (t = b.mediaOptionDetails) || void 0 === t ? void 0 : t.targetduration) || i.duration); + if (!(w <= t && (I >= A || n))) + return Xm().getQuery().extendMaxTTFB && Xm().setExtendMaxTTFB(0), + { + fragDownloadSlow: n, + fragDownloadTooSlow: s + }; + O || h.warn(`likely to stall ${se({ + maxTimeToLoadSec: A, + minSwitchDuration: t, + stats: e, + elapsedMs: m, + remainingTimeSec: I, + instantBw: E, + bufferAheadSec: w, + fragDownloadSlow: n + })}`), + n = !0, + Xm().getQuery().extendMaxTTFB || Xm().setExtendMaxTTFB(6e5); + O = I >= A; + let k; + const C = i.itemId + , D = u.getQueryForItem(C) + , M = D.getCombinedEstimate() + , P = Object.assign(Object.assign({}, M), { + avgBandwidth: E + }) + , x = D.bandwidthStatus + , R = S.iframes + , L = Cg(0, r, R, d); + if (L < 0) + return { + fragDownloadSlow: n, + fragDownloadTooSlow: s + }; + t = Math.max(L, r.findIndex(e=>e && e.mediaOptionId === S.mediaOptionId)); + if (O) { + let e = Pg(r, i.duration, L, t, A, R, P, x, 1, 1, a, d, b, p, h); + const N = Ol.mediaOptionId; + k = e.variantMediaOption !== N || (e = Pg(r, i.duration, L, t, I, R, P, x, 1, 1, a, d, b, p, h)).variantMediaOption !== N ? e.variantMediaOption : e.lowestCandidate + } else { + const _ = Cg(0, r.slice(L, t).reverse(), R, d) + , i = t - 1 - _; + (0 <= _ || t === L) && (k = r[i].mediaOptionId) + } + if (null != k && k !== d.abrStatus.nextMaxAutoOptionId && o.setNextMaxAutoOptionId(C, k), + O) + 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 du({ + mediaOptionType: y, + mediaOptionId: v + },k,$.FragmentAbortError); + return { + fragDownloadSlow: n, + fragDownloadTooSlow: s + } + }(e, t, i, r), { + fragDownloadSlow: !1, + fragDownloadTooSlow: !1 + }), xa({ + fragDownloadSlow: !1, + fragDownloadTooSlow: !1 + }), Es(Ng)) + }(e)).pipe(xa({ + fragDownloadSlow: !1, + fragDownloadTooSlow: !1 + }), na((e,t)=>({ + fragDownloadSlow: e.fragDownloadSlow || t.fragDownloadSlow, + fragDownloadTooSlow: e.fragDownloadTooSlow || t.fragDownloadTooSlow + })), Es(Ng), ur(e=>(r.setFragLoadSlow(i.itemId, e), + !1)), Un(e=>{ + if (e instanceof du) { + const e = { + fragDownloadSlow: !0, + fragDownloadTooSlow: !0 + }; + return r.setFragLoadSlow(i.itemId, e), + Bi(!0) + } + return Ui(e) + } + )); + var a, o + }(r), e=>e), e).pipe(Cs(1), $s(()=>{ + Ml.forEach(e=>{ + d.updateInflightFrag(l.itemId, e, null, null, null) + } + ) + } + )) + } + ))), ur(()=>{ + if (!l.getEntity(l.itemId).manualMode) { + let e = ym.None; + var i, r, n, s; + i = bf(), + 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 = ym.PreferredListChanged); + let t = !1; + var a = l.enabledVariantMediaOption; + !function(e, t) { + const i = d.logger.child(wg) + , 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 + }(l, u) ? function(e, t) { + const i = Uf(t.itemId) + , r = i.getBandwidthEstimate() + , n = t.abrStatus; + if (Og(r)) { + var t = (null === (t = i.bandwidthStatus) || void 0 === t ? void 0 : t.bandwidthSampleCount) || 0 + , t = xg(r.avgBandwidth, e.abrBandWidthUpFactor, e.abrBandWidthFactor, t)["bwUp"]; + return t > n.highBWTrigger + } + }(o, l) && (e = ym.HighBandwidth, + d.setNextMinAutoOptionId(a.itemId, a.mediaOptionId)) : (e = ym.LowBandwidth, + l.nextMaxAutoOptionId === Ol.mediaOptionId && (d.setNextMaxAutoOptionId(a.itemId, a.mediaOptionId), + t = !0)), + $g(e, o, l, u, d), + t ? d.setNextMaxAutoOptionId(a.itemId, Ol.mediaOptionId) : e === ym.HighBandwidth && d.setNextMinAutoOptionId(a.itemId, Ol.mediaOptionId) + } + } + ), $s(()=>{} + )) + } + const Zg = (r,n)=>e=>{ + const {rootPlaylistQuery: t, mediaSink: a} = r + , i = r.logger.child(Yg); + return e.pipe(Hi(Zi), So(t.enabledMediaOptionKeys$), Ra(([s,e])=>bn(ey(s, ul.Variant, r, e).pipe(Ja(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 + } + } + )), ey(s, ul.AltAudio, r, e)).pipe(ur(e=>({ + action: s, + detailsAndContext: e + })))), Ra(({action: e, detailsAndContext: t})=>function t(i, r, n, s, l) { + var e; + const {mediaSink: u, iframeMachine: c, rootPlaylistQuery: a} = n + , o = [l[ul.Variant].detailsEntity.mediaOptionDetails, null === (e = null === (e = l[ul.AltAudio]) || void 0 === e ? void 0 : e.detailsEntity) || void 0 === e ? void 0 : e.mediaOptionDetails]; + let d = r.getNextFragments(s, o); + const h = d.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, + d = [null, null]), + d.every(e=>null == (null == e ? void 0 : e.foundFrag)) ? Bi(null) : bn(...d.map((e,d)=>e && null != e.foundFrag ? vg(n, d, e).pipe(Ja(e=>{ + const t = e[1] + , i = l[d].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 + }) + } + )) : Bi(null))).pipe(ur(e=>function(g, e, t, i) { + const {rootPlaylistService: r, rootPlaylistQuery: n, mediaSink: s, mediaLibraryService: a, config: y} = e + , v = s.mediaQuery + , o = n.itemId + , d = v.isIframeRate; + let l = n.getInitPTS(t); + if (null == l || !d && l.iframeMode !== d) { + const c = null !== (e = null === (e = i[ul.Variant]) || void 0 === e ? void 0 : e[1].startDtsTs) && void 0 !== e ? e : null; + if (null == c) + return g.warn("updatePTSInfo: Variant data missing."), + null; + const n = null !== (e = null === (e = i[ul.Variant]) || void 0 === e ? void 0 : e[1].timelineOffset) && void 0 !== e ? e : 0 + , s = B(n, c.timescale) + , a = { + baseTime: c.baseTime - s.baseTime, + timescale: c.timescale + }; + r.setInitPTS(o, t, c, n, a, d), + l = { + variantDTS: c, + timelineOffset: n, + offsetTimestamp: a, + iframeMode: d + } + } + i.forEach(e=>{ + e && !ne(e[1].iframeMediaDuration) && a.updatePTSDTS(o, e[1].mediaOptionId, l, e[1]) + } + ); + const S = [null, null]; + if (i[ul.Variant]) { + const [g,c] = i[ul.Variant]; + let e = l.offsetTimestamp; + if (d) { + const g = c.startDtsTs + , i = B(c.timelineOffset, g.timescale); + e = { + baseTime: g.baseTime - i.baseTime, + timescale: g.timescale + } + } + S[cl.Variant] = { + initSeg: g, + dataSeg: c, + offsetTimestamp: e + } + } + if (i[ul.AltAudio]) { + const [g,c] = i[ul.AltAudio]; + S[cl.AltAudio] = { + initSeg: g, + dataSeg: c, + offsetTimestamp: l.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: d, duration: l, iframe: u} = i + , c = e["offsetTimestamp"] + , h = b(o, c) + , p = b(d, c) + , f = pg(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 ? l : p - h, + itemId: r, + mediaOptionId: n, + mediaSeqNum: s, + discoSeqNum: a, + targetDuration: f.mediaOptionDetails.targetduration + } : (g.warn(`${Cl[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: l + } + }(i, n, r.discoSeqNum, e)), Ra(e=>{ + if (e) + return Bi(e); + { + const e = function(e, r) { + const n = e.enabledMediaOptionKeys + , s = [null, null] + , a = [null, null]; + return Ml.map(e=>{ + var t; + if (kl(n[e])) { + const i = pg(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 + }(a, l); + return t(i, r, n, s, e) + } + } + )) + }(i, n, r, e, t)), Ql.tag("mediaProducerEpic.emit")) + } + ; + function ey(e, i, t, r) { + const {rootPlaylistQuery: n, mediaLibraryService: s} = t + , a = r[i]; + if (t.logger.child({ + name: Cl[i] + }), + !a || "Nah" === a.mediaOptionId) + return Bi({ + detailsEntity: null, + switchContext: null + }); + const o = s.getQueryForOption(a); + return Cr([Bi(e), o.mediaOptionDetailsEntity$.pipe(Es((e,t)=>(null == e ? void 0 : e.lastUpdateMillis) === (null == t ? void 0 : t.lastUpdateMillis)))]).pipe(an(([,e])=>{ + if (i === ul.AltAudio && !n.altMediaOptionHasValidUrl(i, a.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 || !_g(null == t ? void 0 : t.totalduration, 0, e)) + } + ), Cs(1), So(n.enabledMediaOptionSwitchContextsByType$(i)), ur(([[,e],t])=>({ + detailsEntity: e, + switchContext: t + }))) + } + const ty = t=>e=>{ + const {rootPlaylistQuery: g, rootPlaylistService: y, mediaSink: v, legibleSystemAdapter: o, statsService: d, rtcService: l} = t; + return e.pipe(Ql.tag("mediaConsumerEpic.in"), Ra(e=>{ + if (!e) + return Bi(!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, d, l, u, c, h, p, f = null !== (f = m[t].targetDuration) && void 0 !== f ? f : 10; + return s = v, + a = e, + o = t, + d = i, + l = f, + u = r, + c = g, + h = y, + p = n, + e=>e.pipe(Ja(()=>{ + h.updateConsecutiveTimeouts(c.itemId, o, !1, "append") + } + ), ya(e=>e.pipe(Kr((e,t)=>{ + var i = e instanceof rf && e.isTimeout; + if (h.updateConsecutiveTimeouts(c.itemId, o, i, "append"), + i) + return function(e, t, i, r, n, s, a, o) { + let d = { + errorAction: mm.SendAlternateToPenaltyBox, + errorActionFlags: 0 + }; + var l = s.getCurrentWaterLevel(i.maxBufferHole) + , u = l < i.almostDryBufferSec; + let c = NaN; + s = i.appendErrorMaxRetry, + i = a.rootPlaylistEntity.errorsByType[r].timeouts.append; + u && s <= i || s <= t ? d.errorAction = mm.SendEndCallback : c = 1e3 * l; + s = { + retryDelayMs: c, + maxNumRetry: s, + maxRetryDelayMs: c + }; + return d = Lm(d, !1, e.response.code, n, r, a, o), + Um(e, t, s, d, a, o, r, n).pipe() + }(e, t, u, o, d, p, c, h); + if (e instanceof nf) + return function(e, t, i, r, n, s, a, o, d, l) { + var u = t.type + , u = o.getCurrentWaterLevelByType(u, n.maxBufferHole); + if (u >= n.almostDryBufferSec) { + const t = 1e3 * r + , n = { + errorAction: mm.RetryRequest, + errorActionFlags: 0 + }; + return 1e3 * u < t && (l.hasFallbackMediaOptionTuple(d, s, a, !1) ? n.errorAction = mm.SendAlternateToPenaltyBox : n.errorAction = mm.SendEndCallback), + Um(e, i, { + retryDelayMs: t, + maxNumRetry: 1 / 0, + maxRetryDelayMs: t + }, n, d, l, s, a) + } + return i < n.appendErrorMaxRetry ? t.remove(0, Number.POSITIVE_INFINITY) : (e.fatal = !0, + Ui(e)) + }(e, a, t, l, u, o, d, p, c, h); + if (e instanceof af) { + const {mediaOptionType: a, mediaOptionId: o} = e; + return qg(e, a, o, s, h, c) + } + throw e + } + )))) + } + , g.highestVideoCodec).pipe(ur(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) === ul.Variant); + t.length && (d.setBufferMetric(t[0]), + null == l || l.handleFragBuffered(t[0])); + e = r[cl.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, ul.AltAudio, r, void 0) + } + return !0 + } + ), (n = v, + s = y, + a = g, + e=>e.pipe(Un(e=>{ + if (e instanceof tf) { + var {mediaOptionType: t, mediaOptionId: i} = e; + return qg(e, t, i, n, s, a) + } + throw e + } + )))); + var n, s, a + } + )) + } + ; + function iy(e) { + const {logger: r, rootPlaylistService: n, rootPlaylistQuery: t} = e + , s = t.itemId; + return e=>e.pipe(ya(e=>e.pipe(Kr(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, + vn(0).pipe(ur(()=>{ + t.updateEnabledMediaOptions(i) + } + ))) : Ti; + var t, i + } + )))) + } + const ry = ()=>e=>e.pipe(Ql.tag("mediaFragmentPipelineEpic.in"), Ra(i=>{ + if (!i) + return Ti; + const {logger: e, config: t, platformService: r, rootPlaylistService: n, rootPlaylistQuery: s, keySystemAdapter: a, mediaSink: o, mediaParser: d, gaplessInstance: l, mediaLibraryService: u} = i + , c = s["itemId"] + , h = o["mediaQuery"] + , p = a.keyStatusChange$.pipe((f = i, + e=>e.pipe(Ra(e=>{ + const {decryptdata: t, status: i, error: r} = e + , n = f["rootPlaylistQuery"]; + if ("needs-renewal" === i) + return Sg(f, t, null); + if ("error" !== i || !(r instanceof uu || r instanceof lu) || r.handled) + return Ti; + { + const {rootPlaylistService: e, keySystemAdapter: t} = f; + return Hm(r, 0, null, e, n, t.ksQuery) + } + } + ), Ra(()=>Ti)))); + var f; + const m = r.getQuery() + , g = m.displaySupportsHdr$.pipe(Es(), Ra(e=>(n.setHDRPreference(c, e, !0), + Ti))) + , y = m.viewportInfo$.pipe(Es((e,t)=>e && t && e.width === t.width && e.height === t.height), Ja(e=>{ + t.useViewportSizeForLevelCap && n.setViewportInfo(c, e) + } + ), Ua(Ti)) + , v = Zd([s.hdrMode$.pipe(Es()), s.maxHdcpLevel$.pipe(Es())]).pipe(Ra(([])=>(l.inGaplessMode || 0 !== s.itemStartOffset || (o.resetMediaSource(), + d.reset()), + Ti))) + , S = nn(function(i) { + const {rootPlaylistQuery: t, mediaSink: r} = i + , e = t.enabledMediaOptions$.pipe(Up(), Ja(e=>{ + e = e[ul.AltAudio], + e = kl(e) && null != (null == e ? void 0 : e.url) ? 2 : 1; + r.setExpectedSbCount(e) + } + )) + , n = t.enabledMediaOptionByType$(ul.Variant).pipe(an(e=>kl(e)), Ra(e=>pg(e).mediaOptionDetails$), Cs(1), Ja(e=>{ + r.bufferMonitorTargetDuration = e.targetduration + } + )) + , s = Dl.map(e=>t.enabledMediaOptionByType$(e).pipe(Ql.tag("mediaOptionRetrieve.switch"), Ra(t=>{ + if (!t || !t.url || !kl(t)) + return Ti; + var e = r.mediaQuery.desiredRate$.pipe(ur(e=>0 !== e), Es()); + return fg(i, t).pipe(Ql.tag("mediaOptionRetrieve.first"), Ua(e), Ra(e=>e ? function e(t, i) { + const r = t.mediaLibraryService; + return function(e) { + if (!e) + return Ti; + var {mediaOptionDetails: t, lastUpdateMillis: i, unchangedCount: e} = e; + if (null == t || !t.liveOrEvent) + return Ti; + if (sg(t, i)) + return vn(0).pipe(Ja(()=>{} + )); + let r = ng(t); + return 0 < e && (r /= 2, + r = Math.max(r, 5e3)), + r -= performance.now() - i, + r += 0, + r = Math.max(1e3, Math.round(r)), + vn(r).pipe(Ja(()=>{} + )) + }(r.getQueryForOption(i).mediaOptionDetailsEntity).pipe(Ra(()=>fg(t, i, !0)), Ra(()=>e(t, i))) + }(i, t) : Ti)) + } + ))); + return nn(e, n, nn(...s)).pipe(Ua(Ti)) + }(i), Jg(i), function(t) { + const {rootPlaylistQuery: i, mediaSink: e} = t; + return $l(e.mediaQuery.mediaElementEntity$, e=>!!e).pipe(Ra(e=>i.anchorTime$.pipe(Up(), Ql.tag("anchorTime.subtitle.in"), (s=>e=>{ + const {rootPlaylistQuery: i, rootPlaylistService: t, legibleSystemAdapter: r} = s + , n = i.enabledAlternateMediaOptionByType(ul.Subtitle); + if (r.gotTracks) + r.selectedTrack = n; + else { + const s = i.preferredMediaOptions[ul.Subtitle]; + r.setTracks(s, n, i.getDisabledMediaOption(ul.Subtitle)) + } + return e.pipe(Ql.tag("subtitleEpic.select.in"), Ra(()=>(r.anchorTimeChanged(), + nn(r.nativeSubtitleTrackChange$.pipe(Ra(e=>(e.mediaOptionId !== r.selectedMediaOption.mediaOptionId && t.setEnabledMediaOptionByType(e.itemId, ul.Subtitle, e), + Ti))), i.enabledMediaOptionByType$(ul.Subtitle).pipe(ur(e=>{ + const t = kl(e) ? i.alternateMediaOptionById(ul.Subtitle, e.mediaOptionId) : e; + return r.selectedMediaOption = t, + t + } + )).pipe(Es((e,t)=>(null == e ? void 0 : e.mediaOptionId) === (null == t ? void 0 : t.mediaOptionId)))))), Ql.tag("subtitleEpic.select.emit")) + } + )(t), (s=>e=>{ + const {mediaSink: t, rootPlaylistQuery: i, legibleSystemAdapter: r, logger: n} = s; + return e.pipe(Ql.tag("subtitleEpic.process.in"), Ra(e=>{ + if (!e || !e.url || !kl(e)) + return Bi([null, null, null]); + return Zd([pg(e).mediaOptionDetails$, i.discoSeqNum$.pipe(an(e=>ne(e)))]).pipe(Ra(([e,t])=>((i,r,e)=>{ + const {legibleSystemAdapter: n, rootPlaylistQuery: t} = i; + return t.initPTS$(e).pipe(Ra(t=>t ? n.findFrags$(r, e).pipe(Ra(e=>r && (null == e ? void 0 : e.foundFrags) ? ny(i, t.offsetTimestamp, e, r) : Ul)) : sn)) + } + )(s, e, t))) + } + ), Ql.tag("subtitleEpic.process.emit")) + } + )(t)))) + }(i), p).pipe(Js(void 0), iy(i)) + , b = h.seekTo$.pipe(ur(e=>null == e ? void 0 : e.pos), an(e=>ne(e)), Es((e,t)=>Math.abs(e - t) < Number.EPSILON), Ra(e=>(n.setAnchorTime(c, e), + Ti))) + , T = h.gotPlaying$.pipe(an(e=>e), Ja(e=>{ + s.mediaOptionListQueries[ul.Variant].filteredMediaOptionList.forEach(e=>{} + ) + } + ), Cs(1), Ua(Ti)); + return nn(s.pendingSeek$.pipe(Wg(t, e, o, n, s, u)), function() { + const {config: s, mediaSink: a, rootPlaylistQuery: e, mediaLibraryService: t} = i + , o = i.logger.child({ + name: "live" + }) + , d = a.mediaQuery; + return e.enabledMediaOptionByType$(ul.Variant).pipe(an(kl), Ra(e=>t.getQueryForOption(e).mediaOptionDetailsEntity$.pipe(an(e=>{ + var t; + return (null === (t = null == e ? void 0 : e.mediaOptionDetails) || void 0 === t ? void 0 : t.ptsKnown) && e.mediaOptionDetails.liveOrEvent + } + ), Es((e,t)=>(null == e ? void 0 : e.lastUpdateMillis) === (null == t ? void 0 : t.lastUpdateMillis)))), ur(e=>{ + var t = e.mediaOptionDetails + , i = d.currentTime + , r = d.msDuration; + let n = NaN; + return i < rg(i, t, e.lastUpdateMillis, s.maxBufferHole, d) && (n = ig(t.fragments[0].start, t, s), + n >= r && (o.warn(`seekTo position > duration, updating ${a.msDuration}->${e.playlistDuration}`), + a.msDuration = e.playlistDuration), + a.seekTo = n), + n + } + )) + }(), b, S, g, y, v, function() { + const e = i.mediaSink.mediaQuery; + return Cr([Bi(i), e.desiredRate$.pipe(ca())]).pipe(Ra(([e,[t,i]])=>{ + const {rootPlaylistQuery: s, rootPlaylistService: r, config: a, mediaSink: n, mediaLibraryService: o, statsService: d} = e + , l = n.mediaQuery; + if (jp(t) !== jp(i)) + $g(ym.IframeModeChange, a, s, l, r); + else if (0 === t && 1 === i && !Ml.every(e=>{ + const t = s.enabledMediaOptionKeys[e] + , i = o.getQueryForOption(t) + , r = d.getQueryForItem(s.itemId) + , n = i.mediaOptionDetailsEntity; + return !(null !== (e = null == n ? void 0 : n.mediaOptionDetails) && void 0 !== e && e.ptsKnown) || l.canContinuePlaybackWithoutGap(n.mediaOptionDetails, n.lastUpdateMillis, r.getPlaylistEstimate(), a.maxBufferHole) + } + )) + return n.pause(), + n.flushAll(0, 1 / 0, !0); + return Ti + } + ), Ua(Ti)) + }(), function(e) { + const s = e.rootPlaylistQuery + , t = e.mediaSink.mediaQuery + , i = s.enabledMediaOptionByType$(ul.Variant); + return Cr([Bi(e), t.desiredRate$.pipe(ca()), i]).pipe(Es((e,t)=>e[1] === t[1]), Ra(([e,[t,i],r])=>{ + t = jp(t), + i = jp(i); + if (t === i) + return Ti; + const n = e["rootPlaylistService"]; + return i ? e.rootPlaylistQuery.nextMaxAutoOptionId === Ol.mediaOptionId && n.setNextMaxAutoOptionId(e.rootPlaylistQuery.itemId, r.mediaOptionId) : n.setNextMaxAutoOptionId(s.itemId, Ol.mediaOptionId), + Ti + } + )) + }(i), T).pipe(Ql.tag("mediaFragmentPiplineEpic.emit"), Js(void 0)) + } + )) + , ny = (i,r,t,n)=>{ + const s = i.legibleSystemAdapter; + return Lr(t.foundFrags).pipe(ur(e=>{ + return ((e,t,i)=>{ + const {rootPlaylistQuery: r, legibleSystemAdapter: n} = e; + return Yr(()=>((t,i)=>yg(e, i, !1, !1).pipe(ur(e=>({ + initPTS: t, + data: e, + mediaFragment: i + })), Ql.tag("retrieveSubtitleFragmentCacheEntity.emit")))(t, i).pipe(ur(({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(ul.Subtitle), i, e, t, n) + })))) + } + )(i, r, e).pipe((t = e=>s.checkReadyToLoadNextSubtitleFragment$().pipe(an(e=>e)), + function(e) { + return e.lift(new ms(t)) + } + )); + var t + } + ), Wr(i.config.vttConcurrentLoadCount), Ja(e=>{ + s.reviewParsedFrag(e, t, n) !== Ap.CloseEnough && i.legibleSystemAdapter.tryAgain$.next(!0) + } + )) + } + , sy = (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 ay { + 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(Ra(({demuxer: e, contiguous: t, trackSwitch: i, discontinuity: r, accurateTimeOffset: n})=>{ + const s = h["frag"] + , {keyTagInfo: a, start: o, mediaOptionType: d} = s; + if (this.lastInitFrags[d] = s, + h.initSegment) { + const e = We.remuxInitSegment(new Uint8Array(h.initSegment), this.logger, a) + , t = Je.parseInitSegment(e) + , {mimeType: i, type: r, codec: n, container: s} = sy(t); + return Bi({ + moovData: t, + mimeType: i, + track: { + type: r, + codec: n, + initSegment: e, + container: s + } + }) + } + const l = h.segment || h.initSegment + , u = l ? h.initSegment : void 0 + , c = wc(e.observer); + return Bi(c.event(v.FRAG_PARSING_INIT_SEGMENT).pipe(ur(this.handleInitSegmentData)), c.event(x.INTERNAL_ERROR).pipe(Ra(this.handleError)), e.pushWithoutTransfer(l, a, u, o, r, i, t, h.totalDuration, n, void 0, h.iframeMediaStart, h.iframeDuration).pipe(Ua(Ti))).pipe(Wr(), Cs(1)) + } + )) + } + parseSegment(y, e) { + return this.getDemuxerInfo(y, this.lastFrags, e, this.demuxClient).pipe(Ra(({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 = wc(e.observer); + return Bi(o.event(v.FRAG_PARSING_INIT_SEGMENT).pipe(Ra(e=>{ + var t; + return e.track.initSegment.byteLength !== (null === (t = y.initSegment) || void 0 === t ? void 0 : t.byteLength) && (g = this.handleInitSegmentData(e)), + Ti + } + )), o.event(v.FRAG_PARSING_DATA).pipe(ur(e=>{ + var {startPTS: t, startDTS: i, firstKeyframePts: r, framesWithoutIDR: n, dropped: s, data1: a, data2: o, captionData: d, id3Samples: l} = e; + let {endPTS: u, endDTS: c} = e; + return null == u && (this.logger.warn(`${Cl[m]} ${Bp(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(`${Cl[m]} ${Bp(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=${Bp(e)} parsed=${JSON.stringify({ + startPTS: a, + endPTS: r, + startDTS: i, + endDTS: t + })} ${se({ + 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: d, + id3Samples: l, + parsedInitSegment: g + } + } + )), o.event(x.INTERNAL_ERROR).pipe(Ra(this.handleError)), e.push(y.segment, s, y.initSegment, a, r, i, t, y.totalDuration, n, p, y.iframeMediaStart, y.iframeDuration).pipe(Ua(Ti))).pipe(Wr(), Cs(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: d, mediaSeqNum: l, mediaOptionType: u} = n; + return Yr(()=>{ + var e = this.demuxers[u]; + return e ? Bi(e) : i.init(this.typeSupported, this.config, t).pipe(Ja(e=>this.demuxers[u] = e)) + } + ).pipe(ur(e=>{ + var t = r[u] + , i = this.willBeTrackSwitch(n, r); + return { + demuxer: e, + trackSwitch: i, + discontinuity: !(t && d === t.discoSeqNum), + contiguous: !!t && !i && t.mediaSeqNum + 1 === l, + accurateTimeOffset: !a && (s || !o) + } + } + )) + } + handleInitSegmentData(e) { + var t = e["track"] + , i = t["initSegment"] + , r = Je.parseInitSegment(i) + , {mimeType: n, type: s, codec: a, container: e} = sy(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 Ui(e) + } + } + function oy(e) { + return Math.min(e.targetduration, 15) + } + function dy(e, t, i, r) { + if (200 === t && r && 10 < r.length) { + if (Sm.isValidPlaylist(r)) + return !0; + { + const t = new R(o,_,!0,"response doesnt have #EXTM3U tag",$.PlaylistErrorMissingEXTM3U); + throw t.url = e, + t + } + } + return !1 + } + const ly = { + name: "pltfrm" + }; + function uy(e, t) { + t = Ih.getKeySystemSecurityLevel(t); + return null != e && void 0 !== t[e] + } + function cy(e) { + return e.every(e=>e.iframes) + } + function hy(e, t) { + return !ne(e) || !ne(t) || e <= t + } + function py() { + 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 fy(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 gy(e, i, s) { + const a = new Map + , r = new Array; + return e.forEach(t=>{ + var e = Array(); + !function(e, t, i) { + var r = qc.getCapabilities(t.videoCodecList, t.audioCodecList) + , t = JSON.stringify(r); + let n; + a.has(t) ? n = a.get(t) : (n = Ih.requestKeySystemAccess(e, r, void 0, s).pipe(ur(()=>!0), Un(e=>(s.warn(`Request key system error: ${e.message}`), + Bi(!1))), Aa({ + bufferSize: 1, + refCount: !0 + })), + a.set(t, n)), + i.push(n) + }(i, t, e); + e = Jr(e).pipe(ur(e=>{ + if (void 0 === e.find(e=>!1 === e)) + return t + } + )); + r.push(e) + } + ), + Jr(r).pipe(ur(e=>e.filter(e=>Boolean(e)))) + } + function yy(e, r) { + const o = new Set + , d = new Set + , l = !MediaSource.isTypeSupported('audio/mp4; codecs="mp4a.40.2"; channels="-1"') + , u = l && !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 = tm.getRichestChannelLayoutForGroupId(e.audioGroupId, r), + 0 < e.audioCodecList.length && i && (t = ((e,t)=>{ + var i, r, n, s = Se.isDolbyAtmos(e, t); + if (u || l && !s) { + n = `${i = e}/${r = t}`, + o.has(n) || d.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 : d).add(n); + const a = `${e}/${t}`; + return d.has(a) + } + return !!s + } + )(tm.getRichestAudioCodec(e.audioCodecList), i))), + !t + } + ); + return my(0, e, t), + t + } + function vy(e, t, d) { + const n = 0 < (null == t ? void 0 : t.length) + , i = e.filter(o=>{ + var e = function() { + if (!d) + return { + highestPlayableAverageBitRate: void 0, + highestPlayablePeakBitRate: void 0, + highestPlayableWidth: void 0, + highestPlayableHeight: void 0, + highestPlayableFrameRate: void 0 + }; + const e = o.videoCodec + , t = o.videoRange + , i = d.videoDynamicRangeFormats + , r = d.videoCodecs + , n = Se.getDynamicRangeType(t, e) + , s = Se.getCompressionType(e) + , a = function(e, t, i, r) { + if (!r && !i) + return {}; + var n, s, t = i ? fy(i, t) : {}, r = r ? fy(r, e) : {}; + let a, o; + return o = e === pe.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 !== fe.VP09 && (a.highestPlayablePeakBitRateForClearContent = void 0), + a + }() + , t = e["highestPlayablePeakBitRateForClearContent"] + , i = o.allowedCPCMap || n + , r = hy(o.bandwidth, e.highestPlayablePeakBitRate); + return (i || !t ? r : r || hy(o.bandwidth, t)) && hy(o.avgBandwidth, e.highestPlayableAverageBitRate) && hy(o.width, e.highestPlayableWidth) && hy(o.height, e.highestPlayableHeight) && hy(o.frameRate, e.highestPlayableFrameRate) + } + ); + return my(0, e, i), + i + } + function Sy(e, a, o, d, l, u) { + var r = (null == d ? void 0 : d.maxHdcpLevel) || void 0; + let c = [...e]; + (0 < l.disableVideoCodecList.size || 0 < l.disableAudioCodecList.size) && (c = function(e, t, i) { + let r = e.filter(e=>!e.videoCodec || e.videoCodecList.every(e=>{ + e = $p(e); + return !t.has(e) + } + )); + return r = r.filter(e=>!(!e.iframes && e.audioCodec) || e.audioCodecList.every(e=>{ + e = Kp(e); + return !i.has(e) + } + )), + my(0, e, r), + r + }(c, l.disableVideoCodecList, l.disableAudioCodecList)), + r && Xf(r) && (c = function(e) { + const t = Yf(r) + , i = e.filter(e=>{ + e = e.hdcpLevel; + return !e || Yf(e) <= t + } + ); + return my(0, e, i), + i + }(c)); + var t = null == d ? void 0 : d.maxSecurityLevel + , e = null == l ? void 0 : l.keySystemPreference; + t && e && uy(t, e) && (c = function(e, t, i) { + function r(e) { + return uy(e, i) ? n[e] : -1 + } + const n = Ih.getKeySystemSecurityLevel(i) + , s = Ih.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 == l || !l.useMediaKeySystemAccessFilter) && e && navigator && "function" == typeof navigator.requestMediaKeySystemAccess; + return (h ? gy(c, e, u) : Bi(c)).pipe(Ra(e=>{ + if (0 === e.length || cy(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 == l || !l.useMediaCapabilities) && t && "function" == typeof t.decodingInfo; + let i; + return i = n ? function(e, n, s) { + const a = [] + , o = py() + , d = function(o) { + const d = new Map + , l = 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": + Se.isDolby(e) ? (t.hdrMetadataType = vm.DoVi, + t.colorGamut = "rec2020") : (Se.isHEVC(e) || Se.isVP09(e)) && (t.hdrMetadataType = vm.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 = tm.getRichestChannelLayoutForGroupId(t.audioGroupId, i); + return n && (r.channels = Se.getChannelCount(n).toString(), + r.spatialRendering = Se.isDolbyAtmos(e, n)), + r + }(t, i, e); + e = JSON.stringify(s); + let a; + return d.has(e) ? a = d.get(e) : (a = Lr(l.decodingInfo(s)).pipe(ur(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(ly, `Unsupported config ${e.supported}/${e.powerEfficient}/${i} ${JSON.stringify(s)} supportedConfig=${JSON.stringify(t)}`), + r + } + )), + d.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 = d(t, n, e, !0, i) + } + ), + 0 < (null === (e = t.audioCodecList) || void 0 === e ? void 0 : e.length)) { + const s = tm.getRichestAudioCodec(t.audioCodecList); + i = d(t, n, s, !1, i) + } + let r = Bi(t); + 0 < i.length && (r = Jr(i).pipe(ur(e=>null == e.find(e=>!1 === e) ? t : null), Un(e=>(s.warn(ly, `decodingInfo errror: ${e.message}`), + Bi(o(t) ? t : null))))), + a.push(r) + } + ), + Jr(a).pipe(ur(e=>e.filter(e=>Boolean(e)))) + }(e, a, u) : Bi(e = yy((r = e, + s = py(), + s = r.filter(s), + my(0, r, s), + e = s), a)), + i.pipe(ur(e=>{ + if (0 === e.length || cy(e)) + throw new R(L,f,void 0,"no media option with compatible codecs found in manifest",void 0); + if (0 === (t = e = vy(e, o, d), + r = t.filter(e=>!e.iframes || !e.width || !e.height || e.width * e.height <= 2488320), + my(0, t, r), + (e = r).length) || cy(e)) + throw new R(L,f,void 0,"no media option with compatible codecs found in manifest",void 0); + var t; + let i = (null == d ? void 0 : d.videoDynamicRangeFormats) || []; + n && 0 === i.length && (i = [{ + type: pe.SDR + }, { + type: pe.HDR + }, { + type: pe.HDR10 + }, { + type: pe.DolbyVision + }, { + type: pe.HLG + }]); + var {hdrMediaOptions: r, sdrMediaOptions: e} = function(e, t) { + const i = t.reduce((e,t)=>{ + switch (t.type) { + case pe.DolbyVision: + e.doViSupported = !0; + break; + case pe.HDR10: + e.hdr10Supported = !0; + break; + case pe.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 (Se.getDynamicRangeType(t.videoRange, null !== (i = t.videoCodec) && void 0 !== i ? i : "")) { + case pe.HDR: + case pe.HDR10: + n && e.hdrMediaOptions.push(t); + break; + case pe.DolbyVision: + r && e.hdrMediaOptions.push(t); + break; + case pe.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 || cy(r) && cy(e)) + throw new R(L,"manifestIncompatibleVideoRangeError",void 0,"mediaOption with compatible VIDEO-RANGE not found in manifest",void 0); + return { + hdrMediaOptions: r, + sdrMediaOptions: e + } + } + ), Un(e=>{ + throw e instanceof R && (e.fatal = !0, + e.response = $.IncompatibleAsset), + e + } + )); + var r, s + } + )) + } + function by(e, t) { + return t.mediaOptionId !== e.mediaOptionId && t.persistentID === e.persistentID && t.groupId !== e.groupId + } + (w = vm = vm || {}).HDR10 = "smpteSt2086", + w.DoVi = "smpteSt2094-10", + w.HDR10Plus = "smpteSt2094-40"; + class Ty extends km { + constructor(e, t, i) { + super(e, t, i) + } + static makeFilters() { + return Om() + } + _initFilters() { + return Ty.kAllowFilters + } + get _mediaOptionType() { + return this.mediaOptionType + } + get preferredHost() { + return null + } + get preferredHost$() { + return Bi(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(Up()) + } + 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 = gl(s.url); + if (i) + return null !== (i = a.find(e=>by(s, e) && !yl(o, e.url))) && void 0 !== i ? i : null; + let d = null; + for (const t of a) + !by(s, t) || d && !yl(o, t.url) || (d = t); + return d + } + 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 === pl.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 === pl.CLOSEDCAPTION) { + let e = this.mediaOptionList; + r && (e = this.preferredMediaOptionList), + n = Ty.pairForcedSubtitleMediaOptionWithClosedCaptionInList(t, i, e) + } + return n + } + static pairForcedSubtitleMediaOptionWithClosedCaptionInList(t, i, e) { + return e.find(function(e) { + return e.mediaType === pl.SUBTITLE && e.lang === i.lang && e.forced && e.autoselect && (!t || e.groupId === t) + }) + } + } + Ty.kAllowFilters = Ty.makeFilters(); + class Ey extends Od { + constructor(e, t) { + super(e), + this.itemId = t, + this.mediaOptionListQueries = [new xm(e,this.itemId), new Ty(e,this.itemId,ul.AltAudio), new Ty(e,this.itemId,ul.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(an(e=>Boolean(e)), ur(e=>e)) + } + get rootPlaylistEntityAdded$() { + return this.selectEntityAction(To.Add).pipe(ur(e=>e.map(e=>this.getEntity(e)))) + } + get rootMediaOptionsTuple$() { + return Zd([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(Up()) + } + get anchorTime$() { + return this.selectEntity(this.itemId, "anchorTime").pipe(Ra(e=>ne(e) ? e !== this.anchorTime ? (qe().warn(`anchorTime doesn't match stored value! ${e} !== ${this.anchorTime}`), + Ti) : Bi(e) : Ti)) + } + get pendingSeek$() { + return this.selectEntity(this.itemId, ({pendingSeek: e})=>e).pipe(Es((e,t)=>e === t || "number" == typeof e && "number" == typeof t && isNaN(e) && isNaN(t))) + } + get enabledMediaOptionKeys$() { + return this.selectEntity(this.itemId, "enabledMediaOptionKeys").pipe(an(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 : [Ol, Ol, Ol] + } + 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(ur(e=>null == e ? void 0 : e[t])) + } + get enabledMediaOptions$() { + return Zd([this.enabledMediaOptionByType$(ul.Variant), this.enabledMediaOptionByType$(ul.AltAudio), this.enabledMediaOptionByType$(ul.Subtitle)]) + } + get enabledAVOptions$() { + return Zd([this.enabledMediaOptionByType$(ul.Variant), this.enabledMediaOptionByType$(ul.AltAudio)]) + } + rawEnabledMediaOptionByType$(t) { + return this.enabledMediaOptionKeys$.pipe(ur(e=>{ + const i = e[t]; + return kl(i) && this.rootMediaOptionsTuple[t].find(e=>{ + return t = i, + e.itemId === t.itemId && e.mediaOptionId === t.mediaOptionId; + var t + } + ) || Ol + } + )) + } + enabledMediaOptionByType$(e) { + return this.rawEnabledMediaOptionByType$(e).pipe(Es((e,t)=>e.mediaOptionId === t.mediaOptionId && e.url === t.url)) + } + enabledMediaOptionSwitchForType$(e) { + return this.rawEnabledMediaOptionByType$(e).pipe(So(this.enabledMediaOptionSwitchContextsByType$(e)), xa(null), ca(), ur(([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] + })), Es((e,t)=>e.fromId === t.fromId && e.toId === t.toId)) + } + enableMediaOptionSwitchedForType$(t) { + return this.enabledMediaOptionByType$(t).pipe(Ra(e=>$l(Cr([Bi(e), this.enabledMediaOptionSwitchContextsByType$(t).pipe(ca())]), ([,e])=>e[0] && !e[1])), ur(([e])=>e)) + } + enabledMediaOptionIdByType(e) { + return this.getEntity(this.itemId).enabledMediaOptionKeys[e].mediaOptionId + } + variantMediaOptionById(e) { + return this.mediaOptionListQueries[ul.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(ul.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 Zd([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=>kl(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[ul.Variant].hdrMode$ + } + get maxHdcpLevel$() { + return this.mediaOptionListQueries[ul.Variant].maxHdcpLevel$ + } + get currentPathwayID() { + return this.mediaOptionListQueries[ul.Variant].currentPathwayID + } + get preferredHost() { + return this.mediaOptionListQueries[ul.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[ul.AltAudio].getMatchingAlternateWithPersistentId(t, e, r) : void 0, + r = ne(i) ? this.mediaOptionListQueries[ul.Subtitle].getMatchingAlternateWithPersistentId(i, e, r) : void 0; + return [t || Ol, r || Ol] + } + 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 [ul.Variant, ul.AltAudio, ul.Subtitle].reduce((e,t)=>e && r[t] === kl(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[ul.Variant].mediaOptionListInfo.preferHDR + } + } + const Iy = { + name: "rps" + }; + class wy { + constructor(e, t) { + this.store = e, + this.logger = t + } + getQuery() { + return new Od(this.store) + } + getQueryForId(e) { + return new Ey(this.store,e) + } + set rootPlaylistEntity(e) { + Co("root.add.rootPlaylist"), + this.store.add(e) + } + removeItems(e) { + Co(`root.add.remove ${JSON.stringify(e)}`), + this.store.remove(e) + } + removeAll() { + Co("root.add.clear"), + this.store.remove() + } + setRootPlaylistEntity(e, t) { + Co("root.set.rootPlaylistEntity"), + this.store.update(e, e=>t) + } + setSessionData(e, t) { + Co("root.set.sessionData"), + this.store.update(e, e=>{ + e.sessionData = t + } + ) + } + setAnchorTime(e, t) { + Co(`root.set.anchorTime: ${t}`), + this.store.update(e, e=>{ + e.anchorTime = t + } + ) + } + setDiscoSeqNum(e, t) { + Co(`root.set.discoSeqNum: ${t}`), + this.store.update(e, e=>{ + e.discoSeqNum = t + } + ) + } + setPendingSeek(e, t) { + Co("root.set.pendingSeek"), + this.store.update(e, e=>{ + e.pendingSeek = t + } + ), + void 0 === t && Xm().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 + Co(`root.set.mediaOptionSwitchContextByType ${r} doesn't match existing mediaOption ${e.enabledMediaOptionKeys[i].mediaOptionId}`) + } + ) + } + 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 : [Ol, Ol, Ol]; + 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) === pl.CLOSEDCAPTION) { + t = r.variantMediaOptionById(t), + r = r.mediaOptionListQueries[ul.Subtitle].packageAlternateMediaOption(t, i, !0); + if (r.url !== i.url) { + const n = My(t, r, e.mediaOptionListTuple[ul.Subtitle].mediaOptions, qe()); + e.mediaOptionListTuple[ul.Subtitle].mediaOptions = n + } + } + } + _updateEnabledMediaOptionKeys(t, i) { + var e, r; + const n = null !== (e = t.enabledMediaOptionKeys) && void 0 !== e ? e : [Ol, Ol, Ol]; + 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 === ul.Variant) { + const i = this.getQueryForId(a.itemId).mediaOptionListQueries[e].mediaOptionList; + o ? t.abrStatus = (r = a.mediaOptionId, + o = i, + o = Lg(r, o), + { + fragDownloadSlow: !1, + fragDownloadTooSlow: !1, + nextMinAutoOptionId: Ol.mediaOptionId, + nextMaxAutoOptionId: Ol.mediaOptionId, + highBWTrigger: o + }) : t.abrStatus.highBWTrigger = Lg(a.mediaOptionId, i), + s = a + } else if (e === ul.Subtitle && kl(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) { + Co(`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) { + Co("root.set.updateEnabledMediaOptions"), + this.store.update(e, e=>{ + e.nextMediaOptionKeys && !0 !== e.manualMode && (Co(`root.set.updateEnabledMediaOptions ${JSON.stringify(e.nextMediaOptionKeys)}`), + this._updateEnabledMediaOptionKeys(e, [...e.nextMediaOptionKeys])), + e.nextMediaOptionKeys = void 0 + } + ) + } + setLastLoadedMediaOptionByType(r, n, s) { + Co(`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 : [Ol, Ol, Ol]; + i[n] = { + itemId: r, + mediaOptionId: s.mediaOptionId + }, + e.lastLoadedMediaOptionKeys = i + } + ) + } + setPreferredHost(e, t) { + Co(`root.set.preferredHost: ${t}`), + this.store.update(e, e=>{ + e && (e.mediaOptionListTuple[ul.Variant].preferredHost = t) + } + ) + } + setViewportInfo(e, t) { + Co(`root.set.viewportInfo: ${JSON.stringify(t)}`), + this.store.update(e, e=>{ + e && (e.mediaOptionListTuple[ul.Variant].viewportInfo = t) + } + ) + } + static getExistingPersistentIds(e) { + var t; + const i = {} + , r = null === (t = e.enabledMediaOptionKeys[ul.AltAudio]) || void 0 === t ? void 0 : t.mediaOptionId; + if ("Nah" !== r) { + const s = e.mediaOptionListTuple[ul.AltAudio] + , t = wm(s.mediaOptions, Ty.kAllowFilters, s).find(e=>e.mediaOptionId === r); + i.audioPersistentId = null == t ? void 0 : t.persistentID + } + const n = null === (t = e.enabledMediaOptionKeys[ul.Subtitle]) || void 0 === t ? void 0 : t.mediaOptionId; + if ("Nah" !== n) { + const s = e.mediaOptionListTuple[ul.Subtitle] + , t = wm(s.mediaOptions, Ty.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[ul.Variant].preferHDR = t, + n[ul.Variant].hasHdrLevels = i; + const s = Ym() + , a = Hg.getEntity(e.itemId) + , o = Uf(e.itemId) + , d = o.getBandwidthEstimate(s, null == a ? void 0 : a.serviceName) + , l = 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 = wy.getExistingPersistentIds(e); + return Py(Object.assign(Object.assign({}, e), { + mediaOptionListTuple: n, + nextMediaOptionKeys: null + }), p, r, d, h, l, u, c) + } + switchToSDROnly(e) { + Co("root.switchToSDROnly"), + this.store.update(e, e=>{ + var t = wy.doUpdateRootHDRSwitch(e, !1, !1, this.logger)["mediaOptionListTuple"]; + e.mediaOptionListTuple = t + } + ) + } + setHDRPreference(e, i, r) { + Co(`root.set.HDRPreference: ${i}`), + this.store.update(e, e=>{ + var t = e.mediaOptionListTuple[ul.Variant]; + if (t.preferHDR !== i && (!i || t.hasHdrLevels)) { + t = wy.doUpdateRootHDRSwitch(e, i, t.hasHdrLevels, this.logger); + if (r) + return t; + e.mediaOptionListTuple = t.mediaOptionListTuple + } + } + ) + } + setPathwayPriority(e, i) { + Co(`root.set.PathwayPriority: [ ${i.join(", ")} ]`), + this.store.update(e, e=>{ + if (e) { + const t = e.mediaOptionListTuple[ul.Variant]; + t.pathwayPriority = i, + t.preferredHost = null + } + } + ) + } + setCurrentPathwayID(e, t) { + Co(`root.set.currentPathwayID: ${t}`), + this.store.update(e, e=>{ + e && (e.mediaOptionListTuple[ul.Variant].currentPathwayID = t) + } + ) + } + setInitPTS(e, t, i, r, n, s) { + Co(`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) { + Co(`root.set.penaltyBox: ${r}: ${n}`), + this.store.update(e, ({mediaOptionListTuple: e})=>{ + const t = e[r] + , i = performance.now(); + t.penaltyBoxQueue = wy.prunePenaltyBox(t.penaltyBoxQueue, i), + wy.addToPenaltyBox(t.penaltyBoxQueue, i, n) + } + ) + } + prunePenaltyBox(e, r=null) { + Co(`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 = wy.prunePenaltyBox(i.penaltyBoxQueue, t) + } + ) + } + removePermanently(e, r, n) { + Co(`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) { + Co(`root.set.moveAllMatchingHosts: ${r}:${n} remove:${s}`), + this.store.update(e, ({mediaOptionListTuple: e})=>{ + const t = e[r] + , i = [...t.mediaOptions].filter(e=>yl(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 = wy.prunePenaltyBox(t.penaltyBoxQueue, e); + for (const r of i) + wy.addToPenaltyBox(t.penaltyBoxQueue, e, r) + } + } + ) + } + setMaxHdcpLevel(e, i, r=!1) { + Co(`root.set.maxHdcpLevel: ${i}`), + this.store.update(e, ({mediaOptionListTuple: e})=>{ + const t = e[ul.Variant]; + (r || Yf(i) < Yf(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(d, l, u, c, h) { + Co("root.set.updateInflightFrag"), + this.store.update(d, r=>{ + if (r.inFlightFrags || (r.inFlightFrags = [null, null]), + !(l === ul.Subtitle || u && u.itemId !== d)) + if (u) { + let {start: e, duration: t} = u; + var {mediaOptionId: n, mediaSeqNum: s, discoSeqNum: a} = u + , o = r.inFlightFrags[l]; + let i = null == o ? void 0 : o.tstart; + c !== (null == o ? void 0 : o.state) && (i = performance.now()), + Fp(o, u) && (e = o.start, + t = o.duration), + r.inFlightFrags[l] = { + itemId: d, + mediaOptionId: n, + mediaSeqNum: s, + discoSeqNum: a, + start: e, + duration: t, + tstart: i, + state: c, + bwSample: Object.assign({}, h) + } + } else + r.inFlightFrags[l] = null + } + ) + } + setNextMaxAutoOptionId(e, t) { + Co(`root.set.nextMaxAutoOptionId: ${t}`), + this.store.update(e, ({abrStatus: e})=>{ + e.nextMaxAutoOptionId = t + } + ) + } + setNextMinAutoOptionId(e, t) { + Co(`root.set.nextMinAutoOptionId: ${t}`), + this.store.update(e, ({abrStatus: e})=>{ + e.nextMinAutoOptionId = t + } + ) + } + setHighBWTrigger(e, t) { + Co(`root.set.setHighBWTrigger: ${t}`), + this.store.update(e, ({abrStatus: e})=>{ + e.highBWTrigger = t + } + ) + } + setFragLoadSlow(e, t) { + Co(`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(ul.Variant) + , s = e.variantMediaOptionById(s); + let a, o; + if (t === ul.AltAudio) { + const t = e.enabledAlternateMediaOptionByType(ul.Subtitle); + o = null == t ? void 0 : t.persistentID, + a = i + } else { + const t = e.enabledAlternateMediaOptionByType(ul.AltAudio); + a = null == t ? void 0 : t.persistentID, + o = i + } + const d = e.getEnabledMediaOptionMask(); + return d[t] = !!(ne(i) && 0 <= i), + s ? this.getBestMediaOptionTupleFromVariantAndPersistentId(e, s, a, o, d, void 0, r, n, !1) : [Ol, Ol, Ol] + } + getFallbackMediaOptionTupleFromMediaOptionId(e, t, i, r, n=!1, s=!1, a=!1) { + var o = r ? [r] : [i] + , d = e.enabledMediaOptionIdByType(ul.Variant) + , r = e.variantMediaOptionById(d) + , d = t === ul.AltAudio ? e.alternateMediaOptionById(ul.AltAudio, i) : e.enabledAlternateMediaOptionByType(ul.AltAudio) + , d = null == d ? void 0 : d.persistentID + , i = t === ul.Subtitle ? e.alternateMediaOptionById(ul.Subtitle, i) : e.enabledAlternateMediaOptionByType(ul.Subtitle) + , i = null == i ? void 0 : i.persistentID; + return r ? this.getBestMediaOptionTupleFromVariantAndPersistentId(e, r, d, i, void 0, o, n, s, a) : [Ol, Ol, Ol] + } + 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(ul.Variant) + , s = e.variantMediaOptionById(s) + , s = e.getLegacyMatchingAlternateWithPersistentId(i, r, s); + s ? this.setEnabledMediaOptionByType(t, i, s, !0, n) : this.logger.warn(`${Cl[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); + sd(()=>{ + this.setEnabledMediaOptionByType(t, i, s[i], !0, r), + s[ul.Variant].mediaOptionId !== n.enabledMediaOptionIdByType(ul.Variant) && this.setPreferredHost(t, gl(s[ul.Variant].url)), + this.setEnabledMediaOptionByType(t, ul.Variant, s[ul.Variant]); + var e = i === ul.AltAudio ? ul.Subtitle : ul.AltAudio; + s[e].mediaOptionId !== n.enabledMediaOptionIdByType(e) && this.setEnabledMediaOptionByType(t, e, s[e], !1) + } + ) + } + canSwitchToSDR(e, t, i, r=!1) { + var n = e.mediaOptionListQueries[ul.Variant].mediaOptionFromId(t) + , r = this.getFallbackMediaOptionTupleFromMediaOptionId(e, ul.Variant, t, n.backingMediaOptionId, !0, i, r); + return e.isValidMediaOptionTuple(r) + } + getBestMediaOptionTupleFromVariantAndPersistentId(t, e, i, r, n, s, a, o, d) { + var l, u = t.mediaOptionListQueries[ul.Variant].listFallbackVariants(e.mediaOptionId, a, o, d, s); + let c = [Ol, Ol, Ol]; + for (let e = 0; e < u.length; ++e) { + const a = u[e]; + if (l = t.matchAlternates(a, i, r, s), + t.isValidMediaOptionTuple([a, ...l], n)) { + c = [a, ...l]; + break + } + } + return c + } + } + const Ay = new class extends pd { + constructor() { + super({}, { + name: "root-playlist-store", + idKey: "itemId", + producerFn: vc + }) + } + 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 Od(Ay); + let Oy = null; + function ky(e) { + return new Ey(Ay,e) + } + const Cy = (n,e,t,s,i)=>{ + const {rootMediaOptionsTuple: r, sessionKeys: a} = n + , o = Array.from(r[ul.Variant]) + , d = Array.from(r[ul.AltAudio]); + let l = !1 + , u = !1 + , c = o.map(e=>(l = l || Boolean(e.videoCodec), + u = u || Boolean(e.audioCodec) || Boolean(e.audioGroupId), + e)); + return l && u && (c = c.filter(({videoCodec: e})=>Boolean(e))), + Sy(o, d, a, e, t, i).pipe(ur(({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: d} = e + , l = Array.from(a[ul.AltAudio]) + , u = Array.from(a[ul.Subtitle]) + , c = t.every(e=>ne(e.score)) + , h = t.some(e=>Dm(!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: l, + compatibleIds: null, + penaltyBoxQueue: [], + removed: [] + }, { + mediaOptions: u, + penaltyBoxQueue: [], + removed: [] + }], + audioMediaSelectionGroup: o, + subtitleMediaSelectionGroup: d, + enabledMediaOptionKeys: [Ol, Ol, Ol], + mediaOptionSwitchContexts: [null, null, null], + anchorTime: 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: Ol.mediaOptionId, + nextMaxAutoOptionId: Ol.mediaOptionId, + highBWTrigger: NaN + }, + sessionData: a + } + }(n, i, r, s) + } + )) + } + ; + function Dy(e, t, i, r, n, s, a) { + var o, d, l, u, c, h, p, f = e.mediaOptionListTuple[ul.Variant], m = wm(f.mediaOptions, xm.kAllowFilters, Object.assign(Object.assign({}, f), { + compatibleIds: null + })), g = Am(f.preferredHost, m); + return { + firstVariant: (o = g, + e = Tg, + 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 ? Eg(o, i, r, n, s, a) : (d = e, + l = 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, d, l = (o = e.bitrate, + u = e.height, + (d = (e,t,i)=>(e - t) * (e - i) <= 0)(o, t.minValidBitrate, t.maxValidBitrate) && d(u, t.minValidHeight, t.maxValidHeight) ? ll.VALID : ll.INVALID), o = "PQ" === (c = e.videoRange) ? ol.PQ : "HLG" === c ? ol.HLG : "SDR" === c ? ol.SDR : ol.UNKNOWN, {videoCodecRank: u, audioCodecRank: c} = { + videoCodecRank: $p((d = e).videoCodec), + audioCodecRank: Kp(d.audioCodec) + }, d = e.bitrate < t.maxPreferredBitrate ? ll.VALID : ll.INVALID, t = e.audioChannelCount || 1, a = i && r && n && s && !Ig(e, i, r, n, s, a) ? ll.INVALID : ll.VALID; + return new Hp(l,o,u,t,c,a,d,e.height) + }(t, d, l, 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 My(e, t, i) { + if ((null == t ? void 0 : t.mediaType) === pl.CLOSEDCAPTION) { + const r = Ty.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 Py(e, t, i, r, n, s, a, o) { + var d; + const l = e.itemId + , u = e.mediaOptionListTuple[ul.Variant] + , c = e.mediaOptionListTuple[ul.AltAudio] + , h = e.mediaOptionListTuple[ul.Subtitle] + , p = wm(c.mediaOptions, Ty.kAllowFilters, c) + , f = wm(h.mediaOptions, Ty.kAllowFilters, h); + let {firstVariant: m, filteredVariants: g} = Dy(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} = Dy(e, i, r, n, s, a, o)) + } + if (!m) + throw new V(!0,"No valid first variant found",$.NoValidAlternates); + const y = gl(m.url) + , v = { + itemId: l, + 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: l, + mediaOptionId: S + } : Ol + , 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 === pl.CLOSEDCAPTION ? (!r || e.groupId === r) && e.persistentID === t.MediaSelectionOptionsPersistentID : e.mediaType === pl.SUBTITLE ? (!n || e.groupId === n) && e.persistentID === t.MediaSelectionOptionsPersistentID : void o.warn(Iy, `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: l, + mediaOptionId: E, + mediaOptionType: ul.Subtitle + } : Ol + , {mediaOptions: w, audioGroups: A, subtitleGroups: O} = (t = g, + d = m, + t.reduce((e,t)=>{ + if (((e,t)=>{ + let i = !0; + e.videoCodec && t.videoCodec && (i = Se.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 = Se.isCompatibleAudioCodec(e.audioCodec, t.audioCodec)), + i && r && n + } + )(d, t)) { + const d = t.audioGroupId; + d && e.audioGroups.add(d), + 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 = [] + , P = 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 + }) + , x = 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)=>(P.persistentIds.has(t.MediaSelectionOptionsPersistentID) && e.push(t), + e), new Array); + R = Object.assign(Object.assign({}, R), { + MediaSelectionGroupOptions: e + }) + } + h.mediaOptions = My(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, x, h]; + let B = new Map; + Ym().useHighestVideoCodecPrivate && (B = null == D ? void 0 : D.mediaOptions.reduce((e,t)=>{ + const i = t.videoCodecList; + if (i) + for (const t of i) { + const i = Vp(t) + , r = e.get(i); + Se.isHigherCodecByFamily(r, t) && e.set(i, t) + } + return e + } + , B)), + B.size && B.forEach((e,t)=>{} + ); + t = { + fragDownloadSlow: !1, + fragDownloadTooSlow: !1, + nextMinAutoOptionId: Ol.mediaOptionId, + nextMaxAutoOptionId: Ol.mediaOptionId, + highBWTrigger: Lg(v.mediaOptionId, D.mediaOptions) + }; + return Object.assign(Object.assign({}, e), { + enabledMediaOptionKeys: [v, b, I], + mediaOptionListTuple: i, + audioMediaSelectionGroup: R, + abrStatus: t, + highestVideoCodec: B + }) + } + const xy = (o,d,l,u,c,h,p)=>e=>e.pipe(Ql.tag("retrieveRootMediaOptions.input"), Ra(t=>{ + var e; + if (!t) + return Ti; + const {itemId: i, platformInfo: r} = t + , n = ky(i) + , s = d["logger"]; + if (n.hasEntity(i)) + return Bi(n); + Ay.setLoading(!0); + const a = performance.now(); + return function(e, t, u, c, i) { + const {itemId: h, url: p, itemStartOffset: f} = e + , r = xc(e, t); + return bm({ + url: p, + onProgress: { + getData: !0, + cb: dy + }, + xhrSetup: c.xhrSetup + }, r, i).pipe(ur(({responseText: e, stats: t})=>{ + var i = c["keySystemPreference"]; + if (Sm.isMediaPlaylist(e)) { + const c = "media-pl-" + Jd() + , d = Sm.parseMediaOptionPlaylist(e, p, !0, i, {}, h, c, ul.Variant, u, f); + Lc(d.mediaOptionDetails); + var r = { + itemId: h, + mediaOptionId: c, + mediaOptionType: ul.Variant, + url: p, + bandwidth: 0, + bitrate: 0, + iframes: d.mediaOptionDetails.iframesOnly, + pathwayID: "." + }; + return { + itemId: h, + itemStartOffset: f, + rootMediaOptionsTuple: [[r], [], []], + stats: t, + baseUrl: p, + initialDetails: d.mediaOptionDetails, + isMediaPlaylist: !0 + } + } + { + const u = Sm.parseSessionData(e, p) + , c = Sm.parseSessionKeys(e, p, i) + , l = Sm.parseRootPlaylist(h, e, p, !0); + if (l.playlistParsingError) + throw l.playlistParsingError; + var {variantMediaOptions: n, contentSteeringOption: s, masterVariableList: a} = l + , o = Sm.parseRootPlaylistAlternateMediaOptions(h, e, p, l.variantMediaOptions, !0, a); + if (o.playlistParsingError) + throw o.playlistParsingError; + var {audioAlternateOptions: r, subtitleAlternateOptions: i, audioMediaSelectionGroup: e, subtitleMediaSelectionGroup: o} = o.alternateMediaInfo; + return { + itemId: h, + itemStartOffset: f, + rootMediaOptionsTuple: [n, r, i], + stats: t, + baseUrl: p, + audioMediaSelectionGroup: e, + subtitleMediaSelectionGroup: o, + contentSteeringOption: s, + sessionData: u, + sessionKeys: c, + masterVariableList: a + } + } + } + ), e=>e.pipe(Un(e=>{ + if (e instanceof ou) + throw new ru(!1,"Timeout",0,$.ManifestTimeoutError,!0); + if (e instanceof tu) + throw new ru(!1,e.message,e.code,{ + code: e.code, + text: "Manifest network error" + },!1); + throw e + } + ))) + }(t, o, s, l, null === (e = null === (e = Xm()) || void 0 === e ? void 0 : e.getQuery()) || void 0 === e ? void 0 : e.extendMaxTTFB).pipe(Ja(e=>p.triggerManifestLoaded(e)), Ja(({initialDetails: e, stats: t})=>{ + e && (e = e, + t = t, + hg().archiveMediaOptionDetails(e, t, !0)) + } + ), So(u.displaySupportsHdr$), Ra(([e,t])=>Cy(e, r, l, t, s)), ur(e=>(d.rootPlaylistEntity = function(e, t, i, r, n, s) { + const {itemId: a, initialSeekTime: o} = e + , d = Uf(a) + , l = n.enableAdaptiveStartup ? d.getBandwidthEstimate(n, e.serviceName) : void 0 + , u = n.enableAdaptiveStartup ? d.getPlaylistEstimate(n, e.serviceName) : void 0 + , c = n.enableAdaptiveStartup ? d.getFragEstimate(n, e.serviceName) : void 0 + , h = n.enableAdaptiveStartup ? d.getBufferEstimate(n, e.serviceName) : void 0 + , p = n.targetStartupMs - (performance.now() - r) + , f = n.enableAdaptiveStartup ? { + targetDuration: c.maxDurationSec || n.defaultTargetDuration, + targetStartupMs: p + } : void 0 + , m = Py(t, i, s, l, f, u, c, h); + return m.pendingSeek = o, + m + }(t, e, c, a, l, s), + n)), jm(i, null, xc(t, o), 0, !1, n, d, h), $s(()=>{ + Ay.setLoading(!1) + } + )) + } + ), Ql.tag("retrieveRootMediaOptions.emit")); + class Ry { + } + Ry.PlayEnded = 6101, + Ry.Periodic = 6110, + Ry.PlayStalled = 6103, + Ry.KeySessionComplete = 6104, + Ry.PlayLikelyToKeepUp = 6105, + Ry.PlayRateChanged = 6106, + Ry.PlayError = 6107, + Ry.MediaEngineStalled = 6108, + Ry.SwitchComplete = 6109, + Ry.VariantEnded = 6111, + Ry.NwError = 6202; + const Ly = { + 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 _y { + constructor(e, t) { + this.query = e, + this.logger = t + } + setReportingAgent(e) { + this.reportingAgent = e + } + sendPlayEnded(e) { + var t = Ry.PlayEnded; + this.fillAndFire(t, this.query.playEnded(e)) + } + sendPlayStalled(e) { + var t = Ry.PlayStalled; + this.fillAndFire(t, this.query.playStalled(e)) + } + sendMediaEngineStalled(e) { + var t = Ry.MediaEngineStalled; + this.fillAndFire(t, this.query.mediaEngineStalled(e)) + } + sendKeySessionComplete(e) { + var t = Ry.KeySessionComplete; + this.fillAndFire(t, this.query.keySessionComplete(e)) + } + sendPlayLikelyToKeepUp(e) { + var t = Ry.PlayLikelyToKeepUp; + this.fillAndFire(t, this.query.playLikelyToKeepUp(e)) + } + sendPlayRateChange(e) { + var t = Ry.PlayRateChanged; + this.fillAndFire(t, this.query.playRateChanged(e)) + } + sendSwitchComplete(e) { + var t = Ry.SwitchComplete; + this.fillAndFire(t, this.query.switchComplete(e)) + } + sendVariantEnded(e) { + var t = Ry.VariantEnded; + this.fillAndFire(t, this.query.variantEnded(e)) + } + sendPlayError(e) { + var t = Ry.PlayError; + this.fillAndFire(t, this.query.playError(e)) + } + sendNwError(e) { + var t = Ry.NwError; + this.fillAndFire(t, this.query.nwError(e)) + } + sendPeriodic(e) { + var t = Ry.Periodic; + this.fillAndFire(t, this.query.periodic(e)) + } + fillAndFire(e, t) { + var r = e === Ry.PlayEnded || e === Ry.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 Ny extends Od { + 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 Fy extends pd { + constructor(e) { + super({}, { + name: "rtc-store", + idKey: "itemId", + producerFn: vc, + 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, l) { + 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 = l.url + , i = this._getVariantInfo(s, e) + , r = this._getVariantInfo(a, e); + let o, d = !1; + s && (o = r.bandwidth < i.bandwidth ? "Down" : "Up", + d = r.iframes), + t.BadSw = this._isBadSw(o, e.lastSwitchDir || o, d, e.lastLevelIsIframe || d, n, e.lastSwitchTime || n, l.isSeeking), + e.lastSwitchDir = o, + e.lastSwitchTime = n, + e.lastLevelIsIframe = d, + e.curLevelUrl = a, + e.variantStartTimeMedia = l.currentTime + } + ), + this._prepareEventSwitchComplete(e, l) + } + 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 Ry.PlayEnded: + this.update(e, ({sessionControlRecord: e})=>{ + e.state = "RTC_STATE_STOP", + e.oldRate = 0 + } + ), + this.update(e, e=>{ + e.playEndedRecord = {} + } + ); + break; + case Ry.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 Ry.PlayStalled: + this.update(e, ({sessionControlRecord: e})=>{ + e.state = "RTC_STATE_STALL", + e.oldRate = 0 + } + ), + this.update(e, e=>{ + e.playStalledRecord = {} + } + ); + break; + case Ry.KeySessionComplete: + this.update(e, ({sessionControlRecord: e})=>{ + delete e.activeKeySessions[e.finishedKeyUri] + } + ), + this.update(e, e=>{ + e.keySessionCompleteRecord = {} + } + ); + break; + case Ry.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 Ry.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 Ry.PlayError: + this.update(e, ({sessionControlRecord: e})=>{ + e.state = "RTC_STATE_PLAYERROR" + } + ), + this.update(e, e=>{ + e.playErrorRecord = {} + } + ); + break; + case Ry.MediaEngineStalled: + this.update(e, ({sessionControlRecord: e})=>{ + e.state = "RTC_STATE_MEDIAENGINESTALL", + e.oldRate = 0 + } + ), + this.update(e, e=>{ + e.mediaEngineStalledRecord = {} + } + ); + break; + case Ry.SwitchComplete: + this.update(e, e=>{ + e.switchCompleteRecord = {}, + e.sessionControlRecord.prevLevelUrl = e.sessionControlRecord.curLevelUrl + } + ); + break; + case Ry.VariantEnded: + this.update(e, ({sessionControlRecord: e})=>{ + e.decodedFramesForVariant = 0, + e.decodedFramesForVariantSampleCount = 0 + } + ), + this.update(e, e=>{ + e.variantEndedRecord = {} + } + ); + break; + case Ry.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 === ul.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 === ul.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 === ul.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 ${oe(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 Ly[t] ? 1.5 * e : +e + } + _getVideoFourCC(e) { + return e && e.split(",").map(e=>e.split(".")[0].trim()).find(e=>!!Ly[e]) + } + _getVideoQualityIndex(e, t) { + return "object" == typeof Ly[e] ? Ly[e][t] : Ly[e] + } + _getBitrateRank(e, t, i) { + t = Math.max(1, this._getNormalizedPeak(e, t)); + return Math.ceil(100 * t / i) + } + _findTimeWeightedValues(o, d, l) { + const e = { + twBRnk: 0, + twIBR: 0, + twIABR: 0 + }; + if (d) { + let i = 0 + , r = 0 + , n = 0 + , s = 0 + , a = 0; + Object.values(d).forEach(e=>{ + let t = e.playTime; + e === d[l] && (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: d, nwErrorRecord: l, 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, + d.LastPause = (d.LastPause || 0) + h, + l.LastPause = (l.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, + d.LastStall = (d.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, + d.LastMediaEngineStall = (d.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, + d.LastResume = (d.LastResume || 0) + h, + l.LastResume = (l.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 By = { + name: "rtc-service" + }; + class Uy { + constructor(e, t, i, r) { + this.hls = e, + this.config = t, + this.accessLog = i, + this.logger = r, + this.destroy$ = new zt, + this.isSeeking = !1, + this.seekStart = null, + this.periodicInterval = t.rtcIntervalTimeout || 3e5, + this.intervalFunc = null, + this.rtcStore = new Fy(this.logger), + this.rtcQuery = new Ny(this.rtcStore,this.logger), + this.rtcComponent = new _y(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), Ry.VariantEnded), + this.rtcStore.updatePeriodic(this.rtcEventItemId(!0), !0), + this.sendAndFinalize(this.rtcEventItemId(!0), Ry.Periodic), + this.rtcStore.updateEnded(this.rtcEventItemId(!0)), + this.sendAndFinalize(this.rtcEventItemId(!0), Ry.PlayEnded) + } catch (e) { + this.logger.warn(By, e) + } + } + handleError(e) { + var t = e instanceof p ? e : new V(!0,e.message,$.InternalError); + t instanceof nu && !t.fatal ? (this.rtcStore.updateLevelLoadError(this.rtcEventItemId(), { + url: t.url, + mediaDur: this.hls.bufferedDuration, + isSeeking: this.isSeeking + }), + this.sendAndFinalize(this.rtcEventItemId(), Ry.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(), Ry.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(), Ry.PlayError)) + } + handleMediaElementError(e) { + this.rtcStore.updateMediaElementError(this.rtcEventItemId(), e), + this.sendAndFinalize(this.rtcEventItemId(), Ry.PlayError) + } + handleFragLoaded(e, t) { + var i, r, n; + this.checkMediaOptionType(e.mediaOptionType) && (e.itemId !== this.rtcEventItemId() && this.logger.warn(By, `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(By, `media option id does not match current item id. media Id=${e.itemId}, current id=${this.rtcEventItemId}`), + e.mediaOptionType === ul.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(), Ry.VariantEnded)), + this.rtcStore.updateLevelSwitched(this.rtcEventItemId(), t), + this.sendAndFinalize(this.rtcEventItemId(), Ry.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) || Jd()) + "-" + 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), Ry.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 === Op.LowBuffer || e.type === Op.Seek && e.isLowBufferStall ? "RTC_STATE_PLAY" === t && (this.rtcStore.updateBufferStalled(this.rtcEventItemId(!0), i), + this.sendAndFinalize(this.rtcEventItemId(!0), Ry.PlayStalled)) : "RTC_STATE_PLAY" === t && (this.rtcStore.updateMediaEngineStalled(this.rtcEventItemId(!0), i), + this.sendAndFinalize(this.rtcEventItemId(!0), Ry.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 === ul.Variant || e === ul.AltAudio || (this.logger.error(By, 'Should not have media option type = "%s" in RTC', Cl[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(Ra(([,e])=>this.mediaElementQueryListener(e)), $a(this.destroy$)).subscribe(), + this.hls.itemQueue.activeItemById$.pipe(Ja(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(By, "[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) + } + } + ), $a(this.destroy$)).subscribe() + } + itemTransitioned(e, t) { + this.rtcStore.updateVariantEnd(e, { + currentTime: this.hls.realCurrentTime + }), + this.sendAndFinalize(e, Ry.VariantEnded), + this.rtcStore.updatePeriodic(e, !0), + this.sendAndFinalize(e, Ry.Periodic), + this.rtcStore.updateEnded(e), + this.sendAndFinalize(e, Ry.PlayEnded), + this.setPeriodic(t) + } + mediaElementQueryListener(e) { + return e.gotPlaying$.pipe(Ja(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), Ry.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), Ry.PlayRateChanged)) + } + } + )) + } + registerForEvents() { + const e = wc(this.hls, this); + nn(e.event(P.KEY_REQUEST_STARTED, this.keyRequestStarted, this), e.event(P.KEY_LOADED, this.keyLoaded, this)).pipe($a(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(), Ry.KeySessionComplete) + } + licenseChallengeError(e) { + this.rtcStore.updateLicenseChallengeError(this.rtcEventItemId(), { + timestamp: Date.now(), + keyuri: e.keyuri + }), + this.sendAndFinalize(this.rtcEventItemId(), Ry.KeySessionComplete) + } + licenseResponseError(e) { + this.rtcStore.updateLicenseResponseError(this.rtcEventItemId(), { + timestamp: Date.now(), + keyuri: e.keyuri + }), + this.sendAndFinalize(this.rtcEventItemId(), Ry.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(), Ry.KeySessionComplete)) : this.logger.warn(`keyAbort called without active key session ${oe(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, Ry.Periodic) + } + clearPeriodic() { + this.intervalFunc && clearInterval(this.intervalFunc), + this.intervalFunc = null + } + sendAndFinalize(e, t) { + switch (this.accessLog.addPlayTime(e), + t) { + case Ry.PlayEnded: + this.rtcComponent.sendPlayEnded(e); + break; + case Ry.Periodic: + this.rtcComponent.sendPeriodic(e); + break; + case Ry.PlayStalled: + this.accessLog.updateStallCount(e), + this.rtcComponent.sendPlayStalled(e); + break; + case Ry.KeySessionComplete: + this.rtcComponent.sendKeySessionComplete(e); + break; + case Ry.PlayLikelyToKeepUp: + this.accessLog.updateCanPlay(e), + this.rtcComponent.sendPlayLikelyToKeepUp(e); + break; + case Ry.PlayRateChanged: + this.rtcComponent.sendPlayRateChange(e); + break; + case Ry.PlayError: + this.accessLog.addToErrorLog(e, "mediaError"), + this.rtcComponent.sendPlayError(e); + break; + case Ry.MediaEngineStalled: + this.accessLog.updateMediaEngineStallCount(e), + this.rtcComponent.sendMediaEngineStalled(e); + break; + case Ry.SwitchComplete: + this.accessLog.addToAccessLog(e), + this.rtcComponent.sendSwitchComplete(e); + break; + case Ry.VariantEnded: + this.rtcComponent.sendVariantEnded(e); + break; + case Ry.NwError: + this.accessLog.addToErrorLog(e, "networkError"), + this.rtcComponent.sendNwError(e); + break; + default: + return void this.logger.error(By, `Unknown rtc event eventGroupId:${e}`) + } + this.rtcStore.finalize(e, t) + } + } + function $y(t, o, d, l, u, c, h) { + return e=>e.pipe(Up(), Ra(e=>{ + return e ? Cr([Bi(e).pipe(xy(t.manifestLoadPolicy, d, t, l, null, u, c)), (n = t, + s = o, + a = h.mux, + new Ut(e=>{ + const t = new ay(n,s,a); + return e.next(t), + ()=>{ + t.destroy() + } + } + )), (i = t.trickPlaybackConfig, + r = o, + new Ut(e=>{ + var t = new ql(i,r); + return e.next(t), + ()=>{} + } + ))]).pipe(ur(([e,t,i])=>({ + rootPlaylistQuery: e, + mediaParser: t, + iframeMachine: i + }))) : Bi(null); + var i, r, n, s, a + } + )) + } + Ec; + return class Vy extends Ec { + constructor(e={}, t) { + var i; + if (super(), + this.destroy$ = new zt, + this.mediaElement$ = new gi(null), + this.encryptedMediaElement$ = new gi(null), + this.publicQueriesInternal$ = new gi(null), + this.mediaElementAdapter = null, + this.rpcService = null, + this.rpcClients = null, + this.platformService = bf(), + this.keySystemAdapter = null, + this.legibleSystemAdapter = null, + this.sessionID = Jd(), + this.statsService = (Bf = Bf || new Nf(Ff), + Bf), + this.gaplessCapable = !0, + this.teardownWorker$ = new Hf, + this.itemQueue = new jg, + (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 f = Object.assign(Object.assign({}, Al), e); + i = (this.hlsConfig = f).buildType, + ae = "production" === i; + const r = this.sessionID; + let n = "silent"; + e.debug && (n = f.debugLevel), + this.logger = null !== (i = this.logger) && void 0 !== i ? i : ([D,c={}] = [r, (u = { + sendLogs: e.sendLogs, + level: "log" === n ? "debug" : n, + consoleOverride: "boolean" != typeof e.debug ? e.debug : void 0, + buildType: f.buildType + }, + M = u.consoleOverride, + Object.assign({ + name: "hls", + timestamp: u.sendLogs ? Ae.stdTimeFunctions.epochTime : Ae.stdTimeFunctions.isoTime, + browser: { + asObject: !0, + serialize: !0, + transmit: { + send: (e,t)=>{} + }, + write: { + debug: Ke.bind(null, Ve(M || console, "debug"), "debug"), + info: Ke.bind(null, Ve(M || console, "info"), "info"), + warn: Ke.bind(null, Ve(M || console, "warn"), "warn"), + error: Ke.bind(null, Ve(M || console, "error"), "error"), + fatal: Ke.bind(null, Ve(M || console, "error"), "fatal") + } + } + }, u))], + Be && Be.sessionId === D ? Be.warn("Logger Singleton already setup, returning existing singleton") : (Be = Ae(Ue(c)).child({ + sessionId: D, + name: "hls" + }), + Be.qe = e=>Be.info(e), + Be.sessionId = D), + Be), + Lo = !1, + Ro && (delete window.$$stores, + delete window.$$queries), + this.hlsConfig.audioPrimingDelay = 0, + this.rootPlaylistService = (M = this.logger, + Oy = new wy(Ay,M), + Oy), + this.customUrlLoader = Mc(), + this.sessionDataLoader = new _p(f,Oc,this.customUrlLoader.load,this.logger); + var s, a, o, d, l, u = f.liveMaxLatencyDurationCount, c = f.liveSyncDurationCount; + if (ne(u) && ne(c) && u <= c) + throw new Error('Illegal hls.js config: "liveMaxLatencyDurationCount" must be gt "liveSyncDurationCount"'); + if (ne(f.liveMaxLatencyDuration) && (f.liveMaxLatencyDuration <= f.liveSyncDuration || !ne(f.liveSyncDuration))) + throw new Error('Illegal hls.js config: "liveMaxLatencyDuration" must be gt "liveSyncDuration"'); + const h = Xm(); + h.setHlsEntity({ + id: r, + config: f + }); + const p = hg() + , m = new gf(vf) + , g = (Ph = Ph || new Dh(Mh), + Ph); + this.accessLogInstance = new jf(this,r), + this.rtcService = new Uy(this,f,this.accessLogInstance,this.logger), + this.playerEvents = new bg(this,this.logger,this.rtcService); + const y = (D = this.platformService, + l = D, + (()=>{ + if ("function" == typeof matchMedia) { + var e = matchMedia("(dynamic-range: high)") + , t = matchMedia("bad query"); + if (e.media !== t.media) + return nn(Bi(e), en(e, "change")).pipe(ur(e=>e.matches)) + } + return Bi(!0) + } + )().pipe(Ja(e=>{ + l.updateSupportsHdr(e) + } + )).pipe(Ua(Ti))) + , v = this.mediaElement$.pipe((s = f, + o = (a = this).logger, + d = this.teardownWorker$, + e=>e.pipe(Ql.tag("playback.mediaElementServiceEpic.in"), Ra(e=>{ + if (!e) + return Bi(null); + const t = new hf(e,mf,s,a,o,d); + return t.openMediaSource(new MediaSource), + nn(Bi(t), t) + } + ), Ql.tag("playback.mediaElementServiceEpic.emit"))), wa()) + , S = this.itemQueue.activeItemById$.pipe(Ra(e=>e ? Vf(f, this.statsService, e, this.logger) : Ti)); + this.rpcService = (()=>{ + let e = f.createRPCService; + return f.enableWorker && null == e && (e = Cf), + null == e && (e = Of), + e(this.logger) + } + )(), + this.rpcClients = (M = this.rpcService, + { + crypto: new Ef(M), + mux: new If(M) + }); + var b, T, E, I, w, A, O, k, C, u = Cr([this.itemQueue.activeItemById$.pipe($y(f, this.logger, this.rootPlaylistService, m, this.statsService, this.playerEvents, this.rpcClients), Ja(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) + } + )), v.pipe((E = this.itemQueue.removedItems$, + I = g, + w = f, + A = m, + k = (O = this).rtcService, + C = this.logger, + e=>Cr([((n,s,a,o,d,l,u)=>e.pipe(Ql.tag("[Keys] playback.keySystemServiceEpic.in"), Ra(r=>r ? new Ut(e=>{ + let t = new kh(n,r,a,o,d,l,u); + const i = nn(Bi(t), s.pipe(Kr(e=>t.removeKeysForItems(e)), Ua(Ti))).subscribe(e); + return function() { + u.warn("[Keys] playback.keySystemServiceEpic.unsubscribe"), + i.unsubscribe(), + t.destroy().subscribe(), + t = void 0 + } + } + ) : Bi(null)), Ql.tag("[Keys] playback.keySystemServiceEpic.emit")))(I, E, w, A, O, k, C), ((t,i,r)=>e.pipe(Ql.tag("playback.legibleServiceEpic.in"), Ra(e=>e ? nn(Bi(e = new Rp(e,t,i,r)), e) : Bi(null)), Ql.tag("playback.legibleServiceEpic.emit")))(w, O, C), e]).pipe(ur(([e,t,i])=>({ + keySystemAdapter: e, + legibleSystemAdapter: t, + mediaSink: i + })))), Ja(({keySystemAdapter: e, legibleSystemAdapter: t, mediaSink: i})=>{ + this.keySystemAdapter = e, + this.legibleSystemAdapter = t, + this.mediaElementAdapter = i + } + ))]).pipe(ur(([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: f, + platformService: this.platformService, + statsService: this.statsService, + rtcService: this.rtcService, + rpcClients: this.rpcClients, + rootPlaylistService: this.rootPlaylistService, + rootPlaylistQuery: s, + mediaLibraryService: p, + keySystemAdapter: i, + legibleSystemAdapter: r, + mediaSink: n, + mediaParser: e, + iframeMachine: t, + customUrlLoader: this.customUrlLoader, + gaplessInstance: this + } + } + ), wa()).pipe(Ra(a=>{ + if (!a) + return Ti; + const {rootPlaylistQuery: t, mediaSink: e, mediaLibraryService: i} = a; + this.publicQueriesInternal$.next([t, e.mediaQuery]); + const n = e.mediaQuery + , r = Bi(a).pipe(ry()) + , s = t.rootPlaylistEntity$.pipe(Up(), Cs(1), Ja(()=>{ + this.commitEarlySelection(a.logger) + } + )) + , o = $l(Cr([n.haveEnough$, t.sessionData$]), ([e])=>!0 === e, 1).pipe(Ra(([,e])=>this.sessionDataLoader.loadSessionData(e)), Ja(e=>{ + this.rootPlaylistService.setSessionData(t.itemId, e) + } + ), Un(e=>(this.logger.error(e.message), + Ti))) + , d = Uf(t.itemId) + , l = function(l, e, u, r, t) { + const a = u.mediaQuery + , i = Zd([a.seekTo$, a.bufferedSegmentsByType$(cl.Variant)]).pipe(ur(([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, l.maxBufferHole) + , s = a.getCombinedBufferInfo(i, l.maxBufferHole); + return { + pos: i, + sbTuple: n, + combined: s, + playingFrag: null !== (t = null == r ? void 0 : r.frag) && void 0 !== t ? t : null + } + } + )) + , n = Zd([e.getInFlightFragByType$(ul.Variant), e.enabledMediaOptionByType$(ul.Variant)]).pipe(Ra(([e,t])=>{ + var i = r.getQueryForOption(t); + return bn(Bi(e), Bi(t), i.mediaOptionDetails$) + } + ), ur(([e,t,i])=>[e, { + variant: t, + details: i + }])) + , s = Zd([t.bandwidthEstimate$, t.fragEstimate$, t.bufferEstimate$]); + return Zd([a.readyState$, n, i, a.desiredRate$, s]).pipe(Hi(Zi), ur(([,e,t,i,r])=>{ + var [n,s] = e + , [a,e,r] = r; + let o = e + , d = r; + return e && (o = { + maxDurationSec: ne(e.maxDurationSec) ? e.maxDurationSec : l.defaultTargetDuration, + avgParseTimeMs: ne(e.avgParseTimeMs) ? e.avgParseTimeMs : l.statDefaults.fragParseTimeMs + }), + r && (d = { + avgBufferCreateMs: ne(r.avgBufferCreateMs) ? r.avgBufferCreateMs : l.statDefaults.fragBufferCreationDelayMs, + avgInitFragAppendMs: ne(r.avgInitFragAppendMs) ? r.avgInitFragAppendMs : l.statDefaults.initFragAppendMs, + avgDataFragAppendMs: ne(r.avgDataFragAppendMs) ? r.avgDataFragAppendMs : l.statDefaults.dataFragAppendMs + }), + a = function(e, t, i, h, p, r, n, s) { + let a = function(e, t, i) { + const {pos: r, combined: n, playingFrag: s} = h; + if (0 === n.len) + return !1; + var a = 0 != p && 1 != p + , o = t.details + , d = o.fragments + , t = oy(o) + , i = Math.max(1, t * i); + let l = a || n.len >= t || n.len >= i; + a = d[o.fragments.length - 1], + i = d[0].start + o.totalduration; + let u = !1; + if (s) { + const c = _l.search(d, e=>s.discoSeqNum - e.discoSeqNum); + u = e && s.discoSeqNum !== e.discoSeqNum || null == c || Fp(c, s) + } + return l && o.liveOrEvent ? l = r <= i - a.duration : o.liveOrEvent || (l = l || i - t <= r), + l = l || u, + l + }(t, i, e.startTargetDurationFactor); + var o = h.combined; + if (!a && 0 < o.len) { + const p = oy(i.details); + a = function(n, e, t, i, r, s, a) { + var o = null === (o = h.sbTuple[ul.Variant]) || void 0 === o ? void 0 : o.buffered; + if ((null == o ? void 0 : o.len) >= t) + return 0; + if (!o || !n || !(n.start + n.duration > o.end && (n.start - o.end <= a || n.start <= o.end))) + return 1 / 0; + o = n.state; + let d = n.tstart + , l = 0; + switch (o) { + case "loading": + l += function(e, t) { + var {bwSample: i, duration: r} = n; + return i ? (r = ne(i.total) ? 8 * i.total : Math.ceil(r * e), + e = 8 * i.loaded, + r -= e, + i = e / (performance.now() - i.tfirst) * 1e3, + t = t.avgBandwidth, + r / (ne(i) ? Math.min(t, i) : t)) : 1 / 0 + }(e, i), + d = n.tstart + 1e3 * l; + case "loaded": + case "parsing": + l += function(e, t) { + return t = ne(r.avgParseTimeMs) ? t.avgParseTimeMs : 0, + performance.now() < e ? t / 1e3 : Math.max(0, t - (performance.now() - e)) / 1e3 + }(d, r), + d = n.tstart + 1e3 * l; + case "parsed": + case "appending": + l += function(e, t) { + return t = ne(s.avgDataFragAppendMs) ? t.avgDataFragAppendMs : 0, + performance.now() < e ? t / 1e3 : Math.max(0, t - (performance.now() - e)) / 1e3 + }(d, s); + break; + case "appended": + l = 0; + break; + default: + l = 1 / 0 + } + return l + }(t, i.variant.bitrate, p, r, n, s, e.maxBufferHole) <= o.len + } + return a + }(l, n, s, t, i, a, o, d), + u.haveEnough = a + } + ), ca(), Ra(([e,t])=>e !== t ? Bi(t) : Bi(t).pipe(ss(200))), Ja(e=>{} + ), Ua(Ti)) + }(f, (this.logger, + t), e, i, d) + , u = function() { + const {config: e, mediaSink: t, rootPlaylistQuery: i, mediaLibraryService: r, gaplessInstance: n} = a + , s = t.mediaQuery; + return Zd([i.enabledAVOptions$.pipe(Ra(e=>bn(...e.map(e=>kl(e) ? r.getQueryForOption(e).mediaOptionDetails$ : Bi(null))))), s.msReadyState$, s.updating$, s.isIframeRate$, s.isBufferedToEnd$(e.maxBufferHole, !n.inGaplessMode)]).pipe(Ql.tag("checkForEndOfStream"), an(([,e,t,i,r])=>"open" === e && !1 === t && !i && r), Ja(([e])=>{ + null != e[0] && e.every(e=>null == e || !1 === e.liveOrEvent && !1 === e.iframesOnly) && !n.inGaplessMode && t.endStream() + } + ), Ua(Ti)) + }() + , c = function() { + const {config: o, iframeMachine: d, mediaSink: t} = a + , l = t.mediaQuery; + return l.desiredRate$.pipe(Ra(a=>jp(a) ? vn(0, Math.abs(1e3 / a)).pipe(ur(()=>{ + let e = null; + const t = l.seekable; + if (!d.isStarted || t.length < 1) + return e; + var i = d.iframeClockTimeSeconds + , r = o.leftMediaTimeToAutoPause + , n = t.start(0) + , s = t.end(t.length - 1); + return 1 < a && s - i < r ? e = { + newRate: 0, + autoPausedRestartTime: s - r + } : a < 0 && i - n < a / -2 && (e = { + newRate: 1, + autoPausedRestartTime: n + }), + e + } + ), Up(), Ja(e=>{ + t.desiredRate = e.newRate, + t.autoPausedRestartTime = e.autoPausedRestartTime + } + ), Ua(Ti)) : Ti)) + }() + , h = (t=>{ + const {mediaSink: e, config: i} = t + , r = e.mediaQuery; + return !0 !== i.enableIFramePreloading ? Ti : r.desiredRate$.pipe(ur(jp), Es(), Ra(e=>e ? Ti : function(r) { + const {mediaSink: e, rootPlaylistQuery: n, mediaLibraryService: s, logger: a, config: o} = r + , d = e.mediaQuery; + return d.waterLevelChangedForType$(cl.Variant).pipe(an(e=>e === kp.AboveHighWater), Ls(()=>n.enabledMediaOptionByType$(ul.Variant).pipe(Ra(e=>{ + var t = n.mediaOptionListQueries[ul.Variant].hasIframes + , i = null !== (i = null === (i = s.getQuery().getEntity(n.itemId)) || void 0 === i ? void 0 : i.liveOrEvent) && void 0 !== i && i; + return !t || i ? Ti : (i = Uf(n.itemId), + e = pg(e), + i = Dg(!0, o, n, e, d, i, a), + i = n.variantMediaOptionById(i.variantMediaOption), + fg(r, i)) + } + ), Ra(e=>{ + var t = og(d.currentTime, n.discoSeqNum, 0, e, []); + return null !== (e = null == t ? void 0 : t.foundFrag) && void 0 !== e && e.mediaFragment ? (t = t.foundFrag.mediaFragment, + nn(Sg(r, t.keyTagInfo, { + itemId: t.itemId, + mediaOptionId: t.mediaOptionId + }), mg(r, t))) : (a.warn(Vg, "Unable to find fragment for iframe prefetch"), + Ti) + } + ), Cs(1), Ua(Ti), Un(e=>(a.error(Vg, `got error ${e.message} in prefetch`), + Ti)), $s(()=>{} + )))) + }(t))) + } + )(a) + , p = [s, r, o, l, $l(Zd([n.gotPlaying$, n.gotLoadStart$, n.readyState$]), ([e,t,i])=>!0 === e || !0 === t || 1 <= i).pipe(Ra(()=>n.ended$), Ra(e=>vn(0, e ? void 0 : 1e3)), Ja(()=>{ + this.playbackInfo(f, n) + } + )), c, h, n.timeupdate$.pipe(ur(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), u]; + if (f.enablePerformanceLogging) { + const a = bn(...Ml.map(r=>t.getInFlightFragByType$(r).pipe(Up(), Es((e,t)=>e.state === t.state), So(n.bufferedRangeTuple$), Ja(([e,t])=>{ + const i = Object.assign(Object.assign({}, e), { + name: Cl[r], + buffered: void 0 + }); + "appended" === e.state && (i.buffered = t) + } + )))); + p.push(a) + } + return nn(...p) + } + )), c = this.itemQueue.removedItems$.pipe(od(e=>{ + var t; + t = e, + hg().remove(t), + this.rootPlaylistService.removeItems(e) + } + )), D = h.getQuery().userSeek$.pipe((b = this.itemQueue, + T = this.rootPlaylistService, + e=>e.pipe(Up(), Ra(e=>Jr([Bi(e), b.activeItemById$.pipe(Up(), Ra(e=>T.getQueryForId(e.itemId).rootPlaylistEntity$), Cs(1))])), ur(([e,t])=>(T.setPendingSeek(t.itemId, e), + e))))), M = h.getQuery().selectEntityAction(To.Add).pipe(Ja(()=>{ + this.logger.warn(`new Hls instance added while old one still active sessionId:${r}`) + } + )); + nn(v.pipe(Un(e=>{ + var t; + return e instanceof MediaError && (null === (t = this.rtcService) || void 0 === t || t.handleMediaElementError(e)), + Ti + } + )), nn(y, D, S, c, u, this.teardownWorker$).pipe(Un(e=>this._handleError(e)))).pipe($s(()=>{ + 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(), + hg().clear(), + this.rootPlaylistService.removeAll(), + this.itemQueue.clearQueue(), + h.removeEntity(this.sessionID) + } catch (e) { + this.logger.error(`Got error in finalize ${e.message}`) + } + } + ), $a(hn(this.destroy$, M))).subscribe() + } + get publicQueries$() { + return this.publicQueriesInternal$.pipe(an(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.141.0" + } + static get Events() { + return P + } + get Events() { + return Vy.Events + } + static get DefaultConfig() { + return de(Al) + } + get DefaultConfig() { + return Vy.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 = Ul; + if (this.mediaElementAdapter) { + const r = this.mediaElementAdapter.mediaQuery + , n = r.getCombinedBufferInfo(r.currentTime, 0); + 0 < (null == n ? void 0 : n.len) && (e = $l(this.mediaElementAdapter.mediaQuery.stallInfo$, e=>null != e).pipe(ur(()=>{} + ))) + } + return e.pipe(Ra(()=>(this.trigger(P.ERROR, t), + Ti))) + } + this.trigger(P.ERROR, t) + } catch (i) { + throw this.logger.error(`Error thrown inside _handleError ${i.message}`, i), + i + } + return Ti + } + updateLiveSeekableRange(e, t) { + return e.enabledMediaOptionByType$(ul.Variant).pipe(Ra(e=>{ + const t = pg(e); + let i = 0; + return t.mediaOptionDetailsEntity$.pipe(Up(), an(e=>{ + var t = null !== e.stats && !1 === e.detailsLoading && e.lastUpdateMillis > i; + return i = null !== (e = e.lastUpdateMillis) && void 0 !== e ? e : 0, + t + } + )) + } + ), Ra(e=>(0 === e.unchangedCount && (e.mediaOptionDetails.liveOrEvent ? t.updateLiveSeekableRange(e.mediaOptionDetails) : t.clearLiveSeekableRange()), + Ti))) + } + 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: Kf.timeRangeToArray(n.seekable), + loadedTimeRanges: Kf.timeRangeToArray(n.buffered) + }; + let e = 0 + , t = 0; + if (Kf.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 + Kf.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 (this.iframeMachine && this.iframeMachine.isStarted) { + const r = t.mediaElementDuration + , e = this.iframeMachine.iframeClockTimeSeconds; + return e > r ? r : e + } + let i = null !== (e = null == t ? void 0 : t.currentTime) && void 0 !== e ? e : NaN; + 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 = hg().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; + 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); + e = fl.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 !== (r = null == i ? void 0 : i.appData) && void 0 !== r && r.reportingAgent && (this.reportingAgent = i.appData.reportingAgent), + null != i && i.userInfo && (this.userInfo = i.userInfo), + null === (r = this.accessLogInstance) || void 0 === r || r.setupReporter(i.appData), + null != i && i.platformInfo && this.platformService.updatePlatformInfo(i.platformInfo), + this.itemQueue.setQueueItem(`item:${null !== (r = null == i ? void 0 : i.itemId) && void 0 !== r ? r : Jd()}`, e, t, null == i ? void 0 : i.platformInfo, null === (t = null == i ? void 0 : i.appData) || void 0 === t ? void 0 : t.serviceName), + Xm().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 : Jd()}`, 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(cl.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: oe(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(cl.Variant, this.loadingItem.itemStartOffset, 1 / 0), + this.mediaElementAdapter.msDuration = this.loadingItem.itemStartOffset, + this.itemQueue.resetLoadingItem()) + } + get inGaplessMode() { + return this.config.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() { + var e; + return this.destroy$.next(), + null != this.rpcService && this.rpcService.teardown(), + null !== (e = this.encryptedMediaElement$.getValue()) && void 0 !== e && e.updating ? this.encryptedMediaElement$.getValue().done$.pipe(an(e=>e), Cs(2), Ra(e=>(this.encryptedMediaElement$.next(null), + this.teardownWorker$.complete(), + this.teardownWorker$))) : (this.encryptedMediaElement$.next(null), + this.teardownWorker$.complete(), + this.teardownWorker$) + } + attachMedia(e) { + this.trigger(P.MEDIA_ATTACHING, { + media: e + }), + this.mediaElement$.next(e), + this.encryptedMediaElement$.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(), + 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(Ra(e=>{ + const [t,i] = e; + return Cr([t.preferredMediaOptions$, i.desiredRate$]).pipe(ur(([e])=>{ + const t = i.isIframeRate; + return e[ul.Variant].filter(e=>(null !== (e = e.iframes) && void 0 !== e && e) === t).map(e=>e.mediaOptionId) + } + )) + } + )) + } + get altAudioOptions$() { + return this.publicQueries$.pipe(Ra(e=>{ + var [e] = e; + return Bi(e.audioMediaSelectionOptions) + } + )) + } + get subtitleOptions$() { + return this.publicQueries$.pipe(Ra(e=>{ + var [e] = e; + return Bi([{ + 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[ul.Variant]) && void 0 !== e ? e : [] + } + get audioTracks() { + var e; + return null !== (e = null === (e = this._activeRootQuery) || void 0 === e ? void 0 : e.preferredMediaOptions[ul.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(Ra(e=>{ + var [,e] = e; + return e.mediaElementDuration$ + } + )) + } + get timeupdate$() { + return this.publicQueries$.pipe(Ra(e=>{ + var [,e] = e; + return e.timeupdate$ + } + )) + } + get playing$() { + return this.publicQueries$.pipe(Ra(e=>{ + var [,e] = e; + return e.gotPlaying$ + } + )) + } + get desiredRate$() { + return this.publicQueries$.pipe(Ra(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) { + const t = this.logger.child({ + name: "iframes" + }); + if (e === this.desiredRate) + return -2; + if (!this.mediaElementAdapter || isNaN(e)) + return t.warn("unable to switch to rate, missing adapter or newRate isNaN"), + -1; + e = Number(e); + const i = Math.abs(e); + if (!this.supportedFrameRates.some(e=>e === i)) + return t.warn(`unsupported rate(${e})`), + -3; + if (jp(e)) { + const e = this._activeRootQuery; + if (null == e || !e.mediaOptionListQueries[ul.Variant].hasIframes) + return t.warn("no iframe variants available"), + -1 + } + return this.mediaElementAdapter.desiredRate = e, + 0 + } + get sessionData$() { + return this.publicQueries$.pipe(Ra(([e])=>e.sessionData$)) + } + set skip(e) { + this.mediaElementAdapter.skip = 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")), + Xm().setUserSeek(e) + } + set seekTo(e) { + var t = Number(e); + ne(t) ? this.inGaplessMode ? this.gaplessSeekTo(t) : Xm().setUserSeek(t) : this.logger.error(`[seek] got invalid seek value ${e}`) + } + seekToDate(e) { + Xm().setUserSeek(e) + } + get availableProgramDateTime() { + return new Map(this._currentDateToMediaTimeTuple) + } + get _currentDateToMediaTimeTuple() { + if (!this._activeRootQuery) + return []; + var e = this._activeRootQuery.enabledMediaOptionKeys[ul.Variant]; + return kl(e) && null !== (e = null === (e = hg().getQueryForOption(e).mediaOptionDetails) || void 0 === e ? void 0 : e.dateMediaTimePairs) && void 0 !== e ? e : [] + } + get playingDate() { + return Gg(this._currentDateToMediaTimeTuple, this.realCurrentTime) + } + set variantId(e) {} + set audioSelectedPersistentID(e) { + var t = this._activeRootQuery; + null != t && t.preferredMediaOptions[ul.AltAudio] ? (t = t.itemId, + this.rootPlaylistService.setEnabledMediaOptionTupleWithMatchedGroups(t, ul.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(ul.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[ul.Subtitle]; + i ? (t = t.itemId, + 0 === i.length && (!ne(e) || e < 0) || (ne(e) && -1 !== e ? this.rootPlaylistService.setEnabledMediaOptionTupleWithMatchedGroups(t, ul.Subtitle, e) : this.rootPlaylistService.setEnabledMediaOptionByType(t, ul.Subtitle, Ol))) : !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(ul.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(ul.AltAudio) + , r = e.enabledAlternateMediaOptionByType(ul.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: pl.AUDIO, + MediaSelectionOptionsPersistentID: n.MediaSelectionOptionsPersistentID + }; + t.push(e) + } + if (s) { + let e = hl.NO; + s.MediaSelectionOptionsDisplaysNonForcedSubtitles && (e = s.MediaSelectionOptionsDisplaysNonForcedSubtitles); + const i = { + MediaSelectionGroupMediaType: pl.SUBTITLE, + MediaSelectionOptionsDisplaysNonForcedSubtitles: e, + MediaSelectionOptionsPersistentID: s.MediaSelectionOptionsPersistentID + }; + t.push(i) + } + return t + } + set selectedMediaArray(e) { + this._activeRootQuery ? e.forEach(e=>{ + e.MediaSelectionGroupMediaType === pl.AUDIO || e.MediaSelectionOptionsMediaType === pl.AUDIO ? this.audioSelectedPersistentID = e.MediaSelectionOptionsPersistentID : e.MediaSelectionGroupMediaType !== pl.SUBTITLE && e.MediaSelectionOptionsMediaType !== pl.SUBTITLE && e.MediaSelectionOptionsMediaType !== pl.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(Ra(e=>{ + const [,t] = e + , i = Xm().getQuery().currentConfig; + return nn(t.timeupdate$, t.bufferedRangeTuple$).pipe(so(1e3), ur(()=>{ + var e = t.currentTime; + return { + combined: t.getCombinedBufferInfo(e, i.maxBufferHole), + sbTuple: t.getBufferInfo(e, i.maxBufferHole) + } + } + )) + } + )) + } + bufferInfoByType$(t) { + return this.bufferInfo$.pipe(ur(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(Ym())), { + set startPosition(e) { + qe().warn(`Setting start position ${null == e ? void 0 : e.toFixed(3)} using deprecated method`), + Xm().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 + diff --git a/resources/cider-ui-tests/views/components/animatedartwork-view.ejs b/resources/cider-ui-tests/views/components/animatedartwork-view.ejs index ef464f00..55eae66d 100644 --- a/resources/cider-ui-tests/views/components/animatedartwork-view.ejs +++ b/resources/cider-ui-tests/views/components/animatedartwork-view.ejs @@ -31,8 +31,18 @@ } // bind them together if (this.$refs.video) { + let d = "WIDEVINE_SOFTWARE" + let h = { + initDataTypes: ["cenc", "keyids"], + distinctiveIdentifier: "optional", + persistentState: "required" + } + let p = { + platformInfo: {requiresCDMAttachOnStart: !0, maxSecurityLevel: d, keySystemConfig: h}, + appData: {serviceName: "Apple Music"} + } this.hls.attachMedia(this.$refs.video); - this.hls.loadSource(this.video); + this.hls.loadSource(this.video, p); this.hls.loadLevel = 4; } }) diff --git a/resources/cider-ui-tests/views/main.ejs b/resources/cider-ui-tests/views/main.ejs index c1fe50d2..cd9ee756 100644 --- a/resources/cider-ui-tests/views/main.ejs +++ b/resources/cider-ui-tests/views/main.ejs @@ -22,6 +22,7 @@ + @@ -500,8 +501,8 @@ - + \ No newline at end of file diff --git a/resources/functions/cider-base.js b/resources/functions/cider-base.js index 2f5633d9..47b25153 100644 --- a/resources/functions/cider-base.js +++ b/resources/functions/cider-base.js @@ -1,4 +1,4 @@ -const {app, BrowserWindow, ipcMain} = require("electron") +const {app, BrowserWindow, ipcMain, protocol} = require("electron") const {join, resolve} = require("path") const getPort = require("get-port"); const express = require("express"); @@ -52,6 +52,18 @@ const CiderBase = { win = new BrowserWindow(options) } + // intercept "https://js-cdn.music.apple.com/hls.js/2.141.0/hls.js/hls.js" and redirect to local file "./apple-hls.js" instead + win.webContents.session.webRequest.onBeforeRequest( + { + urls: ["https://js-cdn.music.apple.com/hls.js/2.141.0/hls.js/hls.js"] + }, + (details, callback) => { + callback({ + redirectURL: "http://localhost:9000/apple-hls.js" + }) + } + ) + let location = "http://localhost:9000/" win.loadURL(location) win.on("closed", () => {