@kkcompany/ott-player 0.5.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +294 -0
- package/README.md +25 -0
- package/dist/index.cjs +1364 -0
- package/dist/index.mjs +1324 -0
- package/package.json +46 -0
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,1324 @@
|
|
|
1
|
+
import { castMedia, createApi, dispatchChapterEvents, ensureTabLock, getContentInfo, handleIOSHeadphonesDisconnection, initSender, linkCast, selectHlsQualities, selectHlsQualities as selectHlsQualities$1, stopCast, subscribeCastState, subscribeCastState as subscribeCastState$1, validateEnvironment } from "@kkcompany/player/modules";
|
|
2
|
+
import { AutoplayPrompt, Button, CastSender, ClassicSettingsContainer, CoverImage, DEBUG_OPTIONS, InfoBarExtension, LiveEnd, MenuItem, PremiumPlayer, SkipButton, setupLicenseServerOverride } from "@kkcompany/player/react";
|
|
3
|
+
import { ImaDaiPlugin } from "@kkcompany/player/plugins";
|
|
4
|
+
import { getMediaTime, isLiveDuration } from "@kkcompany/player/core";
|
|
5
|
+
import { useCallback, useEffect, useImperativeHandle, useMemo, useReducer, useRef, useState } from "react";
|
|
6
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import axios from "axios";
|
|
8
|
+
|
|
9
|
+
//#region src/ui/icon.js
|
|
10
|
+
var icon_default = {
|
|
11
|
+
pause: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMSA2QzkuODk1NDMgNiA5IDYuODk1NDMgOSA4VjQwQzkgNDEuMTA0NiA5Ljg5NTQzIDQyIDExIDQySDE3QzE4LjEwNDYgNDIgMTkgNDEuMTA0NiAxOSA0MFY4QzE5IDYuODk1NDMgMTguMTA0NiA2IDE3IDZIMTFaTTMxIDZDMjkuODk1NCA2IDI5IDYuODk1NDMgMjkgOFY0MEMyOSA0MS4xMDQ2IDI5Ljg5NTQgNDIgMzEgNDJIMzdDMzguMTA0NiA0MiAzOSA0MS4xMDQ2IDM5IDQwVjhDMzkgNi44OTU0MyAzOC4xMDQ2IDYgMzcgNkgzMVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
|
|
12
|
+
firstplay: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI0IDQuNzk5OTlDMTMuMzk2OCA0Ljc5OTk5IDQuNzk5OTkgMTMuMzk2OCA0Ljc5OTk5IDI0QzQuNzk5OTkgMzQuNjAzMiAxMy4zOTY4IDQzLjIgMjQgNDMuMkMzNC42MDMyIDQzLjIgNDMuMiAzNC42MDMyIDQzLjIgMjRDNDMuMiAxMy4zOTY4IDM0LjYwMzIgNC43OTk5OSAyNCA0Ljc5OTk5Wk0zMi40ODY0IDI0LjY0MzJMMjAuMzEzNiAzMS42NzA0QzE5LjcwMDggMzIuMDI0IDE5LjIgMzEuNzM0NCAxOS4yIDMxLjAyNzJWMTYuOTcxMkMxOS4yIDE2LjI2NCAxOS43MDA4IDE1Ljk3NDQgMjAuMzEzNiAxNi4zMjhMMzIuNDg2NCAyMy4zNTUyQzMzLjA5OTIgMjMuNzEwNCAzMy4wOTkyIDI0LjI4OTYgMzIuNDg2NCAyNC42NDMyWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
|
|
13
|
+
play: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCA4LjUxMzQ3QzEwIDYuOTYzIDExLjY4NzkgNi4wMDIxOSAxMy4wMjExIDYuNzkzNzZMMzkuMTAzNiAyMi4yODAzQzQwLjQwODkgMjMuMDU1MyA0MC40MDg5IDI0Ljk0NDcgMzkuMTAzNiAyNS43MTk3TDEzLjAyMTEgNDEuMjA2MkMxMS42ODc5IDQxLjk5NzggMTAgNDEuMDM3IDEwIDM5LjQ4NjVWOC41MTM0N1oiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
|
|
14
|
+
replay: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCI+PGRlZnM+PGZpbHRlciBpZD0iYSIgaGVpZ2h0PSIxNTAlIj48ZmVHYXVzc2lhbkJsdXIgaW49IlNvdXJjZUFscGhhIiBzdGREZXZpYXRpb249IjMiLz48ZmVPZmZzZXQgZHg9IjIiIGR5PSIyIiByZXN1bHQ9Im9mZnNldGJsdXIiLz48ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVGdW5jQSB0eXBlPSJsaW5lYXIiIHNsb3BlPSIuNyIvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVNZXJnZT48ZmVNZXJnZU5vZGUvPjxmZU1lcmdlTm9kZSBpbj0iU291cmNlR3JhcGhpYyIvPjwvZmVNZXJnZT48L2ZpbHRlcj48L2RlZnM+PGcgZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBmaWx0ZXI9InVybCgjYSkiPjxwYXRoIGQ9Ik00MC41IDl2OC45YTI1LjYgMjUuNiAwIDEgMS0yNS42IDI0LjVINnYxLjFBMzQuNSAzNC41IDAgMSAwIDQwLjUgOXoiLz48cGF0aCBkPSJNNDAgMHYyN0wyMCAxMy41eiIvPjwvZz48L3N2Zz4=",
|
|
15
|
+
back: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMC43Mjc5IDguNDQzMTJMNi41ODU3NiAyMi41ODUzQzUuODA0NzEgMjMuMzY2MyA1LjgwNDcxIDI0LjYzMjYgNi41ODU3NiAyNS40MTM3TDIwLjcyNzkgMzkuNTU1OEMyMS41MDg5IDQwLjMzNjkgMjIuNzc1MyA0MC4zMzY5IDIzLjU1NjMgMzkuNTU1OEMyNC4zMzc0IDM4Ljc3NDggMjQuMzM3NCAzNy41MDg0IDIzLjU1NjMgMzYuNzI3NEwxMi44Mjg0IDI1Ljk5OTVIMzkuOTk5QzQxLjEwMzUgMjUuOTk5NSA0MS45OTkgMjUuMTA0IDQxLjk5OSAyMy45OTk1QzQxLjk5OSAyMi44OTQ5IDQxLjEwMzUgMjEuOTk5NSAzOS45OTkgMjEuOTk5NUgxMi44Mjg0TDIzLjU1NjMgMTEuMjcxNUMyNC4zMzc0IDEwLjQ5MDUgMjQuMzM3NCA5LjIyNDE2IDIzLjU1NjMgOC40NDMxMkMyMi43NzUzIDcuNjYyMDcgMjEuNTA4OSA3LjY2MjA3IDIwLjcyNzkgOC40NDMxMloiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
|
|
16
|
+
forward10: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQyLjExODYgMjQuMzU1MkM0MC44MDgyIDI0LjM1NTIgMzkuNzM2MiAyNS40MjczIDM5LjczNjIgMjYuNzM3NkMzOS43MzYyIDM1LjI3ODUgMzIuNzkxNCA0Mi4yMjMzIDI0LjI1MDUgNDIuMjIzM0MxNS43MDk1IDQyLjIyMzMgOC43NjQ4MiAzNS4yNzg1IDguNzY0ODIgMjYuNzM3NkM4Ljc2NDgyIDE4LjE5NjcgMTUuMDc4MiAxMS45MTkgMjMuMDU5MyAxMS4zMTE1VjE0LjM2MUMyMy4wNTkzIDE1LjgxNDMgMjQuNjkxMiAxNi42NiAyNS44NzA1IDE1LjgyNjJMMzQuMDg5OCAxMC4wMzY5QzM1LjEwMjQgOS4zMjIxOSAzNS4xMDI0IDcuODMzMTggMzQuMDg5OCA3LjExODQ2TDI1Ljg3MDUgMS4zMjkyQzI0LjY5MTIgMC40OTUzNTcgMjMuMDU5MyAxLjM0MTExIDIzLjA1OTMgMi43OTQzOFY2LjU1ODU5QzEyLjQ0NTYgNy4xNzgwMiA0IDE1Ljk4MSA0IDI2Ljc0OTVDNCAzNy41MTggMTMuMDg4OSA0NyAyNC4yNTA1IDQ3QzM1LjQxMjEgNDcgNDQuNTAxIDM3LjkxMTEgNDQuNTAxIDI2Ljc0OTVDNDQuNTAxIDI1LjQzOTIgNDMuNDI4OSAyNC4zNjcxIDQyLjExODYgMjQuMzY3MVYyNC4zNTUyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTE4LjQ5NjkgMzQuMTk0NUgxOC45NDk2QzE5LjYwNDcgMzQuMTk0NSAyMC4xNDA4IDMzLjY1ODUgMjAuMTQwOCAzMy4wMDMzVjIwLjk2MDJDMjAuMTQwOCAyMC4zMDUxIDE5LjYwNDcgMTkuNzY5IDE4Ljk0OTYgMTkuNzY5SDE4LjU1NjVDMTguMzA2MyAxOS43NjkgMTguMDU2MiAxOS44NTI0IDE3Ljg1MzcgMTkuOTk1NEwxNC40ODI1IDIyLjQ0OTNDMTQuMjIwNSAyMi42Mzk4IDE0LjA1MzcgMjIuOTI1NyAxNC4wMDYxIDIzLjIzNTRDMTMuOTU4NCAyMy41NTcxIDE0LjA0MTggMjMuODc4NyAxNC4yMzI0IDI0LjEyODlMMTQuNTA2NCAyNC40ODYyQzE0Ljg5OTUgMjUuMDEwMyAxNS42MzggMjUuMTE3NiAxNi4xNjIxIDI0LjcyNDVMMTcuMzA1NyAyMy44Nzg3VjMyLjk5MTRDMTcuMzA1NyAzMy42NDY2IDE3Ljg0MTcgMzQuMTgyNiAxOC40OTY5IDM0LjE4MjZWMzQuMTk0NVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0yOC40NDM1IDE5LjY4NTdDMjcuMTY5IDE5LjY4NTcgMjYuMTIwNyAyMC4wNjY5IDI1LjMzNDUgMjAuODA1NEMyNC42MDc5IDIxLjQ4NDQgMjQuMDgzNyAyMi40MTM1IDIzLjc4NTkgMjMuNTQ1MkMyMy41MjM5IDI0LjU1NzcgMjMuMzgwOSAyNS43MjUxIDIzLjM4MDkgMjcuMDExNkMyMy4zODA5IDI5LjM5NCAyMy43NzQgMzEuMTMzMSAyNC41NzIxIDMyLjM2MDFDMjUuNDUzNiAzMy42OTQyIDI2Ljc4NzggMzQuNDA5IDI4LjQzMTYgMzQuNDA5QzMwLjA3NTUgMzQuNDA5IDMxLjQ5MyAzMy42ODIzIDMyLjMzODggMzIuMjg4NkMzMy4wODkyIDMxLjA2MTcgMzMuNDU4NSAyOS4zMzQ0IDMzLjQ1ODUgMjcuMDExNkMzMy40NTg1IDI1LjcwMTMgMzMuMzM5NCAyNC41MzM5IDMzLjEwMTIgMjMuNTMzM0MzMi44MjcyIDIyLjM4OTcgMzIuMzI2OSAyMS40NzI1IDMxLjYwMDIgMjAuNzkzNUMzMC44MjYgMjAuMDY2OSAyOS43NjU4IDE5LjY5NzYgMjguNDU1NSAxOS42OTc2TDI4LjQ0MzUgMTkuNjg1N1pNMjkuOTU2NCAzMC43NjM5QzI5LjczIDMxLjE1NyAyOS4zNzI3IDMxLjU3MzkgMjguNDE5NyAzMS41NzM5QzI3LjcxNjkgMzEuNTczOSAyNy4yNjQyIDMxLjMyMzcgMjYuOTA2OSAzMC43NDAxQzI2LjU5NzIgMzAuMjI3OCAyNi4yMjc5IDI5LjE2NzcgMjYuMjI3OSAyNy4wMTE2QzI2LjIyNzkgMjYuMDExIDI2LjMyMzIgMjUuMTE3NiAyNi41MDE5IDI0LjM1NTJDMjYuNjU2NyAyMy43MjM5IDI2LjkwNjkgMjMuMjM1NSAyNy4yNDA0IDIyLjkxMzhDMjcuNTAyNSAyMi42NTE4IDI3Ljg5NTYgMjIuNTIwNyAyOC40NDM1IDIyLjUyMDdDMjguOTkxNSAyMi41MjA3IDI5LjQwODQgMjIuNjM5OSAyOS42NzA1IDIyLjg5QzI5Ljk4MDIgMjMuMTk5NyAzMC4yMTg0IDIzLjY2NDMgMzAuMzQ5NSAyNC4yODM3QzMwLjUxNjIgMjUuMDQ2MSAzMC42MTE1IDI1Ljk2MzMgMzAuNjExNSAyNy4wMTE2QzMwLjYxMTUgMjkuMTY3NyAzMC4yNjYxIDMwLjIzOTcgMjkuOTY4MyAzMC43NjM5SDI5Ljk1NjRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K",
|
|
17
|
+
rewind10: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI1LjQ0NzIgNi41NjAwM1YyLjc5NDg1QzI1LjQ0NzIgMS4zNDEyIDIzLjgxNDkgMC40OTUyMjYgMjIuNjM1MyAxLjMyOTI5TDE0LjQxMzggNy4xMjAwNEMxMy40MDEgNy44MzQ5NSAxMy40MDEgOS4zMjQzNCAxNC40MTM4IDEwLjAzOTNMMjIuNjM1MyAxNS44M0MyMy44MTQ5IDE2LjY2NDEgMjUuNDQ3MiAxNS44MTgxIDI1LjQ0NzIgMTQuMzY0NFYxMS4zMTQyQzMzLjQzMDQgMTEuOTIxOCAzOS43NDU0IDE4LjYwNjIgMzkuNzQ1NCAyNi43NDQzQzM5Ljc0NTQgMzUuMjg3NCAzMi43OTg5IDQyLjIzMzkgMjQuMjU1NyA0Mi4yMzM5QzE1LjcxMjYgNDIuMjMzOSA4Ljc2NjA1IDM1LjI4NzQgOC43NjYwNSAyNi43NDQzQzguNzY2MDUgMjUuNDMzNiA3LjY5MzY5IDI0LjM2MTIgNi4zODMwMyAyNC4zNjEyQzUuMDcyMzYgMjQuMzYxMiA0IDI1LjQzMzYgNCAyNi43NDQzQzQgMzcuOTA4OCAxMy4wOTEyIDQ3IDI0LjI1NTcgNDdDMzUuNDIwMiA0NyA0NC41MTE1IDM3LjkwODggNDQuNTExNSAyNi43NDQzQzQ0LjUxMTUgMTUuNTc5OCAzNi4wNjM2IDcuMTY3NyAyNS40NDcyIDYuNTQ4MTJWNi41NjAwM1oiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xOC41MDA3IDM0LjIxNUgxOC45NTM1QzE5LjYwODggMzQuMjE1IDIwLjE0NSAzMy42Nzg4IDIwLjE0NSAzMy4wMjM1VjIwLjk3NzNDMjAuMTQ1IDIwLjMyMTkgMTkuNjA4OCAxOS43ODU4IDE4Ljk1MzUgMTkuNzg1OEgxOC41NjAzQzE4LjMxMDEgMTkuNzg1OCAxOC4wNTk4IDE5Ljg2OTIgMTcuODU3MyAyMC4wMTIyTDE0LjQ4NTMgMjIuNDY2N0MxNC4yMjMyIDIyLjY1NzMgMTQuMDU2NCAyMi45NDMzIDE0LjAwODcgMjMuMjUzMUMxMy45NjEgMjMuNTc0OCAxNC4wNDQ0IDIzLjg5NjUgMTQuMjM1MSAyNC4xNDY3TDE0LjUwOTEgMjQuNTA0MkMxNC45MDIzIDI1LjAyODQgMTUuNjQxMSAyNS4xMzU3IDE2LjE2NTMgMjQuNzQyNUwxNy4zMDkyIDIzLjg5NjVWMzMuMDExNkMxNy4zMDkyIDMzLjY2NjkgMTcuODQ1NCAzNC4yMDMxIDE4LjUwMDcgMzQuMjAzMVYzNC4yMTVaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMjguNDM4IDM0LjQyOTVDMzAuMTUzOCAzNC40Mjk1IDMxLjUwMDIgMzMuNzAyNyAzMi4zNDYyIDMyLjMwODdDMzMuMDk2OCAzMS4wODE0IDMzLjQ2NjIgMjkuMzUzNyAzMy40NjYyIDI3LjAzMDJDMzMuNDY2MiAyNS43MTk2IDMzLjM0NyAyNC41NTE5IDMzLjEwODcgMjMuNTUxQzMyLjgzNDcgMjIuNDA3MiAzMi4zMzQyIDIxLjQ4OTcgMzEuNjA3NCAyMC44MTA1QzMwLjgzMjkgMjAuMDgzNyAyOS43NzI1IDE5LjcxNDQgMjguNDYxOCAxOS43MTQ0QzI3LjE1MTIgMTkuNzE0NCAyNi4xMzg0IDIwLjA5NTYgMjUuMzUyIDIwLjgzNDRDMjQuNjI1MSAyMS41MTM1IDI0LjEwMDkgMjIuNDQyOSAyMy44MDMgMjMuNTc0OUMyMy41NDA5IDI0LjU4NzYgMjMuMzk3OSAyNS43NTUzIDIzLjM5NzkgMjcuMDQyMkMyMy4zOTc5IDI5LjQyNTIgMjMuNzkxMSAzMS4xNjQ4IDI0LjU4OTQgMzIuMzkyMUMyNS40NzExIDMzLjcyNjYgMjYuODA1NiAzNC40NDE1IDI4LjQ0OTkgMzQuNDQxNUwyOC40MzggMzQuNDI5NVpNMjYuNTE5NyAyNC4zODUxQzI2LjY3NDUgMjMuNzUzNiAyNi45MjQ4IDIzLjI2NTEgMjcuMjU4NCAyMi45NDM0QzI3LjUyMDUgMjIuNjgxMiAyNy45MTM3IDIyLjU1MDIgMjguNDYxOCAyMi41NTAyQzI5LjAwOTkgMjIuNTUwMiAyOS40MjY5IDIyLjY2OTMgMjkuNjg5MSAyMi45MTk1QzI5Ljk5ODkgMjMuMjI5MyAzMC4yMzcyIDIzLjY5NCAzMC4zNjgyIDI0LjMxMzZDMzAuNTM1MSAyNS4wNzYyIDMwLjYzMDQgMjUuOTkzNiAzMC42MzA0IDI3LjA0MjJDMzAuNjMwNCAyOS4xOTg4IDMwLjI4NDggMzAuMjcxMiAyOS45ODcgMzAuNzk1NEMyOS43NjA2IDMxLjE4ODYgMjkuNDAzMSAzMS42MDU3IDI4LjQ0OTkgMzEuNjA1N0MyNy43NDY5IDMxLjYwNTcgMjcuMjk0MSAzMS4zNTU0IDI2LjkzNjcgMzAuNzcxNkMyNi42MjY5IDMwLjI1OTIgMjYuMjU3NSAyOS4xOTg4IDI2LjI1NzUgMjcuMDQyMkMyNi4yNTc1IDI2LjA0MTMgMjYuMzUyOCAyNS4xNDc3IDI2LjUzMTYgMjQuMzg1MUgyNi41MTk3WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
|
|
18
|
+
volumeHigh: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PSczNicgdmlld0JveD0nMCAwIDM2IDM2Jz4gPGcgZmlsbD0nbm9uZScgZmlsbC1ydWxlPSdldmVub2RkJz4gPHBhdGggZD0nTTAgMGgzNnYzNkgweicgb3BhY2l0eT0nLjUnLz4gPHBhdGggZmlsbD0nI0ZGRicgZD0nTTIxLjgwOCAxYTE2LjI2NSAxNi4yNjUgMCAwIDEgNi43NzcgMy4yMTkgMTYuOTEgMTYuOTEgMCAwIDEgNC42OTIgNS44MDJBMTYuOTYgMTYuOTYgMCAwIDEgMzUgMTcuNTQ3YzAgMi42Ni0uNTc0IDUuMTY4LTEuNzIzIDcuNTI1YTE2LjkxIDE2LjkxIDAgMCAxLTQuNjkyIDUuODAzIDE2LjI2NSAxNi4yNjUgMCAwIDEtNi43NzcgMy4yMTh2LTMuODk4YTEyLjQ1NiAxMi40NTYgMCAwIDAgNC44NS0yLjYzIDEzLjE2OCAxMy4xNjggMCAwIDAgMy4zMzMtNC40NjUgMTMuMTA5IDEzLjEwOSAwIDAgMCAxLjIwMS01LjU1M2MwLTEuOTY1LS40LTMuODE2LTEuMjAxLTUuNTU0YTEzLjE2OCAxMy4xNjggMCAwIDAtMy4zMzItNC40NjUgMTIuNDU2IDEyLjQ1NiAwIDAgMC00Ljg1MS0yLjYzVjF6Jy8+IDxwYXRoIGZpbGw9JyNGRkYnIGQ9J00yNi41MjMgMTcuNTQ3YzAgMS42NjItLjQyMyAzLjE2NS0xLjI3IDQuNTFhOC40NTMgOC40NTMgMCAwIDEtMy40NDUgMy4xMDZWOS45M2MxLjQ1LjcyNSAyLjYgMS43NiAzLjQ0NSAzLjEwNS44NDcgMS4zNDUgMS4yNyAyLjg0OCAxLjI3IDQuNTF6TTEgMTEuODhoNy41MjVMMTggMi40MDV2MzAuMjgzbC05LjQ3NS05LjQ3NUgxeicvPiA8L2c+IDwvc3ZnPg==",
|
|
19
|
+
volumeLow: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PSczNicgdmlld0JveD0nMCAwIDM2IDM2Jz4gPGcgZmlsbD0nbm9uZScgZmlsbC1ydWxlPSdldmVub2RkJz4gPHBhdGggZD0nTTAgMGgzNnYzNkgweicgb3BhY2l0eT0nLjUnLz4gPHBhdGggZmlsbD0nI0ZGRicgZD0nTTI2LjUyMyAxNy41NDdjMCAxLjY2Mi0uNDIzIDMuMTY1LTEuMjcgNC41MWE4LjQ1MyA4LjQ1MyAwIDAgMS0zLjQ0NSAzLjEwNlY5LjkzYzEuNDUuNzI1IDIuNiAxLjc2IDMuNDQ1IDMuMTA1Ljg0NyAxLjM0NSAxLjI3IDIuODQ4IDEuMjcgNC41MXpNMSAxMS44OGg3LjUyNUwxOCAyLjQwNXYzMC4yODNsLTkuNDc1LTkuNDc1SDF6Jy8+IDwvZz4gPC9zdmc+",
|
|
20
|
+
mute: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PSczNicgdmlld0JveD0nMCAwIDM2IDM2Jz4gPGcgZmlsbD0nbm9uZScgZmlsbC1ydWxlPSdldmVub2RkJz4gPHBhdGggZD0nTTAgMGgzNnYzNkgweicgb3BhY2l0eT0nLjUnLz4gPHBhdGggZmlsbD0nI0ZGRicgZD0nTTEgMTEuODhoNy41MjVMMTggMi40MDV2MzAuMjgzbC05LjQ3NS05LjQ3NUgxeicvPiA8ZyBmaWxsLXJ1bGU9J25vbnplcm8nPiA8cGF0aCBkPSdNMjAgMTFoMTR2MTRIMjB6Jy8+IDxwYXRoIGZpbGw9JyNGRkYnIGQ9J00zMS45NCAxMC45NGwyLjEyIDIuMTItMTIgMTItMi4xMi0yLjEyeicvPiA8cGF0aCBmaWxsPScjRkZGJyBkPSdNMTkuOTQgMTMuMDZsMi4xMi0yLjEyIDEyIDEyLTIuMTIgMi4xMnonLz4gPC9nPiA8L2c+IDwvc3ZnPg==",
|
|
21
|
+
setting: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI0LjM5MjQgNDYuMDJDMjIuNzU5NSA0Ni4wMiAyMS4xMTY5IDQ1LjkzMiAxOS40OTM3IDQ1Ljc1NkMxOC45MDcxIDQ1LjY5NzMgMTguNDI3OSA0NS4yODY3IDE4LjI1MTkgNDQuNzI5M0wxNi42Nzc3IDM5LjY1NDZDMTYuMzM1NSAzOS40ODg0IDE2LjAwMyAzOS4zMTI0IDE1LjY4MDQgMzkuMTE2OEMxNS42NjA4IDM5LjEwNyAxNS42NDEyIDM5LjA5NzMgMTUuNjIxNyAzOS4wNzc3QzE1LjMxODYgMzguOTAxNyAxNS4wMTU1IDM4LjcxNTkgMTQuNzIyMSAzOC41MTA2TDkuNTMwMDcgMzkuNjgzOUM4Ljk2Mjk1IDM5LjgxMTEgOC4zNjY1IDM5LjU4NjIgOC4wMjQyNyAzOS4xMTY4QzYuMDk4MDMgMzYuNDc2OCA0LjQ0NTU3IDMzLjYyMTcgMy4xMjU1NiAzMC42Mjk2QzIuODkwODkgMzAuMDkxOCAyLjk4ODY3IDI5LjQ2NjEgMy4zODk1NiAyOS4wNDU2TDcuMDE3MTUgMjUuMTI0N0M2Ljk2ODI2IDI0LjM4MTYgNi45NjgyNiAyMy42Mzg0IDcuMDE3MTUgMjIuODk1M0wzLjM5OTM0IDE4Ljk3NDRDMi45OTg0NCAxOC41NDQyIDIuOTAwNjcgMTcuOTE4NCAzLjEzNTM0IDE3LjM4MDZDNC40NjUxMyAxNC4zODg2IDYuMTA3ODEgMTEuNTMzNCA4LjAzNDA1IDguOTAzMThDOC4zNzYyOCA4LjQzMzg0IDguOTcyNzMgOC4yMDg5NSA5LjUzOTg0IDguMzM2MDZMMTQuNzUxNSA5LjUwOTQxQzE1LjM2NzUgOS4wOTg3NCAxNi4wMTI4IDguNzI3MTggMTYuNjg3NSA4LjM5NDczTDE4LjI3MTUgMy4yOTA2OEMxOC40NDc1IDIuNzMzMzQgMTguOTM2NCAyLjMzMjQ1IDE5LjUxMzMgMi4yNjRDMjIuNzY5MyAxLjkxMiAyNi4wNjQ1IDEuOTEyIDI5LjMxMDcgMi4yNjRDMjkuODk3NCAyLjMyMjY3IDMwLjM3NjUgMi43MzMzNCAzMC41NTI1IDMuMjkwNjhMMzIuMTI2NyA4LjM2NTRDMzIuODAxNCA4LjY5Nzg1IDMzLjQ2NjMgOS4wNzkxOCAzNC4wOTIxIDkuNDk5NjNMMzkuMjc0NCA4LjMyNjI5QzM5Ljg1MTMgOC4xOTkxNyA0MC40Mzc5IDguNDI0MDYgNDAuNzgwMiA4Ljg5MzRDNDIuNzA2NCAxMS41MzM0IDQ0LjM1ODkgMTQuMzg4NiA0NS42Nzg5IDE3LjM4MDZDNDUuOTEzNSAxNy45MTg0IDQ1LjgxNTggMTguNTM0NCA0NS40MTQ5IDE4Ljk2NDZMNDEuNzg3MyAyMi44ODU1QzQxLjgzNjIgMjMuNjI4NyA0MS44MzYyIDI0LjM3MTggNDEuNzg3MyAyNS4xMTQ5TDQ1LjQwNTEgMjkuMDM1OEM0NS44MDYgMjkuNDY2MSA0NS45MDM4IDMwLjA5MTggNDUuNjY5MSAzMC42Mjk2QzQ1LjAwNDIgMzIuMTE1OSA0NC4yNjExIDMzLjU5MjMgNDMuNDQ5NSAzNS4wMDAzQzQyLjYzOCAzNi40MDgzIDQxLjczODQgMzcuNzk2OCA0MC43NzA0IDM5LjEwN0M0MC40MjgyIDM5LjU3NjQgMzkuODMxNyAzOS44MDEzIDM5LjI2NDYgMzkuNjc0MkwzNC4wNjI4IDM4LjUwMDhDMzMuNDQ2OCAzOC45MTE1IDMyLjgwMTQgMzkuMjgzIDMyLjEyNjcgMzkuNjE1NUwzMC41NDI3IDQ0LjcwOThDMzAuMzY2NyA0NS4yNjcxIDI5Ljg3NzggNDUuNjY4IDI5LjMwMDkgNDUuNzM2NEMyNy42Nzc4IDQ1LjkxMjQgMjYuMDM1MSA0Ni4wMDA0IDI0LjQwMjIgNDYuMDAwNEwyNC4zOTI0IDQ2LjAyWk0yMC43NjQ4IDQyLjkzMDJDMjMuMTggNDMuMTM1NSAyNS42MTQ3IDQzLjEzNTUgMjguMDI5OCA0Mi45MzAyTDI5LjUxNiAzOC4xNDg4QzI5LjY0MzIgMzcuNzQ3OSAyOS45MzY1IDM3LjQxNTUgMzAuMzE3OCAzNy4yNDkyQzMxLjIxNzQgMzYuODQ4NCAzMi4wODc2IDM2LjM0OTcgMzIuODg5NCAzNS43NjNDMzMuMjMxNiAzNS41MTg2IDMzLjY2MTkgMzUuNDMwNiAzNC4wNzI1IDM1LjUxODZMMzguOTUxNyAzNi42MjM1QzM5LjY0NTkgMzUuNjI2MSA0MC4zMDEgMzQuNTk5NCA0MC44OTc1IDMzLjU1MzJDNDEuNTAzNyAzMi41MDcgNDIuMDYxMSAzMS40MzE0IDQyLjU3OTMgMzAuMzM2M0wzOS4xODY0IDI2LjY1OThDMzguOTAyOCAyNi4zNDY5IDM4Ljc2NTkgMjUuOTM2MiAzOC44MDUgMjUuNTE1OEMzOC45MDI4IDI0LjUyODIgMzguOTAyOCAyMy41MjExIDM4LjgwNSAyMi41NDMzQzM4Ljc2NTkgMjIuMTIyOSAzOC45MDI4IDIxLjcwMjQgMzkuMTg2NCAyMS4zOTkzTDQyLjU4OTEgMTcuNzEzQzQxLjU2MjQgMTUuNTIyOCA0MC4zNDAyIDEzLjQxMDggMzguOTYxNSAxMS40MjU5TDM0LjEwMTkgMTIuNTIxQzMzLjY5MTIgMTIuNjE4OCAzMy4yNjEgMTIuNTIxIDMyLjkxODcgMTIuMjc2NUMzMi4xMDcyIDExLjY4OTkgMzEuMjI3MiAxMS4xODE0IDMwLjMxNzggMTAuNzcwOEMyOS45MzY1IDEwLjU5NDggMjkuNjQzMiAxMC4yNzIxIDI5LjUxNiA5Ljg2MTQxTDI4LjAzOTYgNS4wOTk1OUMyNS42MjQ1IDQuODk0MjUgMjMuMTg5OCA0Ljg5NDI1IDIwLjc3NDYgNS4wOTk1OUwxOS4yODg0IDkuODkwNzVDMTkuMTYxMyAxMC4yOTE2IDE4Ljg2NzkgMTAuNjI0MSAxOC40ODY2IDEwLjc5MDNDMTcuNTc3MyAxMS4xOTEyIDE2LjcxNjggMTEuNjg5OSAxNS45MTUgMTIuMjc2NUMxNS41NzI4IDEyLjUyMSAxNS4xNDI2IDEyLjYwOSAxNC43MzE5IDEyLjUyMUw5Ljg0Mjk2IDExLjQxNjFDOC40NjQyOCAxMy40MDEgNy4yNDIwNCAxNS41MTMgNi4yMTUzNyAxNy43MDMzTDkuNjA4MjkgMjEuMzc5OEM5Ljg5MTg1IDIxLjY5MjYgMTAuMDI4NyAyMi4xMDMzIDkuOTg5NjMgMjIuNTIzOEM5Ljg5MTg1IDIzLjUxMTMgOS44OTE4NSAyNC41MDg3IDkuOTg5NjMgMjUuNDk2MkMxMC4wMjg3IDI1LjkxNjcgOS44OTE4NSAyNi4zMzcxIDkuNjA4MjkgMjYuNjVMNi4yMDU1OSAzMC4zMzYzQzcuMjMyMjcgMzIuNTI2NSA4LjQ1NDUgMzQuNjM4NiA5LjgzMzE4IDM2LjYyMzVMMTQuNzAyNiAzNS41MjgzQzE1LjExMzIgMzUuNDMwNiAxNS41NDM1IDM1LjUyODMgMTUuODg1NyAzNS43NzI4QzE2LjI5NjQgMzYuMDY2MSAxNi43MjY2IDM2LjM0OTcgMTcuMTU2OCAzNi41OTQxQzE3LjE3NjQgMzYuNjAzOSAxNy4xOTU5IDM2LjYxMzcgMTcuMjA1NyAzNi42MjM1QzE3LjYyNjEgMzYuODU4MSAxOC4wNTY0IDM3LjA4MyAxOC40OTY0IDM3LjI3ODZDMTguODc3NyAzNy40NTQ2IDE5LjE3MTEgMzcuNzc3MyAxOS4yOTgyIDM4LjE3ODFMMjAuNzc0NiA0Mi45NEwyMC43NjQ4IDQyLjkzMDJaTTI0LjM4MjcgMzIuMzMxQzIyLjk0NTMgMzIuMzMxIDIxLjUxNzcgMzEuOTQ5NiAyMC4yMzY4IDMxLjIxNjNDMTYuMjg2NiAyOC45MzgxIDE0LjkxNzcgMjMuODkyNyAxNy4xNTY4IDE5LjkzMjZDMTcuMTY2NiAxOS45MTMxIDE3LjE3NjQgMTkuODgzNyAxNy4xOTU5IDE5Ljg2NDJDMTguMzAwOCAxNy45Mzc5IDIwLjEgMTYuNTY5IDIyLjI0MTMgMTUuOTkyMUMyNC4zODI3IDE1LjQxNTIgMjYuNjIxOCAxNS43MDg2IDI4LjU0OCAxNi44MjMzQzMwLjQ3NDMgMTcuOTM3OSAzMS44NDMyIDE5LjcyNzMgMzIuNDIwMSAyMS44Njg2QzMyLjk5NyAyNC4wMSAzMi43MDM2IDI2LjI0OTEgMzEuNTg5IDI4LjE3NTRDMzAuNDg0MSAzMC4xMDE2IDI4LjY4NDkgMzEuNDcwNSAyNi41NDM2IDMyLjA0NzRDMjUuODI5OCAzMi4yNDMgMjUuMTA2MiAzMi4zMzEgMjQuMzgyNyAzMi4zMzFaTTE5Ljc2NzUgMjEuMjcyMkMxOS43Njc1IDIxLjI3MjIgMTkuNzQ3OSAyMS4zMTEzIDE5LjczODIgMjEuMzMwOUMxOC4yNTE5IDIzLjkwMjQgMTkuMTQxNyAyNy4xOTc2IDIxLjcwMzUgMjguNjc0QzIyLjk0NTMgMjkuMzg3OCAyNC4zOTI0IDI5LjU4MzQgMjUuNzgwOSAyOS4yMTE4QzI3LjE2OTQgMjguODQwMyAyOC4zMzI5IDI3Ljk1MDUgMjkuMDQ2NyAyNi43MDg3QzI5Ljc2MDUgMjUuNDY2OSAyOS45NTYxIDI0LjAxOTggMjkuNTg0NSAyMi42MzEzQzI5LjIxMjkgMjEuMjQyOSAyOC4zMjMxIDIwLjA4OTEgMjcuMDgxNCAxOS4zNjU1QzI1LjgzOTYgMTguNjQxOSAyNC4zODI3IDE4LjQ1NjIgMjMuMDA0IDE4LjgyNzdDMjEuNjM1MSAxOS4xODk1IDIwLjQ5MTEgMjAuMDU5NyAxOS43Njc1IDIxLjI4MlYyMS4yNzIyWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
|
|
22
|
+
check: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyMCcgaGVpZ2h0PScyMCcgdmlld0JveD0nMCAwIDIwIDIwJz48cGF0aCBmaWxsPScjRkZGJyBmaWxsLXJ1bGU9J25vbnplcm8nIGQ9J00yLjkwMiA5LjI2MWExLjA4NyAxLjA4NyAwIDAgMC0xLjU3NiAwIDEuMTgzIDEuMTgzIDAgMCAwIDAgMS42MzJsNS41NzEgNS43NjljLjQzNS40NSAxLjE0LjQ1IDEuNTc2IDBsMTEuMi0xMS42OTJhMS4xODMgMS4xODMgMCAwIDAgMC0xLjYzMiAxLjA4NyAxLjA4NyAwIDAgMC0xLjU3NSAwTDcuNjg1IDE0LjIxNCAyLjkwMiA5LjI2MXonLz48L3N2Zz4K",
|
|
23
|
+
fullscreen: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzExNTlfMTE4KSI+CjxwYXRoIGQ9Ik0xMC4wMDAyIDYuMDAwMkM3LjgxNDA3IDYuMDAwMiA2LjAwMDIgNy44MTQwNyA2LjAwMDIgMTAuMDAwMlYxNi4wMDAyQzUuOTk2NDUgMTYuMjY1MiA2LjA0NTQxIDE2LjUyODMgNi4xNDQyNCAxNi43NzQzQzYuMjQzMDcgMTcuMDIwMiA2LjM4OTc5IDE3LjI0NDEgNi41NzU4OCAxNy40MzI4QzYuNzYxOTcgMTcuNjIxNSA2Ljk4MzcxIDE3Ljc3MTQgNy4yMjgyMyAxNy44NzM3QzcuNDcyNzQgMTcuOTc2IDcuNzM1MTUgMTguMDI4NyA4LjAwMDIgMTguMDI4N0M4LjI2NTI1IDE4LjAyODcgOC41Mjc2NiAxNy45NzYgOC43NzIxNyAxNy44NzM3QzkuMDE2NjkgMTcuNzcxNCA5LjIzODQzIDE3LjYyMTUgOS40MjQ1MiAxNy40MzI4QzkuNjEwNjEgMTcuMjQ0MSA5Ljc1NzMzIDE3LjAyMDIgOS44NTYxNiAxNi43NzQzQzkuOTU0OTkgMTYuNTI4MyAxMC4wMDM5IDE2LjI2NTIgMTAuMDAwMiAxNi4wMDAyVjEwLjAwMDJIMTYuMDAwMkMxNi4yNjUyIDEwLjAwMzkgMTYuNTI4MyA5Ljk1NDk5IDE2Ljc3NDMgOS44NTYxNkMxNy4wMjAyIDkuNzU3MzMgMTcuMjQ0MSA5LjYxMDYxIDE3LjQzMjggOS40MjQ1MkMxNy42MjE1IDkuMjM4NDMgMTcuNzcxNCA5LjAxNjY5IDE3Ljg3MzcgOC43NzIxN0MxNy45NzYgOC41Mjc2NiAxOC4wMjg3IDguMjY1MjUgMTguMDI4NyA4LjAwMDJDMTguMDI4NyA3LjczNTE1IDE3Ljk3NiA3LjQ3Mjc0IDE3Ljg3MzcgNy4yMjgyM0MxNy43NzE0IDYuOTgzNzEgMTcuNjIxNSA2Ljc2MTk3IDE3LjQzMjggNi41NzU4OEMxNy4yNDQxIDYuMzg5NzkgMTcuMDIwMiA2LjI0MzA3IDE2Ljc3NDMgNi4xNDQyNEMxNi41MjgzIDYuMDQ1NDEgMTYuMjY1MiA1Ljk5NjQ1IDE2LjAwMDIgNi4wMDAySDEwLjAwMDJaTTMyLjAwMDIgNi4wMDAyQzMxLjczNTIgNS45OTY0NSAzMS40NzIxIDYuMDQ1NDEgMzEuMjI2MSA2LjE0NDI0QzMwLjk4MDIgNi4yNDMwNyAzMC43NTYzIDYuMzg5NzkgMzAuNTY3NiA2LjU3NTg4QzMwLjM3ODkgNi43NjE5NyAzMC4yMjkgNi45ODM3MSAzMC4xMjY3IDcuMjI4MjNDMzAuMDI0NCA3LjQ3Mjc0IDI5Ljk3MTcgNy43MzUxNSAyOS45NzE3IDguMDAwMkMyOS45NzE3IDguMjY1MjUgMzAuMDI0NCA4LjUyNzY2IDMwLjEyNjcgOC43NzIxN0MzMC4yMjkgOS4wMTY2OSAzMC4zNzg5IDkuMjM4NDMgMzAuNTY3NiA5LjQyNDUyQzMwLjc1NjMgOS42MTA2MSAzMC45ODAyIDkuNzU3MzMgMzEuMjI2MSA5Ljg1NjE2QzMxLjQ3MjEgOS45NTQ5OSAzMS43MzUyIDEwLjAwMzkgMzIuMDAwMiAxMC4wMDAySDM4LjAwMDJWMTYuMDAwMkMzNy45OTY1IDE2LjI2NTIgMzguMDQ1NCAxNi41MjgzIDM4LjE0NDIgMTYuNzc0M0MzOC4yNDMxIDE3LjAyMDIgMzguMzg5OCAxNy4yNDQxIDM4LjU3NTkgMTcuNDMyOEMzOC43NjIgMTcuNjIxNSAzOC45ODM3IDE3Ljc3MTQgMzkuMjI4MiAxNy44NzM3QzM5LjQ3MjcgMTcuOTc2IDM5LjczNTEgMTguMDI4NyA0MC4wMDAyIDE4LjAyODdDNDAuMjY1MiAxOC4wMjg3IDQwLjUyNzcgMTcuOTc2IDQwLjc3MjIgMTcuODczN0M0MS4wMTY3IDE3Ljc3MTQgNDEuMjM4NCAxNy42MjE1IDQxLjQyNDUgMTcuNDMyOEM0MS42MTA2IDE3LjI0NDEgNDEuNzU3MyAxNy4wMjAyIDQxLjg1NjIgMTYuNzc0M0M0MS45NTUgMTYuNTI4MyA0Mi4wMDM5IDE2LjI2NTIgNDIuMDAwMiAxNi4wMDAyVjEwLjAwMDJDNDIuMDAwMiA3LjgxNDA3IDQwLjE4NjMgNi4wMDAyIDM4LjAwMDIgNi4wMDAySDMyLjAwMDJaTTcuOTY4OTUgMjkuOTcyOUM3LjQzOTIgMjkuOTgxMSA2LjkzNDM4IDMwLjE5OTMgNi41NjUyNyAzMC41NzkzQzYuMTk2MTcgMzAuOTU5NCA1Ljk5Mjk1IDMxLjQ3MDQgNi4wMDAyIDMyLjAwMDJWMzguMDAwMkM2LjAwMDIgNDAuMTg2MyA3LjgxNDA3IDQyLjAwMDIgMTAuMDAwMiA0Mi4wMDAySDE2LjAwMDJDMTYuMjY1MiA0Mi4wMDM5IDE2LjUyODMgNDEuOTU1IDE2Ljc3NDMgNDEuODU2MkMxNy4wMjAyIDQxLjc1NzMgMTcuMjQ0MSA0MS42MTA2IDE3LjQzMjggNDEuNDI0NUMxNy42MjE1IDQxLjIzODQgMTcuNzcxNCA0MS4wMTY3IDE3Ljg3MzcgNDAuNzcyMkMxNy45NzYgNDAuNTI3NyAxOC4wMjg3IDQwLjI2NTIgMTguMDI4NyA0MC4wMDAyQzE4LjAyODcgMzkuNzM1MSAxNy45NzYgMzkuNDcyNyAxNy44NzM3IDM5LjIyODJDMTcuNzcxNCAzOC45ODM3IDE3LjYyMTUgMzguNzYyIDE3LjQzMjggMzguNTc1OUMxNy4yNDQxIDM4LjM4OTggMTcuMDIwMiAzOC4yNDMxIDE2Ljc3NDMgMzguMTQ0MkMxNi41MjgzIDM4LjA0NTQgMTYuMjY1MiAzNy45OTY1IDE2LjAwMDIgMzguMDAwMkgxMC4wMDAyVjMyLjAwMDJDMTAuMDAzOSAzMS43MzI2IDkuOTUzOCAzMS40NjcgOS44NTI5NyAzMS4yMTkxQzkuNzUyMTMgMzAuOTcxMyA5LjYwMjU5IDMwLjc0NjEgOS40MTMxOCAzMC41NTcxQzkuMjIzNzcgMzAuMzY4MSA4Ljk5ODM2IDMwLjIxODkgOC43NTAyOCAzMC4xMTg2QzguNTAyMjEgMzAuMDE4MiA4LjIzNjUyIDI5Ljk2ODcgNy45Njg5NSAyOS45NzI5Wk0zOS45Njg5IDI5Ljk3MjlDMzkuNDM5MiAyOS45ODExIDM4LjkzNDQgMzAuMTk5MyAzOC41NjUzIDMwLjU3OTNDMzguMTk2MiAzMC45NTk0IDM3Ljk5MjkgMzEuNDcwNCAzOC4wMDAyIDMyLjAwMDJWMzguMDAwMkgzMi4wMDAyQzMxLjczNTIgMzcuOTk2NSAzMS40NzIxIDM4LjA0NTQgMzEuMjI2MSAzOC4xNDQyQzMwLjk4MDIgMzguMjQzMSAzMC43NTYzIDM4LjM4OTggMzAuNTY3NiAzOC41NzU5QzMwLjM3ODkgMzguNzYyIDMwLjIyOSAzOC45ODM3IDMwLjEyNjcgMzkuMjI4MkMzMC4wMjQ0IDM5LjQ3MjcgMjkuOTcxNyAzOS43MzUxIDI5Ljk3MTcgNDAuMDAwMkMyOS45NzE3IDQwLjI2NTIgMzAuMDI0NCA0MC41Mjc3IDMwLjEyNjcgNDAuNzcyMkMzMC4yMjkgNDEuMDE2NyAzMC4zNzg5IDQxLjIzODQgMzAuNTY3NiA0MS40MjQ1QzMwLjc1NjMgNDEuNjEwNiAzMC45ODAyIDQxLjc1NzMgMzEuMjI2MSA0MS44NTYyQzMxLjQ3MjEgNDEuOTU1IDMxLjczNTIgNDIuMDAzOSAzMi4wMDAyIDQyLjAwMDJIMzguMDAwMkM0MC4xODYzIDQyLjAwMDIgNDIuMDAwMiA0MC4xODYzIDQyLjAwMDIgMzguMDAwMlYzMi4wMDAyQzQyLjAwMzkgMzEuNzMyNiA0MS45NTM4IDMxLjQ2NyA0MS44NTMgMzEuMjE5MUM0MS43NTIxIDMwLjk3MTMgNDEuNjAyNiAzMC43NDYxIDQxLjQxMzIgMzAuNTU3MUM0MS4yMjM4IDMwLjM2ODEgNDAuOTk4NCAzMC4yMTg5IDQwLjc1MDMgMzAuMTE4NkM0MC41MDIyIDMwLjAxODIgNDAuMjM2NSAyOS45Njg3IDM5Ljk2ODkgMjkuOTcyOVoiIGZpbGw9IndoaXRlIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMTE1OV8xMTgiPgo8cmVjdCB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==",
|
|
24
|
+
"exit-fullscreen": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzExNTlfMTMyKSI+CjxwYXRoIGQ9Ik0xNi45NzA3IDUuOTcyNjZDMTYuNDQwNiA1Ljk4MDQyIDE1LjkzNTMgNi4xOTgzMiAxNS41NjU3IDYuNTc4NDZDMTUuMTk2MiA2Ljk1ODYxIDE0Ljk5MjcgNy40Njk5IDE1IDhMMTQuOTk4IDEzLjVDMTQuOTk4IDE0LjM0NTQgMTQuMzQzNCAxNSAxMy40OTggMTVINy45OTgwM0M3LjczMyAxNC45OTYzIDcuNDY5ODggMTUuMDQ1MiA3LjIyMzk0IDE1LjE0NEM2Ljk3ODAxIDE1LjI0MjkgNi43NTQxNiAxNS4zODk2IDYuNTY1NDIgMTUuNTc1N0M2LjM3NjY4IDE1Ljc2MTggNi4yMjY4MSAxNS45ODM1IDYuMTI0NTIgMTYuMjI4QzYuMDIyMjIgMTYuNDcyNSA1Ljk2OTU0IDE2LjczNDkgNS45Njk1NCAxN0M1Ljk2OTU0IDE3LjI2NSA2LjAyMjIyIDE3LjUyNzUgNi4xMjQ1MiAxNy43NzJDNi4yMjY4MSAxOC4wMTY1IDYuMzc2NjggMTguMjM4MiA2LjU2NTQyIDE4LjQyNDNDNi43NTQxNiAxOC42MTA0IDYuOTc4MDEgMTguNzU3MSA3LjIyMzk0IDE4Ljg1NkM3LjQ2OTg4IDE4Ljk1NDggNy43MzMgMTkuMDAzNyA3Ljk5ODAzIDE5SDEzLjQ5OEMxNi41MTI3IDE5IDE4Ljk5OCAxNi41MTQ2IDE4Ljk5OCAxMy41TDE5IDhDMTkuMDAzNiA3LjczMjU5IDE4Ljk1MzYgNy40NjcxNiAxOC44NTI5IDcuMjE5NDFDMTguNzUyMiA2Ljk3MTY2IDE4LjYwMjggNi43NDY2MiAxOC40MTM2IDYuNTU3NjFDMTguMjI0NCA2LjM2ODU5IDE3Ljk5OTMgNi4yMTk0NCAxNy43NTE0IDYuMTE4OTZDMTcuNTAzNiA2LjAxODQ5IDE3LjIzODEgNS45Njg3NCAxNi45NzA3IDUuOTcyNjZaTTMwLjk3MDcgNS45NzI2NkMzMC40NDA5IDUuOTgwOTQgMjkuOTM2MSA2LjE5OTA2IDI5LjU2NyA2LjU3OTE0QzI5LjE5NzkgNi45NTkyMyAyOC45OTQ3IDcuNDcwMjMgMjkuMDAxOSA4TDI5IDEzLjVDMjkgMTYuNTE0NiAzMS40ODU0IDE5IDM0LjUgMTlINDBDNDAuMjY1IDE5LjAwMzcgNDAuNTI4MSAxOC45NTQ4IDQwLjc3NDEgMTguODU2QzQxLjAyIDE4Ljc1NzEgNDEuMjQzOSAxOC42MTA0IDQxLjQzMjYgMTguNDI0M0M0MS42MjEzIDE4LjIzODIgNDEuNzcxMiAxOC4wMTY1IDQxLjg3MzUgMTcuNzcyQzQxLjk3NTggMTcuNTI3NSA0Mi4wMjg1IDE3LjI2NSA0Mi4wMjg1IDE3QzQyLjAyODUgMTYuNzM0OSA0MS45NzU4IDE2LjQ3MjUgNDEuODczNSAxNi4yMjhDNDEuNzcxMiAxNS45ODM1IDQxLjYyMTMgMTUuNzYxOCA0MS40MzI2IDE1LjU3NTdDNDEuMjQzOSAxNS4zODk2IDQxLjAyIDE1LjI0MjkgNDAuNzc0MSAxNS4xNDRDNDAuNTI4MSAxNS4wNDUyIDQwLjI2NSAxNC45OTYzIDQwIDE1SDM0LjVDMzMuNjU0NiAxNSAzMyAxNC4zNDU0IDMzIDEzLjVMMzMuMDAxOSA4QzMzLjAwNTYgNy43MzI0MiAzMi45NTU1IDcuNDY2ODMgMzIuODU0NyA3LjIxODk1QzMyLjc1MzkgNi45NzEwNyAzMi42MDQzIDYuNzQ1OTQgMzIuNDE0OSA2LjU1NjlDMzIuMjI1NSA2LjM2Nzg1IDMyLjAwMDEgNi4yMTg3NCAzMS43NTIgNi4xMTgzOUMzMS41MDM5IDYuMDE4MDMgMzEuMjM4MyA1Ljk2ODQ4IDMwLjk3MDcgNS45NzI2NlpNNy45OTk5OCAyOUM3LjczNDk2IDI4Ljk5NjIgNy40NzE4MyAyOS4wNDUyIDcuMjI1OSAyOS4xNDRDNi45Nzk5NiAyOS4yNDI5IDYuNzU2MTIgMjkuMzg5NiA2LjU2NzM4IDI5LjU3NTdDNi4zNzg2NCAyOS43NjE4IDYuMjI4NzcgMjkuOTgzNSA2LjEyNjQ3IDMwLjIyOEM2LjAyNDE3IDMwLjQ3MjUgNS45NzE1IDMwLjczNDkgNS45NzE1IDMxQzUuOTcxNSAzMS4yNjUgNi4wMjQxNyAzMS41Mjc1IDYuMTI2NDcgMzEuNzcyQzYuMjI4NzcgMzIuMDE2NSA2LjM3ODY0IDMyLjIzODIgNi41NjczOCAzMi40MjQzQzYuNzU2MTIgMzIuNjEwNCA2Ljk3OTk2IDMyLjc1NzEgNy4yMjU5IDMyLjg1NkM3LjQ3MTgzIDMyLjk1NDggNy43MzQ5NiAzMy4wMDM3IDcuOTk5OTggMzNIMTMuNUMxNC4zNDU0IDMzIDE1IDMzLjY1NDYgMTUgMzQuNVY0MEMxNC45OTYyIDQwLjI2NSAxNS4wNDUyIDQwLjUyODEgMTUuMTQ0IDQwLjc3NDFDMTUuMjQyOSA0MS4wMiAxNS4zODk2IDQxLjI0MzkgMTUuNTc1NyA0MS40MzI2QzE1Ljc2MTggNDEuNjIxMyAxNS45ODM1IDQxLjc3MTIgMTYuMjI4IDQxLjg3MzVDMTYuNDcyNSA0MS45NzU4IDE2LjczNDkgNDIuMDI4NSAxNyA0Mi4wMjg1QzE3LjI2NSA0Mi4wMjg1IDE3LjUyNzQgNDEuOTc1OCAxNy43NzIgNDEuODczNUMxOC4wMTY1IDQxLjc3MTIgMTguMjM4MiA0MS42MjEzIDE4LjQyNDMgNDEuNDMyNkMxOC42MTA0IDQxLjI0MzkgMTguNzU3MSA0MS4wMiAxOC44NTU5IDQwLjc3NDFDMTguOTU0OCA0MC41MjgxIDE5LjAwMzcgNDAuMjY1IDE5IDQwVjM0LjVDMTkgMzEuNDg1NCAxNi41MTQ2IDI5IDEzLjUgMjlINy45OTk5OFpNMzQuNSAyOUMzMS40ODU0IDI5IDI5IDMxLjQ4NTQgMjkgMzQuNVY0MEMyOC45OTYyIDQwLjI2NSAyOS4wNDUyIDQwLjUyODEgMjkuMTQ0IDQwLjc3NDFDMjkuMjQyOSA0MS4wMiAyOS4zODk2IDQxLjI0MzkgMjkuNTc1NyA0MS40MzI2QzI5Ljc2MTggNDEuNjIxMyAyOS45ODM1IDQxLjc3MTIgMzAuMjI4IDQxLjg3MzVDMzAuNDcyNSA0MS45NzU4IDMwLjczNDkgNDIuMDI4NSAzMSA0Mi4wMjg1QzMxLjI2NSA0Mi4wMjg1IDMxLjUyNzQgNDEuOTc1OCAzMS43NzIgNDEuODczNUMzMi4wMTY1IDQxLjc3MTIgMzIuMjM4MiA0MS42MjEzIDMyLjQyNDMgNDEuNDMyNkMzMi42MTA0IDQxLjI0MzkgMzIuNzU3MSA0MS4wMiAzMi44NTU5IDQwLjc3NDFDMzIuOTU0OCA0MC41MjgxIDMzLjAwMzcgNDAuMjY1IDMzIDQwVjM0LjVDMzMgMzMuNjU0NiAzMy42NTQ2IDMzIDM0LjUgMzNINDBDNDAuMjY1IDMzLjAwMzcgNDAuNTI4MSAzMi45NTQ4IDQwLjc3NDEgMzIuODU2QzQxLjAyIDMyLjc1NzEgNDEuMjQzOSAzMi42MTA0IDQxLjQzMjYgMzIuNDI0M0M0MS42MjEzIDMyLjIzODIgNDEuNzcxMiAzMi4wMTY1IDQxLjg3MzUgMzEuNzcyQzQxLjk3NTggMzEuNTI3NSA0Mi4wMjg1IDMxLjI2NSA0Mi4wMjg1IDMxQzQyLjAyODUgMzAuNzM0OSA0MS45NzU4IDMwLjQ3MjUgNDEuODczNSAzMC4yMjhDNDEuNzcxMiAyOS45ODM1IDQxLjYyMTMgMjkuNzYxOCA0MS40MzI2IDI5LjU3NTdDNDEuMjQzOSAyOS4zODk2IDQxLjAyIDI5LjI0MjkgNDAuNzc0MSAyOS4xNDRDNDAuNTI4MSAyOS4wNDUyIDQwLjI2NSAyOC45OTYyIDQwIDI5SDM0LjVaIiBmaWxsPSJ3aGl0ZSIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzExNTlfMTMyIj4KPHJlY3Qgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=",
|
|
25
|
+
previous: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiI+PGRlZnM+PGZpbHRlciBpZD0iYSIgaGVpZ2h0PSIxNTAlIj48ZmVHYXVzc2lhbkJsdXIgaW49IlNvdXJjZUFscGhhIiBzdGREZXZpYXRpb249IjMiLz48ZmVPZmZzZXQgZHg9IjIiIGR5PSIyIiByZXN1bHQ9Im9mZnNldGJsdXIiLz48ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVGdW5jQSB0eXBlPSJsaW5lYXIiIHNsb3BlPSIuNyIvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVNZXJnZT48ZmVNZXJnZU5vZGUvPjxmZU1lcmdlTm9kZSBpbj0iU291cmNlR3JhcGhpYyIvPjwvZmVNZXJnZT48L2ZpbHRlcj48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWx0ZXI9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0zMiAzMlY0TDExIDE4em0tMjEgMFY0SDR2Mjh6Ii8+PC9nPjwvc3ZnPg==",
|
|
26
|
+
next: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiI+PGRlZnM+PGZpbHRlciBpZD0iYSIgaGVpZ2h0PSIxNTAlIj48ZmVHYXVzc2lhbkJsdXIgaW49IlNvdXJjZUFscGhhIiBzdGREZXZpYXRpb249IjMiLz48ZmVPZmZzZXQgZHg9IjIiIGR5PSIyIiByZXN1bHQ9Im9mZnNldGJsdXIiLz48ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVGdW5jQSB0eXBlPSJsaW5lYXIiIHNsb3BlPSIuNyIvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVNZXJnZT48ZmVNZXJnZU5vZGUvPjxmZU1lcmdlTm9kZSBpbj0iU291cmNlR3JhcGhpYyIvPjwvZmVNZXJnZT48L2ZpbHRlcj48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWx0ZXI9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik00IDMyVjRsMjEgMTR6bTIxIDBWNGg3djI4eiIvPjwvZz48L3N2Zz4=",
|
|
27
|
+
pauseCircle: "data:image/png;base64,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",
|
|
28
|
+
playCircle: "data:image/png;base64,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",
|
|
29
|
+
playCircleBorder: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Y2lyY2xlIGN4PSIzMCIgY3k9IjMwIiByPSIyOSIgc3Ryb2tlPSIjRkZGIiBzdHJva2Utd2lkdGg9IjIiLz48cGF0aCBmaWxsPSIjRkZGIiBkPSJNMjIgMTcuMTJ2MjYuM2ExIDEgMCAwMDEuNTQuODRsMjAuNy0xMy4xNWExIDEgMCAwMDAtMS42OWwtMjAuNy0xMy4xNWExIDEgMCAwMC0xLjU0Ljg1eiIvPjwvZz48L3N2Zz4=",
|
|
30
|
+
arrowTop: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMCAwdjE2aDE2VjB6IiBvcGFjaXR5PSIuNSIvPjxwYXRoIGZpbGw9IiNDQ0MiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTIuNTcgMTAuMjdhLjgzLjgzIDAgMDEtMS4xNC0xLjJsNi01LjY4Yy4zMi0uMy44Mi0uMyAxLjE0IDBsNiA1LjY3YS44My44MyAwIDExLTEuMTQgMS4yMUw4IDUuMTVsLTUuNDMgNS4xMnoiLz48L2c+PC9zdmc+",
|
|
31
|
+
close: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTI5LjY1IDQuMDVhMS4yIDEuMiAwIDEwLTEuNy0xLjdsLTI1LjYgMjUuNmExLjIgMS4yIDAgMDAxLjcgMS43bDI1LjYtMjUuNnoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMi4zNSA0LjA1YTEuMiAxLjIgMCAxMTEuNy0xLjdsMjUuNiAyNS42YTEuMiAxLjIgMCAwMS0xLjcgMS43TDIuMzUgNC4wNXoiLz48L3N2Zz4=",
|
|
32
|
+
cast: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xIDE4djNoM2EzIDMgMCAwMC0zLTN6bTAtNHYyYTUgNSAwIDAxNSA1aDJhNyA3IDAgMDAtNy03em0wLTR2MmE5IDkgMCAwMTkgOWgyQTExIDExIDAgMDAxIDEwem0yMC03SDNhMiAyIDAgMDAtMiAydjNoMlY1aDE4djE0aC03djJoN2EyIDIgMCAwMDItMlY1YTIgMiAwIDAwLTItMnoiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMCAwaDI0djI0SDB6Ii8+PC9nPjwvc3ZnPg==",
|
|
33
|
+
castConnected: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNSIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE5LjI3MyA0SDQuNzI3QTIuNzMgMi43MyAwIDAgMCAyIDYuNzI3djEuODE4YzAgLjUuNDEuOTEuOTEuOTFzLjkwOC0uNDEuOTA4LS45MVY2LjcyN2MwLS41LjQxLS45MDkuOTEtLjkwOWgxNC41NDVjLjUgMCAuOTA5LjQxLjkwOS45MXYxMC45MDhjMCAuNS0uNDEuOTEtLjkxLjkxaC01LjQ1NGMtLjUgMC0uOTA5LjQwOS0uOTA5LjkwOXMuNDEuOTA5LjkxLjkwOWg1LjQ1NEEyLjczIDIuNzMgMCAwIDAgMjIgMTcuNjM2VjYuNzI3QTIuNzMgMi43MyAwIDAgMCAxOS4yNzMgNFpNMiAxNy42MzZ2MS44MTljMCAuNS40MS45MDkuOTEuOTA5aDEuODE3QTIuNzMgMi43MyAwIDAgMCAyIDE3LjYzNlptMS4wNi0zLjU0MWEuOTA3LjkwNyAwIDEgMC0uMyAxLjc5IDQuNTI5IDQuNTI5IDAgMCAxIDMuNzE3IDMuNzJjLjA3My40NDUuNDYuNzU5Ljg5Ni43NTkuMDUgMCAuMSAwIC4xNS0uMDE0YS45MDcuOTA3IDAgMCAwIC43NDUtMS4wNDYgNi4zNTUgNi4zNTUgMCAwIDAtNS4yMDktNS4yMDlaIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTMgMTAuNDE0YS45MDkuOTA5IDAgMSAwLS4xODIgMS44MDljMy44Ni4zODEgNi45MzcgMy40NjMgNy4zMjMgNy4zMjIuMDQ1LjQ2OS40NC44MTkuOTA1LjgxOWguMDlhLjkxLjkxIDAgMCAwIC44MTQtLjk5NmMtLjQ2OC00LjcxOC00LjIzMi04LjQ4Mi04Ljk1LTguOTV2LS4wMDRaIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTEzLjI0NSAxNi43MjdoNC4yMWMuNSAwIC45MDktLjQwOS45MDktLjkwOVY4LjU0NWMwLS41LS40MS0uOTA5LS45MS0uOTA5SDYuNTQ2Yy0uNSAwLS45MDkuNDEtLjkwOS45MXYuNTcyYTExLjg0OCAxMS44NDggMCAwIDEgNy42MSA3LjYxWiIvPjwvc3ZnPg==",
|
|
34
|
+
castConntecting0: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xIDE4djNoM2EzIDMgMCAwMC0zLTN6IiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTEgMTR2MmE1IDUgMCAwMTUgNWgyYTcgNyAwIDAwLTctN3oiIG9wYWNpdHk9Ii4zIiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTEgMTB2MmE5IDkgMCAwMTkgOWgyQTExIDExIDAgMDAxIDEweiIgb3BhY2l0eT0iLjMiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMjEgM0gzYTIgMiAwIDAwLTIgMnYzaDJWNWgxOHYxNGgtN3YyaDdhMiAyIDAgMDAyLTJWNWEyIDIgMCAwMC0yLTJ6IiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIvPjwvZz48L3N2Zz4=",
|
|
35
|
+
castConntecting1: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xIDE4djNoM2EzIDMgMCAwMC0zLTN6IiBvcGFjaXR5PSIuMyIgZmlsbD0iIzAwMCIvPjxwYXRoIGQ9Ik0xIDE0djJhNSA1IDAgMDE1IDVoMmE3IDcgMCAwMC03LTd6IiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTEgMTB2MmE5IDkgMCAwMTkgOWgyQTExIDExIDAgMDAxIDEweiIgb3BhY2l0eT0iLjMiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMjEgM0gzYTIgMiAwIDAwLTIgMnYzaDJWNWgxOHYxNGgtN3YyaDdhMiAyIDAgMDAyLTJWNWEyIDIgMCAwMC0yLTJ6IiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIvPjwvZz48L3N2Zz4=",
|
|
36
|
+
castConntecting2: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xIDE4djNoM2EzIDMgMCAwMC0zLTN6TTEgMTR2MmE1IDUgMCAwMTUgNWgyYTcgNyAwIDAwLTctN3oiIG9wYWNpdHk9Ii4zIiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTEgMTB2MmE5IDkgMCAwMTkgOWgyQTExIDExIDAgMDAxIDEweiIgZmlsbD0iIzAwMCIvPjxwYXRoIGQ9Ik0yMSAzSDNhMiAyIDAgMDAtMiAydjNoMlY1aDE4djE0aC03djJoN2EyIDIgMCAwMDItMlY1YTIgMiAwIDAwLTItMnoiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMCAwaDI0djI0SDB6Ii8+PC9nPjwvc3ZnPg==",
|
|
37
|
+
castCenterIcon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQyIDM0SDZWMTBINDJNNDIgNkg2QzQuOTM5MTMgNiAzLjkyMTcyIDYuNDIxNDMgMy4xNzE1NyA3LjE3MTU3QzIuNDIxNDMgNy45MjE3MiAyIDguOTM5MTMgMiAxMFYzNEMyIDM1LjA2MDkgMi40MjE0MyAzNi4wNzgzIDMuMTcxNTcgMzYuODI4NEMzLjkyMTcyIDM3LjU3ODYgNC45MzkxMyAzOCA2IDM4SDE2VjQySDMyVjM4SDQyQzQzLjA2MDkgMzggNDQuMDc4MyAzNy41Nzg2IDQ0LjgyODQgMzYuODI4NEM0NS41Nzg2IDM2LjA3ODMgNDYgMzUuMDYwOSA0NiAzNFYxMEM0NiA4LjkzOTEzIDQ1LjU3ODYgNy45MjE3MiA0NC44Mjg0IDcuMTcxNTdDNDQuMDc4MyA2LjQyMTQzIDQzLjA2MDkgNiA0MiA2WiIgZmlsbD0iYmxhY2siLz4KPC9zdmc+Cg==",
|
|
38
|
+
warning: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI0IDVDMjIuMzQ1OCA1IDIwLjg2NTMgNS44NTU0OCAyMC4wMzgyIDcuMjg3MzhMMy42MTkxIDM1LjcyNDFDMi43OTI5IDM3LjE1NyAyLjc5Mzc3IDM4Ljg2NyAzLjYyMDg5IDQwLjI5ODlDNC40NDcwOSA0MS43MzA4IDUuOTI4NDcgNDIuNTg2MyA3LjU4MjcgNDIuNTg2M0g0MC40MTczQzQyLjA3MTUgNDIuNTg2MyA0My41NTI5IDQxLjczMDggNDQuMzc5MSA0MC4yOTg5QzQ1LjIwNjIgMzguODY3IDQ1LjIwNzEgMzcuMTU3IDQ0LjM4MDkgMzUuNzI0MUwyNy45NjE4IDcuMjg3MzhDMjcuMTM1NiA1Ljg1NTQ4IDI1LjY1NDIgNSAyNCA1Wk0yNCA4LjY1OTgxQzI0LjE1OTIgOC42NTk4MSAyNC41NTM4IDguNzA0NjQgMjQuNzkxNiA5LjExNzI4TDQxLjIxMDcgMzcuNTU0QzQxLjQ0OTUgMzcuOTY2NyA0MS4yOTAzIDM4LjMzMTggNDEuMjEwNyAzOC40NjlDNDEuMTMxMSAzOC42MDYyIDQwLjg5NDkgMzguOTI2NSA0MC40MTczIDM4LjkyNjVINy41ODA5MUM3LjEwNDIyIDM4LjkyNjUgNi44Njg4NyAzOC42MDYyIDYuNzg5MjYgMzguNDY5QzYuNzA5NjYgMzguMzMxOCA2LjU1MDQ2IDM3Ljk2NjcgNi43ODkyNiAzNy41NTRMMjMuMjA4NCA5LjExNzI4QzIzLjQ0NjIgOC43MDQ2NCAyMy44NDA4IDguNjU5ODEgMjQgOC42NTk4MVpNMjMuOTg1NyAxNS4xMzI0QzIzLjM1MjYgMTUuMTMyNCAyMi44Mzg4IDE1LjMyNjEgMjIuNDQzNSAxNS43MTMyQzIyLjA0NzMgMTYuMDk5MyAyMS44NTk2IDE2LjU4MjMgMjEuODc3IDE3LjE2MjRMMjIuMTY2NSAyOC4wMDI1QzIyLjIwMjIgMjkuMjE1NyAyMi44MTY3IDI5LjgyMzQgMjQuMDEyNSAyOS44MjM0QzI1LjE3MzYgMjkuODIzNCAyNS43NjM0IDI5LjIxNjUgMjUuNzc5OSAyOC4wMDQyTDI2LjEyMyAxNy4xODkyQzI2LjE0MDQgMTYuNjA5MSAyNS45NDMyIDE2LjEyMDkgMjUuNTI5NyAxNS43MjU3QzI1LjExNyAxNS4zMjk1IDI0LjYwMTUgMTUuMTMyNCAyMy45ODU3IDE1LjEzMjRaTTI0IDMyLjIzOTVDMjIuNTk1NiAzMi4yMzk1IDIxLjcwNTUgMzMuNDI2NiAyMS43MDU1IDM0LjQzMzlDMjEuNzA1NSAzNS40NDEzIDIyLjU2NTQgMzYuNjI4NCAyNCAzNi42Mjg0QzI1LjQzNDYgMzYuNjI4NCAyNi4yOTQ1IDM1LjUwNTMgMjYuMjk0NSAzNC40MzM5QzI2LjI5NDUgMzMuMzYyNSAyNS40MDQ1IDMyLjIzOTUgMjQgMzIuMjM5NVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
|
|
39
|
+
cancel: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PSczNic+PGcgZmlsbD0nbm9uZScgZmlsbC1ydWxlPSdldmVub2RkJz48cGF0aCBkPSdNMCAwaDM2djM2SDB6JyBvcGFjaXR5PScuNScvPjxwYXRoIGQ9J00zMS41MzMgNC45MDNMNC40NjcgMzAuNjQ1bTI3LjA2Ni40NTJMNC45MzMgNC45MDMnIGZpbGwtcnVsZT0nbm9uemVybycgc3Ryb2tlPScjRkZGJyBzdHJva2Utd2lkdGg9JzQnLz48L2c+PC9zdmc+",
|
|
40
|
+
info: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI0LjMxNSAzQzEyLjU2MjMgMyAzIDEyLjU2MjMgMyAyNC4zMTVDMyAzNi4wNjc3IDEyLjU2MjMgNDUuNjMgMjQuMzE1IDQ1LjYzQzM2LjA2NzcgNDUuNjMgNDUuNjMgMzYuMDY3NyA0NS42MyAyNC4zMTVDNDUuNjMgMTIuNTYyMyAzNi4wNjc3IDMgMjQuMzE1IDNaTTI0LjMxNSA2LjI3OTIzQzM0LjI5MzYgNi4yNzkyMyA0Mi4zNTA4IDE0LjMzNjQgNDIuMzUwOCAyNC4zMTVDNDIuMzUwOCAzNC4yOTM2IDM0LjI5MzYgNDIuMzUwOCAyNC4zMTUgNDIuMzUwOEMxNC4zMzY0IDQyLjM1MDggNi4yNzkyMyAzNC4yOTM2IDYuMjc5MjMgMjQuMzE1QzYuMjc5MjMgMTQuMzM2NCAxNC4zMzY0IDYuMjc5MjMgMjQuMzE1IDYuMjc5MjNaTTIyLjY3NTQgMTQuNDc3M1YxNy43NTY1SDI1Ljk1NDZWMTQuNDc3M0gyMi42NzU0Wk0yMi42NzU0IDIxLjAzNThWMzQuMTUyN0gyNS45NTQ2VjIxLjAzNThIMjIuNjc1NFoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
|
|
41
|
+
share: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI3LjQxNTEgNi4wMDAxNUMyNy4wMDQ2IDYuMDA2MDcgMjYuNjEyOSA2LjE3MzMgMjYuMzI0OCA2LjQ2NTY4QzI2LjAzNjYgNi43NTgwNiAyNS44NzUgNy4xNTIxMSAyNS44NzUgNy41NjI2NVYxNS42NzIyQzIzLjEwNjUgMTUuOTgxIDE4LjU1NTEgMTYuNzc0NCAxMy45NzMxIDE5Ljc0MTJDOC43NzA4MiAyMy4xMDk3IDQuMTQ2MDIgMjkuMzAyNSA0LjAzODY2IDM5LjUyNjhDNC4wMzcwOSAzOS41MzQ2IDQuMDMyMDcgMzkuNTM5MyA0LjAzMDUyIDM5LjU0NzFINC4wMzQ1OUM0LjAzMzQ3IDM5LjY1OTUgNCAzOS43NDA5IDQgMzkuODU0M0M0LjAwMDQxIDQwLjI0MTcgNC4xNDQ3MyA0MC42MTUyIDQuNDA0OTUgNDAuOTAyMkM0LjY2NTE3IDQxLjE4OTMgNS4wMjI3NCA0MS4zNjk0IDUuNDA4MjggNDEuNDA3N0M1Ljc5MzgxIDQxLjQ0NTkgNi4xNzk4MiA0MS4zMzk2IDYuNDkxNCA0MS4xMDk0QzYuODAyOTcgNDAuODc5MSA3LjAxNzkgNDAuNTQxMyA3LjA5NDQ4IDQwLjE2MTVDOC4zMzEyOSAzMy45Nzc5IDEyLjE4NjYgMzEuMjM3NyAxNi40NTkzIDI5LjgzMjNDMjAuMDY1NSAyOC42NDYyIDIzLjU5NjMgMjguNjQ1OCAyNS44NzUgMjguNzY2M1YzNi43MjkzQzI1Ljg3NTEgMzcuMDM4MyAyNS45NjY4IDM3LjM0MDMgMjYuMTM4NSAzNy41OTcxQzI2LjMxMDIgMzcuODU0IDI2LjU1NDIgMzguMDU0MiAyNi44Mzk3IDM4LjE3MjRDMjcuMTI1MSAzOC4yOTA3IDI3LjQzOTIgMzguMzIxNiAyNy43NDIzIDM4LjI2MTRDMjguMDQ1MyAzOC4yMDEyIDI4LjMyMzcgMzguMDUyNSAyOC41NDIyIDM3LjgzNDFMNDMuMTI1NiAyMy4yNTA3QzQzLjQxODUgMjIuOTU3NyA0My41ODMgMjIuNTYwMyA0My41ODMgMjIuMTQ2QzQzLjU4MyAyMS43MzE3IDQzLjQxODUgMjEuMzM0MyA0My4xMjU2IDIxLjA0MTNMMjguNTQyMiA2LjQ1NzkyQzI4LjM5NDUgNi4zMTAxMyAyOC4yMTg2IDYuMTkzNDggMjguMDI1MSA2LjExNDg1QzI3LjgzMTUgNi4wMzYyMiAyNy42MjQxIDUuOTk3MjIgMjcuNDE1MSA2LjAwMDE1Wk0yOSAxMS4zMzQ2TDM5LjgxMTQgMjIuMTQ2TDI5IDMyLjk1NzNWMjcuMjM0M0MyOS4wMDAyIDI2Ljg0NTEgMjguODU1MSAyNi40Njk5IDI4LjU5MzIgMjYuMTgyQzI4LjMzMTMgMjUuODk0MiAyNy45NzE0IDI1LjcxNDQgMjcuNTg0IDI1LjY3NzlDMjUuNDEzMiAyNS40NzQ2IDIwLjQ0NzYgMjUuMjMxIDE1LjQ4MjcgMjYuODY0QzEzLjE2MzIgMjcuNjI2OSAxMC44NTk4IDI4LjkxMDkgOC44ODI4MSAzMC43NDU4QzEwLjQ2NTIgMjYuODc2OSAxMi45MDE4IDI0LjE1OTQgMTUuNjcyIDIyLjM2NTdDMjAuMjI4MiAxOS40MTU2IDI1LjQ2MzggMTguNjk4NiAyNy41NTE0IDE4LjU0NDlDMjcuOTQ1MSAxOC41MTYxIDI4LjMxMzIgMTguMzM5NCAyOC41ODE5IDE4LjA1MDNDMjguODUwNiAxNy43NjEyIDI5IDE3LjM4MTIgMjkgMTYuOTg2NVYxMS4zMzQ2WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
|
|
42
|
+
chromecast: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQwLjc3MzIgNkg4LjEyMjE5QzQuNzQ0ODUgNiAyLjAwMDEyIDguNzQ0NTUgMi4wMDAxMiAxMi4xMjE3VjE2LjIwMjhDMi4wMDAxMiAxNy4zMjUxIDIuOTE4NDMgMTguMjQzMyA0LjA0MDgxIDE4LjI0MzNDNS4xNjMxOSAxOC4yNDMzIDYuMDgxNSAxNy4zMjUxIDYuMDgxNSAxNi4yMDI4VjEyLjEyMTdDNi4wODE1IDEwLjk5OTQgNi45OTk4MSAxMC4wODExIDguMTIyMTkgMTAuMDgxMUg0MC43NzMyQzQxLjg5NTYgMTAuMDgxMSA0Mi44MTM5IDEwLjk5OTQgNDIuODEzOSAxMi4xMjE3VjM2LjYwODNDNDIuODEzOSAzNy43MzA2IDQxLjg5NTYgMzguNjQ4OSA0MC43NzMyIDM4LjY0ODlIMjguNTI5MUMyNy40MDY3IDM4LjY0ODkgMjYuNDg4NCAzOS41NjcxIDI2LjQ4ODQgNDAuNjg5NEMyNi40ODg0IDQxLjgxMTcgMjcuNDA2NyA0Mi43MyAyOC41MjkxIDQyLjczSDQwLjc3MzJDNDQuMTUwNiA0Mi43MyA0Ni44OTUzIDM5Ljk4NTUgNDYuODk1MyAzNi42MDgzVjEyLjEyMTdDNDYuODk1MyA4Ljc0NDU1IDQ0LjE1MDYgNiA0MC43NzMyIDZaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMi4wMDAxMiAzNi42MDg0VjQwLjY4OTVDMi4wMDAxMiA0MS44MTE4IDIuOTE4NDMgNDIuNzMwMSA0LjA0MDgxIDQyLjczMDFIOC4xMjIxOUM4LjEyMjE5IDM5LjM1MjkgNS4zNzc0NiAzNi42MDg0IDIuMDAwMTIgMzYuNjA4NFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik00LjM3NzQ4IDI4LjY2MDRDMy4yNzU1IDI4LjQ3NjcgMi4yMTQzNSAyOS4yMjE1IDIuMDMwNjggMzAuMzMzNkMxLjg0NzAyIDMxLjQ0NTcgMi41OTE4NyAzMi40OTY2IDMuNzA0MDUgMzIuNjgwM0M3Ljk3OTI5IDMzLjM5NDUgMTEuMzM2MiAzNi43NTEyIDEyLjA1MDUgNDEuMDI2MkMxMi4yMTM3IDQyLjAyNiAxMy4wODEgNDIuNzMgMTQuMDYwNSA0Mi43M0MxNC4xNzI4IDQyLjczIDE0LjI4NSA0Mi43MyAxNC4zOTczIDQyLjY5OTRDMTUuNTA5NCA0Mi41MTU4IDE2LjI1NDMgNDEuNDY0OSAxNi4wNzA2IDQwLjM1MjhDMTUuMDYwNSAzNC4zNjM3IDEwLjM2NjkgMjkuNjcwNSA0LjM3NzQ4IDI4LjY2MDRaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNC4yNDQ4NyAyMC4zOTYyQzMuMTIyNDkgMjAuMjg0IDIuMTIyNTYgMjEuMTAwMiAyLjAxMDMyIDIyLjIyMjVDMS44OTgwOCAyMy4zNDQ4IDIuNzE0MzUgMjQuMzQ0NyAzLjgzNjczIDI0LjQ1NjlDMTIuNDk5NSAyNS4zMTM5IDE5LjQwNzIgMzIuMjMxNCAyMC4yNzQ1IDQwLjg5MzZDMjAuMzc2NSA0MS45NDQ0IDIxLjI2NDIgNDIuNzMwMSAyMi4zMDUgNDIuNzMwMUMyMi4zNzY0IDQyLjczMDEgMjIuNDM3NiA0Mi43MzAxIDIyLjUwOSA0Mi43MzAxQzIzLjYzMTQgNDIuNjE3OCAyNC40NDc3IDQxLjYxOCAyNC4zMzU1IDQwLjQ5NTdDMjMuMjg0NSAyOS45MDUyIDE0LjgzNiAyMS40NTczIDQuMjQ0ODcgMjAuNDA2NFYyMC4zOTYyWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
|
|
43
|
+
airplay: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUuNyA2QzMuNjU5NDUgNiAyIDcuNjU5NDUgMiA5LjdWMzAuMDVDMiAzMi4wOTA1IDMuNjU5NDUgMzMuNzUgNS43IDMzLjc1SDEzLjM2MDJMMTYuNTI5IDMwLjA1SDUuN1Y5LjdINDIuN0w0Mi43MDM2IDMwLjA1SDMxLjg3MUwzNS4wMzYyIDMzLjc1SDQyLjdDNDQuNzQwNiAzMy43NSA0Ni40IDMyLjA5MDUgNDYuNCAzMC4wNVY5LjdDNDYuNCA3LjY1OTQ1IDQ0Ljc0MDYgNiA0Mi43IDZINS43Wk0yNC4yIDI2LjM1QzIzLjkyMjUgMjYuMzQ5OCAyMy42NDg1IDI2LjQxMjEgMjMuMzk4MyAyNi41MzIyQzIzLjE0ODEgMjYuNjUyMyAyMi45MjgxIDI2LjgyNzEgMjIuNzU0NyAyNy4wNDM4TDExLjgyNDUgMzkuODEzMUMxMS42NDM0IDM5Ljk4NTUgMTEuNDk5IDQwLjE5MjkgMTEuNDAwMyA0MC40MjI3QzExLjMwMTUgNDAuNjUyNSAxMS4yNTA0IDQwLjg5OTkgMTEuMjUgNDEuMTVDMTEuMjUwMyA0MS42MDc5IDExLjQyMDQgNDIuMDQ5NCAxMS43Mjc1IDQyLjM4OTFDMTIuMDM0NSA0Mi43Mjg5IDEyLjQ1NjYgNDIuOTQyNyAxMi45MTIxIDQyLjk4OTJMMTIuOTE1NyA0M0gzNS40ODQzTDM1LjQ4NzkgNDIuOTg5MkMzNS45NDM0IDQyLjk0MjcgMzYuMzY1NSA0Mi43Mjg5IDM2LjY3MjUgNDIuMzg5MUMzNi45Nzk2IDQyLjA0OTQgMzcuMTQ5NyA0MS42MDc5IDM3LjE1IDQxLjE1QzM3LjE0OTYgNDAuODk5OSAzNy4wOTg1IDQwLjY1MjUgMzYuOTk5NyA0MC40MjI3QzM2LjkwMSA0MC4xOTI5IDM2Ljc1NjYgMzkuOTg1NSAzNi41NzU1IDM5LjgxMzFMMzYuNTcxOSAzOS44MDk1TDI1LjY0ODkgMjcuMDUxQzI1LjQ3NTggMjYuODMyNSAyNS4yNTU2IDI2LjY1NiAyNS4wMDQ3IDI2LjUzNDdDMjQuNzUzOCAyNi40MTMzIDI0LjQ3ODcgMjYuMzUwMSAyNC4yIDI2LjM1WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
|
|
44
|
+
list: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNyA3YTMgMyAwIDEgMCAwIDYgMyAzIDAgMCAwIDAtNlptOSAxYTIgMiAwIDEgMCAwIDRoMjRhMiAyIDAgMSAwIDAtNEgxNlptMCAxNGEyIDIgMCAxIDAgMCA0aDI0YTIgMiAwIDEgMCAwLTRIMTZabS0yIDE2YzAtMS4xLjktMiAyLTJoMjRhMiAyIDAgMSAxIDAgNEgxNmEyIDIgMCAwIDEtMi0yWk00IDI0YTMgMyAwIDEgMSA2IDAgMyAzIDAgMCAxLTYgMFptMyAxMWEzIDMgMCAxIDAgMCA2IDMgMyAwIDAgMCAwLTZaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=",
|
|
45
|
+
facebook: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI1IDVDMTMuOTU1IDUgNSAxMy45NTUgNSAyNUM1IDM1LjAyNjcgMTIuMzg2NyA0My4zMDY3IDIyLjAxIDQ0Ljc1MzNWMzAuM0gxNy4wNjE3VjI1LjA0MzNIMjIuMDFWMjEuNTQ1QzIyLjAxIDE1Ljc1MzMgMjQuODMxNyAxMy4yMTE3IDI5LjY0NSAxMy4yMTE3QzMxLjk1IDEzLjIxMTcgMzMuMTcgMTMuMzgzMyAzMy43NDY3IDEzLjQ2VjE4LjA0ODNIMzAuNDYzM0MyOC40MiAxOC4wNDgzIDI3LjcwNjcgMTkuOTg2NyAyNy43MDY3IDIyLjE3VjI1LjA0MzNIMzMuNjk1TDMyLjg4MzMgMzAuM0gyNy43MDY3VjQ0Ljc5NUMzNy40NjgzIDQzLjQ3MTcgNDUgMzUuMTI1IDQ1IDI1QzQ1IDEzLjk1NSAzNi4wNDUgNSAyNSA1WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
|
|
46
|
+
twitter: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQ0LjggMTEuMDk5M0M0My4yNjg4IDExLjc3OTMgNDEuNjI0IDEyLjIzNjkgMzkuODk3NiAxMi40NDMzQzQxLjY2MDggMTEuMzg3MyA0My4wMTI4IDkuNzE1MjYgNDMuNjQ5NiA3LjcyMTY2QzQyLjAwMTYgOC42OTkyNiA0MC4xNzQ0IDkuNDA5NjYgMzguMjI4OCA5Ljc5MzY2QzM2LjY3MiA4LjEzNDQ2IDM0LjQ1NDQgNy4wOTc2NiAzMiA3LjA5NzY2QzI3LjI4NjQgNy4wOTc2NiAyMy40NjU2IDEwLjkyMDEgMjMuNDY1NiAxNS42MzIxQzIzLjQ2NTYgMTYuMzAwOSAyMy41NDI0IDE2Ljk1MzcgMjMuNjg2NCAxNy41NzYxQzE2LjU5MzYgMTcuMjIwOSAxMC4zMDU2IDEzLjgyMjUgNi4wOTQ0MyA4LjY1NzY2QzUuMzYxNjMgOS45MTg0NiA0Ljk0MDgzIDExLjM4NDEgNC45NDA4MyAxMi45NTA1QzQuOTQwODMgMTUuOTEwNSA2LjQ0NjQzIDE4LjUyMzMgOC43MzYwMyAyMC4wNTI5QzcuMzM3NjMgMjAuMDA4MSA2LjAyMDgzIDE5LjYyNDEgNC44NzA0MyAxOC45ODU3QzQuODcwNDMgMTkuMDIyNSA0Ljg3MDQzIDE5LjA1NjEgNC44NzA0MyAxOS4wOTI5QzQuODcwNDMgMjMuMjI4OSA3LjgxMTIzIDI2LjY3ODUgMTEuNzE2OCAyNy40NjA5QzExLjAwMTYgMjcuNjU2MSAxMC4yNDY0IDI3Ljc2MDEgOS40NjcyMyAyNy43NjAxQzguOTE4NDMgMjcuNzYwMSA4LjM4MjQzIDI3LjcwNTcgNy44NjI0MyAyNy42MDgxQzguOTQ4ODMgMzAuOTk4NSAxMi4xMDA4IDMzLjQ2NzMgMTUuODM1MiAzMy41MzYxQzEyLjkxNTIgMzUuODI1NyA5LjIzNTIzIDM3LjE5MDUgNS4yMzUyMyAzNy4xOTA1QzQuNTQ3MjMgMzcuMTkwNSAzLjg2NzIzIDM3LjE1MDUgMy4xOTg0MyAzNy4wNzA1QzYuOTc2MDMgMzkuNDkxMyAxMS40NjA4IDQwLjkwNDEgMTYuMjgxNiA0MC45MDQxQzMxLjk4MDggNDAuOTA0MSA0MC41NjMyIDI3Ljg5OTMgNDAuNTYzMiAxNi42MjA5QzQwLjU2MzIgMTYuMjUxMyA0MC41NTUyIDE1Ljg4MzMgNDAuNTM5MiAxNS41MTY5QzQyLjIwOCAxNC4zMTIxIDQzLjY1NiAxMi44MDk3IDQ0LjggMTEuMDk5M1oiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
|
|
47
|
+
line: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEwIDYuNjY2NjNDOC4xNTgzNSA2LjY2NjYzIDYuNjY2NjkgOC4xNTgyOSA2LjY2NjY5IDkuOTk5OTZWNDBDNi42NjY2OSA0MS44NDE2IDguMTU4MzUgNDMuMzMzMyAxMCA0My4zMzMzSDQwQzQxLjg0MTcgNDMuMzMzMyA0My4zMzM0IDQxLjg0MTYgNDMuMzMzNCA0MFY5Ljk5OTk2QzQzLjMzMzQgOC4xNTgyOSA0MS44NDE3IDYuNjY2NjMgNDAgNi42NjY2M0gxMFpNMjUuMDA2NSAxMi43NzY3QzMyLjg2ODIgMTIuNzc2NyAzOS4yNjQzIDE3Ljk2NzIgMzkuMjY0MyAyNC4zNDg5QzM5LjI2NDMgMjYuOTAzOSAzOC4yNzQ0IDI5LjIwNjMgMzYuMjA3NyAzMS40NzEzQzMzLjIxNiAzNC45MTQ2IDI2LjUyODIgMzkuMTA3NiAyNS4wMDY1IDM5Ljc0OTNDMjMuNDg2NSA0MC4zODkzIDIzLjcwOTYgMzkuMzQxMSAyMy43Njk2IDM4Ljk4MTFDMjMuODA2MiAzOC43Njc3IDIzLjk3NDYgMzcuNzYwNCAyMy45NzQ2IDM3Ljc2MDRDMjQuMDIzIDM3LjM5NTQgMjQuMDcwOCAzNi44MzMgMjMuOTI1OCAzNi40NzEzQzIzLjc2NDEgMzYuMDc2MyAyMy4xMzQzIDM1Ljg2ODIgMjIuNjY5MyAzNS43NjgyQzE1LjgxNiAzNC44NjE1IDEwLjc0NTUgMzAuMDY4OSAxMC43NDU1IDI0LjM0ODlDMTAuNzQ1NSAxNy45Njg5IDE3LjE0NDkgMTIuNzc2NyAyNS4wMDY1IDEyLjc3NjdaTTIxLjA0NDkgMjEuNTE2OUMyMC42MjY2IDIxLjUxNjkgMjAuMjg2NSAyMS44NDYxIDIwLjI4NjUgMjIuMjQ2MVYyNy43NTM5QzIwLjI4NjUgMjguMTU3MiAyMC42MjY2IDI4LjQ4MyAyMS4wNDQ5IDI4LjQ4M0MyMS40NjMzIDI4LjQ4MyAyMS44MDM0IDI4LjE1NTUgMjEuODAzNCAyNy43NTM5VjIyLjI0NjFDMjEuODAzNCAyMS44NDYxIDIxLjQ2MzMgMjEuNTE2OSAyMS4wNDQ5IDIxLjUxNjlaTTI0LjI3MDkgMjEuNTE2OUMyNC4xOTU5IDIxLjUxNjkgMjQuMTE4IDIxLjUyNiAyNC4wNDMgMjEuNTUyN0MyMy43NDggMjEuNjUyNyAyMy41NDgyIDIxLjkyOTUgMjMuNTQ4MiAyMi4yNDI4VjI3Ljc1MDZDMjMuNTQ4MiAyOC4xNTM5IDIzLjg3MDkgMjguNDgzIDI0LjI3MDkgMjguNDgzQzI0LjY3MDkgMjguNDgzIDI0Ljk5MzUgMjguMTUwNiAyNC45OTM1IDI3Ljc1MDZWMjQuMzQyNEwyNy43OTk1IDI4LjE5MDFDMjcuOTM0NSAyOC4zNzM0IDI4LjE0OSAyOC40ODMgMjguMzc1NyAyOC40ODNDMjguNDU0IDI4LjQ4MyAyOC41MzAyIDI4LjQ3MDYgMjguNjAzNSAyOC40NDRDMjguOTAwMiAyOC4zNDQgMjkuMTAxNiAyOC4wNjcyIDI5LjEwMTYgMjcuNzUzOUgyOS4wOTUxVjIyLjI0NjFDMjkuMDk1MSAyMS44NDYxIDI4Ljc3MjMgMjEuNTE2OSAyOC4zNzU3IDIxLjUxNjlDMjcuOTc5IDIxLjUxNjkgMjcuNjUzIDIxLjg0NjEgMjcuNjUzIDIyLjI0NjFWMjUuNjU0M0wyNC44NDcgMjEuODA5OUMyNC43MTIgMjEuNjI2NSAyNC40OTc1IDIxLjUxNjkgMjQuMjcwOSAyMS41MTY5Wk0zMS41NDk1IDIxLjUxNjlDMzEuMTMxMiAyMS41MTY5IDMwLjc5MSAyMS44NDYxIDMwLjc5MSAyMi4yNDYxVjI0Ljk5NjdWMjVWMjcuNzUwNkMzMC43OTEgMjguMTUzOSAzMS4xMzEyIDI4LjQ4MyAzMS41NDk1IDI4LjQ4M0gzNC40MjM4QzM0Ljg0MzggMjguNDgzIDM1LjE4NTYgMjguMTUzOSAzNS4xODU2IDI3Ljc1MzlDMzUuMTg1NiAyNy4zNTM5IDM0Ljg0MjIgMjcuMDI4IDM0LjQyMzggMjcuMDI4SDMyLjMwOFYyNS43MjU5SDM0LjQyMzhDMzQuODQzOCAyNS43MjU5IDM1LjE4NTYgMjUuNCAzNS4xODU2IDI1QzM1LjE4NTYgMjQuNTk2NiAzNC44NDIyIDI0LjI3MDggMzQuNDIzOCAyNC4yNzA4TDMyLjMwOCAyNC4yNzRWMjIuOTcySDM0LjQyMzhDMzQuODQzOCAyMi45NzIgMzUuMTg1NiAyMi42NDc3IDM1LjE4NTYgMjIuMjQ2MUMzNS4xODU2IDIxLjg0NjEgMzQuODQyMiAyMS41MTY5IDM0LjQyMzggMjEuNTE2OUgzMS41NDk1Wk0xNS41NzI5IDIxLjUyMDFDMTUuMTU0NiAyMS41MjAxIDE0LjgxNDUgMjEuODQ0NCAxNC44MTQ1IDIyLjI0NjFWMjcuNzUzOUMxNC44MTQ1IDI4LjE1NzIgMTUuMTU0NiAyOC40ODMgMTUuNTcyOSAyOC40ODNIMTguNDQ3M0MxOC44NjczIDI4LjQ4MyAxOS4yMDQxIDI4LjE1NTUgMTkuMjA1NyAyNy43NTcxQzE5LjIwNTcgMjcuMzU3MSAxOC44NjU2IDI3LjAzMTIgMTguNDQ3MyAyNy4wMzEySDE2LjMzMTRWMjIuMjQ2MUMxNi4zMzE0IDIxLjg0NjEgMTUuOTkxMyAyMS41MjAxIDE1LjU3MjkgMjEuNTIwMVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
|
|
48
|
+
embed: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTguODU0MTkgNS4yMDgzN0M2LjI2OTgxIDUuMjA4MzcgNC4xNjY2OSA3LjMxMTUgNC4xNjY2OSA5Ljg5NTg3VjMxLjc3MDlDNC4xNjY2OSAzNC4zNTUyIDYuMjY5ODEgMzYuNDU4NCA4Ljg1NDE5IDM2LjQ1ODRIMTcuNzA4NFY0MS42NjY3SDE0LjA2MjVDMTMuODU1NSA0MS42NjM4IDEzLjY0OTkgNDEuNzAyIDEzLjQ1NzggNDEuNzc5MkMxMy4yNjU2IDQxLjg1NjQgMTMuMDkwOCA0MS45NzExIDEyLjk0MzMgNDIuMTE2NUMxMi43OTU4IDQyLjI2MTggMTIuNjc4OCA0Mi40MzUxIDEyLjU5ODggNDIuNjI2MUMxMi41MTg5IDQyLjgxNzEgMTIuNDc3OCA0My4wMjIxIDEyLjQ3NzggNDMuMjI5MkMxMi40Nzc4IDQzLjQzNjMgMTIuNTE4OSA0My42NDEzIDEyLjU5ODggNDMuODMyM0MxMi42Nzg4IDQ0LjAyMzMgMTIuNzk1OCA0NC4xOTY2IDEyLjk0MzMgNDQuMzQyQzEzLjA5MDggNDQuNDg3MyAxMy4yNjU2IDQ0LjYwMiAxMy40NTc4IDQ0LjY3OTJDMTMuNjQ5OSA0NC43NTY0IDEzLjg1NTUgNDQuNzk0NiAxNC4wNjI1IDQ0Ljc5MTdIMTkuMDE0NUMxOS4xODIyIDQ0LjgxOTMgMTkuMzUzNCA0NC44MTkzIDE5LjUyMTEgNDQuNzkxN0gzMC40NzI4QzMwLjY0MDYgNDQuODE5MyAzMC44MTE3IDQ0LjgxOTMgMzAuOTc5NCA0NC43OTE3SDM1LjkzNzVDMzYuMTQ0NiA0NC43OTQ2IDM2LjM1MDEgNDQuNzU2NCAzNi41NDIzIDQ0LjY3OTJDMzYuNzM0NCA0NC42MDIgMzYuOTA5MyA0NC40ODczIDM3LjA1NjcgNDQuMzQyQzM3LjIwNDIgNDQuMTk2NiAzNy4zMjEzIDQ0LjAyMzMgMzcuNDAxMiA0My44MzIzQzM3LjQ4MTEgNDMuNjQxMyAzNy41MjIzIDQzLjQzNjMgMzcuNTIyMyA0My4yMjkyQzM3LjUyMjMgNDMuMDIyMSAzNy40ODExIDQyLjgxNzEgMzcuNDAxMiA0Mi42MjYxQzM3LjMyMTMgNDIuNDM1MSAzNy4yMDQyIDQyLjI2MTggMzcuMDU2NyA0Mi4xMTY1QzM2LjkwOTMgNDEuOTcxMSAzNi43MzQ0IDQxLjg1NjQgMzYuNTQyMyA0MS43NzkyQzM2LjM1MDEgNDEuNzAyIDM2LjE0NDYgNDEuNjYzOCAzNS45Mzc1IDQxLjY2NjdIMzIuMjkxN1YzNi40NTg0SDQxLjE0NTlDNDMuNzMwMiAzNi40NTg0IDQ1LjgzMzQgMzQuMzU1MiA0NS44MzM0IDMxLjc3MDlWOS44OTU4N0M0NS44MzM0IDcuMzExNSA0My43MzAyIDUuMjA4MzcgNDEuMTQ1OSA1LjIwODM3SDguODU0MTlaTTI2LjU5OTEgMTIuNTAyMUMyNi43MDI4IDEyLjUwNDIgMjYuODA5NSAxMi41MTUzIDI2LjkxNDUgMTIuNTM4N0MyNy43NTYyIDEyLjczMzUgMjguMjc5MSAxMy41NzM5IDI4LjA4NDMgMTQuNDE0NUwyNC45NTkzIDI3Ljk1NjJDMjQuNzkyNyAyOC42NzkxIDI0LjE1MSAyOS4xNjY3IDIzLjQzOTYgMjkuMTY2N0MyMy4zMjI5IDI5LjE2NjcgMjMuMjA0MyAyOS4xNTQxIDIzLjA4NTYgMjkuMTI4MUMyMi4yNDQ5IDI4LjkzMzMgMjEuNzE4OSAyOC4wOTI5IDIxLjkxMzcgMjcuMjUyMkwyNS4wMzg3IDEzLjcxMDZDMjUuMjA5MSAxMi45NzQxIDI1Ljg3MzMgMTIuNDg3MSAyNi41OTkxIDEyLjUwMjFaTTE4LjEwOTIgMTUuNjI5MUMxOC41MDggMTUuNTk4MyAxOC45MTk0IDE1LjcxOTcgMTkuMjQ2NCAxNi4wMDE0QzE5LjkwMTYgMTYuNTYyOSAxOS45NzY4IDE3LjU0OTYgMTkuNDE1MyAxOC4yMDQ4TDE3LjE2MzEgMjAuODMzNEwxOS40MTUzIDIzLjQ2MkMxOS45Nzc4IDI0LjExNzIgMTkuOTAxNiAyNS4xMDM5IDE5LjI0NjQgMjUuNjY1M0MxOC45NTE2IDI1LjkxODQgMTguNTg5NiAyNi4wNDE3IDE4LjIyOTIgMjYuMDQxN0MxNy43ODk2IDI2LjA0MTcgMTcuMzUxNCAyNS44NTU4IDE3LjA0MzEgMjUuNDk2NUwxMy45MTgxIDIxLjg1MDZDMTMuNDE2IDIxLjI2NDIgMTMuNDE2IDIwLjQwMTUgMTMuOTE4MSAxOS44MTYxTDE3LjA0MzEgMTYuMTcwM0MxNy4zMjM4IDE1Ljg0MzIgMTcuNzEwMyAxNS42NiAxOC4xMDkyIDE1LjYyOTFaTTMxLjg5MDkgMTUuNjMxMUMzMi4yODk3IDE1LjY2MTYgMzIuNjc2MiAxNS44NDMyIDMyLjk1NyAxNi4xNzAzTDM2LjA4MiAxOS44MTYxQzM2LjU4NDEgMjAuNDAxNSAzNi41ODQxIDIxLjI2NDIgMzYuMDgyIDIxLjg1MDZMMzIuOTU3IDI1LjQ5NjVDMzIuNjQ3NiAyNS44NTU4IDMyLjIxMDQgMjYuMDQxNyAzMS43NzA5IDI2LjA0MTdDMzEuNDEwNCAyNi4wNDE3IDMxLjA0ODQgMjUuOTE4NCAzMC43NTM2IDI1LjY2NTNDMzAuMDk4NCAyNS4xMDM5IDMwLjAyMzMgMjQuMTE3MiAzMC41ODQ3IDIzLjQ2MkwzMi44MzY5IDIwLjgzMzRMMzAuNTg0NyAxOC4yMDQ4QzMwLjAyMjIgMTcuNTQ5NiAzMC4wOTg0IDE2LjU2MjkgMzAuNzUzNiAxNi4wMDE0QzMxLjA4MDcgMTUuNzIxMiAzMS40OTIxIDE1LjYwMDcgMzEuODkwOSAxNS42MzExWk0yMC44MzM0IDM2LjQ1ODRIMjkuMTY2N1Y0MS42NjY3SDIwLjgzMzRWMzYuNDU4NFoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
|
|
49
|
+
live: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTIzLjk5NTQgMzAuNjQxNEMyNy4wNDYzIDMwLjY0MTQgMjkuNTE5NSAyOC4yMDYxIDI5LjUxOTUgMjUuMjAxOUMyOS41MTk1IDIyLjE5NzcgMjcuMDQ2MyAxOS43NjIzIDIzLjk5NTQgMTkuNzYyM0MyMC45NDQ0IDE5Ljc2MjMgMTguNDcxMiAyMi4xOTc3IDE4LjQ3MTIgMjUuMjAxOUMxOC40NzEyIDI4LjIwNjEgMjAuOTQ0NCAzMC42NDE0IDIzLjk5NTQgMzAuNjQxNFoiIGZpbGw9IiNFOTM4MTciLz4KPHBhdGggZD0iTTE0LjIwODMgMzMuNzY5MkMxMy42MjgzIDMzLjc2OTIgMTMuMDU3NSAzMy40OTcyIDEyLjY5ODQgMzIuOTk4NkM5LjM3NDcgMjguMzM4NyA5LjM3NDcgMjIuMDc0MSAxMi42OTg0IDE3LjQwNTJDMTMuMjg3NyAxNi41ODkyIDE0LjQyOTMgMTYuMzg5OCAxNS4yNjcxIDE2Ljk2MDlDMTYuMDk1OCAxNy41MzIxIDE2LjI5ODMgMTguNjY1MyAxNS43MTgzIDE5LjQ5MDNDMTMuMjg3NyAyMi45MDgyIDEzLjI4NzcgMjcuNDk1NiAxNS43MTgzIDMwLjkxMzRDMTYuMjk4MyAzMS43Mjk0IDE2LjEwNSAzMi44NjI2IDE1LjI2NzEgMzMuNDQyOEMxNC45MzU3IDMzLjY2MDQgMTQuNTY3NCAzMy43NjkyIDE0LjIwODMgMzMuNzY5MloiIGZpbGw9IiNFOTM4MTciLz4KPHBhdGggZD0iTTcuNDc4MTIgMzguNDAxOUM2Ljg5ODA4IDM4LjQwMTkgNi4zMjcyNSAzOC4xMjk5IDUuOTY4MTggMzcuNjMxM0MwLjY3NDE4MiAzMC4xOTcyIDAuNjc0MTgyIDIwLjIwNjUgNS45NjgxOCAxMi43NzI1QzYuNTU3NDIgMTEuOTU2NSA3LjcwODI5IDExLjc1NzEgOC41MzY5MSAxMi4zMjgzQzkuMzY1NTQgMTIuOTA4NSA5LjU2ODA5IDE0LjAzMjYgOC45ODgwNSAxNC44NTc2QzQuNTc3OTMgMjEuMDQ5NyA0LjU3NzkzIDI5LjM2MzEgOC45ODgwNSAzNS41NDYxQzkuNTY4MDkgMzYuMzYyIDkuMzc0NzUgMzcuNDk1MyA4LjUzNjkxIDM4LjA3NTVDOC4yMTQ2NyAzOC4yOTMxIDcuODQ2MzkgMzguNDAxOSA3LjQ3ODEyIDM4LjQwMTlaIiBmaWxsPSIjRTkzODE3Ii8+CjxwYXRoIGQ9Ik0zMy43OTE1IDMzLjc2OTNDMzMuNDIzMyAzMy43NjkzIDMzLjA1NSAzMy42NjA1IDMyLjczMjcgMzMuNDQyOUMzMS45MDQxIDMyLjg3MTggMzEuNzAxNiAzMS43Mzg1IDMyLjI4MTYgMzAuOTEzNUMzNC43MTIyIDI3LjQ5NTcgMzQuNzEyMiAyMi45MDgzIDMyLjI4MTYgMTkuNDkwNEMzMS43MDE2IDE4LjY3NDUgMzEuODk0OSAxNy41NDEzIDMyLjczMjcgMTYuOTYxQzMzLjU3MDYgMTYuMzgwOCAzNC43MTIyIDE2LjU4MDMgMzUuMzAxNSAxNy40MDUzQzM4LjYyNTIgMjIuMDY1MiAzOC42MjUyIDI4LjMyOTcgMzUuMzAxNSAzMi45OTg3QzM0Ljk0MjQgMzMuNDk3MyAzNC4zNzE2IDMzLjc2OTMgMzMuNzkxNSAzMy43NjkzWiIgZmlsbD0iI0U5MzgxNyIvPgo8cGF0aCBkPSJNNDAuNTEyNiAzOC40MDE5QzQwLjE0NDMgMzguNDAxOSAzOS43NzYgMzguMjkzMSAzOS40NTM4IDM4LjA3NTZDMzguNjI1MiAzNy41MDQ0IDM4LjQyMjYgMzYuMzcxMiAzOS4wMDI3IDM1LjU0NjJDNDMuNDEyOCAyOS4zNTQxIDQzLjQxMjggMjEuMDQwNyAzOS4wMDI3IDE0Ljg1NzdDMzguNDIyNiAxNC4wNDE4IDM4LjYxNiAxMi45MDg1IDM5LjQ1MzggMTIuMzI4M0M0MC4yOTE2IDExLjc1NzEgNDEuNDMzMyAxMS45NDc1IDQyLjAyMjUgMTIuNzcyNUM0Ny4zMTY1IDIwLjIwNjYgNDcuMzE2NSAzMC4xOTczIDQyLjAyMjUgMzcuNjMxM0M0MS42NjM1IDM4LjEzIDQxLjA5MjYgMzguNDAxOSA0MC41MTI2IDM4LjQwMTlaIiBmaWxsPSIjRTkzODE3Ii8+Cjwvc3ZnPgo=",
|
|
50
|
+
nonlive: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTIzLjk5NTQgMzAuNjQxNEMyNy4wNDYzIDMwLjY0MTQgMjkuNTE5NSAyOC4yMDYxIDI5LjUxOTUgMjUuMjAxOUMyOS41MTk1IDIyLjE5NzcgMjcuMDQ2MyAxOS43NjIzIDIzLjk5NTQgMTkuNzYyM0MyMC45NDQ0IDE5Ljc2MjMgMTguNDcxMiAyMi4xOTc3IDE4LjQ3MTIgMjUuMjAxOUMxOC40NzEyIDI4LjIwNjEgMjAuOTQ0NCAzMC42NDE0IDIzLjk5NTQgMzAuNjQxNFoiIGZpbGw9IiNDNENERDUiLz4KPHBhdGggZD0iTTE0LjIwODMgMzMuNzY5MkMxMy42MjgzIDMzLjc2OTIgMTMuMDU3NSAzMy40OTcyIDEyLjY5ODQgMzIuOTk4NkM5LjM3NDcgMjguMzM4NyA5LjM3NDcgMjIuMDc0MSAxMi42OTg0IDE3LjQwNTJDMTMuMjg3NyAxNi41ODkyIDE0LjQyOTMgMTYuMzg5OCAxNS4yNjcxIDE2Ljk2MDlDMTYuMDk1OCAxNy41MzIxIDE2LjI5ODMgMTguNjY1MyAxNS43MTgzIDE5LjQ5MDNDMTMuMjg3NyAyMi45MDgyIDEzLjI4NzcgMjcuNDk1NiAxNS43MTgzIDMwLjkxMzRDMTYuMjk4MyAzMS43Mjk0IDE2LjEwNSAzMi44NjI2IDE1LjI2NzEgMzMuNDQyOEMxNC45MzU3IDMzLjY2MDQgMTQuNTY3NCAzMy43NjkyIDE0LjIwODMgMzMuNzY5MloiIGZpbGw9IiNDNENERDUiLz4KPHBhdGggZD0iTTcuNDc4MTIgMzguNDAxOUM2Ljg5ODA4IDM4LjQwMTkgNi4zMjcyNSAzOC4xMjk5IDUuOTY4MTggMzcuNjMxM0MwLjY3NDE4MiAzMC4xOTcyIDAuNjc0MTgyIDIwLjIwNjUgNS45NjgxOCAxMi43NzI1QzYuNTU3NDIgMTEuOTU2NSA3LjcwODI5IDExLjc1NzEgOC41MzY5MSAxMi4zMjgzQzkuMzY1NTQgMTIuOTA4NSA5LjU2ODA5IDE0LjAzMjYgOC45ODgwNSAxNC44NTc2QzQuNTc3OTMgMjEuMDQ5NyA0LjU3NzkzIDI5LjM2MzEgOC45ODgwNSAzNS41NDYxQzkuNTY4MDkgMzYuMzYyIDkuMzc0NzUgMzcuNDk1MyA4LjUzNjkxIDM4LjA3NTVDOC4yMTQ2NyAzOC4yOTMxIDcuODQ2MzkgMzguNDAxOSA3LjQ3ODEyIDM4LjQwMTlaIiBmaWxsPSIjQzRDREQ1Ii8+CjxwYXRoIGQ9Ik0zMy43OTE1IDMzLjc2OTNDMzMuNDIzMyAzMy43NjkzIDMzLjA1NSAzMy42NjA1IDMyLjczMjcgMzMuNDQyOUMzMS45MDQxIDMyLjg3MTggMzEuNzAxNiAzMS43Mzg1IDMyLjI4MTYgMzAuOTEzNUMzNC43MTIyIDI3LjQ5NTcgMzQuNzEyMiAyMi45MDgzIDMyLjI4MTYgMTkuNDkwNEMzMS43MDE2IDE4LjY3NDUgMzEuODk0OSAxNy41NDEzIDMyLjczMjcgMTYuOTYxQzMzLjU3MDYgMTYuMzgwOCAzNC43MTIyIDE2LjU4MDMgMzUuMzAxNSAxNy40MDUzQzM4LjYyNTIgMjIuMDY1MiAzOC42MjUyIDI4LjMyOTcgMzUuMzAxNSAzMi45OTg3QzM0Ljk0MjQgMzMuNDk3MyAzNC4zNzE2IDMzLjc2OTMgMzMuNzkxNSAzMy43NjkzWiIgZmlsbD0iI0M0Q0RENSIvPgo8cGF0aCBkPSJNNDAuNTEyNiAzOC40MDE5QzQwLjE0NDMgMzguNDAxOSAzOS43NzYgMzguMjkzMSAzOS40NTM4IDM4LjA3NTZDMzguNjI1MiAzNy41MDQ0IDM4LjQyMjYgMzYuMzcxMiAzOS4wMDI3IDM1LjU0NjJDNDMuNDEyOCAyOS4zNTQxIDQzLjQxMjggMjEuMDQwNyAzOS4wMDI3IDE0Ljg1NzdDMzguNDIyNiAxNC4wNDE4IDM4LjYxNiAxMi45MDg1IDM5LjQ1MzggMTIuMzI4M0M0MC4yOTE2IDExLjc1NzEgNDEuNDMzMyAxMS45NDc1IDQyLjAyMjUgMTIuNzcyNUM0Ny4zMTY1IDIwLjIwNjYgNDcuMzE2NSAzMC4xOTczIDQyLjAyMjUgMzcuNjMxM0M0MS42NjM1IDM4LjEzIDQxLjA5MjYgMzguNDAxOSA0MC41MTI2IDM4LjQwMTlaIiBmaWxsPSIjQzRDREQ1Ii8+Cjwvc3ZnPgo="
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
//#endregion
|
|
54
|
+
//#region src/ui/RecommendationPanel.jsx
|
|
55
|
+
const openIcon = {
|
|
56
|
+
width: "1rem",
|
|
57
|
+
height: "1rem",
|
|
58
|
+
margin: "0 0.5rem",
|
|
59
|
+
fontWeight: "bold",
|
|
60
|
+
backgroundImage: `url(${icon_default.arrowTop})`,
|
|
61
|
+
transition: "transform 1s ease"
|
|
62
|
+
};
|
|
63
|
+
const closeIcon = {
|
|
64
|
+
...openIcon,
|
|
65
|
+
transform: "rotateX(180deg)"
|
|
66
|
+
};
|
|
67
|
+
const titleStyle = {
|
|
68
|
+
position: "relative",
|
|
69
|
+
padding: "0.5rem 2.5rem",
|
|
70
|
+
display: "flex",
|
|
71
|
+
alignItems: "center",
|
|
72
|
+
color: "#ccc",
|
|
73
|
+
fontSize: "20px",
|
|
74
|
+
cursor: "pointer"
|
|
75
|
+
};
|
|
76
|
+
const maskStyle = {
|
|
77
|
+
position: "absolute",
|
|
78
|
+
left: 0,
|
|
79
|
+
bottom: 0,
|
|
80
|
+
width: "100%",
|
|
81
|
+
height: "100vh"
|
|
82
|
+
};
|
|
83
|
+
const contentStyle = { overflow: "auto" };
|
|
84
|
+
const contentHiddenStyle = {
|
|
85
|
+
overflow: "hidden",
|
|
86
|
+
pointerEvents: "none",
|
|
87
|
+
touchAction: "none"
|
|
88
|
+
};
|
|
89
|
+
const foldedHeight = "var(--bottom-spacing, 5rem)";
|
|
90
|
+
const style = {
|
|
91
|
+
container: {
|
|
92
|
+
position: "absolute",
|
|
93
|
+
zIndex: 1,
|
|
94
|
+
width: "100%",
|
|
95
|
+
transition: "transform 0.5s ease, opacity 0.8s ease",
|
|
96
|
+
transform: "translateY(0)"
|
|
97
|
+
},
|
|
98
|
+
open: { transform: `translateY(-100%) translateY(${foldedHeight})` }
|
|
99
|
+
};
|
|
100
|
+
const RecommendationPanel = ({ open, onToggle, title, children = null }) => children && /* @__PURE__ */ jsx("div", {
|
|
101
|
+
className: `${open ? "pinned" : ""}`,
|
|
102
|
+
style: {
|
|
103
|
+
height: foldedHeight,
|
|
104
|
+
marginTop: "-1rem"
|
|
105
|
+
},
|
|
106
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
107
|
+
style: {
|
|
108
|
+
...style.container,
|
|
109
|
+
...open && style.open
|
|
110
|
+
},
|
|
111
|
+
onClick: () => {
|
|
112
|
+
if (!open) onToggle();
|
|
113
|
+
},
|
|
114
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
115
|
+
style: titleStyle,
|
|
116
|
+
onClick: open && onToggle ? onToggle : void 0,
|
|
117
|
+
children: [
|
|
118
|
+
open && /* @__PURE__ */ jsx("div", { style: maskStyle }),
|
|
119
|
+
title,
|
|
120
|
+
/* @__PURE__ */ jsx("div", { style: { ...open ? closeIcon : openIcon } })
|
|
121
|
+
]
|
|
122
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
123
|
+
style: {
|
|
124
|
+
...contentStyle,
|
|
125
|
+
...!open && contentHiddenStyle
|
|
126
|
+
},
|
|
127
|
+
children
|
|
128
|
+
})]
|
|
129
|
+
})
|
|
130
|
+
});
|
|
131
|
+
var RecommendationPanel_default = RecommendationPanel;
|
|
132
|
+
|
|
133
|
+
//#endregion
|
|
134
|
+
//#region src/classic.js
|
|
135
|
+
const getInitUiState = ({ recommendation } = {}) => ({
|
|
136
|
+
mediaSources: [],
|
|
137
|
+
selectedMediaSource: null,
|
|
138
|
+
mediaSourcePrecedence: "application",
|
|
139
|
+
recommendationPanel: {
|
|
140
|
+
enabled: Boolean(recommendation),
|
|
141
|
+
opening: false
|
|
142
|
+
},
|
|
143
|
+
ad: {},
|
|
144
|
+
error: null
|
|
145
|
+
});
|
|
146
|
+
const getAdStatus = (action) => {
|
|
147
|
+
const { adPosition, totalAds, duration, clickThroughUrl } = action.adProgressData;
|
|
148
|
+
return {
|
|
149
|
+
position: adPosition,
|
|
150
|
+
total: totalAds,
|
|
151
|
+
adBreakDuration: duration,
|
|
152
|
+
skipTimeOffset: action.skipTimeOffset,
|
|
153
|
+
clickThroughUrl
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
const type = {
|
|
157
|
+
SELECT_MEDIA_SOURCE: "UI_SELECT_MEDIA_SOURCE",
|
|
158
|
+
SET_MEDIA_SOURCES: "UI_SET_MEDIA_SOURCES",
|
|
159
|
+
CHANGE_RECOMMENDATION_PANEL: "CHANGE_RECOMMENDATION_PANEL",
|
|
160
|
+
TOGGLE_RECOMMENDATION_PANEL: "TOGGLE_RECOMMENDATION_PANEL",
|
|
161
|
+
OPEN_PANEL: "OPEN_PANEL",
|
|
162
|
+
HIDE_PANEL: "HIDE_PANEL",
|
|
163
|
+
OFFER_AUTOPLAY: "OFFER_AUTOPLAY",
|
|
164
|
+
DISMISS_AUTOPLAY: "DISMISS_AUTOPLAY",
|
|
165
|
+
ERROR: "UI_ERROR",
|
|
166
|
+
RESET_END_ROLL: "RESET_END_ROLL",
|
|
167
|
+
STREAM_EVENTS_CHANGED: "STREAM_EVENTS_CHANGED",
|
|
168
|
+
AD_BREAK_STARTED: "AD_BREAK_STARTED",
|
|
169
|
+
AD_BREAK_ENDED: "AD_BREAK_ENDED",
|
|
170
|
+
VISIBILITY_CHANGE: "VISIBILITY_CHANGE",
|
|
171
|
+
PLAYBACK_END: "PLAYBACK_END"
|
|
172
|
+
};
|
|
173
|
+
const uiActions = {
|
|
174
|
+
selectMediaSource: (mediaSource) => ({
|
|
175
|
+
type: type.SELECT_MEDIA_SOURCE,
|
|
176
|
+
mediaSource
|
|
177
|
+
}),
|
|
178
|
+
setMediaSources: (items = []) => ({
|
|
179
|
+
type: type.SET_MEDIA_SOURCES,
|
|
180
|
+
items
|
|
181
|
+
}),
|
|
182
|
+
enableRecommendationPanel: () => ({
|
|
183
|
+
type: type.CHANGE_RECOMMENDATION_PANEL,
|
|
184
|
+
enabled: true
|
|
185
|
+
}),
|
|
186
|
+
disableRecommendationPanel: () => ({
|
|
187
|
+
type: type.CHANGE_RECOMMENDATION_PANEL,
|
|
188
|
+
enabled: false
|
|
189
|
+
}),
|
|
190
|
+
toggleRecommendationPanel: () => ({ type: type.TOGGLE_RECOMMENDATION_PANEL }),
|
|
191
|
+
openPanel: (panel) => ({
|
|
192
|
+
type: type.OPEN_PANEL,
|
|
193
|
+
panel
|
|
194
|
+
}),
|
|
195
|
+
hidePanel: () => ({ type: type.HIDE_PANEL }),
|
|
196
|
+
offerAutoplay: (state) => ({
|
|
197
|
+
type: type.OFFER_AUTOPLAY,
|
|
198
|
+
endState: state
|
|
199
|
+
}),
|
|
200
|
+
dismissAutoplay: ({ openOther, hasRecommendation }) => ({
|
|
201
|
+
type: type.DISMISS_AUTOPLAY,
|
|
202
|
+
openOther,
|
|
203
|
+
hasRecommendation
|
|
204
|
+
}),
|
|
205
|
+
streamEventsChanged: (streamEvents, playbackStatus) => ({
|
|
206
|
+
type: type.STREAM_EVENTS_CHANGED,
|
|
207
|
+
streamEvents,
|
|
208
|
+
playbackStatus
|
|
209
|
+
}),
|
|
210
|
+
adBreakStarted: (adProgressData, skipTimeOffset) => ({
|
|
211
|
+
type: type.AD_BREAK_STARTED,
|
|
212
|
+
adProgressData,
|
|
213
|
+
skipTimeOffset
|
|
214
|
+
}),
|
|
215
|
+
adBreakEnded: () => ({ type: type.AD_BREAK_ENDED }),
|
|
216
|
+
playbackEnd: ({ hasRecommendation }) => ({
|
|
217
|
+
type: type.PLAYBACK_END,
|
|
218
|
+
hasRecommendation
|
|
219
|
+
})
|
|
220
|
+
};
|
|
221
|
+
const reduceUi = (state = getInitUiState(), action) => {
|
|
222
|
+
switch (action.type) {
|
|
223
|
+
case type.SELECT_MEDIA_SOURCE: return {
|
|
224
|
+
...state,
|
|
225
|
+
mediaSourcePrecedence: "user",
|
|
226
|
+
selectedMediaSource: action.mediaSource
|
|
227
|
+
};
|
|
228
|
+
case type.CHANGE_RECOMMENDATION_PANEL: return {
|
|
229
|
+
...state,
|
|
230
|
+
recommendationPanel: {
|
|
231
|
+
enabled: action.enabled,
|
|
232
|
+
opening: action.enabled && state.recommendationPanel.opening
|
|
233
|
+
},
|
|
234
|
+
activePanel: action.enabled && state.recommendationPanel.opening ? "recommendation" : void 0
|
|
235
|
+
};
|
|
236
|
+
case type.TOGGLE_RECOMMENDATION_PANEL: return {
|
|
237
|
+
...state,
|
|
238
|
+
openedBy: "user-action",
|
|
239
|
+
activePanel: state.activePanel === "recommendation" ? void 0 : "recommendation"
|
|
240
|
+
};
|
|
241
|
+
case type.OPEN_PANEL: return {
|
|
242
|
+
...state,
|
|
243
|
+
activePanel: action.panel
|
|
244
|
+
};
|
|
245
|
+
case type.HIDE_PANEL: return {
|
|
246
|
+
...state,
|
|
247
|
+
activePanel: void 0
|
|
248
|
+
};
|
|
249
|
+
case type.PLAYBACK_END: return state.activePanel || !action.hasRecommendation ? state : {
|
|
250
|
+
...state,
|
|
251
|
+
activePanel: "recommendation",
|
|
252
|
+
openedBy: "auto-open"
|
|
253
|
+
};
|
|
254
|
+
case type.OFFER_AUTOPLAY: return {
|
|
255
|
+
...state,
|
|
256
|
+
activePanel: "autoplay-next",
|
|
257
|
+
...action.endState === "ended" && { openNext: state.activePanel },
|
|
258
|
+
recommendationPanel: {
|
|
259
|
+
...state.recommendationPanel,
|
|
260
|
+
opening: false
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
case "close-panels": return state.activePanel === "autoplay-next" || action.name !== "autoplay-next" && state.openedBy === "auto-open" ? {
|
|
264
|
+
...state,
|
|
265
|
+
activePanel: void 0
|
|
266
|
+
} : state;
|
|
267
|
+
case type.DISMISS_AUTOPLAY: return {
|
|
268
|
+
...state,
|
|
269
|
+
activePanel: void 0,
|
|
270
|
+
...action.openOther && action.hasRecommendation ? {
|
|
271
|
+
activePanel: "recommendation",
|
|
272
|
+
openedBy: "auto-open",
|
|
273
|
+
recommendationPanel: {
|
|
274
|
+
enabled: true,
|
|
275
|
+
opening: true
|
|
276
|
+
}
|
|
277
|
+
} : {
|
|
278
|
+
activePanel: "",
|
|
279
|
+
recommendationPanel: {
|
|
280
|
+
enabled: true,
|
|
281
|
+
opening: false
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
openNext: ""
|
|
285
|
+
};
|
|
286
|
+
case "content-change": return {
|
|
287
|
+
...state,
|
|
288
|
+
ad: {},
|
|
289
|
+
streamEvents: [],
|
|
290
|
+
activePanel: void 0,
|
|
291
|
+
openNext: void 0,
|
|
292
|
+
recommendationPanel: {
|
|
293
|
+
...state.recommendationPanel,
|
|
294
|
+
opening: false
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
case type.STREAM_EVENTS_CHANGED: return {
|
|
298
|
+
...state,
|
|
299
|
+
streamEvents: action.streamEvents
|
|
300
|
+
};
|
|
301
|
+
case type.AD_BREAK_STARTED: return {
|
|
302
|
+
...state,
|
|
303
|
+
ad: getAdStatus(action),
|
|
304
|
+
activePanel: ""
|
|
305
|
+
};
|
|
306
|
+
case type.AD_BREAK_ENDED: return {
|
|
307
|
+
...state,
|
|
308
|
+
ad: { total: 0 }
|
|
309
|
+
};
|
|
310
|
+
default: return state;
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
//#endregion
|
|
315
|
+
//#region src/ad/playerIntegration.jsx
|
|
316
|
+
const padTime$1 = (value) => Math.floor(value).toString().padStart(2, "0");
|
|
317
|
+
const formatTime = (sourceTime) => {
|
|
318
|
+
const sign = sourceTime < 0 ? "-" : "";
|
|
319
|
+
const time = Math.abs(sourceTime || 0, 0);
|
|
320
|
+
const seconds = padTime$1(time % 60);
|
|
321
|
+
const minutes = padTime$1(time / 60 % 60);
|
|
322
|
+
return sign + [
|
|
323
|
+
Math.floor(time / 60 / 60),
|
|
324
|
+
minutes,
|
|
325
|
+
seconds
|
|
326
|
+
].filter(Boolean).join(":");
|
|
327
|
+
};
|
|
328
|
+
const linkPluginEvents = (plugins, handlers) => {
|
|
329
|
+
const registered = plugins.map((plugin) => Object.entries(handlers).map(([eventName, handler]) => plugin.on?.(eventName, (event) => handler(event, plugin))));
|
|
330
|
+
return () => [].concat(...registered).forEach((removeListener) => removeListener?.());
|
|
331
|
+
};
|
|
332
|
+
const linkAdState = ({ contentType, dispatch, plugins, onAdSkip }) => {
|
|
333
|
+
const handleStart = (event) => {
|
|
334
|
+
dispatch(uiActions.adBreakStarted(event.getStreamData().adProgressData, contentType !== "lives" && event.getAd()?.getSkipTimeOffset()));
|
|
335
|
+
};
|
|
336
|
+
return linkPluginEvents?.(plugins, {
|
|
337
|
+
cuepointsChanged: (event, plugin) => dispatch(uiActions.streamEventsChanged(event.cuepoints, plugin.getPlaybackStatus())),
|
|
338
|
+
adBreakStarted: handleStart,
|
|
339
|
+
adBreakEnded: () => {
|
|
340
|
+
dispatch(uiActions.adBreakEnded());
|
|
341
|
+
},
|
|
342
|
+
skip: onAdSkip
|
|
343
|
+
});
|
|
344
|
+
};
|
|
345
|
+
const useIntervalUpdate = (get) => {
|
|
346
|
+
const [value, setValue] = useState(get());
|
|
347
|
+
useEffect(() => {
|
|
348
|
+
const intervalId = setInterval(() => setValue(get()), 500);
|
|
349
|
+
return () => clearInterval(intervalId);
|
|
350
|
+
}, []);
|
|
351
|
+
return value;
|
|
352
|
+
};
|
|
353
|
+
const SkipAdButton = ({ skipAd, getWaitTime }) => {
|
|
354
|
+
const waitTime = useIntervalUpdate(getWaitTime);
|
|
355
|
+
return !isLiveDuration(waitTime) && /* @__PURE__ */ jsx(SkipButton, {
|
|
356
|
+
waitTime,
|
|
357
|
+
onClick: skipAd
|
|
358
|
+
});
|
|
359
|
+
};
|
|
360
|
+
const Status = ({ total, position, getRemainingTime }) => {
|
|
361
|
+
const remainingTime = useIntervalUpdate(getRemainingTime);
|
|
362
|
+
return total > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
363
|
+
"Ad $",
|
|
364
|
+
position,
|
|
365
|
+
" of $",
|
|
366
|
+
total,
|
|
367
|
+
"・$",
|
|
368
|
+
formatTime(remainingTime)
|
|
369
|
+
] });
|
|
370
|
+
};
|
|
371
|
+
const getAdUi = ({ position, total, adBreakDuration, skipTimeOffset, clickThroughUrl }, plugins, media) => {
|
|
372
|
+
const getRemainingTime = () => getMediaTime(media, { plugins }).adRemainingTime;
|
|
373
|
+
const getSkipWaitTime = () => skipTimeOffset >= 0 ? getRemainingTime() - (adBreakDuration - skipTimeOffset) : Infinity;
|
|
374
|
+
return {
|
|
375
|
+
title: false,
|
|
376
|
+
channelTitle: false,
|
|
377
|
+
controlButtons: {
|
|
378
|
+
rewindButton: false,
|
|
379
|
+
forwardButton: false,
|
|
380
|
+
nextEpisodeButton: false,
|
|
381
|
+
previousEpisodeButton: false
|
|
382
|
+
},
|
|
383
|
+
seekbar: false,
|
|
384
|
+
volumeControl: false,
|
|
385
|
+
fullscreenButton: false,
|
|
386
|
+
adLink: clickThroughUrl && /* @__PURE__ */ jsx("a", {
|
|
387
|
+
href: clickThroughUrl,
|
|
388
|
+
rel: "noreferrer",
|
|
389
|
+
target: "_blank",
|
|
390
|
+
children: "Learn More"
|
|
391
|
+
}),
|
|
392
|
+
adStatus: /* @__PURE__ */ jsx(Status, {
|
|
393
|
+
position,
|
|
394
|
+
total,
|
|
395
|
+
getRemainingTime
|
|
396
|
+
}),
|
|
397
|
+
adSkipButton: /* @__PURE__ */ jsx(SkipAdButton, {
|
|
398
|
+
getWaitTime: getSkipWaitTime,
|
|
399
|
+
skipAd: () => plugins.forEach((plugin) => plugin.skipAd?.())
|
|
400
|
+
})
|
|
401
|
+
};
|
|
402
|
+
};
|
|
403
|
+
|
|
404
|
+
//#endregion
|
|
405
|
+
//#region ../../node_modules/mitt/dist/mitt.mjs
|
|
406
|
+
function mitt_default(n) {
|
|
407
|
+
return {
|
|
408
|
+
all: n = n || /* @__PURE__ */ new Map(),
|
|
409
|
+
on: function(t, e) {
|
|
410
|
+
var i = n.get(t);
|
|
411
|
+
i ? i.push(e) : n.set(t, [e]);
|
|
412
|
+
},
|
|
413
|
+
off: function(t, e) {
|
|
414
|
+
var i = n.get(t);
|
|
415
|
+
i && (e ? i.splice(i.indexOf(e) >>> 0, 1) : n.set(t, []));
|
|
416
|
+
},
|
|
417
|
+
emit: function(t, e) {
|
|
418
|
+
var i = n.get(t);
|
|
419
|
+
i && i.slice().map(function(n$1) {
|
|
420
|
+
n$1(e);
|
|
421
|
+
}), (i = n.get("*")) && i.slice().map(function(n$1) {
|
|
422
|
+
n$1(t, e);
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
//#endregion
|
|
429
|
+
//#region src/events.js
|
|
430
|
+
const on = (target, name, handler) => {
|
|
431
|
+
target.addEventListener(name, handler);
|
|
432
|
+
return () => target.removeEventListener(name, handler);
|
|
433
|
+
};
|
|
434
|
+
const once = (target, name, handler) => {
|
|
435
|
+
const oneTime = (...args) => {
|
|
436
|
+
handler(...args);
|
|
437
|
+
target.removeEventListener(name, oneTime);
|
|
438
|
+
};
|
|
439
|
+
target.addEventListener(name, oneTime);
|
|
440
|
+
return () => target.removeEventListener(name, oneTime);
|
|
441
|
+
};
|
|
442
|
+
|
|
443
|
+
//#endregion
|
|
444
|
+
//#region src/playlog.js
|
|
445
|
+
const uuidv4 = () => {
|
|
446
|
+
if (typeof window === "undefined") return "";
|
|
447
|
+
const crypto = window.crypto || window.msCrypto;
|
|
448
|
+
return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) => (c ^ crypto?.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));
|
|
449
|
+
};
|
|
450
|
+
const modes = {
|
|
451
|
+
videos: "video",
|
|
452
|
+
lives: "live"
|
|
453
|
+
};
|
|
454
|
+
const LIVES = "lives";
|
|
455
|
+
const logEventNames = {
|
|
456
|
+
playbackBegan: "video_playback_began",
|
|
457
|
+
playbackStarted: "video_playback_started",
|
|
458
|
+
playbackStopped: "video_playback_stopped",
|
|
459
|
+
playbackEnded: "video_playback_ended",
|
|
460
|
+
bufferingStarted: "video_buffering_started",
|
|
461
|
+
bufferingEnded: "video_buffering_ended",
|
|
462
|
+
playbackSpeedChange: "playback_speed_change",
|
|
463
|
+
seeked: "video_seeking_ended",
|
|
464
|
+
playbackError: "video_playback_error_occurred",
|
|
465
|
+
playing: "play",
|
|
466
|
+
paused: "pause",
|
|
467
|
+
rewind: "rewind",
|
|
468
|
+
forward: "forward",
|
|
469
|
+
speedSettingChange: "speed_setting_change",
|
|
470
|
+
previousEpisode: "previous_episode",
|
|
471
|
+
nextEpisode: "next_episode",
|
|
472
|
+
openSettings: "setting_page_entered",
|
|
473
|
+
closeSettings: "setting_page_exited",
|
|
474
|
+
adPlaybackStarted: "ad_playback_started",
|
|
475
|
+
adPlaybackStopped: "ad_playback_stopped",
|
|
476
|
+
skip: "op_skip"
|
|
477
|
+
};
|
|
478
|
+
const formatFloatToZero = (float) => {
|
|
479
|
+
if (float < 1 && float >= 0) return 0;
|
|
480
|
+
else return float;
|
|
481
|
+
};
|
|
482
|
+
const mapLogEvents = ({ video, session = video, version: version$1, playerName, getPlaybackStatus = () => video, playerToModuleErrorCodeMap = {} }) => {
|
|
483
|
+
const emitter = mitt_default();
|
|
484
|
+
const state = {
|
|
485
|
+
status: "init",
|
|
486
|
+
seeking: false,
|
|
487
|
+
playerStartTime: Date.now(),
|
|
488
|
+
moduleStartTime: Date.now(),
|
|
489
|
+
content: session.getContent?.() || {},
|
|
490
|
+
temporaryEvent: null,
|
|
491
|
+
hasFirstSeeked: false,
|
|
492
|
+
userHasClickedBackButton: false
|
|
493
|
+
};
|
|
494
|
+
const commonProperties = {
|
|
495
|
+
player_name: playerName,
|
|
496
|
+
playback_module_version: version$1,
|
|
497
|
+
playback_mode: modes[state.content.type],
|
|
498
|
+
playback_session_id: uuidv4(),
|
|
499
|
+
id: state.content.id,
|
|
500
|
+
name: state.content.title,
|
|
501
|
+
SSAI: state.ssaiProvider || "None",
|
|
502
|
+
current_position: 0,
|
|
503
|
+
...state.content.type === "videos" && { video_total_duration: getPlaybackStatus().duration || 0 },
|
|
504
|
+
...state.content.type === "lives" && {
|
|
505
|
+
live_offset: state.liveOffset || 0,
|
|
506
|
+
video_total_duration: getPlaybackStatus().duration || 0
|
|
507
|
+
}
|
|
508
|
+
};
|
|
509
|
+
const updateTimeInfo = () => {
|
|
510
|
+
if (!(getPlaybackStatus().currentTime > 0 && getPlaybackStatus().duration > 0)) return;
|
|
511
|
+
const sectionStart = state.content.section?.start || 0;
|
|
512
|
+
state.duration = (state.content.section?.end || getPlaybackStatus().duration) - sectionStart;
|
|
513
|
+
state.currentTime = sectionStart > 0 ? Date.now() / 1e3 - sectionStart : getPlaybackStatus().currentTime;
|
|
514
|
+
if (state.currentTime + .3 > state.duration) state.currentTime = state.duration;
|
|
515
|
+
commonProperties.video_total_duration = state.duration;
|
|
516
|
+
commonProperties.current_position = formatFloatToZero(state.currentTime);
|
|
517
|
+
};
|
|
518
|
+
const dispatchStart = () => {
|
|
519
|
+
if (state.status === "started") return;
|
|
520
|
+
updateTimeInfo();
|
|
521
|
+
state.temporaryEvent = state.isPlayingAd ? "adPlaybackStarted" : "playbackStarted";
|
|
522
|
+
};
|
|
523
|
+
const dispatchStop = () => {
|
|
524
|
+
if (state.status !== "started" || state.userHasClickedBackButton) return;
|
|
525
|
+
state.status = "stopped";
|
|
526
|
+
const currentTime = getPlaybackStatus().currentTime || state.currentTime;
|
|
527
|
+
const played = Math.max(0, currentTime - state.lastStartTime);
|
|
528
|
+
if (getPlaybackStatus().currentTime - state.lastStartTime < 0) console.warn("Playlog: negative played time", {
|
|
529
|
+
lastStartTime: state.lastStartTime,
|
|
530
|
+
currentTime: getPlaybackStatus().currentTime
|
|
531
|
+
});
|
|
532
|
+
if (state.isPlayingAd) state.adPlayedDuration += played;
|
|
533
|
+
else state.playedDuration += played;
|
|
534
|
+
const eventName = state.isPlayingAd ? "adPlaybackStopped" : "playbackStopped";
|
|
535
|
+
const durationPropertyName = state.isPlayingAd ? "ad_played_duration" : "video_played_duration";
|
|
536
|
+
updateTimeInfo();
|
|
537
|
+
emitter.emit(eventName, {
|
|
538
|
+
...commonProperties,
|
|
539
|
+
[durationPropertyName]: played
|
|
540
|
+
});
|
|
541
|
+
};
|
|
542
|
+
const handleEnd = () => {
|
|
543
|
+
if (state.status === "started") dispatchStop();
|
|
544
|
+
if (state.status === "init" || state.userHasClickedBackButton) return;
|
|
545
|
+
state.status = "init";
|
|
546
|
+
emitter.emit("playbackEnded", {
|
|
547
|
+
video_playback_ended_at_percentage: (state.currentTime / state.duration).toFixed(2),
|
|
548
|
+
video_total_played_duration: state.playedDuration,
|
|
549
|
+
...state.ssaiProvider && { ad_total_played_duration: state.adPlayedDuration },
|
|
550
|
+
...commonProperties
|
|
551
|
+
});
|
|
552
|
+
};
|
|
553
|
+
const registered = [
|
|
554
|
+
on(video, "error", (event) => {
|
|
555
|
+
const originErrorCode = (/MediaFoundationRenderer/i.test(video.error?.message) ? 4012 : void 0) || event.error?.code || event.error?.data?.code;
|
|
556
|
+
if (state.lastErrorCode === originErrorCode) return;
|
|
557
|
+
state.lastErrorCode = originErrorCode;
|
|
558
|
+
emitter.emit("playbackError", {
|
|
559
|
+
module_error_code: playerToModuleErrorCodeMap[originErrorCode] ?? originErrorCode,
|
|
560
|
+
player_error_code: playerToModuleErrorCodeMap[originErrorCode] ?? originErrorCode,
|
|
561
|
+
...commonProperties
|
|
562
|
+
});
|
|
563
|
+
}),
|
|
564
|
+
once(video, "playerStarted", () => {
|
|
565
|
+
state.playerStartTime = Date.now();
|
|
566
|
+
}),
|
|
567
|
+
on(video, "durationchange", () => {
|
|
568
|
+
if (!state.duration) {
|
|
569
|
+
state.duration = getPlaybackStatus().duration;
|
|
570
|
+
commonProperties.video_total_duration = state.duration;
|
|
571
|
+
}
|
|
572
|
+
}),
|
|
573
|
+
once(video, "loadeddata", () => {
|
|
574
|
+
state.status = "began";
|
|
575
|
+
state.playedDuration = 0;
|
|
576
|
+
updateTimeInfo();
|
|
577
|
+
if (state.content?.startTime > 0) {
|
|
578
|
+
state.currentTime = state.content.startTime;
|
|
579
|
+
commonProperties.current_position = formatFloatToZero(state.content.startTime);
|
|
580
|
+
}
|
|
581
|
+
emitter.emit("playbackBegan", {
|
|
582
|
+
player_startup_time: (state.playerStartTime - state.moduleStartTime) / 1e3,
|
|
583
|
+
video_startup_time: (Date.now() - state.moduleStartTime) / 1e3,
|
|
584
|
+
...commonProperties
|
|
585
|
+
});
|
|
586
|
+
}),
|
|
587
|
+
on(video, "playing", dispatchStart),
|
|
588
|
+
on(video, "waiting", () => {
|
|
589
|
+
if (!state.bufferingStartTime) {
|
|
590
|
+
emitter.emit("bufferingStarted", commonProperties);
|
|
591
|
+
state.bufferingStartTime = Date.now();
|
|
592
|
+
}
|
|
593
|
+
}),
|
|
594
|
+
on(video, "timeupdate", () => {
|
|
595
|
+
const status = getPlaybackStatus();
|
|
596
|
+
updateTimeInfo();
|
|
597
|
+
if (state.content.type === "lives") state.liveOffset = status.liveOffset < 10 ? 0 : status.liveOffset;
|
|
598
|
+
if (state.bufferingStartTime) {
|
|
599
|
+
emitter.emit("bufferingEnded", {
|
|
600
|
+
buffering_second: (Date.now() - state.bufferingStartTime) / 1e3,
|
|
601
|
+
...commonProperties
|
|
602
|
+
});
|
|
603
|
+
state.bufferingStartTime = void 0;
|
|
604
|
+
}
|
|
605
|
+
if (state.temporaryEvent && !state.seeking) {
|
|
606
|
+
state.status = "started";
|
|
607
|
+
state.lastStartTime = getPlaybackStatus().currentTime;
|
|
608
|
+
emitter.emit(state.temporaryEvent, commonProperties);
|
|
609
|
+
state.temporaryEvent = null;
|
|
610
|
+
}
|
|
611
|
+
}),
|
|
612
|
+
on(video, "pause", dispatchStop),
|
|
613
|
+
on(video, "seeking", () => {
|
|
614
|
+
state.seeking = true;
|
|
615
|
+
state.seekingFrom = state.currentTime;
|
|
616
|
+
}),
|
|
617
|
+
on(video, "seeked", () => {
|
|
618
|
+
state.seeking = false;
|
|
619
|
+
if (state.content.type !== "videos" || !state.hasFirstSeeked && (!/started|stopped/.test(state.status) || !state.playedDuration > .25) || Math.abs(state.seekingFrom - getPlaybackStatus().currentTime) < .01) {
|
|
620
|
+
if (state.hasFirstSeeked !== void 0) state.hasFirstSeeked = true;
|
|
621
|
+
return;
|
|
622
|
+
}
|
|
623
|
+
emitter.emit("seeked", {
|
|
624
|
+
seeking_from: state.seekingFrom,
|
|
625
|
+
seeking_to: formatFloatToZero(getPlaybackStatus().currentTime),
|
|
626
|
+
...commonProperties
|
|
627
|
+
});
|
|
628
|
+
}),
|
|
629
|
+
on(video, "skip", (data) => {
|
|
630
|
+
emitter.emit("skip", {
|
|
631
|
+
skip_from: data.skipFrom,
|
|
632
|
+
skip_to: data.skipTo,
|
|
633
|
+
trigger_method: data.triggerMethod,
|
|
634
|
+
...commonProperties
|
|
635
|
+
});
|
|
636
|
+
}),
|
|
637
|
+
on(video, "ratechange", () => {
|
|
638
|
+
if (video.playbackRate === 0) return;
|
|
639
|
+
emitter.emit("playbackSpeedChange", {
|
|
640
|
+
playbackSpeed: video.playbackRate,
|
|
641
|
+
...commonProperties
|
|
642
|
+
});
|
|
643
|
+
}),
|
|
644
|
+
once(video, "ended", handleEnd),
|
|
645
|
+
once(video, "loadedAdMetadata", (event) => {
|
|
646
|
+
state.ssaiProvider = event.data.provider;
|
|
647
|
+
state.adPlayedDuration = 0;
|
|
648
|
+
}),
|
|
649
|
+
on(session, "adBreakStarted", () => {
|
|
650
|
+
dispatchStop();
|
|
651
|
+
state.isPlayingAd = true;
|
|
652
|
+
if (!state.seeking) dispatchStart();
|
|
653
|
+
}),
|
|
654
|
+
on(session, "adBreakEnded", () => {
|
|
655
|
+
dispatchStop();
|
|
656
|
+
state.isPlayingAd = false;
|
|
657
|
+
if (!state.seeking) dispatchStart();
|
|
658
|
+
})
|
|
659
|
+
];
|
|
660
|
+
return {
|
|
661
|
+
addEventListener: (name, handler) => emitter.on(name, handler),
|
|
662
|
+
all: (handler) => emitter.on("*", handler),
|
|
663
|
+
emit: (name, { currentTime }, properties) => {
|
|
664
|
+
if (/seek/.test(name) && state.content.type !== "videos") return;
|
|
665
|
+
if (name in logEventNames) emitter.emit(name, {
|
|
666
|
+
...properties,
|
|
667
|
+
...commonProperties
|
|
668
|
+
});
|
|
669
|
+
},
|
|
670
|
+
setUserHasClickedBackButton: () => {
|
|
671
|
+
handleEnd();
|
|
672
|
+
dispatchStop();
|
|
673
|
+
state.userHasClickedBackButton = !state.userHasClickedBackButton;
|
|
674
|
+
},
|
|
675
|
+
updateContent: (content) => {
|
|
676
|
+
const sectionChanged = state.content.section && state.content.section.startTime !== content.section?.startTime;
|
|
677
|
+
if (sectionChanged) dispatchStop();
|
|
678
|
+
state.content = content;
|
|
679
|
+
updateTimeInfo();
|
|
680
|
+
if (state.content.type === LIVES) commonProperties.live_offset = state.liveOffset || 0;
|
|
681
|
+
if (sectionChanged) dispatchStart();
|
|
682
|
+
},
|
|
683
|
+
reset: () => {
|
|
684
|
+
handleEnd();
|
|
685
|
+
registered.forEach((off) => off());
|
|
686
|
+
}
|
|
687
|
+
};
|
|
688
|
+
};
|
|
689
|
+
|
|
690
|
+
//#endregion
|
|
691
|
+
//#region src/playbackSession/getCache.js
|
|
692
|
+
const getCache$1 = async (cache, key, { load, isValid }) => {
|
|
693
|
+
if (!cache) return load();
|
|
694
|
+
if (cache[key] && (!isValid || isValid(cache[key]))) return cache[key];
|
|
695
|
+
if (!cache[key]) cache[key] = {};
|
|
696
|
+
cache[key] = {
|
|
697
|
+
...cache[key],
|
|
698
|
+
...await load()
|
|
699
|
+
};
|
|
700
|
+
return cache[key];
|
|
701
|
+
};
|
|
702
|
+
var getCache_default = getCache$1;
|
|
703
|
+
|
|
704
|
+
//#endregion
|
|
705
|
+
//#region src/playbackSession/startSession.js
|
|
706
|
+
const deepEqual = (current, updated) => JSON.stringify(current) === JSON.stringify(updated);
|
|
707
|
+
const HEARTBEAT_INTERVAL_MS = 1e4;
|
|
708
|
+
const UPDATE_INTERVAL_MS = 1e4;
|
|
709
|
+
const isFreshCache = (content) => Date.now() <= content.end_time * 1e3;
|
|
710
|
+
let lastSession = Promise.resolve();
|
|
711
|
+
const programRemainTime = (content, { media = {} }) => {
|
|
712
|
+
const programCurrentTime = isLiveDuration(media.duration) ? Date.now() / 1e3 : content.start_time + media.currentTime;
|
|
713
|
+
return content.end_time - programCurrentTime;
|
|
714
|
+
};
|
|
715
|
+
const startPlaybackSession = async (playbackApi, options = {}) => {
|
|
716
|
+
await Promise.race([lastSession, new Promise((resolve) => {
|
|
717
|
+
setTimeout(resolve, UPDATE_INTERVAL_MS / 2);
|
|
718
|
+
})]);
|
|
719
|
+
let unlockSession;
|
|
720
|
+
lastSession = new Promise((resolve) => {
|
|
721
|
+
unlockSession = resolve;
|
|
722
|
+
});
|
|
723
|
+
const emitter = mitt_default();
|
|
724
|
+
const { type: type$1, id, getCurrentTime, cache } = options;
|
|
725
|
+
const cacheKey = options.key || `${type$1}/${id}`;
|
|
726
|
+
const { onChangeContent, onSessionStart, heartbeatTime = HEARTBEAT_INTERVAL_MS, updateTime = UPDATE_INTERVAL_MS } = options;
|
|
727
|
+
const handlers = { onReset: options.onReset };
|
|
728
|
+
const onReset = (params) => handlers.onReset?.(params);
|
|
729
|
+
const state = {
|
|
730
|
+
content: { end_time: Date.now() / 1e3 },
|
|
731
|
+
currentContent: { end_time: Date.now() / 1e3 }
|
|
732
|
+
};
|
|
733
|
+
const updateContent = async ({ useCache } = {}) => {
|
|
734
|
+
const content = await getCache_default(cache, cacheKey, {
|
|
735
|
+
load: () => playbackApi.getContent({
|
|
736
|
+
type: type$1,
|
|
737
|
+
id
|
|
738
|
+
}),
|
|
739
|
+
isValid: (data) => useCache && isFreshCache(data)
|
|
740
|
+
});
|
|
741
|
+
if (content.end) emitter.emit("liveEnd", content);
|
|
742
|
+
if (!state.content?.end_time && content?.end_time) return onReset({
|
|
743
|
+
reason: "program start",
|
|
744
|
+
sourceChange: true
|
|
745
|
+
});
|
|
746
|
+
const timeBeforeEnd = programRemainTime(state.currentContent, options) * 1e3;
|
|
747
|
+
if (timeBeforeEnd > 0 && timeBeforeEnd <= UPDATE_INTERVAL_MS) setTimeout(() => {
|
|
748
|
+
if (programRemainTime(state.currentContent, options) > .5) return;
|
|
749
|
+
if (isLiveDuration(options.media.duration)) updateContent({ useCache: true });
|
|
750
|
+
else onReset({
|
|
751
|
+
reason: "program end",
|
|
752
|
+
sourceChange: true
|
|
753
|
+
});
|
|
754
|
+
}, timeBeforeEnd);
|
|
755
|
+
if (!deepEqual(content, state.content)) {
|
|
756
|
+
state.content = content;
|
|
757
|
+
const skipUiUpdate = !useCache;
|
|
758
|
+
if (!skipUiUpdate) state.currentContent = content;
|
|
759
|
+
onChangeContent?.({
|
|
760
|
+
type: type$1,
|
|
761
|
+
...content,
|
|
762
|
+
skipUiUpdate
|
|
763
|
+
});
|
|
764
|
+
}
|
|
765
|
+
};
|
|
766
|
+
const waitForContent = Promise.race([updateContent({ useCache: true }), new Promise((resolve) => {
|
|
767
|
+
setTimeout(resolve, UPDATE_INTERVAL_MS);
|
|
768
|
+
})]);
|
|
769
|
+
const sessionInfo = await playbackApi.startPlayback({
|
|
770
|
+
type: type$1,
|
|
771
|
+
id
|
|
772
|
+
}).catch((error) => {
|
|
773
|
+
unlockSession();
|
|
774
|
+
return Promise.reject(error);
|
|
775
|
+
});
|
|
776
|
+
onSessionStart?.(sessionInfo);
|
|
777
|
+
const requestParams = {
|
|
778
|
+
type: type$1,
|
|
779
|
+
id,
|
|
780
|
+
token: sessionInfo.token
|
|
781
|
+
};
|
|
782
|
+
state.token = sessionInfo.token;
|
|
783
|
+
state.sources = (await getCache_default(cache, cacheKey, {
|
|
784
|
+
load: () => playbackApi.getPlaybackInfo({
|
|
785
|
+
type: type$1,
|
|
786
|
+
id,
|
|
787
|
+
token: state.token
|
|
788
|
+
}),
|
|
789
|
+
isValid: (data) => data.sources && isFreshCache(data)
|
|
790
|
+
})).sources;
|
|
791
|
+
let updateIntervalId;
|
|
792
|
+
if (type$1 === "lives") updateIntervalId = setInterval(updateContent, updateTime);
|
|
793
|
+
let lastPlayedTime;
|
|
794
|
+
const updateLastPlayed = () => {
|
|
795
|
+
const currentTime = getCurrentTime?.();
|
|
796
|
+
if (!lastPlayedTime) {
|
|
797
|
+
lastPlayedTime = currentTime;
|
|
798
|
+
return;
|
|
799
|
+
}
|
|
800
|
+
if (currentTime >= 0 && lastPlayedTime !== currentTime) {
|
|
801
|
+
lastPlayedTime = currentTime;
|
|
802
|
+
playbackApi.updateLastPlayed({
|
|
803
|
+
...requestParams,
|
|
804
|
+
time: currentTime
|
|
805
|
+
});
|
|
806
|
+
}
|
|
807
|
+
};
|
|
808
|
+
if (type$1 === "videos") updateIntervalId = setInterval(updateLastPlayed, updateTime);
|
|
809
|
+
const heartbeatIntervalId = setInterval(() => playbackApi.heartbeat(requestParams).catch((error) => {
|
|
810
|
+
if (/4\d\d/.test(error.response?.status)) {
|
|
811
|
+
clearInterval(heartbeatIntervalId);
|
|
812
|
+
onReset?.({
|
|
813
|
+
sourceChange: false,
|
|
814
|
+
reason: "Invalid token"
|
|
815
|
+
});
|
|
816
|
+
}
|
|
817
|
+
}), heartbeatTime);
|
|
818
|
+
const end = ({ preserveSource } = {}) => {
|
|
819
|
+
handlers.onReset = () => {};
|
|
820
|
+
if (!preserveSource && cache?.[cacheKey]) cache[cacheKey].sources = void 0;
|
|
821
|
+
if (getCurrentTime?.() > .5) updateLastPlayed();
|
|
822
|
+
clearInterval(updateIntervalId);
|
|
823
|
+
clearInterval(heartbeatIntervalId);
|
|
824
|
+
clearTimeout(state.endTimeoutId);
|
|
825
|
+
emitter.emit("playbackEnded");
|
|
826
|
+
return playbackApi.endPlayback(requestParams).finally(unlockSession);
|
|
827
|
+
};
|
|
828
|
+
emitter.on("liveEnd", end);
|
|
829
|
+
await waitForContent;
|
|
830
|
+
return {
|
|
831
|
+
...state,
|
|
832
|
+
token: sessionInfo.token,
|
|
833
|
+
drmPortalUrl: DEBUG_OPTIONS.DRM_PROTAL_URL || sessionInfo.drm_portal_url,
|
|
834
|
+
updateLastPlayed,
|
|
835
|
+
end,
|
|
836
|
+
replaceApi: (replacement) => {
|
|
837
|
+
playbackApi = replacement;
|
|
838
|
+
}
|
|
839
|
+
};
|
|
840
|
+
};
|
|
841
|
+
var startSession_default = startPlaybackSession;
|
|
842
|
+
|
|
843
|
+
//#endregion
|
|
844
|
+
//#region src/browserCompatibility.js
|
|
845
|
+
const isWindowsEdge = () => typeof navigator !== "undefined" && /Windows/.test(navigator.userAgent) && /Edg/.test(navigator.userAgent);
|
|
846
|
+
const getPreferredKeySystems = () => isWindowsEdge() ? ["com.microsoft.playready"] : ["com.apple.fps.1_0", "com.widevine.alpha"];
|
|
847
|
+
const getDefaultDrmOptions = ({ manifestType, licenseUri, certificateUri = `${licenseUri}/fairplay_cert`, headers }) => {
|
|
848
|
+
const keySystemForDash = isWindowsEdge() ? "playready" : "widevine";
|
|
849
|
+
return /hls/i.test(manifestType) ? { fairplay: {
|
|
850
|
+
licenseUri,
|
|
851
|
+
certificateUri,
|
|
852
|
+
headers
|
|
853
|
+
} } : { [keySystemForDash]: {
|
|
854
|
+
licenseUri,
|
|
855
|
+
headers
|
|
856
|
+
} };
|
|
857
|
+
};
|
|
858
|
+
|
|
859
|
+
//#endregion
|
|
860
|
+
//#region src/playbackSession/api.js
|
|
861
|
+
const getStreamInfo = (sources = [], { type: type$1 = "", licenseUri, certificateUri = licenseUri && new URL(`fairplay_cert`, licenseUri).toString(), licenseHeaders: headers, thumbnailEnabled, getDrmOptions = getDefaultDrmOptions, getTextTrackInfo } = {}) => {
|
|
862
|
+
const activeSource = sources.find((source) => (source.subdub || source.type || "").toLowerCase() === type$1) || sources[0];
|
|
863
|
+
return (activeSource?.manifests || []).map((manifest) => ({
|
|
864
|
+
...manifest,
|
|
865
|
+
type: manifest.protocol,
|
|
866
|
+
src: manifest.url,
|
|
867
|
+
drm: getDrmOptions({
|
|
868
|
+
manifestType: manifest.protocol,
|
|
869
|
+
licenseUri,
|
|
870
|
+
certificateUri,
|
|
871
|
+
headers
|
|
872
|
+
}),
|
|
873
|
+
qualityOptions: manifest.resolutions.map(({ height }) => ({
|
|
874
|
+
label: height,
|
|
875
|
+
value: height,
|
|
876
|
+
options: { maxHeight: height }
|
|
877
|
+
}))
|
|
878
|
+
})).concat(thumbnailEnabled && activeSource?.thumbnail_seeking_url && {
|
|
879
|
+
type: "thumbnail",
|
|
880
|
+
src: activeSource.thumbnail_seeking_url
|
|
881
|
+
}).concat(Object.entries(activeSource?.subtitle?.webvtt || {}).map(([language, url]) => ({
|
|
882
|
+
type: "text/vtt",
|
|
883
|
+
src: url,
|
|
884
|
+
language,
|
|
885
|
+
label: language,
|
|
886
|
+
...getTextTrackInfo?.({
|
|
887
|
+
language,
|
|
888
|
+
url
|
|
889
|
+
}, activeSource)
|
|
890
|
+
}))).filter(Boolean);
|
|
891
|
+
};
|
|
892
|
+
|
|
893
|
+
//#endregion
|
|
894
|
+
//#region src/playbackSession/preload.js
|
|
895
|
+
const getCache = async (cache, key, { load, isValid }) => {
|
|
896
|
+
if (!cache) return load();
|
|
897
|
+
if (cache[key] && (!isValid || isValid(cache[key]))) return cache[key];
|
|
898
|
+
if (!cache[key]) cache[key] = {};
|
|
899
|
+
cache[key] = {
|
|
900
|
+
...cache[key],
|
|
901
|
+
...await load()
|
|
902
|
+
};
|
|
903
|
+
return cache[key];
|
|
904
|
+
};
|
|
905
|
+
const preload = (cache, playbackApi, preloadList) => preloadList.reduce(async (last, { contentType: type$1, contentId: id, contentKey: key = `${type$1}/${id}` }) => {
|
|
906
|
+
await last;
|
|
907
|
+
return getCache(cache, key, { load: () => playbackApi.getContent({
|
|
908
|
+
type: type$1,
|
|
909
|
+
id
|
|
910
|
+
}) });
|
|
911
|
+
}, Promise.resolve());
|
|
912
|
+
var preload_default = preload;
|
|
913
|
+
|
|
914
|
+
//#endregion
|
|
915
|
+
//#region package.json
|
|
916
|
+
var version = "0.5.0-beta.0";
|
|
917
|
+
|
|
918
|
+
//#endregion
|
|
919
|
+
//#region src/constants.js
|
|
920
|
+
const PLAYER_VERSION = version;
|
|
921
|
+
|
|
922
|
+
//#endregion
|
|
923
|
+
//#region src/PremiumPlusPlayer.jsx
|
|
924
|
+
const padTime = (value) => Math.floor(value).toString().padStart(2, "0");
|
|
925
|
+
const getChannelTime = (time) => {
|
|
926
|
+
const eventTime = /* @__PURE__ */ new Date(time * 1e3);
|
|
927
|
+
eventTime.setUTCHours(eventTime.getUTCHours() + 9);
|
|
928
|
+
const hourMinuteSecondArr = eventTime.toUTCString().split(" ")[4].split(":");
|
|
929
|
+
const hour = padTime(hourMinuteSecondArr[0]);
|
|
930
|
+
const minute = padTime(hourMinuteSecondArr[1]);
|
|
931
|
+
return hour + ":" + minute;
|
|
932
|
+
};
|
|
933
|
+
const CastState = {
|
|
934
|
+
NO_DEVICES_AVAILABLE: "NO_DEVICES_AVAILABLE",
|
|
935
|
+
CONNECTED: "CONNECTED",
|
|
936
|
+
CONNECTING: "CONNECTING",
|
|
937
|
+
NOT_CONNECTED: "NOT_CONNECTED"
|
|
938
|
+
};
|
|
939
|
+
const getEnterpriseDrmHeaders = ({ token, tokenType = "playback" }) => {
|
|
940
|
+
if (DEBUG_OPTIONS.DRM_PROTAL_URL) return void 0;
|
|
941
|
+
return { "X-Custom-Data": `token_type=${tokenType}&token_value=${token}&widevine_security_level=L3` };
|
|
942
|
+
};
|
|
943
|
+
const sessionCache = {};
|
|
944
|
+
const getCastState = () => window.cast?.framework?.CastContext.getInstance()?.getCastState() || CastState.NO_DEVICES_AVAILABLE;
|
|
945
|
+
const PremiumPlusPlayer = ({ controls, preload: preload$1 = "auto", preloadList = [], currentTime, quality, sourceType, host, accessToken, deviceId, headers, params, contentType, contentId, contentKey = `${contentType}/${contentId}`, autoplayNext, thumbnailSeeking, plugins = [], settings: appSettings = {}, coverImageUrl, coverImageDisplay = "auto", recommendation, uiElements: { castButton, ...uiElements } = {}, playerRef, children, onError, onApiError, onBack, onPlaybackStateChange, onPlayerLoaded, onChange, onPlaybackApiResponse, sendLog, playbackState: appPlaybackState, turnOnSkipOpening, shouldHideSkipButton = false, playerToModuleErrorCodeMap, drmTokenType, ...rest }) => {
|
|
946
|
+
const videoRef = useRef();
|
|
947
|
+
const corePlayerRef = useRef();
|
|
948
|
+
const lastSession$1 = useRef({});
|
|
949
|
+
const logTarget = useRef();
|
|
950
|
+
const preferAppTime = useRef(currentTime >= 0);
|
|
951
|
+
const [playbackState, setPlaybackState] = useState(() => getCastState() === CastState.CONNECTED ? "casting" : "initial");
|
|
952
|
+
const [playbackInfo, setPlaybackInfo] = useState({ sources: [] });
|
|
953
|
+
const [contentData, setContentData] = useState({});
|
|
954
|
+
const [targetPlaybackState, setTargetPlaybackState] = useState(appPlaybackState);
|
|
955
|
+
const [uiState, dispatch] = useReducer(reduceUi, getInitUiState({ recommendation: true }));
|
|
956
|
+
useEffect(() => {
|
|
957
|
+
const revokeLock = ensureTabLock();
|
|
958
|
+
if (!revokeLock) videoRef.current.dispatchEvent(Object.assign(new CustomEvent("error"), { error: {
|
|
959
|
+
name: "PlaycraftApiError",
|
|
960
|
+
code: 10021
|
|
961
|
+
} }));
|
|
962
|
+
return revokeLock;
|
|
963
|
+
}, []);
|
|
964
|
+
const api = useMemo(() => createApi({
|
|
965
|
+
host,
|
|
966
|
+
accessToken,
|
|
967
|
+
deviceId,
|
|
968
|
+
headers,
|
|
969
|
+
params
|
|
970
|
+
}, { onError: onApiError }), [
|
|
971
|
+
host,
|
|
972
|
+
accessToken,
|
|
973
|
+
deviceId,
|
|
974
|
+
headers,
|
|
975
|
+
params
|
|
976
|
+
]);
|
|
977
|
+
useEffect(() => lastSession$1.current?.replaceApi?.(api), [api]);
|
|
978
|
+
useEffect(() => setupLicenseServerOverride(), []);
|
|
979
|
+
const endSession = ({ preserveSource, end } = {}) => {
|
|
980
|
+
preferAppTime.current = false;
|
|
981
|
+
if (end) end();
|
|
982
|
+
if (lastSession$1.current?.end) lastSession$1.current = {
|
|
983
|
+
request: lastSession$1.current.end().catch((error) => {
|
|
984
|
+
console.warn("Ignore end session error", error);
|
|
985
|
+
}),
|
|
986
|
+
...preserveSource && { sources: lastSession$1.current.sources }
|
|
987
|
+
};
|
|
988
|
+
if (!preserveSource) {
|
|
989
|
+
setPlaybackInfo({ sources: [] });
|
|
990
|
+
setContentData({ chapters: [] });
|
|
991
|
+
}
|
|
992
|
+
};
|
|
993
|
+
const getPlaybackStatus = useCallback(() => ({
|
|
994
|
+
...getMediaTime(videoRef.current, {
|
|
995
|
+
player: corePlayerRef.current,
|
|
996
|
+
plugins: allPlugins
|
|
997
|
+
}),
|
|
998
|
+
...contentType?.startsWith("live") && { currentTime: Math.floor(Date.now() / 1e3) }
|
|
999
|
+
}), []);
|
|
1000
|
+
let handleReset;
|
|
1001
|
+
let allPlugins;
|
|
1002
|
+
const load = async () => {
|
|
1003
|
+
if (await lastSession$1.current.request === "cancel") return;
|
|
1004
|
+
const restPlayerName = ["shaka", "bitmovin"].find((name) => name in rest);
|
|
1005
|
+
if (logTarget.current?.reset) {
|
|
1006
|
+
const previousLogTarget = logTarget.current;
|
|
1007
|
+
setTimeout(() => previousLogTarget.reset(), 1);
|
|
1008
|
+
}
|
|
1009
|
+
const logInstance = mapLogEvents({
|
|
1010
|
+
playerName: restPlayerName || "shaka",
|
|
1011
|
+
version: PLAYER_VERSION,
|
|
1012
|
+
video: videoRef.current,
|
|
1013
|
+
contentData,
|
|
1014
|
+
getPlaybackStatus,
|
|
1015
|
+
playerToModuleErrorCodeMap
|
|
1016
|
+
});
|
|
1017
|
+
logTarget.current = logInstance;
|
|
1018
|
+
if (typeof sendLog === "function") logInstance.all((type$1, data) => sendLog(logEventNames[type$1], data));
|
|
1019
|
+
const request = startSession_default(api, {
|
|
1020
|
+
type: contentType,
|
|
1021
|
+
id: contentId,
|
|
1022
|
+
key: contentKey,
|
|
1023
|
+
media: videoRef.current,
|
|
1024
|
+
getCurrentTime: () => getMediaTime(videoRef.current, {
|
|
1025
|
+
player: corePlayerRef.current,
|
|
1026
|
+
plugins
|
|
1027
|
+
}).currentTime,
|
|
1028
|
+
onChangeContent: (data) => {
|
|
1029
|
+
onPlaybackApiResponse?.("content", data);
|
|
1030
|
+
const currentContent = getContentInfo(data);
|
|
1031
|
+
if (currentContent.end || !currentContent.skipUiUpdate) setContentData((prev) => prev.chapters?.length > 0 ? {
|
|
1032
|
+
...currentContent,
|
|
1033
|
+
chapters: prev.chapters
|
|
1034
|
+
} : currentContent);
|
|
1035
|
+
logInstance.updateContent({
|
|
1036
|
+
...currentContent,
|
|
1037
|
+
type: contentType,
|
|
1038
|
+
id: contentId
|
|
1039
|
+
});
|
|
1040
|
+
},
|
|
1041
|
+
onReset: handleReset,
|
|
1042
|
+
onSessionStart: (resData) => {
|
|
1043
|
+
onPlaybackApiResponse?.("start", resData);
|
|
1044
|
+
},
|
|
1045
|
+
cache: sessionCache
|
|
1046
|
+
}).then((currentSession) => {
|
|
1047
|
+
lastSession$1.current = currentSession;
|
|
1048
|
+
if (!currentSession.content?.end) {
|
|
1049
|
+
onPlaybackApiResponse?.("info", currentSession);
|
|
1050
|
+
setPlaybackInfo({
|
|
1051
|
+
sources: currentSession.sources,
|
|
1052
|
+
token: currentSession.token,
|
|
1053
|
+
drmPortalUrl: currentSession.drmPortalUrl
|
|
1054
|
+
});
|
|
1055
|
+
}
|
|
1056
|
+
preload_default(sessionCache, api, preloadList);
|
|
1057
|
+
return currentSession;
|
|
1058
|
+
}).catch((result) => {
|
|
1059
|
+
const errorData = (result.data || result.response?.data)?.error;
|
|
1060
|
+
const error = errorData ? {
|
|
1061
|
+
name: "PlaycraftApiError",
|
|
1062
|
+
...errorData
|
|
1063
|
+
} : result;
|
|
1064
|
+
console.warn(error);
|
|
1065
|
+
videoRef.current.dispatchEvent(Object.assign(new CustomEvent("error"), { error }));
|
|
1066
|
+
});
|
|
1067
|
+
return () => {
|
|
1068
|
+
setTimeout(() => logInstance.reset(), 1);
|
|
1069
|
+
return request.then((session) => session?.end?.());
|
|
1070
|
+
};
|
|
1071
|
+
};
|
|
1072
|
+
handleReset = ({ reason = "", sourceChange } = {}) => {
|
|
1073
|
+
console.log("session reset:", reason);
|
|
1074
|
+
endSession({ preserveSource: !sourceChange });
|
|
1075
|
+
load();
|
|
1076
|
+
};
|
|
1077
|
+
const activeDevice = !/casting|error/.test(playbackState);
|
|
1078
|
+
useEffect(() => {
|
|
1079
|
+
if (appPlaybackState) setTargetPlaybackState(appPlaybackState);
|
|
1080
|
+
}, [appPlaybackState]);
|
|
1081
|
+
useEffect(() => {
|
|
1082
|
+
setTargetPlaybackState(void 0);
|
|
1083
|
+
}, [playbackState]);
|
|
1084
|
+
useEffect(() => {
|
|
1085
|
+
if (preload$1 !== "auto" || !activeDevice || !contentType || !contentId) return;
|
|
1086
|
+
const request = load();
|
|
1087
|
+
dispatch({ type: "content-change" });
|
|
1088
|
+
return () => request.then((end) => endSession({ end }));
|
|
1089
|
+
}, [activeDevice, contentType && contentId && contentKey]);
|
|
1090
|
+
useImperativeHandle(playerRef, () => ({
|
|
1091
|
+
load,
|
|
1092
|
+
getVideo: () => videoRef.current
|
|
1093
|
+
}));
|
|
1094
|
+
useEffect(() => linkAdState({
|
|
1095
|
+
contentType,
|
|
1096
|
+
plugins,
|
|
1097
|
+
dispatch,
|
|
1098
|
+
onAdSkip: () => setTargetPlaybackState("playing")
|
|
1099
|
+
}), [contentType]);
|
|
1100
|
+
const source = useMemo(() => !contentData.end && getStreamInfo(playbackInfo.sources, {
|
|
1101
|
+
type: sourceType,
|
|
1102
|
+
getTextTrackInfo: appSettings.getTextTrackInfo,
|
|
1103
|
+
licenseUri: playbackInfo.drmPortalUrl,
|
|
1104
|
+
licenseHeaders: getEnterpriseDrmHeaders({
|
|
1105
|
+
token: playbackInfo.token,
|
|
1106
|
+
tokenType: drmTokenType
|
|
1107
|
+
}),
|
|
1108
|
+
thumbnailEnabled: thumbnailSeeking
|
|
1109
|
+
}), [
|
|
1110
|
+
playbackInfo,
|
|
1111
|
+
contentData.end,
|
|
1112
|
+
sourceType,
|
|
1113
|
+
thumbnailSeeking
|
|
1114
|
+
]);
|
|
1115
|
+
const handleCastStateChange = (next) => {
|
|
1116
|
+
if (next === CastState.CONNECTED) setPlaybackState("casting");
|
|
1117
|
+
if (next === CastState.NO_DEVICES_AVAILABLE || next === CastState.NOT_CONNECTED) setPlaybackState("loading");
|
|
1118
|
+
};
|
|
1119
|
+
useEffect(() => subscribeCastState$1(handleCastStateChange), []);
|
|
1120
|
+
const settings = useMemo(() => ({
|
|
1121
|
+
...contentType === "lives" && { speedItems: [] },
|
|
1122
|
+
...appSettings
|
|
1123
|
+
}), [contentType, appSettings]);
|
|
1124
|
+
useEffect(() => {
|
|
1125
|
+
if (contentData.chapters?.length > 0) return dispatchChapterEvents({
|
|
1126
|
+
media: videoRef.current,
|
|
1127
|
+
chapters: contentData.chapters,
|
|
1128
|
+
getTime: () => videoRef.current?.currentTime
|
|
1129
|
+
});
|
|
1130
|
+
}, [contentData.chapters]);
|
|
1131
|
+
useEffect(() => {
|
|
1132
|
+
videoRef.current?.addEventListener("timeupdate", () => {
|
|
1133
|
+
if (videoRef.current.currentTime < 3) dispatch({ type: "close-panels" });
|
|
1134
|
+
});
|
|
1135
|
+
}, []);
|
|
1136
|
+
return /* @__PURE__ */ jsxs(PremiumPlayer, {
|
|
1137
|
+
shaka: { drm: { preferredKeySystems: getPreferredKeySystems() } },
|
|
1138
|
+
source: playbackState !== "error" && source,
|
|
1139
|
+
currentTime: preferAppTime.current ? currentTime : contentData.startTime + 1 / 30,
|
|
1140
|
+
controls: uiState.activePanel === "autoplay-next" || uiState.activePanel === "recommendation" && recommendation ? "title-only" : controls,
|
|
1141
|
+
title: contentData.title,
|
|
1142
|
+
channelTitle: /* @__PURE__ */ jsxs(Fragment, { children: [contentData.section?.start && /* @__PURE__ */ jsxs("span", { children: [
|
|
1143
|
+
getChannelTime(contentData.section.start),
|
|
1144
|
+
" -",
|
|
1145
|
+
" ",
|
|
1146
|
+
getChannelTime(contentData.section.end)
|
|
1147
|
+
] }), contentData.channelTitle] }),
|
|
1148
|
+
quality: {
|
|
1149
|
+
...quality,
|
|
1150
|
+
rewriteManifest: selectHlsQualities$1
|
|
1151
|
+
},
|
|
1152
|
+
settings,
|
|
1153
|
+
plugins,
|
|
1154
|
+
videoRef,
|
|
1155
|
+
marks: uiState.streamEvents?.map((event) => event.start),
|
|
1156
|
+
onError,
|
|
1157
|
+
sendLog: (name, data) => logTarget.current?.emit(name, data),
|
|
1158
|
+
onBack: onBack && (() => {
|
|
1159
|
+
logTarget.current?.setUserHasClickedBackButton();
|
|
1160
|
+
return onBack();
|
|
1161
|
+
}),
|
|
1162
|
+
onPlayerLoaded: (player) => {
|
|
1163
|
+
onPlayerLoaded?.(player);
|
|
1164
|
+
corePlayerRef.current = player;
|
|
1165
|
+
const handledErrors = {};
|
|
1166
|
+
player.addEventListener("error", (event) => {
|
|
1167
|
+
const errorMessage = [videoRef.current.error?.message].concat(event?.detail?.data).join(" ");
|
|
1168
|
+
if (!handledErrors[4012] && /MediaFoundationRenderer/i.test(errorMessage)) {
|
|
1169
|
+
handledErrors[4012] = true;
|
|
1170
|
+
videoRef.current.dispatchEvent(Object.assign(new CustomEvent("error"), { error: {
|
|
1171
|
+
code: 4012,
|
|
1172
|
+
name: "HDCP, Windows Edge, Analog"
|
|
1173
|
+
} }));
|
|
1174
|
+
}
|
|
1175
|
+
});
|
|
1176
|
+
},
|
|
1177
|
+
onPlaybackStateChange: (event, state) => {
|
|
1178
|
+
onPlaybackStateChange?.(event, state);
|
|
1179
|
+
setPlaybackState((current) => current !== "casting" ? state : current);
|
|
1180
|
+
if (state === "error") {
|
|
1181
|
+
lastSession$1.current.end?.();
|
|
1182
|
+
lastSession$1.current = {};
|
|
1183
|
+
}
|
|
1184
|
+
if (state === "paused") setTimeout(() => dispatch({ type: "close-panels" }), 66);
|
|
1185
|
+
if (videoRef.current.currentTime > .001 && (state === "paused" && playbackState !== "loading" || /seeking|waiting/.test(event.type))) lastSession$1.current.updateLastPlayed?.();
|
|
1186
|
+
if (state === "ended") dispatch(uiActions.playbackEnd({ hasRecommendation: Boolean(recommendation) }));
|
|
1187
|
+
},
|
|
1188
|
+
onChangeNext: contentData.next && (() => onChange?.(contentData.next)),
|
|
1189
|
+
onChangePrevious: contentData.previous && (() => onChange?.(contentData.previous)),
|
|
1190
|
+
onCast: async (request) => Object.assign(request.media, {
|
|
1191
|
+
contentId,
|
|
1192
|
+
contentID: contentId,
|
|
1193
|
+
customData: {
|
|
1194
|
+
itemType: contentType,
|
|
1195
|
+
...api.config,
|
|
1196
|
+
customHeaders: api.config?.headers,
|
|
1197
|
+
customQuery: api.config?.params,
|
|
1198
|
+
mediaSource: sourceType
|
|
1199
|
+
}
|
|
1200
|
+
}),
|
|
1201
|
+
uiElements: {
|
|
1202
|
+
...uiElements,
|
|
1203
|
+
...uiState.ad.total > 0 && getAdUi(uiState.ad, plugins, videoRef.current)
|
|
1204
|
+
},
|
|
1205
|
+
playbackState: targetPlaybackState,
|
|
1206
|
+
...rest,
|
|
1207
|
+
style: {
|
|
1208
|
+
"--seekbar-flex-basis": "calc(100% - 6em)",
|
|
1209
|
+
...recommendation && { "--bottom-spacing": "var(--bottom-line-height, 5rem)" }
|
|
1210
|
+
},
|
|
1211
|
+
children: [
|
|
1212
|
+
children,
|
|
1213
|
+
contentData && videoRef.current && /* @__PURE__ */ jsx(AutoplayPrompt, {
|
|
1214
|
+
next: contentData.next,
|
|
1215
|
+
chapters: contentData.chapters,
|
|
1216
|
+
videoRef,
|
|
1217
|
+
playbackState,
|
|
1218
|
+
autoplayNext: !videoRef.current?.loop && autoplayNext,
|
|
1219
|
+
turnOnSkipOpening,
|
|
1220
|
+
uiType: rest.uiType,
|
|
1221
|
+
hasRecommendation: !!recommendation,
|
|
1222
|
+
shouldHideSkipButton: shouldHideSkipButton || uiState.activePanel === "recommendation",
|
|
1223
|
+
getMedia: () => getMediaTime(videoRef.current, { plugins }),
|
|
1224
|
+
onChangeNext: () => onChange?.(contentData.next),
|
|
1225
|
+
onOpen: (state) => dispatch(uiActions.offerAutoplay(state)),
|
|
1226
|
+
onClose: () => {
|
|
1227
|
+
setTimeout(() => dispatch({
|
|
1228
|
+
type: "close-panels",
|
|
1229
|
+
name: "autoplay-next"
|
|
1230
|
+
}), 66);
|
|
1231
|
+
},
|
|
1232
|
+
onDismiss: (openOther) => dispatch(uiActions.dismissAutoplay({
|
|
1233
|
+
openOther,
|
|
1234
|
+
hasRecommendation: Boolean(recommendation)
|
|
1235
|
+
}))
|
|
1236
|
+
}),
|
|
1237
|
+
recommendation && uiState.activePanel !== "autoplay-next" && /* @__PURE__ */ jsx(RecommendationPanel_default, {
|
|
1238
|
+
title: recommendation.title || "",
|
|
1239
|
+
open: uiState.activePanel === "recommendation",
|
|
1240
|
+
onToggle: () => dispatch(uiActions.toggleRecommendationPanel()),
|
|
1241
|
+
children: recommendation.content || null
|
|
1242
|
+
}),
|
|
1243
|
+
contentData.end && /* @__PURE__ */ jsx("div", {
|
|
1244
|
+
className: "pinned",
|
|
1245
|
+
children: /* @__PURE__ */ jsx(LiveEnd, {
|
|
1246
|
+
onBack,
|
|
1247
|
+
onRetry: () => {
|
|
1248
|
+
handleReset({
|
|
1249
|
+
reason: "retry",
|
|
1250
|
+
sourceChange: true
|
|
1251
|
+
});
|
|
1252
|
+
}
|
|
1253
|
+
})
|
|
1254
|
+
}),
|
|
1255
|
+
(coverImageDisplay === "always" || preload$1 === "none" && coverImageUrl && source.length <= 0 && playbackState !== "error") && /* @__PURE__ */ jsx(CoverImage, { src: coverImageUrl })
|
|
1256
|
+
]
|
|
1257
|
+
});
|
|
1258
|
+
};
|
|
1259
|
+
var PremiumPlusPlayer_default = PremiumPlusPlayer;
|
|
1260
|
+
|
|
1261
|
+
//#endregion
|
|
1262
|
+
//#region src/playerUtils.js
|
|
1263
|
+
const validateBrowser = (browserWhiteList) => {
|
|
1264
|
+
const envError = validateEnvironment(browserWhiteList);
|
|
1265
|
+
if (envError) {
|
|
1266
|
+
if (typeof localStorage !== "undefined" && localStorage?.ENV_CHECK === "none") {
|
|
1267
|
+
console.warn("Skip validateBrowser(localStorage?.ENV_CHECK is none)", envError);
|
|
1268
|
+
return;
|
|
1269
|
+
}
|
|
1270
|
+
return {
|
|
1271
|
+
name: envError.name,
|
|
1272
|
+
data: envError
|
|
1273
|
+
};
|
|
1274
|
+
}
|
|
1275
|
+
};
|
|
1276
|
+
const dispatchPlaybackError = (error) => {
|
|
1277
|
+
document.getElementsByTagName("video")[0]?.dispatchEvent(Object.assign(new CustomEvent("error"), { error }));
|
|
1278
|
+
};
|
|
1279
|
+
|
|
1280
|
+
//#endregion
|
|
1281
|
+
//#region src/logger/useAmplitudeLogger.js
|
|
1282
|
+
const useAmplitudeLogger = ({ logger: setPlaybackRelatedEvt, remoteInfo: { endpoint, headers }, whiteList: { allowedPropertyList = [], allowedEventList = [] } = {} }) => {
|
|
1283
|
+
const amplitudeInfo = useRef(null);
|
|
1284
|
+
let playbackEventQueue = [];
|
|
1285
|
+
const propertyWhtieListSet = new Set(allowedPropertyList);
|
|
1286
|
+
const eventNamesWhiteListSet = new Set(allowedEventList);
|
|
1287
|
+
const fetchAmplitudeInfo = (playbackToken) => {
|
|
1288
|
+
if (playbackToken) axios.get(`${endpoint}?playback_token=${playbackToken}`, { headers: {
|
|
1289
|
+
"Content-Type": "application/json",
|
|
1290
|
+
...headers
|
|
1291
|
+
} }).then(({ data }) => {
|
|
1292
|
+
amplitudeInfo.current = data;
|
|
1293
|
+
});
|
|
1294
|
+
};
|
|
1295
|
+
const handleSendLog = (eventName, eventProps) => {
|
|
1296
|
+
if (eventNamesWhiteListSet.size > 0 && !eventNamesWhiteListSet.has(eventName)) return;
|
|
1297
|
+
if (propertyWhtieListSet.size > 0) {
|
|
1298
|
+
for (const eventProp of Object.keys(eventProps)) if (!propertyWhtieListSet.has(eventProp)) eventProps[eventProp] = null;
|
|
1299
|
+
}
|
|
1300
|
+
if (eventName === "ad_playback_started") eventProps.ad_type = "per-roll";
|
|
1301
|
+
if (eventName === "speed_setting_change") {
|
|
1302
|
+
eventProps.to_speed = eventProps.playback_speed;
|
|
1303
|
+
delete eventProps.playback_speed;
|
|
1304
|
+
}
|
|
1305
|
+
playbackEventQueue.push(eventProps);
|
|
1306
|
+
if (amplitudeInfo.current && playbackEventQueue.length > 0) {
|
|
1307
|
+
for (const playbackEventProps of playbackEventQueue) setPlaybackRelatedEvt({
|
|
1308
|
+
eventName,
|
|
1309
|
+
amplitudeInfo: amplitudeInfo.current,
|
|
1310
|
+
playbackEventProps
|
|
1311
|
+
});
|
|
1312
|
+
playbackEventQueue = [];
|
|
1313
|
+
}
|
|
1314
|
+
if (!amplitudeInfo.current) playbackEventQueue = [];
|
|
1315
|
+
};
|
|
1316
|
+
return {
|
|
1317
|
+
fetchAmplitudeInfo,
|
|
1318
|
+
handleSendLog
|
|
1319
|
+
};
|
|
1320
|
+
};
|
|
1321
|
+
var useAmplitudeLogger_default = useAmplitudeLogger;
|
|
1322
|
+
|
|
1323
|
+
//#endregion
|
|
1324
|
+
export { Button, CastSender, ClassicSettingsContainer, ImaDaiPlugin, InfoBarExtension, MenuItem, PremiumPlusPlayer_default as Player, castMedia, dispatchPlaybackError, handleIOSHeadphonesDisconnection, initSender, linkCast, selectHlsQualities, stopCast, subscribeCastState, useAmplitudeLogger_default as useAmplitudeLogger, validateBrowser };
|